{
  "version": 3,
  "sources": ["../src/utils/Utils.ts", "../src/parser/helpers.ts", "../src/utils/Log.ts", "../src/parser/misc.ts", "../src/parser/classes/misc/AccessibilityContext.ts", "../src/parser/classes/misc/AccessibilityData.ts", "../src/utils/Constants.ts", "../src/parser/parser.ts", "../src/parser/nodes.ts", "../src/utils/Cache.ts", "../src/utils/EventEmitterLike.ts", "../src/utils/FormatUtils.ts", "../src/utils/DashUtils.ts", "../src/parser/classes/PlayerStoryboardSpec.ts", "../dist/package.json", "../src/utils/StreamingInfo.ts", "../src/utils/DashManifest.tsx", "../src/utils/HTTPClient.ts", "../src/utils/LZW.ts", "../src/utils/BinarySerializer.ts", "../src/utils/ProtoUtils.ts", "../node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js", "../node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js", "../node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js", "../node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js", "../protos/generated/misc/params.ts", "../src/utils/javascript/helpers.ts", "../src/utils/javascript/matchers.ts", "../node_modules/meriyah/dist/meriyah.mjs", "../src/utils/javascript/JsAnalyzer.ts", "../src/utils/javascript/JsExtractor.ts", "../src/parser/classes/actions/OpenPopupAction.ts", "../src/parser/classes/Button.ts", "../src/parser/classes/DropdownItem.ts", "../src/parser/classes/Dropdown.ts", "../src/parser/classes/CreatePlaylistDialog.ts", "../src/parser/classes/commands/CommandExecutorCommand.ts", "../src/parser/classes/NavigationEndpoint.ts", "../src/parser/classes/misc/Thumbnail.ts", "../src/parser/classes/misc/EmojiRun.ts", "../src/parser/classes/misc/TextRun.ts", "../src/parser/classes/misc/Text.ts", "../src/parser/classes/ChannelExternalLinkView.ts", "../src/parser/classes/AboutChannelView.ts", "../src/parser/classes/AboutChannel.ts", "../src/parser/classes/AccountChannel.ts", "../src/parser/classes/AccountItem.ts", "../src/parser/classes/AccountItemSectionHeader.ts", "../src/parser/classes/CompactLink.ts", "../src/parser/classes/AccountItemSection.ts", "../src/parser/classes/AccountSectionList.ts", "../src/parser/classes/actions/AppendContinuationItemsAction.ts", "../src/parser/classes/actions/ChangeEngagementPanelVisibilityAction.ts", "../src/parser/classes/menus/MultiPageMenu.ts", "../src/parser/classes/actions/GetMultiPageMenuAction.ts", "../src/parser/classes/actions/SendFeedbackAction.ts", "../src/parser/classes/actions/SignalAction.ts", "../src/parser/classes/ChannelSwitcherPage.ts", "../src/parser/classes/actions/UpdateChannelSwitcherPageAction.ts", "../src/parser/classes/SortFilterSubMenu.ts", "../src/parser/classes/TranscriptFooter.ts", "../src/parser/classes/TranscriptSearchBox.ts", "../src/parser/classes/TranscriptSectionHeader.ts", "../src/parser/classes/TranscriptSegment.ts", "../src/parser/classes/TranscriptSegmentList.ts", "../src/parser/classes/TranscriptSearchPanel.ts", "../src/parser/classes/Transcript.ts", "../src/parser/classes/actions/UpdateEngagementPanelAction.ts", "../src/parser/classes/actions/UpdateSubscribeButtonAction.ts", "../src/parser/classes/ActiveAccountHeader.ts", "../src/parser/classes/MenuTitle.ts", "../src/parser/classes/PlaylistAddToOption.ts", "../src/parser/classes/AddToPlaylist.ts", "../src/parser/classes/Alert.ts", "../src/parser/classes/AlertWithButton.ts", "../src/parser/classes/AnimatedThumbnailOverlayView.ts", "../src/parser/classes/AttributionView.ts", "../src/parser/classes/AudioOnlyPlayability.ts", "../src/parser/classes/AutomixPreviewVideo.ts", "../src/parser/classes/AvatarView.ts", "../src/parser/classes/misc/CommandContext.ts", "../src/parser/classes/misc/RendererContext.ts", "../src/parser/classes/AvatarStackView.ts", "../src/parser/classes/ButtonView.ts", "../src/parser/classes/BackgroundPromo.ts", "../src/parser/classes/BackstageImage.ts", "../src/parser/classes/ToggleButton.ts", "../src/parser/classes/comments/CreatorHeart.ts", "../src/parser/classes/comments/CommentActionButtons.ts", "../src/parser/classes/ToggleButtonView.ts", "../src/parser/classes/LikeButtonView.ts", "../src/parser/classes/DislikeButtonView.ts", "../src/parser/classes/SegmentedLikeDislikeButtonView.ts", "../src/parser/classes/menus/MenuServiceItem.ts", "../src/parser/classes/DownloadButton.ts", "../src/parser/classes/menus/MenuServiceItemDownload.ts", "../src/parser/classes/SubscribeButtonView.ts", "../src/parser/classes/ListItemView.ts", "../src/parser/classes/menus/MenuFlexibleItem.ts", "../src/parser/classes/LikeButton.ts", "../src/parser/classes/FlexibleActionsView.ts", "../src/parser/classes/menus/Menu.ts", "../src/parser/classes/BackstagePost.ts", "../src/parser/classes/BackstagePostThread.ts", "../src/parser/classes/BadgeView.ts", "../src/parser/classes/SubFeedOption.ts", "../src/parser/classes/SubFeedSelector.ts", "../src/parser/classes/EomSettingsDisclaimer.ts", "../src/parser/classes/SearchBox.ts", "../src/parser/classes/BrowseFeedActions.ts", "../src/parser/classes/BrowserMediaSession.ts", "../src/parser/classes/ButtonCardView.ts", "../src/parser/classes/ChannelHeaderLinks.ts", "../src/parser/classes/ChannelHeaderLinksView.ts", "../src/parser/classes/ClipCreationTextInput.ts", "../src/parser/classes/ClipCreationScrubber.ts", "../src/parser/classes/ClipAdState.ts", "../src/parser/classes/ClipCreation.ts", "../src/parser/classes/ClipSection.ts", "../src/parser/classes/ContinuationItem.ts", "../src/parser/classes/EngagementPanelTitleHeader.ts", "../src/parser/classes/MacroMarkersInfoItem.ts", "../src/parser/classes/MacroMarkersListItem.ts", "../src/parser/classes/MacroMarkersList.ts", "../src/parser/classes/ProductList.ts", "../src/parser/classes/SectionList.ts", "../src/parser/classes/ExpandableVideoDescriptionBody.ts", "../src/parser/classes/SearchRefinementCard.ts", "../src/parser/classes/GameCard.ts", "../src/parser/classes/HorizontalList.ts", "../src/parser/classes/VideoSummaryParagraphView.ts", "../src/parser/classes/VideoSummaryContentView.ts", "../src/parser/classes/ExpandableMetadata.ts", "../src/parser/classes/MetadataBadge.ts", "../src/parser/classes/ThumbnailOverlayTimeStatus.ts", "../src/parser/classes/Video.ts", "../src/parser/classes/VideoCard.ts", "../src/parser/classes/ContentPreviewImageView.ts", "../src/parser/classes/VideoAttributeView.ts", "../src/parser/classes/HorizontalCardList.ts", "../src/parser/classes/Factoid.ts", "../src/parser/classes/UploadTimeFactoid.ts", "../src/parser/classes/ViewCountFactoid.ts", "../src/parser/classes/HypePointsFactoid.ts", "../src/parser/classes/VideoDescriptionHeader.ts", "../src/parser/classes/VideoDescriptionInfocardsSection.ts", "../src/parser/classes/InfoRow.ts", "../src/parser/classes/CompactVideo.ts", "../src/parser/classes/CarouselLockup.ts", "../src/parser/classes/VideoDescriptionMusicSection.ts", "../src/parser/classes/VideoDescriptionTranscriptSection.ts", "../src/parser/classes/StructuredDescriptionPlaylistLockup.ts", "../src/parser/classes/VideoDescriptionCourseSection.ts", "../src/parser/classes/VideoAttributesSectionView.ts", "../src/parser/classes/HowThisWasMadeSectionView.ts", "../src/parser/classes/ReelShelf.ts", "../src/parser/classes/MerchandiseShelf.ts", "../src/parser/classes/StructuredDescriptionContent.ts", "../src/parser/classes/EngagementPanelSectionList.ts", "../src/parser/classes/ChannelTagline.ts", "../src/parser/classes/SubscriptionNotificationToggleButton.ts", "../src/parser/classes/SubscribeButton.ts", "../src/parser/classes/C4TabbedHeader.ts", "../src/parser/classes/CallToActionButton.ts", "../src/parser/classes/Card.ts", "../src/parser/classes/CardCollection.ts", "../src/parser/classes/CarouselHeader.ts", "../src/parser/classes/CarouselItem.ts", "../src/parser/classes/TextCarouselItemView.ts", "../src/parser/classes/CarouselItemView.ts", "../src/parser/classes/CarouselTitleView.ts", "../src/parser/classes/Channel.ts", "../src/parser/classes/ChannelAboutFullMetadata.ts", "../src/parser/classes/ChannelAgeGate.ts", "../src/parser/classes/ChannelFeaturedContent.ts", "../src/parser/classes/ChannelMetadata.ts", "../src/parser/classes/ChannelMobileHeader.ts", "../src/parser/classes/ChannelOptions.ts", "../src/parser/classes/ChannelOwnerEmptyState.ts", "../src/parser/classes/ChannelSubMenu.ts", "../src/parser/classes/ChannelSwitcherHeader.ts", "../src/parser/classes/ChannelThumbnailWithLink.ts", "../src/parser/classes/ChannelVideoPlayer.ts", "../src/parser/classes/Chapter.ts", "../src/parser/classes/ChildVideo.ts", "../src/parser/classes/ChipView.ts", "../src/parser/classes/ChipBarView.ts", "../src/parser/classes/ChipCloudChip.ts", "../src/parser/classes/ChipCloud.ts", "../src/parser/classes/ClientSideToggleMenuItem.ts", "../src/parser/classes/CollaboratorInfoCardContent.ts", "../src/parser/classes/CollageHeroImage.ts", "../src/parser/classes/ThumbnailHoverOverlayView.ts", "../src/parser/classes/ThumbnailBadgeView.ts", "../src/parser/classes/ThumbnailOverlayBadgeView.ts", "../src/parser/classes/ThumbnailHoverOverlayToggleActionsView.ts", "../src/parser/classes/ThumbnailOverlayProgressBarView.ts", "../src/parser/classes/ThumbnailBottomOverlayView.ts", "../src/parser/classes/ThumbnailView.ts", "../src/parser/classes/CollectionThumbnailView.ts", "../src/parser/classes/commands/AddToPlaylistCommand.ts", "../src/parser/classes/commands/ContinuationCommand.ts", "../src/parser/classes/commands/GetKidsBlocklistPickerCommand.ts", "../src/parser/classes/commands/RunAttestationCommand.ts", "../src/parser/classes/commands/ShowDialogCommand.ts", "../src/parser/classes/commands/UpdateEngagementPanelContentCommand.ts", "../src/parser/classes/comments/AuthorCommentBadge.ts", "../src/parser/classes/comments/EmojiPicker.ts", "../src/parser/classes/comments/CommentDialog.ts", "../src/parser/classes/comments/CommentReplies.ts", "../src/parser/classes/comments/CommentReplyDialog.ts", "../src/parser/classes/comments/CommentsSimplebox.ts", "../src/parser/classes/comments/CommentsEntryPointTeaser.ts", "../src/parser/classes/comments/CommentsEntryPointHeader.ts", "../src/parser/classes/comments/CommentsHeader.ts", "../src/parser/classes/comments/CommentSimplebox.ts", "../src/parser/classes/comments/VoiceReplyContainerView.ts", "../src/parser/classes/comments/CommentView.ts", "../src/parser/classes/comments/CommentThread.ts", "../src/parser/classes/comments/PdgCommentChip.ts", "../src/parser/classes/comments/SponsorCommentBadge.ts", "../src/parser/classes/CompactChannel.ts", "../src/parser/classes/PlaylistCustomThumbnail.ts", "../src/parser/classes/PlaylistVideoThumbnail.ts", "../src/parser/classes/Playlist.ts", "../src/parser/classes/CompactMix.ts", "../src/parser/classes/CompactMovie.ts", "../src/parser/classes/CompactPlaylist.ts", "../src/parser/classes/CompactStation.ts", "../src/parser/classes/CompositeVideoPrimaryInfo.ts", "../src/parser/classes/ConfirmDialog.ts", "../src/parser/classes/ContentMetadataView.ts", "../src/parser/classes/Message.ts", "../src/parser/classes/ConversationBar.ts", "../src/parser/classes/CopyLink.ts", "../src/parser/classes/DropdownView.ts", "../src/parser/classes/TextFieldView.ts", "../src/parser/classes/CreatePlaylistDialogFormView.ts", "../src/parser/classes/DecoratedAvatarView.ts", "../src/parser/classes/HeatMarker.ts", "../src/parser/classes/TimedMarkerDecoration.ts", "../src/parser/classes/Heatmap.ts", "../src/parser/classes/MultiMarkersPlayerBar.ts", "../src/parser/classes/DecoratedPlayerBar.ts", "../src/parser/classes/DefaultPromoPanel.ts", "../src/parser/classes/DescriptionPreviewView.ts", "../src/parser/classes/DialogHeaderView.ts", "../src/parser/classes/PanelFooterView.ts", "../src/parser/classes/FormFooterView.ts", "../src/parser/classes/ListView.ts", "../src/parser/classes/DialogView.ts", "../src/parser/classes/DidYouMean.ts", "../src/parser/classes/DismissableDialogContentSection.ts", "../src/parser/classes/DismissableDialog.ts", "../src/parser/classes/DynamicTextView.ts", "../src/parser/classes/misc/ChildElement.ts", "../src/parser/classes/Element.ts", "../src/parser/classes/EmergencyOnebox.ts", "../src/parser/classes/EmojiPickerCategory.ts", "../src/parser/classes/EmojiPickerCategoryButton.ts", "../src/parser/classes/EmojiPickerUpsellCategory.ts", "../src/parser/classes/endpoints/AddToPlaylistServiceEndpoint.ts", "../src/parser/classes/endpoints/AddToPlaylistEndpoint.ts", "../src/parser/classes/endpoints/BrowseEndpoint.ts", "../src/parser/classes/endpoints/CreateCommentEndpoint.ts", "../src/parser/classes/endpoints/CreatePlaylistServiceEndpoint.ts", "../src/parser/classes/endpoints/DeletePlaylistEndpoint.ts", "../src/parser/classes/endpoints/FeedbackEndpoint.ts", "../src/parser/classes/endpoints/GetAccountsListInnertubeEndpoint.ts", "../src/parser/classes/endpoints/HideEngagementPanelEndpoint.ts", "../src/parser/classes/endpoints/LikeEndpoint.ts", "../src/parser/classes/endpoints/LiveChatItemContextMenuEndpoint.ts", "../src/parser/classes/endpoints/ModifyChannelNotificationPreferenceEndpoint.ts", "../src/parser/classes/endpoints/PerformCommentActionEndpoint.ts", "../src/parser/classes/endpoints/PlaylistEditEndpoint.ts", "../src/parser/classes/endpoints/WatchEndpoint.ts", "../src/parser/classes/endpoints/PrefetchWatchCommand.ts", "../src/parser/classes/endpoints/ReelWatchEndpoint.ts", "../src/parser/classes/endpoints/SearchEndpoint.ts", "../src/parser/classes/endpoints/ShareEntityServiceEndpoint.ts", "../src/parser/classes/endpoints/ShareEndpoint.ts", "../src/parser/classes/endpoints/ShareEntityEndpoint.ts", "../src/parser/classes/endpoints/ShowEngagementPanelEndpoint.ts", "../src/parser/classes/endpoints/SignalServiceEndpoint.ts", "../src/parser/classes/endpoints/SubscribeEndpoint.ts", "../src/parser/classes/endpoints/UnsubscribeEndpoint.ts", "../src/parser/classes/endpoints/WatchNextEndpoint.ts", "../src/parser/classes/Endscreen.ts", "../src/parser/classes/EndscreenElement.ts", "../src/parser/classes/EndScreenPlaylist.ts", "../src/parser/classes/EndScreenVideo.ts", "../src/parser/classes/ExpandableTab.ts", "../src/parser/classes/ExpandedShelfContents.ts", "../src/parser/classes/FancyDismissibleDialog.ts", "../src/parser/classes/FeedFilterChipBar.ts", "../src/parser/classes/FeedNudge.ts", "../src/parser/classes/FeedTabbedHeader.ts", "../src/parser/classes/ToggleFormField.ts", "../src/parser/classes/Form.ts", "../src/parser/classes/FormPopup.ts", "../src/parser/classes/GameDetails.ts", "../src/parser/classes/Grid.ts", "../src/parser/classes/GridChannel.ts", "../src/parser/classes/GridHeader.ts", "../src/parser/classes/GridMix.ts", "../src/parser/classes/GridMovie.ts", "../src/parser/classes/GridPlaylist.ts", "../src/parser/classes/GridShelfView.ts", "../src/parser/classes/ShowCustomThumbnail.ts", "../src/parser/classes/ThumbnailOverlayBottomPanel.ts", "../src/parser/classes/GridShow.ts", "../src/parser/classes/GridVideo.ts", "../src/parser/classes/GuideEntry.ts", "../src/parser/classes/GuideCollapsibleEntry.ts", "../src/parser/classes/GuideCollapsibleSectionEntry.ts", "../src/parser/classes/GuideDownloadsEntry.ts", "../src/parser/classes/GuideSection.ts", "../src/parser/classes/GuideSubscriptionsSection.ts", "../src/parser/classes/HashtagHeader.ts", "../src/parser/classes/HashtagTile.ts", "../src/parser/classes/HeroPlaylistThumbnail.ts", "../src/parser/classes/HighlightsCarousel.ts", "../src/parser/classes/SearchSuggestion.ts", "../src/parser/classes/HistorySuggestion.ts", "../src/parser/classes/HorizontalMovieList.ts", "../src/parser/classes/IconLink.ts", "../src/parser/classes/ImageBannerView.ts", "../src/parser/classes/IncludingResultsFor.ts", "../src/parser/classes/InfoPanelContent.ts", "../src/parser/classes/InfoPanelContainer.ts", "../src/parser/classes/InteractiveTabbedHeader.ts", "../src/parser/classes/ItemSectionHeader.ts", "../src/parser/classes/ItemSectionTab.ts", "../src/parser/classes/ItemSectionTabbedHeader.ts", "../src/parser/classes/SortFilterHeader.ts", "../src/parser/classes/ItemSection.ts", "../src/parser/classes/LiveChat.ts", "../src/parser/classes/livechat/items/LiveChatBannerHeader.ts", "../src/parser/classes/livechat/items/LiveChatBanner.ts", "../src/parser/classes/livechat/AddBannerToLiveChatCommand.ts", "../src/parser/classes/livechat/AddChatItemAction.ts", "../src/parser/classes/livechat/AddLiveChatTickerItemAction.ts", "../src/parser/classes/livechat/DimChatItemAction.ts", "../src/parser/classes/livechat/items/BumperUserEduContentView.ts", "../src/parser/classes/livechat/items/CreatorHeartView.ts", "../src/parser/classes/livechat/items/LiveChatAutoModMessage.ts", "../src/parser/classes/livechat/items/LiveChatBannerChatSummary.ts", "../src/parser/classes/livechat/items/LiveChatBannerPoll.ts", "../src/parser/classes/livechat/items/LiveChatBannerRedirect.ts", "../src/parser/classes/livechat/items/LiveChatItemBumperView.ts", "../src/parser/classes/livechat/items/LiveChatMembershipItem.ts", "../src/parser/classes/livechat/items/LiveChatModeChangeMessage.ts", "../src/parser/classes/livechat/items/PdgReplyButtonView.ts", "../src/parser/classes/livechat/items/LiveChatPaidMessage.ts", "../src/parser/classes/livechat/items/LiveChatPaidSticker.ts", "../src/parser/classes/livechat/items/LiveChatPlaceholderItem.ts", "../src/parser/classes/livechat/items/LiveChatProductItem.ts", "../src/parser/classes/livechat/items/LiveChatRestrictedParticipation.ts", "../src/parser/classes/LiveChatAuthorBadge.ts", "../src/parser/classes/livechat/items/LiveChatSponsorshipsHeader.ts", "../src/parser/classes/livechat/items/LiveChatSponsorshipsGiftPurchaseAnnouncement.ts", "../src/parser/classes/livechat/items/LiveChatSponsorshipsGiftRedemptionAnnouncement.ts", "../src/parser/classes/livechat/items/LiveChatTextMessage.ts", "../src/parser/classes/livechat/items/LiveChatTickerPaidMessageItem.ts", "../src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.ts", "../src/parser/classes/livechat/items/LiveChatTickerSponsorItem.ts", "../src/parser/classes/livechat/items/LiveChatViewerEngagementMessage.ts", "../src/parser/classes/livechat/items/PollHeader.ts", "../src/parser/classes/livechat/LiveChatActionPanel.ts", "../src/parser/classes/livechat/MarkChatItemAsDeletedAction.ts", "../src/parser/classes/livechat/MarkChatItemsByAuthorAsDeletedAction.ts", "../src/parser/classes/livechat/RemoveBannerForLiveChatCommand.ts", "../src/parser/classes/livechat/RemoveChatItemAction.ts", "../src/parser/classes/livechat/RemoveChatItemByAuthorAction.ts", "../src/parser/classes/livechat/ReplaceChatItemAction.ts", "../src/parser/classes/livechat/ReplaceLiveChatAction.ts", "../src/parser/classes/livechat/ReplayChatItemAction.ts", "../src/parser/classes/livechat/ShowLiveChatActionPanelAction.ts", "../src/parser/classes/livechat/ShowLiveChatDialogAction.ts", "../src/parser/classes/livechat/ShowLiveChatTooltipCommand.ts", "../src/parser/classes/livechat/UpdateDateTextAction.ts", "../src/parser/classes/livechat/UpdateDescriptionAction.ts", "../src/parser/classes/livechat/UpdateLiveChatPollAction.ts", "../src/parser/classes/livechat/UpdateTitleAction.ts", "../src/parser/classes/livechat/UpdateToggleButtonTextAction.ts", "../src/parser/classes/VideoViewCount.ts", "../src/parser/classes/livechat/UpdateViewershipAction.ts", "../src/parser/classes/LiveChatDialog.ts", "../src/parser/classes/LiveChatHeader.ts", "../src/parser/classes/LiveChatItemList.ts", "../src/parser/classes/LiveChatMessageInput.ts", "../src/parser/classes/LiveChatParticipant.ts", "../src/parser/classes/LiveChatParticipantsList.ts", "../src/parser/classes/LockupMetadataView.ts", "../src/parser/classes/LockupView.ts", "../src/parser/classes/MacroMarkersListEntity.ts", "../src/parser/classes/menus/MenuNavigationItem.ts", "../src/parser/classes/menus/MenuPopup.ts", "../src/parser/classes/Notification.ts", "../src/parser/classes/menus/MultiPageMenuNotificationSection.ts", "../src/parser/classes/menus/MusicMenuItemDivider.ts", "../src/parser/classes/menus/MusicMultiSelectMenuItem.ts", "../src/parser/classes/menus/MusicMultiSelectMenu.ts", "../src/parser/classes/menus/SimpleMenuHeader.ts", "../src/parser/classes/MerchandiseItem.ts", "../src/parser/classes/MetadataRow.ts", "../src/parser/classes/MetadataRowContainer.ts", "../src/parser/classes/MetadataRowHeader.ts", "../src/parser/classes/MetadataScreen.ts", "../src/parser/classes/MicroformatData.ts", "../src/parser/classes/Mix.ts", "../src/parser/classes/ModalWithTitleAndButton.ts", "../src/parser/classes/Movie.ts", "../src/parser/classes/MovingThumbnail.ts", "../src/parser/classes/MusicCardShelfHeaderBasic.ts", "../src/parser/classes/MusicInlineBadge.ts", "../src/parser/classes/MusicPlayButton.ts", "../src/parser/classes/MusicItemThumbnailOverlay.ts", "../src/parser/classes/MusicThumbnail.ts", "../src/parser/classes/MusicCardShelf.ts", "../src/parser/classes/MusicCarouselShelfBasicHeader.ts", "../src/parser/classes/MusicMultiRowListItem.ts", "../src/parser/classes/MusicNavigationButton.ts", "../src/parser/classes/MusicResponsiveListItemFixedColumn.ts", "../src/parser/classes/MusicResponsiveListItemFlexColumn.ts", "../src/parser/classes/MusicResponsiveListItem.ts", "../src/parser/classes/MusicTwoRowItem.ts", "../src/parser/classes/MusicCarouselShelf.ts", "../src/parser/classes/MusicDescriptionShelf.ts", "../src/parser/classes/MusicDetailHeader.ts", "../src/parser/classes/MusicDownloadStateBadge.ts", "../src/parser/classes/MusicEditablePlaylistDetailHeader.ts", "../src/parser/classes/MusicElementHeader.ts", "../src/parser/classes/MusicHeader.ts", "../src/parser/classes/MusicImmersiveHeader.ts", "../src/parser/classes/MusicLargeCardItemCarousel.ts", "../src/parser/classes/MusicPlaylistEditHeader.ts", "../src/parser/classes/MusicPlaylistShelf.ts", "../src/parser/classes/PlaylistPanelVideo.ts", "../src/parser/classes/PlaylistPanelVideoWrapper.ts", "../src/parser/classes/PlaylistPanel.ts", "../src/parser/classes/MusicQueue.ts", "../src/parser/classes/MusicResponsiveHeader.ts", "../src/parser/classes/MusicShelf.ts", "../src/parser/classes/MusicSideAlignedItem.ts", "../src/parser/classes/MusicSortFilterButton.ts", "../src/parser/classes/MusicTastebuilderShelfThumbnail.ts", "../src/parser/classes/MusicTastebuilderShelf.ts", "../src/parser/classes/MusicVisualHeader.ts", "../src/parser/classes/mweb/MobileTopbar.ts", "../src/parser/classes/mweb/MultiPageMenuSection.ts", "../src/parser/classes/mweb/PivotBar.ts", "../src/parser/classes/mweb/PivotBarItem.ts", "../src/parser/classes/mweb/TopbarMenuButton.ts", "../src/parser/classes/NotificationAction.ts", "../src/parser/classes/OpenOnePickAddVideoModalCommand.ts", "../src/parser/classes/PageHeaderView.ts", "../src/parser/classes/PageHeader.ts", "../src/parser/classes/PageIntroduction.ts", "../src/parser/classes/PivotButton.ts", "../src/parser/classes/PlayerAnnotationsExpanded.ts", "../src/parser/classes/PlayerCaptchaView.ts", "../src/parser/classes/PlayerCaptionsTracklist.ts", "../src/parser/classes/PlayerOverflow.ts", "../src/parser/classes/PlayerControlsOverlay.ts", "../src/parser/classes/PlayerErrorMessage.ts", "../src/parser/classes/PlayerLegacyDesktopYpcOffer.ts", "../src/parser/classes/YpcTrailer.ts", "../src/parser/classes/PlayerLegacyDesktopYpcTrailer.ts", "../src/parser/classes/PlayerLiveStoryboardSpec.ts", "../src/parser/classes/PlayerMicroformat.ts", "../src/parser/classes/PlayerOverlayAutoplay.ts", "../src/parser/classes/PlayerOverlayVideoDetails.ts", "../src/parser/classes/WatchNextEndScreen.ts", "../src/parser/classes/PlayerOverlay.ts", "../src/parser/classes/PlaylistHeader.ts", "../src/parser/classes/PlaylistInfoCardContent.ts", "../src/parser/classes/PlaylistMetadata.ts", "../src/parser/classes/PlaylistSidebar.ts", "../src/parser/classes/PlaylistSidebarPrimaryInfo.ts", "../src/parser/classes/PlaylistSidebarSecondaryInfo.ts", "../src/parser/classes/PlaylistThumbnailOverlay.ts", "../src/parser/classes/PlaylistVideo.ts", "../src/parser/classes/PlaylistVideoList.ts", "../src/parser/classes/Poll.ts", "../src/parser/classes/Post.ts", "../src/parser/classes/PostMultiImage.ts", "../src/parser/classes/PremiereTrailerBadge.ts", "../src/parser/classes/ProductListHeader.ts", "../src/parser/classes/ProductListItem.ts", "../src/parser/classes/ProfileColumn.ts", "../src/parser/classes/ProfileColumnStats.ts", "../src/parser/classes/ProfileColumnStatsEntry.ts", "../src/parser/classes/ProfileColumnUserInfo.ts", "../src/parser/classes/Quiz.ts", "../src/parser/classes/RecognitionShelf.ts", "../src/parser/classes/ReelItem.ts", "../src/parser/classes/ReelPlayerHeader.ts", "../src/parser/classes/ReelPlayerOverlay.ts", "../src/parser/classes/RelatedChipCloud.ts", "../src/parser/classes/RichGrid.ts", "../src/parser/classes/RichItem.ts", "../src/parser/classes/RichListHeader.ts", "../src/parser/classes/RichMetadata.ts", "../src/parser/classes/RichMetadataRow.ts", "../src/parser/classes/RichSection.ts", "../src/parser/classes/RichShelf.ts", "../src/parser/classes/SearchFilter.ts", "../src/parser/classes/SearchFilterGroup.ts", "../src/parser/classes/SearchFilterOptionsDialog.ts", "../src/parser/classes/SearchHeader.ts", "../src/parser/classes/SearchSubMenu.ts", "../src/parser/classes/SearchSuggestionsSection.ts", "../src/parser/classes/UniversalWatchCard.ts", "../src/parser/classes/SecondarySearchContainer.ts", "../src/parser/classes/SectionHeaderView.ts", "../src/parser/classes/SegmentedLikeDislikeButton.ts", "../src/parser/classes/SettingBoolean.ts", "../src/parser/classes/SettingsCheckbox.ts", "../src/parser/classes/SettingsSwitch.ts", "../src/parser/classes/SettingsOptions.ts", "../src/parser/classes/SettingsSidebar.ts", "../src/parser/classes/SharedPost.ts", "../src/parser/classes/SharePanelHeader.ts", "../src/parser/classes/SharePanelTitleV15.ts", "../src/parser/classes/ShareTarget.ts", "../src/parser/classes/Shelf.ts", "../src/parser/classes/ShortsLockupView.ts", "../src/parser/classes/ShowingResultsFor.ts", "../src/parser/classes/SimpleCardContent.ts", "../src/parser/classes/SimpleCardTeaser.ts", "../src/parser/classes/SimpleTextSection.ts", "../src/parser/classes/SingleActionEmergencySupport.ts", "../src/parser/classes/Tab.ts", "../src/parser/classes/SingleColumnBrowseResults.ts", "../src/parser/classes/SingleColumnMusicWatchNextResults.ts", "../src/parser/classes/SingleHeroImage.ts", "../src/parser/classes/SlimOwner.ts", "../src/parser/classes/SlimVideoMetadata.ts", "../src/parser/classes/StartAt.ts", "../src/parser/classes/Tabbed.ts", "../src/parser/classes/TabbedSearchResults.ts", "../src/parser/classes/TextHeader.ts", "../src/parser/classes/ThirdPartyShareTargetSection.ts", "../src/parser/classes/ThumbnailLandscapePortrait.ts", "../src/parser/classes/ThumbnailOverlayEndorsement.ts", "../src/parser/classes/ThumbnailOverlayHoverText.ts", "../src/parser/classes/ThumbnailOverlayInlineUnplayable.ts", "../src/parser/classes/ThumbnailOverlayLoadingPreview.ts", "../src/parser/classes/ThumbnailOverlayNowPlaying.ts", "../src/parser/classes/ThumbnailOverlayPinking.ts", "../src/parser/classes/ThumbnailOverlayPlaybackStatus.ts", "../src/parser/classes/ThumbnailOverlayResumePlayback.ts", "../src/parser/classes/ThumbnailOverlaySidePanel.ts", "../src/parser/classes/ThumbnailOverlayToggleButton.ts", "../src/parser/classes/TitleAndButtonListHeader.ts", "../src/parser/classes/ToggleMenuServiceItem.ts", "../src/parser/classes/Tooltip.ts", "../src/parser/classes/TopicChannelDetails.ts", "../src/parser/classes/TwoColumnBrowseResults.ts", "../src/parser/classes/TwoColumnSearchResults.ts", "../src/parser/classes/TwoColumnWatchNextResults.ts", "../src/parser/classes/UnifiedSharePanel.ts", "../src/parser/classes/UpsellDialog.ts", "../src/parser/classes/VerticalList.ts", "../src/parser/classes/VerticalWatchCardList.ts", "../src/parser/classes/VideoInfoCardContent.ts", "../src/parser/classes/VideoMetadataCarouselView.ts", "../src/parser/classes/misc/SubscriptionButton.ts", "../src/parser/classes/VideoOwner.ts", "../src/parser/classes/VideoPrimaryInfo.ts", "../src/parser/classes/VideoSecondaryInfo.ts", "../src/parser/classes/WatchCardCompactVideo.ts", "../src/parser/classes/WatchCardHeroVideo.ts", "../src/parser/classes/WatchCardRichHeader.ts", "../src/parser/classes/WatchCardSectionSequence.ts", "../src/parser/classes/WatchNextTabbedResults.ts", "../src/parser/classes/ytkids/AnchoredSection.ts", "../src/parser/classes/ytkids/KidsBlocklistPickerItem.ts", "../src/parser/classes/ytkids/KidsBlocklistPicker.ts", "../src/parser/classes/ytkids/KidsCategoryTab.ts", "../src/parser/classes/ytkids/KidsCategoriesHeader.ts", "../src/parser/classes/ytkids/KidsHomeScreen.ts", "../src/parser/generator.ts", "../src/parser/continuations.ts", "../protos/generated/misc/common.ts", "../src/parser/classes/misc/Format.ts", "../src/parser/classes/misc/VideoDetails.ts", "../src/parser/youtube/index.ts", "../src/parser/youtube/AccountInfo.ts", "../src/core/mixins/Feed.ts", "../src/core/mixins/FilterableFeed.ts", "../src/core/mixins/index.ts", "../src/core/mixins/MediaInfo.ts", "../src/core/mixins/TabbedFeed.ts", "../src/parser/youtube/Channel.ts", "../src/parser/youtube/Comments.ts", "../src/parser/youtube/Guide.ts", "../src/parser/youtube/History.ts", "../src/parser/youtube/HomeFeed.ts", "../src/parser/youtube/HashtagFeed.ts", "../src/parser/youtube/ItemMenu.ts", "../src/parser/youtube/Playlist.ts", "../src/parser/youtube/Library.ts", "../src/parser/youtube/SmoothedQueue.ts", "../src/parser/youtube/LiveChat.ts", "../src/parser/youtube/NotificationsMenu.ts", "../src/parser/youtube/Search.ts", "../src/parser/youtube/Settings.ts", "../src/parser/youtube/VideoInfo.ts", "../src/parser/youtube/TranscriptInfo.ts", "../src/parser/ytmusic/index.ts", "../src/parser/ytmusic/Album.ts", "../src/parser/ytmusic/Artist.ts", "../src/parser/ytmusic/Explore.ts", "../src/parser/ytmusic/HomeFeed.ts", "../src/parser/ytmusic/Library.ts", "../src/parser/ytmusic/Playlist.ts", "../src/parser/ytmusic/Recap.ts", "../src/parser/ytmusic/Search.ts", "../src/parser/ytmusic/TrackInfo.ts", "../src/parser/ytkids/index.ts", "../src/parser/ytkids/Channel.ts", "../src/parser/ytkids/HomeFeed.ts", "../src/parser/ytkids/Search.ts", "../src/parser/ytkids/VideoInfo.ts", "../src/parser/ytshorts/index.ts", "../src/parser/ytshorts/ShortFormVideoInfo.ts", "../src/parser/classes/misc/Author.ts", "../src/utils/user-agents.ts", "../src/platform/polyfills/web-crypto.ts", "../src/platform/jsruntime/default.ts", "../src/core/Actions.ts", "../src/core/OAuth2.ts", "../src/core/Player.ts", "../src/core/Session.ts", "../src/core/clients/index.ts", "../src/core/clients/Kids.ts", "../src/core/clients/Music.ts", "../protos/generated/youtube/api/pfiinnertube/capability_info.ts", "../protos/generated/youtube/api/pfiinnertube/client_info.ts", "../protos/generated/youtube/api/pfiinnertube/attestation_response_data.ts", "../protos/generated/youtube/api/pfiinnertube/request_info.ts", "../protos/generated/youtube/api/pfiinnertube/third_party_info.ts", "../protos/generated/youtube/api/pfiinnertube/user_info.ts", "../protos/generated/youtube/api/pfiinnertube/innertube_context.ts", "../protos/generated/youtube/api/pfiinnertube/metadata_update_request.ts", "../src/core/clients/Studio.ts", "../src/core/managers/index.ts", "../src/core/managers/AccountManager.ts", "../src/core/managers/PlaylistManager.ts", "../src/core/managers/InteractionManager.ts", "../src/Innertube.ts", "../src/platform/lib.ts", "../src/platform/react-native.ts"],
  "sourcesContent": ["import type { EmojiRun, TextRun } from '../parser/misc.js';\nimport type { FetchFunction } from '../types/index.js';\nimport type PlatformShim from '../types/PlatformShim.js';\n\nimport { Memo } from '../parser/helpers.js';\nimport { Text } from '../parser/misc.js';\nimport * as Log from './Log.js';\nimport userAgents from './user-agents.js';\nimport packageInfo from '../../package.json' with { type: 'json' };\n\nconst TAG_ = 'Utils';\n\nlet shim: PlatformShim | undefined;\n\nexport class Platform {\n  static load(platform: PlatformShim): void {\n    shim = platform;\n  }\n\n  static get shim(): PlatformShim {\n    if (!shim) {\n      throw new Error('Platform is not loaded');\n    }\n    return shim;\n  }\n}\n\nexport class InnertubeError extends Error {\n  date: Date;\n  version: string;\n  info?: any;\n\n  constructor(message: string, info?: any) {\n    super(message);\n\n    if (info) {\n      this.info = info;\n    }\n\n    this.date = new Date();\n    this.version = packageInfo.version;\n  }\n}\n\nexport class ParsingError extends InnertubeError {\n}\n\nexport class MissingParamError extends InnertubeError {\n}\n\nexport class OAuth2Error extends InnertubeError {\n}\n\nexport class PlayerError extends Error {\n}\n\nexport class SessionError extends Error {\n}\n\nexport class ChannelError extends Error {\n}\n\n/**\n * Compares given objects. May not work correctly for\n * objects with methods.\n */\nexport function deepCompare(obj1: any, obj2: any): boolean {\n  const keys = Reflect.ownKeys(obj1);\n  return keys.some((key) => {\n    const is_text = obj2[key] instanceof Text;\n    if (!is_text && typeof obj2[key] === 'object') {\n      return JSON.stringify(obj1[key]) === JSON.stringify(obj2[key]);\n    }\n    return obj1[key] === (is_text ? obj2[key].toString() : obj2[key]);\n  });\n}\n\n/**\n * Finds a string between two delimiters.\n * @param data - the data.\n * @param start_string - start string.\n * @param end_string - end string.\n */\nexport function getStringBetweenStrings(data: string, start_string: string, end_string: string): string | undefined {\n  const regex = new RegExp(`${escapeStringRegexp(start_string)}(.*?)${escapeStringRegexp(end_string)}`, 's');\n  const match = data.match(regex);\n  return match ? match[1] : undefined;\n}\n\nexport function escapeStringRegexp(input: string): string {\n  return input.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n\nexport type DeviceCategory = 'mobile' | 'desktop';\n\n/**\n * Returns a random user agent.\n * @param type - mobile | desktop\n */\nexport function getRandomUserAgent(type: DeviceCategory): string {\n  const available_agents = userAgents[type];\n  const random_index = Math.floor(Math.random() * available_agents.length);\n  return available_agents[random_index];\n}\n\n/**\n * Generates an authentication token from a cookies' sid.\n * @param sid - Sid extracted from cookies\n */\nexport async function generateSidAuth(sid: string): Promise<string> {\n  const youtube = 'https://www.youtube.com';\n\n  const timestamp = Math.floor(new Date().getTime() / 1000);\n  const input = [ timestamp, sid, youtube ].join(' ');\n  const gen_hash = await Platform.shim.sha1Hash(input);\n\n  return [ 'SAPISIDHASH', [ timestamp, gen_hash ].join('_') ].join(' ');\n}\n\n/**\n * Generates a random string with the given length.\n *\n */\nexport function generateRandomString(length: number): string {\n  const result = [];\n\n  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n  for (let i = 0; i < length; i++) {\n    result.push(alphabet.charAt(Math.floor(Math.random() * alphabet.length)));\n  }\n\n  return result.join('');\n}\n\n/**\n * Converts time (h:m:s) to seconds.\n * @returns seconds\n */\nexport function timeToSeconds(time: string): number {\n  const params = time.split(':').map((param) => parseInt(param.replace(/\\D/g, '')));\n  switch (params.length) {\n    case 1:\n      return params[0];\n    case 2:\n      return params[0] * 60 + params[1];\n    case 3:\n      return params[0] * 3600 + params[1] * 60 + params[2];\n    default:\n      throw new Error('Invalid time string');\n  }\n}\n\nexport function concatMemos(...iterables: Array<Memo | undefined>): Memo {\n  const memo = new Memo();\n\n  for (const iterable of iterables) {\n    if (!iterable) continue;\n    for (const item of iterable) {\n      // Update existing items.\n      const memo_item = memo.get(item[0]);\n      if (memo_item) {\n        memo.set(item[0], [ ...memo_item, ...item[1] ]);\n        continue;\n      }\n\n      memo.set(...item);\n    }\n  }\n\n  return memo;\n}\n\nexport function throwIfMissing(params: object): void {\n  for (const [ key, value ] of Object.entries(params)) {\n    if (!value)\n      throw new MissingParamError(`${key} is missing`);\n  }\n}\n\nexport function hasKeys<T extends object, R extends (keyof T)[]>(params: T, ...keys: R): params is Exclude<T, R[number]> & Required<Pick<T, R[number]>> {\n  for (const key of keys) {\n    if (!Reflect.has(params, key) || (params[key] === undefined))\n      return false;\n  }\n  return true;\n}\n\nexport async function* streamToIterable(stream: ReadableStream<Uint8Array>) {\n  const reader = stream.getReader();\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) {\n        return;\n      }\n      yield value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\nexport const debugFetch: FetchFunction = (input, init) => {\n  const url =\n    typeof input === 'string' ?\n      new URL(input) :\n      input instanceof URL ?\n        input : new URL(input.url);\n\n  const headers =\n    init?.headers ?\n      new Headers(init.headers) :\n      input instanceof Request ?\n        input.headers :\n        new Headers();\n\n  const arr_headers = [ ...headers ];\n\n  const body_contents =\n    init?.body ?\n      typeof init.body === 'string' ?\n        headers.get('content-type') === 'application/json' ?\n          JSON.stringify(JSON.parse(init.body), null, 2) : // Body is string and json\n          init.body : // Body is string\n        '    <binary>' : // Body is not string\n      '    (none)'; // No body provided\n\n  const headers_serialized =\n    arr_headers.length > 0 ?\n      `${arr_headers.map(([ key, value ]) => `    ${key}: ${value}`).join('\\n')}` :\n      '    (none)';\n\n  Log.warn(TAG_,\n    'Fetch:\\n' +\n    `  url: ${url.toString()}\\n` +\n    `  method: ${init?.method || 'GET'}\\n` +\n    `  headers:\\n${headers_serialized}\\n' + \n    '  body:\\n${body_contents}`\n  );\n\n  return Platform.shim.fetch(input, init);\n};\n\nexport function u8ToBase64(u8: Uint8Array): string {\n  return btoa(String.fromCharCode.apply(null, Array.from(u8)));\n}\n\nexport function base64ToU8(base64: string): Uint8Array {\n  const standard_base64 = base64.replace(/-/g, '+').replace(/_/g, '/');\n  const padded_base64 = standard_base64.padEnd(standard_base64.length + (4 - standard_base64.length % 4) % 4, '=');\n  return new Uint8Array(atob(padded_base64).split('').map((char) => char.charCodeAt(0)));\n}\n\nexport function isTextRun(run: TextRun | EmojiRun): run is TextRun {\n  return !('emoji' in run);\n}\n\nexport function getCookie(cookies: string, name: string, matchWholeName = false): string | undefined {\n  const regex = matchWholeName ? `(^|\\\\s?)\\\\b${name}\\\\b=([^;]+)` : `(^|s?)${name}=([^;]+)`;\n  const match = cookies.match(new RegExp(regex));\n  return match ? match[2] : undefined;\n}\n\nexport function getNsigProcessorFn(n?: string | null, sp?: string | null, s?: string | null) {\n  return `function process(n = \"\", sp = \"\", s = \"\") {\n  const mockStreamingURL = \"https://ytjs.googlevideo.com/videoplayback?expire=1234567890&\"+\"n=\"+encodeURIComponent(n);\n  const urlCtorFunction = exportedVars.nsigFunction || (() => { throw new Error('No n/sig decipher function extracted') });\n  const urlCtor = urlCtorFunction(mockStreamingURL, sp, s);\n\n  const proto = Object.getPrototypeOf(urlCtor);\n  const properties = Object.getOwnPropertyNames(proto);\n  const methodBlacklist = ['constructor', 'clone', 'set', 'get'];\n\n  for (const prop of properties) {\n    if (methodBlacklist.includes(prop))\n      continue;\n\n    if (typeof urlCtor[prop] === 'function')\n      urlCtor[prop]();\n  }\n\n  const sigResult = urlCtor.get(sp);\n  const nResult = urlCtor.get('n');\n\n  return {\n    sig: sigResult ? decodeURIComponent(sigResult) : undefined,\n    n: nResult ? decodeURIComponent(nResult) : undefined\n  };\n}\n\nreturn process(\"${n || ''}\", \"${sp || ''}\", \"${s || ''}\");`;\n}", "import * as Log from '../utils/Log.js';\nimport { deepCompare, ParsingError } from '../utils/Utils.js';\n\nconst isObserved = Symbol('ObservedArray.isObserved');\n\nexport class YTNode {\n  static readonly type: string = 'YTNode';\n  readonly type: string;\n\n  constructor() {\n    this.type = (this.constructor as YTNodeConstructor).type;\n  }\n\n  /**\n   * Check if the node is of the given type.\n   * @param types - The type to check\n   * @returns whether the node is of the given type\n   */\n  is<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): this is InstanceType<K[number]> {\n    return types.some((type) => this.type === type.type);\n  }\n\n  /**\n   * Cast to one of the given types.\n   * @param types - The types to cast to\n   * @returns The node cast to one of the given types\n   * @throws {ParsingError} If the node is not of the given type\n   */\n  as<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): InstanceType<K[number]> {\n    if (!this.is(...types)) {\n      throw new ParsingError(`Cannot cast ${this.type} to one of ${types.map((t) => t.type).join(', ')}`);\n    }\n    return this;\n  }\n\n  /**\n   * Check for a key without asserting the type.\n   * @param key - The key to check\n   * @returns Whether the node has the key\n   */\n  hasKey<T extends string, R = any>(key: T): this is this & { [k in T]: R } {\n    return Reflect.has(this, key);\n  }\n\n  /**\n   * Assert that the node has the given key and return it.\n   * @param key - The key to check\n   * @returns The value of the key wrapped in a Maybe\n   * @throws {ParsingError} If the node does not have the key\n   */\n  key<T extends string, R = any>(key: T) {\n    if (!this.hasKey<T, R>(key)) {\n      throw new ParsingError(`Missing key ${key}`);\n    }\n    return new Maybe(this[key]);\n  }\n}\n\nconst MAYBE_TAG = 'Maybe';\n\n/**\n * A wrapper class that provides type-safe access to a value.\n */\nexport class Maybe {\n  readonly #value;\n\n  constructor (value: any) {\n    this.#value = value;\n  }\n\n  #checkPrimitive(type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function') {\n    return typeof this.#value === type;\n  }\n\n  #assertPrimitive(type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function') {\n    if (!this.#checkPrimitive(type)) {\n      throw new TypeError(`Expected ${type}, got ${this.typeof}`);\n    }\n    return this.#value;\n  }\n\n  get typeof() {\n    return typeof this.#value;\n  }\n\n  string(): string {\n    return this.#assertPrimitive('string');\n  }\n\n  isString() {\n    return this.#checkPrimitive('string');\n  }\n\n  number(): number {\n    return this.#assertPrimitive('number');\n  }\n\n  isNumber() {\n    return this.#checkPrimitive('number');\n  }\n\n  bigint(): bigint {\n    return this.#assertPrimitive('bigint');\n  }\n\n  isBigint() {\n    return this.#checkPrimitive('bigint');\n  }\n\n  boolean(): boolean {\n    return this.#assertPrimitive('boolean');\n  }\n\n  isBoolean() {\n    return this.#checkPrimitive('boolean');\n  }\n\n  symbol(): symbol {\n    return this.#assertPrimitive('symbol');\n  }\n\n  isSymbol() {\n    return this.#checkPrimitive('symbol');\n  }\n\n  undefined(): undefined {\n    return this.#assertPrimitive('undefined');\n  }\n\n  isUndefined() {\n    return this.#checkPrimitive('undefined');\n  }\n\n  null(): null {\n    if (this.#value !== null)\n      throw new TypeError(`Expected null, got ${typeof this.#value}`);\n    return this.#value;\n  }\n\n  isNull() {\n    return this.#value === null;\n  }\n\n  object(): object {\n    return this.#assertPrimitive('object');\n  }\n\n  isObject() {\n    return this.#checkPrimitive('object');\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  function(): Function {\n    return this.#assertPrimitive('function');\n  }\n\n  isFunction() {\n    return this.#checkPrimitive('function');\n  }\n\n  /**\n   * Get the value as an array.\n   * @returns the value as any[].\n   * @throws If the value is not an array.\n   */\n  array(): any[] {\n    if (!Array.isArray(this.#value)) {\n      throw new TypeError(`Expected array, got ${typeof this.#value}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * More typesafe variant of {@link Maybe#array}.\n   * @returns a proxied array which returns all the values as {@link Maybe}.\n   * @throws {TypeError} If the value is not an array\n   */\n  arrayOfMaybe(): Maybe[] {\n    const arrayProps: any[] = [];\n    return new Proxy(this.array(), {\n      get(target, prop) {\n        if (Reflect.has(arrayProps, prop)) {\n          return Reflect.get(target, prop);\n        }\n        return new Maybe(Reflect.get(target, prop));\n      }\n    });\n  }\n\n  /**\n   * Check whether the value is an array.\n   * @returns whether the value is an array.\n   */\n  isArray() {\n    return Array.isArray(this.#value);\n  }\n\n  /**\n   * Get the value as a YTNode.\n   * @returns the value as a YTNode.\n   * @throws If the value is not a YTNode.\n   */\n  node() {\n    if (!(this.#value instanceof YTNode)) {\n      throw new TypeError(`Expected YTNode, got ${this.#value.constructor.name}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Check if the value is a YTNode.\n   * @returns Whether the value is a YTNode.\n   */\n  isNode() {\n    return this.#value instanceof YTNode;\n  }\n\n  /**\n   * Get the value as a YTNode of the given type.\n   * @param types - The type(s) to cast to.\n   * @returns The node cast to the given type.\n   * @throws If the node is not of the given type.\n   */\n  nodeOfType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K) {\n    return this.node().as(...types);\n  }\n\n  /**\n   * Check if the value is a YTNode of the given type.\n   * @param types - the type(s) to check.\n   * @returns Whether the value is a YTNode of the given type.\n   */\n  isNodeOfType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K) {\n    return this.isNode() && this.node().is(...types);\n  }\n\n  /**\n   * Get the value as an ObservedArray.\n   * @returns the value of the Maybe as a ObservedArray.\n   */\n  observed(): ObservedArray<YTNode> {\n    if (!this.isObserved()) {\n      throw new TypeError(`Expected ObservedArray, got ${typeof this.#value}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Check if the value is an ObservedArray.\n   */\n  isObserved() {\n    return this.#value?.[isObserved];\n  }\n\n  /**\n   * Get the value of the Maybe as a SuperParsedResult.\n   * @returns the value as a SuperParsedResult.\n   * @throws If the value is not a SuperParsedResult.\n   */\n  parsed(): SuperParsedResult {\n    if (!(this.#value instanceof SuperParsedResult)) {\n      throw new TypeError(`Expected SuperParsedResult, got ${typeof this.#value}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Is the result a SuperParsedResult?\n   */\n  isParsed() {\n    return this.#value instanceof SuperParsedResult;\n  }\n\n  /**\n   * @deprecated\n   * This call is not meant to be used outside of debugging. Please use the specific type getter instead.\n   */\n  any(): any {\n    Log.warn(MAYBE_TAG, 'This call is not meant to be used outside of debugging. Please use the specific type getter instead.');\n    return this.#value;\n  }\n\n  /**\n   * Get the node as an instance of the given class.\n   * @param type - The type to check.\n   * @returns the value as the given type.\n   * @throws If the node is not of the given type.\n   */\n  instanceof<T extends object>(type: Constructor<T>): T {\n    if (!this.isInstanceof(type)) {\n      throw new TypeError(`Expected instance of ${type.name}, got ${this.#value.constructor.name}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Check if the node is an instance of the given class.\n   * @param type - The type to check.\n   * @returns Whether the node is an instance of the given type.\n   */\n  isInstanceof<T extends object>(type: Constructor<T>): this is this & T {\n    return this.#value instanceof type;\n  }\n}\n\nexport interface Constructor<T> {\n    new (...args: any[]): T;\n}\n\nexport interface YTNodeConstructor<T extends YTNode = YTNode> {\n    new(data: any): T;\n    readonly type: string;\n}\n\n/**\n * Represents a parsed response in an unknown state. Either a YTNode or a YTNode[] or null.\n */\nexport class SuperParsedResult<T extends YTNode = YTNode> {\n  readonly #result;\n\n  constructor(result: T | ObservedArray<T> | null) {\n    this.#result = result;\n  }\n\n  get is_null() {\n    return this.#result === null;\n  }\n  get is_array() {\n    return !this.is_null && Array.isArray(this.#result);\n  }\n  get is_node() {\n    return !this.is_array;\n  }\n\n  array() {\n    if (!this.is_array) {\n      throw new TypeError('Expected an array, got a node');\n    }\n    return this.#result as ObservedArray<T>;\n  }\n\n  item() {\n    if (!this.is_node) {\n      throw new TypeError('Expected a node, got an array');\n    }\n    return this.#result as T;\n  }\n}\n\n/**\n * An extended array type that includes additional utility methods for filtering and manipulating YTNode objects.\n */\nexport type ObservedArray<T extends YTNode = YTNode> = Array<T> & {\n  /**\n   * Returns the first object that matches the specified rule object.\n   * @param rule - An object containing properties to match against\n   * @param del_item - Optional flag to remove the matched item from the array\n   * @returns The first matching object or undefined if no match is found\n   */\n  get: (rule: object, del_item?: boolean) => T | undefined;\n\n  /**\n   * Returns all objects that match the specified rule object.\n   * @param rule - An object containing properties to match against\n   * @param del_items - Optional flag to remove all matched items from the array\n   * @returns An array of all matching objects\n   */\n  getAll: (rule: object, del_items?: boolean) => T[];\n\n  /**\n   * Returns the first object that satisfies the provided condition function.\n   * @param condition - A predicate function that tests each element\n   * @returns The first element that satisfies the condition or undefined if none found\n   */\n  matchCondition: (condition: (node: T) => boolean) => T | undefined;\n\n  /**\n   * Removes the item at the specified index.\n   * @param index - The index of the item to remove\n   * @returns The modified array after removal\n   */\n  remove: (index: number) => T[];\n\n  /**\n   * Filters the array to only include items of the specified YTNode types.\n   * @template R - Type extending YTNode\n   * @template K - Array of types (YTNodes)\n   * @param types - Rest parameter of YTNode constructor types to filter by\n   * @returns A new ObservedArray containing only items of the specified types\n   */\n  filterType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;\n\n  /**\n   * Returns the first item in the array that matches any of the specified YTNode types.\n   * @template R - Type extending YTNode\n   * @template K - Array of types (YTNodes)\n   * @param types - Rest parameter of YTNode constructor types to match against\n   * @returns The first matching item or undefined if none found\n   */\n  firstOfType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): InstanceType<K[number]> | undefined;\n\n  /**\n   * Returns the first item in the array.\n   * @returns The first item in the array\n   */\n  first: () => T;\n\n  /**\n   * Similar to `filter` but with strict type checking. Filters the array to include only items of the specified types.\n   * @template R - Type extending YTNode\n   * @template K - Array of types (YTNodes)\n   * @param types - Rest parameter of YTNode constructor types to filter by\n   * @returns A new ObservedArray containing only items of the specified types\n   * @throws {ParsingError} If an item is not of the specified type\n   */\n  as<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;\n};\n\n/**\n * Creates an observed array that provides additional utility methods for array manipulation and filtering.\n * @template T - Type extending YTNode\n * @param obj - Array to be observed\n */\nexport function observe<T extends YTNode>(obj: Array<T>): ObservedArray<T> {\n  return new Proxy(obj, {\n    get(target, prop) {\n      if (prop == 'get') {\n        return (rule: object, del_item?: boolean) => (\n          target.find((obj, index) => {\n            const match = deepCompare(rule, obj);\n            if (match && del_item) {\n              target.splice(index, 1);\n            }\n            return match;\n          })\n        );\n      }\n\n      if (prop == isObserved) {\n        return true;\n      }\n\n      if (prop == 'getAll') {\n        return (rule: object, del_items: boolean) => (\n          target.filter((obj, index) => {\n            const match = deepCompare(rule, obj);\n            if (match && del_items) {\n              target.splice(index, 1);\n            }\n            return match;\n          })\n        );\n      }\n\n      if (prop == 'matchCondition') {\n        return (condition: (node: T) => boolean) => (\n          target.find((obj) => {\n            return condition(obj);\n          })\n        );\n      }\n\n      if (prop == 'filterType') {\n        return (...types: YTNodeConstructor<YTNode>[]) => {\n          return observe(target.filter((node: YTNode) => {\n            return !!node.is(...types);\n          }));\n        };\n      }\n\n      if (prop == 'firstOfType') {\n        return (...types: YTNodeConstructor<YTNode>[]) => {\n          return target.find((node: YTNode) => {\n            return !!node.is(...types);\n          });\n        };\n      }\n\n      if (prop == 'first') {\n        return () => target[0];\n      }\n\n      if (prop == 'as') {\n        return (...types: YTNodeConstructor<YTNode>[]) => {\n          return observe(target.map((node: YTNode) => {\n            if (node.is(...types))\n              return node;\n            throw new ParsingError(`Expected node of any type ${types.map((type) => type.type).join(', ')}, got ${(node as YTNode).type}`);\n          }));\n        };\n      }\n\n      if (prop == 'remove') {\n        return (index: number): any => target.splice(index, 1);\n      }\n\n      return Reflect.get(target, prop);\n    }\n  }) as ObservedArray<T>;\n}\n\nexport class Memo extends Map<string, YTNode[]> {\n  getType<T extends YTNode, K extends YTNodeConstructor<T>[]>(types: K): ObservedArray<InstanceType<K[number]>>;\n  getType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): ObservedArray<InstanceType<K[number]>>\n  getType(...types: YTNodeConstructor<YTNode>[] | YTNodeConstructor<YTNode>[][]) {\n    types = types.flat();\n    return observe(types.flatMap((type) => (this.get(type.type) || []) as YTNode[]));\n  }\n}", "const YTJS_TAG = 'YOUTUBEJS';\n\nexport const Level = {\n  NONE: 0,\n  ERROR: 1,\n  WARNING: 2,\n  INFO: 3,\n  DEBUG: 4\n};\n\nconst log_map = {\n  [Level.ERROR]: (...args: any[]) => console.error(...args),\n  [Level.WARNING]: (...args: any[]) => console.warn(...args),\n  [Level.INFO]: (...args: any[]) => console.info(...args),\n  [Level.DEBUG]: (...args: any[]) => console.debug(...args)\n};\n\nlet log_level = [ Level.WARNING ];\nconst one_time_warnings_issued = new Set<string>();\n\nfunction doLog(level: number, tag?: string, args?: any[]) {\n  if (!log_map[level] || !log_level.includes(level))\n    return;\n\n  const tags = [ `[${YTJS_TAG}]` ];\n\n  if (tag)\n    tags.push(`[${tag}]`);\n\n  log_map[level](`${tags.join('')}:`, ...(args || []));\n}\n\nexport const warnOnce = (id: string, ...args: any[]) => {\n  if (one_time_warnings_issued.has(id))\n    return;\n  \n  doLog(Level.WARNING, id, args);\n  one_time_warnings_issued.add(id);\n};\n\nexport const warn = (tag?: string, ...args: any[]) => doLog(Level.WARNING, tag, args);\nexport const error = (tag?: string, ...args: any[]) => doLog(Level.ERROR, tag, args);\nexport const info = (tag?: string, ...args: any[]) => doLog(Level.INFO, tag, args);\nexport const debug = (tag?: string, ...args: any[]) => doLog(Level.DEBUG, tag, args);\n\nexport function setLevel(...args: number[]) {\n  log_level = args;\n}\n", "// This file was auto generated, do not edit.\n// See ./dev-scripts/gen-parser-map.mjs\n\nexport { default as AccessibilityContext } from './classes/misc/AccessibilityContext.js';\nexport { default as AccessibilityData } from './classes/misc/AccessibilityData.js';\nexport { default as Author } from './classes/misc/Author.js';\nexport { default as ChildElement } from './classes/misc/ChildElement.js';\nexport { default as CommandContext } from './classes/misc/CommandContext.js';\nexport { default as EmojiRun } from './classes/misc/EmojiRun.js';\nexport { default as Format } from './classes/misc/Format.js';\nexport { default as RendererContext } from './classes/misc/RendererContext.js';\nexport { default as SubscriptionButton } from './classes/misc/SubscriptionButton.js';\nexport { default as Text } from './classes/misc/Text.js';\nexport { default as TextRun } from './classes/misc/TextRun.js';\nexport { default as Thumbnail } from './classes/misc/Thumbnail.js';\nexport { default as VideoDetails } from './classes/misc/VideoDetails.js';\n", "import type { RawNode } from '../../types/index.js';\n\nexport default class AccessibilityContext {\n  public label: string;\n\n  constructor(data: RawNode) {\n    this.label = data.label;\n  }\n} ", "import type { RawNode } from '../../types/index.js';\n\nexport interface AccessibilitySupportedDatas {\n  accessibility_data: AccessibilityData;\n}\n\nexport interface AccessibilityId {\n  accessibility_id_type?:\n    | 'UNKNOWN'\n    | 'MENU_ADD_TO_WATCH_LATER'\n    | 'MENU_REMOVE_FROM_WATCH_LATER'\n    | 'MENU_ADD_TO_PLAYLIST'\n    | 'MENU_REMOVE_FROM_PLAYLIST'\n    | 'MENU_SHARE_VIDEO'\n    | 'MENU_SHARE_PLAYLIST'\n    | 'MENU_OFFLINE_VIDEO'\n    | 'MENU_OFFLINE_PLAYLIST'\n    | 'MENU_DELETE_VIDEO'\n    | 'MENU_DELETE_PLAYLIST'\n    | 'MENU_EDIT_VIDEO_METADATA'\n    | 'MENU_HIDE'\n    | 'MENU_REMOVE_FROM_HISTORY'\n    | 'MENU_LIKE'\n    | 'MENU_INFO'\n    | 'MENU_ADD_TO_REMOTE_QUEUE'\n    | 'MENU_REMOVE_FROM_REMOTE_QUEUE'\n    | 'MENU_CREATE_PLAYLIST'\n    | 'MENU_SETTINGS'\n    | 'MENU_PRIVACY'\n    | 'MENU_FEEDBACK'\n    | 'MENU_HELP'\n    | 'MENU_DELETE_CHANNEL_POST'\n    | 'MENU_PLAYLIST_JOIN_COLLABORATION'\n    | 'MENU_EDIT_PLAYLIST'\n    | 'MENU_OFFLINE_REMOVE'\n    | 'MENU_OFFLINE_PAUSE'\n    | 'MENU_OFFLINE_RESUME'\n    | 'MENU_UNSUBSCRIBE'\n    | 'MENU_GET_ALL_UPDATES'\n    | 'MENU_DISMISS'\n    | 'MENU_CANCEL_UPLOAD'\n    | 'MENU_TAKE_PHOTO'\n    | 'MENU_CHOOSE_PHOTO'\n    | 'MENU_CHOOSE_FROM_CHANNEL_ART_GALLERY'\n    | 'MENU_FILTER_VIDEOS_ONLY'\n    | 'MENU_FILTER_VIDEOS_AND_POSTS'\n    | 'MENU_WATCH_ON_TV'\n    | 'MENU_INSERT_IN_REMOTE_QUEUE'\n    | 'MENU_ADD_UPCOMING_EVENT_REMINDER'\n    | 'MENU_REMOVE_UPCOMING_EVENT_REMINDER'\n    | 'MENU_TOGGLE_DENSITY_MODE'\n    | 'MENU_OFFLINE_UPSELL'\n    | 'MENU_MORE_LIKE_THIS'\n    | 'MENU_CREATE_VIDEO'\n    | 'MENU_CREATE_LIVE_STREAM'\n    | 'MENU_CREATE_REEL_ITEM'\n    | 'MENU_CREATE_POST'\n    | 'MENU_LESS_LIKE_THIS'\n    | 'MENU_REEL_OVERFLOW'\n    | 'MENU_DELETE_REEL'\n    | 'MENU_EDIT_REEL'\n    | 'MENU_REMOVE_FROM_QUEUE'\n    | 'MENU_REEL_SHELF_OVERFLOW'\n    | 'MENU_REEL_SHELF_DISMISS'\n    | 'MENU_SHARE_ARTIST'\n    | 'MENU_ABOUT_RECOMMENDATION'\n    | 'MENU_REPORT'\n    | 'EXPLORE_DESTINATION_TRENDING'\n    | 'EXPLORE_DESTINATION_MUSIC'\n    | 'EXPLORE_DESTINATION_GAMING'\n    | 'EXPLORE_DESTINATION_NEWS'\n    | 'EXPLORE_DESTINATION_MOVIES'\n    | 'EXPLORE_DESTINATION_FASHION'\n    | 'EXPLORE_DESTINATION_LEARNING'\n    | 'EXPLORE_DESTINATION_STAY_HOME'\n    | 'MENU_ABOUT_GAMING_RECOMMENDATAION'\n    | 'EXPLORE_DESTINATION_LIVE'\n    | 'MENU_QUALITY'\n    | 'MENU_CAPTIONS'\n    | 'MENU_PLAYBACK_SPEED'\n    | 'MENU_SHARE_PLAYLIST_UNAVAILABLE'\n    | 'MENU_INFO_CARD'\n    | 'EXPLORE_DESTINATION_SPORTS'\n    | 'MENU_SINGLE_LOOP'\n    | 'MENU_HIDE_VIDEO'\n    | 'MENU_CLEAR_QUEUE'\n    | 'EXPLORE_DESTINATION_SHOPPING'\n    | 'MENU_PLAY_NEXT_IN_QUEUE'\n    | 'MENU_PLAY_LAST_IN_QUEUE'\n    | 'MENU_GO_TO_CHANNEL'\n    | 'EXPLORE_DESTINATION_PODCASTS'\n    | 'MEDIA_GENERATOR_PROMPT_INPUT'\n    | 'MEDIA_GENERATOR_STYLE_SHELF'\n    | 'MEDIA_GENERATOR_STYLE_ITEM'\n    | 'MEDIA_GENERATOR_CREATE_BUTTON'\n    | 'MEDIA_GENERATOR_T2V_ENTRYPOINT'\n    | 'MEDIA_GENERATOR_T2I_ENTRYPOINT'\n    | 'MEDIA_GENERATOR_T2M_ENTRYPOINT'\n    | 'MEDIA_GENERATOR_BACK_BUTTON'\n    | 'MEDIA_GENERATOR_HEADER'\n    | 'MEDIA_GENERATOR_LOADING_PROGRESS'\n    | 'MEDIA_GENERATOR_CANCEL_BUTTON'\n    | 'MEDIA_GENERATOR_IMAGE_PREVIEW'\n    | 'MEDIA_GENERATOR_VIDEO_PREVIEW'\n    | 'MEDIA_GENERATOR_DONE_BUTTON'\n    | 'MEDIA_GENERATOR_IMAGE_SELECTION'\n    | 'MEDIA_GENERATOR_SOUND_METADATA'\n    | 'MEDIA_GENERATOR_AUDIO_SELECT_BUTTON'\n    | 'MEDIA_GENERATOR_T2I2V_ENTRYPOINT'\n    | 'MENU_SAVE_QUEUE_TO_PLAYLIST'\n    | 'MEDIA_GENERATOR_ANIMATE_BUTTON'\n    | 'MEDIA_GENERATOR_SEGMENT_IMPORT_ENTRYPOINT';\n}\n\nexport default class AccessibilityData {\n  public accessibility_identifier?: string;\n  public identifier?: AccessibilityId;\n  public label?: string;\n  \n  constructor(data: RawNode) {\n    if ('accessibilityIdentifier' in data) {\n      this.accessibility_identifier = data.accessibilityIdentifier;\n    }\n    \n    if ('identifier' in data) {\n      this.identifier = {\n        accessibility_id_type: data.identifier.accessibilityIdType\n      };\n    }\n    \n    if ('label' in data) {\n      this.label = data.label;\n    }\n  }\n}", "\nexport const URLS = {\n  YT_BASE: 'https://www.youtube.com',\n  YT_MUSIC_BASE: 'https://music.youtube.com',\n  YT_SUGGESTIONS: 'https://suggestqueries-clients6.youtube.com',\n  YT_UPLOAD: 'https://upload.youtube.com/',\n  API: {\n    BASE: 'https://youtubei.googleapis.com',\n    PRODUCTION_1: 'https://www.youtube.com/youtubei/',\n    PRODUCTION_2: 'https://youtubei.googleapis.com/youtubei/',\n    STAGING: 'https://green-youtubei.sandbox.googleapis.com/youtubei/',\n    RELEASE: 'https://release-youtubei.sandbox.googleapis.com/youtubei/',\n    TEST: 'https://test-youtubei.sandbox.googleapis.com/youtubei/',\n    CAMI: 'http://cami-youtubei.sandbox.googleapis.com/youtubei/',\n    UYTFE: 'https://uytfe.sandbox.google.com/youtubei/'\n  },\n  GOOGLE_SEARCH_BASE: 'https://www.google.com/'\n} as const;\nexport const OAUTH = {\n  REGEX: {\n    TV_SCRIPT: new RegExp('<script\\\\s+id=\"base-js\"\\\\s+src=\"([^\"]+)\"[^>]*><\\\\/script>'),\n    CLIENT_IDENTITY: new RegExp('clientId:\"(?<client_id>[^\"]+)\",[^\"]*?:\"(?<client_secret>[^\"]+)\"')\n  }\n} as const;\nexport const CLIENTS = {\n  IOS: {\n    NAME: 'iOS',\n    VERSION: '20.11.6',\n    USER_AGENT: 'com.google.ios.youtube/20.11.6 (iPhone10,4; U; CPU iOS 16_7_7 like Mac OS X)',\n    DEVICE_MODEL: 'iPhone10,4',\n    OS_NAME: 'iOS',\n    OS_VERSION: '16.7.7.20H330'\n  },\n  WEB: {\n    NAME: 'WEB',\n    VERSION: '2.20260206.01.00',\n    API_KEY: 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',\n    API_VERSION: 'v1',\n    STATIC_VISITOR_ID: '6zpwvWUNAco',\n    SUGG_EXP_ID: 'ytzpb5_e2,ytpo.bo.lqp.elu=1,ytpo.bo.lqp.ecsc=1,ytpo.bo.lqp.mcsc=3,ytpo.bo.lqp.mec=1,ytpo.bo.lqp.rw=0.8,ytpo.bo.lqp.fw=0.2,ytpo.bo.lqp.szp=1,ytpo.bo.lqp.mz=3,ytpo.bo.lqp.al=en_us,ytpo.bo.lqp.zrm=1,ytpo.bo.lqp.er=1,ytpo.bo.ro.erl=1,ytpo.bo.ro.mlus=3,ytpo.bo.ro.erls=3,ytpo.bo.qfo.mlus=3,ytzprp.ppp.e=1,ytzprp.ppp.st=772,ytzprp.ppp.p=5'\n  },\n  MWEB: {\n    NAME: 'MWEB',\n    VERSION: '2.20260205.04.01',\n    API_VERSION: 'v1'\n  },\n  WEB_KIDS: {\n    NAME: 'WEB_KIDS',\n    VERSION: '2.20260205.00.00'\n  },\n  YTMUSIC: {\n    NAME: 'WEB_REMIX',\n    VERSION: '1.20250219.01.00'\n  },\n  ANDROID: {\n    NAME: 'ANDROID',\n    VERSION: '21.03.36',\n    SDK_VERSION: 36,\n    USER_AGENT: 'com.google.android.youtube/21.03.36(Linux; U; Android 16; en_US; SM-S908E Build/TP1A.220624.014) gzip'\n  },\n  ANDROID_VR: {\n    NAME: 'ANDROID_VR',\n    VERSION: '1.65.10',\n    SDK_VERSION: 32,\n    DEVICE_MAKE: 'Oculus',\n    DEVICE_MODEL: 'Quest 3',\n    USER_AGENT: 'com.google.android.apps.youtube.vr.oculus/1.65.10 (Linux; U; Android 12L; eureka-user Build/SQ3A.220605.009.A1) gzip'\n  },\n  YTSTUDIO_ANDROID: {\n    NAME: 'ANDROID_CREATOR',\n    VERSION: '22.43.101'\n  },\n  YTMUSIC_ANDROID: {\n    NAME: 'ANDROID_MUSIC',\n    VERSION: '5.34.51'\n  },\n  TV: {\n    NAME: 'TVHTML5',\n    VERSION: '7.20260311.12.00',\n    USER_AGENT: 'Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version'\n  },\n  TV_SIMPLY: {\n    NAME: 'TVHTML5_SIMPLY',\n    VERSION: '1.0'\n  },\n  TV_EMBEDDED: {\n    NAME: 'TVHTML5_SIMPLY_EMBEDDED_PLAYER',\n    VERSION: '2.0'\n  },\n  WEB_EMBEDDED: {\n    NAME: 'WEB_EMBEDDED_PLAYER',\n    VERSION: '1.20260206.01.00',\n    API_KEY: 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',\n    API_VERSION: 'v1',\n    STATIC_VISITOR_ID: '6zpwvWUNAco'\n  },\n  WEB_CREATOR: {\n    NAME: 'WEB_CREATOR',\n    VERSION: '1.20241203.01.00',\n    API_KEY: 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',\n    API_VERSION: 'v1',\n    STATIC_VISITOR_ID: '6zpwvWUNAco'\n  }\n} as const;\n/**\n * The keys correspond to the `NAME` fields in {@linkcode CLIENTS} constant\n */\nexport const CLIENT_NAME_IDS = {\n  iOS: '5',\n  WEB: '1',\n  MWEB: '2',\n  WEB_KIDS: '76',\n  WEB_REMIX: '67',\n  ANDROID: '3',\n  ANDROID_CREATOR: '14',\n  ANDROID_MUSIC: '21',\n  ANDROID_VR: '28',\n  TVHTML5: '7',\n  TVHTML5_SIMPLY: '74',\n  TVHTML5_SIMPLY_EMBEDDED_PLAYER: '85',\n  WEB_EMBEDDED_PLAYER: '56',\n  WEB_CREATOR: '62'\n} as const;\nexport const STREAM_HEADERS = {\n  'accept': '*/*',\n  'origin': 'https://www.youtube.com',\n  'referer': 'https://www.youtube.com',\n  'DNT': '?1'\n} as const;\nexport const INNERTUBE_HEADERS_BASE = {\n  'accept': '*/*',\n  'accept-encoding': 'gzip, deflate',\n  'content-type': 'application/json'\n} as const;\n\nexport const SUPPORTED_CLIENTS = [ 'IOS', 'WEB', 'MWEB', 'YTKIDS', 'YTMUSIC', 'ANDROID', 'ANDROID_VR', 'YTSTUDIO_ANDROID', 'YTMUSIC_ANDROID', 'TV', 'TV_SIMPLY', 'TV_EMBEDDED', 'WEB_EMBEDDED', 'WEB_CREATOR' ];", "import * as YTNodes from './nodes.js';\nimport { InnertubeError, ParsingError } from '../utils/Utils.js';\nimport type { ObservedArray, YTNode, YTNodeConstructor } from './helpers.js';\nimport { Memo, observe, SuperParsedResult } from './helpers.js';\nimport type { KeyInfo } from './generator.js';\nimport { camelToSnake, generateRuntimeClass, generateTypescriptClass } from './generator.js';\nimport { Log } from '../utils/index.js';\nimport packageInfo from '../../package.json' with { type: 'json' };\n\nimport {\n  Continuation,\n  ContinuationCommand,\n  GridContinuation,\n  ItemSectionContinuation,\n  LiveChatContinuation,\n  MusicPlaylistShelfContinuation,\n  MusicShelfContinuation,\n  NavigateAction,\n  PlaylistPanelContinuation,\n  ReloadContinuationItemsCommand,\n  SectionListContinuation,\n  ShowMiniplayerCommand\n} from './continuations.js';\n\nimport AudioOnlyPlayability from './classes/AudioOnlyPlayability.js';\nimport CardCollection from './classes/CardCollection.js';\nimport Endscreen from './classes/Endscreen.js';\nimport PlayerAnnotationsExpanded from './classes/PlayerAnnotationsExpanded.js';\nimport PlayerCaptionsTracklist from './classes/PlayerCaptionsTracklist.js';\nimport PlayerLiveStoryboardSpec from './classes/PlayerLiveStoryboardSpec.js';\nimport PlayerStoryboardSpec from './classes/PlayerStoryboardSpec.js';\nimport Alert from './classes/Alert.js';\nimport AlertWithButton from './classes/AlertWithButton.js';\nimport EngagementPanelSectionList from './classes/EngagementPanelSectionList.js';\nimport MusicMultiSelectMenuItem from './classes/menus/MusicMultiSelectMenuItem.js';\nimport MacroMarkersListEntity from './classes/MacroMarkersListEntity.js';\nimport Format from './classes/misc/Format.js';\nimport VideoDetails from './classes/misc/VideoDetails.js';\nimport NavigationEndpoint from './classes/NavigationEndpoint.js';\nimport CommentView from './classes/comments/CommentView.js';\nimport MusicThumbnail from './classes/MusicThumbnail.js';\nimport OpenPopupAction from './classes/actions/OpenPopupAction.js';\nimport AppendContinuationItemsAction from './classes/actions/AppendContinuationItemsAction.js';\nimport type { IParsedResponse, IRawResponse, RawData, RawNode } from './types/index.js';\n\nconst TAG = 'Parser';\n\nexport type ParserError = {\n  classname: string,\n} & ({\n  error_type: 'typecheck',\n  classdata: RawNode,\n  expected: string | string[]\n} | {\n  error_type: 'parse',\n  classdata: RawNode,\n  error: unknown\n} | {\n  error_type: 'mutation_data_missing',\n  classname: string\n} | {\n  error_type: 'mutation_data_invalid',\n  total: number,\n  failed: number,\n  titles: string[]\n} | {\n  error_type: 'class_not_found',\n  key_info: KeyInfo,\n} | {\n  error_type: 'class_changed',\n  key_info: KeyInfo,\n  changed_keys: KeyInfo\n});\n\nexport type ParserErrorHandler = (error: ParserError) => void;\n\nconst IGNORED_LIST = new Set([\n  'AdSlot',\n  'DisplayAd',\n  'SearchPyv',\n  'MealbarPromo',\n  'PrimetimePromo',\n  'PromotedSparklesWeb',\n  'CompactPromotedVideo',\n  'BrandVideoShelf',\n  'BrandVideoSingleton',\n  'StatementBanner',\n  'GuideSigninPromo',\n  'AdsEngagementPanelContent',\n  'MiniGameCardView',\n  'GenAiFeedbackFormView'\n]);\n\nconst RUNTIME_NODES = new Map<string, YTNodeConstructor>(Object.entries(YTNodes));\n\nconst DYNAMIC_NODES = new Map<string, YTNodeConstructor>();\n\nlet MEMO: Memo | null = null;\n\nlet ERROR_HANDLER: ParserErrorHandler = ({ classname, ...context }: ParserError) => {\n  switch (context.error_type) {\n    case 'parse':\n      if (context.error instanceof Error) {\n        Log.warn(TAG,\n          new InnertubeError(\n            `Something went wrong at ${classname}!\\n` +\n            `This is a bug, please report it at ${packageInfo.bugs.url}`, {\n              stack: context.error.stack,\n              classdata: JSON.stringify(context.classdata, null, 2)\n            }\n          )\n        );\n      }\n      break;\n    case 'typecheck':\n      Log.warn(TAG,\n        new ParsingError(\n          `Type mismatch, got ${classname} expected ${Array.isArray(context.expected) ? context.expected.join(' | ') : context.expected}.`,\n          context.classdata\n        )\n      );\n      break;\n    case 'mutation_data_missing':\n      Log.warn(TAG,\n        new InnertubeError(\n          `Mutation data required for processing ${classname}, but none found.\\n` +\n          `This is a bug, please report it at ${packageInfo.bugs.url}`\n        )\n      );\n      break;\n    case 'mutation_data_invalid':\n      Log.warn(TAG,\n        new InnertubeError(\n          `Mutation data missing or invalid for ${context.failed} out of ${context.total} MusicMultiSelectMenuItems. ` +\n          `The titles of the failed items are: ${context.titles.join(', ')}.\\n` +\n          `This is a bug, please report it at ${packageInfo.bugs.url}`\n        )\n      );\n      break;\n    case 'class_not_found':\n      Log.warn(TAG,\n        new InnertubeError(\n          `${classname} not found!\\n` +\n          `This is a bug, want to help us fix it? Follow the instructions at ${packageInfo.homepage.split('#', 1)[0]}/blob/main/docs/updating-the-parser.md or report it at ${packageInfo.bugs.url}!\\n` +\n          `Introspected and JIT generated this class in the meantime:\\n${generateTypescriptClass(classname, context.key_info)}`\n        )\n      );\n      break;\n    case 'class_changed':\n      Log.warn(TAG,\n        `${classname} changed!\\n` +\n        `The following keys where altered: ${context.changed_keys.map(([ key ]) => camelToSnake(key)).join(', ')}\\n` +\n        `The class has changed to:\\n${generateTypescriptClass(classname, context.key_info)}`\n      );\n      break;\n    default:\n      Log.warn(TAG,\n        'Unreachable code reached at ParserErrorHandler'\n      );\n      break;\n  }\n};\n\nexport function setParserErrorHandler(handler: ParserErrorHandler) {\n  ERROR_HANDLER = handler;\n}\n\nfunction _clearMemo() {\n  MEMO = null;\n}\n\nfunction _createMemo() {\n  MEMO = new Memo();\n}\n\nfunction _addToMemo(classname: string, result: YTNode) {\n  if (!MEMO)\n    return;\n\n  const list = MEMO.get(classname);\n  if (!list)\n    return MEMO.set(classname, [ result ]);\n\n  list.push(result);\n}\n\nfunction _getMemo() {\n  if (!MEMO)\n    throw new Error('Parser#getMemo() called before Parser#createMemo()');\n  return MEMO;\n}\n\nexport function shouldIgnore(classname: string) {\n  return IGNORED_LIST.has(classname);\n}\n\nexport function sanitizeClassName(input: string) {\n  return (input.charAt(0).toUpperCase() + input.slice(1))\n    .replace(/Renderer|Model/g, '')\n    .replace(/Radio/g, 'Mix').trim();\n}\n\nexport function getParserByName(classname: string) {\n  const ParserConstructor = RUNTIME_NODES.get(classname);\n\n  if (!ParserConstructor) {\n    const error = new Error(`Module not found: ${classname}`);\n    (error as any).code = 'MODULE_NOT_FOUND';\n    throw error;\n  }\n\n  return ParserConstructor;\n}\n\nexport function hasParser(classname: string) {\n  return RUNTIME_NODES.has(classname);\n}\n\nexport function addRuntimeParser(classname: string, ParserConstructor: YTNodeConstructor) {\n  RUNTIME_NODES.set(classname, ParserConstructor);\n  DYNAMIC_NODES.set(classname, ParserConstructor);\n}\n\nexport function getDynamicParsers() {\n  return Object.fromEntries(DYNAMIC_NODES);\n}\n\n/**\n * Parses a given InnerTube response.\n * @param data - Raw data.\n */\nexport function parseResponse<T extends IParsedResponse = IParsedResponse>(data: IRawResponse): T {\n  const parsed_data = {} as T;\n\n  _createMemo();\n  const contents = parse(data.contents);\n  const contents_memo = _getMemo();\n  if (contents) {\n    parsed_data.contents = contents;\n    parsed_data.contents_memo = contents_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const on_response_received_actions = data.onResponseReceivedActions ? parseRR(data.onResponseReceivedActions) : null;\n  const on_response_received_actions_memo = _getMemo();\n  if (on_response_received_actions) {\n    parsed_data.on_response_received_actions = on_response_received_actions;\n    parsed_data.on_response_received_actions_memo = on_response_received_actions_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const on_response_received_endpoints = data.onResponseReceivedEndpoints ? parseRR(data.onResponseReceivedEndpoints) : null;\n  const on_response_received_endpoints_memo = _getMemo();\n  if (on_response_received_endpoints) {\n    parsed_data.on_response_received_endpoints = on_response_received_endpoints;\n    parsed_data.on_response_received_endpoints_memo = on_response_received_endpoints_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const on_response_received_commands = data.onResponseReceivedCommands ? parseRR(data.onResponseReceivedCommands) : null;\n  const on_response_received_commands_memo = _getMemo();\n  if (on_response_received_commands) {\n    parsed_data.on_response_received_commands = on_response_received_commands;\n    parsed_data.on_response_received_commands_memo = on_response_received_commands_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const continuation_contents = data.continuationContents ? parseLC(data.continuationContents) : null;\n  const continuation_contents_memo = _getMemo();\n  if (continuation_contents) {\n    parsed_data.continuation_contents = continuation_contents;\n    parsed_data.continuation_contents_memo = continuation_contents_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const actions = data.actions ? parseActions(data.actions) : null;\n  const actions_memo = _getMemo();\n  if (actions) {\n    parsed_data.actions = actions;\n    parsed_data.actions_memo = actions_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const live_chat_item_context_menu_supported_renderers = data.liveChatItemContextMenuSupportedRenderers ? parseItem(data.liveChatItemContextMenuSupportedRenderers) : null;\n  const live_chat_item_context_menu_supported_renderers_memo = _getMemo();\n  if (live_chat_item_context_menu_supported_renderers) {\n    parsed_data.live_chat_item_context_menu_supported_renderers = live_chat_item_context_menu_supported_renderers;\n    parsed_data.live_chat_item_context_menu_supported_renderers_memo = live_chat_item_context_menu_supported_renderers_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const header = data.header ? parse(data.header) : null;\n  const header_memo = _getMemo();\n  if (header) {\n    parsed_data.header = header;\n    parsed_data.header_memo = header_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const sidebar = data.sidebar ? parseItem(data.sidebar) : null;\n  const sidebar_memo = _getMemo();\n  if (sidebar) {\n    parsed_data.sidebar = sidebar;\n    parsed_data.sidebar_memo = sidebar_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const items = parse(data.items);\n  if (items) {\n    parsed_data.items = items;\n    parsed_data.items_memo = _getMemo();\n  }\n  _clearMemo();\n\n  applyMutations(contents_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);\n\n  if (on_response_received_endpoints_memo) {\n    applyCommentsMutations(on_response_received_endpoints_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);\n  }\n\n  const continuation = data.continuation ? parseC(data.continuation) : null;\n  if (continuation) {\n    parsed_data.continuation = continuation;\n  }\n\n  const continuation_endpoint = data.continuationEndpoint ? parseLC(data.continuationEndpoint) : null;\n  if (continuation_endpoint) {\n    parsed_data.continuation_endpoint = continuation_endpoint;\n  }\n\n  const metadata = parse(data.metadata);\n  if (metadata) {\n    parsed_data.metadata = metadata;\n  }\n\n  const microformat = parseItem(data.microformat);\n  if (microformat) {\n    parsed_data.microformat = microformat;\n  }\n\n  const overlay = parseItem(data.overlay);\n  if (overlay) {\n    parsed_data.overlay = overlay;\n  }\n\n  const alerts = parseArray(data.alerts, [ Alert, AlertWithButton ]);\n  if (alerts.length) {\n    parsed_data.alerts = alerts;\n  }\n\n  const refinements = data.refinements;\n  if (refinements) {\n    parsed_data.refinements = refinements;\n  }\n\n  const estimated_results = data.estimatedResults ? parseInt(data.estimatedResults) : null;\n  if (estimated_results) {\n    parsed_data.estimated_results = estimated_results;\n  }\n\n  const player_overlays = parse(data.playerOverlays);\n  if (player_overlays) {\n    parsed_data.player_overlays = player_overlays;\n  }\n\n  const background = parseItem(data.background, MusicThumbnail);\n  if (background) {\n    parsed_data.background = background;\n  }\n\n  const playback_tracking = data.playbackTracking ? {\n    videostats_watchtime_url: data.playbackTracking.videostatsWatchtimeUrl.baseUrl,\n    videostats_playback_url: data.playbackTracking.videostatsPlaybackUrl.baseUrl\n  } : null;\n\n  if (playback_tracking) {\n    parsed_data.playback_tracking = playback_tracking;\n  }\n\n  const playability_status = data.playabilityStatus ? {\n    status: data.playabilityStatus.status,\n    reason: data.playabilityStatus.reason || '',\n    embeddable: !!data.playabilityStatus.playableInEmbed || false,\n    audio_only_playability: parseItem(data.playabilityStatus.audioOnlyPlayability, AudioOnlyPlayability),\n    error_screen: parseItem(data.playabilityStatus.errorScreen)\n  } : null;\n\n  if (playability_status) {\n    parsed_data.playability_status = playability_status;\n  }\n\n  if (data.streamingData) {\n    // Currently each response with streaming data only has two n param values\n    // One for the adaptive formats and another for the combined formats\n    // As they are the same for a response, we only need to decipher them once\n    // For all further deciphering calls on formats from that response, we can use the cached output, given the same input n param\n    const this_response_nsig_cache = new Map<string, string>();\n\n    parsed_data.streaming_data = {\n      expires: new Date(Date.now() + parseInt(data.streamingData.expiresInSeconds) * 1000),\n      formats: parseFormats(data.streamingData.formats, this_response_nsig_cache),\n      adaptive_formats: parseFormats(data.streamingData.adaptiveFormats, this_response_nsig_cache),\n      dash_manifest_url: data.streamingData.dashManifestUrl,\n      hls_manifest_url: data.streamingData.hlsManifestUrl,\n      server_abr_streaming_url: data.streamingData.serverAbrStreamingUrl\n    };\n  }\n\n  if (data.playerConfig) {\n    parsed_data.player_config = {\n      audio_config: {\n        loudness_db: data.playerConfig.audioConfig?.loudnessDb,\n        perceptual_loudness_db: data.playerConfig.audioConfig?.perceptualLoudnessDb,\n        enable_per_format_loudness: data.playerConfig.audioConfig?.enablePerFormatLoudness\n      },\n      stream_selection_config: {\n        max_bitrate: data.playerConfig.streamSelectionConfig?.maxBitrate || '0'\n      },\n      media_common_config: {\n        dynamic_readahead_config: {\n          max_read_ahead_media_time_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.maxReadAheadMediaTimeMs || 0,\n          min_read_ahead_media_time_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.minReadAheadMediaTimeMs || 0,\n          read_ahead_growth_rate_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.readAheadGrowthRateMs || 0\n        },\n        media_ustreamer_request_config: {\n          video_playback_ustreamer_config: data.playerConfig.mediaCommonConfig?.mediaUstreamerRequestConfig?.videoPlaybackUstreamerConfig\n        }\n      }\n    };\n  }\n\n  const current_video_endpoint = data.currentVideoEndpoint ? new NavigationEndpoint(data.currentVideoEndpoint) : null;\n  if (current_video_endpoint) {\n    parsed_data.current_video_endpoint = current_video_endpoint;\n  }\n\n  const endpoint = data.endpoint ? new NavigationEndpoint(data.endpoint) : null;\n  if (endpoint) {\n    parsed_data.endpoint = endpoint;\n  }\n\n  const captions = parseItem(data.captions, PlayerCaptionsTracklist);\n  if (captions) {\n    parsed_data.captions = captions;\n  }\n\n  const video_details = data.videoDetails ? new VideoDetails(data.videoDetails) : null;\n  if (video_details) {\n    parsed_data.video_details = video_details;\n  }\n\n  const annotations = parseArray(data.annotations, PlayerAnnotationsExpanded);\n  if (annotations.length) {\n    parsed_data.annotations = annotations;\n  }\n\n  const storyboards = parseItem(data.storyboards, [ PlayerStoryboardSpec, PlayerLiveStoryboardSpec ]);\n  if (storyboards) {\n    parsed_data.storyboards = storyboards;\n  }\n\n  const endscreen = parseItem(data.endscreen, Endscreen);\n  if (endscreen) {\n    parsed_data.endscreen = endscreen;\n  }\n\n  const cards = parseItem(data.cards, CardCollection);\n  if (cards) {\n    parsed_data.cards = cards;\n  }\n\n  const engagement_panels = parseArray(data.engagementPanels, EngagementPanelSectionList);\n  if (engagement_panels.length) {\n    parsed_data.engagement_panels = engagement_panels;\n  }\n  \n  if (data.bgChallenge) {\n    const interpreter_url = {\n      private_do_not_access_or_else_trusted_resource_url_wrapped_value: data.bgChallenge.interpreterUrl.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue,\n      private_do_not_access_or_else_safe_script_wrapped_value: data.bgChallenge.interpreterUrl.privateDoNotAccessOrElseSafeScriptWrappedValue\n    };\n    \n    parsed_data.bg_challenge = {\n      interpreter_url,\n      interpreter_hash: data.bgChallenge.interpreterHash,\n      program: data.bgChallenge.program,\n      global_name: data.bgChallenge.globalName,\n      client_experiments_state_blob: data.bgChallenge.clientExperimentsStateBlob\n    };\n  }\n  \n  if (data.challenge) {\n    parsed_data.challenge = data.challenge;\n  }\n\n  if (data.playerResponse) {\n    parsed_data.player_response = parseResponse(data.playerResponse);\n  }\n\n  if (data.watchNextResponse) {\n    parsed_data.watch_next_response = parseResponse(data.watchNextResponse);\n  }\n\n  if (data.cpnInfo) {\n    parsed_data.cpn_info = {\n      cpn: data.cpnInfo.cpn,\n      cpn_source: data.cpnInfo.cpnSource\n    };\n  }\n\n  if (data.entries) {\n    parsed_data.entries = data.entries.map((entry) => new NavigationEndpoint(entry));\n  }\n  \n  if (data.targetId) {\n    parsed_data.target_id = data.targetId;\n  }\n\n  return parsed_data;\n}\n\n/**\n * Parses an item.\n * @param data - The data to parse.\n * @param validTypes - YTNode types that are allowed to be parsed.\n */\nexport function parseItem<T extends YTNode, K extends YTNodeConstructor<T>[]>(data: RawNode | undefined, validTypes: K): InstanceType<K[number]> | null;\nexport function parseItem<T extends YTNode>(data: RawNode | undefined, validTypes: YTNodeConstructor<T>): T | null;\nexport function parseItem(data?: RawNode): YTNode;\nexport function parseItem(data?: RawNode, validTypes?: YTNodeConstructor | YTNodeConstructor[]) {\n  if (!data) return null;\n\n  const keys = Object.keys(data);\n\n  if (!keys.length)\n    return null;\n\n  const classname = sanitizeClassName(keys[0]);\n\n  if (!shouldIgnore(classname)) {\n    try {\n      const has_target_class = hasParser(classname);\n\n      const TargetClass = has_target_class ?\n        getParserByName(classname) :\n        generateRuntimeClass(classname, data[keys[0]], ERROR_HANDLER);\n\n      if (validTypes) {\n        if (Array.isArray(validTypes)) {\n          if (!validTypes.some((type) => type.type === TargetClass.type)) {\n            ERROR_HANDLER({\n              classdata: data[keys[0]],\n              classname,\n              error_type: 'typecheck',\n              expected: validTypes.map((type) => type.type)\n            });\n            return null;\n          }\n        } else if (TargetClass.type !== validTypes.type) {\n          ERROR_HANDLER({\n            classdata: data[keys[0]],\n            classname,\n            error_type: 'typecheck',\n            expected: validTypes.type\n          });\n          return null;\n        }\n      }\n\n      const result = new TargetClass(data[keys[0]]);\n      _addToMemo(classname, result);\n\n      return result;\n    } catch (err) {\n      ERROR_HANDLER({\n        classname,\n        classdata: data[keys[0]],\n        error: err,\n        error_type: 'parse'\n      });\n      return null;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Parses an array of items.\n * @param data - The data to parse.\n * @param validTypes - YTNode types that are allowed to be parsed.\n */\nexport function parseArray<T extends YTNode, K extends YTNodeConstructor<T>[]>(data: RawNode[] | undefined, validTypes: K): ObservedArray<InstanceType<K[number]>>;\nexport function parseArray<T extends YTNode = YTNode>(data: RawNode[] | undefined, validType: YTNodeConstructor<T>): ObservedArray<T>;\nexport function parseArray(data: RawNode[] | undefined): ObservedArray<YTNode>;\nexport function parseArray(data?: RawNode[], validTypes?: YTNodeConstructor | YTNodeConstructor[]) {\n  if (Array.isArray(data)) {\n    const results: YTNode[] = [];\n\n    for (const item of data) {\n      const result = parseItem(item, validTypes as YTNodeConstructor);\n      if (result) {\n        results.push(result);\n      }\n    }\n\n    return observe(results);\n  } else if (!data) {\n    return observe([] as YTNode[]);\n  }\n  throw new ParsingError('Expected array but got a single item');\n}\n\n/**\n * Parses an item or an array of items.\n * @param data - The data to parse.\n * @param requireArray - Whether the data should be parsed as an array.\n * @param validTypes - YTNode types that are allowed to be parsed.\n */\nexport function parse<T extends YTNode, K extends YTNodeConstructor<T>[]>(data: RawData, requireArray: true, validTypes?: K): ObservedArray<InstanceType<K[number]>> | null;\nexport function parse<T extends YTNode, K extends YTNodeConstructor<T>>(data: RawData, requireArray: true, validTypes?: K): ObservedArray<InstanceType<K>> | null;\nexport function parse<T extends YTNode = YTNode>(data?: RawData, requireArray?: false | undefined, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]): SuperParsedResult<T>;\nexport function parse<T extends YTNode = YTNode>(data?: RawData, requireArray?: boolean, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]) {\n  if (!data) return null;\n\n  if (Array.isArray(data)) {\n    const results: T[] = [];\n\n    for (const item of data) {\n      const result = parseItem(item, validTypes as YTNodeConstructor<T>);\n      if (result) {\n        results.push(result);\n      }\n    }\n\n    const res = observe(results);\n\n    return requireArray ? res : new SuperParsedResult(res);\n  } else if (requireArray) {\n    throw new ParsingError('Expected array but got a single item');\n  }\n\n  return new SuperParsedResult(parseItem(data, validTypes as YTNodeConstructor<T>));\n}\n\nconst command_regexp = /Command$/;\nconst endpoint_regexp = /Endpoint$/;\nconst action_regexp = /Action$/;\n\n/**\n * Parses an InnerTube command and returns a YTNode instance if applicable.\n * @param data - The raw node data to parse\n * @returns A YTNode instance if parsing is successful, undefined otherwise\n */\nexport function parseCommand(data: RawNode): YTNode | undefined {\n  let keys: string[] = [];\n\n  try {\n    keys = Object.keys(data);\n  } catch { /** NO-OP */ }\n\n  for (const key of keys) {\n    const value = data[key];\n    if (command_regexp.test(key) || endpoint_regexp.test(key) || action_regexp.test(key)) {\n      const classname = sanitizeClassName(key);\n\n      if (shouldIgnore(classname))\n        return undefined;\n\n      try {\n        const has_target_class = hasParser(classname);\n        if (has_target_class)\n          return new (getParserByName(classname))(value);\n      } catch (error) {\n        ERROR_HANDLER({\n          error,\n          classname,\n          classdata: value,\n          error_type: 'parse'\n        });\n      }\n    }\n  }\n}\n\n/**\n * Parses an array of InnerTube command nodes.\n * @param commands - Array of raw command nodes to parse\n * @returns An observed array of parsed YTNodes\n */\nexport function parseCommands(commands?: RawNode[]): ObservedArray<YTNode> {\n  if (Array.isArray(commands)) {\n    const results: YTNode[] = [];\n\n    for (const item of commands) {\n      const result = parseCommand(item);\n      if (result) {\n        results.push(result);\n      }\n    }\n\n    return observe(results);\n  } else if (!commands) return observe([]);\n  throw new ParsingError('Expected array but got a single item');\n}\n\nexport function parseC(data: RawNode) {\n  if (data.timedContinuationData)\n    return new Continuation({ continuation: data.timedContinuationData, type: 'timed' });\n  return null;\n}\n\nexport function parseLC(data: RawNode) {\n  if (data.itemSectionContinuation)\n    return new ItemSectionContinuation(data.itemSectionContinuation);\n  if (data.sectionListContinuation)\n    return new SectionListContinuation(data.sectionListContinuation);\n  if (data.liveChatContinuation)\n    return new LiveChatContinuation(data.liveChatContinuation);\n  if (data.musicPlaylistShelfContinuation)\n    return new MusicPlaylistShelfContinuation(data.musicPlaylistShelfContinuation);\n  if (data.musicShelfContinuation)\n    return new MusicShelfContinuation(data.musicShelfContinuation);\n  if (data.gridContinuation)\n    return new GridContinuation(data.gridContinuation);\n  if (data.playlistPanelContinuation)\n    return new PlaylistPanelContinuation(data.playlistPanelContinuation);\n  if (data.continuationCommand)\n    return new ContinuationCommand(data.continuationCommand);\n\n  return null;\n}\n\nexport function parseRR(actions: RawNode[]) {\n  return observe(actions.map((action: any) => {\n    if (action.navigateAction)\n      return new NavigateAction(action.navigateAction);\n    else if (action.showMiniplayerCommand)\n      return new ShowMiniplayerCommand(action.showMiniplayerCommand);\n    else if (action.reloadContinuationItemsCommand)\n      return new ReloadContinuationItemsCommand(action.reloadContinuationItemsCommand);\n    else if (action.appendContinuationItemsAction)\n      return new AppendContinuationItemsAction(action.appendContinuationItemsAction);\n    else if (action.openPopupAction)\n      return new OpenPopupAction(action.openPopupAction);\n  }).filter((item) => item) as (AppendContinuationItemsAction | OpenPopupAction | NavigateAction | ShowMiniplayerCommand | ReloadContinuationItemsCommand)[]);\n}\n\nexport function parseActions(data: RawData) {\n  if (Array.isArray(data)) {\n    return parse(data.map((action) => {\n      delete action.clickTrackingParams;\n      return action;\n    }));\n  }\n  return new SuperParsedResult(parseItem(data));\n}\n\nexport function parseFormats(formats: RawNode[], this_response_nsig_cache: Map<string, string>): Format[] {\n  return formats?.map((format) => new Format(format, this_response_nsig_cache)) || [];\n}\n\nexport function applyMutations(memo: Memo, mutations: RawNode[]) {\n  // Apply mutations to MusicMultiSelectMenuItems\n  const music_multi_select_menu_items = memo.getType(MusicMultiSelectMenuItem);\n\n  if (music_multi_select_menu_items.length > 0 && !mutations) {\n    ERROR_HANDLER({\n      error_type: 'mutation_data_missing',\n      classname: 'MusicMultiSelectMenuItem'\n    });\n  } else {\n    const missing_or_invalid_mutations = [];\n\n    for (const menu_item of music_multi_select_menu_items) {\n      const mutation = mutations\n        .find((mutation) => mutation.payload?.musicFormBooleanChoice?.id === menu_item.form_item_entity_key);\n\n      const choice = mutation?.payload.musicFormBooleanChoice;\n\n      if (choice?.selected !== undefined && choice?.opaqueToken) {\n        menu_item.selected = choice.selected;\n      } else {\n        missing_or_invalid_mutations.push(`'${menu_item.title}'`);\n      }\n    }\n    if (missing_or_invalid_mutations.length > 0) {\n      ERROR_HANDLER({\n        error_type: 'mutation_data_invalid',\n        classname: 'MusicMultiSelectMenuItem',\n        total: music_multi_select_menu_items.length,\n        failed: missing_or_invalid_mutations.length,\n        titles: missing_or_invalid_mutations\n      });\n    }\n  }\n\n  // Apply mutations to MacroMarkersListEntity\n  if (mutations) {\n    const heat_map_mutations = mutations.filter((mutation) =>\n      mutation.payload?.macroMarkersListEntity &&\n      mutation.payload.macroMarkersListEntity.markersList?.markerType === 'MARKER_TYPE_HEATMAP'\n    );\n\n    for (const mutation of heat_map_mutations) {\n      const macro_markers_entity = new MacroMarkersListEntity(mutation.payload.macroMarkersListEntity);\n      const list = memo.get('MacroMarkersListEntity');\n      if (!list) {\n        memo.set('MacroMarkersListEntity', [ macro_markers_entity ]);\n      } else {\n        list.push(macro_markers_entity);\n      }\n    }\n  }\n}\n\nexport function applyCommentsMutations(memo: Memo, mutations: RawNode[]) {\n  const comment_view_items = memo.getType(CommentView);\n\n  if (comment_view_items.length > 0) {\n    if (!mutations) {\n      ERROR_HANDLER({\n        error_type: 'mutation_data_missing',\n        classname: 'CommentView'\n      });\n    }\n\n    for (const comment_view of comment_view_items) {\n      const comment_mutation = mutations\n        .find((mutation) => mutation.payload?.commentEntityPayload?.key === comment_view.keys.comment)\n        ?.payload?.commentEntityPayload;\n\n      const toolbar_state_mutation = mutations\n        .find((mutation) => mutation.payload?.engagementToolbarStateEntityPayload?.key === comment_view.keys.toolbar_state)\n        ?.payload?.engagementToolbarStateEntityPayload;\n\n      const engagement_toolbar = mutations.find((mutation) => mutation.entityKey === comment_view.keys.toolbar_surface)\n        ?.payload?.engagementToolbarSurfaceEntityPayload;\n\n      const comment_surface_mutation = mutations\n        .find((mutation) => mutation.payload?.commentSurfaceEntityPayload?.key === comment_view.keys.comment_surface)\n        ?.payload?.commentSurfaceEntityPayload;\n\n      comment_view.applyMutations(comment_mutation, toolbar_state_mutation, engagement_toolbar, comment_surface_mutation);\n    }\n  }\n}\n", "// This file was auto generated, do not edit.\n// See ./dev-scripts/gen-parser-map.mjs\n\nexport { default as AboutChannel } from './classes/AboutChannel.js';\nexport { default as AboutChannelView } from './classes/AboutChannelView.js';\nexport { default as AccountChannel } from './classes/AccountChannel.js';\nexport { default as AccountItem } from './classes/AccountItem.js';\nexport { default as AccountItemSection } from './classes/AccountItemSection.js';\nexport { default as AccountItemSectionHeader } from './classes/AccountItemSectionHeader.js';\nexport { default as AccountSectionList } from './classes/AccountSectionList.js';\nexport { default as AppendContinuationItemsAction } from './classes/actions/AppendContinuationItemsAction.js';\nexport { default as ChangeEngagementPanelVisibilityAction } from './classes/actions/ChangeEngagementPanelVisibilityAction.js';\nexport { default as GetMultiPageMenuAction } from './classes/actions/GetMultiPageMenuAction.js';\nexport { default as OpenPopupAction } from './classes/actions/OpenPopupAction.js';\nexport { default as SendFeedbackAction } from './classes/actions/SendFeedbackAction.js';\nexport { default as SignalAction } from './classes/actions/SignalAction.js';\nexport { default as UpdateChannelSwitcherPageAction } from './classes/actions/UpdateChannelSwitcherPageAction.js';\nexport { default as UpdateEngagementPanelAction } from './classes/actions/UpdateEngagementPanelAction.js';\nexport { default as UpdateSubscribeButtonAction } from './classes/actions/UpdateSubscribeButtonAction.js';\nexport { default as ActiveAccountHeader } from './classes/ActiveAccountHeader.js';\nexport { default as AddToPlaylist } from './classes/AddToPlaylist.js';\nexport { default as Alert } from './classes/Alert.js';\nexport { default as AlertWithButton } from './classes/AlertWithButton.js';\nexport { default as AnimatedThumbnailOverlayView } from './classes/AnimatedThumbnailOverlayView.js';\nexport { default as AttributionView } from './classes/AttributionView.js';\nexport { default as AudioOnlyPlayability } from './classes/AudioOnlyPlayability.js';\nexport { default as AutomixPreviewVideo } from './classes/AutomixPreviewVideo.js';\nexport { default as AvatarStackView } from './classes/AvatarStackView.js';\nexport { default as AvatarView } from './classes/AvatarView.js';\nexport { default as BackgroundPromo } from './classes/BackgroundPromo.js';\nexport { default as BackstageImage } from './classes/BackstageImage.js';\nexport { default as BackstagePost } from './classes/BackstagePost.js';\nexport { default as BackstagePostThread } from './classes/BackstagePostThread.js';\nexport { default as BadgeView } from './classes/BadgeView.js';\nexport { default as BrowseFeedActions } from './classes/BrowseFeedActions.js';\nexport { default as BrowserMediaSession } from './classes/BrowserMediaSession.js';\nexport { default as Button } from './classes/Button.js';\nexport { default as ButtonCardView } from './classes/ButtonCardView.js';\nexport { default as ButtonView } from './classes/ButtonView.js';\nexport { default as C4TabbedHeader } from './classes/C4TabbedHeader.js';\nexport { default as CallToActionButton } from './classes/CallToActionButton.js';\nexport { default as Card } from './classes/Card.js';\nexport { default as CardCollection } from './classes/CardCollection.js';\nexport { default as CarouselHeader } from './classes/CarouselHeader.js';\nexport { default as CarouselItem } from './classes/CarouselItem.js';\nexport { default as CarouselItemView } from './classes/CarouselItemView.js';\nexport { default as CarouselLockup } from './classes/CarouselLockup.js';\nexport { default as CarouselTitleView } from './classes/CarouselTitleView.js';\nexport { default as Channel } from './classes/Channel.js';\nexport { default as ChannelAboutFullMetadata } from './classes/ChannelAboutFullMetadata.js';\nexport { default as ChannelAgeGate } from './classes/ChannelAgeGate.js';\nexport { default as ChannelExternalLinkView } from './classes/ChannelExternalLinkView.js';\nexport { default as ChannelFeaturedContent } from './classes/ChannelFeaturedContent.js';\nexport { default as ChannelHeaderLinks } from './classes/ChannelHeaderLinks.js';\nexport { default as ChannelHeaderLinksView } from './classes/ChannelHeaderLinksView.js';\nexport { default as ChannelMetadata } from './classes/ChannelMetadata.js';\nexport { default as ChannelMobileHeader } from './classes/ChannelMobileHeader.js';\nexport { default as ChannelOptions } from './classes/ChannelOptions.js';\nexport { default as ChannelOwnerEmptyState } from './classes/ChannelOwnerEmptyState.js';\nexport { default as ChannelSubMenu } from './classes/ChannelSubMenu.js';\nexport { default as ChannelSwitcherHeader } from './classes/ChannelSwitcherHeader.js';\nexport { default as ChannelSwitcherPage } from './classes/ChannelSwitcherPage.js';\nexport { default as ChannelTagline } from './classes/ChannelTagline.js';\nexport { default as ChannelThumbnailWithLink } from './classes/ChannelThumbnailWithLink.js';\nexport { default as ChannelVideoPlayer } from './classes/ChannelVideoPlayer.js';\nexport { default as Chapter } from './classes/Chapter.js';\nexport { default as ChildVideo } from './classes/ChildVideo.js';\nexport { default as ChipBarView } from './classes/ChipBarView.js';\nexport { default as ChipCloud } from './classes/ChipCloud.js';\nexport { default as ChipCloudChip } from './classes/ChipCloudChip.js';\nexport { default as ChipView } from './classes/ChipView.js';\nexport { default as ClientSideToggleMenuItem } from './classes/ClientSideToggleMenuItem.js';\nexport { default as ClipAdState } from './classes/ClipAdState.js';\nexport { default as ClipCreation } from './classes/ClipCreation.js';\nexport { default as ClipCreationScrubber } from './classes/ClipCreationScrubber.js';\nexport { default as ClipCreationTextInput } from './classes/ClipCreationTextInput.js';\nexport { default as ClipSection } from './classes/ClipSection.js';\nexport { default as CollaboratorInfoCardContent } from './classes/CollaboratorInfoCardContent.js';\nexport { default as CollageHeroImage } from './classes/CollageHeroImage.js';\nexport { default as CollectionThumbnailView } from './classes/CollectionThumbnailView.js';\nexport { default as AddToPlaylistCommand } from './classes/commands/AddToPlaylistCommand.js';\nexport { default as CommandExecutorCommand } from './classes/commands/CommandExecutorCommand.js';\nexport { default as ContinuationCommand } from './classes/commands/ContinuationCommand.js';\nexport { default as GetKidsBlocklistPickerCommand } from './classes/commands/GetKidsBlocklistPickerCommand.js';\nexport { default as RunAttestationCommand } from './classes/commands/RunAttestationCommand.js';\nexport { default as ShowDialogCommand } from './classes/commands/ShowDialogCommand.js';\nexport { default as UpdateEngagementPanelContentCommand } from './classes/commands/UpdateEngagementPanelContentCommand.js';\nexport { default as AuthorCommentBadge } from './classes/comments/AuthorCommentBadge.js';\nexport { default as CommentActionButtons } from './classes/comments/CommentActionButtons.js';\nexport { default as CommentDialog } from './classes/comments/CommentDialog.js';\nexport { default as CommentReplies } from './classes/comments/CommentReplies.js';\nexport { default as CommentReplyDialog } from './classes/comments/CommentReplyDialog.js';\nexport { default as CommentsEntryPointHeader } from './classes/comments/CommentsEntryPointHeader.js';\nexport { default as CommentsEntryPointTeaser } from './classes/comments/CommentsEntryPointTeaser.js';\nexport { default as CommentsHeader } from './classes/comments/CommentsHeader.js';\nexport { default as CommentSimplebox } from './classes/comments/CommentSimplebox.js';\nexport { default as CommentsSimplebox } from './classes/comments/CommentsSimplebox.js';\nexport { default as CommentThread } from './classes/comments/CommentThread.js';\nexport { default as CommentView } from './classes/comments/CommentView.js';\nexport { default as CreatorHeart } from './classes/comments/CreatorHeart.js';\nexport { default as EmojiPicker } from './classes/comments/EmojiPicker.js';\nexport { default as PdgCommentChip } from './classes/comments/PdgCommentChip.js';\nexport { default as SponsorCommentBadge } from './classes/comments/SponsorCommentBadge.js';\nexport { default as VoiceReplyContainerView } from './classes/comments/VoiceReplyContainerView.js';\nexport { default as CompactChannel } from './classes/CompactChannel.js';\nexport { default as CompactLink } from './classes/CompactLink.js';\nexport { default as CompactMix } from './classes/CompactMix.js';\nexport { default as CompactMovie } from './classes/CompactMovie.js';\nexport { default as CompactPlaylist } from './classes/CompactPlaylist.js';\nexport { default as CompactStation } from './classes/CompactStation.js';\nexport { default as CompactVideo } from './classes/CompactVideo.js';\nexport { default as CompositeVideoPrimaryInfo } from './classes/CompositeVideoPrimaryInfo.js';\nexport { default as ConfirmDialog } from './classes/ConfirmDialog.js';\nexport { default as ContentMetadataView } from './classes/ContentMetadataView.js';\nexport { default as ContentPreviewImageView } from './classes/ContentPreviewImageView.js';\nexport { default as ContinuationItem } from './classes/ContinuationItem.js';\nexport { default as ConversationBar } from './classes/ConversationBar.js';\nexport { default as CopyLink } from './classes/CopyLink.js';\nexport { default as CreatePlaylistDialog } from './classes/CreatePlaylistDialog.js';\nexport { default as CreatePlaylistDialogFormView } from './classes/CreatePlaylistDialogFormView.js';\nexport { default as DecoratedAvatarView } from './classes/DecoratedAvatarView.js';\nexport { default as DecoratedPlayerBar } from './classes/DecoratedPlayerBar.js';\nexport { default as DefaultPromoPanel } from './classes/DefaultPromoPanel.js';\nexport { default as DescriptionPreviewView } from './classes/DescriptionPreviewView.js';\nexport { default as DialogHeaderView } from './classes/DialogHeaderView.js';\nexport { default as DialogView } from './classes/DialogView.js';\nexport { default as DidYouMean } from './classes/DidYouMean.js';\nexport { default as DislikeButtonView } from './classes/DislikeButtonView.js';\nexport { default as DismissableDialog } from './classes/DismissableDialog.js';\nexport { default as DismissableDialogContentSection } from './classes/DismissableDialogContentSection.js';\nexport { default as DownloadButton } from './classes/DownloadButton.js';\nexport { default as Dropdown } from './classes/Dropdown.js';\nexport { default as DropdownItem } from './classes/DropdownItem.js';\nexport { default as DropdownView } from './classes/DropdownView.js';\nexport { default as DynamicTextView } from './classes/DynamicTextView.js';\nexport { default as Element } from './classes/Element.js';\nexport { default as EmergencyOnebox } from './classes/EmergencyOnebox.js';\nexport { default as EmojiPickerCategory } from './classes/EmojiPickerCategory.js';\nexport { default as EmojiPickerCategoryButton } from './classes/EmojiPickerCategoryButton.js';\nexport { default as EmojiPickerUpsellCategory } from './classes/EmojiPickerUpsellCategory.js';\nexport { default as AddToPlaylistEndpoint } from './classes/endpoints/AddToPlaylistEndpoint.js';\nexport { default as AddToPlaylistServiceEndpoint } from './classes/endpoints/AddToPlaylistServiceEndpoint.js';\nexport { default as BrowseEndpoint } from './classes/endpoints/BrowseEndpoint.js';\nexport { default as CreateCommentEndpoint } from './classes/endpoints/CreateCommentEndpoint.js';\nexport { default as CreatePlaylistServiceEndpoint } from './classes/endpoints/CreatePlaylistServiceEndpoint.js';\nexport { default as DeletePlaylistEndpoint } from './classes/endpoints/DeletePlaylistEndpoint.js';\nexport { default as FeedbackEndpoint } from './classes/endpoints/FeedbackEndpoint.js';\nexport { default as GetAccountsListInnertubeEndpoint } from './classes/endpoints/GetAccountsListInnertubeEndpoint.js';\nexport { default as HideEngagementPanelEndpoint } from './classes/endpoints/HideEngagementPanelEndpoint.js';\nexport { default as LikeEndpoint } from './classes/endpoints/LikeEndpoint.js';\nexport { default as LiveChatItemContextMenuEndpoint } from './classes/endpoints/LiveChatItemContextMenuEndpoint.js';\nexport { default as ModifyChannelNotificationPreferenceEndpoint } from './classes/endpoints/ModifyChannelNotificationPreferenceEndpoint.js';\nexport { default as PerformCommentActionEndpoint } from './classes/endpoints/PerformCommentActionEndpoint.js';\nexport { default as PlaylistEditEndpoint } from './classes/endpoints/PlaylistEditEndpoint.js';\nexport { default as PrefetchWatchCommand } from './classes/endpoints/PrefetchWatchCommand.js';\nexport { default as ReelWatchEndpoint } from './classes/endpoints/ReelWatchEndpoint.js';\nexport { default as SearchEndpoint } from './classes/endpoints/SearchEndpoint.js';\nexport { default as ShareEndpoint } from './classes/endpoints/ShareEndpoint.js';\nexport { default as ShareEntityEndpoint } from './classes/endpoints/ShareEntityEndpoint.js';\nexport { default as ShareEntityServiceEndpoint } from './classes/endpoints/ShareEntityServiceEndpoint.js';\nexport { default as ShowEngagementPanelEndpoint } from './classes/endpoints/ShowEngagementPanelEndpoint.js';\nexport { default as SignalServiceEndpoint } from './classes/endpoints/SignalServiceEndpoint.js';\nexport { default as SubscribeEndpoint } from './classes/endpoints/SubscribeEndpoint.js';\nexport { default as UnsubscribeEndpoint } from './classes/endpoints/UnsubscribeEndpoint.js';\nexport { default as WatchEndpoint } from './classes/endpoints/WatchEndpoint.js';\nexport { default as WatchNextEndpoint } from './classes/endpoints/WatchNextEndpoint.js';\nexport { default as Endscreen } from './classes/Endscreen.js';\nexport { default as EndscreenElement } from './classes/EndscreenElement.js';\nexport { default as EndScreenPlaylist } from './classes/EndScreenPlaylist.js';\nexport { default as EndScreenVideo } from './classes/EndScreenVideo.js';\nexport { default as EngagementPanelSectionList } from './classes/EngagementPanelSectionList.js';\nexport { default as EngagementPanelTitleHeader } from './classes/EngagementPanelTitleHeader.js';\nexport { default as EomSettingsDisclaimer } from './classes/EomSettingsDisclaimer.js';\nexport { default as ExpandableMetadata } from './classes/ExpandableMetadata.js';\nexport { default as ExpandableTab } from './classes/ExpandableTab.js';\nexport { default as ExpandableVideoDescriptionBody } from './classes/ExpandableVideoDescriptionBody.js';\nexport { default as ExpandedShelfContents } from './classes/ExpandedShelfContents.js';\nexport { default as Factoid } from './classes/Factoid.js';\nexport { default as FancyDismissibleDialog } from './classes/FancyDismissibleDialog.js';\nexport { default as FeedFilterChipBar } from './classes/FeedFilterChipBar.js';\nexport { default as FeedNudge } from './classes/FeedNudge.js';\nexport { default as FeedTabbedHeader } from './classes/FeedTabbedHeader.js';\nexport { default as FlexibleActionsView } from './classes/FlexibleActionsView.js';\nexport { default as Form } from './classes/Form.js';\nexport { default as FormFooterView } from './classes/FormFooterView.js';\nexport { default as FormPopup } from './classes/FormPopup.js';\nexport { default as GameCard } from './classes/GameCard.js';\nexport { default as GameDetails } from './classes/GameDetails.js';\nexport { default as Grid } from './classes/Grid.js';\nexport { default as GridChannel } from './classes/GridChannel.js';\nexport { default as GridHeader } from './classes/GridHeader.js';\nexport { default as GridMix } from './classes/GridMix.js';\nexport { default as GridMovie } from './classes/GridMovie.js';\nexport { default as GridPlaylist } from './classes/GridPlaylist.js';\nexport { default as GridShelfView } from './classes/GridShelfView.js';\nexport { default as GridShow } from './classes/GridShow.js';\nexport { default as GridVideo } from './classes/GridVideo.js';\nexport { default as GuideCollapsibleEntry } from './classes/GuideCollapsibleEntry.js';\nexport { default as GuideCollapsibleSectionEntry } from './classes/GuideCollapsibleSectionEntry.js';\nexport { default as GuideDownloadsEntry } from './classes/GuideDownloadsEntry.js';\nexport { default as GuideEntry } from './classes/GuideEntry.js';\nexport { default as GuideSection } from './classes/GuideSection.js';\nexport { default as GuideSubscriptionsSection } from './classes/GuideSubscriptionsSection.js';\nexport { default as HashtagHeader } from './classes/HashtagHeader.js';\nexport { default as HashtagTile } from './classes/HashtagTile.js';\nexport { default as Heatmap } from './classes/Heatmap.js';\nexport { default as HeatMarker } from './classes/HeatMarker.js';\nexport { default as HeroPlaylistThumbnail } from './classes/HeroPlaylistThumbnail.js';\nexport { default as HighlightsCarousel } from './classes/HighlightsCarousel.js';\nexport { default as HistorySuggestion } from './classes/HistorySuggestion.js';\nexport { default as HorizontalCardList } from './classes/HorizontalCardList.js';\nexport { default as HorizontalList } from './classes/HorizontalList.js';\nexport { default as HorizontalMovieList } from './classes/HorizontalMovieList.js';\nexport { default as HowThisWasMadeSectionView } from './classes/HowThisWasMadeSectionView.js';\nexport { default as HypePointsFactoid } from './classes/HypePointsFactoid.js';\nexport { default as IconLink } from './classes/IconLink.js';\nexport { default as ImageBannerView } from './classes/ImageBannerView.js';\nexport { default as IncludingResultsFor } from './classes/IncludingResultsFor.js';\nexport { default as InfoPanelContainer } from './classes/InfoPanelContainer.js';\nexport { default as InfoPanelContent } from './classes/InfoPanelContent.js';\nexport { default as InfoRow } from './classes/InfoRow.js';\nexport { default as InteractiveTabbedHeader } from './classes/InteractiveTabbedHeader.js';\nexport { default as ItemSection } from './classes/ItemSection.js';\nexport { default as ItemSectionHeader } from './classes/ItemSectionHeader.js';\nexport { default as ItemSectionTab } from './classes/ItemSectionTab.js';\nexport { default as ItemSectionTabbedHeader } from './classes/ItemSectionTabbedHeader.js';\nexport { default as LikeButton } from './classes/LikeButton.js';\nexport { default as LikeButtonView } from './classes/LikeButtonView.js';\nexport { default as ListItemView } from './classes/ListItemView.js';\nexport { default as ListView } from './classes/ListView.js';\nexport { default as LiveChat } from './classes/LiveChat.js';\nexport { default as AddBannerToLiveChatCommand } from './classes/livechat/AddBannerToLiveChatCommand.js';\nexport { default as AddChatItemAction } from './classes/livechat/AddChatItemAction.js';\nexport { default as AddLiveChatTickerItemAction } from './classes/livechat/AddLiveChatTickerItemAction.js';\nexport { default as DimChatItemAction } from './classes/livechat/DimChatItemAction.js';\nexport { default as BumperUserEduContentView } from './classes/livechat/items/BumperUserEduContentView.js';\nexport { default as CreatorHeartView } from './classes/livechat/items/CreatorHeartView.js';\nexport { default as LiveChatAutoModMessage } from './classes/livechat/items/LiveChatAutoModMessage.js';\nexport { default as LiveChatBanner } from './classes/livechat/items/LiveChatBanner.js';\nexport { default as LiveChatBannerChatSummary } from './classes/livechat/items/LiveChatBannerChatSummary.js';\nexport { default as LiveChatBannerHeader } from './classes/livechat/items/LiveChatBannerHeader.js';\nexport { default as LiveChatBannerPoll } from './classes/livechat/items/LiveChatBannerPoll.js';\nexport { default as LiveChatBannerRedirect } from './classes/livechat/items/LiveChatBannerRedirect.js';\nexport { default as LiveChatItemBumperView } from './classes/livechat/items/LiveChatItemBumperView.js';\nexport { default as LiveChatMembershipItem } from './classes/livechat/items/LiveChatMembershipItem.js';\nexport { default as LiveChatModeChangeMessage } from './classes/livechat/items/LiveChatModeChangeMessage.js';\nexport { default as LiveChatPaidMessage } from './classes/livechat/items/LiveChatPaidMessage.js';\nexport { default as LiveChatPaidSticker } from './classes/livechat/items/LiveChatPaidSticker.js';\nexport { default as LiveChatPlaceholderItem } from './classes/livechat/items/LiveChatPlaceholderItem.js';\nexport { default as LiveChatProductItem } from './classes/livechat/items/LiveChatProductItem.js';\nexport { default as LiveChatRestrictedParticipation } from './classes/livechat/items/LiveChatRestrictedParticipation.js';\nexport { default as LiveChatSponsorshipsGiftPurchaseAnnouncement } from './classes/livechat/items/LiveChatSponsorshipsGiftPurchaseAnnouncement.js';\nexport { default as LiveChatSponsorshipsGiftRedemptionAnnouncement } from './classes/livechat/items/LiveChatSponsorshipsGiftRedemptionAnnouncement.js';\nexport { default as LiveChatSponsorshipsHeader } from './classes/livechat/items/LiveChatSponsorshipsHeader.js';\nexport { default as LiveChatTextMessage } from './classes/livechat/items/LiveChatTextMessage.js';\nexport { default as LiveChatTickerPaidMessageItem } from './classes/livechat/items/LiveChatTickerPaidMessageItem.js';\nexport { default as LiveChatTickerPaidStickerItem } from './classes/livechat/items/LiveChatTickerPaidStickerItem.js';\nexport { default as LiveChatTickerSponsorItem } from './classes/livechat/items/LiveChatTickerSponsorItem.js';\nexport { default as LiveChatViewerEngagementMessage } from './classes/livechat/items/LiveChatViewerEngagementMessage.js';\nexport { default as PdgReplyButtonView } from './classes/livechat/items/PdgReplyButtonView.js';\nexport { default as PollHeader } from './classes/livechat/items/PollHeader.js';\nexport { default as LiveChatActionPanel } from './classes/livechat/LiveChatActionPanel.js';\nexport { default as MarkChatItemAsDeletedAction } from './classes/livechat/MarkChatItemAsDeletedAction.js';\nexport { default as MarkChatItemsByAuthorAsDeletedAction } from './classes/livechat/MarkChatItemsByAuthorAsDeletedAction.js';\nexport { default as RemoveBannerForLiveChatCommand } from './classes/livechat/RemoveBannerForLiveChatCommand.js';\nexport { default as RemoveChatItemAction } from './classes/livechat/RemoveChatItemAction.js';\nexport { default as RemoveChatItemByAuthorAction } from './classes/livechat/RemoveChatItemByAuthorAction.js';\nexport { default as ReplaceChatItemAction } from './classes/livechat/ReplaceChatItemAction.js';\nexport { default as ReplaceLiveChatAction } from './classes/livechat/ReplaceLiveChatAction.js';\nexport { default as ReplayChatItemAction } from './classes/livechat/ReplayChatItemAction.js';\nexport { default as ShowLiveChatActionPanelAction } from './classes/livechat/ShowLiveChatActionPanelAction.js';\nexport { default as ShowLiveChatDialogAction } from './classes/livechat/ShowLiveChatDialogAction.js';\nexport { default as ShowLiveChatTooltipCommand } from './classes/livechat/ShowLiveChatTooltipCommand.js';\nexport { default as UpdateDateTextAction } from './classes/livechat/UpdateDateTextAction.js';\nexport { default as UpdateDescriptionAction } from './classes/livechat/UpdateDescriptionAction.js';\nexport { default as UpdateLiveChatPollAction } from './classes/livechat/UpdateLiveChatPollAction.js';\nexport { default as UpdateTitleAction } from './classes/livechat/UpdateTitleAction.js';\nexport { default as UpdateToggleButtonTextAction } from './classes/livechat/UpdateToggleButtonTextAction.js';\nexport { default as UpdateViewershipAction } from './classes/livechat/UpdateViewershipAction.js';\nexport { default as LiveChatAuthorBadge } from './classes/LiveChatAuthorBadge.js';\nexport { default as LiveChatDialog } from './classes/LiveChatDialog.js';\nexport { default as LiveChatHeader } from './classes/LiveChatHeader.js';\nexport { default as LiveChatItemList } from './classes/LiveChatItemList.js';\nexport { default as LiveChatMessageInput } from './classes/LiveChatMessageInput.js';\nexport { default as LiveChatParticipant } from './classes/LiveChatParticipant.js';\nexport { default as LiveChatParticipantsList } from './classes/LiveChatParticipantsList.js';\nexport { default as LockupMetadataView } from './classes/LockupMetadataView.js';\nexport { default as LockupView } from './classes/LockupView.js';\nexport { default as MacroMarkersInfoItem } from './classes/MacroMarkersInfoItem.js';\nexport { default as MacroMarkersList } from './classes/MacroMarkersList.js';\nexport { default as MacroMarkersListEntity } from './classes/MacroMarkersListEntity.js';\nexport { default as MacroMarkersListItem } from './classes/MacroMarkersListItem.js';\nexport { default as Menu } from './classes/menus/Menu.js';\nexport { default as MenuFlexibleItem } from './classes/menus/MenuFlexibleItem.js';\nexport { default as MenuNavigationItem } from './classes/menus/MenuNavigationItem.js';\nexport { default as MenuPopup } from './classes/menus/MenuPopup.js';\nexport { default as MenuServiceItem } from './classes/menus/MenuServiceItem.js';\nexport { default as MenuServiceItemDownload } from './classes/menus/MenuServiceItemDownload.js';\nexport { default as MultiPageMenu } from './classes/menus/MultiPageMenu.js';\nexport { default as MultiPageMenuNotificationSection } from './classes/menus/MultiPageMenuNotificationSection.js';\nexport { default as MusicMenuItemDivider } from './classes/menus/MusicMenuItemDivider.js';\nexport { default as MusicMultiSelectMenu } from './classes/menus/MusicMultiSelectMenu.js';\nexport { default as MusicMultiSelectMenuItem } from './classes/menus/MusicMultiSelectMenuItem.js';\nexport { default as SimpleMenuHeader } from './classes/menus/SimpleMenuHeader.js';\nexport { default as MenuTitle } from './classes/MenuTitle.js';\nexport { default as MerchandiseItem } from './classes/MerchandiseItem.js';\nexport { default as MerchandiseShelf } from './classes/MerchandiseShelf.js';\nexport { default as Message } from './classes/Message.js';\nexport { default as MetadataBadge } from './classes/MetadataBadge.js';\nexport { default as MetadataRow } from './classes/MetadataRow.js';\nexport { default as MetadataRowContainer } from './classes/MetadataRowContainer.js';\nexport { default as MetadataRowHeader } from './classes/MetadataRowHeader.js';\nexport { default as MetadataScreen } from './classes/MetadataScreen.js';\nexport { default as MicroformatData } from './classes/MicroformatData.js';\nexport { default as Mix } from './classes/Mix.js';\nexport { default as ModalWithTitleAndButton } from './classes/ModalWithTitleAndButton.js';\nexport { default as Movie } from './classes/Movie.js';\nexport { default as MovingThumbnail } from './classes/MovingThumbnail.js';\nexport { default as MultiMarkersPlayerBar } from './classes/MultiMarkersPlayerBar.js';\nexport { default as MusicCardShelf } from './classes/MusicCardShelf.js';\nexport { default as MusicCardShelfHeaderBasic } from './classes/MusicCardShelfHeaderBasic.js';\nexport { default as MusicCarouselShelf } from './classes/MusicCarouselShelf.js';\nexport { default as MusicCarouselShelfBasicHeader } from './classes/MusicCarouselShelfBasicHeader.js';\nexport { default as MusicDescriptionShelf } from './classes/MusicDescriptionShelf.js';\nexport { default as MusicDetailHeader } from './classes/MusicDetailHeader.js';\nexport { default as MusicDownloadStateBadge } from './classes/MusicDownloadStateBadge.js';\nexport { default as MusicEditablePlaylistDetailHeader } from './classes/MusicEditablePlaylistDetailHeader.js';\nexport { default as MusicElementHeader } from './classes/MusicElementHeader.js';\nexport { default as MusicHeader } from './classes/MusicHeader.js';\nexport { default as MusicImmersiveHeader } from './classes/MusicImmersiveHeader.js';\nexport { default as MusicInlineBadge } from './classes/MusicInlineBadge.js';\nexport { default as MusicItemThumbnailOverlay } from './classes/MusicItemThumbnailOverlay.js';\nexport { default as MusicLargeCardItemCarousel } from './classes/MusicLargeCardItemCarousel.js';\nexport { default as MusicMultiRowListItem } from './classes/MusicMultiRowListItem.js';\nexport { default as MusicNavigationButton } from './classes/MusicNavigationButton.js';\nexport { default as MusicPlayButton } from './classes/MusicPlayButton.js';\nexport { default as MusicPlaylistEditHeader } from './classes/MusicPlaylistEditHeader.js';\nexport { default as MusicPlaylistShelf } from './classes/MusicPlaylistShelf.js';\nexport { default as MusicQueue } from './classes/MusicQueue.js';\nexport { default as MusicResponsiveHeader } from './classes/MusicResponsiveHeader.js';\nexport { default as MusicResponsiveListItem } from './classes/MusicResponsiveListItem.js';\nexport { default as MusicResponsiveListItemFixedColumn } from './classes/MusicResponsiveListItemFixedColumn.js';\nexport { default as MusicResponsiveListItemFlexColumn } from './classes/MusicResponsiveListItemFlexColumn.js';\nexport { default as MusicShelf } from './classes/MusicShelf.js';\nexport { default as MusicSideAlignedItem } from './classes/MusicSideAlignedItem.js';\nexport { default as MusicSortFilterButton } from './classes/MusicSortFilterButton.js';\nexport { default as MusicTastebuilderShelf } from './classes/MusicTastebuilderShelf.js';\nexport { default as MusicTastebuilderShelfThumbnail } from './classes/MusicTastebuilderShelfThumbnail.js';\nexport { default as MusicThumbnail } from './classes/MusicThumbnail.js';\nexport { default as MusicTwoRowItem } from './classes/MusicTwoRowItem.js';\nexport { default as MusicVisualHeader } from './classes/MusicVisualHeader.js';\nexport { default as MobileTopbar } from './classes/mweb/MobileTopbar.js';\nexport { default as MultiPageMenuSection } from './classes/mweb/MultiPageMenuSection.js';\nexport { default as PivotBar } from './classes/mweb/PivotBar.js';\nexport { default as PivotBarItem } from './classes/mweb/PivotBarItem.js';\nexport { default as TopbarMenuButton } from './classes/mweb/TopbarMenuButton.js';\nexport { default as NavigationEndpoint } from './classes/NavigationEndpoint.js';\nexport { default as Notification } from './classes/Notification.js';\nexport { default as NotificationAction } from './classes/NotificationAction.js';\nexport { default as OpenOnePickAddVideoModalCommand } from './classes/OpenOnePickAddVideoModalCommand.js';\nexport { default as PageHeader } from './classes/PageHeader.js';\nexport { default as PageHeaderView } from './classes/PageHeaderView.js';\nexport { default as PageIntroduction } from './classes/PageIntroduction.js';\nexport { default as PanelFooterView } from './classes/PanelFooterView.js';\nexport { default as PivotButton } from './classes/PivotButton.js';\nexport { default as PlayerAnnotationsExpanded } from './classes/PlayerAnnotationsExpanded.js';\nexport { default as PlayerCaptchaView } from './classes/PlayerCaptchaView.js';\nexport { default as PlayerCaptionsTracklist } from './classes/PlayerCaptionsTracklist.js';\nexport { default as PlayerControlsOverlay } from './classes/PlayerControlsOverlay.js';\nexport { default as PlayerErrorMessage } from './classes/PlayerErrorMessage.js';\nexport { default as PlayerLegacyDesktopYpcOffer } from './classes/PlayerLegacyDesktopYpcOffer.js';\nexport { default as PlayerLegacyDesktopYpcTrailer } from './classes/PlayerLegacyDesktopYpcTrailer.js';\nexport { default as PlayerLiveStoryboardSpec } from './classes/PlayerLiveStoryboardSpec.js';\nexport { default as PlayerMicroformat } from './classes/PlayerMicroformat.js';\nexport { default as PlayerOverflow } from './classes/PlayerOverflow.js';\nexport { default as PlayerOverlay } from './classes/PlayerOverlay.js';\nexport { default as PlayerOverlayAutoplay } from './classes/PlayerOverlayAutoplay.js';\nexport { default as PlayerOverlayVideoDetails } from './classes/PlayerOverlayVideoDetails.js';\nexport { default as PlayerStoryboardSpec } from './classes/PlayerStoryboardSpec.js';\nexport { default as Playlist } from './classes/Playlist.js';\nexport { default as PlaylistAddToOption } from './classes/PlaylistAddToOption.js';\nexport { default as PlaylistCustomThumbnail } from './classes/PlaylistCustomThumbnail.js';\nexport { default as PlaylistHeader } from './classes/PlaylistHeader.js';\nexport { default as PlaylistInfoCardContent } from './classes/PlaylistInfoCardContent.js';\nexport { default as PlaylistMetadata } from './classes/PlaylistMetadata.js';\nexport { default as PlaylistPanel } from './classes/PlaylistPanel.js';\nexport { default as PlaylistPanelVideo } from './classes/PlaylistPanelVideo.js';\nexport { default as PlaylistPanelVideoWrapper } from './classes/PlaylistPanelVideoWrapper.js';\nexport { default as PlaylistSidebar } from './classes/PlaylistSidebar.js';\nexport { default as PlaylistSidebarPrimaryInfo } from './classes/PlaylistSidebarPrimaryInfo.js';\nexport { default as PlaylistSidebarSecondaryInfo } from './classes/PlaylistSidebarSecondaryInfo.js';\nexport { default as PlaylistThumbnailOverlay } from './classes/PlaylistThumbnailOverlay.js';\nexport { default as PlaylistVideo } from './classes/PlaylistVideo.js';\nexport { default as PlaylistVideoList } from './classes/PlaylistVideoList.js';\nexport { default as PlaylistVideoThumbnail } from './classes/PlaylistVideoThumbnail.js';\nexport { default as Poll } from './classes/Poll.js';\nexport { default as Post } from './classes/Post.js';\nexport { default as PostMultiImage } from './classes/PostMultiImage.js';\nexport { default as PremiereTrailerBadge } from './classes/PremiereTrailerBadge.js';\nexport { default as ProductList } from './classes/ProductList.js';\nexport { default as ProductListHeader } from './classes/ProductListHeader.js';\nexport { default as ProductListItem } from './classes/ProductListItem.js';\nexport { default as ProfileColumn } from './classes/ProfileColumn.js';\nexport { default as ProfileColumnStats } from './classes/ProfileColumnStats.js';\nexport { default as ProfileColumnStatsEntry } from './classes/ProfileColumnStatsEntry.js';\nexport { default as ProfileColumnUserInfo } from './classes/ProfileColumnUserInfo.js';\nexport { default as Quiz } from './classes/Quiz.js';\nexport { default as RecognitionShelf } from './classes/RecognitionShelf.js';\nexport { default as ReelItem } from './classes/ReelItem.js';\nexport { default as ReelPlayerHeader } from './classes/ReelPlayerHeader.js';\nexport { default as ReelPlayerOverlay } from './classes/ReelPlayerOverlay.js';\nexport { default as ReelShelf } from './classes/ReelShelf.js';\nexport { default as RelatedChipCloud } from './classes/RelatedChipCloud.js';\nexport { default as RichGrid } from './classes/RichGrid.js';\nexport { default as RichItem } from './classes/RichItem.js';\nexport { default as RichListHeader } from './classes/RichListHeader.js';\nexport { default as RichMetadata } from './classes/RichMetadata.js';\nexport { default as RichMetadataRow } from './classes/RichMetadataRow.js';\nexport { default as RichSection } from './classes/RichSection.js';\nexport { default as RichShelf } from './classes/RichShelf.js';\nexport { default as SearchBox } from './classes/SearchBox.js';\nexport { default as SearchFilter } from './classes/SearchFilter.js';\nexport { default as SearchFilterGroup } from './classes/SearchFilterGroup.js';\nexport { default as SearchFilterOptionsDialog } from './classes/SearchFilterOptionsDialog.js';\nexport { default as SearchHeader } from './classes/SearchHeader.js';\nexport { default as SearchRefinementCard } from './classes/SearchRefinementCard.js';\nexport { default as SearchSubMenu } from './classes/SearchSubMenu.js';\nexport { default as SearchSuggestion } from './classes/SearchSuggestion.js';\nexport { default as SearchSuggestionsSection } from './classes/SearchSuggestionsSection.js';\nexport { default as SecondarySearchContainer } from './classes/SecondarySearchContainer.js';\nexport { default as SectionHeaderView } from './classes/SectionHeaderView.js';\nexport { default as SectionList } from './classes/SectionList.js';\nexport { default as SegmentedLikeDislikeButton } from './classes/SegmentedLikeDislikeButton.js';\nexport { default as SegmentedLikeDislikeButtonView } from './classes/SegmentedLikeDislikeButtonView.js';\nexport { default as SettingBoolean } from './classes/SettingBoolean.js';\nexport { default as SettingsCheckbox } from './classes/SettingsCheckbox.js';\nexport { default as SettingsOptions } from './classes/SettingsOptions.js';\nexport { default as SettingsSidebar } from './classes/SettingsSidebar.js';\nexport { default as SettingsSwitch } from './classes/SettingsSwitch.js';\nexport { default as SharedPost } from './classes/SharedPost.js';\nexport { default as SharePanelHeader } from './classes/SharePanelHeader.js';\nexport { default as SharePanelTitleV15 } from './classes/SharePanelTitleV15.js';\nexport { default as ShareTarget } from './classes/ShareTarget.js';\nexport { default as Shelf } from './classes/Shelf.js';\nexport { default as ShortsLockupView } from './classes/ShortsLockupView.js';\nexport { default as ShowCustomThumbnail } from './classes/ShowCustomThumbnail.js';\nexport { default as ShowingResultsFor } from './classes/ShowingResultsFor.js';\nexport { default as SimpleCardContent } from './classes/SimpleCardContent.js';\nexport { default as SimpleCardTeaser } from './classes/SimpleCardTeaser.js';\nexport { default as SimpleTextSection } from './classes/SimpleTextSection.js';\nexport { default as SingleActionEmergencySupport } from './classes/SingleActionEmergencySupport.js';\nexport { default as SingleColumnBrowseResults } from './classes/SingleColumnBrowseResults.js';\nexport { default as SingleColumnMusicWatchNextResults } from './classes/SingleColumnMusicWatchNextResults.js';\nexport { default as SingleHeroImage } from './classes/SingleHeroImage.js';\nexport { default as SlimOwner } from './classes/SlimOwner.js';\nexport { default as SlimVideoMetadata } from './classes/SlimVideoMetadata.js';\nexport { default as SortFilterHeader } from './classes/SortFilterHeader.js';\nexport { default as SortFilterSubMenu } from './classes/SortFilterSubMenu.js';\nexport { default as StartAt } from './classes/StartAt.js';\nexport { default as StructuredDescriptionContent } from './classes/StructuredDescriptionContent.js';\nexport { default as StructuredDescriptionPlaylistLockup } from './classes/StructuredDescriptionPlaylistLockup.js';\nexport { default as SubFeedOption } from './classes/SubFeedOption.js';\nexport { default as SubFeedSelector } from './classes/SubFeedSelector.js';\nexport { default as SubscribeButton } from './classes/SubscribeButton.js';\nexport { default as SubscribeButtonView } from './classes/SubscribeButtonView.js';\nexport { default as SubscriptionNotificationToggleButton } from './classes/SubscriptionNotificationToggleButton.js';\nexport { default as Tab } from './classes/Tab.js';\nexport { default as Tabbed } from './classes/Tabbed.js';\nexport { default as TabbedSearchResults } from './classes/TabbedSearchResults.js';\nexport { default as TextCarouselItemView } from './classes/TextCarouselItemView.js';\nexport { default as TextFieldView } from './classes/TextFieldView.js';\nexport { default as TextHeader } from './classes/TextHeader.js';\nexport { default as ThirdPartyShareTargetSection } from './classes/ThirdPartyShareTargetSection.js';\nexport { default as ThumbnailBadgeView } from './classes/ThumbnailBadgeView.js';\nexport { default as ThumbnailBottomOverlayView } from './classes/ThumbnailBottomOverlayView.js';\nexport { default as ThumbnailHoverOverlayToggleActionsView } from './classes/ThumbnailHoverOverlayToggleActionsView.js';\nexport { default as ThumbnailHoverOverlayView } from './classes/ThumbnailHoverOverlayView.js';\nexport { default as ThumbnailLandscapePortrait } from './classes/ThumbnailLandscapePortrait.js';\nexport { default as ThumbnailOverlayBadgeView } from './classes/ThumbnailOverlayBadgeView.js';\nexport { default as ThumbnailOverlayBottomPanel } from './classes/ThumbnailOverlayBottomPanel.js';\nexport { default as ThumbnailOverlayEndorsement } from './classes/ThumbnailOverlayEndorsement.js';\nexport { default as ThumbnailOverlayHoverText } from './classes/ThumbnailOverlayHoverText.js';\nexport { default as ThumbnailOverlayInlineUnplayable } from './classes/ThumbnailOverlayInlineUnplayable.js';\nexport { default as ThumbnailOverlayLoadingPreview } from './classes/ThumbnailOverlayLoadingPreview.js';\nexport { default as ThumbnailOverlayNowPlaying } from './classes/ThumbnailOverlayNowPlaying.js';\nexport { default as ThumbnailOverlayPinking } from './classes/ThumbnailOverlayPinking.js';\nexport { default as ThumbnailOverlayPlaybackStatus } from './classes/ThumbnailOverlayPlaybackStatus.js';\nexport { default as ThumbnailOverlayProgressBarView } from './classes/ThumbnailOverlayProgressBarView.js';\nexport { default as ThumbnailOverlayResumePlayback } from './classes/ThumbnailOverlayResumePlayback.js';\nexport { default as ThumbnailOverlaySidePanel } from './classes/ThumbnailOverlaySidePanel.js';\nexport { default as ThumbnailOverlayTimeStatus } from './classes/ThumbnailOverlayTimeStatus.js';\nexport { default as ThumbnailOverlayToggleButton } from './classes/ThumbnailOverlayToggleButton.js';\nexport { default as ThumbnailView } from './classes/ThumbnailView.js';\nexport { default as TimedMarkerDecoration } from './classes/TimedMarkerDecoration.js';\nexport { default as TitleAndButtonListHeader } from './classes/TitleAndButtonListHeader.js';\nexport { default as ToggleButton } from './classes/ToggleButton.js';\nexport { default as ToggleButtonView } from './classes/ToggleButtonView.js';\nexport { default as ToggleFormField } from './classes/ToggleFormField.js';\nexport { default as ToggleMenuServiceItem } from './classes/ToggleMenuServiceItem.js';\nexport { default as Tooltip } from './classes/Tooltip.js';\nexport { default as TopicChannelDetails } from './classes/TopicChannelDetails.js';\nexport { default as Transcript } from './classes/Transcript.js';\nexport { default as TranscriptFooter } from './classes/TranscriptFooter.js';\nexport { default as TranscriptSearchBox } from './classes/TranscriptSearchBox.js';\nexport { default as TranscriptSearchPanel } from './classes/TranscriptSearchPanel.js';\nexport { default as TranscriptSectionHeader } from './classes/TranscriptSectionHeader.js';\nexport { default as TranscriptSegment } from './classes/TranscriptSegment.js';\nexport { default as TranscriptSegmentList } from './classes/TranscriptSegmentList.js';\nexport { default as TwoColumnBrowseResults } from './classes/TwoColumnBrowseResults.js';\nexport { default as TwoColumnSearchResults } from './classes/TwoColumnSearchResults.js';\nexport { default as TwoColumnWatchNextResults } from './classes/TwoColumnWatchNextResults.js';\nexport { default as UnifiedSharePanel } from './classes/UnifiedSharePanel.js';\nexport { default as UniversalWatchCard } from './classes/UniversalWatchCard.js';\nexport { default as UploadTimeFactoid } from './classes/UploadTimeFactoid.js';\nexport { default as UpsellDialog } from './classes/UpsellDialog.js';\nexport { default as VerticalList } from './classes/VerticalList.js';\nexport { default as VerticalWatchCardList } from './classes/VerticalWatchCardList.js';\nexport { default as Video } from './classes/Video.js';\nexport { default as VideoAttributesSectionView } from './classes/VideoAttributesSectionView.js';\nexport { default as VideoAttributeView } from './classes/VideoAttributeView.js';\nexport { default as VideoCard } from './classes/VideoCard.js';\nexport { default as VideoDescriptionCourseSection } from './classes/VideoDescriptionCourseSection.js';\nexport { default as VideoDescriptionHeader } from './classes/VideoDescriptionHeader.js';\nexport { default as VideoDescriptionInfocardsSection } from './classes/VideoDescriptionInfocardsSection.js';\nexport { default as VideoDescriptionMusicSection } from './classes/VideoDescriptionMusicSection.js';\nexport { default as VideoDescriptionTranscriptSection } from './classes/VideoDescriptionTranscriptSection.js';\nexport { default as VideoInfoCardContent } from './classes/VideoInfoCardContent.js';\nexport { default as VideoMetadataCarouselView } from './classes/VideoMetadataCarouselView.js';\nexport { default as VideoOwner } from './classes/VideoOwner.js';\nexport { default as VideoPrimaryInfo } from './classes/VideoPrimaryInfo.js';\nexport { default as VideoSecondaryInfo } from './classes/VideoSecondaryInfo.js';\nexport { default as VideoSummaryContentView } from './classes/VideoSummaryContentView.js';\nexport { default as VideoSummaryParagraphView } from './classes/VideoSummaryParagraphView.js';\nexport { default as VideoViewCount } from './classes/VideoViewCount.js';\nexport { default as ViewCountFactoid } from './classes/ViewCountFactoid.js';\nexport { default as WatchCardCompactVideo } from './classes/WatchCardCompactVideo.js';\nexport { default as WatchCardHeroVideo } from './classes/WatchCardHeroVideo.js';\nexport { default as WatchCardRichHeader } from './classes/WatchCardRichHeader.js';\nexport { default as WatchCardSectionSequence } from './classes/WatchCardSectionSequence.js';\nexport { default as WatchNextEndScreen } from './classes/WatchNextEndScreen.js';\nexport { default as WatchNextTabbedResults } from './classes/WatchNextTabbedResults.js';\nexport { default as YpcTrailer } from './classes/YpcTrailer.js';\nexport { default as AnchoredSection } from './classes/ytkids/AnchoredSection.js';\nexport { default as KidsBlocklistPicker } from './classes/ytkids/KidsBlocklistPicker.js';\nexport { default as KidsBlocklistPickerItem } from './classes/ytkids/KidsBlocklistPickerItem.js';\nexport { default as KidsCategoriesHeader } from './classes/ytkids/KidsCategoriesHeader.js';\nexport { default as KidsCategoryTab } from './classes/ytkids/KidsCategoryTab.js';\nexport { default as KidsHomeScreen } from './classes/ytkids/KidsHomeScreen.js';\n", "import type { ICache } from '../types/Cache.js';\nimport { Platform } from './Utils.js';\n\nexport default class UniversalCache implements ICache {\n  #cache: ICache;\n  constructor(persistent: boolean, persistent_directory?: string) {\n    this.#cache = new Platform.shim.Cache(persistent, persistent_directory);\n  }\n  get cache_dir() {\n    return this.#cache.cache_dir;\n  }\n  get(key: string) {\n    return this.#cache.get(key);\n  }\n  set(key: string, value: ArrayBuffer) {\n    return this.#cache.set(key, value);\n  }\n  remove(key: string) {\n    return this.#cache.remove(key);\n  }\n}", "import { Platform } from './Utils.js';\n\nexport default class EventEmitterLike extends EventTarget {\n  #legacy_listeners = new Map<(...args: any[]) => void, EventListener>();\n\n  constructor() {\n    super();\n  }\n\n  emit(type: string, ...args: any[]) {\n    const event = new Platform.shim.CustomEvent(type, { detail: args });\n    this.dispatchEvent(event);\n  }\n\n  on(type: string, listener: (...args: any[]) => void) {\n    const wrapper: EventListener = (ev) => {\n      if (ev instanceof Platform.shim.CustomEvent) {\n        listener(...ev.detail);\n      } else {\n        listener(ev);\n      }\n    };\n    this.#legacy_listeners.set(listener, wrapper);\n    this.addEventListener(type, wrapper);\n  }\n\n  once(type: string, listener: (...args: any[]) => void) {\n    const wrapper: EventListener = (ev) => {\n      if (ev instanceof Platform.shim.CustomEvent) {\n        listener(...ev.detail);\n      } else {\n        listener(ev);\n      }\n      this.off(type, listener);\n    };\n    this.#legacy_listeners.set(listener, wrapper);\n    this.addEventListener(type, wrapper);\n  }\n\n  off(type: string, listener: (...args: any[]) => void) {\n    const wrapper = this.#legacy_listeners.get(listener);\n    if (wrapper) {\n      this.removeEventListener(type, wrapper);\n      this.#legacy_listeners.delete(listener);\n    }\n  }\n}", "import * as Constants from './Constants.js';\nimport { InnertubeError, Platform, streamToIterable } from './Utils.js';\n\nimport type Player from '../core/Player.js';\nimport type Actions from '../core/Actions.js';\nimport type Format from '../parser/classes/misc/Format.js';\nimport type { IPlayabilityStatus, IStreamingData } from '../parser/index.js';\nimport type { DownloadOptions, FormatOptions } from '../types/index.js';\n\nexport async function download(\n  options: DownloadOptions,\n  actions: Actions,\n  playability_status?: IPlayabilityStatus,\n  streaming_data?: IStreamingData,\n  player?: Player,\n  cpn?: string\n): Promise<ReadableStream<Uint8Array>> {\n  if (playability_status?.status === 'UNPLAYABLE')\n    throw new InnertubeError('Video is unplayable', { error_type: 'UNPLAYABLE' });\n  if (playability_status?.status === 'LOGIN_REQUIRED')\n    throw new InnertubeError('Video is login required', { error_type: 'LOGIN_REQUIRED' });\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available.', { error_type: 'NO_STREAMING_DATA' });\n\n  const opts: DownloadOptions = {\n    quality: '360p',\n    type: 'video+audio',\n    format: 'mp4',\n    range: undefined,\n    ...options\n  };\n\n  const format = chooseFormat(opts, streaming_data);\n  const format_url = await format.decipher(player);\n\n  // If we're not downloading the video in chunks, we just use fetch once.\n  if (opts.type === 'video+audio' && !options.range) {\n    const response = await actions.session.http.fetch_function(`${format_url}&cpn=${cpn}`, {\n      method: 'GET',\n      headers: Constants.STREAM_HEADERS,\n      redirect: 'follow'\n    });\n\n    // Throw if the response is not 2xx\n    if (!response.ok)\n      throw new InnertubeError('The server responded with a non 2xx status code', { error_type: 'FETCH_FAILED', response });\n\n    const body = response.body;\n\n    if (!body)\n      throw new InnertubeError('Could not get ReadableStream from fetch Response.', { error_type: 'FETCH_FAILED', response });\n\n    return body;\n  }\n\n  // We need to download in chunks.\n\n  const chunk_size = 1048576 * 10; // 10MB\n\n  let chunk_start = (options.range ? options.range.start : 0);\n  let chunk_end = (options.range ? options.range.end : chunk_size);\n  let must_end = false;\n\n  let cancel: AbortController;\n\n  return new Platform.shim.ReadableStream<Uint8Array>({\n    start() {\n    },\n    pull: async (controller) => {\n      if (must_end) {\n        controller.close();\n        return;\n      }\n\n      if ((chunk_end >= (format.content_length ? format.content_length : 0)) || options.range) {\n        must_end = true;\n      }\n\n      return new Promise(async (resolve, reject) => {\n        try {\n          cancel = new AbortController();\n\n          const response = await actions.session.http.fetch_function(`${format_url}&cpn=${cpn}&range=${chunk_start}-${chunk_end || ''}`, {\n            method: 'GET',\n            headers: {\n              ...Constants.STREAM_HEADERS\n              // XXX: use YouTube's range parameter instead of a Range header.\n              // Range: `bytes=${chunk_start}-${chunk_end}`\n            },\n            signal: cancel.signal\n          });\n\n          // Throw if the response is not 2xx\n          if (!response.ok)\n            throw new InnertubeError('The server responded with a non 2xx status code', {\n              error_type: 'FETCH_FAILED',\n              response\n            });\n\n          const body = response.body;\n\n          if (!body)\n            throw new InnertubeError('Could not get ReadableStream from fetch Response.', {\n              error_type: 'FETCH_FAILED',\n              response\n            });\n\n          for await (const chunk of streamToIterable(body)) {\n            controller.enqueue(chunk);\n          }\n\n          chunk_start = chunk_end + 1;\n          chunk_end += chunk_size;\n\n          resolve();\n\n        } catch (e: any) {\n          reject(e);\n        }\n      });\n    },\n    async cancel(reason) {\n      cancel.abort(reason);\n    }\n  }, {\n    highWaterMark: 1, // TODO: better value?\n    size(chunk) {\n      return chunk.byteLength;\n    }\n  });\n}\n\n/**\n * Selects the format that best matches the given options.\n * @param options - Options\n * @param streaming_data - Streaming data\n */\nexport function chooseFormat(options: FormatOptions, streaming_data?: IStreamingData): Format {\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available');\n\n  const formats = [\n    ...(streaming_data.formats || []),\n    ...(streaming_data.adaptive_formats || [])\n  ];\n  \n  if (options.itag) {\n    const candidates = formats.filter((format) => format.itag === options.itag);\n    if (!candidates.length)\n      throw new InnertubeError('No matching formats found', { options });\n    \n    return candidates[0];\n  }\n\n  const requires_audio = options.type ? options.type.includes('audio') : true;\n  const requires_video = options.type ? options.type.includes('video') : true;\n  const language = options.language || 'original';\n  const quality = options.quality || 'best';\n\n  let best_width = -1;\n\n  const is_best = [ 'best', 'bestefficiency' ].includes(quality);\n  const use_most_efficient = quality !== 'best';\n\n  let candidates = formats.filter((format) => {\n    if (requires_audio && !format.has_audio)\n      return false;\n    if (requires_video && !format.has_video)\n      return false;\n    if (options.codec && !format.mime_type.includes(options.codec))\n      return false;\n    if (options.format !== 'any' && !format.mime_type.includes(options.format || 'mp4'))\n      return false;\n    if (!is_best && format.quality_label !== quality)\n      return false;\n    if (format.width && (best_width < format.width))\n      best_width = format.width;\n    return true;\n  });\n\n  if (!candidates.length)\n    throw new InnertubeError('No matching formats found', { options });\n\n  if (is_best && requires_video)\n    candidates = candidates.filter((format) => format.width === best_width);\n\n  if (requires_audio && !requires_video) {\n    const audio_only = candidates.filter((format) => {\n      if (language !== 'original') {\n        return !format.has_video && !format.has_text && format.language === language;\n      }\n      return !format.has_video && !format.has_text && format.is_original;\n\n    });\n    if (audio_only.length > 0) {\n      candidates = audio_only;\n    }\n  }\n\n  if (use_most_efficient) {\n    // Sort by bitrate (lower is better)\n    candidates.sort((a, b) => a.bitrate - b.bitrate);\n  } else {\n    // Sort by bitrate (higher is better)\n    candidates.sort((a, b) => b.bitrate - a.bitrate);\n  }\n\n  return candidates[0];\n}\n\nexport { toDash } from './DashManifest.js';\n", "/* eslint-disable @typescript-eslint/no-namespace */\ndeclare global {\n  namespace JSX {\n    interface IntrinsicElements {\n      [key: string]: DashProps;\n    }\n  }\n}\n\nexport type DashChild = (DashNode | (DashNode | Promise<DashNode | DashNode[]>) | Promise<DashNode | DashNode[]>);\nexport interface DashProps {\n    [key: string]: unknown,\n    children?: DashChild[]\n}\n\nexport interface DashNode {\n    type: string,\n    props: DashProps,\n}\n\nconst XML_CHARACTER_MAP = {\n  '&': '&amp;',\n  '\"': '&quot;',\n  '\\'': '&apos;',\n  '<': '&lt;',\n  '>': '&gt;'\n} as const;\n\nfunction escapeXMLString(str: string) {\n  return str.replace(/([&\"<>'])/g, (_, item: keyof typeof XML_CHARACTER_MAP) => {\n    return XML_CHARACTER_MAP[item];\n  });\n}\n\nfunction normalizeTag(tag: string) {\n  return tag.charAt(0).toUpperCase() + tag.slice(1);\n}\n\nexport function createElement(\n  tagNameOrFunction: string | ((props: DashProps) => DashNode | Promise<DashNode>),\n  props: { [key: string] : unknown } | null | undefined,\n  ...children: DashChild[]\n): DashNode | Promise<DashNode> {\n  const normalizedChildren = children.flat();\n\n  if (typeof tagNameOrFunction === 'function') {\n    return tagNameOrFunction({ ...props, children: normalizedChildren });\n  }\n\n  return {\n    type: normalizeTag(tagNameOrFunction),\n    props: {\n      ...props,\n      children: normalizedChildren\n    }\n  };\n}\n\nexport async function renderElementToString(element: DashNode | string): Promise<string> {\n  if (typeof element === 'string')\n    return escapeXMLString(element);\n\n  let dom = `<${element.type}`;\n\n  if (element.props) {\n    for (const key of Object.keys(element.props)) {\n      if (key !== 'children' && element.props[key] !== undefined) {\n        dom += ` ${key}=\"${escapeXMLString(`${element.props[key]}`)}\"`;\n      }\n    }\n  }\n\n  if (element.props.children) {\n    const children = await Promise.all((await Promise.all(element.props.children.flat())).flat().filter((child) => !!child).map((child) => renderElementToString(child)));\n    if (children.length > 0) {\n      dom += `>${children.join('')}</${element.type}>`;\n      return dom;\n    }\n  }\n\n  return `${dom}/>`;\n}\n\nexport async function renderToString(root: DashNode | Promise<DashNode>) {\n  const dom = await renderElementToString(await root);\n\n  return `<?xml version=\"1.0\" encoding=\"utf-8\"?>${dom}`;\n}\n\nexport function Fragment(props: DashProps) {\n  return props.children;\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport interface StoryboardData {\n  type: 'vod'\n  template_url: string;\n  thumbnail_width: number;\n  thumbnail_height: number;\n  thumbnail_count: number;\n  interval: number;\n  columns: number;\n  rows: number;\n  storyboard_count: number;\n}\n\nexport default class PlayerStoryboardSpec extends YTNode {\n  static type = 'PlayerStoryboardSpec';\n\n  boards: StoryboardData[];\n\n  constructor(data: RawNode) {\n    super();\n\n    const parts = data.spec.split('|');\n    const url = new URL(parts.shift());\n\n    this.boards = parts.map((part: any, i: any) => {\n      const [ thumbnail_width, thumbnail_height, thumbnail_count, columns, rows, interval, name, sigh ] = part.split('#');\n\n      url.searchParams.set('sigh', sigh);\n\n      const storyboard_count = Math.ceil(parseInt(thumbnail_count, 10) / (parseInt(columns, 10) * parseInt(rows, 10)));\n\n      return {\n        type: 'vod',\n        template_url: url.toString().replace('$L', i).replace('$N', name),\n        thumbnail_width: parseInt(thumbnail_width, 10),\n        thumbnail_height: parseInt(thumbnail_height, 10),\n        thumbnail_count: parseInt(thumbnail_count, 10),\n        interval: parseInt(interval, 10),\n        columns: parseInt(columns, 10),\n        rows: parseInt(rows, 10),\n        storyboard_count\n      };\n    });\n  }\n}", "{\n    \"name\": \"youtubei.js\",\n    \"version\": \"17.0.1\",\n    \"description\": \"A JavaScript client for YouTube's private API, known as InnerTube.\",\n    \"type\": \"module\",\n    \"types\": \"./dist/src/platform/lib.d.ts\",\n    \"typesVersions\": {\n        \"*\": {\n            \"agnostic\": [\n                \"./dist/src/platform/lib.d.ts\"\n            ],\n            \"web\": [\n                \"./dist/src/platform/lib.d.ts\"\n            ],\n            \"react-native\": [\n                \"./dist/src/platform/lib.d.ts\"\n            ],\n            \"web.bundle\": [\n                \"./dist/src/platform/lib.d.ts\"\n            ],\n            \"web.bundle.min\": [\n                \"./dist/src/platform/lib.d.ts\"\n            ],\n            \"cf-worker\": [\n                \"./dist/src/platform/lib.d.ts\"\n            ]\n        }\n    },\n    \"exports\": {\n        \".\": {\n            \"deno\": \"./dist/src/platform/deno.js\",\n            \"node\": {\n                \"import\": \"./dist/src/platform/node.js\",\n                \"default\": \"./dist/src/platform/node.js\"\n            },\n            \"types\": \"./dist/src/platform/lib.d.ts\",\n            \"browser\": \"./dist/src/platform/web.js\",\n            \"react-native\": \"./dist/src/platform/react-native.js\",\n            \"default\": \"./dist/src/platform/web.js\"\n        },\n        \"./package.json\": \"./package.json\",\n        \"./agnostic\": {\n            \"types\": \"./dist/src/platform/lib.d.ts\",\n            \"default\": \"./dist/src/platform/lib.js\"\n        },\n        \"./web\": {\n            \"types\": \"./dist/src/platform/lib.d.ts\",\n            \"default\": \"./dist/src/platform/web.js\"\n        },\n        \"./react-native\": {\n            \"types\": \"./dist/src/platform/lib.d.ts\",\n            \"default\": \"./dist/src/platform/react-native.js\"\n        },\n        \"./web.bundle\": {\n            \"types\": \"./dist/src/platform/lib.d.ts\",\n            \"default\": \"./bundle/browser.js\"\n        },\n        \"./cf-worker\": {\n            \"types\": \"./dist/src/platform/lib.d.ts\",\n            \"default\": \"./dist/src/platform/cf-worker.js\"\n        }\n    },\n    \"author\": \"LuanRT <luan.lrt4@gmail.com> (https://github.com/LuanRT)\",\n    \"funding\": [\n        \"https://github.com/sponsors/LuanRT\"\n    ],\n    \"contributors\": [\n        \"Wykerd (https://github.com/wykerd/)\",\n        \"MasterOfBob777 (https://github.com/MasterOfBob777)\",\n        \"patrickkfkan (https://github.com/patrickkfkan)\",\n        \"akkadaska (https://github.com/akkadaska)\",\n        \"Absidue (https://github.com/absidue)\"\n    ],\n    \"scripts\": {\n        \"test\": \"vitest run --reporter verbose\",\n        \"lint\": \"eslint ./src\",\n        \"lint:fix\": \"eslint --fix ./src\",\n        \"clean:source-maps\": \"rimraf ./bundle/browser.js.map ./bundle/cf-worker.js.map ./bundle/react-native.js.map\",\n        \"clean:build-output\": \"rimraf ./dist ./bundle/browser.js ./bundle/cf-worker.js ./bundle/react-native.js ./deno\",\n        \"build\": \"npm run clean:build-output && npm run clean:source-maps && npm run build:parser-map && npm run build:esm && npm run bundle:browser && npm run bundle:cf-worker && npm run bundle:react-native\",\n        \"build:esm\": \"tspc\",\n        \"build:deno\": \"cpy ./src ./deno && cpy ./protos ./deno && esbuild ./src/utils/DashManifest.tsx --keep-names --format=esm --platform=neutral --target=es2020 --outfile=./deno/src/utils/DashManifest.js && cpy ./package.json ./deno && replace \\\".js';\\\" \\\".ts';\\\" ./deno -r && replace '.js\\\";' '.ts\\\";' ./deno -r && replace \\\"'./DashManifest.ts';\\\" \\\"'./DashManifest.js';\\\" ./deno -r && replace \\\"'jintr';\\\" \\\"'jsr:@luanrt/jintr';\\\" ./deno -r && replace \\\"@bufbuild/protobuf/wire\\\" \\\"https://esm.sh/@bufbuild/protobuf@2.0.0/wire\\\" ./deno -r\",\n        \"build:proto\": \"rimraf ./protos/generated && node ./dev-scripts/generate-proto.mjs\",\n        \"build:parser-map\": \"node ./dev-scripts/gen-parser-map.mjs\",\n        \"bundle:browser\": \"esbuild ./dist/src/platform/web.js --banner:js=\\\"/* eslint-disable */\\\" --bundle --sourcemap --target=chrome70 --keep-names --format=esm --define:global=globalThis --conditions=module --outfile=./bundle/browser.js --platform=browser\",\n        \"bundle:react-native\": \"esbuild ./dist/src/platform/react-native.js --bundle --sourcemap --target=es2020 --keep-names --format=esm --platform=neutral --define:global=globalThis --conditions=module --outfile=./bundle/react-native.js\",\n        \"bundle:cf-worker\": \"esbuild ./dist/src/platform/cf-worker.js --banner:js=\\\"/* eslint-disable */\\\" --bundle --sourcemap --target=es2020 --keep-names --format=esm --define:global=globalThis --conditions=module --outfile=./bundle/cf-worker.js --platform=node\",\n        \"build:docs\": \"typedoc\",\n        \"prepare\": \"npm run build\",\n        \"watch\": \"tspc --watch\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/LuanRT/YouTube.js.git\"\n    },\n    \"files\": [\n        \"dist/\",\n        \"bundle/\",\n        \"package.json\",\n        \"README.md\",\n        \"LICENSE\"\n    ],\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@bufbuild/protobuf\": \"^2.0.0\",\n        \"meriyah\": \"^6.1.4\"\n    },\n    \"devDependencies\": {\n        \"@eslint/js\": \"^9.37.0\",\n        \"@types/estree\": \"^1.0.6\",\n        \"@types/node\": \"^25.0.3\",\n        \"@typescript-eslint/eslint-plugin\": \"^8.46.0\",\n        \"@typescript-eslint/parser\": \"^8.46.0\",\n        \"cpy-cli\": \"^6.0.0\",\n        \"esbuild\": \"^0.25.6\",\n        \"eslint\": \"^9.37.0\",\n        \"globals\": \"^17.0.0\",\n        \"replace\": \"^1.2.2\",\n        \"rimraf\": \"^6.0.1\",\n        \"ts-patch\": \"^3.0.2\",\n        \"ts-proto\": \"^2.2.0\",\n        \"typedoc\": \"^0.28.14\",\n        \"typedoc-plugin-markdown\": \"^4.9.0\",\n        \"typescript\": \"^5.9.3\",\n        \"typescript-eslint\": \"^8.46.0\",\n        \"vitest\": \"^3.2.4\"\n    },\n    \"bugs\": {\n        \"url\": \"https://github.com/LuanRT/YouTube.js/issues\"\n    },\n    \"homepage\": \"https://github.com/LuanRT/YouTube.js#readme\",\n    \"keywords\": [\n        \"api\",\n        \"youtube\",\n        \"innertube\",\n        \"livechat\",\n        \"youtube-music\",\n        \"ytdl\",\n        \"youtube-studio\",\n        \"downloader\",\n        \"ytmusic\"\n    ]\n}\n", "import type { StoryboardData } from '../parser/classes/PlayerStoryboardSpec.js';\nimport PlayerStoryboardSpec from '../parser/classes/PlayerStoryboardSpec.js';\nimport { getStringBetweenStrings, InnertubeError } from './Utils.js';\nimport * as Constants from './Constants.js';\nimport * as Log from './Log.js';\nimport packageInfo from '../../package.json' with { type: 'json' };\n\nimport type Actions from '../core/Actions.js';\nimport type Player from '../core/Player.js';\nimport type { LiveStoryboardData } from '../parser/classes/PlayerLiveStoryboardSpec.js';\nimport type { IStreamingData } from '../parser/index.js';\nimport type { Format } from '../parser/misc.js';\nimport type { PlayerLiveStoryboardSpec } from '../parser/nodes.js';\nimport type { FormatFilter, URLTransformer } from '../types/index.js';\nimport type { StreamingInfoOptions } from '../types/StreamingInfoOptions.js';\nimport type { CaptionTrackData } from '../parser/classes/PlayerCaptionsTracklist.js';\n\nconst TAG_ = 'StreamingInfo';\n\nexport interface StreamingInfo {\n  getDuration(): Promise<number>;\n  audio_sets: AudioSet[];\n  video_sets: VideoSet[];\n  image_sets: ImageSet[];\n  text_sets: TextSet[];\n}\n\nexport interface AudioSet {\n  mime_type: string;\n  language?: string;\n  codecs?: string;\n  audio_sample_rate?: number;\n  track_name?: string;\n  track_roles?: ('main' | 'dub' | 'description' | 'enhanced-audio-intelligibility' | 'alternate')[];\n  channels?: number;\n  drm_families?: string[];\n  drm_track_type?: string;\n  representations: AudioRepresentation[];\n}\n\nexport interface Range {\n  start: number;\n  end: number;\n}\n\nexport type SegmentInfo = {\n  is_oft: false,\n  is_post_live_dvr: false\n  base_url: string;\n  index_range: Range;\n  init_range: Range;\n} | {\n  is_oft: true,\n  is_post_live_dvr: false\n  getSegmentTemplate(): Promise<SegmentTemplate>\n} | {\n  is_oft: false,\n  is_post_live_dvr: true,\n  getSegmentTemplate(): Promise<SegmentTemplate>\n}\n\nexport interface Segment {\n  duration: number,\n  repeat_count?: number\n}\n\nexport interface SegmentTemplate {\n  init_url?: string,\n  media_url: string,\n  timeline: Segment[]\n}\n\nexport interface AudioRepresentation {\n  uid: string;\n  bitrate: number;\n  codecs?: string;\n  audio_sample_rate?: number;\n  channels?: number;\n  segment_info: SegmentInfo;\n}\n\nexport interface VideoSet {\n  mime_type: string;\n  color_info: ColorInfo;\n  codecs?: string;\n  fps?: number;\n  drm_families?: string[];\n  drm_track_type?: string;\n  representations: VideoRepresentation[]\n}\n\nexport interface VideoRepresentation {\n  uid: string;\n  bitrate: number;\n  width?: number;\n  height?: number;\n  fps?: number;\n  codecs?: string;\n  segment_info: SegmentInfo;\n}\n\nexport interface ColorInfo {\n  primaries?: '1' | '9',\n  transfer_characteristics?: '1' | '14' | '16' | '18',\n  matrix_coefficients?: '1' | '14'\n}\n\nexport interface ImageSet {\n  probable_mime_type: string;\n  /**\n   * Sometimes YouTube returns webp instead of jpg despite the file extension being jpg\n   * So we need to update the mime type to reflect the actual mime type of the response\n   */\n  getMimeType(): Promise<string>;\n  representations: ImageRepresentation[]\n}\n\nexport interface ImageRepresentation {\n  uid: string;\n  getBitrate(): Promise<number>;\n  sheet_width: number;\n  sheet_height: number;\n  thumbnail_width: number;\n  thumbnail_height: number;\n  rows: number;\n  columns: number;\n  template_url: string;\n  template_duration: number;\n  getURL(n: number): string;\n}\n\nexport interface TextSet {\n  mime_type: string;\n  language: string;\n  track_name: string;\n  track_roles: ('caption' | 'dub')[];\n  representation: TextRepresentation;\n}\n\nexport interface TextRepresentation {\n  uid: string;\n  base_url: string;\n}\n\ninterface PostLiveDvrInfo {\n  duration: number,\n  segment_count: number\n}\n\ninterface SharedPostLiveDvrInfo {\n  item?: PostLiveDvrInfo\n}\n\ninterface DrcLabels {\n  label_original: string;\n  label_drc: string;\n  label_drc_multiple: (audio_track_display_name: string) => string;\n}\n\ninterface VbLabels {\n  label_original: string;\n  label_vb: string;\n  label_vb_multiple: (audio_track_display_name: string) => string;\n}\n\nfunction getFormatGroupings(formats: Format[], is_post_live_dvr: boolean) {\n  const group_info = new Map<string, Format[]>();\n\n  const has_multiple_audio_tracks = formats.some((fmt) => !!fmt.audio_track);\n\n  for (const format of formats) {\n    if (((!format.index_range || !format.init_range) && !format.is_type_otf && !is_post_live_dvr)) {\n      continue;\n    }\n\n    const mime_type = format.mime_type.split(';')[0];\n\n    // Codec without any profile or level information\n    const just_codec = getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"')?.split('.')[0];\n\n    // HDR videos have both SDR and HDR vp9 formats, so we want to stick them in different groups\n    const color_info = format.color_info ? Object.values(format.color_info).join('-') : '';\n\n    const audio_track_id = format.audio_track?.id || '';\n\n    const drc = format.is_drc ? 'drc' : '';\n    const vb = format.is_vb ? 'vb' : '';\n\n    const group_id = `${mime_type}-${just_codec}-${color_info}-${audio_track_id}-${drc}-${vb}`;\n\n    if (!group_info.has(group_id)) {\n      group_info.set(group_id, []);\n    }\n    group_info.get(group_id)?.push(format);\n  }\n\n  return {\n    groups: Array.from(group_info.values()),\n    has_multiple_audio_tracks\n  };\n}\n\nfunction hoistCodecsIfPossible(formats: Format[], hoisted: string[]) {\n  if (\n    formats.length > 1 &&\n    new Set(formats.map((format) => getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"'))).size === 1\n  ) {\n    hoisted.push('codecs');\n    return getStringBetweenStrings(formats[0].mime_type, 'codecs=\"', '\"');\n  }\n}\n\nfunction hoistNumberAttributeIfPossible(\n  formats: Format[],\n  property: 'audio_sample_rate' | 'fps',\n  hoisted: string[]\n) {\n  if (formats.length > 1 && new Set(formats.map((format) => format.fps)).size === 1) {\n    hoisted.push(property);\n    return Number(formats[0][property]);\n  }\n}\n\nfunction hoistAudioChannelsIfPossible(formats: Format[], hoisted: string[]) {\n  if (formats.length > 1 && new Set(formats.map((format) => format.audio_channels || 2)).size === 1) {\n    hoisted.push('AudioChannelConfiguration');\n    return formats[0].audio_channels;\n  }\n}\n\nasync function getOTFSegmentTemplate(url: string, actions: Actions): Promise<SegmentTemplate> {\n  // Fetch the first segment as it contains the segment durations which we need to generate the manifest\n  const response = await actions.session.http.fetch_function(`${url}&rn=0&sq=0`, {\n    method: 'GET',\n    headers: Constants.STREAM_HEADERS,\n    redirect: 'follow'\n  });\n\n  // Example OTF video: https://www.youtube.com/watch?v=DJ8GQUNUXGM\n\n  // There might have been redirects, if there were we want to write the resolved URL to the manifest\n  // So that the player doesn't have to follow the redirects every time it requests a segment\n  const resolved_url = response.url.replace('&rn=0', '').replace('&sq=0', '');\n\n  // In this function we only need the segment durations and how often the durations are repeated\n  // The segment count could be useful for other stuff though\n  // The response body contains a lot of junk but the useful stuff looks like this:\n  // Segment-Count: 922\\r\\n' +\n  //   'Segment-Durations-Ms: 5120(r=920),3600,\\r\\n'\n  const response_text = await response.text();\n\n  const segment_duration_strings = getStringBetweenStrings(response_text, 'Segment-Durations-Ms:', '\\r\\n')?.split(',');\n\n  if (!segment_duration_strings) {\n    throw new InnertubeError('Failed to extract the segment durations from this OTF stream', { url });\n  }\n\n  const segment_durations = [];\n  for (const segment_duration_string of segment_duration_strings) {\n    const trimmed_segment_duration = segment_duration_string.trim();\n    if (trimmed_segment_duration.length === 0) {\n      continue;\n    }\n\n    let repeat_count;\n\n    const repeat_count_string = getStringBetweenStrings(trimmed_segment_duration, '(r=', ')');\n    if (repeat_count_string) {\n      repeat_count = parseInt(repeat_count_string);\n    }\n\n    segment_durations.push({\n      duration: parseInt(trimmed_segment_duration),\n      repeat_count\n    });\n  }\n\n  return {\n    init_url: `${resolved_url}&sq=0`,\n    media_url: `${resolved_url}&sq=$Number$`,\n    timeline: segment_durations\n  };\n}\n\nasync function getPostLiveDvrInfo(transformed_url: string, actions: Actions): Promise<PostLiveDvrInfo> {\n  const response = await actions.session.http.fetch_function(`${transformed_url}&rn=0&sq=0`, {\n    method: 'HEAD',\n    headers: Constants.STREAM_HEADERS,\n    redirect: 'follow'\n  });\n\n  const duration_ms = parseInt(response.headers.get('X-Head-Time-Millis') || '');\n  const segment_count = parseInt(response.headers.get('X-Head-Seqnum') || '');\n\n  if (isNaN(duration_ms) || isNaN(segment_count)) {\n    throw new InnertubeError('Failed to extract the duration or segment count for this Post Live DVR video');\n  }\n\n  return {\n    duration: duration_ms / 1000,\n    segment_count\n  };\n}\n\nasync function getPostLiveDvrDuration(\n  shared_post_live_dvr_info: SharedPostLiveDvrInfo,\n  format: Format,\n  url_transformer: URLTransformer,\n  actions: Actions,\n  player?: Player,\n  cpn?: string\n) {\n  if (!shared_post_live_dvr_info.item) {\n    const url = new URL(await format.decipher(player));\n    url.searchParams.set('cpn', cpn || '');\n\n    const transformed_url = url_transformer(url).toString();\n\n    shared_post_live_dvr_info.item = await getPostLiveDvrInfo(transformed_url, actions);\n  }\n\n  return shared_post_live_dvr_info.item.duration;\n}\n\nasync function getSegmentInfo(\n  format: Format,\n  url_transformer: URLTransformer,\n  actions?: Actions,\n  player?: Player,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  let transformed_url = '';\n\n  if (is_sabr) {\n    const formatKey = `${format.itag || ''}:${format.xtags || ''}`;\n    transformed_url = `sabr://${format.has_video ? 'video' : 'audio'}?key=${formatKey}`;\n  } else {\n    const url = new URL(await format.decipher(player));\n    url.searchParams.set('cpn', cpn || '');\n    transformed_url = url_transformer(url).toString();\n  }\n\n  if (format.is_type_otf) {\n    if (!actions)\n      throw new InnertubeError('Unable to get segment durations for this OTF stream without an Actions instance', { format });\n\n    const info: SegmentInfo = {\n      is_oft: true,\n      is_post_live_dvr: false,\n      getSegmentTemplate() {\n        return getOTFSegmentTemplate(transformed_url, actions);\n      }\n    };\n\n    return info;\n  }\n\n  if (shared_post_live_dvr_info) {\n    if (!actions) {\n      throw new InnertubeError('Unable to get segment count for this Post Live DVR video without an Actions instance', { format });\n    }\n\n    const target_duration_dec = format.target_duration_dec;\n\n    if (typeof target_duration_dec !== 'number') {\n      throw new InnertubeError('Format is missing target_duration_dec', { format });\n    }\n\n    const info: SegmentInfo = {\n      is_oft: false,\n      is_post_live_dvr: true,\n      async getSegmentTemplate(): Promise<SegmentTemplate> {\n        if (!shared_post_live_dvr_info.item) {\n          shared_post_live_dvr_info.item = await getPostLiveDvrInfo(transformed_url, actions);\n        }\n\n        return {\n          media_url: `${transformed_url}&sq=$Number$`,\n          timeline: [\n            {\n              duration: target_duration_dec * 1000,\n              repeat_count: shared_post_live_dvr_info.item.segment_count\n            }\n          ]\n        };\n      }\n    };\n\n    return info;\n  }\n\n  if (!format.index_range || !format.init_range)\n    throw new InnertubeError('Index and init ranges not available', { format });\n\n  const info: SegmentInfo = {\n    is_oft: false,\n    is_post_live_dvr: false,\n    base_url: transformed_url,\n    index_range: format.index_range,\n    init_range: format.init_range\n  };\n\n  return info;\n}\n\nasync function getAudioRepresentation(\n  format: Format,\n  hoisted: string[],\n  url_transformer: URLTransformer,\n  actions?: Actions,\n  player?: Player,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  const uid_parts = [ format.itag.toString() ];\n\n  if (format.audio_track) {\n    uid_parts.push(format.audio_track.id);\n  }\n\n  if (format.is_drc) {\n    uid_parts.push('drc');\n  }\n\n  if (format.is_vb) {\n    uid_parts.push('vb');\n  }\n\n  const rep: AudioRepresentation = {\n    uid: uid_parts.join('-'),\n    bitrate: format.bitrate,\n    codecs: !hoisted.includes('codecs') ? getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"') : undefined,\n    audio_sample_rate: !hoisted.includes('audio_sample_rate') ? format.audio_sample_rate : undefined,\n    channels: !hoisted.includes('AudioChannelConfiguration') ? format.audio_channels || 2 : undefined,\n    segment_info: await getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)\n  };\n\n  return rep;\n}\n\nfunction getTrackRoles(format: Format, has_drc_streams: boolean) {\n  if (!format.audio_track && !has_drc_streams) {\n    return;\n  }\n\n  const roles: ('main' | 'dub' | 'description' | 'enhanced-audio-intelligibility' | 'alternate')[] = [\n    format.is_original ? 'main' : 'alternate'\n  ];\n\n  if (format.is_dubbed || format.is_auto_dubbed)\n    roles.push('dub');\n\n  if (format.is_descriptive)\n    roles.push('description');\n\n  if (format.is_drc || format.is_vb)\n    roles.push('enhanced-audio-intelligibility');\n\n  return roles;\n}\n\nasync function getAudioSet(\n  formats: Format[],\n  url_transformer: URLTransformer,\n  actions?: Actions,\n  player?: Player,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  drc_labels?: DrcLabels,\n  vb_labels?: VbLabels,\n  is_sabr?: boolean\n) {\n  const first_format = formats[0];\n  const { audio_track } = first_format;\n  const hoisted: string[] = [];\n\n  const has_drc_streams = !!drc_labels;\n  const has_vb_streams = !!vb_labels;\n\n  let track_name;\n\n  if (audio_track) {\n    if (has_drc_streams && first_format.is_drc) {\n      track_name = drc_labels.label_drc_multiple(audio_track.display_name);\n    } else if (has_vb_streams && first_format.is_vb) {\n      track_name = vb_labels.label_vb_multiple(audio_track.display_name);\n    } else {\n      track_name = audio_track.display_name;\n    }\n  } else if (has_drc_streams || has_vb_streams) {\n    if (has_drc_streams && first_format.is_drc) {\n      track_name = drc_labels.label_drc;\n    } else if (has_vb_streams && first_format.is_vb) {\n      track_name = vb_labels.label_vb;\n    } else {\n      // Both use the same param, so it doesn't matter which one is defined here.\n      track_name = (drc_labels || vb_labels)?.label_original;\n    }\n  }\n\n  const set: AudioSet = {\n    mime_type: first_format.mime_type.split(';')[0],\n    language: first_format.language ?? undefined,\n    codecs: hoistCodecsIfPossible(formats, hoisted),\n    audio_sample_rate: hoistNumberAttributeIfPossible(formats, 'audio_sample_rate', hoisted),\n    track_name,\n    track_roles: getTrackRoles(first_format, has_drc_streams),\n    channels: hoistAudioChannelsIfPossible(formats, hoisted),\n    drm_families: first_format.drm_families,\n    drm_track_type: first_format.drm_track_type,\n    representations: await Promise.all(formats.map((format) => getAudioRepresentation(format, hoisted, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)))\n  };\n\n  return set;\n}\n\nconst COLOR_PRIMARIES: Record<string, ColorInfo['primaries']> = {\n  BT709: '1',\n  BT2020: '9'\n};\n\nconst COLOR_TRANSFER_CHARACTERISTICS: Record<string, ColorInfo['transfer_characteristics']> = {\n  BT709: '1',\n  BT2020_10: '14',\n  SMPTEST2084: '16',\n  ARIB_STD_B67: '18'\n};\n\n// This list is incomplete, as the player.js doesn't currently have any code for matrix coefficients,\n// So it doesn't have a list like with the other two, so this is just based on what we've seen in responses\nconst COLOR_MATRIX_COEFFICIENTS: Record<string, ColorInfo['matrix_coefficients']> = {\n  BT709: '1',\n  BT2020_NCL: '14'\n};\n\nfunction getColorInfo(format: Format) {\n  // Section 5.5 Video source metadata signalling https://dashif.org/docs/IOP-Guidelines/DASH-IF-IOP-Part7-v5.0.0.pdf\n  // Section 8 Video code points https://www.itu.int/rec/T-REC-H.273-202107-I/en\n  // The player.js file was also helpful\n\n  const color_info = format.color_info;\n  let primaries;\n  let transfer_characteristics;\n  let matrix_coefficients;\n\n  if (color_info) {\n    if (color_info.primaries) {\n      primaries = COLOR_PRIMARIES[color_info.primaries];\n    }\n\n    if (color_info.transfer_characteristics) {\n      transfer_characteristics = COLOR_TRANSFER_CHARACTERISTICS[color_info.transfer_characteristics];\n    }\n\n    if (color_info.matrix_coefficients) {\n      matrix_coefficients = COLOR_MATRIX_COEFFICIENTS[color_info.matrix_coefficients];\n\n      if (!matrix_coefficients) {\n        const url = new URL(format.url as string);\n\n        const anonymisedFormat = JSON.parse(JSON.stringify(format));\n        anonymisedFormat.url = 'REDACTED';\n        anonymisedFormat.signature_cipher = 'REDACTED';\n        anonymisedFormat.cipher = 'REDACTED';\n\n        Log.warn(TAG_, `Unknown matrix coefficients \"${color_info.matrix_coefficients}\". The DASH manifest is still usable without this.\\n`\n          + `Please report it at ${packageInfo.bugs.url} so we can add support for it.\\n`\n          + `InnerTube client: ${url.searchParams.get('c')}\\nformat:`, anonymisedFormat);\n      }\n    }\n  } else if (getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"')?.startsWith('avc1')) {\n    // YouTube's h264 streams always seem to be SDR, so this is a pretty safe bet.\n    transfer_characteristics = COLOR_TRANSFER_CHARACTERISTICS.BT709;\n  }\n\n  const info: ColorInfo = {\n    primaries,\n    transfer_characteristics,\n    matrix_coefficients\n  };\n\n  return info;\n}\n\nasync function getVideoRepresentation(\n  format: Format,\n  url_transformer: URLTransformer,\n  hoisted: string[],\n  player?: Player,\n  actions?: Actions,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  const rep: VideoRepresentation = {\n    uid: format.itag.toString(),\n    bitrate: format.bitrate,\n    width: format.width,\n    height: format.height,\n    codecs: !hoisted.includes('codecs') ? getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"') : undefined,\n    fps: !hoisted.includes('fps') ? format.fps : undefined,\n    segment_info: await getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)\n  };\n\n  return rep;\n}\n\nasync function getVideoSet(\n  formats: Format[],\n  url_transformer: URLTransformer,\n  player?: Player,\n  actions?: Actions,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  const first_format = formats[0];\n  const color_info = getColorInfo(first_format);\n  const hoisted: string[] = [];\n\n  const set: VideoSet = {\n    mime_type: first_format.mime_type.split(';')[0],\n    color_info,\n    codecs: hoistCodecsIfPossible(formats, hoisted),\n    fps: hoistNumberAttributeIfPossible(formats, 'fps', hoisted),\n    drm_families: first_format.drm_families,\n    drm_track_type: first_format.drm_track_type,\n    representations: await Promise.all(formats.map((format) => getVideoRepresentation(format, url_transformer, hoisted, player, actions, cpn, shared_post_live_dvr_info, is_sabr)))\n  };\n\n  return set;\n}\n\nfunction getStoryboardInfo(\n  storyboards: PlayerStoryboardSpec | PlayerLiveStoryboardSpec\n) {\n  // Can't seem to combine the types in the Map, so create an alias here\n  type AnyStoryboardData = StoryboardData | LiveStoryboardData\n\n  const mime_info = new Map<string, AnyStoryboardData[]>();\n\n  const boards = storyboards.is(PlayerStoryboardSpec) ? storyboards.boards : [ storyboards.board ];\n\n  for (const storyboard of boards) {\n    const extension = new URL(storyboard.template_url).pathname.split('.').pop();\n\n    const mime_type = `image/${extension === 'jpg' ? 'jpeg' : extension}`;\n\n    if (!mime_info.has(mime_type)) {\n      mime_info.set(mime_type, []);\n    }\n    mime_info.get(mime_type)?.push(storyboard);\n  }\n\n  return mime_info;\n}\n\ninterface SharedStoryboardResponse {\n  response?: Promise<Response>\n}\n\nasync function getStoryboardMimeType(\n  actions: Actions,\n  board: StoryboardData | LiveStoryboardData,\n  transform_url: URLTransformer,\n  probable_mime_type: string,\n  shared_response: SharedStoryboardResponse\n) {\n  const url = board.template_url;\n\n  const req_url = transform_url(new URL(url.replace('$M', '0')));\n\n  const res_promise = shared_response.response ? shared_response.response : actions.session.http.fetch_function(req_url, {\n    method: 'HEAD',\n    headers: Constants.STREAM_HEADERS\n  });\n\n  shared_response.response = res_promise;\n\n  const res = await res_promise;\n\n  return res.headers.get('Content-Type') || probable_mime_type;\n}\n\nasync function getStoryboardBitrate(\n  actions: Actions,\n  board: StoryboardData | LiveStoryboardData,\n  shared_response: SharedStoryboardResponse\n) {\n  const url = board.template_url;\n\n  const response_promises: Promise<Response>[] = [];\n\n  // Set a limit so we don't take forever for long videos\n  const request_limit = Math.min(board.type === 'vod' ? board.storyboard_count : 5, 10);\n  for (let i = 0; i < request_limit; i++) {\n    const req_url = new URL(url.replace('$M', i.toString()));\n\n    const response_promise =\n      i === 0 && shared_response.response ?\n        shared_response.response :\n        actions.session.http.fetch_function(req_url, {\n          method: 'HEAD',\n          headers: Constants.STREAM_HEADERS\n        });\n\n    if (i === 0)\n      shared_response.response = response_promise;\n\n    response_promises.push(response_promise);\n  }\n\n  // Run the requests in parallel to avoid causing too much delay\n  const responses = await Promise.all(response_promises);\n\n  const content_lengths = [];\n\n  for (const response of responses) {\n    content_lengths.push(parseInt(response.headers.get('Content-Length') || '0'));\n  }\n\n  // This is a rough estimate, so it probably won't reflect that actual peak bitrate\n  // Hopefully it's close enough, because figuring out the actual peak bitrate would require downloading and analysing all storyboard tiles\n  return Math.ceil((Math.max(...content_lengths) / (board.rows * board.columns)) * 8);\n}\n\nfunction getImageRepresentation(\n  duration: number,\n  actions: Actions,\n  board: StoryboardData | LiveStoryboardData,\n  transform_url: URLTransformer,\n  shared_response: SharedStoryboardResponse\n) {\n  const url = board.template_url;\n  const template_url = new URL(url.replace('$M', '$Number$'));\n\n  let template_duration;\n\n  if (board.type === 'vod') {\n    // Here duration is the duration of the video\n    template_duration = duration / board.storyboard_count;\n  } else {\n    // Here duration is the duration of one of the video/audio segments,\n    // As there is one tile per segment, we need to multiply it by the number of tiles\n    template_duration = duration * board.columns * board.rows;\n  }\n\n  const rep: ImageRepresentation = {\n    uid: `thumbnails_${board.thumbnail_width}x${board.thumbnail_height}`,\n    getBitrate() {\n      return getStoryboardBitrate(actions, board, shared_response);\n    },\n    sheet_width: board.thumbnail_width * board.columns,\n    sheet_height: board.thumbnail_height * board.rows,\n    thumbnail_height: board.thumbnail_height,\n    thumbnail_width: board.thumbnail_width,\n    rows: board.rows,\n    columns: board.columns,\n    template_duration: Math.round(template_duration),\n    template_url: transform_url(template_url).toString(),\n    getURL(n) {\n      return template_url.toString().replace('$Number$', n.toString());\n    }\n  };\n\n  return rep;\n}\n\nfunction getImageSets(\n  duration: number,\n  actions: Actions,\n  storyboards: PlayerStoryboardSpec | PlayerLiveStoryboardSpec,\n  transform_url: URLTransformer\n) {\n  const mime_info = getStoryboardInfo(storyboards);\n\n  const shared_response: SharedStoryboardResponse = {};\n\n  return Array.from(mime_info.entries()).map<ImageSet>(([ type, boards ]) => ({\n    probable_mime_type: type,\n    getMimeType() {\n      return getStoryboardMimeType(actions, boards[0], transform_url, type, shared_response);\n    },\n    representations: boards.map((board) => getImageRepresentation(duration, actions, board, transform_url, shared_response))\n  }));\n}\n\nfunction getTextSets(\n  caption_tracks: CaptionTrackData[],\n  format: 'vtt' | 'ttml',\n  transform_url: URLTransformer\n): TextSet[] {\n  const mime_type = format === 'vtt' ? 'text/vtt' : 'application/ttml+xml';\n\n  return caption_tracks.map((caption_track) => {\n    const url = new URL(caption_track.base_url);\n    url.searchParams.set('fmt', format);\n\n    const track_roles: ('caption' | 'dub')[] = [ 'caption' ];\n\n    if (url.searchParams.has('tlang')) {\n      track_roles.push('dub');\n    }\n\n    return {\n      mime_type,\n      language: caption_track.language_code,\n      track_name: caption_track.name.toString(),\n      track_roles,\n      representation: {\n        uid: `text-${caption_track.vss_id}`,\n        base_url: transform_url(url).toString()\n      }\n    };\n  });\n}\n\nexport async function getStreamingInfo(\n  streaming_data?: IStreamingData,\n  is_post_live_dvr = false,\n  url_transformer: URLTransformer = (url) => url,\n  format_filter?: FormatFilter,\n  cpn?: string,\n  player?: Player,\n  actions?: Actions,\n  storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec,\n  caption_tracks?: CaptionTrackData[],\n  options?: StreamingInfoOptions\n) {\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available');\n\n  const formats = format_filter ?\n    streaming_data.adaptive_formats.filter((fmt) => !format_filter(fmt)) :\n    streaming_data.adaptive_formats;\n\n  let getDuration;\n  let shared_post_live_dvr_info: SharedPostLiveDvrInfo | undefined;\n\n  if (is_post_live_dvr) {\n    shared_post_live_dvr_info = {};\n\n    if (!actions) {\n      throw new InnertubeError('Unable to get duration or segment count for this Post Live DVR video without an Actions instance');\n    }\n\n    getDuration = () => {\n      // Should never happen, as we set it just a few lines above, but this stops TypeScript complaining\n      if (!shared_post_live_dvr_info) {\n        return Promise.resolve(0);\n      }\n\n      return getPostLiveDvrDuration(shared_post_live_dvr_info, formats[0], url_transformer, actions, player, cpn);\n    };\n  } else {\n    const duration = formats[0].approx_duration_ms / 1000;\n\n    getDuration = () => Promise.resolve(duration);\n  }\n\n  const {\n    groups,\n    has_multiple_audio_tracks\n  } = getFormatGroupings(formats, is_post_live_dvr);\n\n  const {\n    video_groups,\n    audio_groups\n  } = groups.reduce((acc, formats) => {\n    if (formats[0].has_audio) {\n      // Some videos with multiple audio tracks, have a broken one, that doesn't have any audio track information\n      // It seems to be the same as default audio track but broken\n      // We want to ignore it, as it messes up audio track selection in players and YouTube ignores it too\n      // At the time of writing, this video has a broken audio track: https://youtu.be/UJeSWbR6W04\n      if (has_multiple_audio_tracks && !formats[0].audio_track)\n        return acc;\n\n      acc.audio_groups.push(formats);\n      return acc;\n    }\n\n    acc.video_groups.push(formats);\n\n    return acc;\n  }, {\n    video_groups: [] as Format[][],\n    audio_groups: [] as Format[][]\n  });\n\n  let drc_labels: DrcLabels | undefined;\n  let vb_labels: VbLabels | undefined;\n\n  let hasDrc = false;\n  let hasVb = false;\n\n  for (const ag of audio_groups.flat()) {\n    if (hasDrc === false && ag.is_drc) {\n      hasDrc = true;\n    }\n\n    if (hasVb === false && ag.is_vb) {\n      hasVb = true;\n    }\n  }\n\n  // TODO: Put these audio fields in a shared object to reduce dups.\n  if (hasDrc) {\n    drc_labels = {\n      label_original: options?.label_original || 'Original',\n      label_drc: options?.label_drc || 'Stable Volume',\n      label_drc_multiple: options?.label_drc_multiple || ((display_name) => `${display_name} (Stable Volume)`)\n    };\n  }\n\n  if (hasVb) {\n    vb_labels = {\n      label_original: options?.label_original || 'Original',\n      label_vb: options?.label_vb || 'Voice Boost',\n      label_vb_multiple: options?.label_vb_multiple || ((display_name) => `${display_name} (Voice Boost)`)\n    };\n  }\n\n  const audio_sets = await Promise.all(audio_groups.map((formats) => getAudioSet(formats, url_transformer, actions, player, cpn, shared_post_live_dvr_info, drc_labels, vb_labels, options?.is_sabr)));\n\n  const video_sets = await Promise.all(video_groups.map((formats) => getVideoSet(formats, url_transformer, player, actions, cpn, shared_post_live_dvr_info, options?.is_sabr)));\n\n  let image_sets: ImageSet[] = [];\n\n  // XXX: We need to make requests to get the image sizes, so we'll skip the storyboards if we don't have an Actions instance\n  if (storyboards && actions) {\n    let duration;\n\n    if (storyboards.is(PlayerStoryboardSpec)) {\n      duration = formats[0].approx_duration_ms / 1000;\n    } else {\n      const target_duration_dec = formats[0].target_duration_dec;\n      if (target_duration_dec === undefined)\n        throw new InnertubeError('Format is missing target_duration_dec', { format: formats[0] });\n      duration = target_duration_dec;\n    }\n\n    image_sets = getImageSets(duration, actions, storyboards, url_transformer);\n  }\n\n  let text_sets: TextSet[] = [];\n\n  if (caption_tracks && options?.captions_format) {\n    if ((options.captions_format as string) !== 'vtt' && (options.captions_format as string) !== 'ttml') {\n      throw new InnertubeError('Invalid captions format', options.captions_format);\n    }\n    text_sets = getTextSets(caption_tracks, options.captions_format, url_transformer);\n  }\n\n  const info: StreamingInfo = {\n    getDuration,\n    audio_sets,\n    video_sets,\n    image_sets,\n    text_sets\n  };\n\n  return info;\n}\n", "/** @jsxFactory DashUtils.createElement */\n/** @jsxFragmentFactory DashUtils.Fragment */\nimport * as DashUtils from './DashUtils.js';\nimport { getStreamingInfo } from './StreamingInfo.js';\nimport { InnertubeError } from './Utils.js';\n\nimport type Actions from '../core/Actions.js';\nimport type Player from '../core/Player.js';\nimport type { IStreamingData } from '../parser/index.js';\nimport type { PlayerStoryboardSpec } from '../parser/nodes.js';\nimport type { SegmentInfo as FSegmentInfo } from './StreamingInfo.js';\nimport type { FormatFilter, URLTransformer } from '../types/index.js';\nimport type PlayerLiveStoryboardSpec from '../parser/classes/PlayerLiveStoryboardSpec.js';\nimport type { StreamingInfoOptions } from '../types/StreamingInfoOptions.js';\nimport type { CaptionTrackData } from '../parser/classes/PlayerCaptionsTracklist.js';\n\ninterface DashManifestProps {\n  streamingData: IStreamingData;\n  isPostLiveDvr: boolean;\n  transformURL?: URLTransformer;\n  rejectFormat?: FormatFilter;\n  options?: StreamingInfoOptions,\n  cpn?: string;\n  player?: Player;\n  actions?: Actions;\n  storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec;\n  captionTracks?: CaptionTrackData[];\n}\n\nasync function OTFPostLiveDvrSegmentInfo({ info }: { info: FSegmentInfo }) {\n  if (!info.is_oft && !info.is_post_live_dvr) return null;\n\n  const template = await info.getSegmentTemplate();\n\n  return <segmentTemplate\n    startNumber={template.init_url ? '1' : '0'}\n    timescale=\"1000\"\n    initialization={template.init_url}\n    media={template.media_url}\n  >\n    <segmentTimeline>\n      {\n        template.timeline.map((segment_duration) => (\n          <s\n            d={segment_duration.duration}\n            r={segment_duration.repeat_count}\n          />\n        ))\n      }\n    </segmentTimeline>\n  </segmentTemplate>;\n}\n\nfunction SegmentInfo({ info }: { info: FSegmentInfo }) {\n  if (info.is_oft || info.is_post_live_dvr) {\n    return <OTFPostLiveDvrSegmentInfo info={info} />;\n  }\n  return <>\n    <baseURL>\n      {info.base_url}\n    </baseURL>\n    <segmentBase indexRange={`${info.index_range.start}-${info.index_range.end}`}>\n      <initialization range={`${info.init_range.start}-${info.init_range.end}`} />\n    </segmentBase>\n  </>;\n}\n\nfunction getDrmSystemId(drm_family?: string): string | null {\n  switch (drm_family) {\n    case 'WIDEVINE':\n      return 'edef8ba9-79d6-4ace-a3c8-27dcd51d21ed';\n    case 'PLAYREADY':\n      return '9a04f079-9840-4286-ab92-e65be0885f95'; \n    default:\n      return null;\n  }\n}\n\nasync function DashManifest({\n  streamingData,\n  isPostLiveDvr,\n  transformURL,\n  rejectFormat,\n  cpn,\n  player,\n  actions,\n  storyboards,\n  captionTracks,\n  options\n}: DashManifestProps) {\n  const {\n    getDuration,\n    audio_sets,\n    video_sets,\n    image_sets,\n    text_sets\n  } = await getStreamingInfo(streamingData, isPostLiveDvr, transformURL, rejectFormat, cpn, player, actions, storyboards, captionTracks, options);\n\n  // XXX: DASH spec: https://standards.iso.org/ittf/PubliclyAvailableStandards/c083314_ISO_IEC%2023009-1_2022(en).zip\n\n  return <mPD\n    xmlns=\"urn:mpeg:dash:schema:mpd:2011\"\n    minBufferTime=\"PT1.500S\"\n    profiles=\"urn:mpeg:dash:profile:isoff-main:2011\"\n    type=\"static\"\n    mediaPresentationDuration={`PT${await getDuration()}S`}\n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd\"\n  >\n    <period>\n      {\n        audio_sets.map((set, index) => (\n          <adaptationSet\n            id={index}\n            mimeType={set.mime_type}\n            startWithSAP=\"1\"\n            subsegmentAlignment=\"true\"\n            lang={set.language}\n            codecs={set.codecs}\n            audioSamplingRate={set.audio_sample_rate}\n            contentType=\"audio\"\n          >\n            {\n              set.drm_families && set.drm_families.map((drm_family) => (\n                <contentProtection schemeIdUri={`urn:uuid:${getDrmSystemId(drm_family)}`}/>\n              ))\n            }\n            {\n              set.track_roles && set.track_roles.map((role) => (\n                <role\n                  schemeIdUri=\"urn:mpeg:dash:role:2011\"\n                  value={role}\n                />\n              ))\n            }\n            {\n              set.track_name &&\n              <label id={index}>\n                {set.track_name}\n              </label>\n            }\n            {\n              set.channels &&\n              <audioChannelConfiguration\n                schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\"\n                value={set.channels}\n              />\n            }\n            {\n              set.representations.map((rep) => (\n                <representation\n                  id={rep.uid}\n                  bandwidth={rep.bitrate}\n                  codecs={rep.codecs}\n                  audioSamplingRate={rep.audio_sample_rate}\n                >\n                  {\n                    rep.channels &&\n                    <audioChannelConfiguration\n                      schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\"\n                      value={rep.channels}\n                    />\n                  }\n                  <SegmentInfo info={rep.segment_info} />\n                </representation>\n              ))\n            }\n          </adaptationSet>\n        ))\n      }\n      {\n        video_sets.map((set, index) => (\n          <adaptationSet\n            id={index + audio_sets.length}\n            mimeType={set.mime_type}\n            startWithSAP=\"1\"\n            subsegmentAlignment=\"true\"\n            codecs={set.codecs}\n            maxPlayoutRate=\"1\"\n            frameRate={set.fps}\n            contentType=\"video\"\n          >\n            {\n              set.drm_families && set.drm_families.map((drm_family) => (\n                <contentProtection schemeIdUri={`urn:uuid:${getDrmSystemId(drm_family)}`}/>\n              ))\n            }\n            {\n              set.color_info.primaries &&\n              <supplementalProperty\n                schemeIdUri=\"urn:mpeg:mpegB:cicp:ColourPrimaries\"\n                value={set.color_info.primaries}\n              />\n            }\n            {\n              set.color_info.transfer_characteristics &&\n              <supplementalProperty\n                schemeIdUri=\"urn:mpeg:mpegB:cicp:TransferCharacteristics\"\n                value={set.color_info.transfer_characteristics}\n              />\n            }\n            {\n              set.color_info.matrix_coefficients &&\n              <supplementalProperty\n                schemeIdUri=\"urn:mpeg:mpegB:cicp:MatrixCoefficients\"\n                value={set.color_info.matrix_coefficients}\n              />\n            }\n            {\n              set.representations.map((rep) => (\n                <representation\n                  id={rep.uid}\n                  bandwidth={rep.bitrate}\n                  width={rep.width}\n                  height={rep.height}\n                  codecs={rep.codecs}\n                  frameRate={rep.fps}\n                >\n                  <SegmentInfo info={rep.segment_info} />\n                </representation>\n              ))\n            }\n          </adaptationSet>\n        ))\n      }\n      {\n        image_sets.map(async (set, index) => {\n          return <adaptationSet\n            id={index + audio_sets.length + video_sets.length}\n            mimeType={await set.getMimeType()}\n            contentType=\"image\"\n          >\n            {\n              set.representations.map(async (rep) => (\n                <representation\n                  id={`thumbnails_${rep.thumbnail_width}x${rep.thumbnail_height}`}\n                  bandwidth={await rep.getBitrate()}\n                  width={rep.sheet_width}\n                  height={rep.sheet_height}\n                >\n                  <essentialProperty\n                    schemeIdUri=\"http://dashif.org/thumbnail_tile\"\n                    value={`${rep.columns}x${rep.rows}`}\n                  />\n                  <segmentTemplate\n                    media={rep.template_url}\n                    duration={rep.template_duration}\n                    startNumber=\"0\"\n                  />\n                </representation>\n              ))\n            }\n          </adaptationSet>;\n        })\n      }\n      {\n        text_sets.map((set, index) => {\n          return <adaptationSet\n            id={index + audio_sets.length + video_sets.length + image_sets.length}\n            mimeType={set.mime_type}\n            lang={set.language}\n            contentType=\"text\"\n          >\n            {\n              set.track_roles.map((role) => (\n                <role\n                  schemeIdUri=\"urn:mpeg:dash:role:2011\"\n                  value={role}\n                />\n              ))\n            }\n            <label id={index + audio_sets.length}>\n              {set.track_name}\n            </label>\n            <representation\n              id={set.representation.uid}\n              bandwidth=\"0\"\n            >\n              <baseURL>\n                {set.representation.base_url}\n              </baseURL>\n            </representation>\n          </adaptationSet>;\n        })\n      }\n    </period>\n  </mPD>;\n}\n\nexport function toDash(\n  streaming_data?: IStreamingData,\n  is_post_live_dvr = false,\n  url_transformer: URLTransformer = (url) => url,\n  format_filter?: FormatFilter,\n  cpn?: string,\n  player?: Player,\n  actions?: Actions,\n  storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec,\n  caption_tracks?: CaptionTrackData[],\n  options?: StreamingInfoOptions\n) {\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available');\n\n  return DashUtils.renderToString(\n    <DashManifest\n      streamingData={streaming_data}\n      isPostLiveDvr={is_post_live_dvr}\n      transformURL={url_transformer}\n      options={options}\n      rejectFormat={format_filter}\n      cpn={cpn}\n      player={player}\n      actions={actions}\n      storyboards={storyboards}\n      captionTracks={caption_tracks}\n    />\n  );\n}", "import * as Constants from './Constants.js';\n\nimport {\n  Platform,\n  generateSidAuth,\n  InnertubeError,\n  getCookie\n} from './Utils.js';\n\nimport type { Context, Session } from '../core/index.js';\nimport type { FetchFunction } from '../types/index.js';\n\nexport interface HTTPClientInit {\n  baseURL?: string;\n}\n\ninterface ProcessedJsonPayload {\n  newBody: string;\n  isWebKids: boolean;\n  clientVersion?: string;\n  clientNameId?: string;\n  adjustedClientName: string;\n}\n\nexport default class HTTPClient {\n  #session: Session;\n  readonly #cookie?: string;\n  readonly #fetch: FetchFunction;\n\n  constructor(session: Session, cookie?: string, fetch?: FetchFunction) {\n    this.#session = session;\n    this.#cookie = cookie;\n    this.#fetch = fetch || Platform.shim.fetch;\n  }\n\n  get fetch_function(): FetchFunction {\n    return this.#fetch;\n  }\n\n  async fetch(\n    input: URL | Request | string,\n    init?: RequestInit & HTTPClientInit\n  ): Promise<Response> {\n    const session = this.#session;\n\n    const innertube_url = Constants.URLS.API.PRODUCTION_1 + session.api_version;\n    const baseURL = init?.baseURL || innertube_url;\n\n    const request_url = typeof input === 'string'\n      ? new URL(`${baseURL}${baseURL.endsWith('/') || input.startsWith('/') ? '' : '/'}${input}`)\n      : input instanceof URL ? input : new URL(input.url, baseURL);\n\n    const headers =\n      init?.headers ||\n      (input instanceof Platform.shim.Request ? input.headers : new Platform.shim.Headers()) ||\n      new Platform.shim.Headers();\n\n    const body = init?.body || (input instanceof Platform.shim.Request ? input.body : undefined);\n\n    const request_headers = new Platform.shim.Headers(headers);\n\n    this.#setupCommonHeaders(request_headers, session, request_url);\n\n    request_url.searchParams.set('prettyPrint', 'false');\n    request_url.searchParams.set('alt', 'json');\n\n    const content_type = request_headers.get('Content-Type');\n\n    let request_body = body;\n    let is_web_kids = false;\n\n    const is_innertube_req =\n      baseURL === innertube_url ||\n      baseURL === Constants.URLS.YT_UPLOAD;\n\n    // Copy context into payload when possible\n    if (content_type === 'application/json' && is_innertube_req && (typeof body === 'string')) {\n      const {\n        newBody,\n        isWebKids: processedIsWebKids,\n        clientVersion: processedClientVersion,\n        clientNameId: processedClientNameId,\n        adjustedClientName\n      } = this.#processJsonPayload(body, session);\n\n      request_body = newBody;\n      is_web_kids = processedIsWebKids;\n\n      if (processedClientVersion) {\n        request_headers.set('X-Youtube-Client-Version', processedClientVersion);\n      }\n      if (processedClientNameId) {\n        request_headers.set('X-Youtube-Client-Name', processedClientNameId);\n      }\n\n      if (adjustedClientName === Constants.CLIENTS.ANDROID.NAME || adjustedClientName === Constants.CLIENTS.YTMUSIC_ANDROID.NAME) {\n        request_headers.set('User-Agent', Constants.CLIENTS.ANDROID.USER_AGENT);\n        request_headers.set('X-GOOG-API-FORMAT-VERSION', '2');\n      } else if (adjustedClientName === Constants.CLIENTS.IOS.NAME) {\n        request_headers.set('User-Agent', Constants.CLIENTS.IOS.USER_AGENT);\n      }\n    } else if (content_type === 'application/x-protobuf') {\n      // Assume it is always an Android request.\n      if (Platform.shim.server) {\n        request_headers.set('User-Agent', Constants.CLIENTS.ANDROID.USER_AGENT);\n        request_headers.set('X-GOOG-API-FORMAT-VERSION', '2');\n        request_headers.delete('X-Youtube-Client-Version');\n      }\n    }\n\n    // Authenticate (NOTE: YouTube Kids does not support regular bearer tokens)\n    if (session.logged_in && is_innertube_req && !is_web_kids) {\n      const oauth = session.oauth;\n\n      if (oauth.oauth2_tokens) {\n        if (oauth.shouldRefreshToken()) {\n          await oauth.refreshAccessToken();\n        }\n\n        request_headers.set('Authorization', `Bearer ${oauth.oauth2_tokens.access_token}`);\n      }\n\n      const cookie = this.#cookie;\n\n      if (cookie) {\n        const sapisid = getCookie(cookie, 'SAPISID');\n\n        if (sapisid) {\n          request_headers.set('Authorization', await generateSidAuth(sapisid));\n          request_headers.set('X-Goog-Authuser', session.account_index.toString());\n          if (session.context.user.onBehalfOfUser)\n            request_headers.set('X-Goog-PageId', session.context.user.onBehalfOfUser);\n        }\n\n        request_headers.set('Cookie', cookie);\n      }\n    }\n\n    const request = new Platform.shim.Request(request_url, input instanceof Platform.shim.Request ? input : init);\n\n    const response = await this.#fetch(request, {\n      body: request_body,\n      headers: request_headers,\n      redirect: input instanceof Platform.shim.Request ? input.redirect : init?.redirect || 'follow',\n      ...(Platform.shim.runtime !== 'cf-worker' ? { credentials: 'include' } : {})\n    });\n\n    // Check if 2xx\n    if (response.ok) {\n      return response;\n    }\n\n    throw new InnertubeError(`Request to ${response.url} failed with status code ${response.status}`, await response.text());\n  }\n\n  #processJsonPayload(json_body: string, session: Session): ProcessedJsonPayload {\n    const parsed_payload = JSON.parse(json_body);\n\n    // Deep copy since we're going to be modifying it.\n    const adjusted_context = JSON.parse(JSON.stringify(session.context)) as Context;\n    this.#adjustContext(adjusted_context, parsed_payload.client);\n\n    const new_payload = {\n      ...parsed_payload,\n      context: adjusted_context\n    };\n\n    const clientVersion = new_payload.context.client.clientVersion;\n    const clientNameFromAdjustedContext = new_payload.context.client.clientName as keyof typeof Constants.CLIENT_NAME_IDS;\n    const clientNameId = Constants.CLIENT_NAME_IDS[clientNameFromAdjustedContext];\n\n    delete new_payload.client;\n\n    const isWebKids = new_payload.context.client.clientName === Constants.CLIENTS.WEB_KIDS.NAME;\n\n    return {\n      newBody: JSON.stringify(new_payload),\n      isWebKids,\n      clientVersion,\n      clientNameId,\n      adjustedClientName: new_payload.context.client.clientName\n    };\n  }\n\n  #setupCommonHeaders(request_headers: Headers, session: Session, request_url: URL): void {\n    request_headers.set('Accept', '*/*');\n    request_headers.set('Accept-Language', '*');\n    request_headers.set('X-Goog-Visitor-Id', session.context.client.visitorData || '');\n    request_headers.set('X-Youtube-Client-Version', session.context.client.clientVersion || '');\n\n    const client_name_id = Constants.CLIENT_NAME_IDS[session.context.client.clientName as keyof typeof Constants.CLIENT_NAME_IDS];\n    if (client_name_id) {\n      request_headers.set('X-Youtube-Client-Name', client_name_id);\n    }\n\n    if (Platform.shim.server) {\n      request_headers.set('User-Agent', session.user_agent || '');\n      request_headers.set('Origin', request_url.origin);\n    }\n  }\n\n  #adjustContext(ctx: Context, client?: string): void {\n    if (!client)\n      return;\n\n    const clientName = client.toUpperCase();\n    \n    if (!Constants.SUPPORTED_CLIENTS.includes(clientName)) {\n      throw new InnertubeError(`Invalid client: ${client}`, {\n        available_innertube_clients: Constants.SUPPORTED_CLIENTS\n      });\n    }\n\n    if (clientName !== 'WEB') {\n      delete ctx.client.configInfo;\n    }\n    \n    if (\n      clientName === 'ANDROID' ||\n      clientName === 'YTMUSIC_ANDROID' ||\n      clientName === 'YTSTUDIO_ANDROID'\n    ) {\n      ctx.client.androidSdkVersion = Constants.CLIENTS.ANDROID.SDK_VERSION;\n      ctx.client.userAgent = Constants.CLIENTS.ANDROID.USER_AGENT;\n      ctx.client.osName = 'Android';\n      ctx.client.osVersion = '13';\n      ctx.client.platform = 'MOBILE';\n    }\n\n    switch (clientName) {\n      case 'MWEB':\n        ctx.client.clientVersion = Constants.CLIENTS.MWEB.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.MWEB.NAME;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.platform = 'MOBILE';\n        break;\n      case 'IOS':\n        ctx.client.deviceMake = 'Apple';\n        ctx.client.deviceModel = Constants.CLIENTS.IOS.DEVICE_MODEL;\n        ctx.client.clientVersion = Constants.CLIENTS.IOS.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.IOS.NAME;\n        ctx.client.platform = 'MOBILE';\n        ctx.client.osName = Constants.CLIENTS.IOS.OS_NAME;\n        ctx.client.osVersion = Constants.CLIENTS.IOS.OS_VERSION;\n        delete ctx.client.browserName;\n        delete ctx.client.browserVersion;\n        break;\n      case 'YTMUSIC':\n        ctx.client.clientVersion = Constants.CLIENTS.YTMUSIC.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.YTMUSIC.NAME;\n        break;\n      case 'ANDROID':\n        ctx.client.clientVersion = Constants.CLIENTS.ANDROID.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.ANDROID.NAME;\n        break;\n      case 'ANDROID_VR':\n        ctx.client.androidSdkVersion = 32;\n        ctx.client.osName = 'Android';\n        ctx.client.osVersion = '12L';\n        ctx.client.platform = 'MOBILE';\n        ctx.client.userAgent = Constants.CLIENTS.ANDROID_VR.USER_AGENT;\n        ctx.client.deviceMake = Constants.CLIENTS.ANDROID_VR.DEVICE_MAKE;\n        ctx.client.deviceModel = Constants.CLIENTS.ANDROID_VR.DEVICE_MODEL;\n        ctx.client.clientVersion = Constants.CLIENTS.ANDROID_VR.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.ANDROID_VR.NAME;\n        break;\n      case 'YTMUSIC_ANDROID':\n        ctx.client.clientVersion = Constants.CLIENTS.YTMUSIC_ANDROID.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.YTMUSIC_ANDROID.NAME;\n        break;\n      case 'YTSTUDIO_ANDROID':\n        ctx.client.clientVersion = Constants.CLIENTS.YTSTUDIO_ANDROID.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.YTSTUDIO_ANDROID.NAME;\n        break;\n      case 'TV':\n        ctx.client.clientVersion = Constants.CLIENTS.TV.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.TV.NAME;\n        ctx.client.userAgent = Constants.CLIENTS.TV.USER_AGENT;\n        break;\n      case 'TV_SIMPLY':\n        ctx.client.clientVersion = Constants.CLIENTS.TV_SIMPLY.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.TV_SIMPLY.NAME;\n        break;\n      case 'TV_EMBEDDED':\n        ctx.client.clientName = Constants.CLIENTS.TV_EMBEDDED.NAME;\n        ctx.client.clientVersion = Constants.CLIENTS.TV_EMBEDDED.VERSION;\n        ctx.client.clientScreen = 'EMBED';\n        ctx.thirdParty = { embedUrl: Constants.URLS.YT_BASE };\n        break;\n      case 'YTKIDS':\n        ctx.client.clientVersion = Constants.CLIENTS.WEB_KIDS.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.WEB_KIDS.NAME;\n        ctx.client.kidsAppInfo = { // @TODO: Make this configurable.\n          categorySettings: {\n            enabledCategories: [\n              'approved_for_you', 'black_joy', 'camp', 'collections', 'earth', 'explore',\n              'favorites', 'gaming', 'halloween', 'hero', 'learning', 'move', 'music',\n              'reading', 'shared_by_parents', 'shows', 'soccer', 'sports', 'spotlight', 'winter'\n            ]\n          },\n          contentSettings: {\n            corpusPreference: 'KIDS_CORPUS_PREFERENCE_YOUNGER',\n            kidsNoSearchMode: 'YT_KIDS_NO_SEARCH_MODE_OFF'\n          }\n        };\n        break;\n      case 'WEB_EMBEDDED':\n        ctx.client.clientName = Constants.CLIENTS.WEB_EMBEDDED.NAME;\n        ctx.client.clientVersion = Constants.CLIENTS.WEB_EMBEDDED.VERSION;\n        ctx.client.clientScreen = 'EMBED';\n        ctx.thirdParty = { embedUrl: Constants.URLS.GOOGLE_SEARCH_BASE };\n        break;\n      case 'WEB_CREATOR':\n        ctx.client.clientName = Constants.CLIENTS.WEB_CREATOR.NAME;\n        ctx.client.clientVersion = Constants.CLIENTS.WEB_CREATOR.VERSION;\n        break;\n      default:\n        break;\n    }\n  }\n}\n", "/**\n * Compresses a string using the LZW compression algorithm.\n * @param input - The data to compress.\n */\nexport function compress(input: string): string {\n  const output: number[] = [];\n  const dictionary: Record<string, number> = {};\n\n  for (let i = 0; i < 256; i++) {\n    dictionary[String.fromCharCode(i)] = i;\n  }\n\n  let current_string = '';\n  let dictionary_size = 256;\n\n  for (let i = 0; i < input.length; i++) {\n    const current_char = input[i];\n    const combined_string = current_string + current_char;\n\n    if (dictionary.hasOwnProperty(combined_string)) {\n      current_string = combined_string;\n    } else {\n      output.push(dictionary[current_string]);\n      dictionary[combined_string] = dictionary_size++;\n      current_string = current_char;\n    }\n  }\n\n  if (current_string !== '') {\n    output.push(dictionary[current_string]);\n  }\n\n  return output.map((code) => String.fromCharCode(code)).join('');\n}\n\n/**\n * Decompresses data that was compressed using the LZW compression algorithm.\n * @param input - The data to be decompressed.\n */\nexport function decompress(input: string): string {\n  const dictionary: Record<number, string> = {};\n  const input_data = input.split('');\n  const output: string[] = [ input_data.shift() as string ];\n  const input_length = input_data.length >>> 0; // Convert to unsigned 32-bit integer\n\n  let dictionary_code = 256;\n  let current_char = output[0];\n  let current_string = current_char;\n\n  for (let i = 0; i < input_length; ++i) {\n    const current_code = input_data[i].charCodeAt(0);\n    const entry =\n      current_code < 256 ? input_data[i] : (dictionary[current_code] ?\n        dictionary[current_code] : (current_string + current_char));\n\n    output.push(entry);\n\n    current_char = entry.charAt(0);\n    dictionary[dictionary_code++] = current_string + current_char;\n    current_string = entry;\n  }\n\n  return output.join('');\n}", "import { compress, decompress } from './LZW.js';\n\nexport const MAGIC_HEADER = 0x594254; // 'YTB' in hex...\nexport const VERSION = 1;\n\nexport function serialize(data: any): ArrayBuffer {\n  const json_str = JSON.stringify(data);\n  const compressed = compress(json_str);\n  const compressed_bytes = new TextEncoder().encode(compressed);\n\n  const buffer = new ArrayBuffer(12 + compressed_bytes.byteLength);\n  const view = new DataView(buffer);\n\n  view.setUint32(0, MAGIC_HEADER, true);\n  view.setUint32(4, VERSION, true);\n  view.setUint32(8, compressed_bytes.byteLength, true);\n\n  new Uint8Array(buffer).set(compressed_bytes, 12);\n\n  return buffer;\n}\n\nexport function deserialize<T>(buffer: Uint8Array): T {\n  if (buffer.byteLength < 12)\n    throw new Error('Invalid binary format: buffer too short');\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset);\n\n  const magic = view.getUint32(0, true);\n  if (magic !== MAGIC_HEADER) {\n    throw new Error('Invalid binary format: magic header mismatch');\n  }\n\n  const version = view.getUint32(4, true);\n  if (version !== VERSION) {\n    throw new Error(`Unsupported binary format version: ${version}`);\n  }\n\n  const data_length = view.getUint32(8, true);\n  const compressed_data = buffer.slice(12, 12 + data_length);\n\n  const compressed = new TextDecoder().decode(compressed_data);\n  const json_str = decompress(compressed);\n\n  return JSON.parse(json_str);\n}\n", "import { base64ToU8, u8ToBase64 } from './Utils.js';\nimport { NextParams, PeformCommentActionParams, VisitorData } from '../../protos/generated/misc/params.js';\n\nexport type CommentActionParamsArgs = {\n  comment_id?: string,\n  video_id?: string,\n  text?: string,\n  target_language?: string\n}\n\nexport function encodeVisitorData(id: string, timestamp: number): string {\n  const writer = VisitorData.encode({ id, timestamp });\n  return encodeURIComponent(u8ToBase64(writer.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'));\n}\n\nexport function decodeVisitorData(visitor_data: string): VisitorData {\n  return VisitorData.decode(base64ToU8(decodeURIComponent(visitor_data).replace(/-/g, '+').replace(/_/g, '/')));\n}\n\nexport function encodeCommentActionParams(type: number, args: CommentActionParamsArgs = {}): string {\n  const data: PeformCommentActionParams = {\n    type,\n    commentId: args.comment_id || ' ',\n    videoId: args.video_id || ' ',\n    channelId: ' ',\n    unkNum: 2\n  };\n\n  if (args.hasOwnProperty('text')) {\n    if (typeof args.target_language !== 'string')\n      throw new Error('target_language must be a string');\n\n    if (args.comment_id)\n      delete data.unkNum;\n\n    data.translateCommentParams = {\n      params: {\n        comment: {\n          text: args.text as string\n        }\n      },\n      commentId: args.comment_id || ' ',\n      targetLanguage: args.target_language\n    };\n  }\n\n  const writer = PeformCommentActionParams.encode(data);\n  return encodeURIComponent(u8ToBase64(writer.finish()));\n}\n\nexport function encodeNextParams(video_ids: string[], playlist_title?: string): string {\n  const writer = NextParams.encode({ videoId: video_ids, playlistTitle: playlist_title });\n  return encodeURIComponent(u8ToBase64(writer.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'));\n}", "// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it.  This code is not\n// standalone and requires a support library to be linked with it.  This\n// support library is itself covered by the above license.\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nexport function varint64read() {\n    let lowBits = 0;\n    let highBits = 0;\n    for (let shift = 0; shift < 28; shift += 7) {\n        let b = this.buf[this.pos++];\n        lowBits |= (b & 0x7f) << shift;\n        if ((b & 0x80) == 0) {\n            this.assertBounds();\n            return [lowBits, highBits];\n        }\n    }\n    let middleByte = this.buf[this.pos++];\n    // last four bits of the first 32 bit number\n    lowBits |= (middleByte & 0x0f) << 28;\n    // 3 upper bits are part of the next 32 bit number\n    highBits = (middleByte & 0x70) >> 4;\n    if ((middleByte & 0x80) == 0) {\n        this.assertBounds();\n        return [lowBits, highBits];\n    }\n    for (let shift = 3; shift <= 31; shift += 7) {\n        let b = this.buf[this.pos++];\n        highBits |= (b & 0x7f) << shift;\n        if ((b & 0x80) == 0) {\n            this.assertBounds();\n            return [lowBits, highBits];\n        }\n    }\n    throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nexport function varint64write(lo, hi, bytes) {\n    for (let i = 0; i < 28; i = i + 7) {\n        const shift = lo >>> i;\n        const hasNext = !(shift >>> 7 == 0 && hi == 0);\n        const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n        bytes.push(byte);\n        if (!hasNext) {\n            return;\n        }\n    }\n    const splitBits = ((lo >>> 28) & 0x0f) | ((hi & 0x07) << 4);\n    const hasMoreBits = !(hi >> 3 == 0);\n    bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n    if (!hasMoreBits) {\n        return;\n    }\n    for (let i = 3; i < 31; i = i + 7) {\n        const shift = hi >>> i;\n        const hasNext = !(shift >>> 7 == 0);\n        const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n        bytes.push(byte);\n        if (!hasNext) {\n            return;\n        }\n    }\n    bytes.push((hi >>> 31) & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64FromString(dec) {\n    // Check for minus sign.\n    const minus = dec[0] === \"-\";\n    if (minus) {\n        dec = dec.slice(1);\n    }\n    // Work 6 decimal digits at a time, acting like we're converting base 1e6\n    // digits to binary. This is safe to do with floating point math because\n    // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n    const base = 1e6;\n    let lowBits = 0;\n    let highBits = 0;\n    function add1e6digit(begin, end) {\n        // Note: Number('') is 0.\n        const digit1e6 = Number(dec.slice(begin, end));\n        highBits *= base;\n        lowBits = lowBits * base + digit1e6;\n        // Carry bits from lowBits to\n        if (lowBits >= TWO_PWR_32_DBL) {\n            highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);\n            lowBits = lowBits % TWO_PWR_32_DBL;\n        }\n    }\n    add1e6digit(-24, -18);\n    add1e6digit(-18, -12);\n    add1e6digit(-12, -6);\n    add1e6digit(-6);\n    return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64ToString(lo, hi) {\n    let bits = newBits(lo, hi);\n    // If we're treating the input as a signed value and the high bit is set, do\n    // a manual two's complement conversion before the decimal conversion.\n    const negative = bits.hi & 0x80000000;\n    if (negative) {\n        bits = negate(bits.lo, bits.hi);\n    }\n    const result = uInt64ToString(bits.lo, bits.hi);\n    return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function uInt64ToString(lo, hi) {\n    ({ lo, hi } = toUnsigned(lo, hi));\n    // Skip the expensive conversion if the number is small enough to use the\n    // built-in conversions.\n    // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n    // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n    // integer precision.\n    // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n    if (hi <= 0x1fffff) {\n        return String(TWO_PWR_32_DBL * hi + lo);\n    }\n    // What this code is doing is essentially converting the input number from\n    // base-2 to base-1e7, which allows us to represent the 64-bit range with\n    // only 3 (very large) digits. Those digits are then trivial to convert to\n    // a base-10 string.\n    // The magic numbers used here are -\n    // 2^24 = 16777216 = (1,6777216) in base-1e7.\n    // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n    // Split 32:32 representation into 16:24:24 representation so our\n    // intermediate digits don't overflow.\n    const low = lo & 0xffffff;\n    const mid = ((lo >>> 24) | (hi << 8)) & 0xffffff;\n    const high = (hi >> 16) & 0xffff;\n    // Assemble our three base-1e7 digits, ignoring carries. The maximum\n    // value in a digit at this step is representable as a 48-bit integer, which\n    // can be stored in a 64-bit floating point number.\n    let digitA = low + mid * 6777216 + high * 6710656;\n    let digitB = mid + high * 8147497;\n    let digitC = high * 2;\n    // Apply carries from A to B and from B to C.\n    const base = 10000000;\n    if (digitA >= base) {\n        digitB += Math.floor(digitA / base);\n        digitA %= base;\n    }\n    if (digitB >= base) {\n        digitC += Math.floor(digitB / base);\n        digitB %= base;\n    }\n    // If digitC is 0, then we should have returned in the trivial code path\n    // at the top for non-safe integers. Given this, we can assume both digitB\n    // and digitA need leading zeros.\n    return (digitC.toString() +\n        decimalFrom1e7WithLeadingZeros(digitB) +\n        decimalFrom1e7WithLeadingZeros(digitA));\n}\nfunction toUnsigned(lo, hi) {\n    return { lo: lo >>> 0, hi: hi >>> 0 };\n}\nfunction newBits(lo, hi) {\n    return { lo: lo | 0, hi: hi | 0 };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n    highBits = ~highBits;\n    if (lowBits) {\n        lowBits = ~lowBits + 1;\n    }\n    else {\n        // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n        // adding 1 to that, results in 0x100000000, which leaves\n        // the low bits 0x0 and simply adds one to the high bits.\n        highBits += 1;\n    }\n    return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = (digit1e7) => {\n    const partial = String(digit1e7);\n    return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nexport function varint32write(value, bytes) {\n    if (value >= 0) {\n        // write value as varint 32\n        while (value > 0x7f) {\n            bytes.push((value & 0x7f) | 0x80);\n            value = value >>> 7;\n        }\n        bytes.push(value);\n    }\n    else {\n        for (let i = 0; i < 9; i++) {\n            bytes.push((value & 127) | 128);\n            value = value >> 7;\n        }\n        bytes.push(1);\n    }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nexport function varint32read() {\n    let b = this.buf[this.pos++];\n    let result = b & 0x7f;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7f) << 7;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7f) << 14;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7f) << 21;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    // Extract only last 4 bits\n    b = this.buf[this.pos++];\n    result |= (b & 0x0f) << 28;\n    for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++)\n        b = this.buf[this.pos++];\n    if ((b & 0x80) != 0)\n        throw new Error(\"invalid varint\");\n    this.assertBounds();\n    // Result can have 32 bits, convert it to unsigned\n    return result >>> 0;\n}\n", "// Copyright 2021-2026 Buf Technologies, Inc.\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.\nimport { int64FromString, int64ToString, uInt64ToString, } from \"./wire/varint.js\";\n/**\n * Int64Support for the current environment.\n */\nexport const protoInt64 = /*@__PURE__*/ makeInt64Support();\nfunction makeInt64Support() {\n    const dv = new DataView(new ArrayBuffer(8));\n    // note that Safari 14 implements BigInt, but not the DataView methods\n    const ok = typeof BigInt === \"function\" &&\n        typeof dv.getBigInt64 === \"function\" &&\n        typeof dv.getBigUint64 === \"function\" &&\n        typeof dv.setBigInt64 === \"function\" &&\n        typeof dv.setBigUint64 === \"function\" &&\n        (!!globalThis.Deno ||\n            typeof process != \"object\" ||\n            typeof process.env != \"object\" ||\n            process.env.BUF_BIGINT_DISABLE !== \"1\");\n    if (ok) {\n        const MIN = BigInt(\"-9223372036854775808\");\n        const MAX = BigInt(\"9223372036854775807\");\n        const UMIN = BigInt(\"0\");\n        const UMAX = BigInt(\"18446744073709551615\");\n        return {\n            zero: BigInt(0),\n            supported: true,\n            parse(value) {\n                const bi = typeof value == \"bigint\" ? value : BigInt(value);\n                if (bi > MAX || bi < MIN) {\n                    throw new Error(`invalid int64: ${value}`);\n                }\n                return bi;\n            },\n            uParse(value) {\n                const bi = typeof value == \"bigint\" ? value : BigInt(value);\n                if (bi > UMAX || bi < UMIN) {\n                    throw new Error(`invalid uint64: ${value}`);\n                }\n                return bi;\n            },\n            enc(value) {\n                dv.setBigInt64(0, this.parse(value), true);\n                return {\n                    lo: dv.getInt32(0, true),\n                    hi: dv.getInt32(4, true),\n                };\n            },\n            uEnc(value) {\n                dv.setBigInt64(0, this.uParse(value), true);\n                return {\n                    lo: dv.getInt32(0, true),\n                    hi: dv.getInt32(4, true),\n                };\n            },\n            dec(lo, hi) {\n                dv.setInt32(0, lo, true);\n                dv.setInt32(4, hi, true);\n                return dv.getBigInt64(0, true);\n            },\n            uDec(lo, hi) {\n                dv.setInt32(0, lo, true);\n                dv.setInt32(4, hi, true);\n                return dv.getBigUint64(0, true);\n            },\n        };\n    }\n    return {\n        zero: \"0\",\n        supported: false,\n        parse(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertInt64String(value);\n            return value;\n        },\n        uParse(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertUInt64String(value);\n            return value;\n        },\n        enc(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertInt64String(value);\n            return int64FromString(value);\n        },\n        uEnc(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertUInt64String(value);\n            return int64FromString(value);\n        },\n        dec(lo, hi) {\n            return int64ToString(lo, hi);\n        },\n        uDec(lo, hi) {\n            return uInt64ToString(lo, hi);\n        },\n    };\n}\nfunction assertInt64String(value) {\n    if (!/^-?[0-9]+$/.test(value)) {\n        throw new Error(\"invalid int64: \" + value);\n    }\n}\nfunction assertUInt64String(value) {\n    if (!/^[0-9]+$/.test(value)) {\n        throw new Error(\"invalid uint64: \" + value);\n    }\n}\n", "// Copyright 2021-2026 Buf Technologies, Inc.\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.\nconst symbol = Symbol.for(\"@bufbuild/protobuf/text-encoding\");\n/**\n * Protobuf-ES requires the Text Encoding API to convert UTF-8 from and to\n * binary. This WHATWG API is widely available, but it is not part of the\n * ECMAScript standard. On runtimes where it is not available, use this\n * function to provide your own implementation.\n *\n * Note that the Text Encoding API does not provide a way to validate UTF-8.\n * Our implementation falls back to use encodeURIComponent().\n */\nexport function configureTextEncoding(textEncoding) {\n    globalThis[symbol] = textEncoding;\n}\nexport function getTextEncoding() {\n    if (globalThis[symbol] == undefined) {\n        const te = new globalThis.TextEncoder();\n        const td = new globalThis.TextDecoder();\n        globalThis[symbol] = {\n            encodeUtf8(text) {\n                return te.encode(text);\n            },\n            decodeUtf8(bytes) {\n                return td.decode(bytes);\n            },\n            checkUtf8(text) {\n                try {\n                    encodeURIComponent(text);\n                    return true;\n                }\n                catch (_) {\n                    return false;\n                }\n            },\n        };\n    }\n    return globalThis[symbol];\n}\n", "// Copyright 2021-2026 Buf Technologies, Inc.\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.\nimport { varint32read, varint32write, varint64read, varint64write, } from \"./varint.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\nimport { getTextEncoding } from \"./text-encoding.js\";\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nexport var WireType;\n(function (WireType) {\n    /**\n     * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n     */\n    WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n    /**\n     * Used for fixed64, sfixed64, double.\n     * Always 8 bytes with little-endian byte order.\n     */\n    WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n    /**\n     * Used for string, bytes, embedded messages, packed repeated fields\n     *\n     * Only repeated numeric types (types which use the varint, 32-bit,\n     * or 64-bit wire types) can be packed. In proto3, such fields are\n     * packed by default.\n     */\n    WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n    /**\n     * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n     * in editions with message_encoding = DELIMITED.\n     */\n    WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n    /**\n     * End of a tag-delimited aggregate.\n     */\n    WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n    /**\n     * Used for fixed32, sfixed32, float.\n     * Always 4 bytes with little-endian byte order.\n     */\n    WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\n/**\n * Maximum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MAX = 3.4028234663852886e38;\n/**\n * Minimum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MIN = -3.4028234663852886e38;\n/**\n * Maximum value for an unsigned 32-bit integer (Protobuf UINT32, FIXED32).\n */\nexport const UINT32_MAX = 0xffffffff;\n/**\n * Maximum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MAX = 0x7fffffff;\n/**\n * Minimum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MIN = -0x80000000;\nexport class BinaryWriter {\n    constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {\n        this.encodeUtf8 = encodeUtf8;\n        /**\n         * Previous fork states.\n         */\n        this.stack = [];\n        this.chunks = [];\n        this.buf = [];\n    }\n    /**\n     * Return all bytes written and reset this writer.\n     */\n    finish() {\n        if (this.buf.length) {\n            this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n            this.buf = [];\n        }\n        let len = 0;\n        for (let i = 0; i < this.chunks.length; i++)\n            len += this.chunks[i].length;\n        let bytes = new Uint8Array(len);\n        let offset = 0;\n        for (let i = 0; i < this.chunks.length; i++) {\n            bytes.set(this.chunks[i], offset);\n            offset += this.chunks[i].length;\n        }\n        this.chunks = [];\n        return bytes;\n    }\n    /**\n     * Start a new fork for length-delimited data like a message\n     * or a packed repeated field.\n     *\n     * Must be joined later with `join()`.\n     */\n    fork() {\n        this.stack.push({ chunks: this.chunks, buf: this.buf });\n        this.chunks = [];\n        this.buf = [];\n        return this;\n    }\n    /**\n     * Join the last fork. Write its length and bytes, then\n     * return to the previous state.\n     */\n    join() {\n        // get chunk of fork\n        let chunk = this.finish();\n        // restore previous state\n        let prev = this.stack.pop();\n        if (!prev)\n            throw new Error(\"invalid state, fork stack empty\");\n        this.chunks = prev.chunks;\n        this.buf = prev.buf;\n        // write length of chunk as varint\n        this.uint32(chunk.byteLength);\n        return this.raw(chunk);\n    }\n    /**\n     * Writes a tag (field number and wire type).\n     *\n     * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n     *\n     * Generated code should compute the tag ahead of time and call `uint32()`.\n     */\n    tag(fieldNo, type) {\n        return this.uint32(((fieldNo << 3) | type) >>> 0);\n    }\n    /**\n     * Write a chunk of raw bytes.\n     */\n    raw(chunk) {\n        if (this.buf.length) {\n            this.chunks.push(new Uint8Array(this.buf));\n            this.buf = [];\n        }\n        this.chunks.push(chunk);\n        return this;\n    }\n    /**\n     * Write a `uint32` value, an unsigned 32 bit varint.\n     */\n    uint32(value) {\n        assertUInt32(value);\n        // write value as varint 32, inlined for speed\n        while (value > 0x7f) {\n            this.buf.push((value & 0x7f) | 0x80);\n            value = value >>> 7;\n        }\n        this.buf.push(value);\n        return this;\n    }\n    /**\n     * Write a `int32` value, a signed 32 bit varint.\n     */\n    int32(value) {\n        assertInt32(value);\n        varint32write(value, this.buf);\n        return this;\n    }\n    /**\n     * Write a `bool` value, a variant.\n     */\n    bool(value) {\n        this.buf.push(value ? 1 : 0);\n        return this;\n    }\n    /**\n     * Write a `bytes` value, length-delimited arbitrary data.\n     */\n    bytes(value) {\n        this.uint32(value.byteLength); // write length of chunk as varint\n        return this.raw(value);\n    }\n    /**\n     * Write a `string` value, length-delimited data converted to UTF-8 text.\n     */\n    string(value) {\n        let chunk = this.encodeUtf8(value);\n        this.uint32(chunk.byteLength); // write length of chunk as varint\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `float` value, 32-bit floating point number.\n     */\n    float(value) {\n        assertFloat32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setFloat32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `double` value, a 64-bit floating point number.\n     */\n    double(value) {\n        let chunk = new Uint8Array(8);\n        new DataView(chunk.buffer).setFloat64(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n     */\n    fixed32(value) {\n        assertUInt32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setUint32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n     */\n    sfixed32(value) {\n        assertInt32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setInt32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n     */\n    sint32(value) {\n        assertInt32(value);\n        // zigzag encode\n        value = ((value << 1) ^ (value >> 31)) >>> 0;\n        varint32write(value, this.buf);\n        return this;\n    }\n    /**\n     * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n     */\n    sfixed64(value) {\n        let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);\n        view.setInt32(0, tc.lo, true);\n        view.setInt32(4, tc.hi, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n     */\n    fixed64(value) {\n        let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);\n        view.setInt32(0, tc.lo, true);\n        view.setInt32(4, tc.hi, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `int64` value, a signed 64-bit varint.\n     */\n    int64(value) {\n        let tc = protoInt64.enc(value);\n        varint64write(tc.lo, tc.hi, this.buf);\n        return this;\n    }\n    /**\n     * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n     */\n    sint64(value) {\n        const tc = protoInt64.enc(value), \n        // zigzag encode\n        sign = tc.hi >> 31, lo = (tc.lo << 1) ^ sign, hi = ((tc.hi << 1) | (tc.lo >>> 31)) ^ sign;\n        varint64write(lo, hi, this.buf);\n        return this;\n    }\n    /**\n     * Write a `uint64` value, an unsigned 64-bit varint.\n     */\n    uint64(value) {\n        const tc = protoInt64.uEnc(value);\n        varint64write(tc.lo, tc.hi, this.buf);\n        return this;\n    }\n}\nexport class BinaryReader {\n    constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {\n        this.decodeUtf8 = decodeUtf8;\n        this.varint64 = varint64read; // dirty cast for `this`\n        /**\n         * Read a `uint32` field, an unsigned 32 bit varint.\n         */\n        this.uint32 = varint32read;\n        this.buf = buf;\n        this.len = buf.length;\n        this.pos = 0;\n        this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n    }\n    /**\n     * Reads a tag - field number and wire type.\n     */\n    tag() {\n        let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;\n        if (fieldNo <= 0 || wireType < 0 || wireType > 5)\n            throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n        return [fieldNo, wireType];\n    }\n    /**\n     * Skip one element and return the skipped data.\n     *\n     * When skipping StartGroup, provide the tags field number to check for\n     * matching field number in the EndGroup tag.\n     */\n    skip(wireType, fieldNo) {\n        let start = this.pos;\n        switch (wireType) {\n            case WireType.Varint:\n                while (this.buf[this.pos++] & 0x80) {\n                    // ignore\n                }\n                break;\n            // @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true\n            case WireType.Bit64:\n                this.pos += 4;\n            case WireType.Bit32:\n                this.pos += 4;\n                break;\n            case WireType.LengthDelimited:\n                let len = this.uint32();\n                this.pos += len;\n                break;\n            case WireType.StartGroup:\n                for (;;) {\n                    const [fn, wt] = this.tag();\n                    if (wt === WireType.EndGroup) {\n                        if (fieldNo !== undefined && fn !== fieldNo) {\n                            throw new Error(\"invalid end group tag\");\n                        }\n                        break;\n                    }\n                    this.skip(wt, fn);\n                }\n                break;\n            default:\n                throw new Error(\"cant skip wire type \" + wireType);\n        }\n        this.assertBounds();\n        return this.buf.subarray(start, this.pos);\n    }\n    /**\n     * Throws error if position in byte array is out of range.\n     */\n    assertBounds() {\n        if (this.pos > this.len)\n            throw new RangeError(\"premature EOF\");\n    }\n    /**\n     * Read a `int32` field, a signed 32 bit varint.\n     */\n    int32() {\n        return this.uint32() | 0;\n    }\n    /**\n     * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n     */\n    sint32() {\n        let zze = this.uint32();\n        // decode zigzag\n        return (zze >>> 1) ^ -(zze & 1);\n    }\n    /**\n     * Read a `int64` field, a signed 64-bit varint.\n     */\n    int64() {\n        return protoInt64.dec(...this.varint64());\n    }\n    /**\n     * Read a `uint64` field, an unsigned 64-bit varint.\n     */\n    uint64() {\n        return protoInt64.uDec(...this.varint64());\n    }\n    /**\n     * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n     */\n    sint64() {\n        let [lo, hi] = this.varint64();\n        // decode zig zag\n        let s = -(lo & 1);\n        lo = ((lo >>> 1) | ((hi & 1) << 31)) ^ s;\n        hi = (hi >>> 1) ^ s;\n        return protoInt64.dec(lo, hi);\n    }\n    /**\n     * Read a `bool` field, a variant.\n     */\n    bool() {\n        let [lo, hi] = this.varint64();\n        return lo !== 0 || hi !== 0;\n    }\n    /**\n     * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n     */\n    fixed32() {\n        // biome-ignore lint/suspicious/noAssignInExpressions: no\n        return this.view.getUint32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n     */\n    sfixed32() {\n        // biome-ignore lint/suspicious/noAssignInExpressions: no\n        return this.view.getInt32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n     */\n    fixed64() {\n        return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n    }\n    /**\n     * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n     */\n    sfixed64() {\n        return protoInt64.dec(this.sfixed32(), this.sfixed32());\n    }\n    /**\n     * Read a `float` field, 32-bit floating point number.\n     */\n    float() {\n        // biome-ignore lint/suspicious/noAssignInExpressions: no\n        return this.view.getFloat32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `double` field, a 64-bit floating point number.\n     */\n    double() {\n        // biome-ignore lint/suspicious/noAssignInExpressions: no\n        return this.view.getFloat64((this.pos += 8) - 8, true);\n    }\n    /**\n     * Read a `bytes` field, length-delimited arbitrary data.\n     */\n    bytes() {\n        let len = this.uint32(), start = this.pos;\n        this.pos += len;\n        this.assertBounds();\n        return this.buf.subarray(start, start + len);\n    }\n    /**\n     * Read a `string` field, length-delimited data converted to UTF-8 text.\n     */\n    string() {\n        return this.decodeUtf8(this.bytes());\n    }\n}\n/**\n * Assert a valid signed protobuf 32-bit integer as a number or string.\n */\nfunction assertInt32(arg) {\n    if (typeof arg == \"string\") {\n        arg = Number(arg);\n    }\n    else if (typeof arg != \"number\") {\n        throw new Error(\"invalid int32: \" + typeof arg);\n    }\n    if (!Number.isInteger(arg) ||\n        arg > INT32_MAX ||\n        arg < INT32_MIN)\n        throw new Error(\"invalid int32: \" + arg);\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer as a number or string.\n */\nfunction assertUInt32(arg) {\n    if (typeof arg == \"string\") {\n        arg = Number(arg);\n    }\n    else if (typeof arg != \"number\") {\n        throw new Error(\"invalid uint32: \" + typeof arg);\n    }\n    if (!Number.isInteger(arg) ||\n        arg > UINT32_MAX ||\n        arg < 0)\n        throw new Error(\"invalid uint32: \" + arg);\n}\n/**\n * Assert a valid protobuf float value as a number or string.\n */\nfunction assertFloat32(arg) {\n    if (typeof arg == \"string\") {\n        const o = arg;\n        arg = Number(arg);\n        if (Number.isNaN(arg) && o !== \"NaN\") {\n            throw new Error(\"invalid float32: \" + o);\n        }\n    }\n    else if (typeof arg != \"number\") {\n        throw new Error(\"invalid float32: \" + typeof arg);\n    }\n    if (Number.isFinite(arg) &&\n        (arg > FLOAT32_MAX || arg < FLOAT32_MIN))\n        throw new Error(\"invalid float32: \" + arg);\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: misc/params.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"misc\";\n\nexport interface VisitorData {\n  id: string;\n  timestamp: number;\n}\n\nexport interface SearchFilter {\n  prioritize?: SearchFilter_Prioritize | undefined;\n  filters?: SearchFilter_Filters | undefined;\n}\n\nexport enum SearchFilter_Prioritize {\n  RELEVANCE = 0,\n  POPULARITY = 3,\n  UNRECOGNIZED = -1,\n}\n\nexport interface SearchFilter_Filters {\n  uploadDate?: SearchFilter_Filters_UploadDate | undefined;\n  type?: SearchFilter_Filters_SearchType | undefined;\n  duration?: SearchFilter_Filters_Duration | undefined;\n  musicSearchType?: SearchFilter_Filters_MusicSearchType | undefined;\n  featuresHd?: boolean | undefined;\n  featuresSubtitles?: boolean | undefined;\n  featuresCreativeCommons?: boolean | undefined;\n  features3d?: boolean | undefined;\n  featuresLive?: boolean | undefined;\n  featuresPurchased?: boolean | undefined;\n  features4k?: boolean | undefined;\n  features360?: boolean | undefined;\n  featuresLocation?: boolean | undefined;\n  featuresHdr?: boolean | undefined;\n  featuresVr180?: boolean | undefined;\n}\n\nexport enum SearchFilter_Filters_UploadDate {\n  ANY_DATE = 0,\n  TODAY = 2,\n  WEEK = 3,\n  MONTH = 4,\n  YEAR = 5,\n  UNRECOGNIZED = -1,\n}\n\nexport enum SearchFilter_Filters_SearchType {\n  ANY_TYPE = 0,\n  VIDEO = 1,\n  CHANNEL = 2,\n  PLAYLIST = 3,\n  MOVIE = 4,\n  SHORTS = 9,\n  UNRECOGNIZED = -1,\n}\n\nexport enum SearchFilter_Filters_Duration {\n  ANY_DURATION = 0,\n  OVER_TWENTY_MINS = 2,\n  UNDER_THREE_MINS = 4,\n  THREE_TO_TWENTY_MINS = 5,\n  UNRECOGNIZED = -1,\n}\n\nexport interface SearchFilter_Filters_MusicSearchType {\n  song?: boolean | undefined;\n  video?: boolean | undefined;\n  album?: boolean | undefined;\n  artist?: boolean | undefined;\n  playlist?: boolean | undefined;\n}\n\nexport interface ChannelAnalytics {\n  params: ChannelAnalytics_Params | undefined;\n}\n\nexport interface ChannelAnalytics_Params {\n  channelId: string;\n}\n\nexport interface SoundInfoParams {\n  sound: SoundInfoParams_Sound | undefined;\n}\n\nexport interface SoundInfoParams_Sound {\n  params: SoundInfoParams_Sound_Params | undefined;\n}\n\nexport interface SoundInfoParams_Sound_Params {\n  ids: SoundInfoParams_Sound_Params_Ids | undefined;\n}\n\nexport interface SoundInfoParams_Sound_Params_Ids {\n  id1: string;\n  id2: string;\n  id3: string;\n}\n\nexport interface NotificationPreferences {\n  channelId: string;\n  prefId: NotificationPreferences_Preference | undefined;\n  number0?: number | undefined;\n  number1?: number | undefined;\n}\n\nexport interface NotificationPreferences_Preference {\n  index: number;\n}\n\nexport interface LiveMessageParams {\n  params: LiveMessageParams_Params | undefined;\n  number0?: number | undefined;\n  number1?: number | undefined;\n}\n\nexport interface LiveMessageParams_Params {\n  ids: LiveMessageParams_Params_Ids | undefined;\n}\n\nexport interface LiveMessageParams_Params_Ids {\n  channelId: string;\n  videoId: string;\n}\n\nexport interface GetCommentsSectionParams {\n  ctx: GetCommentsSectionParams_Context | undefined;\n  unkParam: number;\n  params: GetCommentsSectionParams_Params | undefined;\n}\n\nexport interface GetCommentsSectionParams_Context {\n  videoId: string;\n}\n\nexport interface GetCommentsSectionParams_Params {\n  unkToken?: string | undefined;\n  opts?: GetCommentsSectionParams_Params_Options | undefined;\n  repliesOpts?: GetCommentsSectionParams_Params_RepliesOptions | undefined;\n  page?: number | undefined;\n  target: string;\n}\n\nexport interface GetCommentsSectionParams_Params_Options {\n  videoId: string;\n  sortBy: number;\n  type: number;\n  commentId?: string | undefined;\n}\n\nexport interface GetCommentsSectionParams_Params_RepliesOptions {\n  commentId: string;\n  unkopts: GetCommentsSectionParams_Params_RepliesOptions_UnkOpts | undefined;\n  channelId?: string | undefined;\n  videoId: string;\n  unkParam1: number;\n  unkParam2: number;\n}\n\nexport interface GetCommentsSectionParams_Params_RepliesOptions_UnkOpts {\n  unkParam: number;\n}\n\nexport interface CreateCommentParams {\n  videoId: string;\n  params: CreateCommentParams_Params | undefined;\n  number: number;\n}\n\nexport interface CreateCommentParams_Params {\n  index: number;\n}\n\nexport interface PeformCommentActionParams {\n  type: number;\n  commentId: string;\n  videoId: string;\n  unkNum?: number | undefined;\n  channelId?: string | undefined;\n  translateCommentParams?: PeformCommentActionParams_TranslateCommentParams | undefined;\n}\n\nexport interface PeformCommentActionParams_TranslateCommentParams {\n  params: PeformCommentActionParams_TranslateCommentParams_Params | undefined;\n  commentId: string;\n  targetLanguage: string;\n}\n\nexport interface PeformCommentActionParams_TranslateCommentParams_Params {\n  comment: PeformCommentActionParams_TranslateCommentParams_Params_Comment | undefined;\n}\n\nexport interface PeformCommentActionParams_TranslateCommentParams_Params_Comment {\n  text: string;\n}\n\nexport interface Hashtag {\n  params: Hashtag_Params | undefined;\n}\n\nexport interface Hashtag_Params {\n  hashtag: string;\n  type: number;\n}\n\nexport interface ReelSequence {\n  shortId: string;\n  params: ReelSequence_Params | undefined;\n  feature2: number;\n  feature3: number;\n}\n\nexport interface ReelSequence_Params {\n  number: number;\n}\n\nexport interface ShortsParam {\n  f1?: ShortsParam_Field1 | undefined;\n  p59?: number | undefined;\n}\n\nexport interface ShortsParam_Field1 {\n  p1?: number | undefined;\n}\n\nexport interface NextParams {\n  videoId: string[];\n  playlistTitle?: string | undefined;\n}\n\nexport interface CommunityPostParams {\n  f1: CommunityPostParams_Field1 | undefined;\n}\n\nexport interface CommunityPostParams_Field1 {\n  ucid1: string;\n  postId: string;\n  ucid2: string;\n}\n\nexport interface CommunityPostCommentsParamContainer {\n  f0: CommunityPostCommentsParamContainer_Container | undefined;\n}\n\nexport interface CommunityPostCommentsParamContainer_Container {\n  location: string;\n  protoData: string;\n}\n\nexport interface CommunityPostCommentsParam {\n  title: string;\n  commentDataContainer: CommunityPostCommentsParam_CommentDataContainer | undefined;\n}\n\nexport interface CommunityPostCommentsParam_CommentDataContainer {\n  commentData: CommunityPostCommentsParam_CommentDataContainer_CommentData | undefined;\n  f0: number;\n  title: string;\n}\n\nexport interface CommunityPostCommentsParam_CommentDataContainer_CommentData {\n  sortBy: number;\n  f0: number;\n  f1: number;\n  postId: string;\n  channelId: string;\n}\n\nfunction createBaseVisitorData(): VisitorData {\n  return { id: \"\", timestamp: 0 };\n}\n\nexport const VisitorData: MessageFns<VisitorData> = {\n  encode(message: VisitorData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.id !== \"\") {\n      writer.uint32(10).string(message.id);\n    }\n    if (message.timestamp !== 0) {\n      writer.uint32(40).int32(message.timestamp);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): VisitorData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseVisitorData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.id = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.timestamp = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSearchFilter(): SearchFilter {\n  return { prioritize: undefined, filters: undefined };\n}\n\nexport const SearchFilter: MessageFns<SearchFilter> = {\n  encode(message: SearchFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.prioritize !== undefined) {\n      writer.uint32(8).int32(message.prioritize);\n    }\n    if (message.filters !== undefined) {\n      SearchFilter_Filters.encode(message.filters, writer.uint32(18).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SearchFilter {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSearchFilter();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.prioritize = reader.int32() as any;\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.filters = SearchFilter_Filters.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSearchFilter_Filters(): SearchFilter_Filters {\n  return {\n    uploadDate: undefined,\n    type: undefined,\n    duration: undefined,\n    musicSearchType: undefined,\n    featuresHd: undefined,\n    featuresSubtitles: undefined,\n    featuresCreativeCommons: undefined,\n    features3d: undefined,\n    featuresLive: undefined,\n    featuresPurchased: undefined,\n    features4k: undefined,\n    features360: undefined,\n    featuresLocation: undefined,\n    featuresHdr: undefined,\n    featuresVr180: undefined,\n  };\n}\n\nexport const SearchFilter_Filters: MessageFns<SearchFilter_Filters> = {\n  encode(message: SearchFilter_Filters, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.uploadDate !== undefined) {\n      writer.uint32(8).int32(message.uploadDate);\n    }\n    if (message.type !== undefined) {\n      writer.uint32(16).int32(message.type);\n    }\n    if (message.duration !== undefined) {\n      writer.uint32(24).int32(message.duration);\n    }\n    if (message.musicSearchType !== undefined) {\n      SearchFilter_Filters_MusicSearchType.encode(message.musicSearchType, writer.uint32(138).fork()).join();\n    }\n    if (message.featuresHd !== undefined) {\n      writer.uint32(32).bool(message.featuresHd);\n    }\n    if (message.featuresSubtitles !== undefined) {\n      writer.uint32(40).bool(message.featuresSubtitles);\n    }\n    if (message.featuresCreativeCommons !== undefined) {\n      writer.uint32(48).bool(message.featuresCreativeCommons);\n    }\n    if (message.features3d !== undefined) {\n      writer.uint32(56).bool(message.features3d);\n    }\n    if (message.featuresLive !== undefined) {\n      writer.uint32(64).bool(message.featuresLive);\n    }\n    if (message.featuresPurchased !== undefined) {\n      writer.uint32(72).bool(message.featuresPurchased);\n    }\n    if (message.features4k !== undefined) {\n      writer.uint32(112).bool(message.features4k);\n    }\n    if (message.features360 !== undefined) {\n      writer.uint32(120).bool(message.features360);\n    }\n    if (message.featuresLocation !== undefined) {\n      writer.uint32(184).bool(message.featuresLocation);\n    }\n    if (message.featuresHdr !== undefined) {\n      writer.uint32(200).bool(message.featuresHdr);\n    }\n    if (message.featuresVr180 !== undefined) {\n      writer.uint32(208).bool(message.featuresVr180);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SearchFilter_Filters {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSearchFilter_Filters();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.uploadDate = reader.int32() as any;\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.type = reader.int32() as any;\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.duration = reader.int32() as any;\n          continue;\n        }\n        case 17: {\n          if (tag !== 138) {\n            break;\n          }\n\n          message.musicSearchType = SearchFilter_Filters_MusicSearchType.decode(reader, reader.uint32());\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.featuresHd = reader.bool();\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.featuresSubtitles = reader.bool();\n          continue;\n        }\n        case 6: {\n          if (tag !== 48) {\n            break;\n          }\n\n          message.featuresCreativeCommons = reader.bool();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.features3d = reader.bool();\n          continue;\n        }\n        case 8: {\n          if (tag !== 64) {\n            break;\n          }\n\n          message.featuresLive = reader.bool();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.featuresPurchased = reader.bool();\n          continue;\n        }\n        case 14: {\n          if (tag !== 112) {\n            break;\n          }\n\n          message.features4k = reader.bool();\n          continue;\n        }\n        case 15: {\n          if (tag !== 120) {\n            break;\n          }\n\n          message.features360 = reader.bool();\n          continue;\n        }\n        case 23: {\n          if (tag !== 184) {\n            break;\n          }\n\n          message.featuresLocation = reader.bool();\n          continue;\n        }\n        case 25: {\n          if (tag !== 200) {\n            break;\n          }\n\n          message.featuresHdr = reader.bool();\n          continue;\n        }\n        case 26: {\n          if (tag !== 208) {\n            break;\n          }\n\n          message.featuresVr180 = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSearchFilter_Filters_MusicSearchType(): SearchFilter_Filters_MusicSearchType {\n  return { song: undefined, video: undefined, album: undefined, artist: undefined, playlist: undefined };\n}\n\nexport const SearchFilter_Filters_MusicSearchType: MessageFns<SearchFilter_Filters_MusicSearchType> = {\n  encode(message: SearchFilter_Filters_MusicSearchType, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.song !== undefined) {\n      writer.uint32(8).bool(message.song);\n    }\n    if (message.video !== undefined) {\n      writer.uint32(16).bool(message.video);\n    }\n    if (message.album !== undefined) {\n      writer.uint32(24).bool(message.album);\n    }\n    if (message.artist !== undefined) {\n      writer.uint32(32).bool(message.artist);\n    }\n    if (message.playlist !== undefined) {\n      writer.uint32(40).bool(message.playlist);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SearchFilter_Filters_MusicSearchType {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSearchFilter_Filters_MusicSearchType();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.song = reader.bool();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.video = reader.bool();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.album = reader.bool();\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.artist = reader.bool();\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.playlist = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseChannelAnalytics(): ChannelAnalytics {\n  return { params: undefined };\n}\n\nexport const ChannelAnalytics: MessageFns<ChannelAnalytics> = {\n  encode(message: ChannelAnalytics, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      ChannelAnalytics_Params.encode(message.params, writer.uint32(258).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ChannelAnalytics {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseChannelAnalytics();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 32: {\n          if (tag !== 258) {\n            break;\n          }\n\n          message.params = ChannelAnalytics_Params.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseChannelAnalytics_Params(): ChannelAnalytics_Params {\n  return { channelId: \"\" };\n}\n\nexport const ChannelAnalytics_Params: MessageFns<ChannelAnalytics_Params> = {\n  encode(message: ChannelAnalytics_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.channelId !== \"\") {\n      writer.uint32(8010).string(message.channelId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ChannelAnalytics_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseChannelAnalytics_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1001: {\n          if (tag !== 8010) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams(): SoundInfoParams {\n  return { sound: undefined };\n}\n\nexport const SoundInfoParams: MessageFns<SoundInfoParams> = {\n  encode(message: SoundInfoParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.sound !== undefined) {\n      SoundInfoParams_Sound.encode(message.sound, writer.uint32(754).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 94: {\n          if (tag !== 754) {\n            break;\n          }\n\n          message.sound = SoundInfoParams_Sound.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams_Sound(): SoundInfoParams_Sound {\n  return { params: undefined };\n}\n\nexport const SoundInfoParams_Sound: MessageFns<SoundInfoParams_Sound> = {\n  encode(message: SoundInfoParams_Sound, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      SoundInfoParams_Sound_Params.encode(message.params, writer.uint32(10).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams_Sound {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams_Sound();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params = SoundInfoParams_Sound_Params.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams_Sound_Params(): SoundInfoParams_Sound_Params {\n  return { ids: undefined };\n}\n\nexport const SoundInfoParams_Sound_Params: MessageFns<SoundInfoParams_Sound_Params> = {\n  encode(message: SoundInfoParams_Sound_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ids !== undefined) {\n      SoundInfoParams_Sound_Params_Ids.encode(message.ids, writer.uint32(18).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams_Sound_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams_Sound_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ids = SoundInfoParams_Sound_Params_Ids.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams_Sound_Params_Ids(): SoundInfoParams_Sound_Params_Ids {\n  return { id1: \"\", id2: \"\", id3: \"\" };\n}\n\nexport const SoundInfoParams_Sound_Params_Ids: MessageFns<SoundInfoParams_Sound_Params_Ids> = {\n  encode(message: SoundInfoParams_Sound_Params_Ids, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.id1 !== \"\") {\n      writer.uint32(10).string(message.id1);\n    }\n    if (message.id2 !== \"\") {\n      writer.uint32(18).string(message.id2);\n    }\n    if (message.id3 !== \"\") {\n      writer.uint32(26).string(message.id3);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams_Sound_Params_Ids {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams_Sound_Params_Ids();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.id1 = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.id2 = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.id3 = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseNotificationPreferences(): NotificationPreferences {\n  return { channelId: \"\", prefId: undefined, number0: undefined, number1: undefined };\n}\n\nexport const NotificationPreferences: MessageFns<NotificationPreferences> = {\n  encode(message: NotificationPreferences, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.channelId !== \"\") {\n      writer.uint32(10).string(message.channelId);\n    }\n    if (message.prefId !== undefined) {\n      NotificationPreferences_Preference.encode(message.prefId, writer.uint32(18).fork()).join();\n    }\n    if (message.number0 !== undefined) {\n      writer.uint32(24).int32(message.number0);\n    }\n    if (message.number1 !== undefined) {\n      writer.uint32(32).int32(message.number1);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): NotificationPreferences {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseNotificationPreferences();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.prefId = NotificationPreferences_Preference.decode(reader, reader.uint32());\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.number0 = reader.int32();\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.number1 = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseNotificationPreferences_Preference(): NotificationPreferences_Preference {\n  return { index: 0 };\n}\n\nexport const NotificationPreferences_Preference: MessageFns<NotificationPreferences_Preference> = {\n  encode(message: NotificationPreferences_Preference, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.index !== 0) {\n      writer.uint32(8).int32(message.index);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): NotificationPreferences_Preference {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseNotificationPreferences_Preference();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.index = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseLiveMessageParams(): LiveMessageParams {\n  return { params: undefined, number0: undefined, number1: undefined };\n}\n\nexport const LiveMessageParams: MessageFns<LiveMessageParams> = {\n  encode(message: LiveMessageParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      LiveMessageParams_Params.encode(message.params, writer.uint32(10).fork()).join();\n    }\n    if (message.number0 !== undefined) {\n      writer.uint32(16).int32(message.number0);\n    }\n    if (message.number1 !== undefined) {\n      writer.uint32(24).int32(message.number1);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): LiveMessageParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseLiveMessageParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params = LiveMessageParams_Params.decode(reader, reader.uint32());\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.number0 = reader.int32();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.number1 = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseLiveMessageParams_Params(): LiveMessageParams_Params {\n  return { ids: undefined };\n}\n\nexport const LiveMessageParams_Params: MessageFns<LiveMessageParams_Params> = {\n  encode(message: LiveMessageParams_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ids !== undefined) {\n      LiveMessageParams_Params_Ids.encode(message.ids, writer.uint32(42).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): LiveMessageParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseLiveMessageParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.ids = LiveMessageParams_Params_Ids.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseLiveMessageParams_Params_Ids(): LiveMessageParams_Params_Ids {\n  return { channelId: \"\", videoId: \"\" };\n}\n\nexport const LiveMessageParams_Params_Ids: MessageFns<LiveMessageParams_Params_Ids> = {\n  encode(message: LiveMessageParams_Params_Ids, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.channelId !== \"\") {\n      writer.uint32(10).string(message.channelId);\n    }\n    if (message.videoId !== \"\") {\n      writer.uint32(18).string(message.videoId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): LiveMessageParams_Params_Ids {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseLiveMessageParams_Params_Ids();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams(): GetCommentsSectionParams {\n  return { ctx: undefined, unkParam: 0, params: undefined };\n}\n\nexport const GetCommentsSectionParams: MessageFns<GetCommentsSectionParams> = {\n  encode(message: GetCommentsSectionParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ctx !== undefined) {\n      GetCommentsSectionParams_Context.encode(message.ctx, writer.uint32(18).fork()).join();\n    }\n    if (message.unkParam !== 0) {\n      writer.uint32(24).int32(message.unkParam);\n    }\n    if (message.params !== undefined) {\n      GetCommentsSectionParams_Params.encode(message.params, writer.uint32(50).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ctx = GetCommentsSectionParams_Context.decode(reader, reader.uint32());\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.unkParam = reader.int32();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.params = GetCommentsSectionParams_Params.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Context(): GetCommentsSectionParams_Context {\n  return { videoId: \"\" };\n}\n\nexport const GetCommentsSectionParams_Context: MessageFns<GetCommentsSectionParams_Context> = {\n  encode(message: GetCommentsSectionParams_Context, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.videoId !== \"\") {\n      writer.uint32(18).string(message.videoId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Context {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Context();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params(): GetCommentsSectionParams_Params {\n  return { unkToken: undefined, opts: undefined, repliesOpts: undefined, page: undefined, target: \"\" };\n}\n\nexport const GetCommentsSectionParams_Params: MessageFns<GetCommentsSectionParams_Params> = {\n  encode(message: GetCommentsSectionParams_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.unkToken !== undefined) {\n      writer.uint32(10).string(message.unkToken);\n    }\n    if (message.opts !== undefined) {\n      GetCommentsSectionParams_Params_Options.encode(message.opts, writer.uint32(34).fork()).join();\n    }\n    if (message.repliesOpts !== undefined) {\n      GetCommentsSectionParams_Params_RepliesOptions.encode(message.repliesOpts, writer.uint32(26).fork()).join();\n    }\n    if (message.page !== undefined) {\n      writer.uint32(40).int32(message.page);\n    }\n    if (message.target !== \"\") {\n      writer.uint32(66).string(message.target);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.unkToken = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.opts = GetCommentsSectionParams_Params_Options.decode(reader, reader.uint32());\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.repliesOpts = GetCommentsSectionParams_Params_RepliesOptions.decode(reader, reader.uint32());\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.page = reader.int32();\n          continue;\n        }\n        case 8: {\n          if (tag !== 66) {\n            break;\n          }\n\n          message.target = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params_Options(): GetCommentsSectionParams_Params_Options {\n  return { videoId: \"\", sortBy: 0, type: 0, commentId: undefined };\n}\n\nexport const GetCommentsSectionParams_Params_Options: MessageFns<GetCommentsSectionParams_Params_Options> = {\n  encode(message: GetCommentsSectionParams_Params_Options, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.videoId !== \"\") {\n      writer.uint32(34).string(message.videoId);\n    }\n    if (message.sortBy !== 0) {\n      writer.uint32(48).int32(message.sortBy);\n    }\n    if (message.type !== 0) {\n      writer.uint32(120).int32(message.type);\n    }\n    if (message.commentId !== undefined) {\n      writer.uint32(130).string(message.commentId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params_Options {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params_Options();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 48) {\n            break;\n          }\n\n          message.sortBy = reader.int32();\n          continue;\n        }\n        case 15: {\n          if (tag !== 120) {\n            break;\n          }\n\n          message.type = reader.int32();\n          continue;\n        }\n        case 16: {\n          if (tag !== 130) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params_RepliesOptions(): GetCommentsSectionParams_Params_RepliesOptions {\n  return { commentId: \"\", unkopts: undefined, channelId: undefined, videoId: \"\", unkParam1: 0, unkParam2: 0 };\n}\n\nexport const GetCommentsSectionParams_Params_RepliesOptions: MessageFns<\n  GetCommentsSectionParams_Params_RepliesOptions\n> = {\n  encode(\n    message: GetCommentsSectionParams_Params_RepliesOptions,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.commentId !== \"\") {\n      writer.uint32(18).string(message.commentId);\n    }\n    if (message.unkopts !== undefined) {\n      GetCommentsSectionParams_Params_RepliesOptions_UnkOpts.encode(message.unkopts, writer.uint32(34).fork()).join();\n    }\n    if (message.channelId !== undefined) {\n      writer.uint32(42).string(message.channelId);\n    }\n    if (message.videoId !== \"\") {\n      writer.uint32(50).string(message.videoId);\n    }\n    if (message.unkParam1 !== 0) {\n      writer.uint32(64).int32(message.unkParam1);\n    }\n    if (message.unkParam2 !== 0) {\n      writer.uint32(72).int32(message.unkParam2);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params_RepliesOptions {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params_RepliesOptions();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.unkopts = GetCommentsSectionParams_Params_RepliesOptions_UnkOpts.decode(reader, reader.uint32());\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        }\n        case 8: {\n          if (tag !== 64) {\n            break;\n          }\n\n          message.unkParam1 = reader.int32();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.unkParam2 = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts(): GetCommentsSectionParams_Params_RepliesOptions_UnkOpts {\n  return { unkParam: 0 };\n}\n\nexport const GetCommentsSectionParams_Params_RepliesOptions_UnkOpts: MessageFns<\n  GetCommentsSectionParams_Params_RepliesOptions_UnkOpts\n> = {\n  encode(\n    message: GetCommentsSectionParams_Params_RepliesOptions_UnkOpts,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.unkParam !== 0) {\n      writer.uint32(8).int32(message.unkParam);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params_RepliesOptions_UnkOpts {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.unkParam = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCreateCommentParams(): CreateCommentParams {\n  return { videoId: \"\", params: undefined, number: 0 };\n}\n\nexport const CreateCommentParams: MessageFns<CreateCommentParams> = {\n  encode(message: CreateCommentParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.videoId !== \"\") {\n      writer.uint32(18).string(message.videoId);\n    }\n    if (message.params !== undefined) {\n      CreateCommentParams_Params.encode(message.params, writer.uint32(42).fork()).join();\n    }\n    if (message.number !== 0) {\n      writer.uint32(80).int32(message.number);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CreateCommentParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCreateCommentParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.params = CreateCommentParams_Params.decode(reader, reader.uint32());\n          continue;\n        }\n        case 10: {\n          if (tag !== 80) {\n            break;\n          }\n\n          message.number = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCreateCommentParams_Params(): CreateCommentParams_Params {\n  return { index: 0 };\n}\n\nexport const CreateCommentParams_Params: MessageFns<CreateCommentParams_Params> = {\n  encode(message: CreateCommentParams_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.index !== 0) {\n      writer.uint32(8).int32(message.index);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CreateCommentParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCreateCommentParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.index = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams(): PeformCommentActionParams {\n  return {\n    type: 0,\n    commentId: \"\",\n    videoId: \"\",\n    unkNum: undefined,\n    channelId: undefined,\n    translateCommentParams: undefined,\n  };\n}\n\nexport const PeformCommentActionParams: MessageFns<PeformCommentActionParams> = {\n  encode(message: PeformCommentActionParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.type !== 0) {\n      writer.uint32(8).int32(message.type);\n    }\n    if (message.commentId !== \"\") {\n      writer.uint32(26).string(message.commentId);\n    }\n    if (message.videoId !== \"\") {\n      writer.uint32(42).string(message.videoId);\n    }\n    if (message.unkNum !== undefined) {\n      writer.uint32(16).int32(message.unkNum);\n    }\n    if (message.channelId !== undefined) {\n      writer.uint32(186).string(message.channelId);\n    }\n    if (message.translateCommentParams !== undefined) {\n      PeformCommentActionParams_TranslateCommentParams.encode(message.translateCommentParams, writer.uint32(250).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): PeformCommentActionParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.type = reader.int32();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.unkNum = reader.int32();\n          continue;\n        }\n        case 23: {\n          if (tag !== 186) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        }\n        case 31: {\n          if (tag !== 250) {\n            break;\n          }\n\n          message.translateCommentParams = PeformCommentActionParams_TranslateCommentParams.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams_TranslateCommentParams(): PeformCommentActionParams_TranslateCommentParams {\n  return { params: undefined, commentId: \"\", targetLanguage: \"\" };\n}\n\nexport const PeformCommentActionParams_TranslateCommentParams: MessageFns<\n  PeformCommentActionParams_TranslateCommentParams\n> = {\n  encode(\n    message: PeformCommentActionParams_TranslateCommentParams,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.params !== undefined) {\n      PeformCommentActionParams_TranslateCommentParams_Params.encode(message.params, writer.uint32(26).fork()).join();\n    }\n    if (message.commentId !== \"\") {\n      writer.uint32(18).string(message.commentId);\n    }\n    if (message.targetLanguage !== \"\") {\n      writer.uint32(34).string(message.targetLanguage);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): PeformCommentActionParams_TranslateCommentParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams_TranslateCommentParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.params = PeformCommentActionParams_TranslateCommentParams_Params.decode(reader, reader.uint32());\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.targetLanguage = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams_TranslateCommentParams_Params(): PeformCommentActionParams_TranslateCommentParams_Params {\n  return { comment: undefined };\n}\n\nexport const PeformCommentActionParams_TranslateCommentParams_Params: MessageFns<\n  PeformCommentActionParams_TranslateCommentParams_Params\n> = {\n  encode(\n    message: PeformCommentActionParams_TranslateCommentParams_Params,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.comment !== undefined) {\n      PeformCommentActionParams_TranslateCommentParams_Params_Comment.encode(message.comment, writer.uint32(10).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): PeformCommentActionParams_TranslateCommentParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams_TranslateCommentParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.comment = PeformCommentActionParams_TranslateCommentParams_Params_Comment.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment(): PeformCommentActionParams_TranslateCommentParams_Params_Comment {\n  return { text: \"\" };\n}\n\nexport const PeformCommentActionParams_TranslateCommentParams_Params_Comment: MessageFns<\n  PeformCommentActionParams_TranslateCommentParams_Params_Comment\n> = {\n  encode(\n    message: PeformCommentActionParams_TranslateCommentParams_Params_Comment,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.text !== \"\") {\n      writer.uint32(10).string(message.text);\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): PeformCommentActionParams_TranslateCommentParams_Params_Comment {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.text = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseHashtag(): Hashtag {\n  return { params: undefined };\n}\n\nexport const Hashtag: MessageFns<Hashtag> = {\n  encode(message: Hashtag, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      Hashtag_Params.encode(message.params, writer.uint32(746).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): Hashtag {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseHashtag();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 93: {\n          if (tag !== 746) {\n            break;\n          }\n\n          message.params = Hashtag_Params.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseHashtag_Params(): Hashtag_Params {\n  return { hashtag: \"\", type: 0 };\n}\n\nexport const Hashtag_Params: MessageFns<Hashtag_Params> = {\n  encode(message: Hashtag_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.hashtag !== \"\") {\n      writer.uint32(10).string(message.hashtag);\n    }\n    if (message.type !== 0) {\n      writer.uint32(24).int32(message.type);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): Hashtag_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseHashtag_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.hashtag = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.type = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseReelSequence(): ReelSequence {\n  return { shortId: \"\", params: undefined, feature2: 0, feature3: 0 };\n}\n\nexport const ReelSequence: MessageFns<ReelSequence> = {\n  encode(message: ReelSequence, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.shortId !== \"\") {\n      writer.uint32(10).string(message.shortId);\n    }\n    if (message.params !== undefined) {\n      ReelSequence_Params.encode(message.params, writer.uint32(42).fork()).join();\n    }\n    if (message.feature2 !== 0) {\n      writer.uint32(80).int32(message.feature2);\n    }\n    if (message.feature3 !== 0) {\n      writer.uint32(104).int32(message.feature3);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ReelSequence {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseReelSequence();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.shortId = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.params = ReelSequence_Params.decode(reader, reader.uint32());\n          continue;\n        }\n        case 10: {\n          if (tag !== 80) {\n            break;\n          }\n\n          message.feature2 = reader.int32();\n          continue;\n        }\n        case 13: {\n          if (tag !== 104) {\n            break;\n          }\n\n          message.feature3 = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseReelSequence_Params(): ReelSequence_Params {\n  return { number: 0 };\n}\n\nexport const ReelSequence_Params: MessageFns<ReelSequence_Params> = {\n  encode(message: ReelSequence_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.number !== 0) {\n      writer.uint32(24).int32(message.number);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ReelSequence_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseReelSequence_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.number = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseShortsParam(): ShortsParam {\n  return { f1: undefined, p59: undefined };\n}\n\nexport const ShortsParam: MessageFns<ShortsParam> = {\n  encode(message: ShortsParam, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.f1 !== undefined) {\n      ShortsParam_Field1.encode(message.f1, writer.uint32(10).fork()).join();\n    }\n    if (message.p59 !== undefined) {\n      writer.uint32(472).int32(message.p59);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ShortsParam {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseShortsParam();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.f1 = ShortsParam_Field1.decode(reader, reader.uint32());\n          continue;\n        }\n        case 59: {\n          if (tag !== 472) {\n            break;\n          }\n\n          message.p59 = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseShortsParam_Field1(): ShortsParam_Field1 {\n  return { p1: undefined };\n}\n\nexport const ShortsParam_Field1: MessageFns<ShortsParam_Field1> = {\n  encode(message: ShortsParam_Field1, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.p1 !== undefined) {\n      writer.uint32(8).int32(message.p1);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ShortsParam_Field1 {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseShortsParam_Field1();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.p1 = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseNextParams(): NextParams {\n  return { videoId: [], playlistTitle: undefined };\n}\n\nexport const NextParams: MessageFns<NextParams> = {\n  encode(message: NextParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.videoId) {\n      writer.uint32(42).string(v!);\n    }\n    if (message.playlistTitle !== undefined) {\n      writer.uint32(50).string(message.playlistTitle);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): NextParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseNextParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.videoId.push(reader.string());\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.playlistTitle = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostParams(): CommunityPostParams {\n  return { f1: undefined };\n}\n\nexport const CommunityPostParams: MessageFns<CommunityPostParams> = {\n  encode(message: CommunityPostParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.f1 !== undefined) {\n      CommunityPostParams_Field1.encode(message.f1, writer.uint32(450).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 56: {\n          if (tag !== 450) {\n            break;\n          }\n\n          message.f1 = CommunityPostParams_Field1.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostParams_Field1(): CommunityPostParams_Field1 {\n  return { ucid1: \"\", postId: \"\", ucid2: \"\" };\n}\n\nexport const CommunityPostParams_Field1: MessageFns<CommunityPostParams_Field1> = {\n  encode(message: CommunityPostParams_Field1, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ucid1 !== \"\") {\n      writer.uint32(18).string(message.ucid1);\n    }\n    if (message.postId !== \"\") {\n      writer.uint32(26).string(message.postId);\n    }\n    if (message.ucid2 !== \"\") {\n      writer.uint32(90).string(message.ucid2);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostParams_Field1 {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostParams_Field1();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ucid1 = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.postId = reader.string();\n          continue;\n        }\n        case 11: {\n          if (tag !== 90) {\n            break;\n          }\n\n          message.ucid2 = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParamContainer(): CommunityPostCommentsParamContainer {\n  return { f0: undefined };\n}\n\nexport const CommunityPostCommentsParamContainer: MessageFns<CommunityPostCommentsParamContainer> = {\n  encode(message: CommunityPostCommentsParamContainer, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.f0 !== undefined) {\n      CommunityPostCommentsParamContainer_Container.encode(message.f0, writer.uint32(641815778).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParamContainer {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParamContainer();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 80226972: {\n          if (tag !== 641815778) {\n            break;\n          }\n\n          message.f0 = CommunityPostCommentsParamContainer_Container.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParamContainer_Container(): CommunityPostCommentsParamContainer_Container {\n  return { location: \"\", protoData: \"\" };\n}\n\nexport const CommunityPostCommentsParamContainer_Container: MessageFns<CommunityPostCommentsParamContainer_Container> =\n  {\n    encode(\n      message: CommunityPostCommentsParamContainer_Container,\n      writer: BinaryWriter = new BinaryWriter(),\n    ): BinaryWriter {\n      if (message.location !== \"\") {\n        writer.uint32(18).string(message.location);\n      }\n      if (message.protoData !== \"\") {\n        writer.uint32(26).string(message.protoData);\n      }\n      return writer;\n    },\n\n    decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParamContainer_Container {\n      const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n      const end = length === undefined ? reader.len : reader.pos + length;\n      const message = createBaseCommunityPostCommentsParamContainer_Container();\n      while (reader.pos < end) {\n        const tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 2: {\n            if (tag !== 18) {\n              break;\n            }\n\n            message.location = reader.string();\n            continue;\n          }\n          case 3: {\n            if (tag !== 26) {\n              break;\n            }\n\n            message.protoData = reader.string();\n            continue;\n          }\n        }\n        if ((tag & 7) === 4 || tag === 0) {\n          break;\n        }\n        reader.skip(tag & 7);\n      }\n      return message;\n    },\n  };\n\nfunction createBaseCommunityPostCommentsParam(): CommunityPostCommentsParam {\n  return { title: \"\", commentDataContainer: undefined };\n}\n\nexport const CommunityPostCommentsParam: MessageFns<CommunityPostCommentsParam> = {\n  encode(message: CommunityPostCommentsParam, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.title !== \"\") {\n      writer.uint32(18).string(message.title);\n    }\n    if (message.commentDataContainer !== undefined) {\n      CommunityPostCommentsParam_CommentDataContainer.encode(message.commentDataContainer, writer.uint32(426).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParam {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParam();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.title = reader.string();\n          continue;\n        }\n        case 53: {\n          if (tag !== 426) {\n            break;\n          }\n\n          message.commentDataContainer = CommunityPostCommentsParam_CommentDataContainer.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParam_CommentDataContainer(): CommunityPostCommentsParam_CommentDataContainer {\n  return { commentData: undefined, f0: 0, title: \"\" };\n}\n\nexport const CommunityPostCommentsParam_CommentDataContainer: MessageFns<\n  CommunityPostCommentsParam_CommentDataContainer\n> = {\n  encode(\n    message: CommunityPostCommentsParam_CommentDataContainer,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.commentData !== undefined) {\n      CommunityPostCommentsParam_CommentDataContainer_CommentData.encode(message.commentData, writer.uint32(34).fork())\n        .join();\n    }\n    if (message.f0 !== 0) {\n      writer.uint32(56).int32(message.f0);\n    }\n    if (message.title !== \"\") {\n      writer.uint32(66).string(message.title);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParam_CommentDataContainer {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParam_CommentDataContainer();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.commentData = CommunityPostCommentsParam_CommentDataContainer_CommentData.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.f0 = reader.int32();\n          continue;\n        }\n        case 8: {\n          if (tag !== 66) {\n            break;\n          }\n\n          message.title = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData(): CommunityPostCommentsParam_CommentDataContainer_CommentData {\n  return { sortBy: 0, f0: 0, f1: 0, postId: \"\", channelId: \"\" };\n}\n\nexport const CommunityPostCommentsParam_CommentDataContainer_CommentData: MessageFns<\n  CommunityPostCommentsParam_CommentDataContainer_CommentData\n> = {\n  encode(\n    message: CommunityPostCommentsParam_CommentDataContainer_CommentData,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.sortBy !== 0) {\n      writer.uint32(48).int32(message.sortBy);\n    }\n    if (message.f0 !== 0) {\n      writer.uint32(120).int32(message.f0);\n    }\n    if (message.f1 !== 0) {\n      writer.uint32(200).int32(message.f1);\n    }\n    if (message.postId !== \"\") {\n      writer.uint32(234).string(message.postId);\n    }\n    if (message.channelId !== \"\") {\n      writer.uint32(242).string(message.channelId);\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): CommunityPostCommentsParam_CommentDataContainer_CommentData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 6: {\n          if (tag !== 48) {\n            break;\n          }\n\n          message.sortBy = reader.int32();\n          continue;\n        }\n        case 15: {\n          if (tag !== 120) {\n            break;\n          }\n\n          message.f0 = reader.int32();\n          continue;\n        }\n        case 25: {\n          if (tag !== 200) {\n            break;\n          }\n\n          message.f1 = reader.int32();\n          continue;\n        }\n        case 29: {\n          if (tag !== 234) {\n            break;\n          }\n\n          message.postId = reader.string();\n          continue;\n        }\n        case 30: {\n          if (tag !== 242) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "import type { ESTree } from 'meriyah';\nimport type { JsAnalyzer } from './JsAnalyzer.js';\n\nexport const WALK_STOP = Symbol('WALK_STOP');\n\nexport const jsBuiltIns = new Set([\n  'AbortController', 'AbortSignal', 'Array', 'ArrayBuffer', 'AsyncContext', 'Atomics', 'AudioContext', 'BigInt', 'BigInt64Array', 'BigUint64Array',\n  'Blob', 'Boolean', 'BroadcastChannel', 'Buffer', 'CanvasRenderingContext2D', 'clearImmediate', 'clearInterval', 'clearTimeout', 'confirm',\n  'console', 'Crypto', 'CustomEvent', 'DataView', 'Date', 'decodeURI', 'decodeURIComponent', 'document', 'Element', 'encodeURI',\n  'encodeURIComponent', 'Error', 'escape', 'eval', 'Event', 'EventTarget', 'fetch', 'File', 'FileReader', 'Float32Array', 'Float64Array',\n  'FormData', 'function', 'global', 'globalThis', 'hasOwnProperty', 'Headers', 'History', 'HTMLElement', 'HTMLCollection', 'IDBKeyRange',\n  'Infinity', 'Int16Array', 'Int32Array', 'Int8Array', 'Intl', 'IntersectionObserver', 'isFinite', 'isNaN', 'isPrototypeOf', 'JSON',\n  'location', 'log', 'Map', 'Math', 'MediaRecorder', 'MediaSource', 'MediaStream', 'MemberExpression', 'MutationObserver', 'NaN',\n  'navigator', 'Node', 'NodeList', 'Number', 'Object', 'OfflineAudioContext', 'parse', 'parseFloat', 'parseInt', 'Performance',\n  'process', 'Promise', 'prompt', 'prototype', 'Proxy', 'ReadableStream', 'Reflect', 'RegExp', 'requestAnimationFrame', 'requestIdleCallback',\n  'Request', 'Response', 'ResizeObserver', 'Screen', 'setImmediate', 'setInterval', 'setTimeout', 'SharedArrayBuffer', 'SharedWorker',\n  'SourceBuffer', 'split', 'String', 'stringify', 'structuredClone', 'SubtleCrypto', 'Symbol', 'TextDecoder', 'TextEncoder', 'this',\n  'toString', 'TransformStream', 'Uint16Array', 'Uint32Array', 'Uint8Array', 'Uint8ClampedArray', 'undefined', 'unescape', 'URL',\n  'URLSearchParams', 'valueOf', 'WeakMap', 'WeakSet', 'WebAssembly', 'WebGLRenderingContext', 'window', 'Worker', 'WritableStream',\n  'XMLHttpRequest', 'alert', 'arguments', 'atob', 'btoa', 'cancelAnimationFrame', 'cancelIdleCallback', 'queueMicrotask'\n]);\n\nexport const indent = '  '; // 2 spaces.\n\nexport type AstVisitResult = boolean | typeof WALK_STOP | void;\nexport type AstVisitFn = (node: ESTree.Node, parent: ESTree.Node | null, ancestors: ESTree.Node[]) => AstVisitResult;\n\nexport interface AstVisitObject {\n  /**\n   * Callback invoked when an AST node is entered.\n   * @param node - Current AST node being visited.\n   * @param parent - Parent of the current AST node, or null if it's the root.\n   * @param ancestors - Array of ancestor nodes, starting from the root down to the parent.\n   * @returns \n   * - `true` to skip traversing this node's children.\n   * - `WALK_STOP` to halt the entire traversal.\n   * - `void`/`undefined` to continue normal traversal.\n   */\n  enter?(node: ESTree.Node, parent: ESTree.Node | null, ancestors: ESTree.Node[]): AstVisitResult;\n  /**\n   * Callback invoked when an AST node is exited.\n   * @param node - Current AST node being exited.\n   * @param parent - Parent of the current AST node, or null if it's the root.\n   * @param ancestors - Array of ancestor nodes, starting from the root down to the parent.\n   * @returns\n   * - `WALK_STOP` to halt the entire traversal.\n   * - `void`/`undefined` to continue normal traversal.\n   */\n  leave?(node: ESTree.Node, parent: ESTree.Node | null, ancestors: ESTree.Node[]): AstVisitResult;\n}\n\nexport type AstVisitor = AstVisitFn | AstVisitObject;\n\n/**\n * Performs traversal of an ESTree AST.\n * @param root - Root AST node to start the traversal from.\n * @param visitor - Callbacks invoked when nodes are entered or left.\n * @remarks\n * - If it returns `WALK_STOP`, the entire traversal is halted.\n * - Why did I not use some AST walker library instead?: They're too slow.\n */\nexport function walkAst(root: ESTree.Node, visitor: AstVisitor): void {\n  if (!root || typeof root !== 'object') return;\n\n  const stack: {\n    node: ESTree.Node;\n    parent: ESTree.Node | null;\n    exit: boolean;\n  }[] = [ { node: root, parent: null, exit: false } ];\n\n  const ancestors: ESTree.Node[] = [];\n\n  const enter = typeof visitor === 'function' ? visitor : visitor.enter ?? null;\n  const leave = typeof visitor === 'function' ? null : visitor.leave ?? null;\n\n  let shouldStop = false;\n\n  while (!shouldStop && stack.length > 0) {\n    const frame = stack.pop()!;\n    const { node, parent, exit } = frame;\n\n    if (exit) {\n      ancestors.pop();\n      if (leave && leave(node, parent, ancestors) === WALK_STOP) {\n        shouldStop = true;\n      }\n      continue;\n    }\n\n    if (!node || typeof node.type !== 'string') continue;\n\n    const result = enter ? enter(node, parent, ancestors) : undefined;\n\n    if (result === WALK_STOP) {\n      shouldStop = true;\n      continue;\n    }\n\n    if (result === true) continue;\n\n    stack.push({ node, parent, exit: true });\n    ancestors.push(node);\n\n    for (const key in node) {\n      if (key === 'loc' || key === 'range' || key === 'start' || key === 'end') continue;\n      if (!Object.prototype.hasOwnProperty.call(node, key)) continue;\n\n      const value = (node as any)[key];\n      if (!value) continue;\n\n      if (Array.isArray(value)) {\n        for (let i = value.length - 1; i >= 0; i--) {\n          const item = value[i];\n          if (item && typeof item.type === 'string') {\n            stack.push({ node: item, parent: node, exit: false });\n          }\n        }\n      } else if (typeof value === 'object' && typeof (value as any).type === 'string') {\n        stack.push({ node: value, parent: node, exit: false });\n      }\n    }\n  }\n}\n\n/**\n * Returns the source range of an ESTree node as a tuple of start and end positions.\n * @param node - The ESTree node to extract the source range from.\n * @returns A tuple `[start, end]` representing the source range, or `null` if unavailable.\n */\nexport function getNodeSourceRange(node: ESTree.Node | null | undefined): [number, number] | null {\n  if (!node) return null;\n  if (Array.isArray(node.range)) return node.range;\n  if (typeof node.start === 'number' && typeof node.end === 'number') return [ node.start, node.end ];\n  return null;\n};\n\n/**\n * Extracts the source code corresponding to a given AST node.\n * @param node - The AST node to extract source from.\n * @param source - The original source code.\n * @returns The source code corresponding to the node, or null if not available.\n */\nexport function extractNodeSource(node: ESTree.Node | null | undefined, source: string): string | null {\n  const range = getNodeSourceRange(node);\n  return range ? source.slice(range[0], range[1]) : null;\n};\n\n/**\n * Converts a member expression into its dot/bracket string form.\n * @param memberExpression - Member expression node to stringify.\n * @param source - Original source code for range lookups.\n */\nexport function memberToString(memberExpression: ESTree.Node, source: string): string | null {\n  if (memberExpression.type !== 'MemberExpression') return null;\n\n  const segments: string[] = [];\n  let cur: ESTree.Node = memberExpression;\n\n  while (cur && cur.type === 'MemberExpression') {\n    const member = cur as ESTree.MemberExpression;\n    const prop = member.property;\n    if (!prop) return null;\n\n    if (member.computed) {\n      // I just don't want to bother with nested computed nodes... :P\n      const propSource = extractNodeSource(prop, source);\n      if (!propSource) return null;\n      segments.unshift(`[${propSource.trim()}]`);\n    } else {\n      if (prop.type !== 'Identifier') return null;\n      segments.unshift(`.${prop.name}`);\n    }\n\n    cur = member.object;\n  }\n\n  let base: string | null = null;\n\n  if (cur?.type === 'Identifier') {\n    base = cur.name;\n  } else if (cur?.type === 'ThisExpression') {\n    base = 'this';\n  }\n\n  return base ? base + segments.join('') : null;\n};\n\n/**\n * Retrieves the base identifier for a member expression chain.\n * @param memberExpression - Member expression whose root should be resolved.\n * @param source - Original source code for range lookups.\n */\nexport function memberBaseName(memberExpression: ESTree.MemberExpression, source: string): string | null {\n  let target: ESTree.Node | null = memberExpression.object as ESTree.Node;\n\n  while (target && target.type === 'MemberExpression') {\n    const parentName = memberToString(target, source);\n    if (parentName) return parentName;\n    target = (target as ESTree.MemberExpression).object as ESTree.Node;\n  }\n\n  if (target?.type === 'Identifier') return target.name;\n  if (target?.type === 'ThisExpression') return 'this';\n\n  return null;\n};\n\n/**\n * Analyzes an AST node to determine if it's a function call or a function\n * declaration. Based on that, it then creates a new JavaScript function as\n * a string. This new function acts as a wrapper, taking a single 'input' \n * argument and forwarding it to the original function call.\n *\n * Currently can handle:\n * - `CallExpression`: Creates a wrapper that invokes the function being called in the expression.\n * - `VariableDeclarator` with a `FunctionExpression`: Creates a wrapper that calls the declared function.\n *\n * @param analyzer - The `JSAnalyzer` instance, used to resolve context like declared variables.\n * @param name - The name for the new wrapper function to be created.\n * @param node - The ESTree node.\n * @todo Look for edge cases.\n */\nexport function createWrapperFunction(analyzer: JsAnalyzer, name: string, node: ESTree.Node): string | undefined {\n  if (\n    node.type === 'CallExpression' &&\n    node.callee.type === 'Identifier' &&\n    analyzer.declaredVariables.has(node.callee.name)\n  ) {\n    return generateWrapper(name, node.callee.name, parseFunctionArguments(analyzer, node.arguments));\n  } else if (\n    node.type === 'VariableDeclarator' &&\n    node.init?.type === 'FunctionExpression' &&\n    node.id.type === 'Identifier'\n  ) {\n    return generateWrapper(name, node.id.name, parseFunctionArguments(analyzer, node.init.params));\n  } else if (\n    node.type === 'NewExpression' &&\n    node.callee.type === 'MemberExpression' &&\n    node.callee.object.type === 'Identifier'\n  ) {\n    const targetFunction = memberToString(node.callee, analyzer.getSource());\n    if (!targetFunction) return undefined;\n    return generateWrapper(name, targetFunction, parseFunctionArguments(analyzer, node.arguments), true);\n  }\n}\n\n/**\n * Generates a wrapper function string.\n * @param functionName - The name of the wrapper function.\n * @param targetFunction - The name of the target function to call.\n * @param args - The arguments to pass to the target function.\n */\nfunction generateWrapper(functionName: string, targetFunction: string, args: string[], useNew: boolean = false): string {\n  return [\n    `${indent}function ${functionName}(${args.join(', ')}) {`,\n    `${indent}${indent}return ${useNew ? 'new ' : ''}${targetFunction}(${args.join(', ')});`,\n    `${indent}}`\n  ].join('\\n');\n}\n\n/**\n * Parses function arguments to create a string representation suitable for\n * use in our custom function calls.\n * @param analyzer - The JsAnalyzer instance to use.\n * @param args - The function arguments to parse.\n */\nfunction parseFunctionArguments(analyzer: JsAnalyzer, args: ESTree.Node[]) {\n  const params: string[] = [];\n\n  for (const arg of args) {\n    if (arg.type === 'Identifier' && analyzer.declaredVariables.has(arg.name)) {\n      params.push(arg.name);\n    } else if (arg.type === 'Literal' && (typeof arg.value === 'string' || typeof arg.value === 'number')) {\n      params.push(JSON.stringify(arg.value));\n    } else if (arg.type === 'UnaryExpression') {\n      const argSource = extractNodeSource(arg, analyzer.getSource());\n      if (argSource) {\n        params.push(argSource.trim());\n      }\n    } else if (arg.type === 'AssignmentPattern' && arg.left.type === 'Identifier') {\n      params.push(arg.left.name);\n    } else if (arg.type === 'Identifier') {\n      params.push(arg.name);\n    } else if (!params.includes('input'))\n      params.push('input');\n  }\n\n  return params;\n}", "import type { ESTree } from 'meriyah';\nimport { WALK_STOP, walkAst } from './helpers.js';\n\nexport function nsigMatcher(node: ESTree.Node) {\n  if (node.type !== 'VariableDeclarator')\n    return false;\n\n  const init = node.init;\n\n  if (!init || init.type !== 'FunctionExpression')\n    return false;\n\n  if (init.params.length < 3)\n    return false;\n\n  const [ url, sigName, sigValue ] = init.params;\n\n  if (url.type !== 'Identifier' || sigName.type !== 'AssignmentPattern' || sigValue.type !== 'AssignmentPattern')\n    return false;\n\n  const body = init.body;\n  const blockStatementBody = body?.body || [];\n\n  let hasUrlCtor = false;\n  let hasSetAlr = false;\n\n  for (const statement of blockStatementBody) {\n    if (statement.type !== 'ExpressionStatement')\n      continue;\n\n    const expr = statement.expression;\n\n    if (expr.type === 'AssignmentExpression' && expr.operator === '=' && expr.left.type === 'Identifier' && expr.left.name === url.name) {\n      const right = expr.right;\n      if (right.type === 'NewExpression' && right.callee.type === 'MemberExpression') {\n        hasUrlCtor = true;\n      }\n    }\n\n    if (expr.type === 'CallExpression' && expr.callee.type === 'MemberExpression') {\n      const args = expr.arguments;\n      if (args.length === 2 && args[0].type === 'Literal' && args[0].value === 'alr' && args[1].type === 'Literal' && args[1].value === 'yes') {\n        hasSetAlr = true;\n      }\n    }\n  }\n\n  if (!hasUrlCtor || !hasSetAlr)\n    return false;\n\n  return node;\n}\n\nexport function timestampMatcher(node: ESTree.Node) {\n  if (node.type !== 'VariableDeclarator' || node.init?.type !== 'FunctionExpression') {\n    return false;\n  }\n\n  const funcBody = node.init.body;\n  if (!funcBody) return false;\n\n  let foundObject: ESTree.Node | null = null;\n\n  walkAst(funcBody, (innerNode) => {\n    if (innerNode.type === 'ObjectExpression') {\n      for (const prop of innerNode.properties) {\n        if (prop.type === 'Property' && prop.key.type === 'Identifier' && prop.key.name === 'signatureTimestamp') {\n          foundObject = prop;\n          return WALK_STOP;\n        }\n      }\n    }\n  });\n\n  return foundObject || false;\n}", "const unicodeLookup = ((compressed, lookup) => {\n    const result = new Uint32Array(69632);\n    let index = 0;\n    let subIndex = 0;\n    while (index < 2571) {\n        const inst = compressed[index++];\n        if (inst < 0) {\n            subIndex -= inst;\n        }\n        else {\n            let code = compressed[index++];\n            if (inst & 2)\n                code = lookup[code];\n            if (inst & 1) {\n                result.fill(code, subIndex, subIndex += compressed[index++]);\n            }\n            else {\n                result[subIndex++] = code;\n            }\n        }\n    }\n    return result;\n})([-1, 2, 26, 2, 27, 2, 5, -1, 0, 77595648, 3, 44, 2, 3, 0, 14, 2, 63, 2, 64, 3, 0, 3, 0, 3168796671, 0, 4294956992, 2, 1, 2, 0, 2, 41, 3, 0, 4, 0, 4294966523, 3, 0, 4, 2, 16, 2, 65, 2, 0, 0, 4294836735, 0, 3221225471, 0, 4294901942, 2, 66, 0, 134152192, 3, 0, 2, 0, 4294951935, 3, 0, 2, 0, 2683305983, 0, 2684354047, 2, 18, 2, 0, 0, 4294961151, 3, 0, 2, 2, 19, 2, 0, 0, 608174079, 2, 0, 2, 60, 2, 7, 2, 6, 0, 4286611199, 3, 0, 2, 2, 1, 3, 0, 3, 0, 4294901711, 2, 40, 0, 4089839103, 0, 2961209759, 0, 1342439375, 0, 4294543342, 0, 3547201023, 0, 1577204103, 0, 4194240, 0, 4294688750, 2, 2, 0, 80831, 0, 4261478351, 0, 4294549486, 2, 2, 0, 2967484831, 0, 196559, 0, 3594373100, 0, 3288319768, 0, 8469959, 0, 65472, 2, 3, 0, 4093640191, 0, 660618719, 0, 65487, 0, 4294828015, 0, 4092591615, 0, 1616920031, 0, 982991, 2, 3, 2, 0, 0, 2163244511, 0, 4227923919, 0, 4236247022, 2, 71, 0, 4284449919, 0, 851904, 2, 4, 2, 12, 0, 67076095, -1, 2, 72, 0, 1073741743, 0, 4093607775, -1, 0, 50331649, 0, 3265266687, 2, 33, 0, 4294844415, 0, 4278190047, 2, 20, 2, 137, -1, 3, 0, 2, 2, 23, 2, 0, 2, 10, 2, 0, 2, 15, 2, 22, 3, 0, 10, 2, 74, 2, 0, 2, 75, 2, 76, 2, 77, 2, 0, 2, 78, 2, 0, 2, 11, 0, 261632, 2, 25, 3, 0, 2, 2, 13, 2, 4, 3, 0, 18, 2, 79, 2, 5, 3, 0, 2, 2, 80, 0, 2151677951, 2, 29, 2, 9, 0, 909311, 3, 0, 2, 0, 814743551, 2, 49, 0, 67090432, 3, 0, 2, 2, 42, 2, 0, 2, 6, 2, 0, 2, 30, 2, 8, 0, 268374015, 2, 110, 2, 51, 2, 0, 2, 81, 0, 134153215, -1, 2, 7, 2, 0, 2, 8, 0, 2684354559, 0, 67044351, 0, 3221160064, 2, 17, -1, 3, 0, 2, 2, 53, 0, 1046528, 3, 0, 3, 2, 9, 2, 0, 2, 54, 0, 4294960127, 2, 10, 2, 6, 2, 11, 0, 4294377472, 2, 12, 3, 0, 16, 2, 13, 2, 0, 2, 82, 2, 10, 2, 0, 2, 83, 2, 84, 2, 85, 0, 12288, 2, 55, 0, 1048577, 2, 86, 2, 14, -1, 2, 14, 0, 131042, 2, 87, 2, 88, 2, 89, 2, 0, 2, 34, -83, 3, 0, 7, 0, 1046559, 2, 0, 2, 15, 2, 0, 0, 2147516671, 2, 21, 3, 90, 2, 2, 0, -16, 2, 91, 0, 524222462, 2, 4, 2, 0, 0, 4269801471, 2, 4, 3, 0, 2, 2, 28, 2, 16, 3, 0, 2, 2, 17, 2, 0, -1, 2, 18, -16, 3, 0, 206, -2, 3, 0, 692, 2, 73, -1, 2, 18, 2, 10, 3, 0, 8, 2, 93, 2, 133, 2, 0, 0, 3220242431, 3, 0, 3, 2, 19, 2, 94, 2, 95, 3, 0, 2, 2, 96, 2, 0, 2, 97, 2, 46, 2, 0, 0, 4351, 2, 0, 2, 9, 3, 0, 2, 0, 67043391, 0, 3909091327, 2, 0, 2, 24, 2, 9, 2, 20, 3, 0, 2, 0, 67076097, 2, 8, 2, 0, 2, 21, 0, 67059711, 0, 4236247039, 3, 0, 2, 0, 939524103, 0, 8191999, 2, 101, 2, 102, 2, 22, 2, 23, 3, 0, 3, 0, 67057663, 3, 0, 349, 2, 103, 2, 104, 2, 7, -264, 3, 0, 11, 2, 24, 3, 0, 2, 2, 32, -1, 0, 3774349439, 2, 105, 2, 106, 3, 0, 2, 2, 19, 2, 107, 3, 0, 10, 2, 10, 2, 18, 2, 0, 2, 47, 2, 0, 2, 31, 2, 108, 2, 25, 0, 1638399, 0, 57344, 2, 109, 3, 0, 3, 2, 20, 2, 26, 2, 27, 2, 5, 2, 28, 2, 0, 2, 8, 2, 111, -1, 2, 112, 2, 113, 2, 114, -1, 3, 0, 3, 2, 12, -2, 2, 0, 2, 29, -3, 0, 536870912, -4, 2, 20, 2, 0, 2, 36, 0, 1, 2, 0, 2, 67, 2, 6, 2, 12, 2, 10, 2, 0, 2, 115, -1, 3, 0, 4, 2, 10, 2, 23, 2, 116, 2, 7, 2, 0, 2, 117, 2, 0, 2, 118, 2, 119, 2, 120, 2, 0, 2, 9, 3, 0, 9, 2, 21, 2, 30, 2, 31, 2, 121, 2, 122, -2, 2, 123, 2, 124, 2, 30, 2, 21, 2, 8, -2, 2, 125, 2, 30, 2, 32, -2, 2, 0, 2, 39, -2, 0, 4277137519, 0, 2269118463, -1, 3, 20, 2, -1, 2, 33, 2, 38, 2, 0, 3, 30, 2, 2, 35, 2, 19, -3, 3, 0, 2, 2, 34, -1, 2, 0, 2, 35, 2, 0, 2, 35, 2, 0, 2, 48, 2, 0, 0, 4294950463, 2, 37, -7, 2, 0, 0, 203775, 2, 57, 0, 4026531840, 2, 20, 2, 43, 2, 36, 2, 18, 2, 37, 2, 18, 2, 126, 2, 21, 3, 0, 2, 2, 38, 0, 2151677888, 2, 0, 2, 12, 0, 4294901764, 2, 144, 2, 0, 2, 58, 2, 56, 0, 5242879, 3, 0, 2, 0, 402644511, -1, 2, 128, 2, 39, 0, 3, -1, 2, 129, 2, 130, 2, 0, 0, 67045375, 2, 40, 0, 4226678271, 0, 3766565279, 0, 2039759, 2, 132, 2, 41, 0, 1046437, 0, 6, 3, 0, 2, 0, 3288270847, 0, 3, 3, 0, 2, 0, 67043519, -5, 2, 0, 0, 4282384383, 0, 1056964609, -1, 3, 0, 2, 0, 67043345, -1, 2, 0, 2, 42, 2, 23, 2, 50, 2, 11, 2, 61, 2, 38, -5, 2, 0, 2, 12, -3, 3, 0, 2, 0, 2147484671, 2, 134, 0, 4190109695, 2, 52, -2, 2, 135, 0, 4244635647, 0, 27, 2, 0, 2, 8, 2, 43, 2, 0, 2, 68, 2, 18, 2, 0, 2, 42, -6, 2, 0, 2, 45, 2, 59, 2, 44, 2, 45, 2, 46, 2, 47, 0, 8388351, -2, 2, 136, 0, 3028287487, 2, 48, 2, 138, 0, 33259519, 2, 49, -9, 2, 21, 0, 4294836223, 0, 3355443199, 0, 134152199, -2, 2, 69, -2, 3, 0, 28, 2, 32, -3, 3, 0, 3, 2, 17, 3, 0, 6, 2, 50, -81, 2, 18, 3, 0, 2, 2, 36, 3, 0, 33, 2, 25, 2, 30, 3, 0, 124, 2, 12, 3, 0, 18, 2, 38, -213, 2, 0, 2, 32, -54, 3, 0, 17, 2, 42, 2, 8, 2, 23, 2, 0, 2, 8, 2, 23, 2, 51, 2, 0, 2, 21, 2, 52, 2, 139, 2, 25, -13, 2, 0, 2, 53, -6, 3, 0, 2, -4, 3, 0, 2, 0, 4294936575, 2, 0, 0, 4294934783, -2, 0, 196635, 3, 0, 191, 2, 54, 3, 0, 38, 2, 30, 2, 55, 2, 34, -278, 2, 140, 3, 0, 9, 2, 141, 2, 142, 2, 56, 3, 0, 11, 2, 7, -72, 3, 0, 3, 2, 143, 0, 1677656575, -130, 2, 26, -16, 2, 0, 2, 24, 2, 38, -16, 0, 4161266656, 0, 4071, 0, 15360, -4, 2, 57, -13, 3, 0, 2, 2, 58, 2, 0, 2, 145, 2, 146, 2, 62, 2, 0, 2, 147, 2, 148, 2, 149, 3, 0, 10, 2, 150, 2, 151, 2, 22, 3, 58, 2, 3, 152, 2, 3, 59, 2, 0, 4294954999, 2, 0, -16, 2, 0, 2, 92, 2, 0, 0, 2105343, 0, 4160749584, 0, 65534, -34, 2, 8, 2, 154, -6, 0, 4194303871, 0, 4294903771, 2, 0, 2, 60, 2, 100, -3, 2, 0, 0, 1073684479, 0, 17407, -9, 2, 18, 2, 17, 2, 0, 2, 32, -14, 2, 18, 2, 32, -6, 2, 18, 2, 12, -15, 2, 155, 3, 0, 6, 0, 8323103, -1, 3, 0, 2, 2, 61, -37, 2, 62, 2, 156, 2, 157, 2, 158, 2, 159, 2, 160, -105, 2, 26, -32, 3, 0, 1335, -1, 3, 0, 129, 2, 32, 3, 0, 6, 2, 10, 3, 0, 180, 2, 161, 3, 0, 233, 2, 162, 3, 0, 18, 2, 10, -77, 3, 0, 16, 2, 10, -47, 3, 0, 154, 2, 6, 3, 0, 130, 2, 25, -22250, 3, 0, 7, 2, 25, -6130, 3, 5, 2, -1, 0, 69207040, 3, 44, 2, 3, 0, 14, 2, 63, 2, 64, -3, 0, 3168731136, 0, 4294956864, 2, 1, 2, 0, 2, 41, 3, 0, 4, 0, 4294966275, 3, 0, 4, 2, 16, 2, 65, 2, 0, 2, 34, -1, 2, 18, 2, 66, -1, 2, 0, 0, 2047, 0, 4294885376, 3, 0, 2, 0, 3145727, 0, 2617294944, 0, 4294770688, 2, 25, 2, 67, 3, 0, 2, 0, 131135, 2, 98, 0, 70256639, 0, 71303167, 0, 272, 2, 42, 2, 6, 0, 32511, 2, 0, 2, 49, -1, 2, 99, 2, 68, 0, 4278255616, 0, 4294836227, 0, 4294549473, 0, 600178175, 0, 2952806400, 0, 268632067, 0, 4294543328, 0, 57540095, 0, 1577058304, 0, 1835008, 0, 4294688736, 2, 70, 2, 69, 0, 33554435, 2, 131, 2, 70, 0, 2952790016, 0, 131075, 0, 3594373096, 0, 67094296, 2, 69, -1, 0, 4294828000, 0, 603979263, 0, 654311424, 0, 3, 0, 4294828001, 0, 602930687, 0, 1610612736, 0, 393219, 0, 4294828016, 0, 671088639, 0, 2154840064, 0, 4227858435, 0, 4236247008, 2, 71, 2, 38, -1, 2, 4, 0, 917503, 2, 38, -1, 2, 72, 0, 537788335, 0, 4026531935, -1, 0, 1, -1, 2, 33, 2, 73, 0, 7936, -3, 2, 0, 0, 2147485695, 0, 1010761728, 0, 4292984930, 0, 16387, 2, 0, 2, 15, 2, 22, 3, 0, 10, 2, 74, 2, 0, 2, 75, 2, 76, 2, 77, 2, 0, 2, 78, 2, 0, 2, 12, -1, 2, 25, 3, 0, 2, 2, 13, 2, 4, 3, 0, 18, 2, 79, 2, 5, 3, 0, 2, 2, 80, 0, 2147745791, 3, 19, 2, 0, 122879, 2, 0, 2, 9, 0, 276824064, -2, 3, 0, 2, 2, 42, 2, 0, 0, 4294903295, 2, 0, 2, 30, 2, 8, -1, 2, 18, 2, 51, 2, 0, 2, 81, 2, 49, -1, 2, 21, 2, 0, 2, 29, -2, 0, 128, -2, 2, 28, 2, 9, 0, 8160, -1, 2, 127, 0, 4227907585, 2, 0, 2, 37, 2, 0, 2, 50, 0, 4227915776, 2, 10, 2, 6, 2, 11, -1, 0, 74440192, 3, 0, 6, -2, 3, 0, 8, 2, 13, 2, 0, 2, 82, 2, 10, 2, 0, 2, 83, 2, 84, 2, 85, -3, 2, 86, 2, 14, -3, 2, 87, 2, 88, 2, 89, 2, 0, 2, 34, -83, 3, 0, 7, 0, 817183, 2, 0, 2, 15, 2, 0, 0, 33023, 2, 21, 3, 90, 2, -17, 2, 91, 0, 524157950, 2, 4, 2, 0, 2, 92, 2, 4, 2, 0, 2, 22, 2, 28, 2, 16, 3, 0, 2, 2, 17, 2, 0, -1, 2, 18, -16, 3, 0, 206, -2, 3, 0, 692, 2, 73, -1, 2, 18, 2, 10, 3, 0, 8, 2, 93, 0, 3072, 2, 0, 0, 2147516415, 2, 10, 3, 0, 2, 2, 25, 2, 94, 2, 95, 3, 0, 2, 2, 96, 2, 0, 2, 97, 2, 46, 0, 4294965179, 0, 7, 2, 0, 2, 9, 2, 95, 2, 9, -1, 0, 1761345536, 2, 98, 0, 4294901823, 2, 38, 2, 20, 2, 99, 2, 35, 2, 100, 0, 2080440287, 2, 0, 2, 34, 2, 153, 0, 3296722943, 2, 0, 0, 1046675455, 0, 939524101, 0, 1837055, 2, 101, 2, 102, 2, 22, 2, 23, 3, 0, 3, 0, 7, 3, 0, 349, 2, 103, 2, 104, 2, 7, -264, 3, 0, 11, 2, 24, 3, 0, 2, 2, 32, -1, 0, 2700607615, 2, 105, 2, 106, 3, 0, 2, 2, 19, 2, 107, 3, 0, 10, 2, 10, 2, 18, 2, 0, 2, 47, 2, 0, 2, 31, 2, 108, -3, 2, 109, 3, 0, 3, 2, 20, -1, 3, 5, 2, 2, 110, 2, 0, 2, 8, 2, 111, -1, 2, 112, 2, 113, 2, 114, -1, 3, 0, 3, 2, 12, -2, 2, 0, 2, 29, -8, 2, 20, 2, 0, 2, 36, -1, 2, 0, 2, 67, 2, 6, 2, 30, 2, 10, 2, 0, 2, 115, -1, 3, 0, 4, 2, 10, 2, 18, 2, 116, 2, 7, 2, 0, 2, 117, 2, 0, 2, 118, 2, 119, 2, 120, 2, 0, 2, 9, 3, 0, 9, 2, 21, 2, 30, 2, 31, 2, 121, 2, 122, -2, 2, 123, 2, 124, 2, 30, 2, 21, 2, 8, -2, 2, 125, 2, 30, 2, 32, -2, 2, 0, 2, 39, -2, 0, 4277075969, 2, 30, -1, 3, 20, 2, -1, 2, 33, 2, 126, 2, 0, 3, 30, 2, 2, 35, 2, 19, -3, 3, 0, 2, 2, 34, -1, 2, 0, 2, 35, 2, 0, 2, 35, 2, 0, 2, 50, 2, 98, 0, 4294934591, 2, 37, -7, 2, 0, 0, 197631, 2, 57, -1, 2, 20, 2, 43, 2, 37, 2, 18, 0, 3, 2, 18, 2, 126, 2, 21, 2, 127, 2, 54, -1, 0, 2490368, 2, 127, 2, 25, 2, 18, 2, 34, 2, 127, 2, 38, 0, 4294901904, 0, 4718591, 2, 127, 2, 35, 0, 335544350, -1, 2, 128, 0, 2147487743, 0, 1, -1, 2, 129, 2, 130, 2, 8, -1, 2, 131, 2, 70, 0, 3758161920, 0, 3, 2, 132, 0, 12582911, 0, 655360, -1, 2, 0, 2, 29, 0, 2147485568, 0, 3, 2, 0, 2, 25, 0, 176, -5, 2, 0, 2, 17, 0, 251658240, -1, 2, 0, 2, 25, 0, 16, -1, 2, 0, 0, 16779263, -2, 2, 12, -1, 2, 38, -5, 2, 0, 2, 133, -3, 3, 0, 2, 2, 55, 2, 134, 0, 2147549183, 0, 2, -2, 2, 135, 2, 36, 0, 10, 0, 4294965249, 0, 67633151, 0, 4026597376, 2, 0, 0, 536871935, 2, 18, 2, 0, 2, 42, -6, 2, 0, 0, 1, 2, 59, 2, 17, 0, 1, 2, 46, 2, 25, -3, 2, 136, 2, 36, 2, 137, 2, 138, 0, 16778239, -10, 2, 35, 0, 4294836212, 2, 9, -3, 2, 69, -2, 3, 0, 28, 2, 32, -3, 3, 0, 3, 2, 17, 3, 0, 6, 2, 50, -81, 2, 18, 3, 0, 2, 2, 36, 3, 0, 33, 2, 25, 0, 126, 3, 0, 124, 2, 12, 3, 0, 18, 2, 38, -213, 2, 10, -55, 3, 0, 17, 2, 42, 2, 8, 2, 18, 2, 0, 2, 8, 2, 18, 2, 60, 2, 0, 2, 25, 2, 50, 2, 139, 2, 25, -13, 2, 0, 2, 73, -6, 3, 0, 2, -4, 3, 0, 2, 0, 67583, -1, 2, 107, -2, 0, 11, 3, 0, 191, 2, 54, 3, 0, 38, 2, 30, 2, 55, 2, 34, -278, 2, 140, 3, 0, 9, 2, 141, 2, 142, 2, 56, 3, 0, 11, 2, 7, -72, 3, 0, 3, 2, 143, 2, 144, -187, 3, 0, 2, 2, 58, 2, 0, 2, 145, 2, 146, 2, 62, 2, 0, 2, 147, 2, 148, 2, 149, 3, 0, 10, 2, 150, 2, 151, 2, 22, 3, 58, 2, 3, 152, 2, 3, 59, 2, 2, 153, -57, 2, 8, 2, 154, -7, 2, 18, 2, 0, 2, 60, -4, 2, 0, 0, 1065361407, 0, 16384, -9, 2, 18, 2, 60, 2, 0, 2, 133, -14, 2, 18, 2, 133, -6, 2, 18, 0, 81919, -15, 2, 155, 3, 0, 6, 2, 126, -1, 3, 0, 2, 0, 2063, -37, 2, 62, 2, 156, 2, 157, 2, 158, 2, 159, 2, 160, -138, 3, 0, 1335, -1, 3, 0, 129, 2, 32, 3, 0, 6, 2, 10, 3, 0, 180, 2, 161, 3, 0, 233, 2, 162, 3, 0, 18, 2, 10, -77, 3, 0, 16, 2, 10, -47, 3, 0, 154, 2, 6, 3, 0, 130, 2, 25, -28386], [4294967295, 4294967291, 4092460543, 4294828031, 4294967294, 134217726, 4294903807, 268435455, 2147483647, 1048575, 1073741823, 3892314111, 134217727, 1061158911, 536805376, 4294910143, 4294901759, 32767, 4294901760, 262143, 536870911, 8388607, 4160749567, 4294902783, 4294918143, 65535, 67043328, 2281701374, 4294967264, 2097151, 4194303, 255, 67108863, 4294967039, 511, 524287, 131071, 63, 127, 3238002687, 4294549487, 4290772991, 33554431, 4294901888, 4286578687, 67043329, 4294705152, 4294770687, 67043583, 1023, 15, 2047999, 67043343, 67051519, 16777215, 2147483648, 4294902000, 28, 4292870143, 4294966783, 16383, 67047423, 4294967279, 262083, 20511, 41943039, 493567, 4294959104, 603979775, 65536, 602799615, 805044223, 4294965206, 8191, 1031749119, 4294917631, 2134769663, 4286578493, 4282253311, 4294942719, 33540095, 4294905855, 2868854591, 1608515583, 265232348, 534519807, 2147614720, 1060109444, 4093640016, 17376, 2139062143, 224, 4169138175, 4294909951, 4286578688, 4294967292, 4294965759, 535511039, 4294966272, 4294967280, 32768, 8289918, 4294934399, 4294901775, 4294965375, 1602223615, 4294967259, 4294443008, 268369920, 4292804608, 4294967232, 486341884, 4294963199, 3087007615, 1073692671, 4128527, 4279238655, 4294902015, 4160684047, 4290246655, 469499899, 4294967231, 134086655, 4294966591, 2445279231, 3670015, 31, 4294967288, 4294705151, 3221208447, 4294902271, 4294549472, 4294921215, 4095, 4285526655, 4294966527, 4294966143, 64, 4294966719, 3774873592, 1877934080, 262151, 2555904, 536807423, 67043839, 3758096383, 3959414372, 3755993023, 2080374783, 4294835295, 4294967103, 4160749565, 4294934527, 4087, 2016, 2147446655, 184024726, 2862017156, 1593309078, 268434431, 268434414, 4294901763, 4294901761]);\nconst isIDContinue = (code) => (unicodeLookup[(code >>> 5) + 0] >>> code & 31 & 1) !== 0;\nconst isIDStart = (code) => (unicodeLookup[(code >>> 5) + 34816] >>> code & 31 & 1) !== 0;\n\nfunction advanceChar(parser) {\n    parser.column++;\n    return (parser.currentChar = parser.source.charCodeAt(++parser.index));\n}\nfunction consumePossibleSurrogatePair(parser) {\n    const hi = parser.currentChar;\n    if ((hi & 0xfc00) !== 55296)\n        return 0;\n    const lo = parser.source.charCodeAt(parser.index + 1);\n    if ((lo & 0xfc00) !== 56320)\n        return 0;\n    return 65536 + ((hi & 0x3ff) << 10) + (lo & 0x3ff);\n}\nfunction consumeLineFeed(parser, state) {\n    parser.currentChar = parser.source.charCodeAt(++parser.index);\n    parser.flags |= 1;\n    if ((state & 4) === 0) {\n        parser.column = 0;\n        parser.line++;\n    }\n}\nfunction scanNewLine(parser) {\n    parser.flags |= 1;\n    parser.currentChar = parser.source.charCodeAt(++parser.index);\n    parser.column = 0;\n    parser.line++;\n}\nfunction isExoticECMAScriptWhitespace(ch) {\n    return (ch === 160 ||\n        ch === 65279 ||\n        ch === 133 ||\n        ch === 5760 ||\n        (ch >= 8192 && ch <= 8203) ||\n        ch === 8239 ||\n        ch === 8287 ||\n        ch === 12288 ||\n        ch === 8201 ||\n        ch === 65519);\n}\nfunction toHex(code) {\n    return code < 65 ? code - 48 : (code - 65 + 10) & 0xf;\n}\nfunction convertTokenType(t) {\n    switch (t) {\n        case 134283266:\n            return 'NumericLiteral';\n        case 134283267:\n            return 'StringLiteral';\n        case 86021:\n        case 86022:\n            return 'BooleanLiteral';\n        case 86023:\n            return 'NullLiteral';\n        case 65540:\n            return 'RegularExpression';\n        case 67174408:\n        case 67174409:\n        case 131:\n            return 'TemplateLiteral';\n        default:\n            if ((t & 143360) === 143360)\n                return 'Identifier';\n            if ((t & 4096) === 4096)\n                return 'Keyword';\n            return 'Punctuator';\n    }\n}\n\nconst CharTypes = [\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    8 | 1024,\n    0,\n    0,\n    8 | 2048,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    8192,\n    0,\n    1 | 2,\n    0,\n    0,\n    8192,\n    0,\n    0,\n    0,\n    256,\n    0,\n    256 | 32768,\n    0,\n    0,\n    2 | 16 | 128 | 32 | 64,\n    2 | 16 | 128 | 32 | 64,\n    2 | 16 | 32 | 64,\n    2 | 16 | 32 | 64,\n    2 | 16 | 32 | 64,\n    2 | 16 | 32 | 64,\n    2 | 16 | 32 | 64,\n    2 | 16 | 32 | 64,\n    2 | 16 | 512 | 64,\n    2 | 16 | 512 | 64,\n    0,\n    0,\n    16384,\n    0,\n    0,\n    0,\n    0,\n    1 | 2 | 64,\n    1 | 2 | 64,\n    1 | 2 | 64,\n    1 | 2 | 64,\n    1 | 2 | 64,\n    1 | 2 | 64,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    1 | 2,\n    0,\n    1,\n    0,\n    0,\n    1 | 2 | 4096,\n    0,\n    1 | 2 | 4 | 64,\n    1 | 2 | 4 | 64,\n    1 | 2 | 4 | 64,\n    1 | 2 | 4 | 64,\n    1 | 2 | 4 | 64,\n    1 | 2 | 4 | 64,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    1 | 2 | 4,\n    16384,\n    0,\n    0,\n    0,\n    0\n];\nconst isIdStart = [\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    1,\n    0,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0\n];\nconst isIdPart = [\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    1,\n    0,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0\n];\nfunction isIdentifierStart(code) {\n    return code <= 0x7F\n        ? isIdStart[code] > 0\n        : isIDStart(code);\n}\nfunction isIdentifierPart(code) {\n    return code <= 0x7F\n        ? isIdPart[code] > 0\n        : isIDContinue(code) || (code === 8204 || code === 8205);\n}\n\nconst CommentTypes = ['SingleLine', 'MultiLine', 'HTMLOpen', 'HTMLClose', 'HashbangComment'];\nfunction skipHashBang(parser) {\n    const { source } = parser;\n    if (parser.currentChar === 35 && source.charCodeAt(parser.index + 1) === 33) {\n        advanceChar(parser);\n        advanceChar(parser);\n        skipSingleLineComment(parser, source, 0, 4, parser.tokenStart);\n    }\n}\nfunction skipSingleHTMLComment(parser, source, state, context, type, start) {\n    if (context & 2)\n        parser.report(0);\n    return skipSingleLineComment(parser, source, state, type, start);\n}\nfunction skipSingleLineComment(parser, source, state, type, start) {\n    const { index } = parser;\n    parser.tokenIndex = parser.index;\n    parser.tokenLine = parser.line;\n    parser.tokenColumn = parser.column;\n    while (parser.index < parser.end) {\n        if (CharTypes[parser.currentChar] & 8) {\n            const isCR = parser.currentChar === 13;\n            scanNewLine(parser);\n            if (isCR && parser.index < parser.end && parser.currentChar === 10)\n                parser.currentChar = source.charCodeAt(++parser.index);\n            break;\n        }\n        else if ((parser.currentChar ^ 8232) <= 1) {\n            scanNewLine(parser);\n            break;\n        }\n        advanceChar(parser);\n        parser.tokenIndex = parser.index;\n        parser.tokenLine = parser.line;\n        parser.tokenColumn = parser.column;\n    }\n    if (parser.options.onComment) {\n        const loc = {\n            start: {\n                line: start.line,\n                column: start.column,\n            },\n            end: {\n                line: parser.tokenLine,\n                column: parser.tokenColumn,\n            },\n        };\n        parser.options.onComment(CommentTypes[type & 0xff], source.slice(index, parser.tokenIndex), start.index, parser.tokenIndex, loc);\n    }\n    return state | 1;\n}\nfunction skipMultiLineComment(parser, source, state) {\n    const { index } = parser;\n    while (parser.index < parser.end) {\n        if (parser.currentChar < 0x2b) {\n            let skippedOneAsterisk = false;\n            while (parser.currentChar === 42) {\n                if (!skippedOneAsterisk) {\n                    state &= -5;\n                    skippedOneAsterisk = true;\n                }\n                if (advanceChar(parser) === 47) {\n                    advanceChar(parser);\n                    if (parser.options.onComment) {\n                        const loc = {\n                            start: {\n                                line: parser.tokenLine,\n                                column: parser.tokenColumn,\n                            },\n                            end: {\n                                line: parser.line,\n                                column: parser.column,\n                            },\n                        };\n                        parser.options.onComment(CommentTypes[1 & 0xff], source.slice(index, parser.index - 2), index - 2, parser.index, loc);\n                    }\n                    parser.tokenIndex = parser.index;\n                    parser.tokenLine = parser.line;\n                    parser.tokenColumn = parser.column;\n                    return state;\n                }\n            }\n            if (skippedOneAsterisk) {\n                continue;\n            }\n            if (CharTypes[parser.currentChar] & 8) {\n                if (parser.currentChar === 13) {\n                    state |= 1 | 4;\n                    scanNewLine(parser);\n                }\n                else {\n                    consumeLineFeed(parser, state);\n                    state = (state & -5) | 1;\n                }\n            }\n            else {\n                advanceChar(parser);\n            }\n        }\n        else if ((parser.currentChar ^ 8232) <= 1) {\n            state = (state & -5) | 1;\n            scanNewLine(parser);\n        }\n        else {\n            state &= -5;\n            advanceChar(parser);\n        }\n    }\n    parser.report(18);\n}\n\nvar RegexState;\n(function (RegexState) {\n    RegexState[RegexState[\"Empty\"] = 0] = \"Empty\";\n    RegexState[RegexState[\"Escape\"] = 1] = \"Escape\";\n    RegexState[RegexState[\"Class\"] = 2] = \"Class\";\n})(RegexState || (RegexState = {}));\nvar RegexFlags;\n(function (RegexFlags) {\n    RegexFlags[RegexFlags[\"Empty\"] = 0] = \"Empty\";\n    RegexFlags[RegexFlags[\"IgnoreCase\"] = 1] = \"IgnoreCase\";\n    RegexFlags[RegexFlags[\"Global\"] = 2] = \"Global\";\n    RegexFlags[RegexFlags[\"Multiline\"] = 4] = \"Multiline\";\n    RegexFlags[RegexFlags[\"Unicode\"] = 16] = \"Unicode\";\n    RegexFlags[RegexFlags[\"Sticky\"] = 8] = \"Sticky\";\n    RegexFlags[RegexFlags[\"DotAll\"] = 32] = \"DotAll\";\n    RegexFlags[RegexFlags[\"Indices\"] = 64] = \"Indices\";\n    RegexFlags[RegexFlags[\"UnicodeSets\"] = 128] = \"UnicodeSets\";\n})(RegexFlags || (RegexFlags = {}));\nfunction scanRegularExpression(parser) {\n    const bodyStart = parser.index;\n    let preparseState = RegexState.Empty;\n    loop: while (true) {\n        const ch = parser.currentChar;\n        advanceChar(parser);\n        if (preparseState & RegexState.Escape) {\n            preparseState &= ~RegexState.Escape;\n        }\n        else {\n            switch (ch) {\n                case 47:\n                    if (!preparseState)\n                        break loop;\n                    else\n                        break;\n                case 92:\n                    preparseState |= RegexState.Escape;\n                    break;\n                case 91:\n                    preparseState |= RegexState.Class;\n                    break;\n                case 93:\n                    preparseState &= RegexState.Escape;\n                    break;\n            }\n        }\n        if (ch === 13 ||\n            ch === 10 ||\n            ch === 8232 ||\n            ch === 8233) {\n            parser.report(34);\n        }\n        if (parser.index >= parser.source.length) {\n            return parser.report(34);\n        }\n    }\n    const bodyEnd = parser.index - 1;\n    let mask = RegexFlags.Empty;\n    let char = parser.currentChar;\n    const { index: flagStart } = parser;\n    while (isIdentifierPart(char)) {\n        switch (char) {\n            case 103:\n                if (mask & RegexFlags.Global)\n                    parser.report(36, 'g');\n                mask |= RegexFlags.Global;\n                break;\n            case 105:\n                if (mask & RegexFlags.IgnoreCase)\n                    parser.report(36, 'i');\n                mask |= RegexFlags.IgnoreCase;\n                break;\n            case 109:\n                if (mask & RegexFlags.Multiline)\n                    parser.report(36, 'm');\n                mask |= RegexFlags.Multiline;\n                break;\n            case 117:\n                if (mask & RegexFlags.Unicode)\n                    parser.report(36, 'u');\n                if (mask & RegexFlags.UnicodeSets)\n                    parser.report(36, 'vu');\n                mask |= RegexFlags.Unicode;\n                break;\n            case 118:\n                if (mask & RegexFlags.Unicode)\n                    parser.report(36, 'uv');\n                if (mask & RegexFlags.UnicodeSets)\n                    parser.report(36, 'v');\n                mask |= RegexFlags.UnicodeSets;\n                break;\n            case 121:\n                if (mask & RegexFlags.Sticky)\n                    parser.report(36, 'y');\n                mask |= RegexFlags.Sticky;\n                break;\n            case 115:\n                if (mask & RegexFlags.DotAll)\n                    parser.report(36, 's');\n                mask |= RegexFlags.DotAll;\n                break;\n            case 100:\n                if (mask & RegexFlags.Indices)\n                    parser.report(36, 'd');\n                mask |= RegexFlags.Indices;\n                break;\n            default:\n                parser.report(35);\n        }\n        char = advanceChar(parser);\n    }\n    const flags = parser.source.slice(flagStart, parser.index);\n    const pattern = parser.source.slice(bodyStart, bodyEnd);\n    parser.tokenRegExp = { pattern, flags };\n    if (parser.options.raw)\n        parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);\n    parser.tokenValue = validate(parser, pattern, flags);\n    return 65540;\n}\nfunction validate(parser, pattern, flags) {\n    try {\n        return new RegExp(pattern, flags);\n    }\n    catch {\n        try {\n            new RegExp(pattern, flags);\n            return null;\n        }\n        catch {\n            parser.report(34);\n        }\n    }\n}\n\nfunction scanString(parser, context, quote) {\n    const { index: start } = parser;\n    let ret = '';\n    let char = advanceChar(parser);\n    let marker = parser.index;\n    while ((CharTypes[char] & 8) === 0) {\n        if (char === quote) {\n            ret += parser.source.slice(marker, parser.index);\n            advanceChar(parser);\n            if (parser.options.raw)\n                parser.tokenRaw = parser.source.slice(start, parser.index);\n            parser.tokenValue = ret;\n            return 134283267;\n        }\n        if ((char & 8) === 8 && char === 92) {\n            ret += parser.source.slice(marker, parser.index);\n            char = advanceChar(parser);\n            if (char < 0x7f || char === 8232 || char === 8233) {\n                const code = parseEscape(parser, context, char);\n                if (code >= 0)\n                    ret += String.fromCodePoint(code);\n                else\n                    handleStringError(parser, code, 0);\n            }\n            else {\n                ret += String.fromCodePoint(char);\n            }\n            marker = parser.index + 1;\n        }\n        else if (char === 8232 || char === 8233) {\n            parser.column = -1;\n            parser.line++;\n        }\n        if (parser.index >= parser.end)\n            parser.report(16);\n        char = advanceChar(parser);\n    }\n    parser.report(16);\n}\nfunction parseEscape(parser, context, first, isTemplate = 0) {\n    switch (first) {\n        case 98:\n            return 8;\n        case 102:\n            return 12;\n        case 114:\n            return 13;\n        case 110:\n            return 10;\n        case 116:\n            return 9;\n        case 118:\n            return 11;\n        case 13: {\n            if (parser.index < parser.end) {\n                const nextChar = parser.source.charCodeAt(parser.index + 1);\n                if (nextChar === 10) {\n                    parser.index = parser.index + 1;\n                    parser.currentChar = nextChar;\n                }\n            }\n        }\n        case 10:\n        case 8232:\n        case 8233:\n            parser.column = -1;\n            parser.line++;\n            return -1;\n        case 48:\n        case 49:\n        case 50:\n        case 51: {\n            let code = first - 48;\n            let index = parser.index + 1;\n            let column = parser.column + 1;\n            if (index < parser.end) {\n                const next = parser.source.charCodeAt(index);\n                if ((CharTypes[next] & 32) === 0) {\n                    if (code !== 0 || CharTypes[next] & 512) {\n                        if (context & 1 || isTemplate)\n                            return -2;\n                        parser.flags |= 64;\n                    }\n                }\n                else if (context & 1 || isTemplate) {\n                    return -2;\n                }\n                else {\n                    parser.currentChar = next;\n                    code = (code << 3) | (next - 48);\n                    index++;\n                    column++;\n                    if (index < parser.end) {\n                        const next = parser.source.charCodeAt(index);\n                        if (CharTypes[next] & 32) {\n                            parser.currentChar = next;\n                            code = (code << 3) | (next - 48);\n                            index++;\n                            column++;\n                        }\n                    }\n                    parser.flags |= 64;\n                }\n                parser.index = index - 1;\n                parser.column = column - 1;\n            }\n            return code;\n        }\n        case 52:\n        case 53:\n        case 54:\n        case 55: {\n            if (isTemplate || context & 1)\n                return -2;\n            let code = first - 48;\n            const index = parser.index + 1;\n            const column = parser.column + 1;\n            if (index < parser.end) {\n                const next = parser.source.charCodeAt(index);\n                if (CharTypes[next] & 32) {\n                    code = (code << 3) | (next - 48);\n                    parser.currentChar = next;\n                    parser.index = index;\n                    parser.column = column;\n                }\n            }\n            parser.flags |= 64;\n            return code;\n        }\n        case 120: {\n            const ch1 = advanceChar(parser);\n            if ((CharTypes[ch1] & 64) === 0)\n                return -4;\n            const hi = toHex(ch1);\n            const ch2 = advanceChar(parser);\n            if ((CharTypes[ch2] & 64) === 0)\n                return -4;\n            const lo = toHex(ch2);\n            return (hi << 4) | lo;\n        }\n        case 117: {\n            const ch = advanceChar(parser);\n            if (parser.currentChar === 123) {\n                let code = 0;\n                while ((CharTypes[advanceChar(parser)] & 64) !== 0) {\n                    code = (code << 4) | toHex(parser.currentChar);\n                    if (code > 1114111)\n                        return -5;\n                }\n                if (parser.currentChar < 1 || parser.currentChar !== 125) {\n                    return -4;\n                }\n                return code;\n            }\n            else {\n                if ((CharTypes[ch] & 64) === 0)\n                    return -4;\n                const ch2 = parser.source.charCodeAt(parser.index + 1);\n                if ((CharTypes[ch2] & 64) === 0)\n                    return -4;\n                const ch3 = parser.source.charCodeAt(parser.index + 2);\n                if ((CharTypes[ch3] & 64) === 0)\n                    return -4;\n                const ch4 = parser.source.charCodeAt(parser.index + 3);\n                if ((CharTypes[ch4] & 64) === 0)\n                    return -4;\n                parser.index += 3;\n                parser.column += 3;\n                parser.currentChar = parser.source.charCodeAt(parser.index);\n                return (toHex(ch) << 12) | (toHex(ch2) << 8) | (toHex(ch3) << 4) | toHex(ch4);\n            }\n        }\n        case 56:\n        case 57:\n            if (isTemplate || !parser.options.webcompat || context & 1)\n                return -3;\n            parser.flags |= 4096;\n        default:\n            return first;\n    }\n}\nfunction handleStringError(parser, code, isTemplate) {\n    switch (code) {\n        case -1:\n            return;\n        case -2:\n            parser.report(isTemplate ? 2 : 1);\n        case -3:\n            parser.report(isTemplate ? 3 : 14);\n        case -4:\n            parser.report(7);\n        case -5:\n            parser.report(104);\n    }\n}\n\nfunction scanTemplate(parser, context) {\n    const { index: start } = parser;\n    let token = 67174409;\n    let ret = '';\n    let char = advanceChar(parser);\n    while (char !== 96) {\n        if (char === 36 && parser.source.charCodeAt(parser.index + 1) === 123) {\n            advanceChar(parser);\n            token = 67174408;\n            break;\n        }\n        else if (char === 92) {\n            char = advanceChar(parser);\n            if (char > 0x7e) {\n                ret += String.fromCodePoint(char);\n            }\n            else {\n                const { index, line, column } = parser;\n                const code = parseEscape(parser, context | 1, char, 1);\n                if (code >= 0) {\n                    ret += String.fromCodePoint(code);\n                }\n                else if (code !== -1 && context & 64) {\n                    parser.index = index;\n                    parser.line = line;\n                    parser.column = column;\n                    ret = null;\n                    char = scanBadTemplate(parser, char);\n                    if (char < 0)\n                        token = 67174408;\n                    break;\n                }\n                else {\n                    handleStringError(parser, code, 1);\n                }\n            }\n        }\n        else if (parser.index < parser.end) {\n            if (char === 13 && parser.source.charCodeAt(parser.index) === 10) {\n                ret += String.fromCodePoint(char);\n                parser.currentChar = parser.source.charCodeAt(++parser.index);\n            }\n            if (((char & 83) < 3 && char === 10) || (char ^ 8232) <= 1) {\n                parser.column = -1;\n                parser.line++;\n            }\n            ret += String.fromCodePoint(char);\n        }\n        if (parser.index >= parser.end)\n            parser.report(17);\n        char = advanceChar(parser);\n    }\n    advanceChar(parser);\n    parser.tokenValue = ret;\n    parser.tokenRaw = parser.source.slice(start + 1, parser.index - (token === 67174409 ? 1 : 2));\n    return token;\n}\nfunction scanBadTemplate(parser, ch) {\n    while (ch !== 96) {\n        switch (ch) {\n            case 36: {\n                const index = parser.index + 1;\n                if (index < parser.end && parser.source.charCodeAt(index) === 123) {\n                    parser.index = index;\n                    parser.column++;\n                    return -ch;\n                }\n                break;\n            }\n            case 10:\n            case 8232:\n            case 8233:\n                parser.column = -1;\n                parser.line++;\n        }\n        if (parser.index >= parser.end)\n            parser.report(17);\n        ch = advanceChar(parser);\n    }\n    return ch;\n}\nfunction scanTemplateTail(parser, context) {\n    if (parser.index >= parser.end)\n        parser.report(0);\n    parser.index--;\n    parser.column--;\n    return scanTemplate(parser, context);\n}\n\nconst errorMessages = {\n    [0]: 'Unexpected token',\n    [30]: \"Unexpected token: '%0'\",\n    [1]: 'Octal escape sequences are not allowed in strict mode',\n    [2]: 'Octal escape sequences are not allowed in template strings',\n    [3]: '\\\\8 and \\\\9 are not allowed in template strings',\n    [4]: 'Private identifier #%0 is not defined',\n    [5]: 'Illegal Unicode escape sequence',\n    [6]: 'Invalid code point %0',\n    [7]: 'Invalid hexadecimal escape sequence',\n    [9]: 'Octal literals are not allowed in strict mode',\n    [8]: 'Decimal integer literals with a leading zero are forbidden in strict mode',\n    [10]: 'Expected number in radix %0',\n    [151]: 'Invalid left-hand side assignment to a destructible right-hand side',\n    [11]: 'Non-number found after exponent indicator',\n    [12]: 'Invalid BigIntLiteral',\n    [13]: 'No identifiers allowed directly after numeric literal',\n    [14]: 'Escapes \\\\8 or \\\\9 are not syntactically valid escapes',\n    [15]: 'Escapes \\\\8 or \\\\9 are not allowed in strict mode',\n    [16]: 'Unterminated string literal',\n    [17]: 'Unterminated template literal',\n    [18]: 'Multiline comment was not closed properly',\n    [19]: 'The identifier contained dynamic unicode escape that was not closed',\n    [20]: \"Illegal character '%0'\",\n    [21]: 'Missing hexadecimal digits',\n    [22]: 'Invalid implicit octal',\n    [23]: 'Invalid line break in string literal',\n    [24]: 'Only unicode escapes are legal in identifier names',\n    [25]: \"Expected '%0'\",\n    [26]: 'Invalid left-hand side in assignment',\n    [27]: 'Invalid left-hand side in async arrow',\n    [28]: 'Calls to super must be in the \"constructor\" method of a class expression or class declaration that has a superclass',\n    [29]: 'Member access on super must be in a method',\n    [31]: 'Await expression not allowed in formal parameter',\n    [32]: 'Yield expression not allowed in formal parameter',\n    [95]: \"Unexpected token: 'escaped keyword'\",\n    [33]: 'Unary expressions as the left operand of an exponentiation expression must be disambiguated with parentheses',\n    [123]: 'Async functions can only be declared at the top level or inside a block',\n    [34]: 'Unterminated regular expression',\n    [35]: 'Unexpected regular expression flag',\n    [36]: \"Duplicate regular expression flag '%0'\",\n    [37]: '%0 functions must have exactly %1 argument%2',\n    [38]: 'Setter function argument must not be a rest parameter',\n    [39]: '%0 declaration must have a name in this context',\n    [40]: 'Function name may not contain any reserved words or be eval or arguments in strict mode',\n    [41]: 'The rest operator is missing an argument',\n    [42]: 'A getter cannot be a generator',\n    [43]: 'A setter cannot be a generator',\n    [44]: 'A computed property name must be followed by a colon or paren',\n    [134]: 'Object literal keys that are strings or numbers must be a method or have a colon',\n    [46]: 'Found `* async x(){}` but this should be `async * x(){}`',\n    [45]: 'Getters and setters can not be generators',\n    [47]: \"'%0' can not be generator method\",\n    [48]: \"No line break is allowed after '=>'\",\n    [49]: 'The left-hand side of the arrow can only be destructed through assignment',\n    [50]: 'The binding declaration is not destructible',\n    [51]: 'Async arrow can not be followed by new expression',\n    [52]: \"Classes may not have a static property named 'prototype'\",\n    [53]: 'Class constructor may not be a %0',\n    [54]: 'Duplicate constructor method in class',\n    [55]: 'Invalid increment/decrement operand',\n    [56]: 'Invalid use of `new` keyword on an increment/decrement expression',\n    [57]: '`=>` is an invalid assignment target',\n    [58]: 'Rest element may not have a trailing comma',\n    [59]: 'Missing initializer in %0 declaration',\n    [60]: \"'for-%0' loop head declarations can not have an initializer\",\n    [61]: 'Invalid left-hand side in for-%0 loop: Must have a single binding',\n    [62]: 'Invalid shorthand property initializer',\n    [63]: 'Property name __proto__ appears more than once in object literal',\n    [64]: 'Let is disallowed as a lexically bound name',\n    [65]: \"Invalid use of '%0' inside new expression\",\n    [66]: \"Illegal 'use strict' directive in function with non-simple parameter list\",\n    [67]: 'Identifier \"let\" disallowed as left-hand side expression in strict mode',\n    [68]: 'Illegal continue statement',\n    [69]: 'Illegal break statement',\n    [70]: 'Cannot have `let[...]` as a var name in strict mode',\n    [71]: 'Invalid destructuring assignment target',\n    [72]: 'Rest parameter may not have a default initializer',\n    [73]: 'The rest argument must the be last parameter',\n    [74]: 'Invalid rest argument',\n    [76]: 'In strict mode code, functions can only be declared at top level or inside a block',\n    [77]: 'In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement',\n    [78]: 'Without web compatibility enabled functions can not be declared at top level, inside a block, or as the body of an if statement',\n    [79]: \"Class declaration can't appear in single-statement context\",\n    [80]: 'Invalid left-hand side in for-%0',\n    [81]: 'Invalid assignment in for-%0',\n    [82]: 'for await (... of ...) is only valid in async functions and async generators',\n    [83]: 'The first token after the template expression should be a continuation of the template',\n    [85]: '`let` declaration not allowed here and `let` cannot be a regular var name in strict mode',\n    [84]: '`let \\n [` is a restricted production at the start of a statement',\n    [86]: 'Catch clause requires exactly one parameter, not more (and no trailing comma)',\n    [87]: 'Catch clause parameter does not support default values',\n    [88]: 'Missing catch or finally after try',\n    [89]: 'More than one default clause in switch statement',\n    [90]: 'Illegal newline after throw',\n    [91]: 'Strict mode code may not include a with statement',\n    [92]: 'Illegal return statement',\n    [93]: 'The left hand side of the for-header binding declaration is not destructible',\n    [94]: 'new.target only allowed within functions or static blocks',\n    [96]: \"'#' not followed by identifier\",\n    [102]: 'Invalid keyword',\n    [101]: \"Can not use 'let' as a class name\",\n    [100]: \"'A lexical declaration can't define a 'let' binding\",\n    [99]: 'Can not use `let` as variable name in strict mode',\n    [97]: \"'%0' may not be used as an identifier in this context\",\n    [98]: 'Await is only valid in async functions',\n    [103]: 'The %0 keyword can only be used with the module goal',\n    [104]: 'Unicode codepoint must not be greater than 0x10FFFF',\n    [105]: '%0 source must be string',\n    [106]: 'Only a identifier or string can be used to indicate alias',\n    [107]: \"Only '*' or '{...}' can be imported after default\",\n    [108]: 'Trailing decorator may be followed by method',\n    [109]: \"Decorators can't be used with a constructor\",\n    [110]: 'Can not use `await` as identifier in module or async func',\n    [111]: 'Can not use `await` as identifier in module',\n    [112]: 'HTML comments are only allowed with web compatibility (Annex B)',\n    [113]: \"The identifier 'let' must not be in expression position in strict mode\",\n    [114]: 'Cannot assign to `eval` and `arguments` in strict mode',\n    [115]: \"The left-hand side of a for-of loop may not start with 'let'\",\n    [116]: 'Block body arrows can not be immediately invoked without a group',\n    [117]: 'Block body arrows can not be immediately accessed without a group',\n    [118]: 'Unexpected strict mode reserved word',\n    [119]: 'Unexpected eval or arguments in strict mode',\n    [120]: 'Decorators must not be followed by a semicolon',\n    [121]: 'Calling delete on expression not allowed in strict mode',\n    [122]: 'Pattern can not have a tail',\n    [124]: 'Can not have a `yield` expression on the left side of a ternary',\n    [125]: 'An arrow function can not have a postfix update operator',\n    [126]: 'Invalid object literal key character after generator star',\n    [127]: 'Private fields can not be deleted',\n    [129]: 'Classes may not have a field called constructor',\n    [128]: 'Classes may not have a private element named constructor',\n    [130]: 'A class field initializer or static block may not contain arguments',\n    [131]: 'Generators can only be declared at the top level or inside a block',\n    [132]: 'Async methods are a restricted production and cannot have a newline following it',\n    [133]: 'Unexpected character after object literal property name',\n    [135]: 'Invalid key token',\n    [136]: \"Label '%0' has already been declared\",\n    [137]: 'continue statement must be nested within an iteration statement',\n    [138]: \"Undefined label '%0'\",\n    [139]: 'Trailing comma is disallowed inside import(...) arguments',\n    [140]: 'Invalid binding in JSON import',\n    [141]: 'import() requires exactly one argument',\n    [142]: 'Cannot use new with import(...)',\n    [143]: '... is not allowed in import()',\n    [144]: \"Expected '=>'\",\n    [145]: \"Duplicate binding '%0'\",\n    [146]: 'Duplicate private identifier #%0',\n    [147]: \"Cannot export a duplicate name '%0'\",\n    [150]: 'Duplicate %0 for-binding',\n    [148]: \"Exported binding '%0' needs to refer to a top-level declared variable\",\n    [149]: 'Unexpected private field',\n    [153]: 'Numeric separators are not allowed at the end of numeric literals',\n    [152]: 'Only one underscore is allowed as numeric separator',\n    [154]: 'JSX value should be either an expression or a quoted JSX text',\n    [155]: 'Expected corresponding JSX closing tag for %0',\n    [156]: 'Adjacent JSX elements must be wrapped in an enclosing tag',\n    [157]: \"JSX attributes must only be assigned a non-empty 'expression'\",\n    [158]: \"'%0' has already been declared\",\n    [159]: \"'%0' shadowed a catch clause binding\",\n    [160]: 'Dot property must be an identifier',\n    [161]: 'Encountered invalid input after spread/rest argument',\n    [162]: 'Catch without try',\n    [163]: 'Finally without try',\n    [164]: 'Expected corresponding closing tag for JSX fragment',\n    [165]: 'Coalescing and logical operators used together in the same expression must be disambiguated with parentheses',\n    [166]: 'Invalid tagged template on optional chain',\n    [167]: 'Invalid optional chain from super property',\n    [168]: 'Invalid optional chain from new expression',\n    [169]: 'Cannot use \"import.meta\" outside a module',\n    [170]: 'Leading decorators must be attached to a class declaration',\n    [171]: 'An export name cannot include a lone surrogate, found %0',\n    [172]: 'A string literal cannot be used as an exported binding without `from`',\n    [173]: \"Private fields can't be accessed on super\",\n    [174]: \"The only valid meta property for import is 'import.meta'\",\n    [175]: \"'import.meta' must not contain escaped characters\",\n    [176]: 'cannot use \"await\" as identifier inside an async function',\n    [177]: 'cannot use \"await\" in static blocks',\n};\nclass ParseError extends SyntaxError {\n    start;\n    end;\n    range;\n    loc;\n    description;\n    constructor(start, end, type, ...params) {\n        const description = errorMessages[type].replace(/%(\\d+)/g, (_, i) => params[i]);\n        const message = '[' + start.line + ':' + start.column + '-' + end.line + ':' + end.column + ']: ' + description;\n        super(message);\n        this.start = start.index;\n        this.end = end.index;\n        this.range = [start.index, end.index];\n        this.loc = {\n            start: { line: start.line, column: start.column },\n            end: { line: end.line, column: end.column },\n        };\n        this.description = description;\n    }\n}\n\nfunction scanNumber(parser, context, kind) {\n    let char = parser.currentChar;\n    let value = 0;\n    let digit = 9;\n    let atStart = kind & 64 ? 0 : 1;\n    let digits = 0;\n    let allowSeparator = 0;\n    if (kind & 64) {\n        value = '.' + scanDecimalDigitsOrSeparator(parser, char);\n        char = parser.currentChar;\n        if (char === 110)\n            parser.report(12);\n    }\n    else {\n        if (char === 48) {\n            char = advanceChar(parser);\n            if ((char | 32) === 120) {\n                kind = 8 | 128;\n                char = advanceChar(parser);\n                while (CharTypes[char] & (64 | 4096)) {\n                    if (char === 95) {\n                        if (!allowSeparator)\n                            parser.report(152);\n                        allowSeparator = 0;\n                        char = advanceChar(parser);\n                        continue;\n                    }\n                    allowSeparator = 1;\n                    value = value * 0x10 + toHex(char);\n                    digits++;\n                    char = advanceChar(parser);\n                }\n                if (digits === 0 || !allowSeparator) {\n                    parser.report(digits === 0 ? 21 : 153);\n                }\n            }\n            else if ((char | 32) === 111) {\n                kind = 4 | 128;\n                char = advanceChar(parser);\n                while (CharTypes[char] & (32 | 4096)) {\n                    if (char === 95) {\n                        if (!allowSeparator) {\n                            parser.report(152);\n                        }\n                        allowSeparator = 0;\n                        char = advanceChar(parser);\n                        continue;\n                    }\n                    allowSeparator = 1;\n                    value = value * 8 + (char - 48);\n                    digits++;\n                    char = advanceChar(parser);\n                }\n                if (digits === 0 || !allowSeparator) {\n                    parser.report(digits === 0 ? 0 : 153);\n                }\n            }\n            else if ((char | 32) === 98) {\n                kind = 2 | 128;\n                char = advanceChar(parser);\n                while (CharTypes[char] & (128 | 4096)) {\n                    if (char === 95) {\n                        if (!allowSeparator) {\n                            parser.report(152);\n                        }\n                        allowSeparator = 0;\n                        char = advanceChar(parser);\n                        continue;\n                    }\n                    allowSeparator = 1;\n                    value = value * 2 + (char - 48);\n                    digits++;\n                    char = advanceChar(parser);\n                }\n                if (digits === 0 || !allowSeparator) {\n                    parser.report(digits === 0 ? 0 : 153);\n                }\n            }\n            else if (CharTypes[char] & 32) {\n                if (context & 1)\n                    parser.report(1);\n                kind = 1;\n                while (CharTypes[char] & 16) {\n                    if (CharTypes[char] & 512) {\n                        kind = 32;\n                        atStart = 0;\n                        break;\n                    }\n                    value = value * 8 + (char - 48);\n                    char = advanceChar(parser);\n                }\n            }\n            else if (CharTypes[char] & 512) {\n                if (context & 1)\n                    parser.report(1);\n                parser.flags |= 64;\n                kind = 32;\n            }\n            else if (char === 95) {\n                parser.report(0);\n            }\n        }\n        if (kind & 48) {\n            if (atStart) {\n                while (digit >= 0 && CharTypes[char] & (16 | 4096)) {\n                    if (char === 95) {\n                        char = advanceChar(parser);\n                        if (char === 95 || kind & 32) {\n                            throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 152);\n                        }\n                        allowSeparator = 1;\n                        continue;\n                    }\n                    allowSeparator = 0;\n                    value = 10 * value + (char - 48);\n                    char = advanceChar(parser);\n                    --digit;\n                }\n                if (allowSeparator) {\n                    throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 153);\n                }\n                if (digit >= 0 && !isIdentifierStart(char) && char !== 46) {\n                    parser.tokenValue = value;\n                    if (parser.options.raw)\n                        parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);\n                    return 134283266;\n                }\n            }\n            value += scanDecimalDigitsOrSeparator(parser, char);\n            char = parser.currentChar;\n            if (char === 46) {\n                if (advanceChar(parser) === 95)\n                    parser.report(0);\n                kind = 64;\n                value += '.' + scanDecimalDigitsOrSeparator(parser, parser.currentChar);\n                char = parser.currentChar;\n            }\n        }\n    }\n    const end = parser.index;\n    let isBigInt = 0;\n    if (char === 110 && kind & 128) {\n        isBigInt = 1;\n        char = advanceChar(parser);\n    }\n    else {\n        if ((char | 32) === 101) {\n            char = advanceChar(parser);\n            if (CharTypes[char] & 256)\n                char = advanceChar(parser);\n            const { index } = parser;\n            if ((CharTypes[char] & 16) === 0)\n                parser.report(11);\n            value += parser.source.substring(end, index) + scanDecimalDigitsOrSeparator(parser, char);\n            char = parser.currentChar;\n        }\n    }\n    if ((parser.index < parser.end && CharTypes[char] & 16) || isIdentifierStart(char)) {\n        parser.report(13);\n    }\n    if (isBigInt) {\n        parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);\n        parser.tokenValue = BigInt(parser.tokenRaw.slice(0, -1).replaceAll('_', ''));\n        return 134283388;\n    }\n    parser.tokenValue =\n        kind & (1 | 2 | 8 | 4)\n            ? value\n            : kind & 32\n                ? parseFloat(parser.source.substring(parser.tokenIndex, parser.index))\n                : +value;\n    if (parser.options.raw)\n        parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);\n    return 134283266;\n}\nfunction scanDecimalDigitsOrSeparator(parser, char) {\n    let allowSeparator = 0;\n    let start = parser.index;\n    let ret = '';\n    while (CharTypes[char] & (16 | 4096)) {\n        if (char === 95) {\n            const { index } = parser;\n            char = advanceChar(parser);\n            if (char === 95) {\n                throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 152);\n            }\n            allowSeparator = 1;\n            ret += parser.source.substring(start, index);\n            start = parser.index;\n            continue;\n        }\n        allowSeparator = 0;\n        char = advanceChar(parser);\n    }\n    if (allowSeparator) {\n        throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 153);\n    }\n    return ret + parser.source.substring(start, parser.index);\n}\n\nconst KeywordDescTable = [\n    'end of source',\n    'identifier', 'number', 'string', 'regular expression',\n    'false', 'true', 'null',\n    'template continuation', 'template tail',\n    '=>', '(', '{', '.', '...', '}', ')', ';', ',', '[', ']', ':', '?', '\\'', '\"',\n    '++', '--',\n    '=', '<<=', '>>=', '>>>=', '**=', '+=', '-=', '*=', '/=', '%=', '^=', '|=',\n    '&=', '||=', '&&=', '??=',\n    'typeof', 'delete', 'void', '!', '~', '+', '-', 'in', 'instanceof', '*', '%', '/', '**', '&&',\n    '||', '===', '!==', '==', '!=', '<=', '>=', '<', '>', '<<', '>>', '>>>', '&', '|', '^',\n    'var', 'let', 'const',\n    'break', 'case', 'catch', 'class', 'continue', 'debugger', 'default', 'do', 'else', 'export',\n    'extends', 'finally', 'for', 'function', 'if', 'import', 'new', 'return', 'super', 'switch',\n    'this', 'throw', 'try', 'while', 'with',\n    'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield',\n    'as', 'async', 'await', 'constructor', 'get', 'set', 'accessor', 'from', 'of',\n    'enum', 'eval', 'arguments', 'escaped keyword', 'escaped future reserved keyword', 'reserved if strict', '#',\n    'BigIntLiteral', '??', '?.', 'WhiteSpace', 'Illegal', 'LineTerminator', 'PrivateField',\n    'Template', '@', 'target', 'meta', 'LineFeed', 'Escaped', 'JSXText'\n];\nconst descKeywordTable = {\n    this: 86111,\n    function: 86104,\n    if: 20569,\n    return: 20572,\n    var: 86088,\n    else: 20563,\n    for: 20567,\n    new: 86107,\n    in: 8673330,\n    typeof: 16863275,\n    while: 20578,\n    case: 20556,\n    break: 20555,\n    try: 20577,\n    catch: 20557,\n    delete: 16863276,\n    throw: 86112,\n    switch: 86110,\n    continue: 20559,\n    default: 20561,\n    instanceof: 8411187,\n    do: 20562,\n    void: 16863277,\n    finally: 20566,\n    async: 209005,\n    await: 209006,\n    class: 86094,\n    const: 86090,\n    constructor: 12399,\n    debugger: 20560,\n    export: 20564,\n    extends: 20565,\n    false: 86021,\n    from: 209011,\n    get: 209008,\n    implements: 36964,\n    import: 86106,\n    interface: 36965,\n    let: 241737,\n    null: 86023,\n    of: 471156,\n    package: 36966,\n    private: 36967,\n    protected: 36968,\n    public: 36969,\n    set: 209009,\n    static: 36970,\n    super: 86109,\n    true: 86022,\n    with: 20579,\n    yield: 241771,\n    enum: 86133,\n    eval: 537079926,\n    as: 77932,\n    arguments: 537079927,\n    target: 209029,\n    meta: 209030,\n    accessor: 12402,\n};\n\nfunction matchOrInsertSemicolon(parser, context) {\n    if ((parser.flags & 1) === 0 && (parser.getToken() & 1048576) !== 1048576) {\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n    if (!consumeOpt(parser, context, 1074790417)) {\n        parser.options.onInsertedSemicolon?.(parser.startIndex);\n    }\n}\nfunction isValidStrictMode(parser, index, tokenIndex, tokenValue) {\n    if (index - tokenIndex < 13 && tokenValue === 'use strict') {\n        if ((parser.getToken() & 1048576) === 1048576 || parser.flags & 1) {\n            return 1;\n        }\n    }\n    return 0;\n}\nfunction optionalBit(parser, context, t) {\n    if (parser.getToken() !== t)\n        return 0;\n    nextToken(parser, context);\n    return 1;\n}\nfunction consumeOpt(parser, context, t) {\n    if (parser.getToken() !== t)\n        return false;\n    nextToken(parser, context);\n    return true;\n}\nfunction consume(parser, context, t) {\n    if (parser.getToken() !== t)\n        parser.report(25, KeywordDescTable[t & 255]);\n    nextToken(parser, context);\n}\nfunction reinterpretToPattern(parser, node) {\n    switch (node.type) {\n        case 'ArrayExpression': {\n            node.type = 'ArrayPattern';\n            const { elements } = node;\n            for (let i = 0, n = elements.length; i < n; ++i) {\n                const element = elements[i];\n                if (element)\n                    reinterpretToPattern(parser, element);\n            }\n            return;\n        }\n        case 'ObjectExpression': {\n            node.type = 'ObjectPattern';\n            const { properties } = node;\n            for (let i = 0, n = properties.length; i < n; ++i) {\n                reinterpretToPattern(parser, properties[i]);\n            }\n            return;\n        }\n        case 'AssignmentExpression':\n            node.type = 'AssignmentPattern';\n            if (node.operator !== '=')\n                parser.report(71);\n            delete node.operator;\n            reinterpretToPattern(parser, node.left);\n            return;\n        case 'Property':\n            reinterpretToPattern(parser, node.value);\n            return;\n        case 'SpreadElement':\n            node.type = 'RestElement';\n            reinterpretToPattern(parser, node.argument);\n    }\n}\nfunction validateBindingIdentifier(parser, context, kind, t, skipEvalArgCheck) {\n    if (context & 1) {\n        if ((t & 36864) === 36864) {\n            parser.report(118);\n        }\n        if (!skipEvalArgCheck && (t & 537079808) === 537079808) {\n            parser.report(119);\n        }\n    }\n    if ((t & 20480) === 20480 || t === -2147483528) {\n        parser.report(102);\n    }\n    if (kind & (8 | 16) && (t & 255) === (241737 & 255)) {\n        parser.report(100);\n    }\n    if (context & (2048 | 2) && t === 209006) {\n        parser.report(110);\n    }\n    if (context & (1024 | 1) && t === 241771) {\n        parser.report(97, 'yield');\n    }\n}\nfunction validateFunctionName(parser, context, t) {\n    if (context & 1) {\n        if ((t & 36864) === 36864) {\n            parser.report(118);\n        }\n        if ((t & 537079808) === 537079808) {\n            parser.report(119);\n        }\n        if (t === -2147483527) {\n            parser.report(95);\n        }\n        if (t === -2147483528) {\n            parser.report(95);\n        }\n    }\n    if ((t & 20480) === 20480) {\n        parser.report(102);\n    }\n    if (context & (2048 | 2) && t === 209006) {\n        parser.report(110);\n    }\n    if (context & (1024 | 1) && t === 241771) {\n        parser.report(97, 'yield');\n    }\n}\nfunction isStrictReservedWord(parser, context, t) {\n    if (t === 209006) {\n        if (context & (2048 | 2))\n            parser.report(110);\n        parser.destructible |= 128;\n    }\n    if (t === 241771 && context & 1024)\n        parser.report(97, 'yield');\n    return ((t & 20480) === 20480 ||\n        (t & 36864) === 36864 ||\n        t == -2147483527);\n}\nfunction isPropertyWithPrivateFieldKey(expr) {\n    return !expr.property ? false : expr.property.type === 'PrivateIdentifier';\n}\nfunction isValidLabel(parser, labels, name, isIterationStatement) {\n    while (labels) {\n        if (labels['$' + name]) {\n            if (isIterationStatement)\n                parser.report(137);\n            return 1;\n        }\n        if (isIterationStatement && labels.loop)\n            isIterationStatement = 0;\n        labels = labels['$'];\n    }\n    return 0;\n}\nfunction validateAndDeclareLabel(parser, labels, name) {\n    let set = labels;\n    while (set) {\n        if (set['$' + name])\n            parser.report(136, name);\n        set = set['$'];\n    }\n    labels['$' + name] = 1;\n}\nfunction isEqualTagName(elementName) {\n    switch (elementName.type) {\n        case 'JSXIdentifier':\n            return elementName.name;\n        case 'JSXNamespacedName':\n            return elementName.namespace + ':' + elementName.name;\n        case 'JSXMemberExpression':\n            return isEqualTagName(elementName.object) + '.' + isEqualTagName(elementName.property);\n    }\n}\nfunction isValidIdentifier(context, t) {\n    if (context & (1 | 1024)) {\n        if (context & 2 && t === 209006)\n            return false;\n        if (context & 1024 && t === 241771)\n            return false;\n        return (t & 12288) === 12288;\n    }\n    return (t & 12288) === 12288 || (t & 36864) === 36864;\n}\nfunction classifyIdentifier(parser, context, t) {\n    if ((t & 537079808) === 537079808) {\n        if (context & 1)\n            parser.report(119);\n        parser.flags |= 512;\n    }\n    if (!isValidIdentifier(context, t))\n        parser.report(0);\n}\nfunction getOwnProperty(object, key) {\n    return Object.hasOwn(object, key) ? object[key] : undefined;\n}\n\nfunction scanIdentifier(parser, context, isValidAsKeyword) {\n    while (isIdPart[advanceChar(parser)])\n        ;\n    parser.tokenValue = parser.source.slice(parser.tokenIndex, parser.index);\n    return parser.currentChar !== 92 && parser.currentChar <= 0x7e\n        ? (getOwnProperty(descKeywordTable, parser.tokenValue) ?? 208897)\n        : scanIdentifierSlowCase(parser, context, 0, isValidAsKeyword);\n}\nfunction scanUnicodeIdentifier(parser, context) {\n    const cookedChar = scanIdentifierUnicodeEscape(parser);\n    if (!isIdentifierStart(cookedChar))\n        parser.report(5);\n    parser.tokenValue = String.fromCodePoint(cookedChar);\n    return scanIdentifierSlowCase(parser, context, 1, CharTypes[cookedChar] & 4);\n}\nfunction scanIdentifierSlowCase(parser, context, hasEscape, isValidAsKeyword) {\n    let start = parser.index;\n    while (parser.index < parser.end) {\n        if (parser.currentChar === 92) {\n            parser.tokenValue += parser.source.slice(start, parser.index);\n            hasEscape = 1;\n            const code = scanIdentifierUnicodeEscape(parser);\n            if (!isIdentifierPart(code))\n                parser.report(5);\n            isValidAsKeyword = isValidAsKeyword && CharTypes[code] & 4;\n            parser.tokenValue += String.fromCodePoint(code);\n            start = parser.index;\n        }\n        else {\n            const merged = consumePossibleSurrogatePair(parser);\n            if (merged > 0) {\n                if (!isIdentifierPart(merged)) {\n                    parser.report(20, String.fromCodePoint(merged));\n                }\n                parser.currentChar = merged;\n                parser.index++;\n                parser.column++;\n            }\n            else if (!isIdentifierPart(parser.currentChar)) {\n                break;\n            }\n            advanceChar(parser);\n        }\n    }\n    if (parser.index <= parser.end) {\n        parser.tokenValue += parser.source.slice(start, parser.index);\n    }\n    const { length } = parser.tokenValue;\n    if (isValidAsKeyword && length >= 2 && length <= 11) {\n        const token = getOwnProperty(descKeywordTable, parser.tokenValue);\n        if (token === void 0)\n            return 208897 | (hasEscape ? -2147483648 : 0);\n        if (!hasEscape)\n            return token;\n        if (token === 209006) {\n            if ((context & (2 | 2048)) === 0) {\n                return token | -2147483648;\n            }\n            return -2147483528;\n        }\n        if (context & 1) {\n            if (token === 36970) {\n                return -2147483527;\n            }\n            if ((token & 36864) === 36864) {\n                return -2147483527;\n            }\n            if ((token & 20480) === 20480) {\n                if (context & 262144 && (context & 8) === 0) {\n                    return token | -2147483648;\n                }\n                else {\n                    return -2147483528;\n                }\n            }\n            return 209018 | -2147483648;\n        }\n        if (context & 262144 &&\n            (context & 8) === 0 &&\n            (token & 20480) === 20480) {\n            return token | -2147483648;\n        }\n        if (token === 241771) {\n            return context & 262144\n                ? 209018 | -2147483648\n                : context & 1024\n                    ? -2147483528\n                    : token | -2147483648;\n        }\n        if (token === 209005) {\n            return 209018 | -2147483648;\n        }\n        if ((token & 36864) === 36864) {\n            return token | 12288 | -2147483648;\n        }\n        return -2147483528;\n    }\n    return 208897 | (hasEscape ? -2147483648 : 0);\n}\nfunction scanPrivateIdentifier(parser) {\n    let char = advanceChar(parser);\n    if (char === 92)\n        return 130;\n    const merged = consumePossibleSurrogatePair(parser);\n    if (merged)\n        char = merged;\n    if (!isIdentifierStart(char))\n        parser.report(96);\n    return 130;\n}\nfunction scanIdentifierUnicodeEscape(parser) {\n    if (parser.source.charCodeAt(parser.index + 1) !== 117) {\n        parser.report(5);\n    }\n    parser.currentChar = parser.source.charCodeAt((parser.index += 2));\n    parser.column += 2;\n    return scanUnicodeEscape(parser);\n}\nfunction scanUnicodeEscape(parser) {\n    let codePoint = 0;\n    const char = parser.currentChar;\n    if (char === 123) {\n        const begin = parser.index - 2;\n        while (CharTypes[advanceChar(parser)] & 64) {\n            codePoint = (codePoint << 4) | toHex(parser.currentChar);\n            if (codePoint > 1114111)\n                throw new ParseError({ index: begin, line: parser.line, column: parser.column }, parser.currentLocation, 104);\n        }\n        if (parser.currentChar !== 125) {\n            throw new ParseError({ index: begin, line: parser.line, column: parser.column }, parser.currentLocation, 7);\n        }\n        advanceChar(parser);\n        return codePoint;\n    }\n    if ((CharTypes[char] & 64) === 0)\n        parser.report(7);\n    const char2 = parser.source.charCodeAt(parser.index + 1);\n    if ((CharTypes[char2] & 64) === 0)\n        parser.report(7);\n    const char3 = parser.source.charCodeAt(parser.index + 2);\n    if ((CharTypes[char3] & 64) === 0)\n        parser.report(7);\n    const char4 = parser.source.charCodeAt(parser.index + 3);\n    if ((CharTypes[char4] & 64) === 0)\n        parser.report(7);\n    codePoint = (toHex(char) << 12) | (toHex(char2) << 8) | (toHex(char3) << 4) | toHex(char4);\n    parser.currentChar = parser.source.charCodeAt((parser.index += 4));\n    parser.column += 4;\n    return codePoint;\n}\n\nconst TokenLookup = [\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    127,\n    135,\n    127,\n    127,\n    129,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    128,\n    127,\n    16842798,\n    134283267,\n    130,\n    208897,\n    8391477,\n    8390213,\n    134283267,\n    67174411,\n    16,\n    8391476,\n    25233968,\n    18,\n    25233969,\n    67108877,\n    8457014,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    134283266,\n    21,\n    1074790417,\n    8456256,\n    1077936155,\n    8390721,\n    22,\n    132,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    208897,\n    69271571,\n    136,\n    20,\n    8389959,\n    208897,\n    131,\n    4096,\n    4096,\n    4096,\n    4096,\n    4096,\n    4096,\n    4096,\n    208897,\n    4096,\n    208897,\n    208897,\n    4096,\n    208897,\n    4096,\n    208897,\n    4096,\n    208897,\n    4096,\n    4096,\n    4096,\n    208897,\n    4096,\n    4096,\n    208897,\n    4096,\n    4096,\n    2162700,\n    8389702,\n    1074790415,\n    16842799,\n    128,\n];\nfunction nextToken(parser, context) {\n    parser.flags = (parser.flags | 1) ^ 1;\n    parser.startIndex = parser.index;\n    parser.startColumn = parser.column;\n    parser.startLine = parser.line;\n    parser.setToken(scanSingleToken(parser, context, 0));\n}\nfunction scanSingleToken(parser, context, state) {\n    const isStartOfLine = parser.index === 0;\n    const { source } = parser;\n    let start = parser.currentLocation;\n    while (parser.index < parser.end) {\n        parser.tokenIndex = parser.index;\n        parser.tokenColumn = parser.column;\n        parser.tokenLine = parser.line;\n        let char = parser.currentChar;\n        if (char <= 0x7e) {\n            const token = TokenLookup[char];\n            switch (token) {\n                case 67174411:\n                case 16:\n                case 2162700:\n                case 1074790415:\n                case 69271571:\n                case 20:\n                case 21:\n                case 1074790417:\n                case 18:\n                case 16842799:\n                case 132:\n                case 128:\n                    advanceChar(parser);\n                    return token;\n                case 208897:\n                    return scanIdentifier(parser, context, 0);\n                case 4096:\n                    return scanIdentifier(parser, context, 1);\n                case 134283266:\n                    return scanNumber(parser, context, 16 | 128);\n                case 134283267:\n                    return scanString(parser, context, char);\n                case 131:\n                    return scanTemplate(parser, context);\n                case 136:\n                    return scanUnicodeIdentifier(parser, context);\n                case 130:\n                    return scanPrivateIdentifier(parser);\n                case 127:\n                    advanceChar(parser);\n                    break;\n                case 129:\n                    state |= 1 | 4;\n                    scanNewLine(parser);\n                    break;\n                case 135:\n                    consumeLineFeed(parser, state);\n                    state = (state & -5) | 1;\n                    break;\n                case 8456256: {\n                    const ch = advanceChar(parser);\n                    if (parser.index < parser.end) {\n                        if (ch === 60) {\n                            if (parser.index < parser.end && advanceChar(parser) === 61) {\n                                advanceChar(parser);\n                                return 4194332;\n                            }\n                            return 8390978;\n                        }\n                        else if (ch === 61) {\n                            advanceChar(parser);\n                            return 8390718;\n                        }\n                        if (ch === 33) {\n                            const index = parser.index + 1;\n                            if (index + 1 < parser.end &&\n                                source.charCodeAt(index) === 45 &&\n                                source.charCodeAt(index + 1) == 45) {\n                                parser.column += 3;\n                                parser.currentChar = source.charCodeAt((parser.index += 3));\n                                state = skipSingleHTMLComment(parser, source, state, context, 2, parser.tokenStart);\n                                start = parser.tokenStart;\n                                continue;\n                            }\n                            return 8456256;\n                        }\n                    }\n                    return 8456256;\n                }\n                case 1077936155: {\n                    advanceChar(parser);\n                    const ch = parser.currentChar;\n                    if (ch === 61) {\n                        if (advanceChar(parser) === 61) {\n                            advanceChar(parser);\n                            return 8390458;\n                        }\n                        return 8390460;\n                    }\n                    if (ch === 62) {\n                        advanceChar(parser);\n                        return 10;\n                    }\n                    return 1077936155;\n                }\n                case 16842798:\n                    if (advanceChar(parser) !== 61) {\n                        return 16842798;\n                    }\n                    if (advanceChar(parser) !== 61) {\n                        return 8390461;\n                    }\n                    advanceChar(parser);\n                    return 8390459;\n                case 8391477:\n                    if (advanceChar(parser) !== 61)\n                        return 8391477;\n                    advanceChar(parser);\n                    return 4194340;\n                case 8391476: {\n                    advanceChar(parser);\n                    if (parser.index >= parser.end)\n                        return 8391476;\n                    const ch = parser.currentChar;\n                    if (ch === 61) {\n                        advanceChar(parser);\n                        return 4194338;\n                    }\n                    if (ch !== 42)\n                        return 8391476;\n                    if (advanceChar(parser) !== 61)\n                        return 8391735;\n                    advanceChar(parser);\n                    return 4194335;\n                }\n                case 8389959:\n                    if (advanceChar(parser) !== 61)\n                        return 8389959;\n                    advanceChar(parser);\n                    return 4194341;\n                case 25233968: {\n                    advanceChar(parser);\n                    const ch = parser.currentChar;\n                    if (ch === 43) {\n                        advanceChar(parser);\n                        return 33619993;\n                    }\n                    if (ch === 61) {\n                        advanceChar(parser);\n                        return 4194336;\n                    }\n                    return 25233968;\n                }\n                case 25233969: {\n                    advanceChar(parser);\n                    const ch = parser.currentChar;\n                    if (ch === 45) {\n                        advanceChar(parser);\n                        if ((state & 1 || isStartOfLine) && parser.currentChar === 62) {\n                            if (!parser.options.webcompat)\n                                parser.report(112);\n                            advanceChar(parser);\n                            state = skipSingleHTMLComment(parser, source, state, context, 3, start);\n                            start = parser.tokenStart;\n                            continue;\n                        }\n                        return 33619994;\n                    }\n                    if (ch === 61) {\n                        advanceChar(parser);\n                        return 4194337;\n                    }\n                    return 25233969;\n                }\n                case 8457014: {\n                    advanceChar(parser);\n                    if (parser.index < parser.end) {\n                        const ch = parser.currentChar;\n                        if (ch === 47) {\n                            advanceChar(parser);\n                            state = skipSingleLineComment(parser, source, state, 0, parser.tokenStart);\n                            start = parser.tokenStart;\n                            continue;\n                        }\n                        if (ch === 42) {\n                            advanceChar(parser);\n                            state = skipMultiLineComment(parser, source, state);\n                            start = parser.tokenStart;\n                            continue;\n                        }\n                        if (context & 32) {\n                            return scanRegularExpression(parser);\n                        }\n                        if (ch === 61) {\n                            advanceChar(parser);\n                            return 4259875;\n                        }\n                    }\n                    return 8457014;\n                }\n                case 67108877: {\n                    const next = advanceChar(parser);\n                    if (next >= 48 && next <= 57)\n                        return scanNumber(parser, context, 64 | 16);\n                    if (next === 46) {\n                        const index = parser.index + 1;\n                        if (index < parser.end && source.charCodeAt(index) === 46) {\n                            parser.column += 2;\n                            parser.currentChar = source.charCodeAt((parser.index += 2));\n                            return 14;\n                        }\n                    }\n                    return 67108877;\n                }\n                case 8389702: {\n                    advanceChar(parser);\n                    const ch = parser.currentChar;\n                    if (ch === 124) {\n                        advanceChar(parser);\n                        if (parser.currentChar === 61) {\n                            advanceChar(parser);\n                            return 4194344;\n                        }\n                        return 8913465;\n                    }\n                    if (ch === 61) {\n                        advanceChar(parser);\n                        return 4194342;\n                    }\n                    return 8389702;\n                }\n                case 8390721: {\n                    advanceChar(parser);\n                    const ch = parser.currentChar;\n                    if (ch === 61) {\n                        advanceChar(parser);\n                        return 8390719;\n                    }\n                    if (ch !== 62)\n                        return 8390721;\n                    advanceChar(parser);\n                    if (parser.index < parser.end) {\n                        const ch = parser.currentChar;\n                        if (ch === 62) {\n                            if (advanceChar(parser) === 61) {\n                                advanceChar(parser);\n                                return 4194334;\n                            }\n                            return 8390980;\n                        }\n                        if (ch === 61) {\n                            advanceChar(parser);\n                            return 4194333;\n                        }\n                    }\n                    return 8390979;\n                }\n                case 8390213: {\n                    advanceChar(parser);\n                    const ch = parser.currentChar;\n                    if (ch === 38) {\n                        advanceChar(parser);\n                        if (parser.currentChar === 61) {\n                            advanceChar(parser);\n                            return 4194345;\n                        }\n                        return 8913720;\n                    }\n                    if (ch === 61) {\n                        advanceChar(parser);\n                        return 4194343;\n                    }\n                    return 8390213;\n                }\n                case 22: {\n                    let ch = advanceChar(parser);\n                    if (ch === 63) {\n                        advanceChar(parser);\n                        if (parser.currentChar === 61) {\n                            advanceChar(parser);\n                            return 4194346;\n                        }\n                        return 276824445;\n                    }\n                    if (ch === 46) {\n                        const index = parser.index + 1;\n                        if (index < parser.end) {\n                            ch = source.charCodeAt(index);\n                            if (!(ch >= 48 && ch <= 57)) {\n                                advanceChar(parser);\n                                return 67108990;\n                            }\n                        }\n                    }\n                    return 22;\n                }\n            }\n        }\n        else {\n            if ((char ^ 8232) <= 1) {\n                state = (state & -5) | 1;\n                scanNewLine(parser);\n                continue;\n            }\n            const merged = consumePossibleSurrogatePair(parser);\n            if (merged > 0)\n                char = merged;\n            if (isIDStart(char)) {\n                parser.tokenValue = '';\n                return scanIdentifierSlowCase(parser, context, 0, 0);\n            }\n            if (isExoticECMAScriptWhitespace(char)) {\n                advanceChar(parser);\n                continue;\n            }\n            parser.report(20, String.fromCodePoint(char));\n        }\n    }\n    return 1048576;\n}\n\nconst entities = {\n    AElig: '\\u00C6',\n    AMP: '\\u0026',\n    Aacute: '\\u00C1',\n    Abreve: '\\u0102',\n    Acirc: '\\u00C2',\n    Acy: '\\u0410',\n    Afr: '\\uD835\\uDD04',\n    Agrave: '\\u00C0',\n    Alpha: '\\u0391',\n    Amacr: '\\u0100',\n    And: '\\u2A53',\n    Aogon: '\\u0104',\n    Aopf: '\\uD835\\uDD38',\n    ApplyFunction: '\\u2061',\n    Aring: '\\u00C5',\n    Ascr: '\\uD835\\uDC9C',\n    Assign: '\\u2254',\n    Atilde: '\\u00C3',\n    Auml: '\\u00C4',\n    Backslash: '\\u2216',\n    Barv: '\\u2AE7',\n    Barwed: '\\u2306',\n    Bcy: '\\u0411',\n    Because: '\\u2235',\n    Bernoullis: '\\u212C',\n    Beta: '\\u0392',\n    Bfr: '\\uD835\\uDD05',\n    Bopf: '\\uD835\\uDD39',\n    Breve: '\\u02D8',\n    Bscr: '\\u212C',\n    Bumpeq: '\\u224E',\n    CHcy: '\\u0427',\n    COPY: '\\u00A9',\n    Cacute: '\\u0106',\n    Cap: '\\u22D2',\n    CapitalDifferentialD: '\\u2145',\n    Cayleys: '\\u212D',\n    Ccaron: '\\u010C',\n    Ccedil: '\\u00C7',\n    Ccirc: '\\u0108',\n    Cconint: '\\u2230',\n    Cdot: '\\u010A',\n    Cedilla: '\\u00B8',\n    CenterDot: '\\u00B7',\n    Cfr: '\\u212D',\n    Chi: '\\u03A7',\n    CircleDot: '\\u2299',\n    CircleMinus: '\\u2296',\n    CirclePlus: '\\u2295',\n    CircleTimes: '\\u2297',\n    ClockwiseContourIntegral: '\\u2232',\n    CloseCurlyDoubleQuote: '\\u201D',\n    CloseCurlyQuote: '\\u2019',\n    Colon: '\\u2237',\n    Colone: '\\u2A74',\n    Congruent: '\\u2261',\n    Conint: '\\u222F',\n    ContourIntegral: '\\u222E',\n    Copf: '\\u2102',\n    Coproduct: '\\u2210',\n    CounterClockwiseContourIntegral: '\\u2233',\n    Cross: '\\u2A2F',\n    Cscr: '\\uD835\\uDC9E',\n    Cup: '\\u22D3',\n    CupCap: '\\u224D',\n    DD: '\\u2145',\n    DDotrahd: '\\u2911',\n    DJcy: '\\u0402',\n    DScy: '\\u0405',\n    DZcy: '\\u040F',\n    Dagger: '\\u2021',\n    Darr: '\\u21A1',\n    Dashv: '\\u2AE4',\n    Dcaron: '\\u010E',\n    Dcy: '\\u0414',\n    Del: '\\u2207',\n    Delta: '\\u0394',\n    Dfr: '\\uD835\\uDD07',\n    DiacriticalAcute: '\\u00B4',\n    DiacriticalDot: '\\u02D9',\n    DiacriticalDoubleAcute: '\\u02DD',\n    DiacriticalGrave: '\\u0060',\n    DiacriticalTilde: '\\u02DC',\n    Diamond: '\\u22C4',\n    DifferentialD: '\\u2146',\n    Dopf: '\\uD835\\uDD3B',\n    Dot: '\\u00A8',\n    DotDot: '\\u20DC',\n    DotEqual: '\\u2250',\n    DoubleContourIntegral: '\\u222F',\n    DoubleDot: '\\u00A8',\n    DoubleDownArrow: '\\u21D3',\n    DoubleLeftArrow: '\\u21D0',\n    DoubleLeftRightArrow: '\\u21D4',\n    DoubleLeftTee: '\\u2AE4',\n    DoubleLongLeftArrow: '\\u27F8',\n    DoubleLongLeftRightArrow: '\\u27FA',\n    DoubleLongRightArrow: '\\u27F9',\n    DoubleRightArrow: '\\u21D2',\n    DoubleRightTee: '\\u22A8',\n    DoubleUpArrow: '\\u21D1',\n    DoubleUpDownArrow: '\\u21D5',\n    DoubleVerticalBar: '\\u2225',\n    DownArrow: '\\u2193',\n    DownArrowBar: '\\u2913',\n    DownArrowUpArrow: '\\u21F5',\n    DownBreve: '\\u0311',\n    DownLeftRightVector: '\\u2950',\n    DownLeftTeeVector: '\\u295E',\n    DownLeftVector: '\\u21BD',\n    DownLeftVectorBar: '\\u2956',\n    DownRightTeeVector: '\\u295F',\n    DownRightVector: '\\u21C1',\n    DownRightVectorBar: '\\u2957',\n    DownTee: '\\u22A4',\n    DownTeeArrow: '\\u21A7',\n    Downarrow: '\\u21D3',\n    Dscr: '\\uD835\\uDC9F',\n    Dstrok: '\\u0110',\n    ENG: '\\u014A',\n    ETH: '\\u00D0',\n    Eacute: '\\u00C9',\n    Ecaron: '\\u011A',\n    Ecirc: '\\u00CA',\n    Ecy: '\\u042D',\n    Edot: '\\u0116',\n    Efr: '\\uD835\\uDD08',\n    Egrave: '\\u00C8',\n    Element: '\\u2208',\n    Emacr: '\\u0112',\n    EmptySmallSquare: '\\u25FB',\n    EmptyVerySmallSquare: '\\u25AB',\n    Eogon: '\\u0118',\n    Eopf: '\\uD835\\uDD3C',\n    Epsilon: '\\u0395',\n    Equal: '\\u2A75',\n    EqualTilde: '\\u2242',\n    Equilibrium: '\\u21CC',\n    Escr: '\\u2130',\n    Esim: '\\u2A73',\n    Eta: '\\u0397',\n    Euml: '\\u00CB',\n    Exists: '\\u2203',\n    ExponentialE: '\\u2147',\n    Fcy: '\\u0424',\n    Ffr: '\\uD835\\uDD09',\n    FilledSmallSquare: '\\u25FC',\n    FilledVerySmallSquare: '\\u25AA',\n    Fopf: '\\uD835\\uDD3D',\n    ForAll: '\\u2200',\n    Fouriertrf: '\\u2131',\n    Fscr: '\\u2131',\n    GJcy: '\\u0403',\n    GT: '\\u003E',\n    Gamma: '\\u0393',\n    Gammad: '\\u03DC',\n    Gbreve: '\\u011E',\n    Gcedil: '\\u0122',\n    Gcirc: '\\u011C',\n    Gcy: '\\u0413',\n    Gdot: '\\u0120',\n    Gfr: '\\uD835\\uDD0A',\n    Gg: '\\u22D9',\n    Gopf: '\\uD835\\uDD3E',\n    GreaterEqual: '\\u2265',\n    GreaterEqualLess: '\\u22DB',\n    GreaterFullEqual: '\\u2267',\n    GreaterGreater: '\\u2AA2',\n    GreaterLess: '\\u2277',\n    GreaterSlantEqual: '\\u2A7E',\n    GreaterTilde: '\\u2273',\n    Gscr: '\\uD835\\uDCA2',\n    Gt: '\\u226B',\n    HARDcy: '\\u042A',\n    Hacek: '\\u02C7',\n    Hat: '\\u005E',\n    Hcirc: '\\u0124',\n    Hfr: '\\u210C',\n    HilbertSpace: '\\u210B',\n    Hopf: '\\u210D',\n    HorizontalLine: '\\u2500',\n    Hscr: '\\u210B',\n    Hstrok: '\\u0126',\n    HumpDownHump: '\\u224E',\n    HumpEqual: '\\u224F',\n    IEcy: '\\u0415',\n    IJlig: '\\u0132',\n    IOcy: '\\u0401',\n    Iacute: '\\u00CD',\n    Icirc: '\\u00CE',\n    Icy: '\\u0418',\n    Idot: '\\u0130',\n    Ifr: '\\u2111',\n    Igrave: '\\u00CC',\n    Im: '\\u2111',\n    Imacr: '\\u012A',\n    ImaginaryI: '\\u2148',\n    Implies: '\\u21D2',\n    Int: '\\u222C',\n    Integral: '\\u222B',\n    Intersection: '\\u22C2',\n    InvisibleComma: '\\u2063',\n    InvisibleTimes: '\\u2062',\n    Iogon: '\\u012E',\n    Iopf: '\\uD835\\uDD40',\n    Iota: '\\u0399',\n    Iscr: '\\u2110',\n    Itilde: '\\u0128',\n    Iukcy: '\\u0406',\n    Iuml: '\\u00CF',\n    Jcirc: '\\u0134',\n    Jcy: '\\u0419',\n    Jfr: '\\uD835\\uDD0D',\n    Jopf: '\\uD835\\uDD41',\n    Jscr: '\\uD835\\uDCA5',\n    Jsercy: '\\u0408',\n    Jukcy: '\\u0404',\n    KHcy: '\\u0425',\n    KJcy: '\\u040C',\n    Kappa: '\\u039A',\n    Kcedil: '\\u0136',\n    Kcy: '\\u041A',\n    Kfr: '\\uD835\\uDD0E',\n    Kopf: '\\uD835\\uDD42',\n    Kscr: '\\uD835\\uDCA6',\n    LJcy: '\\u0409',\n    LT: '\\u003C',\n    Lacute: '\\u0139',\n    Lambda: '\\u039B',\n    Lang: '\\u27EA',\n    Laplacetrf: '\\u2112',\n    Larr: '\\u219E',\n    Lcaron: '\\u013D',\n    Lcedil: '\\u013B',\n    Lcy: '\\u041B',\n    LeftAngleBracket: '\\u27E8',\n    LeftArrow: '\\u2190',\n    LeftArrowBar: '\\u21E4',\n    LeftArrowRightArrow: '\\u21C6',\n    LeftCeiling: '\\u2308',\n    LeftDoubleBracket: '\\u27E6',\n    LeftDownTeeVector: '\\u2961',\n    LeftDownVector: '\\u21C3',\n    LeftDownVectorBar: '\\u2959',\n    LeftFloor: '\\u230A',\n    LeftRightArrow: '\\u2194',\n    LeftRightVector: '\\u294E',\n    LeftTee: '\\u22A3',\n    LeftTeeArrow: '\\u21A4',\n    LeftTeeVector: '\\u295A',\n    LeftTriangle: '\\u22B2',\n    LeftTriangleBar: '\\u29CF',\n    LeftTriangleEqual: '\\u22B4',\n    LeftUpDownVector: '\\u2951',\n    LeftUpTeeVector: '\\u2960',\n    LeftUpVector: '\\u21BF',\n    LeftUpVectorBar: '\\u2958',\n    LeftVector: '\\u21BC',\n    LeftVectorBar: '\\u2952',\n    Leftarrow: '\\u21D0',\n    Leftrightarrow: '\\u21D4',\n    LessEqualGreater: '\\u22DA',\n    LessFullEqual: '\\u2266',\n    LessGreater: '\\u2276',\n    LessLess: '\\u2AA1',\n    LessSlantEqual: '\\u2A7D',\n    LessTilde: '\\u2272',\n    Lfr: '\\uD835\\uDD0F',\n    Ll: '\\u22D8',\n    Lleftarrow: '\\u21DA',\n    Lmidot: '\\u013F',\n    LongLeftArrow: '\\u27F5',\n    LongLeftRightArrow: '\\u27F7',\n    LongRightArrow: '\\u27F6',\n    Longleftarrow: '\\u27F8',\n    Longleftrightarrow: '\\u27FA',\n    Longrightarrow: '\\u27F9',\n    Lopf: '\\uD835\\uDD43',\n    LowerLeftArrow: '\\u2199',\n    LowerRightArrow: '\\u2198',\n    Lscr: '\\u2112',\n    Lsh: '\\u21B0',\n    Lstrok: '\\u0141',\n    Lt: '\\u226A',\n    Map: '\\u2905',\n    Mcy: '\\u041C',\n    MediumSpace: '\\u205F',\n    Mellintrf: '\\u2133',\n    Mfr: '\\uD835\\uDD10',\n    MinusPlus: '\\u2213',\n    Mopf: '\\uD835\\uDD44',\n    Mscr: '\\u2133',\n    Mu: '\\u039C',\n    NJcy: '\\u040A',\n    Nacute: '\\u0143',\n    Ncaron: '\\u0147',\n    Ncedil: '\\u0145',\n    Ncy: '\\u041D',\n    NegativeMediumSpace: '\\u200B',\n    NegativeThickSpace: '\\u200B',\n    NegativeThinSpace: '\\u200B',\n    NegativeVeryThinSpace: '\\u200B',\n    NestedGreaterGreater: '\\u226B',\n    NestedLessLess: '\\u226A',\n    NewLine: '\\u000A',\n    Nfr: '\\uD835\\uDD11',\n    NoBreak: '\\u2060',\n    NonBreakingSpace: '\\u00A0',\n    Nopf: '\\u2115',\n    Not: '\\u2AEC',\n    NotCongruent: '\\u2262',\n    NotCupCap: '\\u226D',\n    NotDoubleVerticalBar: '\\u2226',\n    NotElement: '\\u2209',\n    NotEqual: '\\u2260',\n    NotEqualTilde: '\\u2242\\u0338',\n    NotExists: '\\u2204',\n    NotGreater: '\\u226F',\n    NotGreaterEqual: '\\u2271',\n    NotGreaterFullEqual: '\\u2267\\u0338',\n    NotGreaterGreater: '\\u226B\\u0338',\n    NotGreaterLess: '\\u2279',\n    NotGreaterSlantEqual: '\\u2A7E\\u0338',\n    NotGreaterTilde: '\\u2275',\n    NotHumpDownHump: '\\u224E\\u0338',\n    NotHumpEqual: '\\u224F\\u0338',\n    NotLeftTriangle: '\\u22EA',\n    NotLeftTriangleBar: '\\u29CF\\u0338',\n    NotLeftTriangleEqual: '\\u22EC',\n    NotLess: '\\u226E',\n    NotLessEqual: '\\u2270',\n    NotLessGreater: '\\u2278',\n    NotLessLess: '\\u226A\\u0338',\n    NotLessSlantEqual: '\\u2A7D\\u0338',\n    NotLessTilde: '\\u2274',\n    NotNestedGreaterGreater: '\\u2AA2\\u0338',\n    NotNestedLessLess: '\\u2AA1\\u0338',\n    NotPrecedes: '\\u2280',\n    NotPrecedesEqual: '\\u2AAF\\u0338',\n    NotPrecedesSlantEqual: '\\u22E0',\n    NotReverseElement: '\\u220C',\n    NotRightTriangle: '\\u22EB',\n    NotRightTriangleBar: '\\u29D0\\u0338',\n    NotRightTriangleEqual: '\\u22ED',\n    NotSquareSubset: '\\u228F\\u0338',\n    NotSquareSubsetEqual: '\\u22E2',\n    NotSquareSuperset: '\\u2290\\u0338',\n    NotSquareSupersetEqual: '\\u22E3',\n    NotSubset: '\\u2282\\u20D2',\n    NotSubsetEqual: '\\u2288',\n    NotSucceeds: '\\u2281',\n    NotSucceedsEqual: '\\u2AB0\\u0338',\n    NotSucceedsSlantEqual: '\\u22E1',\n    NotSucceedsTilde: '\\u227F\\u0338',\n    NotSuperset: '\\u2283\\u20D2',\n    NotSupersetEqual: '\\u2289',\n    NotTilde: '\\u2241',\n    NotTildeEqual: '\\u2244',\n    NotTildeFullEqual: '\\u2247',\n    NotTildeTilde: '\\u2249',\n    NotVerticalBar: '\\u2224',\n    Nscr: '\\uD835\\uDCA9',\n    Ntilde: '\\u00D1',\n    Nu: '\\u039D',\n    OElig: '\\u0152',\n    Oacute: '\\u00D3',\n    Ocirc: '\\u00D4',\n    Ocy: '\\u041E',\n    Odblac: '\\u0150',\n    Ofr: '\\uD835\\uDD12',\n    Ograve: '\\u00D2',\n    Omacr: '\\u014C',\n    Omega: '\\u03A9',\n    Omicron: '\\u039F',\n    Oopf: '\\uD835\\uDD46',\n    OpenCurlyDoubleQuote: '\\u201C',\n    OpenCurlyQuote: '\\u2018',\n    Or: '\\u2A54',\n    Oscr: '\\uD835\\uDCAA',\n    Oslash: '\\u00D8',\n    Otilde: '\\u00D5',\n    Otimes: '\\u2A37',\n    Ouml: '\\u00D6',\n    OverBar: '\\u203E',\n    OverBrace: '\\u23DE',\n    OverBracket: '\\u23B4',\n    OverParenthesis: '\\u23DC',\n    PartialD: '\\u2202',\n    Pcy: '\\u041F',\n    Pfr: '\\uD835\\uDD13',\n    Phi: '\\u03A6',\n    Pi: '\\u03A0',\n    PlusMinus: '\\u00B1',\n    Poincareplane: '\\u210C',\n    Popf: '\\u2119',\n    Pr: '\\u2ABB',\n    Precedes: '\\u227A',\n    PrecedesEqual: '\\u2AAF',\n    PrecedesSlantEqual: '\\u227C',\n    PrecedesTilde: '\\u227E',\n    Prime: '\\u2033',\n    Product: '\\u220F',\n    Proportion: '\\u2237',\n    Proportional: '\\u221D',\n    Pscr: '\\uD835\\uDCAB',\n    Psi: '\\u03A8',\n    QUOT: '\\u0022',\n    Qfr: '\\uD835\\uDD14',\n    Qopf: '\\u211A',\n    Qscr: '\\uD835\\uDCAC',\n    RBarr: '\\u2910',\n    REG: '\\u00AE',\n    Racute: '\\u0154',\n    Rang: '\\u27EB',\n    Rarr: '\\u21A0',\n    Rarrtl: '\\u2916',\n    Rcaron: '\\u0158',\n    Rcedil: '\\u0156',\n    Rcy: '\\u0420',\n    Re: '\\u211C',\n    ReverseElement: '\\u220B',\n    ReverseEquilibrium: '\\u21CB',\n    ReverseUpEquilibrium: '\\u296F',\n    Rfr: '\\u211C',\n    Rho: '\\u03A1',\n    RightAngleBracket: '\\u27E9',\n    RightArrow: '\\u2192',\n    RightArrowBar: '\\u21E5',\n    RightArrowLeftArrow: '\\u21C4',\n    RightCeiling: '\\u2309',\n    RightDoubleBracket: '\\u27E7',\n    RightDownTeeVector: '\\u295D',\n    RightDownVector: '\\u21C2',\n    RightDownVectorBar: '\\u2955',\n    RightFloor: '\\u230B',\n    RightTee: '\\u22A2',\n    RightTeeArrow: '\\u21A6',\n    RightTeeVector: '\\u295B',\n    RightTriangle: '\\u22B3',\n    RightTriangleBar: '\\u29D0',\n    RightTriangleEqual: '\\u22B5',\n    RightUpDownVector: '\\u294F',\n    RightUpTeeVector: '\\u295C',\n    RightUpVector: '\\u21BE',\n    RightUpVectorBar: '\\u2954',\n    RightVector: '\\u21C0',\n    RightVectorBar: '\\u2953',\n    Rightarrow: '\\u21D2',\n    Ropf: '\\u211D',\n    RoundImplies: '\\u2970',\n    Rrightarrow: '\\u21DB',\n    Rscr: '\\u211B',\n    Rsh: '\\u21B1',\n    RuleDelayed: '\\u29F4',\n    SHCHcy: '\\u0429',\n    SHcy: '\\u0428',\n    SOFTcy: '\\u042C',\n    Sacute: '\\u015A',\n    Sc: '\\u2ABC',\n    Scaron: '\\u0160',\n    Scedil: '\\u015E',\n    Scirc: '\\u015C',\n    Scy: '\\u0421',\n    Sfr: '\\uD835\\uDD16',\n    ShortDownArrow: '\\u2193',\n    ShortLeftArrow: '\\u2190',\n    ShortRightArrow: '\\u2192',\n    ShortUpArrow: '\\u2191',\n    Sigma: '\\u03A3',\n    SmallCircle: '\\u2218',\n    Sopf: '\\uD835\\uDD4A',\n    Sqrt: '\\u221A',\n    Square: '\\u25A1',\n    SquareIntersection: '\\u2293',\n    SquareSubset: '\\u228F',\n    SquareSubsetEqual: '\\u2291',\n    SquareSuperset: '\\u2290',\n    SquareSupersetEqual: '\\u2292',\n    SquareUnion: '\\u2294',\n    Sscr: '\\uD835\\uDCAE',\n    Star: '\\u22C6',\n    Sub: '\\u22D0',\n    Subset: '\\u22D0',\n    SubsetEqual: '\\u2286',\n    Succeeds: '\\u227B',\n    SucceedsEqual: '\\u2AB0',\n    SucceedsSlantEqual: '\\u227D',\n    SucceedsTilde: '\\u227F',\n    SuchThat: '\\u220B',\n    Sum: '\\u2211',\n    Sup: '\\u22D1',\n    Superset: '\\u2283',\n    SupersetEqual: '\\u2287',\n    Supset: '\\u22D1',\n    THORN: '\\u00DE',\n    TRADE: '\\u2122',\n    TSHcy: '\\u040B',\n    TScy: '\\u0426',\n    Tab: '\\u0009',\n    Tau: '\\u03A4',\n    Tcaron: '\\u0164',\n    Tcedil: '\\u0162',\n    Tcy: '\\u0422',\n    Tfr: '\\uD835\\uDD17',\n    Therefore: '\\u2234',\n    Theta: '\\u0398',\n    ThickSpace: '\\u205F\\u200A',\n    ThinSpace: '\\u2009',\n    Tilde: '\\u223C',\n    TildeEqual: '\\u2243',\n    TildeFullEqual: '\\u2245',\n    TildeTilde: '\\u2248',\n    Topf: '\\uD835\\uDD4B',\n    TripleDot: '\\u20DB',\n    Tscr: '\\uD835\\uDCAF',\n    Tstrok: '\\u0166',\n    Uacute: '\\u00DA',\n    Uarr: '\\u219F',\n    Uarrocir: '\\u2949',\n    Ubrcy: '\\u040E',\n    Ubreve: '\\u016C',\n    Ucirc: '\\u00DB',\n    Ucy: '\\u0423',\n    Udblac: '\\u0170',\n    Ufr: '\\uD835\\uDD18',\n    Ugrave: '\\u00D9',\n    Umacr: '\\u016A',\n    UnderBar: '\\u005F',\n    UnderBrace: '\\u23DF',\n    UnderBracket: '\\u23B5',\n    UnderParenthesis: '\\u23DD',\n    Union: '\\u22C3',\n    UnionPlus: '\\u228E',\n    Uogon: '\\u0172',\n    Uopf: '\\uD835\\uDD4C',\n    UpArrow: '\\u2191',\n    UpArrowBar: '\\u2912',\n    UpArrowDownArrow: '\\u21C5',\n    UpDownArrow: '\\u2195',\n    UpEquilibrium: '\\u296E',\n    UpTee: '\\u22A5',\n    UpTeeArrow: '\\u21A5',\n    Uparrow: '\\u21D1',\n    Updownarrow: '\\u21D5',\n    UpperLeftArrow: '\\u2196',\n    UpperRightArrow: '\\u2197',\n    Upsi: '\\u03D2',\n    Upsilon: '\\u03A5',\n    Uring: '\\u016E',\n    Uscr: '\\uD835\\uDCB0',\n    Utilde: '\\u0168',\n    Uuml: '\\u00DC',\n    VDash: '\\u22AB',\n    Vbar: '\\u2AEB',\n    Vcy: '\\u0412',\n    Vdash: '\\u22A9',\n    Vdashl: '\\u2AE6',\n    Vee: '\\u22C1',\n    Verbar: '\\u2016',\n    Vert: '\\u2016',\n    VerticalBar: '\\u2223',\n    VerticalLine: '\\u007C',\n    VerticalSeparator: '\\u2758',\n    VerticalTilde: '\\u2240',\n    VeryThinSpace: '\\u200A',\n    Vfr: '\\uD835\\uDD19',\n    Vopf: '\\uD835\\uDD4D',\n    Vscr: '\\uD835\\uDCB1',\n    Vvdash: '\\u22AA',\n    Wcirc: '\\u0174',\n    Wedge: '\\u22C0',\n    Wfr: '\\uD835\\uDD1A',\n    Wopf: '\\uD835\\uDD4E',\n    Wscr: '\\uD835\\uDCB2',\n    Xfr: '\\uD835\\uDD1B',\n    Xi: '\\u039E',\n    Xopf: '\\uD835\\uDD4F',\n    Xscr: '\\uD835\\uDCB3',\n    YAcy: '\\u042F',\n    YIcy: '\\u0407',\n    YUcy: '\\u042E',\n    Yacute: '\\u00DD',\n    Ycirc: '\\u0176',\n    Ycy: '\\u042B',\n    Yfr: '\\uD835\\uDD1C',\n    Yopf: '\\uD835\\uDD50',\n    Yscr: '\\uD835\\uDCB4',\n    Yuml: '\\u0178',\n    ZHcy: '\\u0416',\n    Zacute: '\\u0179',\n    Zcaron: '\\u017D',\n    Zcy: '\\u0417',\n    Zdot: '\\u017B',\n    ZeroWidthSpace: '\\u200B',\n    Zeta: '\\u0396',\n    Zfr: '\\u2128',\n    Zopf: '\\u2124',\n    Zscr: '\\uD835\\uDCB5',\n    aacute: '\\u00E1',\n    abreve: '\\u0103',\n    ac: '\\u223E',\n    acE: '\\u223E\\u0333',\n    acd: '\\u223F',\n    acirc: '\\u00E2',\n    acute: '\\u00B4',\n    acy: '\\u0430',\n    aelig: '\\u00E6',\n    af: '\\u2061',\n    afr: '\\uD835\\uDD1E',\n    agrave: '\\u00E0',\n    alefsym: '\\u2135',\n    aleph: '\\u2135',\n    alpha: '\\u03B1',\n    amacr: '\\u0101',\n    amalg: '\\u2A3F',\n    amp: '\\u0026',\n    and: '\\u2227',\n    andand: '\\u2A55',\n    andd: '\\u2A5C',\n    andslope: '\\u2A58',\n    andv: '\\u2A5A',\n    ang: '\\u2220',\n    ange: '\\u29A4',\n    angle: '\\u2220',\n    angmsd: '\\u2221',\n    angmsdaa: '\\u29A8',\n    angmsdab: '\\u29A9',\n    angmsdac: '\\u29AA',\n    angmsdad: '\\u29AB',\n    angmsdae: '\\u29AC',\n    angmsdaf: '\\u29AD',\n    angmsdag: '\\u29AE',\n    angmsdah: '\\u29AF',\n    angrt: '\\u221F',\n    angrtvb: '\\u22BE',\n    angrtvbd: '\\u299D',\n    angsph: '\\u2222',\n    angst: '\\u00C5',\n    angzarr: '\\u237C',\n    aogon: '\\u0105',\n    aopf: '\\uD835\\uDD52',\n    ap: '\\u2248',\n    apE: '\\u2A70',\n    apacir: '\\u2A6F',\n    ape: '\\u224A',\n    apid: '\\u224B',\n    apos: '\\u0027',\n    approx: '\\u2248',\n    approxeq: '\\u224A',\n    aring: '\\u00E5',\n    ascr: '\\uD835\\uDCB6',\n    ast: '\\u002A',\n    asymp: '\\u2248',\n    asympeq: '\\u224D',\n    atilde: '\\u00E3',\n    auml: '\\u00E4',\n    awconint: '\\u2233',\n    awint: '\\u2A11',\n    bNot: '\\u2AED',\n    backcong: '\\u224C',\n    backepsilon: '\\u03F6',\n    backprime: '\\u2035',\n    backsim: '\\u223D',\n    backsimeq: '\\u22CD',\n    barvee: '\\u22BD',\n    barwed: '\\u2305',\n    barwedge: '\\u2305',\n    bbrk: '\\u23B5',\n    bbrktbrk: '\\u23B6',\n    bcong: '\\u224C',\n    bcy: '\\u0431',\n    bdquo: '\\u201E',\n    becaus: '\\u2235',\n    because: '\\u2235',\n    bemptyv: '\\u29B0',\n    bepsi: '\\u03F6',\n    bernou: '\\u212C',\n    beta: '\\u03B2',\n    beth: '\\u2136',\n    between: '\\u226C',\n    bfr: '\\uD835\\uDD1F',\n    bigcap: '\\u22C2',\n    bigcirc: '\\u25EF',\n    bigcup: '\\u22C3',\n    bigodot: '\\u2A00',\n    bigoplus: '\\u2A01',\n    bigotimes: '\\u2A02',\n    bigsqcup: '\\u2A06',\n    bigstar: '\\u2605',\n    bigtriangledown: '\\u25BD',\n    bigtriangleup: '\\u25B3',\n    biguplus: '\\u2A04',\n    bigvee: '\\u22C1',\n    bigwedge: '\\u22C0',\n    bkarow: '\\u290D',\n    blacklozenge: '\\u29EB',\n    blacksquare: '\\u25AA',\n    blacktriangle: '\\u25B4',\n    blacktriangledown: '\\u25BE',\n    blacktriangleleft: '\\u25C2',\n    blacktriangleright: '\\u25B8',\n    blank: '\\u2423',\n    blk12: '\\u2592',\n    blk14: '\\u2591',\n    blk34: '\\u2593',\n    block: '\\u2588',\n    bne: '\\u003D\\u20E5',\n    bnequiv: '\\u2261\\u20E5',\n    bnot: '\\u2310',\n    bopf: '\\uD835\\uDD53',\n    bot: '\\u22A5',\n    bottom: '\\u22A5',\n    bowtie: '\\u22C8',\n    boxDL: '\\u2557',\n    boxDR: '\\u2554',\n    boxDl: '\\u2556',\n    boxDr: '\\u2553',\n    boxH: '\\u2550',\n    boxHD: '\\u2566',\n    boxHU: '\\u2569',\n    boxHd: '\\u2564',\n    boxHu: '\\u2567',\n    boxUL: '\\u255D',\n    boxUR: '\\u255A',\n    boxUl: '\\u255C',\n    boxUr: '\\u2559',\n    boxV: '\\u2551',\n    boxVH: '\\u256C',\n    boxVL: '\\u2563',\n    boxVR: '\\u2560',\n    boxVh: '\\u256B',\n    boxVl: '\\u2562',\n    boxVr: '\\u255F',\n    boxbox: '\\u29C9',\n    boxdL: '\\u2555',\n    boxdR: '\\u2552',\n    boxdl: '\\u2510',\n    boxdr: '\\u250C',\n    boxh: '\\u2500',\n    boxhD: '\\u2565',\n    boxhU: '\\u2568',\n    boxhd: '\\u252C',\n    boxhu: '\\u2534',\n    boxminus: '\\u229F',\n    boxplus: '\\u229E',\n    boxtimes: '\\u22A0',\n    boxuL: '\\u255B',\n    boxuR: '\\u2558',\n    boxul: '\\u2518',\n    boxur: '\\u2514',\n    boxv: '\\u2502',\n    boxvH: '\\u256A',\n    boxvL: '\\u2561',\n    boxvR: '\\u255E',\n    boxvh: '\\u253C',\n    boxvl: '\\u2524',\n    boxvr: '\\u251C',\n    bprime: '\\u2035',\n    breve: '\\u02D8',\n    brvbar: '\\u00A6',\n    bscr: '\\uD835\\uDCB7',\n    bsemi: '\\u204F',\n    bsim: '\\u223D',\n    bsime: '\\u22CD',\n    bsol: '\\u005C',\n    bsolb: '\\u29C5',\n    bsolhsub: '\\u27C8',\n    bull: '\\u2022',\n    bullet: '\\u2022',\n    bump: '\\u224E',\n    bumpE: '\\u2AAE',\n    bumpe: '\\u224F',\n    bumpeq: '\\u224F',\n    cacute: '\\u0107',\n    cap: '\\u2229',\n    capand: '\\u2A44',\n    capbrcup: '\\u2A49',\n    capcap: '\\u2A4B',\n    capcup: '\\u2A47',\n    capdot: '\\u2A40',\n    caps: '\\u2229\\uFE00',\n    caret: '\\u2041',\n    caron: '\\u02C7',\n    ccaps: '\\u2A4D',\n    ccaron: '\\u010D',\n    ccedil: '\\u00E7',\n    ccirc: '\\u0109',\n    ccups: '\\u2A4C',\n    ccupssm: '\\u2A50',\n    cdot: '\\u010B',\n    cedil: '\\u00B8',\n    cemptyv: '\\u29B2',\n    cent: '\\u00A2',\n    centerdot: '\\u00B7',\n    cfr: '\\uD835\\uDD20',\n    chcy: '\\u0447',\n    check: '\\u2713',\n    checkmark: '\\u2713',\n    chi: '\\u03C7',\n    cir: '\\u25CB',\n    cirE: '\\u29C3',\n    circ: '\\u02C6',\n    circeq: '\\u2257',\n    circlearrowleft: '\\u21BA',\n    circlearrowright: '\\u21BB',\n    circledR: '\\u00AE',\n    circledS: '\\u24C8',\n    circledast: '\\u229B',\n    circledcirc: '\\u229A',\n    circleddash: '\\u229D',\n    cire: '\\u2257',\n    cirfnint: '\\u2A10',\n    cirmid: '\\u2AEF',\n    cirscir: '\\u29C2',\n    clubs: '\\u2663',\n    clubsuit: '\\u2663',\n    colon: '\\u003A',\n    colone: '\\u2254',\n    coloneq: '\\u2254',\n    comma: '\\u002C',\n    commat: '\\u0040',\n    comp: '\\u2201',\n    compfn: '\\u2218',\n    complement: '\\u2201',\n    complexes: '\\u2102',\n    cong: '\\u2245',\n    congdot: '\\u2A6D',\n    conint: '\\u222E',\n    copf: '\\uD835\\uDD54',\n    coprod: '\\u2210',\n    copy: '\\u00A9',\n    copysr: '\\u2117',\n    crarr: '\\u21B5',\n    cross: '\\u2717',\n    cscr: '\\uD835\\uDCB8',\n    csub: '\\u2ACF',\n    csube: '\\u2AD1',\n    csup: '\\u2AD0',\n    csupe: '\\u2AD2',\n    ctdot: '\\u22EF',\n    cudarrl: '\\u2938',\n    cudarrr: '\\u2935',\n    cuepr: '\\u22DE',\n    cuesc: '\\u22DF',\n    cularr: '\\u21B6',\n    cularrp: '\\u293D',\n    cup: '\\u222A',\n    cupbrcap: '\\u2A48',\n    cupcap: '\\u2A46',\n    cupcup: '\\u2A4A',\n    cupdot: '\\u228D',\n    cupor: '\\u2A45',\n    cups: '\\u222A\\uFE00',\n    curarr: '\\u21B7',\n    curarrm: '\\u293C',\n    curlyeqprec: '\\u22DE',\n    curlyeqsucc: '\\u22DF',\n    curlyvee: '\\u22CE',\n    curlywedge: '\\u22CF',\n    curren: '\\u00A4',\n    curvearrowleft: '\\u21B6',\n    curvearrowright: '\\u21B7',\n    cuvee: '\\u22CE',\n    cuwed: '\\u22CF',\n    cwconint: '\\u2232',\n    cwint: '\\u2231',\n    cylcty: '\\u232D',\n    dArr: '\\u21D3',\n    dHar: '\\u2965',\n    dagger: '\\u2020',\n    daleth: '\\u2138',\n    darr: '\\u2193',\n    dash: '\\u2010',\n    dashv: '\\u22A3',\n    dbkarow: '\\u290F',\n    dblac: '\\u02DD',\n    dcaron: '\\u010F',\n    dcy: '\\u0434',\n    dd: '\\u2146',\n    ddagger: '\\u2021',\n    ddarr: '\\u21CA',\n    ddotseq: '\\u2A77',\n    deg: '\\u00B0',\n    delta: '\\u03B4',\n    demptyv: '\\u29B1',\n    dfisht: '\\u297F',\n    dfr: '\\uD835\\uDD21',\n    dharl: '\\u21C3',\n    dharr: '\\u21C2',\n    diam: '\\u22C4',\n    diamond: '\\u22C4',\n    diamondsuit: '\\u2666',\n    diams: '\\u2666',\n    die: '\\u00A8',\n    digamma: '\\u03DD',\n    disin: '\\u22F2',\n    div: '\\u00F7',\n    divide: '\\u00F7',\n    divideontimes: '\\u22C7',\n    divonx: '\\u22C7',\n    djcy: '\\u0452',\n    dlcorn: '\\u231E',\n    dlcrop: '\\u230D',\n    dollar: '\\u0024',\n    dopf: '\\uD835\\uDD55',\n    dot: '\\u02D9',\n    doteq: '\\u2250',\n    doteqdot: '\\u2251',\n    dotminus: '\\u2238',\n    dotplus: '\\u2214',\n    dotsquare: '\\u22A1',\n    doublebarwedge: '\\u2306',\n    downarrow: '\\u2193',\n    downdownarrows: '\\u21CA',\n    downharpoonleft: '\\u21C3',\n    downharpoonright: '\\u21C2',\n    drbkarow: '\\u2910',\n    drcorn: '\\u231F',\n    drcrop: '\\u230C',\n    dscr: '\\uD835\\uDCB9',\n    dscy: '\\u0455',\n    dsol: '\\u29F6',\n    dstrok: '\\u0111',\n    dtdot: '\\u22F1',\n    dtri: '\\u25BF',\n    dtrif: '\\u25BE',\n    duarr: '\\u21F5',\n    duhar: '\\u296F',\n    dwangle: '\\u29A6',\n    dzcy: '\\u045F',\n    dzigrarr: '\\u27FF',\n    eDDot: '\\u2A77',\n    eDot: '\\u2251',\n    eacute: '\\u00E9',\n    easter: '\\u2A6E',\n    ecaron: '\\u011B',\n    ecir: '\\u2256',\n    ecirc: '\\u00EA',\n    ecolon: '\\u2255',\n    ecy: '\\u044D',\n    edot: '\\u0117',\n    ee: '\\u2147',\n    efDot: '\\u2252',\n    efr: '\\uD835\\uDD22',\n    eg: '\\u2A9A',\n    egrave: '\\u00E8',\n    egs: '\\u2A96',\n    egsdot: '\\u2A98',\n    el: '\\u2A99',\n    elinters: '\\u23E7',\n    ell: '\\u2113',\n    els: '\\u2A95',\n    elsdot: '\\u2A97',\n    emacr: '\\u0113',\n    empty: '\\u2205',\n    emptyset: '\\u2205',\n    emptyv: '\\u2205',\n    emsp13: '\\u2004',\n    emsp14: '\\u2005',\n    emsp: '\\u2003',\n    eng: '\\u014B',\n    ensp: '\\u2002',\n    eogon: '\\u0119',\n    eopf: '\\uD835\\uDD56',\n    epar: '\\u22D5',\n    eparsl: '\\u29E3',\n    eplus: '\\u2A71',\n    epsi: '\\u03B5',\n    epsilon: '\\u03B5',\n    epsiv: '\\u03F5',\n    eqcirc: '\\u2256',\n    eqcolon: '\\u2255',\n    eqsim: '\\u2242',\n    eqslantgtr: '\\u2A96',\n    eqslantless: '\\u2A95',\n    equals: '\\u003D',\n    equest: '\\u225F',\n    equiv: '\\u2261',\n    equivDD: '\\u2A78',\n    eqvparsl: '\\u29E5',\n    erDot: '\\u2253',\n    erarr: '\\u2971',\n    escr: '\\u212F',\n    esdot: '\\u2250',\n    esim: '\\u2242',\n    eta: '\\u03B7',\n    eth: '\\u00F0',\n    euml: '\\u00EB',\n    euro: '\\u20AC',\n    excl: '\\u0021',\n    exist: '\\u2203',\n    expectation: '\\u2130',\n    exponentiale: '\\u2147',\n    fallingdotseq: '\\u2252',\n    fcy: '\\u0444',\n    female: '\\u2640',\n    ffilig: '\\uFB03',\n    fflig: '\\uFB00',\n    ffllig: '\\uFB04',\n    ffr: '\\uD835\\uDD23',\n    filig: '\\uFB01',\n    fjlig: '\\u0066\\u006A',\n    flat: '\\u266D',\n    fllig: '\\uFB02',\n    fltns: '\\u25B1',\n    fnof: '\\u0192',\n    fopf: '\\uD835\\uDD57',\n    forall: '\\u2200',\n    fork: '\\u22D4',\n    forkv: '\\u2AD9',\n    fpartint: '\\u2A0D',\n    frac12: '\\u00BD',\n    frac13: '\\u2153',\n    frac14: '\\u00BC',\n    frac15: '\\u2155',\n    frac16: '\\u2159',\n    frac18: '\\u215B',\n    frac23: '\\u2154',\n    frac25: '\\u2156',\n    frac34: '\\u00BE',\n    frac35: '\\u2157',\n    frac38: '\\u215C',\n    frac45: '\\u2158',\n    frac56: '\\u215A',\n    frac58: '\\u215D',\n    frac78: '\\u215E',\n    frasl: '\\u2044',\n    frown: '\\u2322',\n    fscr: '\\uD835\\uDCBB',\n    gE: '\\u2267',\n    gEl: '\\u2A8C',\n    gacute: '\\u01F5',\n    gamma: '\\u03B3',\n    gammad: '\\u03DD',\n    gap: '\\u2A86',\n    gbreve: '\\u011F',\n    gcirc: '\\u011D',\n    gcy: '\\u0433',\n    gdot: '\\u0121',\n    ge: '\\u2265',\n    gel: '\\u22DB',\n    geq: '\\u2265',\n    geqq: '\\u2267',\n    geqslant: '\\u2A7E',\n    ges: '\\u2A7E',\n    gescc: '\\u2AA9',\n    gesdot: '\\u2A80',\n    gesdoto: '\\u2A82',\n    gesdotol: '\\u2A84',\n    gesl: '\\u22DB\\uFE00',\n    gesles: '\\u2A94',\n    gfr: '\\uD835\\uDD24',\n    gg: '\\u226B',\n    ggg: '\\u22D9',\n    gimel: '\\u2137',\n    gjcy: '\\u0453',\n    gl: '\\u2277',\n    glE: '\\u2A92',\n    gla: '\\u2AA5',\n    glj: '\\u2AA4',\n    gnE: '\\u2269',\n    gnap: '\\u2A8A',\n    gnapprox: '\\u2A8A',\n    gne: '\\u2A88',\n    gneq: '\\u2A88',\n    gneqq: '\\u2269',\n    gnsim: '\\u22E7',\n    gopf: '\\uD835\\uDD58',\n    grave: '\\u0060',\n    gscr: '\\u210A',\n    gsim: '\\u2273',\n    gsime: '\\u2A8E',\n    gsiml: '\\u2A90',\n    gt: '\\u003E',\n    gtcc: '\\u2AA7',\n    gtcir: '\\u2A7A',\n    gtdot: '\\u22D7',\n    gtlPar: '\\u2995',\n    gtquest: '\\u2A7C',\n    gtrapprox: '\\u2A86',\n    gtrarr: '\\u2978',\n    gtrdot: '\\u22D7',\n    gtreqless: '\\u22DB',\n    gtreqqless: '\\u2A8C',\n    gtrless: '\\u2277',\n    gtrsim: '\\u2273',\n    gvertneqq: '\\u2269\\uFE00',\n    gvnE: '\\u2269\\uFE00',\n    hArr: '\\u21D4',\n    hairsp: '\\u200A',\n    half: '\\u00BD',\n    hamilt: '\\u210B',\n    hardcy: '\\u044A',\n    harr: '\\u2194',\n    harrcir: '\\u2948',\n    harrw: '\\u21AD',\n    hbar: '\\u210F',\n    hcirc: '\\u0125',\n    hearts: '\\u2665',\n    heartsuit: '\\u2665',\n    hellip: '\\u2026',\n    hercon: '\\u22B9',\n    hfr: '\\uD835\\uDD25',\n    hksearow: '\\u2925',\n    hkswarow: '\\u2926',\n    hoarr: '\\u21FF',\n    homtht: '\\u223B',\n    hookleftarrow: '\\u21A9',\n    hookrightarrow: '\\u21AA',\n    hopf: '\\uD835\\uDD59',\n    horbar: '\\u2015',\n    hscr: '\\uD835\\uDCBD',\n    hslash: '\\u210F',\n    hstrok: '\\u0127',\n    hybull: '\\u2043',\n    hyphen: '\\u2010',\n    iacute: '\\u00ED',\n    ic: '\\u2063',\n    icirc: '\\u00EE',\n    icy: '\\u0438',\n    iecy: '\\u0435',\n    iexcl: '\\u00A1',\n    iff: '\\u21D4',\n    ifr: '\\uD835\\uDD26',\n    igrave: '\\u00EC',\n    ii: '\\u2148',\n    iiiint: '\\u2A0C',\n    iiint: '\\u222D',\n    iinfin: '\\u29DC',\n    iiota: '\\u2129',\n    ijlig: '\\u0133',\n    imacr: '\\u012B',\n    image: '\\u2111',\n    imagline: '\\u2110',\n    imagpart: '\\u2111',\n    imath: '\\u0131',\n    imof: '\\u22B7',\n    imped: '\\u01B5',\n    in: '\\u2208',\n    incare: '\\u2105',\n    infin: '\\u221E',\n    infintie: '\\u29DD',\n    inodot: '\\u0131',\n    int: '\\u222B',\n    intcal: '\\u22BA',\n    integers: '\\u2124',\n    intercal: '\\u22BA',\n    intlarhk: '\\u2A17',\n    intprod: '\\u2A3C',\n    iocy: '\\u0451',\n    iogon: '\\u012F',\n    iopf: '\\uD835\\uDD5A',\n    iota: '\\u03B9',\n    iprod: '\\u2A3C',\n    iquest: '\\u00BF',\n    iscr: '\\uD835\\uDCBE',\n    isin: '\\u2208',\n    isinE: '\\u22F9',\n    isindot: '\\u22F5',\n    isins: '\\u22F4',\n    isinsv: '\\u22F3',\n    isinv: '\\u2208',\n    it: '\\u2062',\n    itilde: '\\u0129',\n    iukcy: '\\u0456',\n    iuml: '\\u00EF',\n    jcirc: '\\u0135',\n    jcy: '\\u0439',\n    jfr: '\\uD835\\uDD27',\n    jmath: '\\u0237',\n    jopf: '\\uD835\\uDD5B',\n    jscr: '\\uD835\\uDCBF',\n    jsercy: '\\u0458',\n    jukcy: '\\u0454',\n    kappa: '\\u03BA',\n    kappav: '\\u03F0',\n    kcedil: '\\u0137',\n    kcy: '\\u043A',\n    kfr: '\\uD835\\uDD28',\n    kgreen: '\\u0138',\n    khcy: '\\u0445',\n    kjcy: '\\u045C',\n    kopf: '\\uD835\\uDD5C',\n    kscr: '\\uD835\\uDCC0',\n    lAarr: '\\u21DA',\n    lArr: '\\u21D0',\n    lAtail: '\\u291B',\n    lBarr: '\\u290E',\n    lE: '\\u2266',\n    lEg: '\\u2A8B',\n    lHar: '\\u2962',\n    lacute: '\\u013A',\n    laemptyv: '\\u29B4',\n    lagran: '\\u2112',\n    lambda: '\\u03BB',\n    lang: '\\u27E8',\n    langd: '\\u2991',\n    langle: '\\u27E8',\n    lap: '\\u2A85',\n    laquo: '\\u00AB',\n    larr: '\\u2190',\n    larrb: '\\u21E4',\n    larrbfs: '\\u291F',\n    larrfs: '\\u291D',\n    larrhk: '\\u21A9',\n    larrlp: '\\u21AB',\n    larrpl: '\\u2939',\n    larrsim: '\\u2973',\n    larrtl: '\\u21A2',\n    lat: '\\u2AAB',\n    latail: '\\u2919',\n    late: '\\u2AAD',\n    lates: '\\u2AAD\\uFE00',\n    lbarr: '\\u290C',\n    lbbrk: '\\u2772',\n    lbrace: '\\u007B',\n    lbrack: '\\u005B',\n    lbrke: '\\u298B',\n    lbrksld: '\\u298F',\n    lbrkslu: '\\u298D',\n    lcaron: '\\u013E',\n    lcedil: '\\u013C',\n    lceil: '\\u2308',\n    lcub: '\\u007B',\n    lcy: '\\u043B',\n    ldca: '\\u2936',\n    ldquo: '\\u201C',\n    ldquor: '\\u201E',\n    ldrdhar: '\\u2967',\n    ldrushar: '\\u294B',\n    ldsh: '\\u21B2',\n    le: '\\u2264',\n    leftarrow: '\\u2190',\n    leftarrowtail: '\\u21A2',\n    leftharpoondown: '\\u21BD',\n    leftharpoonup: '\\u21BC',\n    leftleftarrows: '\\u21C7',\n    leftrightarrow: '\\u2194',\n    leftrightarrows: '\\u21C6',\n    leftrightharpoons: '\\u21CB',\n    leftrightsquigarrow: '\\u21AD',\n    leftthreetimes: '\\u22CB',\n    leg: '\\u22DA',\n    leq: '\\u2264',\n    leqq: '\\u2266',\n    leqslant: '\\u2A7D',\n    les: '\\u2A7D',\n    lescc: '\\u2AA8',\n    lesdot: '\\u2A7F',\n    lesdoto: '\\u2A81',\n    lesdotor: '\\u2A83',\n    lesg: '\\u22DA\\uFE00',\n    lesges: '\\u2A93',\n    lessapprox: '\\u2A85',\n    lessdot: '\\u22D6',\n    lesseqgtr: '\\u22DA',\n    lesseqqgtr: '\\u2A8B',\n    lessgtr: '\\u2276',\n    lesssim: '\\u2272',\n    lfisht: '\\u297C',\n    lfloor: '\\u230A',\n    lfr: '\\uD835\\uDD29',\n    lg: '\\u2276',\n    lgE: '\\u2A91',\n    lhard: '\\u21BD',\n    lharu: '\\u21BC',\n    lharul: '\\u296A',\n    lhblk: '\\u2584',\n    ljcy: '\\u0459',\n    ll: '\\u226A',\n    llarr: '\\u21C7',\n    llcorner: '\\u231E',\n    llhard: '\\u296B',\n    lltri: '\\u25FA',\n    lmidot: '\\u0140',\n    lmoust: '\\u23B0',\n    lmoustache: '\\u23B0',\n    lnE: '\\u2268',\n    lnap: '\\u2A89',\n    lnapprox: '\\u2A89',\n    lne: '\\u2A87',\n    lneq: '\\u2A87',\n    lneqq: '\\u2268',\n    lnsim: '\\u22E6',\n    loang: '\\u27EC',\n    loarr: '\\u21FD',\n    lobrk: '\\u27E6',\n    longleftarrow: '\\u27F5',\n    longleftrightarrow: '\\u27F7',\n    longmapsto: '\\u27FC',\n    longrightarrow: '\\u27F6',\n    looparrowleft: '\\u21AB',\n    looparrowright: '\\u21AC',\n    lopar: '\\u2985',\n    lopf: '\\uD835\\uDD5D',\n    loplus: '\\u2A2D',\n    lotimes: '\\u2A34',\n    lowast: '\\u2217',\n    lowbar: '\\u005F',\n    loz: '\\u25CA',\n    lozenge: '\\u25CA',\n    lozf: '\\u29EB',\n    lpar: '\\u0028',\n    lparlt: '\\u2993',\n    lrarr: '\\u21C6',\n    lrcorner: '\\u231F',\n    lrhar: '\\u21CB',\n    lrhard: '\\u296D',\n    lrm: '\\u200E',\n    lrtri: '\\u22BF',\n    lsaquo: '\\u2039',\n    lscr: '\\uD835\\uDCC1',\n    lsh: '\\u21B0',\n    lsim: '\\u2272',\n    lsime: '\\u2A8D',\n    lsimg: '\\u2A8F',\n    lsqb: '\\u005B',\n    lsquo: '\\u2018',\n    lsquor: '\\u201A',\n    lstrok: '\\u0142',\n    lt: '\\u003C',\n    ltcc: '\\u2AA6',\n    ltcir: '\\u2A79',\n    ltdot: '\\u22D6',\n    lthree: '\\u22CB',\n    ltimes: '\\u22C9',\n    ltlarr: '\\u2976',\n    ltquest: '\\u2A7B',\n    ltrPar: '\\u2996',\n    ltri: '\\u25C3',\n    ltrie: '\\u22B4',\n    ltrif: '\\u25C2',\n    lurdshar: '\\u294A',\n    luruhar: '\\u2966',\n    lvertneqq: '\\u2268\\uFE00',\n    lvnE: '\\u2268\\uFE00',\n    mDDot: '\\u223A',\n    macr: '\\u00AF',\n    male: '\\u2642',\n    malt: '\\u2720',\n    maltese: '\\u2720',\n    map: '\\u21A6',\n    mapsto: '\\u21A6',\n    mapstodown: '\\u21A7',\n    mapstoleft: '\\u21A4',\n    mapstoup: '\\u21A5',\n    marker: '\\u25AE',\n    mcomma: '\\u2A29',\n    mcy: '\\u043C',\n    mdash: '\\u2014',\n    measuredangle: '\\u2221',\n    mfr: '\\uD835\\uDD2A',\n    mho: '\\u2127',\n    micro: '\\u00B5',\n    mid: '\\u2223',\n    midast: '\\u002A',\n    midcir: '\\u2AF0',\n    middot: '\\u00B7',\n    minus: '\\u2212',\n    minusb: '\\u229F',\n    minusd: '\\u2238',\n    minusdu: '\\u2A2A',\n    mlcp: '\\u2ADB',\n    mldr: '\\u2026',\n    mnplus: '\\u2213',\n    models: '\\u22A7',\n    mopf: '\\uD835\\uDD5E',\n    mp: '\\u2213',\n    mscr: '\\uD835\\uDCC2',\n    mstpos: '\\u223E',\n    mu: '\\u03BC',\n    multimap: '\\u22B8',\n    mumap: '\\u22B8',\n    nGg: '\\u22D9\\u0338',\n    nGt: '\\u226B\\u20D2',\n    nGtv: '\\u226B\\u0338',\n    nLeftarrow: '\\u21CD',\n    nLeftrightarrow: '\\u21CE',\n    nLl: '\\u22D8\\u0338',\n    nLt: '\\u226A\\u20D2',\n    nLtv: '\\u226A\\u0338',\n    nRightarrow: '\\u21CF',\n    nVDash: '\\u22AF',\n    nVdash: '\\u22AE',\n    nabla: '\\u2207',\n    nacute: '\\u0144',\n    nang: '\\u2220\\u20D2',\n    nap: '\\u2249',\n    napE: '\\u2A70\\u0338',\n    napid: '\\u224B\\u0338',\n    napos: '\\u0149',\n    napprox: '\\u2249',\n    natur: '\\u266E',\n    natural: '\\u266E',\n    naturals: '\\u2115',\n    nbsp: '\\u00A0',\n    nbump: '\\u224E\\u0338',\n    nbumpe: '\\u224F\\u0338',\n    ncap: '\\u2A43',\n    ncaron: '\\u0148',\n    ncedil: '\\u0146',\n    ncong: '\\u2247',\n    ncongdot: '\\u2A6D\\u0338',\n    ncup: '\\u2A42',\n    ncy: '\\u043D',\n    ndash: '\\u2013',\n    ne: '\\u2260',\n    neArr: '\\u21D7',\n    nearhk: '\\u2924',\n    nearr: '\\u2197',\n    nearrow: '\\u2197',\n    nedot: '\\u2250\\u0338',\n    nequiv: '\\u2262',\n    nesear: '\\u2928',\n    nesim: '\\u2242\\u0338',\n    nexist: '\\u2204',\n    nexists: '\\u2204',\n    nfr: '\\uD835\\uDD2B',\n    ngE: '\\u2267\\u0338',\n    nge: '\\u2271',\n    ngeq: '\\u2271',\n    ngeqq: '\\u2267\\u0338',\n    ngeqslant: '\\u2A7E\\u0338',\n    nges: '\\u2A7E\\u0338',\n    ngsim: '\\u2275',\n    ngt: '\\u226F',\n    ngtr: '\\u226F',\n    nhArr: '\\u21CE',\n    nharr: '\\u21AE',\n    nhpar: '\\u2AF2',\n    ni: '\\u220B',\n    nis: '\\u22FC',\n    nisd: '\\u22FA',\n    niv: '\\u220B',\n    njcy: '\\u045A',\n    nlArr: '\\u21CD',\n    nlE: '\\u2266\\u0338',\n    nlarr: '\\u219A',\n    nldr: '\\u2025',\n    nle: '\\u2270',\n    nleftarrow: '\\u219A',\n    nleftrightarrow: '\\u21AE',\n    nleq: '\\u2270',\n    nleqq: '\\u2266\\u0338',\n    nleqslant: '\\u2A7D\\u0338',\n    nles: '\\u2A7D\\u0338',\n    nless: '\\u226E',\n    nlsim: '\\u2274',\n    nlt: '\\u226E',\n    nltri: '\\u22EA',\n    nltrie: '\\u22EC',\n    nmid: '\\u2224',\n    nopf: '\\uD835\\uDD5F',\n    not: '\\u00AC',\n    notin: '\\u2209',\n    notinE: '\\u22F9\\u0338',\n    notindot: '\\u22F5\\u0338',\n    notinva: '\\u2209',\n    notinvb: '\\u22F7',\n    notinvc: '\\u22F6',\n    notni: '\\u220C',\n    notniva: '\\u220C',\n    notnivb: '\\u22FE',\n    notnivc: '\\u22FD',\n    npar: '\\u2226',\n    nparallel: '\\u2226',\n    nparsl: '\\u2AFD\\u20E5',\n    npart: '\\u2202\\u0338',\n    npolint: '\\u2A14',\n    npr: '\\u2280',\n    nprcue: '\\u22E0',\n    npre: '\\u2AAF\\u0338',\n    nprec: '\\u2280',\n    npreceq: '\\u2AAF\\u0338',\n    nrArr: '\\u21CF',\n    nrarr: '\\u219B',\n    nrarrc: '\\u2933\\u0338',\n    nrarrw: '\\u219D\\u0338',\n    nrightarrow: '\\u219B',\n    nrtri: '\\u22EB',\n    nrtrie: '\\u22ED',\n    nsc: '\\u2281',\n    nsccue: '\\u22E1',\n    nsce: '\\u2AB0\\u0338',\n    nscr: '\\uD835\\uDCC3',\n    nshortmid: '\\u2224',\n    nshortparallel: '\\u2226',\n    nsim: '\\u2241',\n    nsime: '\\u2244',\n    nsimeq: '\\u2244',\n    nsmid: '\\u2224',\n    nspar: '\\u2226',\n    nsqsube: '\\u22E2',\n    nsqsupe: '\\u22E3',\n    nsub: '\\u2284',\n    nsubE: '\\u2AC5\\u0338',\n    nsube: '\\u2288',\n    nsubset: '\\u2282\\u20D2',\n    nsubseteq: '\\u2288',\n    nsubseteqq: '\\u2AC5\\u0338',\n    nsucc: '\\u2281',\n    nsucceq: '\\u2AB0\\u0338',\n    nsup: '\\u2285',\n    nsupE: '\\u2AC6\\u0338',\n    nsupe: '\\u2289',\n    nsupset: '\\u2283\\u20D2',\n    nsupseteq: '\\u2289',\n    nsupseteqq: '\\u2AC6\\u0338',\n    ntgl: '\\u2279',\n    ntilde: '\\u00F1',\n    ntlg: '\\u2278',\n    ntriangleleft: '\\u22EA',\n    ntrianglelefteq: '\\u22EC',\n    ntriangleright: '\\u22EB',\n    ntrianglerighteq: '\\u22ED',\n    nu: '\\u03BD',\n    num: '\\u0023',\n    numero: '\\u2116',\n    numsp: '\\u2007',\n    nvDash: '\\u22AD',\n    nvHarr: '\\u2904',\n    nvap: '\\u224D\\u20D2',\n    nvdash: '\\u22AC',\n    nvge: '\\u2265\\u20D2',\n    nvgt: '\\u003E\\u20D2',\n    nvinfin: '\\u29DE',\n    nvlArr: '\\u2902',\n    nvle: '\\u2264\\u20D2',\n    nvlt: '\\u003C\\u20D2',\n    nvltrie: '\\u22B4\\u20D2',\n    nvrArr: '\\u2903',\n    nvrtrie: '\\u22B5\\u20D2',\n    nvsim: '\\u223C\\u20D2',\n    nwArr: '\\u21D6',\n    nwarhk: '\\u2923',\n    nwarr: '\\u2196',\n    nwarrow: '\\u2196',\n    nwnear: '\\u2927',\n    oS: '\\u24C8',\n    oacute: '\\u00F3',\n    oast: '\\u229B',\n    ocir: '\\u229A',\n    ocirc: '\\u00F4',\n    ocy: '\\u043E',\n    odash: '\\u229D',\n    odblac: '\\u0151',\n    odiv: '\\u2A38',\n    odot: '\\u2299',\n    odsold: '\\u29BC',\n    oelig: '\\u0153',\n    ofcir: '\\u29BF',\n    ofr: '\\uD835\\uDD2C',\n    ogon: '\\u02DB',\n    ograve: '\\u00F2',\n    ogt: '\\u29C1',\n    ohbar: '\\u29B5',\n    ohm: '\\u03A9',\n    oint: '\\u222E',\n    olarr: '\\u21BA',\n    olcir: '\\u29BE',\n    olcross: '\\u29BB',\n    oline: '\\u203E',\n    olt: '\\u29C0',\n    omacr: '\\u014D',\n    omega: '\\u03C9',\n    omicron: '\\u03BF',\n    omid: '\\u29B6',\n    ominus: '\\u2296',\n    oopf: '\\uD835\\uDD60',\n    opar: '\\u29B7',\n    operp: '\\u29B9',\n    oplus: '\\u2295',\n    or: '\\u2228',\n    orarr: '\\u21BB',\n    ord: '\\u2A5D',\n    order: '\\u2134',\n    orderof: '\\u2134',\n    ordf: '\\u00AA',\n    ordm: '\\u00BA',\n    origof: '\\u22B6',\n    oror: '\\u2A56',\n    orslope: '\\u2A57',\n    orv: '\\u2A5B',\n    oscr: '\\u2134',\n    oslash: '\\u00F8',\n    osol: '\\u2298',\n    otilde: '\\u00F5',\n    otimes: '\\u2297',\n    otimesas: '\\u2A36',\n    ouml: '\\u00F6',\n    ovbar: '\\u233D',\n    par: '\\u2225',\n    para: '\\u00B6',\n    parallel: '\\u2225',\n    parsim: '\\u2AF3',\n    parsl: '\\u2AFD',\n    part: '\\u2202',\n    pcy: '\\u043F',\n    percnt: '\\u0025',\n    period: '\\u002E',\n    permil: '\\u2030',\n    perp: '\\u22A5',\n    pertenk: '\\u2031',\n    pfr: '\\uD835\\uDD2D',\n    phi: '\\u03C6',\n    phiv: '\\u03D5',\n    phmmat: '\\u2133',\n    phone: '\\u260E',\n    pi: '\\u03C0',\n    pitchfork: '\\u22D4',\n    piv: '\\u03D6',\n    planck: '\\u210F',\n    planckh: '\\u210E',\n    plankv: '\\u210F',\n    plus: '\\u002B',\n    plusacir: '\\u2A23',\n    plusb: '\\u229E',\n    pluscir: '\\u2A22',\n    plusdo: '\\u2214',\n    plusdu: '\\u2A25',\n    pluse: '\\u2A72',\n    plusmn: '\\u00B1',\n    plussim: '\\u2A26',\n    plustwo: '\\u2A27',\n    pm: '\\u00B1',\n    pointint: '\\u2A15',\n    popf: '\\uD835\\uDD61',\n    pound: '\\u00A3',\n    pr: '\\u227A',\n    prE: '\\u2AB3',\n    prap: '\\u2AB7',\n    prcue: '\\u227C',\n    pre: '\\u2AAF',\n    prec: '\\u227A',\n    precapprox: '\\u2AB7',\n    preccurlyeq: '\\u227C',\n    preceq: '\\u2AAF',\n    precnapprox: '\\u2AB9',\n    precneqq: '\\u2AB5',\n    precnsim: '\\u22E8',\n    precsim: '\\u227E',\n    prime: '\\u2032',\n    primes: '\\u2119',\n    prnE: '\\u2AB5',\n    prnap: '\\u2AB9',\n    prnsim: '\\u22E8',\n    prod: '\\u220F',\n    profalar: '\\u232E',\n    profline: '\\u2312',\n    profsurf: '\\u2313',\n    prop: '\\u221D',\n    propto: '\\u221D',\n    prsim: '\\u227E',\n    prurel: '\\u22B0',\n    pscr: '\\uD835\\uDCC5',\n    psi: '\\u03C8',\n    puncsp: '\\u2008',\n    qfr: '\\uD835\\uDD2E',\n    qint: '\\u2A0C',\n    qopf: '\\uD835\\uDD62',\n    qprime: '\\u2057',\n    qscr: '\\uD835\\uDCC6',\n    quaternions: '\\u210D',\n    quatint: '\\u2A16',\n    quest: '\\u003F',\n    questeq: '\\u225F',\n    quot: '\\u0022',\n    rAarr: '\\u21DB',\n    rArr: '\\u21D2',\n    rAtail: '\\u291C',\n    rBarr: '\\u290F',\n    rHar: '\\u2964',\n    race: '\\u223D\\u0331',\n    racute: '\\u0155',\n    radic: '\\u221A',\n    raemptyv: '\\u29B3',\n    rang: '\\u27E9',\n    rangd: '\\u2992',\n    range: '\\u29A5',\n    rangle: '\\u27E9',\n    raquo: '\\u00BB',\n    rarr: '\\u2192',\n    rarrap: '\\u2975',\n    rarrb: '\\u21E5',\n    rarrbfs: '\\u2920',\n    rarrc: '\\u2933',\n    rarrfs: '\\u291E',\n    rarrhk: '\\u21AA',\n    rarrlp: '\\u21AC',\n    rarrpl: '\\u2945',\n    rarrsim: '\\u2974',\n    rarrtl: '\\u21A3',\n    rarrw: '\\u219D',\n    ratail: '\\u291A',\n    ratio: '\\u2236',\n    rationals: '\\u211A',\n    rbarr: '\\u290D',\n    rbbrk: '\\u2773',\n    rbrace: '\\u007D',\n    rbrack: '\\u005D',\n    rbrke: '\\u298C',\n    rbrksld: '\\u298E',\n    rbrkslu: '\\u2990',\n    rcaron: '\\u0159',\n    rcedil: '\\u0157',\n    rceil: '\\u2309',\n    rcub: '\\u007D',\n    rcy: '\\u0440',\n    rdca: '\\u2937',\n    rdldhar: '\\u2969',\n    rdquo: '\\u201D',\n    rdquor: '\\u201D',\n    rdsh: '\\u21B3',\n    real: '\\u211C',\n    realine: '\\u211B',\n    realpart: '\\u211C',\n    reals: '\\u211D',\n    rect: '\\u25AD',\n    reg: '\\u00AE',\n    rfisht: '\\u297D',\n    rfloor: '\\u230B',\n    rfr: '\\uD835\\uDD2F',\n    rhard: '\\u21C1',\n    rharu: '\\u21C0',\n    rharul: '\\u296C',\n    rho: '\\u03C1',\n    rhov: '\\u03F1',\n    rightarrow: '\\u2192',\n    rightarrowtail: '\\u21A3',\n    rightharpoondown: '\\u21C1',\n    rightharpoonup: '\\u21C0',\n    rightleftarrows: '\\u21C4',\n    rightleftharpoons: '\\u21CC',\n    rightrightarrows: '\\u21C9',\n    rightsquigarrow: '\\u219D',\n    rightthreetimes: '\\u22CC',\n    ring: '\\u02DA',\n    risingdotseq: '\\u2253',\n    rlarr: '\\u21C4',\n    rlhar: '\\u21CC',\n    rlm: '\\u200F',\n    rmoust: '\\u23B1',\n    rmoustache: '\\u23B1',\n    rnmid: '\\u2AEE',\n    roang: '\\u27ED',\n    roarr: '\\u21FE',\n    robrk: '\\u27E7',\n    ropar: '\\u2986',\n    ropf: '\\uD835\\uDD63',\n    roplus: '\\u2A2E',\n    rotimes: '\\u2A35',\n    rpar: '\\u0029',\n    rpargt: '\\u2994',\n    rppolint: '\\u2A12',\n    rrarr: '\\u21C9',\n    rsaquo: '\\u203A',\n    rscr: '\\uD835\\uDCC7',\n    rsh: '\\u21B1',\n    rsqb: '\\u005D',\n    rsquo: '\\u2019',\n    rsquor: '\\u2019',\n    rthree: '\\u22CC',\n    rtimes: '\\u22CA',\n    rtri: '\\u25B9',\n    rtrie: '\\u22B5',\n    rtrif: '\\u25B8',\n    rtriltri: '\\u29CE',\n    ruluhar: '\\u2968',\n    rx: '\\u211E',\n    sacute: '\\u015B',\n    sbquo: '\\u201A',\n    sc: '\\u227B',\n    scE: '\\u2AB4',\n    scap: '\\u2AB8',\n    scaron: '\\u0161',\n    sccue: '\\u227D',\n    sce: '\\u2AB0',\n    scedil: '\\u015F',\n    scirc: '\\u015D',\n    scnE: '\\u2AB6',\n    scnap: '\\u2ABA',\n    scnsim: '\\u22E9',\n    scpolint: '\\u2A13',\n    scsim: '\\u227F',\n    scy: '\\u0441',\n    sdot: '\\u22C5',\n    sdotb: '\\u22A1',\n    sdote: '\\u2A66',\n    seArr: '\\u21D8',\n    searhk: '\\u2925',\n    searr: '\\u2198',\n    searrow: '\\u2198',\n    sect: '\\u00A7',\n    semi: '\\u003B',\n    seswar: '\\u2929',\n    setminus: '\\u2216',\n    setmn: '\\u2216',\n    sext: '\\u2736',\n    sfr: '\\uD835\\uDD30',\n    sfrown: '\\u2322',\n    sharp: '\\u266F',\n    shchcy: '\\u0449',\n    shcy: '\\u0448',\n    shortmid: '\\u2223',\n    shortparallel: '\\u2225',\n    shy: '\\u00AD',\n    sigma: '\\u03C3',\n    sigmaf: '\\u03C2',\n    sigmav: '\\u03C2',\n    sim: '\\u223C',\n    simdot: '\\u2A6A',\n    sime: '\\u2243',\n    simeq: '\\u2243',\n    simg: '\\u2A9E',\n    simgE: '\\u2AA0',\n    siml: '\\u2A9D',\n    simlE: '\\u2A9F',\n    simne: '\\u2246',\n    simplus: '\\u2A24',\n    simrarr: '\\u2972',\n    slarr: '\\u2190',\n    smallsetminus: '\\u2216',\n    smashp: '\\u2A33',\n    smeparsl: '\\u29E4',\n    smid: '\\u2223',\n    smile: '\\u2323',\n    smt: '\\u2AAA',\n    smte: '\\u2AAC',\n    smtes: '\\u2AAC\\uFE00',\n    softcy: '\\u044C',\n    sol: '\\u002F',\n    solb: '\\u29C4',\n    solbar: '\\u233F',\n    sopf: '\\uD835\\uDD64',\n    spades: '\\u2660',\n    spadesuit: '\\u2660',\n    spar: '\\u2225',\n    sqcap: '\\u2293',\n    sqcaps: '\\u2293\\uFE00',\n    sqcup: '\\u2294',\n    sqcups: '\\u2294\\uFE00',\n    sqsub: '\\u228F',\n    sqsube: '\\u2291',\n    sqsubset: '\\u228F',\n    sqsubseteq: '\\u2291',\n    sqsup: '\\u2290',\n    sqsupe: '\\u2292',\n    sqsupset: '\\u2290',\n    sqsupseteq: '\\u2292',\n    squ: '\\u25A1',\n    square: '\\u25A1',\n    squarf: '\\u25AA',\n    squf: '\\u25AA',\n    srarr: '\\u2192',\n    sscr: '\\uD835\\uDCC8',\n    ssetmn: '\\u2216',\n    ssmile: '\\u2323',\n    sstarf: '\\u22C6',\n    star: '\\u2606',\n    starf: '\\u2605',\n    straightepsilon: '\\u03F5',\n    straightphi: '\\u03D5',\n    strns: '\\u00AF',\n    sub: '\\u2282',\n    subE: '\\u2AC5',\n    subdot: '\\u2ABD',\n    sube: '\\u2286',\n    subedot: '\\u2AC3',\n    submult: '\\u2AC1',\n    subnE: '\\u2ACB',\n    subne: '\\u228A',\n    subplus: '\\u2ABF',\n    subrarr: '\\u2979',\n    subset: '\\u2282',\n    subseteq: '\\u2286',\n    subseteqq: '\\u2AC5',\n    subsetneq: '\\u228A',\n    subsetneqq: '\\u2ACB',\n    subsim: '\\u2AC7',\n    subsub: '\\u2AD5',\n    subsup: '\\u2AD3',\n    succ: '\\u227B',\n    succapprox: '\\u2AB8',\n    succcurlyeq: '\\u227D',\n    succeq: '\\u2AB0',\n    succnapprox: '\\u2ABA',\n    succneqq: '\\u2AB6',\n    succnsim: '\\u22E9',\n    succsim: '\\u227F',\n    sum: '\\u2211',\n    sung: '\\u266A',\n    sup1: '\\u00B9',\n    sup2: '\\u00B2',\n    sup3: '\\u00B3',\n    sup: '\\u2283',\n    supE: '\\u2AC6',\n    supdot: '\\u2ABE',\n    supdsub: '\\u2AD8',\n    supe: '\\u2287',\n    supedot: '\\u2AC4',\n    suphsol: '\\u27C9',\n    suphsub: '\\u2AD7',\n    suplarr: '\\u297B',\n    supmult: '\\u2AC2',\n    supnE: '\\u2ACC',\n    supne: '\\u228B',\n    supplus: '\\u2AC0',\n    supset: '\\u2283',\n    supseteq: '\\u2287',\n    supseteqq: '\\u2AC6',\n    supsetneq: '\\u228B',\n    supsetneqq: '\\u2ACC',\n    supsim: '\\u2AC8',\n    supsub: '\\u2AD4',\n    supsup: '\\u2AD6',\n    swArr: '\\u21D9',\n    swarhk: '\\u2926',\n    swarr: '\\u2199',\n    swarrow: '\\u2199',\n    swnwar: '\\u292A',\n    szlig: '\\u00DF',\n    target: '\\u2316',\n    tau: '\\u03C4',\n    tbrk: '\\u23B4',\n    tcaron: '\\u0165',\n    tcedil: '\\u0163',\n    tcy: '\\u0442',\n    tdot: '\\u20DB',\n    telrec: '\\u2315',\n    tfr: '\\uD835\\uDD31',\n    there4: '\\u2234',\n    therefore: '\\u2234',\n    theta: '\\u03B8',\n    thetasym: '\\u03D1',\n    thetav: '\\u03D1',\n    thickapprox: '\\u2248',\n    thicksim: '\\u223C',\n    thinsp: '\\u2009',\n    thkap: '\\u2248',\n    thksim: '\\u223C',\n    thorn: '\\u00FE',\n    tilde: '\\u02DC',\n    times: '\\u00D7',\n    timesb: '\\u22A0',\n    timesbar: '\\u2A31',\n    timesd: '\\u2A30',\n    tint: '\\u222D',\n    toea: '\\u2928',\n    top: '\\u22A4',\n    topbot: '\\u2336',\n    topcir: '\\u2AF1',\n    topf: '\\uD835\\uDD65',\n    topfork: '\\u2ADA',\n    tosa: '\\u2929',\n    tprime: '\\u2034',\n    trade: '\\u2122',\n    triangle: '\\u25B5',\n    triangledown: '\\u25BF',\n    triangleleft: '\\u25C3',\n    trianglelefteq: '\\u22B4',\n    triangleq: '\\u225C',\n    triangleright: '\\u25B9',\n    trianglerighteq: '\\u22B5',\n    tridot: '\\u25EC',\n    trie: '\\u225C',\n    triminus: '\\u2A3A',\n    triplus: '\\u2A39',\n    trisb: '\\u29CD',\n    tritime: '\\u2A3B',\n    trpezium: '\\u23E2',\n    tscr: '\\uD835\\uDCC9',\n    tscy: '\\u0446',\n    tshcy: '\\u045B',\n    tstrok: '\\u0167',\n    twixt: '\\u226C',\n    twoheadleftarrow: '\\u219E',\n    twoheadrightarrow: '\\u21A0',\n    uArr: '\\u21D1',\n    uHar: '\\u2963',\n    uacute: '\\u00FA',\n    uarr: '\\u2191',\n    ubrcy: '\\u045E',\n    ubreve: '\\u016D',\n    ucirc: '\\u00FB',\n    ucy: '\\u0443',\n    udarr: '\\u21C5',\n    udblac: '\\u0171',\n    udhar: '\\u296E',\n    ufisht: '\\u297E',\n    ufr: '\\uD835\\uDD32',\n    ugrave: '\\u00F9',\n    uharl: '\\u21BF',\n    uharr: '\\u21BE',\n    uhblk: '\\u2580',\n    ulcorn: '\\u231C',\n    ulcorner: '\\u231C',\n    ulcrop: '\\u230F',\n    ultri: '\\u25F8',\n    umacr: '\\u016B',\n    uml: '\\u00A8',\n    uogon: '\\u0173',\n    uopf: '\\uD835\\uDD66',\n    uparrow: '\\u2191',\n    updownarrow: '\\u2195',\n    upharpoonleft: '\\u21BF',\n    upharpoonright: '\\u21BE',\n    uplus: '\\u228E',\n    upsi: '\\u03C5',\n    upsih: '\\u03D2',\n    upsilon: '\\u03C5',\n    upuparrows: '\\u21C8',\n    urcorn: '\\u231D',\n    urcorner: '\\u231D',\n    urcrop: '\\u230E',\n    uring: '\\u016F',\n    urtri: '\\u25F9',\n    uscr: '\\uD835\\uDCCA',\n    utdot: '\\u22F0',\n    utilde: '\\u0169',\n    utri: '\\u25B5',\n    utrif: '\\u25B4',\n    uuarr: '\\u21C8',\n    uuml: '\\u00FC',\n    uwangle: '\\u29A7',\n    vArr: '\\u21D5',\n    vBar: '\\u2AE8',\n    vBarv: '\\u2AE9',\n    vDash: '\\u22A8',\n    vangrt: '\\u299C',\n    varepsilon: '\\u03F5',\n    varkappa: '\\u03F0',\n    varnothing: '\\u2205',\n    varphi: '\\u03D5',\n    varpi: '\\u03D6',\n    varpropto: '\\u221D',\n    varr: '\\u2195',\n    varrho: '\\u03F1',\n    varsigma: '\\u03C2',\n    varsubsetneq: '\\u228A\\uFE00',\n    varsubsetneqq: '\\u2ACB\\uFE00',\n    varsupsetneq: '\\u228B\\uFE00',\n    varsupsetneqq: '\\u2ACC\\uFE00',\n    vartheta: '\\u03D1',\n    vartriangleleft: '\\u22B2',\n    vartriangleright: '\\u22B3',\n    vcy: '\\u0432',\n    vdash: '\\u22A2',\n    vee: '\\u2228',\n    veebar: '\\u22BB',\n    veeeq: '\\u225A',\n    vellip: '\\u22EE',\n    verbar: '\\u007C',\n    vert: '\\u007C',\n    vfr: '\\uD835\\uDD33',\n    vltri: '\\u22B2',\n    vnsub: '\\u2282\\u20D2',\n    vnsup: '\\u2283\\u20D2',\n    vopf: '\\uD835\\uDD67',\n    vprop: '\\u221D',\n    vrtri: '\\u22B3',\n    vscr: '\\uD835\\uDCCB',\n    vsubnE: '\\u2ACB\\uFE00',\n    vsubne: '\\u228A\\uFE00',\n    vsupnE: '\\u2ACC\\uFE00',\n    vsupne: '\\u228B\\uFE00',\n    vzigzag: '\\u299A',\n    wcirc: '\\u0175',\n    wedbar: '\\u2A5F',\n    wedge: '\\u2227',\n    wedgeq: '\\u2259',\n    weierp: '\\u2118',\n    wfr: '\\uD835\\uDD34',\n    wopf: '\\uD835\\uDD68',\n    wp: '\\u2118',\n    wr: '\\u2240',\n    wreath: '\\u2240',\n    wscr: '\\uD835\\uDCCC',\n    xcap: '\\u22C2',\n    xcirc: '\\u25EF',\n    xcup: '\\u22C3',\n    xdtri: '\\u25BD',\n    xfr: '\\uD835\\uDD35',\n    xhArr: '\\u27FA',\n    xharr: '\\u27F7',\n    xi: '\\u03BE',\n    xlArr: '\\u27F8',\n    xlarr: '\\u27F5',\n    xmap: '\\u27FC',\n    xnis: '\\u22FB',\n    xodot: '\\u2A00',\n    xopf: '\\uD835\\uDD69',\n    xoplus: '\\u2A01',\n    xotime: '\\u2A02',\n    xrArr: '\\u27F9',\n    xrarr: '\\u27F6',\n    xscr: '\\uD835\\uDCCD',\n    xsqcup: '\\u2A06',\n    xuplus: '\\u2A04',\n    xutri: '\\u25B3',\n    xvee: '\\u22C1',\n    xwedge: '\\u22C0',\n    yacute: '\\u00FD',\n    yacy: '\\u044F',\n    ycirc: '\\u0177',\n    ycy: '\\u044B',\n    yen: '\\u00A5',\n    yfr: '\\uD835\\uDD36',\n    yicy: '\\u0457',\n    yopf: '\\uD835\\uDD6A',\n    yscr: '\\uD835\\uDCCE',\n    yucy: '\\u044E',\n    yuml: '\\u00FF',\n    zacute: '\\u017A',\n    zcaron: '\\u017E',\n    zcy: '\\u0437',\n    zdot: '\\u017C',\n    zeetrf: '\\u2128',\n    zeta: '\\u03B6',\n    zfr: '\\uD835\\uDD37',\n    zhcy: '\\u0436',\n    zigrarr: '\\u21DD',\n    zopf: '\\uD835\\uDD6B',\n    zscr: '\\uD835\\uDCCF',\n    zwj: '\\u200D',\n    zwnj: '\\u200C',\n};\nconst decodeMap = {\n    '0': 65533,\n    '128': 8364,\n    '130': 8218,\n    '131': 402,\n    '132': 8222,\n    '133': 8230,\n    '134': 8224,\n    '135': 8225,\n    '136': 710,\n    '137': 8240,\n    '138': 352,\n    '139': 8249,\n    '140': 338,\n    '142': 381,\n    '145': 8216,\n    '146': 8217,\n    '147': 8220,\n    '148': 8221,\n    '149': 8226,\n    '150': 8211,\n    '151': 8212,\n    '152': 732,\n    '153': 8482,\n    '154': 353,\n    '155': 8250,\n    '156': 339,\n    '158': 382,\n    '159': 376,\n};\nfunction decodeHTMLStrict(text) {\n    return text.replace(/&(?:[a-zA-Z]+|#[xX][\\da-fA-F]+|#\\d+);/g, (key) => {\n        if (key.charAt(1) === '#') {\n            const secondChar = key.charAt(2);\n            const codePoint = secondChar === 'X' || secondChar === 'x' ? parseInt(key.slice(3), 16) : parseInt(key.slice(2), 10);\n            return decodeCodePoint(codePoint);\n        }\n        return getOwnProperty(entities, key.slice(1, -1)) ?? key;\n    });\n}\nfunction decodeCodePoint(codePoint) {\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return '\\uFFFD';\n    }\n    return String.fromCodePoint(getOwnProperty(decodeMap, codePoint) ?? codePoint);\n}\n\nfunction scanJSXAttributeValue(parser, context) {\n    parser.startIndex = parser.tokenIndex = parser.index;\n    parser.startColumn = parser.tokenColumn = parser.column;\n    parser.startLine = parser.tokenLine = parser.line;\n    parser.setToken(CharTypes[parser.currentChar] & 8192\n        ? scanJSXString(parser)\n        : scanSingleToken(parser, context, 0));\n    return parser.getToken();\n}\nfunction scanJSXString(parser) {\n    const quote = parser.currentChar;\n    let char = advanceChar(parser);\n    const start = parser.index;\n    while (char !== quote) {\n        if (parser.index >= parser.end)\n            parser.report(16);\n        char = advanceChar(parser);\n    }\n    if (char !== quote)\n        parser.report(16);\n    parser.tokenValue = parser.source.slice(start, parser.index);\n    advanceChar(parser);\n    if (parser.options.raw)\n        parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);\n    return 134283267;\n}\nfunction nextJSXToken(parser) {\n    parser.startIndex = parser.tokenIndex = parser.index;\n    parser.startColumn = parser.tokenColumn = parser.column;\n    parser.startLine = parser.tokenLine = parser.line;\n    if (parser.index >= parser.end) {\n        parser.setToken(1048576);\n        return;\n    }\n    if (parser.currentChar === 60) {\n        advanceChar(parser);\n        parser.setToken(8456256);\n        return;\n    }\n    if (parser.currentChar === 123) {\n        advanceChar(parser);\n        parser.setToken(2162700);\n        return;\n    }\n    let state = 0;\n    while (parser.index < parser.end) {\n        const type = CharTypes[parser.source.charCodeAt(parser.index)];\n        if (type & 1024) {\n            state |= 1 | 4;\n            scanNewLine(parser);\n        }\n        else if (type & 2048) {\n            consumeLineFeed(parser, state);\n            state = (state & -5) | 1;\n        }\n        else {\n            advanceChar(parser);\n        }\n        if (CharTypes[parser.currentChar] & 16384)\n            break;\n    }\n    if (parser.tokenIndex === parser.index)\n        parser.report(0);\n    const raw = parser.source.slice(parser.tokenIndex, parser.index);\n    if (parser.options.raw)\n        parser.tokenRaw = raw;\n    parser.tokenValue = decodeHTMLStrict(raw);\n    parser.setToken(137);\n}\nfunction rescanJSXIdentifier(parser) {\n    if ((parser.getToken() & 143360) === 143360) {\n        const { index } = parser;\n        let char = parser.currentChar;\n        while (CharTypes[char] & (32768 | 2)) {\n            char = advanceChar(parser);\n        }\n        parser.tokenValue += parser.source.slice(index, parser.index);\n        parser.setToken(208897, true);\n    }\n    return parser.getToken();\n}\n\nclass Scope {\n    parser;\n    type;\n    parent;\n    scopeError;\n    variableBindings = new Map();\n    constructor(parser, type = 2, parent) {\n        this.parser = parser;\n        this.type = type;\n        this.parent = parent;\n    }\n    createChildScope(type) {\n        return new Scope(this.parser, type, this);\n    }\n    addVarOrBlock(context, name, kind, origin) {\n        if (kind & 4) {\n            this.addVarName(context, name, kind);\n        }\n        else {\n            this.addBlockName(context, name, kind, origin);\n        }\n        if (origin & 64) {\n            this.parser.declareUnboundVariable(name);\n        }\n    }\n    addVarName(context, name, kind) {\n        const { parser } = this;\n        let currentScope = this;\n        while (currentScope && (currentScope.type & 128) === 0) {\n            const { variableBindings } = currentScope;\n            const value = variableBindings.get(name);\n            if (value && value & 248) {\n                if (parser.options.webcompat &&\n                    (context & 1) === 0 &&\n                    ((kind & 128 && value & 68) ||\n                        (value & 128 && kind & 68))) ;\n                else {\n                    parser.report(145, name);\n                }\n            }\n            if (currentScope === this) {\n                if (value && value & 1 && kind & 1) {\n                    currentScope.recordScopeError(145, name);\n                }\n            }\n            if (value &&\n                (value & 256 || (value & 512 && !parser.options.webcompat))) {\n                parser.report(145, name);\n            }\n            currentScope.variableBindings.set(name, kind);\n            currentScope = currentScope.parent;\n        }\n    }\n    hasVariable(name) {\n        return this.variableBindings.has(name);\n    }\n    addBlockName(context, name, kind, origin) {\n        const { parser } = this;\n        const value = this.variableBindings.get(name);\n        if (value && (value & 2) === 0) {\n            if (kind & 1) {\n                this.recordScopeError(145, name);\n            }\n            else if (parser.options.webcompat &&\n                (context & 1) === 0 &&\n                origin & 2 &&\n                value === 64 &&\n                kind === 64) ;\n            else {\n                parser.report(145, name);\n            }\n        }\n        if (this.type & 64 &&\n            this.parent?.hasVariable(name) &&\n            (this.parent.variableBindings.get(name) & 2) === 0) {\n            parser.report(145, name);\n        }\n        if (this.type & 512 && value && (value & 2) === 0) {\n            if (kind & 1) {\n                this.recordScopeError(145, name);\n            }\n        }\n        if (this.type & 32) {\n            if (this.parent.variableBindings.get(name) & 768)\n                parser.report(159, name);\n        }\n        this.variableBindings.set(name, kind);\n    }\n    recordScopeError(type, ...params) {\n        this.scopeError = {\n            type,\n            params,\n            start: this.parser.tokenStart,\n            end: this.parser.currentLocation,\n        };\n    }\n    reportScopeError() {\n        const { scopeError } = this;\n        if (!scopeError) {\n            return;\n        }\n        throw new ParseError(scopeError.start, scopeError.end, scopeError.type, ...scopeError.params);\n    }\n}\nfunction createArrowHeadParsingScope(parser, context, value) {\n    const scope = parser.createScope().createChildScope(512);\n    scope.addBlockName(context, value, 1, 0);\n    return scope;\n}\n\nclass PrivateScope {\n    parser;\n    parent;\n    refs = Object.create(null);\n    privateIdentifiers = new Map();\n    constructor(parser, parent) {\n        this.parser = parser;\n        this.parent = parent;\n    }\n    addPrivateIdentifier(name, kind) {\n        const { privateIdentifiers } = this;\n        let focusKind = kind & (32 | 768);\n        if (!(focusKind & 768))\n            focusKind |= 768;\n        const value = privateIdentifiers.get(name);\n        if (this.hasPrivateIdentifier(name) &&\n            ((value & 32) !== (focusKind & 32) || value & focusKind & 768)) {\n            this.parser.report(146, name);\n        }\n        privateIdentifiers.set(name, this.hasPrivateIdentifier(name) ? value | focusKind : focusKind);\n    }\n    addPrivateIdentifierRef(name) {\n        this.refs[name] ??= [];\n        this.refs[name].push(this.parser.tokenStart);\n    }\n    isPrivateIdentifierDefined(name) {\n        return this.hasPrivateIdentifier(name) || Boolean(this.parent?.isPrivateIdentifierDefined(name));\n    }\n    validatePrivateIdentifierRefs() {\n        for (const name in this.refs) {\n            if (!this.isPrivateIdentifierDefined(name)) {\n                const { index, line, column } = this.refs[name][0];\n                throw new ParseError({ index, line, column }, { index: index + name.length, line, column: column + name.length }, 4, name);\n            }\n        }\n    }\n    hasPrivateIdentifier(name) {\n        return this.privateIdentifiers.has(name);\n    }\n}\n\nclass Parser {\n    source;\n    options;\n    lastOnToken = null;\n    token = 1048576;\n    flags = 0;\n    index = 0;\n    line = 1;\n    column = 0;\n    startIndex = 0;\n    end = 0;\n    tokenIndex = 0;\n    startColumn = 0;\n    tokenColumn = 0;\n    tokenLine = 1;\n    startLine = 1;\n    tokenValue = '';\n    tokenRaw = '';\n    tokenRegExp = void 0;\n    currentChar = 0;\n    exportedNames = new Set();\n    exportedBindings = new Set();\n    assignable = 1;\n    destructible = 0;\n    leadingDecorators = { decorators: [] };\n    constructor(source, options = {}) {\n        this.source = source;\n        this.options = options;\n        this.end = source.length;\n        this.currentChar = source.charCodeAt(0);\n    }\n    getToken() {\n        return this.token;\n    }\n    setToken(value, replaceLast = false) {\n        this.token = value;\n        const { onToken } = this.options;\n        if (onToken) {\n            if (value !== 1048576) {\n                const loc = {\n                    start: {\n                        line: this.tokenLine,\n                        column: this.tokenColumn,\n                    },\n                    end: {\n                        line: this.line,\n                        column: this.column,\n                    },\n                };\n                if (!replaceLast && this.lastOnToken) {\n                    onToken(...this.lastOnToken);\n                }\n                this.lastOnToken = [convertTokenType(value), this.tokenIndex, this.index, loc];\n            }\n            else {\n                if (this.lastOnToken) {\n                    onToken(...this.lastOnToken);\n                    this.lastOnToken = null;\n                }\n            }\n        }\n        return value;\n    }\n    get tokenStart() {\n        return {\n            index: this.tokenIndex,\n            line: this.tokenLine,\n            column: this.tokenColumn,\n        };\n    }\n    get currentLocation() {\n        return { index: this.index, line: this.line, column: this.column };\n    }\n    finishNode(node, start, end) {\n        if (this.options.ranges) {\n            node.start = start.index;\n            const endIndex = end ? end.index : this.startIndex;\n            node.end = endIndex;\n            node.range = [start.index, endIndex];\n        }\n        if (this.options.loc) {\n            node.loc = {\n                start: {\n                    line: start.line,\n                    column: start.column,\n                },\n                end: end ? { line: end.line, column: end.column } : { line: this.startLine, column: this.startColumn },\n            };\n            if (this.options.source) {\n                node.loc.source = this.options.source;\n            }\n        }\n        return node;\n    }\n    addBindingToExports(name) {\n        this.exportedBindings.add(name);\n    }\n    declareUnboundVariable(name) {\n        const { exportedNames } = this;\n        if (exportedNames.has(name)) {\n            this.report(147, name);\n        }\n        exportedNames.add(name);\n    }\n    report(type, ...params) {\n        throw new ParseError(this.tokenStart, this.currentLocation, type, ...params);\n    }\n    createScopeIfLexical(type, parent) {\n        if (this.options.lexical) {\n            return this.createScope(type, parent);\n        }\n        return undefined;\n    }\n    createScope(type, parent) {\n        return new Scope(this, type, parent);\n    }\n    createPrivateScopeIfLexical(parent) {\n        if (this.options.lexical) {\n            return new PrivateScope(this, parent);\n        }\n        return undefined;\n    }\n}\nfunction pushComment(comments, options) {\n    return function (type, value, start, end, loc) {\n        const comment = {\n            type,\n            value,\n        };\n        if (options.ranges) {\n            comment.start = start;\n            comment.end = end;\n            comment.range = [start, end];\n        }\n        if (options.loc) {\n            comment.loc = loc;\n        }\n        comments.push(comment);\n    };\n}\nfunction pushToken(tokens, options) {\n    return function (type, start, end, loc) {\n        const token = {\n            token: type,\n        };\n        if (options.ranges) {\n            token.start = start;\n            token.end = end;\n            token.range = [start, end];\n        }\n        if (options.loc) {\n            token.loc = loc;\n        }\n        tokens.push(token);\n    };\n}\n\nfunction normalizeOptions(rawOptions) {\n    const options = { ...rawOptions };\n    if (options.onComment) {\n        options.onComment = Array.isArray(options.onComment) ? pushComment(options.onComment, options) : options.onComment;\n    }\n    if (options.onToken) {\n        options.onToken = Array.isArray(options.onToken) ? pushToken(options.onToken, options) : options.onToken;\n    }\n    return options;\n}\n\nfunction parseSource(source, rawOptions = {}, context = 0) {\n    const options = normalizeOptions(rawOptions);\n    if (options.module)\n        context |= 2 | 1;\n    if (options.globalReturn)\n        context |= 4096;\n    if (options.impliedStrict)\n        context |= 1;\n    const parser = new Parser(source, options);\n    skipHashBang(parser);\n    const scope = parser.createScopeIfLexical();\n    let body = [];\n    let sourceType = 'script';\n    if (context & 2) {\n        sourceType = 'module';\n        body = parseModuleItemList(parser, context | 8, scope);\n        if (scope) {\n            for (const name of parser.exportedBindings) {\n                if (!scope.hasVariable(name))\n                    parser.report(148, name);\n            }\n        }\n    }\n    else {\n        body = parseStatementList(parser, context | 8, scope);\n    }\n    return parser.finishNode({\n        type: 'Program',\n        sourceType,\n        body,\n    }, { index: 0, line: 1, column: 0 }, parser.currentLocation);\n}\nfunction parseStatementList(parser, context, scope) {\n    nextToken(parser, context | 32 | 262144);\n    const statements = [];\n    while (parser.getToken() === 134283267) {\n        const { index, tokenValue, tokenStart, tokenIndex } = parser;\n        const token = parser.getToken();\n        const expr = parseLiteral(parser, context);\n        if (isValidStrictMode(parser, index, tokenIndex, tokenValue)) {\n            context |= 1;\n            if (parser.flags & 64) {\n                throw new ParseError(parser.tokenStart, parser.currentLocation, 9);\n            }\n            if (parser.flags & 4096) {\n                throw new ParseError(parser.tokenStart, parser.currentLocation, 15);\n            }\n        }\n        statements.push(parseDirective(parser, context, expr, token, tokenStart));\n    }\n    while (parser.getToken() !== 1048576) {\n        statements.push(parseStatementListItem(parser, context, scope, undefined, 4, {}));\n    }\n    return statements;\n}\nfunction parseModuleItemList(parser, context, scope) {\n    nextToken(parser, context | 32);\n    const statements = [];\n    while (parser.getToken() === 134283267) {\n        const { tokenStart } = parser;\n        const token = parser.getToken();\n        statements.push(parseDirective(parser, context, parseLiteral(parser, context), token, tokenStart));\n    }\n    while (parser.getToken() !== 1048576) {\n        statements.push(parseModuleItem(parser, context, scope));\n    }\n    return statements;\n}\nfunction parseModuleItem(parser, context, scope) {\n    if (parser.getToken() === 132) {\n        Object.assign(parser.leadingDecorators, {\n            start: parser.tokenStart,\n            decorators: parseDecorators(parser, context, undefined),\n        });\n    }\n    let moduleItem;\n    switch (parser.getToken()) {\n        case 20564:\n            moduleItem = parseExportDeclaration(parser, context, scope);\n            break;\n        case 86106:\n            moduleItem = parseImportDeclaration(parser, context, scope);\n            break;\n        default:\n            moduleItem = parseStatementListItem(parser, context, scope, undefined, 4, {});\n    }\n    if (parser.leadingDecorators?.decorators.length) {\n        parser.report(170);\n    }\n    return moduleItem;\n}\nfunction parseStatementListItem(parser, context, scope, privateScope, origin, labels) {\n    const start = parser.tokenStart;\n    switch (parser.getToken()) {\n        case 86104:\n            return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 0, start);\n        case 132:\n        case 86094:\n            return parseClassDeclaration(parser, context, scope, privateScope, 0);\n        case 86090:\n            return parseLexicalDeclaration(parser, context, scope, privateScope, 16, 0);\n        case 241737:\n            return parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin);\n        case 20564:\n            parser.report(103, 'export');\n        case 86106:\n            nextToken(parser, context);\n            switch (parser.getToken()) {\n                case 67174411:\n                    return parseImportCallDeclaration(parser, context, privateScope, start);\n                case 67108877:\n                    return parseImportMetaDeclaration(parser, context, start);\n                default:\n                    parser.report(103, 'import');\n            }\n        case 209005:\n            return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 1);\n        default:\n            return parseStatement(parser, context, scope, privateScope, origin, labels, 1);\n    }\n}\nfunction parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {\n    switch (parser.getToken()) {\n        case 86088:\n            return parseVariableStatement(parser, context, scope, privateScope, 0);\n        case 20572:\n            return parseReturnStatement(parser, context, privateScope);\n        case 20569:\n            return parseIfStatement(parser, context, scope, privateScope, labels);\n        case 20567:\n            return parseForStatement(parser, context, scope, privateScope, labels);\n        case 20562:\n            return parseDoWhileStatement(parser, context, scope, privateScope, labels);\n        case 20578:\n            return parseWhileStatement(parser, context, scope, privateScope, labels);\n        case 86110:\n            return parseSwitchStatement(parser, context, scope, privateScope, labels);\n        case 1074790417:\n            return parseEmptyStatement(parser, context);\n        case 2162700:\n            return parseBlock(parser, context, scope?.createChildScope(), privateScope, labels, parser.tokenStart);\n        case 86112:\n            return parseThrowStatement(parser, context, privateScope);\n        case 20555:\n            return parseBreakStatement(parser, context, labels);\n        case 20559:\n            return parseContinueStatement(parser, context, labels);\n        case 20577:\n            return parseTryStatement(parser, context, scope, privateScope, labels);\n        case 20579:\n            return parseWithStatement(parser, context, scope, privateScope, labels);\n        case 20560:\n            return parseDebuggerStatement(parser, context);\n        case 209005:\n            return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 0);\n        case 20557:\n            parser.report(162);\n        case 20566:\n            parser.report(163);\n        case 86104:\n            parser.report(context & 1\n                ? 76\n                : !parser.options.webcompat\n                    ? 78\n                    : 77);\n        case 86094:\n            parser.report(79);\n        default:\n            return parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);\n    }\n}\nfunction parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {\n    const { tokenValue, tokenStart } = parser;\n    const token = parser.getToken();\n    let expr;\n    switch (token) {\n        case 241737:\n            expr = parseIdentifier(parser, context);\n            if (context & 1)\n                parser.report(85);\n            if (parser.getToken() === 69271571)\n                parser.report(84);\n            break;\n        default:\n            expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, parser.tokenStart);\n    }\n    if (token & 143360 && parser.getToken() === 21) {\n        return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, allowFuncDecl, tokenStart);\n    }\n    expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);\n    expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);\n    if (parser.getToken() === 18) {\n        expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);\n    }\n    return parseExpressionStatement(parser, context, expr, tokenStart);\n}\nfunction parseBlock(parser, context, scope, privateScope, labels, start = parser.tokenStart, type = 'BlockStatement') {\n    const body = [];\n    consume(parser, context | 32, 2162700);\n    while (parser.getToken() !== 1074790415) {\n        body.push(parseStatementListItem(parser, context, scope, privateScope, 2, { $: labels }));\n    }\n    consume(parser, context | 32, 1074790415);\n    return parser.finishNode({\n        type,\n        body,\n    }, start);\n}\nfunction parseReturnStatement(parser, context, privateScope) {\n    if ((context & 4096) === 0)\n        parser.report(92);\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    const argument = parser.flags & 1 || parser.getToken() & 1048576\n        ? null\n        : parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'ReturnStatement',\n        argument,\n    }, start);\n}\nfunction parseExpressionStatement(parser, context, expression, start) {\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'ExpressionStatement',\n        expression,\n    }, start);\n}\nfunction parseLabelledStatement(parser, context, scope, privateScope, origin, labels, value, expr, token, allowFuncDecl, start) {\n    validateBindingIdentifier(parser, context, 0, token, 1);\n    validateAndDeclareLabel(parser, labels, value);\n    nextToken(parser, context | 32);\n    const body = allowFuncDecl &&\n        (context & 1) === 0 &&\n        parser.options.webcompat &&\n        parser.getToken() === 86104\n        ? parseFunctionDeclaration(parser, context, scope?.createChildScope(), privateScope, origin, 0, 0, 0, parser.tokenStart)\n        : parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);\n    return parser.finishNode({\n        type: 'LabeledStatement',\n        label: expr,\n        body,\n    }, start);\n}\nfunction parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {\n    const { tokenValue, tokenStart: start } = parser;\n    const token = parser.getToken();\n    let expr = parseIdentifier(parser, context);\n    if (parser.getToken() === 21) {\n        return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, 1, start);\n    }\n    const asyncNewLine = parser.flags & 1;\n    if (!asyncNewLine) {\n        if (parser.getToken() === 86104) {\n            if (!allowFuncDecl)\n                parser.report(123);\n            return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 1, start);\n        }\n        if (isValidIdentifier(context, parser.getToken())) {\n            expr = parseAsyncArrowAfterIdent(parser, context, privateScope, 1, start);\n            if (parser.getToken() === 18)\n                expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);\n            return parseExpressionStatement(parser, context, expr, start);\n        }\n    }\n    if (parser.getToken() === 67174411) {\n        expr = parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, 1, 1, 0, asyncNewLine, start);\n    }\n    else {\n        if (parser.getToken() === 10) {\n            classifyIdentifier(parser, context, token);\n            if ((token & 36864) === 36864) {\n                parser.flags |= 256;\n            }\n            expr = parseArrowFromIdentifier(parser, context | 2048, privateScope, parser.tokenValue, expr, 0, 1, 0, start);\n        }\n        parser.assignable = 1;\n    }\n    expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start);\n    expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, start, expr);\n    parser.assignable = 1;\n    if (parser.getToken() === 18) {\n        expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);\n    }\n    return parseExpressionStatement(parser, context, expr, start);\n}\nfunction parseDirective(parser, context, expression, token, start) {\n    const endIndex = parser.startIndex;\n    if (token !== 1074790417) {\n        parser.assignable = 2;\n        expression = parseMemberOrUpdateExpression(parser, context, undefined, expression, 0, 0, start);\n        if (parser.getToken() !== 1074790417) {\n            expression = parseAssignmentExpression(parser, context, undefined, 0, 0, start, expression);\n            if (parser.getToken() === 18) {\n                expression = parseSequenceExpression(parser, context, undefined, 0, start, expression);\n            }\n        }\n        matchOrInsertSemicolon(parser, context | 32);\n    }\n    const node = {\n        type: 'ExpressionStatement',\n        expression,\n    };\n    if (expression.type === 'Literal' && typeof expression.value === 'string') {\n        node.directive = parser.source.slice(start.index + 1, endIndex - 1);\n    }\n    return parser.finishNode(node, start);\n}\nfunction parseEmptyStatement(parser, context) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    return parser.finishNode({\n        type: 'EmptyStatement',\n    }, start);\n}\nfunction parseThrowStatement(parser, context, privateScope) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    if (parser.flags & 1)\n        parser.report(90);\n    const argument = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'ThrowStatement',\n        argument,\n    }, start);\n}\nfunction parseIfStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    consume(parser, context | 32, 67174411);\n    parser.assignable = 1;\n    const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context | 32, 16);\n    const consequent = parseConsequentOrAlternative(parser, context, scope, privateScope, labels);\n    let alternate = null;\n    if (parser.getToken() === 20563) {\n        nextToken(parser, context | 32);\n        alternate = parseConsequentOrAlternative(parser, context, scope, privateScope, labels);\n    }\n    return parser.finishNode({\n        type: 'IfStatement',\n        test,\n        consequent,\n        alternate,\n    }, start);\n}\nfunction parseConsequentOrAlternative(parser, context, scope, privateScope, labels) {\n    const { tokenStart } = parser;\n    return context & 1 ||\n        !parser.options.webcompat ||\n        parser.getToken() !== 86104\n        ? parseStatement(parser, context, scope, privateScope, 0, { $: labels }, 0)\n        : parseFunctionDeclaration(parser, context, scope?.createChildScope(), privateScope, 0, 0, 0, 0, tokenStart);\n}\nfunction parseSwitchStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    consume(parser, context | 32, 67174411);\n    const discriminant = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context, 16);\n    consume(parser, context, 2162700);\n    const cases = [];\n    let seenDefault = 0;\n    scope = scope?.createChildScope(8);\n    while (parser.getToken() !== 1074790415) {\n        const { tokenStart } = parser;\n        let test = null;\n        const consequent = [];\n        if (consumeOpt(parser, context | 32, 20556)) {\n            test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n        }\n        else {\n            consume(parser, context | 32, 20561);\n            if (seenDefault)\n                parser.report(89);\n            seenDefault = 1;\n        }\n        consume(parser, context | 32, 21);\n        while (parser.getToken() !== 20556 &&\n            parser.getToken() !== 1074790415 &&\n            parser.getToken() !== 20561) {\n            consequent.push(parseStatementListItem(parser, context | 4, scope, privateScope, 2, {\n                $: labels,\n            }));\n        }\n        cases.push(parser.finishNode({\n            type: 'SwitchCase',\n            test,\n            consequent,\n        }, tokenStart));\n    }\n    consume(parser, context | 32, 1074790415);\n    return parser.finishNode({\n        type: 'SwitchStatement',\n        discriminant,\n        cases,\n    }, start);\n}\nfunction parseWhileStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    consume(parser, context | 32, 67174411);\n    const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context | 32, 16);\n    const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);\n    return parser.finishNode({\n        type: 'WhileStatement',\n        test,\n        body,\n    }, start);\n}\nfunction parseIterationStatementBody(parser, context, scope, privateScope, labels) {\n    return parseStatement(parser, ((context | 131072) ^ 131072) | 128, scope, privateScope, 0, { loop: 1, $: labels }, 0);\n}\nfunction parseContinueStatement(parser, context, labels) {\n    if ((context & 128) === 0)\n        parser.report(68);\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    let label = null;\n    if ((parser.flags & 1) === 0 && parser.getToken() & 143360) {\n        const { tokenValue } = parser;\n        label = parseIdentifier(parser, context | 32);\n        if (!isValidLabel(parser, labels, tokenValue, 1))\n            parser.report(138, tokenValue);\n    }\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'ContinueStatement',\n        label,\n    }, start);\n}\nfunction parseBreakStatement(parser, context, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    let label = null;\n    if ((parser.flags & 1) === 0 && parser.getToken() & 143360) {\n        const { tokenValue } = parser;\n        label = parseIdentifier(parser, context | 32);\n        if (!isValidLabel(parser, labels, tokenValue, 0))\n            parser.report(138, tokenValue);\n    }\n    else if ((context & (4 | 128)) === 0) {\n        parser.report(69);\n    }\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'BreakStatement',\n        label,\n    }, start);\n}\nfunction parseWithStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    if (context & 1)\n        parser.report(91);\n    consume(parser, context | 32, 67174411);\n    const object = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context | 32, 16);\n    const body = parseStatement(parser, context, scope, privateScope, 2, labels, 0);\n    return parser.finishNode({\n        type: 'WithStatement',\n        object,\n        body,\n    }, start);\n}\nfunction parseDebuggerStatement(parser, context) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'DebuggerStatement',\n    }, start);\n}\nfunction parseTryStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    const firstScope = scope?.createChildScope(16);\n    const block = parseBlock(parser, context, firstScope, privateScope, { $: labels });\n    const { tokenStart } = parser;\n    const handler = consumeOpt(parser, context | 32, 20557)\n        ? parseCatchBlock(parser, context, scope, privateScope, labels, tokenStart)\n        : null;\n    let finalizer = null;\n    if (parser.getToken() === 20566) {\n        nextToken(parser, context | 32);\n        const finalizerScope = scope?.createChildScope(4);\n        const block = parseBlock(parser, context, finalizerScope, privateScope, { $: labels });\n        finalizer = block;\n    }\n    if (!handler && !finalizer) {\n        parser.report(88);\n    }\n    return parser.finishNode({\n        type: 'TryStatement',\n        block,\n        handler,\n        finalizer,\n    }, start);\n}\nfunction parseCatchBlock(parser, context, scope, privateScope, labels, start) {\n    let param = null;\n    let additionalScope = scope;\n    if (consumeOpt(parser, context, 67174411)) {\n        scope = scope?.createChildScope(4);\n        param = parseBindingPattern(parser, context, scope, privateScope, (parser.getToken() & 2097152) === 2097152\n            ? 256\n            : 512, 0);\n        if (parser.getToken() === 18) {\n            parser.report(86);\n        }\n        else if (parser.getToken() === 1077936155) {\n            parser.report(87);\n        }\n        consume(parser, context | 32, 16);\n    }\n    additionalScope = scope?.createChildScope(32);\n    const body = parseBlock(parser, context, additionalScope, privateScope, { $: labels });\n    return parser.finishNode({\n        type: 'CatchClause',\n        param,\n        body,\n    }, start);\n}\nfunction parseStaticBlock(parser, context, scope, privateScope, start) {\n    scope = scope?.createChildScope();\n    const ctorContext = 512 | 4096 | 1024 | 4 | 128;\n    context =\n        ((context | ctorContext) ^ ctorContext) |\n            256 |\n            2048 |\n            524288 |\n            65536;\n    return parseBlock(parser, context, scope, privateScope, {}, start, 'StaticBlock');\n}\nfunction parseDoWhileStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);\n    consume(parser, context, 20578);\n    consume(parser, context | 32, 67174411);\n    const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context | 32, 16);\n    consumeOpt(parser, context | 32, 1074790417);\n    return parser.finishNode({\n        type: 'DoWhileStatement',\n        body,\n        test,\n    }, start);\n}\nfunction parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin) {\n    const { tokenValue, tokenStart } = parser;\n    const token = parser.getToken();\n    let expr = parseIdentifier(parser, context);\n    if (parser.getToken() & (143360 | 2097152)) {\n        const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, 8, 0);\n        matchOrInsertSemicolon(parser, context | 32);\n        return parser.finishNode({\n            type: 'VariableDeclaration',\n            kind: 'let',\n            declarations,\n        }, tokenStart);\n    }\n    parser.assignable = 1;\n    if (context & 1)\n        parser.report(85);\n    if (parser.getToken() === 21) {\n        return parseLabelledStatement(parser, context, scope, privateScope, origin, {}, tokenValue, expr, token, 0, tokenStart);\n    }\n    if (parser.getToken() === 10) {\n        let scope = void 0;\n        if (parser.options.lexical)\n            scope = createArrowHeadParsingScope(parser, context, tokenValue);\n        parser.flags = (parser.flags | 128) ^ 128;\n        expr = parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, tokenStart);\n    }\n    else {\n        expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);\n        expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);\n    }\n    if (parser.getToken() === 18) {\n        expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);\n    }\n    return parseExpressionStatement(parser, context, expr, tokenStart);\n}\nfunction parseLexicalDeclaration(parser, context, scope, privateScope, kind, origin) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin);\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'VariableDeclaration',\n        kind: kind & 8 ? 'let' : 'const',\n        declarations,\n    }, start);\n}\nfunction parseVariableStatement(parser, context, scope, privateScope, origin) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, 4, origin);\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode({\n        type: 'VariableDeclaration',\n        kind: 'var',\n        declarations,\n    }, start);\n}\nfunction parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin) {\n    let bindingCount = 1;\n    const list = [\n        parseVariableDeclaration(parser, context, scope, privateScope, kind, origin),\n    ];\n    while (consumeOpt(parser, context, 18)) {\n        bindingCount++;\n        list.push(parseVariableDeclaration(parser, context, scope, privateScope, kind, origin));\n    }\n    if (bindingCount > 1 && origin & 32 && parser.getToken() & 262144) {\n        parser.report(61, KeywordDescTable[parser.getToken() & 255]);\n    }\n    return list;\n}\nfunction parseVariableDeclaration(parser, context, scope, privateScope, kind, origin) {\n    const { tokenStart } = parser;\n    const token = parser.getToken();\n    let init = null;\n    const id = parseBindingPattern(parser, context, scope, privateScope, kind, origin);\n    if (parser.getToken() === 1077936155) {\n        nextToken(parser, context | 32);\n        init = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n        if (origin & 32 || (token & 2097152) === 0) {\n            if (parser.getToken() === 471156 ||\n                (parser.getToken() === 8673330 &&\n                    (token & 2097152 || (kind & 4) === 0 || context & 1))) {\n                throw new ParseError(tokenStart, parser.currentLocation, 60, parser.getToken() === 471156 ? 'of' : 'in');\n            }\n        }\n    }\n    else if ((kind & 16 || (token & 2097152) > 0) &&\n        (parser.getToken() & 262144) !== 262144) {\n        parser.report(59, kind & 16 ? 'const' : 'destructuring');\n    }\n    return parser.finishNode({\n        type: 'VariableDeclarator',\n        id,\n        init,\n    }, tokenStart);\n}\nfunction parseForStatement(parser, context, scope, privateScope, labels) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    const forAwait = ((context & 2048) > 0 || ((context & 2) > 0 && (context & 8) > 0)) &&\n        consumeOpt(parser, context, 209006);\n    consume(parser, context | 32, 67174411);\n    scope = scope?.createChildScope(1);\n    let test = null;\n    let update = null;\n    let destructible = 0;\n    let init = null;\n    let isVarDecl = parser.getToken() === 86088 ||\n        parser.getToken() === 241737 ||\n        parser.getToken() === 86090;\n    let right;\n    const { tokenStart } = parser;\n    const token = parser.getToken();\n    if (isVarDecl) {\n        if (token === 241737) {\n            init = parseIdentifier(parser, context);\n            if (parser.getToken() & (143360 | 2097152)) {\n                if (parser.getToken() === 8673330) {\n                    if (context & 1)\n                        parser.report(67);\n                }\n                else {\n                    init = parser.finishNode({\n                        type: 'VariableDeclaration',\n                        kind: 'let',\n                        declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 8, 32),\n                    }, tokenStart);\n                }\n                parser.assignable = 1;\n            }\n            else if (context & 1) {\n                parser.report(67);\n            }\n            else {\n                isVarDecl = false;\n                parser.assignable = 1;\n                init = parseMemberOrUpdateExpression(parser, context, privateScope, init, 0, 0, tokenStart);\n                if (parser.getToken() === 471156)\n                    parser.report(115);\n            }\n        }\n        else {\n            nextToken(parser, context);\n            init = parser.finishNode(token === 86088\n                ? {\n                    type: 'VariableDeclaration',\n                    kind: 'var',\n                    declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 4, 32),\n                }\n                : {\n                    type: 'VariableDeclaration',\n                    kind: 'const',\n                    declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 16, 32),\n                }, tokenStart);\n            parser.assignable = 1;\n        }\n    }\n    else if (token === 1074790417) {\n        if (forAwait)\n            parser.report(82);\n    }\n    else if ((token & 2097152) === 2097152) {\n        const patternStart = parser.tokenStart;\n        init =\n            token === 2162700\n                ? parseObjectLiteralOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32)\n                : parseArrayExpressionOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32);\n        destructible = parser.destructible;\n        if (destructible & 64) {\n            parser.report(63);\n        }\n        parser.assignable =\n            destructible & 16 ? 2 : 1;\n        init = parseMemberOrUpdateExpression(parser, context | 131072, privateScope, init, 0, 0, patternStart);\n    }\n    else {\n        init = parseLeftHandSideExpression(parser, context | 131072, privateScope, 1, 0, 1);\n    }\n    if ((parser.getToken() & 262144) === 262144) {\n        if (parser.getToken() === 471156) {\n            if (parser.assignable & 2)\n                parser.report(80, forAwait ? 'await' : 'of');\n            reinterpretToPattern(parser, init);\n            nextToken(parser, context | 32);\n            right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n            consume(parser, context | 32, 16);\n            const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);\n            return parser.finishNode({\n                type: 'ForOfStatement',\n                left: init,\n                right,\n                body,\n                await: forAwait,\n            }, start);\n        }\n        if (parser.assignable & 2)\n            parser.report(80, 'in');\n        reinterpretToPattern(parser, init);\n        nextToken(parser, context | 32);\n        if (forAwait)\n            parser.report(82);\n        right = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n        consume(parser, context | 32, 16);\n        const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);\n        return parser.finishNode({\n            type: 'ForInStatement',\n            body,\n            left: init,\n            right,\n        }, start);\n    }\n    if (forAwait)\n        parser.report(82);\n    if (!isVarDecl) {\n        if (destructible & 8 && parser.getToken() !== 1077936155) {\n            parser.report(80, 'loop');\n        }\n        init = parseAssignmentExpression(parser, context | 131072, privateScope, 0, 0, tokenStart, init);\n    }\n    if (parser.getToken() === 18)\n        init = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, init);\n    consume(parser, context | 32, 1074790417);\n    if (parser.getToken() !== 1074790417)\n        test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context | 32, 1074790417);\n    if (parser.getToken() !== 16)\n        update = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);\n    consume(parser, context | 32, 16);\n    const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);\n    return parser.finishNode({\n        type: 'ForStatement',\n        init,\n        test,\n        update,\n        body,\n    }, start);\n}\nfunction parseRestrictedIdentifier(parser, context, scope) {\n    if (!isValidIdentifier(context, parser.getToken()))\n        parser.report(118);\n    if ((parser.getToken() & 537079808) === 537079808)\n        parser.report(119);\n    scope?.addBlockName(context, parser.tokenValue, 8, 0);\n    return parseIdentifier(parser, context);\n}\nfunction parseImportDeclaration(parser, context, scope) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    let source = null;\n    const { tokenStart } = parser;\n    let specifiers = [];\n    if (parser.getToken() === 134283267) {\n        source = parseLiteral(parser, context);\n    }\n    else {\n        if (parser.getToken() & 143360) {\n            const local = parseRestrictedIdentifier(parser, context, scope);\n            specifiers = [\n                parser.finishNode({\n                    type: 'ImportDefaultSpecifier',\n                    local,\n                }, tokenStart),\n            ];\n            if (consumeOpt(parser, context, 18)) {\n                switch (parser.getToken()) {\n                    case 8391476:\n                        specifiers.push(parseImportNamespaceSpecifier(parser, context, scope));\n                        break;\n                    case 2162700:\n                        parseImportSpecifierOrNamedImports(parser, context, scope, specifiers);\n                        break;\n                    default:\n                        parser.report(107);\n                }\n            }\n        }\n        else {\n            switch (parser.getToken()) {\n                case 8391476:\n                    specifiers = [parseImportNamespaceSpecifier(parser, context, scope)];\n                    break;\n                case 2162700:\n                    parseImportSpecifierOrNamedImports(parser, context, scope, specifiers);\n                    break;\n                case 67174411:\n                    return parseImportCallDeclaration(parser, context, undefined, start);\n                case 67108877:\n                    return parseImportMetaDeclaration(parser, context, start);\n                default:\n                    parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n            }\n        }\n        source = parseModuleSpecifier(parser, context);\n    }\n    const attributes = parseImportAttributes(parser, context);\n    const node = {\n        type: 'ImportDeclaration',\n        specifiers,\n        source,\n        attributes,\n    };\n    matchOrInsertSemicolon(parser, context | 32);\n    return parser.finishNode(node, start);\n}\nfunction parseImportNamespaceSpecifier(parser, context, scope) {\n    const { tokenStart } = parser;\n    nextToken(parser, context);\n    consume(parser, context, 77932);\n    if ((parser.getToken() & 134217728) === 134217728) {\n        throw new ParseError(tokenStart, parser.currentLocation, 30, KeywordDescTable[parser.getToken() & 255]);\n    }\n    return parser.finishNode({\n        type: 'ImportNamespaceSpecifier',\n        local: parseRestrictedIdentifier(parser, context, scope),\n    }, tokenStart);\n}\nfunction parseModuleSpecifier(parser, context) {\n    consume(parser, context, 209011);\n    if (parser.getToken() !== 134283267)\n        parser.report(105, 'Import');\n    return parseLiteral(parser, context);\n}\nfunction parseImportSpecifierOrNamedImports(parser, context, scope, specifiers) {\n    nextToken(parser, context);\n    while (parser.getToken() & 143360 || parser.getToken() === 134283267) {\n        let { tokenValue, tokenStart } = parser;\n        const token = parser.getToken();\n        const imported = parseModuleExportName(parser, context);\n        let local;\n        if (consumeOpt(parser, context, 77932)) {\n            if ((parser.getToken() & 134217728) === 134217728 ||\n                parser.getToken() === 18) {\n                parser.report(106);\n            }\n            else {\n                validateBindingIdentifier(parser, context, 16, parser.getToken(), 0);\n            }\n            tokenValue = parser.tokenValue;\n            local = parseIdentifier(parser, context);\n        }\n        else if (imported.type === 'Identifier') {\n            validateBindingIdentifier(parser, context, 16, token, 0);\n            local = imported;\n        }\n        else {\n            parser.report(25, KeywordDescTable[77932 & 255]);\n        }\n        scope?.addBlockName(context, tokenValue, 8, 0);\n        specifiers.push(parser.finishNode({\n            type: 'ImportSpecifier',\n            local,\n            imported,\n        }, tokenStart));\n        if (parser.getToken() !== 1074790415)\n            consume(parser, context, 18);\n    }\n    consume(parser, context, 1074790415);\n    return specifiers;\n}\nfunction parseImportMetaDeclaration(parser, context, start) {\n    let expr = parseImportMetaExpression(parser, context, parser.finishNode({\n        type: 'Identifier',\n        name: 'import',\n    }, start), start);\n    expr = parseMemberOrUpdateExpression(parser, context, undefined, expr, 0, 0, start);\n    expr = parseAssignmentExpression(parser, context, undefined, 0, 0, start, expr);\n    if (parser.getToken() === 18) {\n        expr = parseSequenceExpression(parser, context, undefined, 0, start, expr);\n    }\n    return parseExpressionStatement(parser, context, expr, start);\n}\nfunction parseImportCallDeclaration(parser, context, privateScope, start) {\n    let expr = parseImportExpression(parser, context, privateScope, 0, start);\n    expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start);\n    if (parser.getToken() === 18) {\n        expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);\n    }\n    return parseExpressionStatement(parser, context, expr, start);\n}\nfunction parseExportDeclaration(parser, context, scope) {\n    const start = parser.leadingDecorators.decorators.length ? parser.leadingDecorators.start : parser.tokenStart;\n    nextToken(parser, context | 32);\n    const specifiers = [];\n    let declaration = null;\n    let source = null;\n    let attributes = [];\n    if (consumeOpt(parser, context | 32, 20561)) {\n        switch (parser.getToken()) {\n            case 86104: {\n                declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 0, parser.tokenStart);\n                break;\n            }\n            case 132:\n            case 86094:\n                declaration = parseClassDeclaration(parser, context, scope, undefined, 1);\n                break;\n            case 209005: {\n                const { tokenStart } = parser;\n                declaration = parseIdentifier(parser, context);\n                const { flags } = parser;\n                if ((flags & 1) === 0) {\n                    if (parser.getToken() === 86104) {\n                        declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 1, tokenStart);\n                    }\n                    else {\n                        if (parser.getToken() === 67174411) {\n                            declaration = parseAsyncArrowOrCallExpression(parser, context, undefined, declaration, 1, 1, 0, flags, tokenStart);\n                            declaration = parseMemberOrUpdateExpression(parser, context, undefined, declaration, 0, 0, tokenStart);\n                            declaration = parseAssignmentExpression(parser, context, undefined, 0, 0, tokenStart, declaration);\n                        }\n                        else if (parser.getToken() & 143360) {\n                            if (scope)\n                                scope = createArrowHeadParsingScope(parser, context, parser.tokenValue);\n                            declaration = parseIdentifier(parser, context);\n                            declaration = parseArrowFunctionExpression(parser, context, scope, undefined, [declaration], 1, tokenStart);\n                        }\n                    }\n                }\n                break;\n            }\n            default:\n                declaration = parseExpression(parser, context, undefined, 1, 0, parser.tokenStart);\n                matchOrInsertSemicolon(parser, context | 32);\n        }\n        if (scope)\n            parser.declareUnboundVariable('default');\n        return parser.finishNode({\n            type: 'ExportDefaultDeclaration',\n            declaration,\n        }, start);\n    }\n    switch (parser.getToken()) {\n        case 8391476: {\n            nextToken(parser, context);\n            let exported = null;\n            const isNamedDeclaration = consumeOpt(parser, context, 77932);\n            if (isNamedDeclaration) {\n                if (scope)\n                    parser.declareUnboundVariable(parser.tokenValue);\n                exported = parseModuleExportName(parser, context);\n            }\n            consume(parser, context, 209011);\n            if (parser.getToken() !== 134283267)\n                parser.report(105, 'Export');\n            source = parseLiteral(parser, context);\n            const attributes = parseImportAttributes(parser, context);\n            const node = {\n                type: 'ExportAllDeclaration',\n                source,\n                exported,\n                attributes,\n            };\n            matchOrInsertSemicolon(parser, context | 32);\n            return parser.finishNode(node, start);\n        }\n        case 2162700: {\n            nextToken(parser, context);\n            const tmpExportedNames = [];\n            const tmpExportedBindings = [];\n            let hasLiteralLocal = 0;\n            while (parser.getToken() & 143360 || parser.getToken() === 134283267) {\n                const { tokenStart, tokenValue } = parser;\n                const local = parseModuleExportName(parser, context);\n                if (local.type === 'Literal') {\n                    hasLiteralLocal = 1;\n                }\n                let exported;\n                if (parser.getToken() === 77932) {\n                    nextToken(parser, context);\n                    if ((parser.getToken() & 143360) === 0 && parser.getToken() !== 134283267) {\n                        parser.report(106);\n                    }\n                    if (scope) {\n                        tmpExportedNames.push(parser.tokenValue);\n                        tmpExportedBindings.push(tokenValue);\n                    }\n                    exported = parseModuleExportName(parser, context);\n                }\n                else {\n                    if (scope) {\n                        tmpExportedNames.push(parser.tokenValue);\n                        tmpExportedBindings.push(parser.tokenValue);\n                    }\n                    exported = local;\n                }\n                specifiers.push(parser.finishNode({\n                    type: 'ExportSpecifier',\n                    local,\n                    exported,\n                }, tokenStart));\n                if (parser.getToken() !== 1074790415)\n                    consume(parser, context, 18);\n            }\n            consume(parser, context, 1074790415);\n            if (consumeOpt(parser, context, 209011)) {\n                if (parser.getToken() !== 134283267)\n                    parser.report(105, 'Export');\n                source = parseLiteral(parser, context);\n                attributes = parseImportAttributes(parser, context);\n                if (scope) {\n                    tmpExportedNames.forEach((n) => parser.declareUnboundVariable(n));\n                }\n            }\n            else {\n                if (hasLiteralLocal) {\n                    parser.report(172);\n                }\n                if (scope) {\n                    tmpExportedNames.forEach((n) => parser.declareUnboundVariable(n));\n                    tmpExportedBindings.forEach((b) => parser.addBindingToExports(b));\n                }\n            }\n            matchOrInsertSemicolon(parser, context | 32);\n            break;\n        }\n        case 132:\n        case 86094:\n            declaration = parseClassDeclaration(parser, context, scope, undefined, 2);\n            break;\n        case 86104:\n            declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 2, 0, parser.tokenStart);\n            break;\n        case 241737:\n            declaration = parseLexicalDeclaration(parser, context, scope, undefined, 8, 64);\n            break;\n        case 86090:\n            declaration = parseLexicalDeclaration(parser, context, scope, undefined, 16, 64);\n            break;\n        case 86088:\n            declaration = parseVariableStatement(parser, context, scope, undefined, 64);\n            break;\n        case 209005: {\n            const { tokenStart } = parser;\n            nextToken(parser, context);\n            if ((parser.flags & 1) === 0 && parser.getToken() === 86104) {\n                declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 2, 1, tokenStart);\n                break;\n            }\n        }\n        default:\n            parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n    const node = {\n        type: 'ExportNamedDeclaration',\n        declaration,\n        specifiers,\n        source,\n        attributes: attributes,\n    };\n    return parser.finishNode(node, start);\n}\nfunction parseExpression(parser, context, privateScope, canAssign, inGroup, start) {\n    let expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, 1, start);\n    expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start);\n    return parseAssignmentExpression(parser, context, privateScope, inGroup, 0, start, expr);\n}\nfunction parseSequenceExpression(parser, context, privateScope, inGroup, start, expr) {\n    const expressions = [expr];\n    while (consumeOpt(parser, context | 32, 18)) {\n        expressions.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart));\n    }\n    return parser.finishNode({\n        type: 'SequenceExpression',\n        expressions,\n    }, start);\n}\nfunction parseExpressions(parser, context, privateScope, inGroup, canAssign, start) {\n    const expr = parseExpression(parser, context, privateScope, canAssign, inGroup, start);\n    return parser.getToken() === 18\n        ? parseSequenceExpression(parser, context, privateScope, inGroup, start, expr)\n        : expr;\n}\nfunction parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, start, left) {\n    const token = parser.getToken();\n    if ((token & 4194304) === 4194304) {\n        if (parser.assignable & 2)\n            parser.report(26);\n        if ((!isPattern && token === 1077936155 && left.type === 'ArrayExpression') ||\n            left.type === 'ObjectExpression') {\n            reinterpretToPattern(parser, left);\n        }\n        nextToken(parser, context | 32);\n        const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n        parser.assignable = 2;\n        return parser.finishNode(isPattern\n            ? {\n                type: 'AssignmentPattern',\n                left,\n                right,\n            }\n            : {\n                type: 'AssignmentExpression',\n                left,\n                operator: KeywordDescTable[token & 255],\n                right,\n            }, start);\n    }\n    if ((token & 8388608) === 8388608) {\n        left = parseBinaryExpression(parser, context, privateScope, inGroup, start, 4, token, left);\n    }\n    if (consumeOpt(parser, context | 32, 22)) {\n        left = parseConditionalExpression(parser, context, privateScope, left, start);\n    }\n    return left;\n}\nfunction parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, start, left) {\n    const token = parser.getToken();\n    nextToken(parser, context | 32);\n    const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n    left = parser.finishNode(isPattern\n        ? {\n            type: 'AssignmentPattern',\n            left,\n            right,\n        }\n        : {\n            type: 'AssignmentExpression',\n            left,\n            operator: KeywordDescTable[token & 255],\n            right,\n        }, start);\n    parser.assignable = 2;\n    return left;\n}\nfunction parseConditionalExpression(parser, context, privateScope, test, start) {\n    const consequent = parseExpression(parser, (context | 131072) ^ 131072, privateScope, 1, 0, parser.tokenStart);\n    consume(parser, context | 32, 21);\n    parser.assignable = 1;\n    const alternate = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'ConditionalExpression',\n        test,\n        consequent,\n        alternate,\n    }, start);\n}\nfunction parseBinaryExpression(parser, context, privateScope, inGroup, start, minPrecedence, operator, left) {\n    const bit = -((context & 131072) > 0) & 8673330;\n    let t;\n    let precedence;\n    parser.assignable = 2;\n    while (parser.getToken() & 8388608) {\n        t = parser.getToken();\n        precedence = t & 3840;\n        if ((t & 524288 && operator & 268435456) || (operator & 524288 && t & 268435456)) {\n            parser.report(165);\n        }\n        if (precedence + ((t === 8391735) << 8) - ((bit === t) << 12) <= minPrecedence)\n            break;\n        nextToken(parser, context | 32);\n        left = parser.finishNode({\n            type: t & 524288 || t & 268435456 ? 'LogicalExpression' : 'BinaryExpression',\n            left,\n            right: parseBinaryExpression(parser, context, privateScope, inGroup, parser.tokenStart, precedence, t, parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1)),\n            operator: KeywordDescTable[t & 255],\n        }, start);\n    }\n    if (parser.getToken() === 1077936155)\n        parser.report(26);\n    return left;\n}\nfunction parseUnaryExpression(parser, context, privateScope, isLHS, inGroup) {\n    if (!isLHS)\n        parser.report(0);\n    const { tokenStart } = parser;\n    const unaryOperator = parser.getToken();\n    nextToken(parser, context | 32);\n    const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1);\n    if (parser.getToken() === 8391735)\n        parser.report(33);\n    if (context & 1 && unaryOperator === 16863276) {\n        if (arg.type === 'Identifier') {\n            parser.report(121);\n        }\n        else if (isPropertyWithPrivateFieldKey(arg)) {\n            parser.report(127);\n        }\n    }\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'UnaryExpression',\n        operator: KeywordDescTable[unaryOperator & 255],\n        argument: arg,\n        prefix: true,\n    }, tokenStart);\n}\nfunction parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start) {\n    const token = parser.getToken();\n    const expr = parseIdentifier(parser, context);\n    const { flags } = parser;\n    if ((flags & 1) === 0) {\n        if (parser.getToken() === 86104) {\n            return parseFunctionExpression(parser, context, privateScope, 1, inGroup, start);\n        }\n        if (isValidIdentifier(context, parser.getToken())) {\n            if (!isLHS)\n                parser.report(0);\n            if ((parser.getToken() & 36864) === 36864) {\n                parser.flags |= 256;\n            }\n            return parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start);\n        }\n    }\n    if (!inNew && parser.getToken() === 67174411) {\n        return parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, canAssign, 1, 0, flags, start);\n    }\n    if (parser.getToken() === 10) {\n        classifyIdentifier(parser, context, token);\n        if (inNew)\n            parser.report(51);\n        if ((token & 36864) === 36864) {\n            parser.flags |= 256;\n        }\n        return parseArrowFromIdentifier(parser, context, privateScope, parser.tokenValue, expr, inNew, canAssign, 0, start);\n    }\n    parser.assignable = 1;\n    return expr;\n}\nfunction parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start) {\n    if (inGroup)\n        parser.destructible |= 256;\n    if (context & 1024) {\n        nextToken(parser, context | 32);\n        if (context & 8192)\n            parser.report(32);\n        if (!canAssign)\n            parser.report(26);\n        if (parser.getToken() === 22)\n            parser.report(124);\n        let argument = null;\n        let delegate = false;\n        if ((parser.flags & 1) === 0) {\n            delegate = consumeOpt(parser, context | 32, 8391476);\n            if (parser.getToken() & (12288 | 65536) || delegate) {\n                argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n            }\n        }\n        else if (parser.getToken() === 8391476) {\n            parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n        }\n        parser.assignable = 2;\n        return parser.finishNode({\n            type: 'YieldExpression',\n            argument,\n            delegate,\n        }, start);\n    }\n    if (context & 1)\n        parser.report(97, 'yield');\n    return parseIdentifierOrArrow(parser, context, privateScope);\n}\nfunction parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start) {\n    if (inGroup)\n        parser.destructible |= 128;\n    if (context & 524288)\n        parser.report(177);\n    const possibleIdentifierOrArrowFunc = parseIdentifierOrArrow(parser, context, privateScope);\n    const isIdentifier = possibleIdentifierOrArrowFunc.type === 'ArrowFunctionExpression' ||\n        (parser.getToken() & 65536) === 0;\n    if (isIdentifier) {\n        if (context & 2048)\n            throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 176);\n        if (context & 2)\n            throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 110);\n        if (context & 8192 && context & 2048)\n            throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 110);\n        return possibleIdentifierOrArrowFunc;\n    }\n    if (context & 8192) {\n        throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 31);\n    }\n    if (context & 2048 || (context & 2 && context & 8)) {\n        if (inNew)\n            throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 0);\n        const argument = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);\n        if (parser.getToken() === 8391735)\n            parser.report(33);\n        parser.assignable = 2;\n        return parser.finishNode({\n            type: 'AwaitExpression',\n            argument,\n        }, start);\n    }\n    if (context & 2)\n        throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 98);\n    return possibleIdentifierOrArrowFunc;\n}\nfunction parseFunctionBody(parser, context, scope, privateScope, origin, funcNameToken, functionScope) {\n    const { tokenStart } = parser;\n    consume(parser, context | 32, 2162700);\n    const body = [];\n    if (parser.getToken() !== 1074790415) {\n        while (parser.getToken() === 134283267) {\n            const { index, tokenStart, tokenIndex, tokenValue } = parser;\n            const token = parser.getToken();\n            const expr = parseLiteral(parser, context);\n            if (isValidStrictMode(parser, index, tokenIndex, tokenValue)) {\n                context |= 1;\n                if (parser.flags & 128) {\n                    throw new ParseError(tokenStart, parser.currentLocation, 66);\n                }\n                if (parser.flags & 64) {\n                    throw new ParseError(tokenStart, parser.currentLocation, 9);\n                }\n                if (parser.flags & 4096) {\n                    throw new ParseError(tokenStart, parser.currentLocation, 15);\n                }\n                functionScope?.reportScopeError();\n            }\n            body.push(parseDirective(parser, context, expr, token, tokenStart));\n        }\n        if (context & 1) {\n            if (funcNameToken) {\n                if ((funcNameToken & 537079808) === 537079808) {\n                    parser.report(119);\n                }\n                if ((funcNameToken & 36864) === 36864) {\n                    parser.report(40);\n                }\n            }\n            if (parser.flags & 512)\n                parser.report(119);\n            if (parser.flags & 256)\n                parser.report(118);\n        }\n    }\n    parser.flags =\n        (parser.flags | 512 | 256 | 64 | 4096) ^\n            (512 | 256 | 64 | 4096);\n    parser.destructible = (parser.destructible | 256) ^ 256;\n    while (parser.getToken() !== 1074790415) {\n        body.push(parseStatementListItem(parser, context, scope, privateScope, 4, {}));\n    }\n    consume(parser, origin & (16 | 8) ? context | 32 : context, 1074790415);\n    parser.flags &= -4289;\n    if (parser.getToken() === 1077936155)\n        parser.report(26);\n    return parser.finishNode({\n        type: 'BlockStatement',\n        body,\n    }, tokenStart);\n}\nfunction parseSuperExpression(parser, context) {\n    const { tokenStart } = parser;\n    nextToken(parser, context);\n    switch (parser.getToken()) {\n        case 67108990:\n            parser.report(167);\n        case 67174411: {\n            if ((context & 512) === 0)\n                parser.report(28);\n            parser.assignable = 2;\n            break;\n        }\n        case 69271571:\n        case 67108877: {\n            if ((context & 256) === 0)\n                parser.report(29);\n            parser.assignable = 1;\n            break;\n        }\n        default:\n            parser.report(30, 'super');\n    }\n    return parser.finishNode({ type: 'Super' }, tokenStart);\n}\nfunction parseLeftHandSideExpression(parser, context, privateScope, canAssign, inGroup, isLHS) {\n    const start = parser.tokenStart;\n    const expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, isLHS, start);\n    return parseMemberOrUpdateExpression(parser, context, privateScope, expression, inGroup, 0, start);\n}\nfunction parseUpdateExpression(parser, context, expr, start) {\n    if (parser.assignable & 2)\n        parser.report(55);\n    const token = parser.getToken();\n    nextToken(parser, context);\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'UpdateExpression',\n        argument: expr,\n        operator: KeywordDescTable[token & 255],\n        prefix: false,\n    }, start);\n}\nfunction parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, inChain, start) {\n    if ((parser.getToken() & 33619968) === 33619968 && (parser.flags & 1) === 0) {\n        expr = parseUpdateExpression(parser, context, expr, start);\n    }\n    else if ((parser.getToken() & 67108864) === 67108864) {\n        context = (context | 131072) ^ 131072;\n        switch (parser.getToken()) {\n            case 67108877: {\n                nextToken(parser, (context | 262144 | 8) ^ 8);\n                if (context & 16 && parser.getToken() === 130 && parser.tokenValue === 'super') {\n                    parser.report(173);\n                }\n                parser.assignable = 1;\n                const property = parsePropertyOrPrivatePropertyName(parser, context | 64, privateScope);\n                expr = parser.finishNode({\n                    type: 'MemberExpression',\n                    object: expr,\n                    computed: false,\n                    property,\n                    optional: false,\n                }, start);\n                break;\n            }\n            case 69271571: {\n                let restoreHasOptionalChaining = false;\n                if ((parser.flags & 2048) === 2048) {\n                    restoreHasOptionalChaining = true;\n                    parser.flags = (parser.flags | 2048) ^ 2048;\n                }\n                nextToken(parser, context | 32);\n                const { tokenStart } = parser;\n                const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);\n                consume(parser, context, 20);\n                parser.assignable = 1;\n                expr = parser.finishNode({\n                    type: 'MemberExpression',\n                    object: expr,\n                    computed: true,\n                    property,\n                    optional: false,\n                }, start);\n                if (restoreHasOptionalChaining) {\n                    parser.flags |= 2048;\n                }\n                break;\n            }\n            case 67174411: {\n                if ((parser.flags & 1024) === 1024) {\n                    parser.flags = (parser.flags | 1024) ^ 1024;\n                    return expr;\n                }\n                let restoreHasOptionalChaining = false;\n                if ((parser.flags & 2048) === 2048) {\n                    restoreHasOptionalChaining = true;\n                    parser.flags = (parser.flags | 2048) ^ 2048;\n                }\n                const args = parseArguments(parser, context, privateScope, inGroup);\n                parser.assignable = 2;\n                expr = parser.finishNode({\n                    type: 'CallExpression',\n                    callee: expr,\n                    arguments: args,\n                    optional: false,\n                }, start);\n                if (restoreHasOptionalChaining) {\n                    parser.flags |= 2048;\n                }\n                break;\n            }\n            case 67108990: {\n                nextToken(parser, (context | 262144 | 8) ^ 8);\n                parser.flags |= 2048;\n                parser.assignable = 2;\n                expr = parseOptionalChain(parser, context, privateScope, expr, start);\n                break;\n            }\n            default:\n                if ((parser.flags & 2048) === 2048) {\n                    parser.report(166);\n                }\n                parser.assignable = 2;\n                expr = parser.finishNode({\n                    type: 'TaggedTemplateExpression',\n                    tag: expr,\n                    quasi: parser.getToken() === 67174408\n                        ? parseTemplate(parser, context | 64, privateScope)\n                        : parseTemplateLiteral(parser, context),\n                }, start);\n        }\n        expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 1, start);\n    }\n    if (inChain === 0 && (parser.flags & 2048) === 2048) {\n        parser.flags = (parser.flags | 2048) ^ 2048;\n        expr = parser.finishNode({\n            type: 'ChainExpression',\n            expression: expr,\n        }, start);\n    }\n    return expr;\n}\nfunction parseOptionalChain(parser, context, privateScope, expr, start) {\n    let restoreHasOptionalChaining = false;\n    let node;\n    if (parser.getToken() === 69271571 || parser.getToken() === 67174411) {\n        if ((parser.flags & 2048) === 2048) {\n            restoreHasOptionalChaining = true;\n            parser.flags = (parser.flags | 2048) ^ 2048;\n        }\n    }\n    if (parser.getToken() === 69271571) {\n        nextToken(parser, context | 32);\n        const { tokenStart } = parser;\n        const property = parseExpressions(parser, context, privateScope, 0, 1, tokenStart);\n        consume(parser, context, 20);\n        parser.assignable = 2;\n        node = parser.finishNode({\n            type: 'MemberExpression',\n            object: expr,\n            computed: true,\n            optional: true,\n            property,\n        }, start);\n    }\n    else if (parser.getToken() === 67174411) {\n        const args = parseArguments(parser, context, privateScope, 0);\n        parser.assignable = 2;\n        node = parser.finishNode({\n            type: 'CallExpression',\n            callee: expr,\n            arguments: args,\n            optional: true,\n        }, start);\n    }\n    else {\n        const property = parsePropertyOrPrivatePropertyName(parser, context, privateScope);\n        parser.assignable = 2;\n        node = parser.finishNode({\n            type: 'MemberExpression',\n            object: expr,\n            computed: false,\n            optional: true,\n            property,\n        }, start);\n    }\n    if (restoreHasOptionalChaining) {\n        parser.flags |= 2048;\n    }\n    return node;\n}\nfunction parsePropertyOrPrivatePropertyName(parser, context, privateScope) {\n    if ((parser.getToken() & 143360) === 0 &&\n        parser.getToken() !== -2147483528 &&\n        parser.getToken() !== -2147483527 &&\n        parser.getToken() !== 130) {\n        parser.report(160);\n    }\n    return parser.getToken() === 130\n        ? parsePrivateIdentifier(parser, context, privateScope, 0)\n        : parseIdentifier(parser, context);\n}\nfunction parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start) {\n    if (inNew)\n        parser.report(56);\n    if (!isLHS)\n        parser.report(0);\n    const token = parser.getToken();\n    nextToken(parser, context | 32);\n    const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);\n    if (parser.assignable & 2) {\n        parser.report(55);\n    }\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'UpdateExpression',\n        argument: arg,\n        operator: KeywordDescTable[token & 255],\n        prefix: true,\n    }, start);\n}\nfunction parsePrimaryExpression(parser, context, privateScope, kind, inNew, canAssign, inGroup, isLHS, start) {\n    if ((parser.getToken() & 143360) === 143360) {\n        switch (parser.getToken()) {\n            case 209006:\n                return parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start);\n            case 241771:\n                return parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start);\n            case 209005:\n                return parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start);\n        }\n        const { tokenValue } = parser;\n        const token = parser.getToken();\n        const expr = parseIdentifier(parser, context | 64);\n        if (parser.getToken() === 10) {\n            if (!isLHS)\n                parser.report(0);\n            classifyIdentifier(parser, context, token);\n            if ((token & 36864) === 36864) {\n                parser.flags |= 256;\n            }\n            return parseArrowFromIdentifier(parser, context, privateScope, tokenValue, expr, inNew, canAssign, 0, start);\n        }\n        if (context & 16 &&\n            !(context & 32768) &&\n            !(context & 8192) &&\n            parser.tokenValue === 'arguments')\n            parser.report(130);\n        if ((token & 255) === (241737 & 255)) {\n            if (context & 1)\n                parser.report(113);\n            if (kind & (8 | 16))\n                parser.report(100);\n        }\n        parser.assignable =\n            context & 1 && (token & 537079808) === 537079808\n                ? 2\n                : 1;\n        return expr;\n    }\n    if ((parser.getToken() & 134217728) === 134217728) {\n        return parseLiteral(parser, context);\n    }\n    switch (parser.getToken()) {\n        case 33619993:\n        case 33619994:\n            return parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start);\n        case 16863276:\n        case 16842798:\n        case 16842799:\n        case 25233968:\n        case 25233969:\n        case 16863275:\n        case 16863277:\n            return parseUnaryExpression(parser, context, privateScope, isLHS, inGroup);\n        case 86104:\n            return parseFunctionExpression(parser, context, privateScope, 0, inGroup, start);\n        case 2162700:\n            return parseObjectLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);\n        case 69271571:\n            return parseArrayLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);\n        case 67174411:\n            return parseParenthesizedExpression(parser, context | 64, privateScope, canAssign, 1, 0, start);\n        case 86021:\n        case 86022:\n        case 86023:\n            return parseNullOrTrueOrFalseLiteral(parser, context);\n        case 86111:\n            return parseThisExpression(parser, context);\n        case 65540:\n            return parseRegExpLiteral(parser, context);\n        case 132:\n        case 86094:\n            return parseClassExpression(parser, context, privateScope, inGroup, start);\n        case 86109:\n            return parseSuperExpression(parser, context);\n        case 67174409:\n            return parseTemplateLiteral(parser, context);\n        case 67174408:\n            return parseTemplate(parser, context, privateScope);\n        case 86107:\n            return parseNewExpression(parser, context, privateScope, inGroup);\n        case 134283388:\n            return parseBigIntLiteral(parser, context);\n        case 130:\n            return parsePrivateIdentifier(parser, context, privateScope, 0);\n        case 86106:\n            return parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start);\n        case 8456256:\n            if (parser.options.jsx)\n                return parseJSXRootElementOrFragment(parser, context, privateScope, 0, parser.tokenStart);\n        default:\n            if (isValidIdentifier(context, parser.getToken()))\n                return parseIdentifierOrArrow(parser, context, privateScope);\n            parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n}\nfunction parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start) {\n    let expr = parseIdentifier(parser, context);\n    if (parser.getToken() === 67108877) {\n        return parseImportMetaExpression(parser, context, expr, start);\n    }\n    if (inNew)\n        parser.report(142);\n    expr = parseImportExpression(parser, context, privateScope, inGroup, start);\n    parser.assignable = 2;\n    return parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start);\n}\nfunction parseImportMetaExpression(parser, context, meta, start) {\n    if ((context & 2) === 0)\n        parser.report(169);\n    nextToken(parser, context);\n    const token = parser.getToken();\n    if (token !== 209030 && parser.tokenValue !== 'meta') {\n        parser.report(174);\n    }\n    else if (token & -2147483648) {\n        parser.report(175);\n    }\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'MetaProperty',\n        meta,\n        property: parseIdentifier(parser, context),\n    }, start);\n}\nfunction parseImportExpression(parser, context, privateScope, inGroup, start) {\n    consume(parser, context | 32, 67174411);\n    if (parser.getToken() === 14)\n        parser.report(143);\n    const source = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n    let options = null;\n    if (parser.getToken() === 18) {\n        consume(parser, context, 18);\n        if (parser.getToken() !== 16) {\n            const expContext = (context | 131072) ^ 131072;\n            options = parseExpression(parser, expContext, privateScope, 1, inGroup, parser.tokenStart);\n        }\n        consumeOpt(parser, context, 18);\n    }\n    const node = {\n        type: 'ImportExpression',\n        source,\n        options,\n    };\n    consume(parser, context, 16);\n    return parser.finishNode(node, start);\n}\nfunction parseImportAttributes(parser, context) {\n    if (!consumeOpt(parser, context, 20579))\n        return [];\n    consume(parser, context, 2162700);\n    const attributes = [];\n    const keysContent = new Set();\n    while (parser.getToken() !== 1074790415) {\n        const start = parser.tokenStart;\n        const key = parseIdentifierOrStringLiteral(parser, context);\n        consume(parser, context, 21);\n        const value = parseStringLiteral(parser, context);\n        const keyContent = key.type === 'Literal' ? key.value : key.name;\n        if (keysContent.has(keyContent)) {\n            parser.report(145, `${keyContent}`);\n        }\n        keysContent.add(keyContent);\n        attributes.push(parser.finishNode({\n            type: 'ImportAttribute',\n            key,\n            value,\n        }, start));\n        if (parser.getToken() !== 1074790415) {\n            consume(parser, context, 18);\n        }\n    }\n    consume(parser, context, 1074790415);\n    return attributes;\n}\nfunction parseStringLiteral(parser, context) {\n    if (parser.getToken() === 134283267) {\n        return parseLiteral(parser, context);\n    }\n    else {\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n}\nfunction parseIdentifierOrStringLiteral(parser, context) {\n    if (parser.getToken() === 134283267) {\n        return parseLiteral(parser, context);\n    }\n    else if (parser.getToken() & 143360) {\n        return parseIdentifier(parser, context);\n    }\n    else {\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n}\nfunction validateStringWellFormed(parser, str) {\n    const len = str.length;\n    for (let i = 0; i < len; i++) {\n        const code = str.charCodeAt(i);\n        if ((code & 0xfc00) !== 55296)\n            continue;\n        if (code > 56319 || ++i >= len || (str.charCodeAt(i) & 0xfc00) !== 56320) {\n            parser.report(171, JSON.stringify(str.charAt(i--)));\n        }\n    }\n}\nfunction parseModuleExportName(parser, context) {\n    if (parser.getToken() === 134283267) {\n        validateStringWellFormed(parser, parser.tokenValue);\n        return parseLiteral(parser, context);\n    }\n    else if (parser.getToken() & 143360) {\n        return parseIdentifier(parser, context);\n    }\n    else {\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n}\nfunction parseBigIntLiteral(parser, context) {\n    const { tokenRaw, tokenValue, tokenStart } = parser;\n    nextToken(parser, context);\n    parser.assignable = 2;\n    const node = {\n        type: 'Literal',\n        value: tokenValue,\n        bigint: String(tokenValue),\n    };\n    if (parser.options.raw) {\n        node.raw = tokenRaw;\n    }\n    return parser.finishNode(node, tokenStart);\n}\nfunction parseTemplateLiteral(parser, context) {\n    parser.assignable = 2;\n    const { tokenValue, tokenRaw, tokenStart } = parser;\n    consume(parser, context, 67174409);\n    const quasis = [parseTemplateElement(parser, tokenValue, tokenRaw, tokenStart, true)];\n    return parser.finishNode({\n        type: 'TemplateLiteral',\n        expressions: [],\n        quasis,\n    }, tokenStart);\n}\nfunction parseTemplate(parser, context, privateScope) {\n    context = (context | 131072) ^ 131072;\n    const { tokenValue, tokenRaw, tokenStart } = parser;\n    consume(parser, (context & -65) | 32, 67174408);\n    const quasis = [parseTemplateElement(parser, tokenValue, tokenRaw, tokenStart, false)];\n    const expressions = [\n        parseExpressions(parser, context & -65, privateScope, 0, 1, parser.tokenStart),\n    ];\n    if (parser.getToken() !== 1074790415)\n        parser.report(83);\n    while (parser.setToken(scanTemplateTail(parser, context), true) !== 67174409) {\n        const { tokenValue, tokenRaw, tokenStart } = parser;\n        consume(parser, (context & -65) | 32, 67174408);\n        quasis.push(parseTemplateElement(parser, tokenValue, tokenRaw, tokenStart, false));\n        expressions.push(parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart));\n        if (parser.getToken() !== 1074790415)\n            parser.report(83);\n    }\n    {\n        const { tokenValue, tokenRaw, tokenStart } = parser;\n        consume(parser, context, 67174409);\n        quasis.push(parseTemplateElement(parser, tokenValue, tokenRaw, tokenStart, true));\n    }\n    return parser.finishNode({\n        type: 'TemplateLiteral',\n        expressions,\n        quasis,\n    }, tokenStart);\n}\nfunction parseTemplateElement(parser, cooked, raw, start, tail) {\n    const node = parser.finishNode({\n        type: 'TemplateElement',\n        value: {\n            cooked,\n            raw,\n        },\n        tail,\n    }, start);\n    const tailSize = tail ? 1 : 2;\n    if (parser.options.ranges) {\n        node.start += 1;\n        node.range[0] += 1;\n        node.end -= tailSize;\n        node.range[1] -= tailSize;\n    }\n    if (parser.options.loc) {\n        node.loc.start.column += 1;\n        node.loc.end.column -= tailSize;\n    }\n    return node;\n}\nfunction parseSpreadElement(parser, context, privateScope) {\n    const start = parser.tokenStart;\n    context = (context | 131072) ^ 131072;\n    consume(parser, context | 32, 14);\n    const argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n    parser.assignable = 1;\n    return parser.finishNode({\n        type: 'SpreadElement',\n        argument,\n    }, start);\n}\nfunction parseArguments(parser, context, privateScope, inGroup) {\n    nextToken(parser, context | 32);\n    const args = [];\n    if (parser.getToken() === 16) {\n        nextToken(parser, context | 64);\n        return args;\n    }\n    while (parser.getToken() !== 16) {\n        if (parser.getToken() === 14) {\n            args.push(parseSpreadElement(parser, context, privateScope));\n        }\n        else {\n            args.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart));\n        }\n        if (parser.getToken() !== 18)\n            break;\n        nextToken(parser, context | 32);\n        if (parser.getToken() === 16)\n            break;\n    }\n    consume(parser, context | 64, 16);\n    return args;\n}\nfunction parseIdentifier(parser, context) {\n    const { tokenValue, tokenStart } = parser;\n    const allowRegex = tokenValue === 'await' && (parser.getToken() & -2147483648) === 0;\n    nextToken(parser, context | (allowRegex ? 32 : 0));\n    return parser.finishNode({\n        type: 'Identifier',\n        name: tokenValue,\n    }, tokenStart);\n}\nfunction parseLiteral(parser, context) {\n    const { tokenValue, tokenRaw, tokenStart } = parser;\n    if (parser.getToken() === 134283388) {\n        return parseBigIntLiteral(parser, context);\n    }\n    nextToken(parser, context);\n    parser.assignable = 2;\n    return parser.finishNode(parser.options.raw\n        ? {\n            type: 'Literal',\n            value: tokenValue,\n            raw: tokenRaw,\n        }\n        : {\n            type: 'Literal',\n            value: tokenValue,\n        }, tokenStart);\n}\nfunction parseNullOrTrueOrFalseLiteral(parser, context) {\n    const start = parser.tokenStart;\n    const raw = KeywordDescTable[parser.getToken() & 255];\n    const value = parser.getToken() === 86023 ? null : raw === 'true';\n    nextToken(parser, context);\n    parser.assignable = 2;\n    return parser.finishNode(parser.options.raw\n        ? {\n            type: 'Literal',\n            value,\n            raw,\n        }\n        : {\n            type: 'Literal',\n            value,\n        }, start);\n}\nfunction parseThisExpression(parser, context) {\n    const { tokenStart } = parser;\n    nextToken(parser, context);\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'ThisExpression',\n    }, tokenStart);\n}\nfunction parseFunctionDeclaration(parser, context, scope, privateScope, origin, allowGen, flags, isAsync, start) {\n    nextToken(parser, context | 32);\n    const isGenerator = allowGen ? optionalBit(parser, context, 8391476) : 0;\n    let id = null;\n    let funcNameToken;\n    let functionScope = scope ? parser.createScope() : void 0;\n    if (parser.getToken() === 67174411) {\n        if ((flags & 1) === 0)\n            parser.report(39, 'Function');\n    }\n    else {\n        const kind = origin & 4 && ((context & 8) === 0 || (context & 2) === 0)\n            ? 4\n            : 64 | (isAsync ? 1024 : 0) | (isGenerator ? 1024 : 0);\n        validateFunctionName(parser, context, parser.getToken());\n        if (scope) {\n            if (kind & 4) {\n                scope.addVarName(context, parser.tokenValue, kind);\n            }\n            else {\n                scope.addBlockName(context, parser.tokenValue, kind, origin);\n            }\n            functionScope = functionScope?.createChildScope(128);\n            if (flags) {\n                if (flags & 2) {\n                    parser.declareUnboundVariable(parser.tokenValue);\n                }\n            }\n        }\n        funcNameToken = parser.getToken();\n        if (parser.getToken() & 143360) {\n            id = parseIdentifier(parser, context);\n        }\n        else {\n            parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n        }\n    }\n    {\n        const modifierFlags = 256 |\n            512 |\n            1024 |\n            2048 |\n            8192 |\n            16384;\n        context =\n            ((context | modifierFlags) ^ modifierFlags) |\n                65536 |\n                (isAsync ? 2048 : 0) |\n                (isGenerator ? 1024 : 0) |\n                (isGenerator ? 0 : 262144);\n    }\n    functionScope = functionScope?.createChildScope(256);\n    const params = parseFormalParametersOrFormalList(parser, (context | 8192) & -524289, functionScope, privateScope, 0, 1);\n    const modifierFlags = 8 | 4 | 128 | 524288;\n    const body = parseFunctionBody(parser, ((context | modifierFlags) ^ modifierFlags) | 32768 | 4096, functionScope?.createChildScope(64), privateScope, 8, funcNameToken, functionScope);\n    return parser.finishNode({\n        type: 'FunctionDeclaration',\n        id,\n        params,\n        body,\n        async: isAsync === 1,\n        generator: isGenerator === 1,\n    }, start);\n}\nfunction parseFunctionExpression(parser, context, privateScope, isAsync, inGroup, start) {\n    nextToken(parser, context | 32);\n    const isGenerator = optionalBit(parser, context, 8391476);\n    const generatorAndAsyncFlags = (isAsync ? 2048 : 0) | (isGenerator ? 1024 : 0);\n    let id = null;\n    let funcNameToken;\n    let scope = parser.createScopeIfLexical();\n    const modifierFlags = 256 |\n        512 |\n        1024 |\n        2048 |\n        8192 |\n        16384 |\n        524288;\n    if (parser.getToken() & 143360) {\n        validateFunctionName(parser, ((context | modifierFlags) ^ modifierFlags) | generatorAndAsyncFlags, parser.getToken());\n        scope = scope?.createChildScope(128);\n        funcNameToken = parser.getToken();\n        id = parseIdentifier(parser, context);\n    }\n    context =\n        ((context | modifierFlags) ^ modifierFlags) |\n            65536 |\n            generatorAndAsyncFlags |\n            (isGenerator ? 0 : 262144);\n    scope = scope?.createChildScope(256);\n    const params = parseFormalParametersOrFormalList(parser, (context | 8192) & -524289, scope, privateScope, inGroup, 1);\n    const body = parseFunctionBody(parser, (context & -131229) |\n        32768 |\n        4096, scope?.createChildScope(64), privateScope, 0, funcNameToken, scope);\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'FunctionExpression',\n        id,\n        params,\n        body,\n        async: isAsync === 1,\n        generator: isGenerator === 1,\n    }, start);\n}\nfunction parseArrayLiteral(parser, context, privateScope, skipInitializer, inGroup) {\n    const expr = parseArrayExpressionOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0);\n    if (parser.destructible & 64) {\n        parser.report(63);\n    }\n    if (parser.destructible & 8) {\n        parser.report(62);\n    }\n    return expr;\n}\nfunction parseArrayExpressionOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin) {\n    const { tokenStart: start } = parser;\n    nextToken(parser, context | 32);\n    const elements = [];\n    let destructible = 0;\n    context = (context | 131072) ^ 131072;\n    while (parser.getToken() !== 20) {\n        if (consumeOpt(parser, context | 32, 18)) {\n            elements.push(null);\n        }\n        else {\n            let left;\n            const { tokenStart, tokenValue } = parser;\n            const token = parser.getToken();\n            if (token & 143360) {\n                left = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);\n                if (parser.getToken() === 1077936155) {\n                    if (parser.assignable & 2)\n                        parser.report(26);\n                    nextToken(parser, context | 32);\n                    scope?.addVarOrBlock(context, tokenValue, kind, origin);\n                    const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n                    left = parser.finishNode(isPattern\n                        ? {\n                            type: 'AssignmentPattern',\n                            left,\n                            right,\n                        }\n                        : {\n                            type: 'AssignmentExpression',\n                            operator: '=',\n                            left,\n                            right,\n                        }, tokenStart);\n                    destructible |=\n                        parser.destructible & 256\n                            ? 256\n                            : 0 | (parser.destructible & 128)\n                                ? 128\n                                : 0;\n                }\n                else if (parser.getToken() === 18 || parser.getToken() === 20) {\n                    if (parser.assignable & 2) {\n                        destructible |= 16;\n                    }\n                    else {\n                        scope?.addVarOrBlock(context, tokenValue, kind, origin);\n                    }\n                    destructible |=\n                        parser.destructible & 256\n                            ? 256\n                            : 0 | (parser.destructible & 128)\n                                ? 128\n                                : 0;\n                }\n                else {\n                    destructible |=\n                        kind & 1\n                            ? 32\n                            : (kind & 2) === 0\n                                ? 16\n                                : 0;\n                    left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenStart);\n                    if (parser.getToken() !== 18 && parser.getToken() !== 20) {\n                        if (parser.getToken() !== 1077936155)\n                            destructible |= 16;\n                        left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);\n                    }\n                    else if (parser.getToken() !== 1077936155) {\n                        destructible |=\n                            parser.assignable & 2\n                                ? 16\n                                : 32;\n                    }\n                }\n            }\n            else if (token & 2097152) {\n                left =\n                    parser.getToken() === 2162700\n                        ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)\n                        : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);\n                destructible |= parser.destructible;\n                parser.assignable =\n                    parser.destructible & 16\n                        ? 2\n                        : 1;\n                if (parser.getToken() === 18 || parser.getToken() === 20) {\n                    if (parser.assignable & 2) {\n                        destructible |= 16;\n                    }\n                }\n                else if (parser.destructible & 8) {\n                    parser.report(71);\n                }\n                else {\n                    left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenStart);\n                    destructible = parser.assignable & 2 ? 16 : 0;\n                    if (parser.getToken() !== 18 && parser.getToken() !== 20) {\n                        left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);\n                    }\n                    else if (parser.getToken() !== 1077936155) {\n                        destructible |=\n                            parser.assignable & 2\n                                ? 16\n                                : 32;\n                    }\n                }\n            }\n            else if (token === 14) {\n                left = parseSpreadOrRestElement(parser, context, scope, privateScope, 20, kind, origin, 0, inGroup, isPattern);\n                destructible |= parser.destructible;\n                if (parser.getToken() !== 18 && parser.getToken() !== 20)\n                    parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n            }\n            else {\n                left = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);\n                if (parser.getToken() !== 18 && parser.getToken() !== 20) {\n                    left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);\n                    if ((kind & (2 | 1)) === 0 && token === 67174411)\n                        destructible |= 16;\n                }\n                else if (parser.assignable & 2) {\n                    destructible |= 16;\n                }\n                else if (token === 67174411) {\n                    destructible |=\n                        parser.assignable & 1 && kind & (2 | 1)\n                            ? 32\n                            : 16;\n                }\n            }\n            elements.push(left);\n            if (consumeOpt(parser, context | 32, 18)) {\n                if (parser.getToken() === 20)\n                    break;\n            }\n            else\n                break;\n        }\n    }\n    consume(parser, context, 20);\n    const node = parser.finishNode({\n        type: isPattern ? 'ArrayPattern' : 'ArrayExpression',\n        elements,\n    }, start);\n    if (!skipInitializer && parser.getToken() & 4194304) {\n        return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node);\n    }\n    parser.destructible = destructible;\n    return node;\n}\nfunction parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node) {\n    if (parser.getToken() !== 1077936155)\n        parser.report(26);\n    nextToken(parser, context | 32);\n    if (destructible & 16)\n        parser.report(26);\n    if (!isPattern)\n        reinterpretToPattern(parser, node);\n    const { tokenStart } = parser;\n    const right = parseExpression(parser, context, privateScope, 1, inGroup, tokenStart);\n    parser.destructible =\n        ((destructible | 64 | 8) ^\n            (8 | 64)) |\n            (parser.destructible & 128 ? 128 : 0) |\n            (parser.destructible & 256 ? 256 : 0);\n    return parser.finishNode(isPattern\n        ? {\n            type: 'AssignmentPattern',\n            left: node,\n            right,\n        }\n        : {\n            type: 'AssignmentExpression',\n            left: node,\n            operator: '=',\n            right,\n        }, start);\n}\nfunction parseSpreadOrRestElement(parser, context, scope, privateScope, closingToken, kind, origin, isAsync, inGroup, isPattern) {\n    const { tokenStart: start } = parser;\n    nextToken(parser, context | 32);\n    let argument = null;\n    let destructible = 0;\n    const { tokenValue, tokenStart } = parser;\n    let token = parser.getToken();\n    if (token & 143360) {\n        parser.assignable = 1;\n        argument = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);\n        token = parser.getToken();\n        argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenStart);\n        if (parser.getToken() !== 18 && parser.getToken() !== closingToken) {\n            if (parser.assignable & 2 && parser.getToken() === 1077936155)\n                parser.report(71);\n            destructible |= 16;\n            argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);\n        }\n        if (parser.assignable & 2) {\n            destructible |= 16;\n        }\n        else if (token === closingToken || token === 18) {\n            scope?.addVarOrBlock(context, tokenValue, kind, origin);\n        }\n        else {\n            destructible |= 32;\n        }\n        destructible |= parser.destructible & 128 ? 128 : 0;\n    }\n    else if (token === closingToken) {\n        parser.report(41);\n    }\n    else if (token & 2097152) {\n        argument =\n            parser.getToken() === 2162700\n                ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin)\n                : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin);\n        token = parser.getToken();\n        if (token !== 1077936155 && token !== closingToken && token !== 18) {\n            if (parser.destructible & 8)\n                parser.report(71);\n            argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenStart);\n            destructible |= parser.assignable & 2 ? 16 : 0;\n            if ((parser.getToken() & 4194304) === 4194304) {\n                if (parser.getToken() !== 1077936155)\n                    destructible |= 16;\n                argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);\n            }\n            else {\n                if ((parser.getToken() & 8388608) === 8388608) {\n                    argument = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, argument);\n                }\n                if (consumeOpt(parser, context | 32, 22)) {\n                    argument = parseConditionalExpression(parser, context, privateScope, argument, tokenStart);\n                }\n                destructible |=\n                    parser.assignable & 2\n                        ? 16\n                        : 32;\n            }\n        }\n        else {\n            destructible |=\n                closingToken === 1074790415 && token !== 1077936155\n                    ? 16\n                    : parser.destructible;\n        }\n    }\n    else {\n        destructible |= 32;\n        argument = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1);\n        const { tokenStart } = parser;\n        const token = parser.getToken();\n        if (token === 1077936155) {\n            if (parser.assignable & 2)\n                parser.report(26);\n            argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);\n            destructible |= 16;\n        }\n        else {\n            if (token === 18) {\n                destructible |= 16;\n            }\n            else if (token !== closingToken) {\n                argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);\n            }\n            destructible |=\n                parser.assignable & 1 ? 32 : 16;\n        }\n        parser.destructible = destructible;\n        if (parser.getToken() !== closingToken && parser.getToken() !== 18)\n            parser.report(161);\n        return parser.finishNode({\n            type: isPattern ? 'RestElement' : 'SpreadElement',\n            argument: argument,\n        }, start);\n    }\n    if (parser.getToken() !== closingToken) {\n        if (kind & 1)\n            destructible |= isAsync ? 16 : 32;\n        if (consumeOpt(parser, context | 32, 1077936155)) {\n            if (destructible & 16)\n                parser.report(26);\n            reinterpretToPattern(parser, argument);\n            const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n            argument = parser.finishNode(isPattern\n                ? {\n                    type: 'AssignmentPattern',\n                    left: argument,\n                    right,\n                }\n                : {\n                    type: 'AssignmentExpression',\n                    left: argument,\n                    operator: '=',\n                    right,\n                }, tokenStart);\n            destructible = 16;\n        }\n        else {\n            destructible |= 16;\n        }\n    }\n    parser.destructible = destructible;\n    return parser.finishNode({\n        type: isPattern ? 'RestElement' : 'SpreadElement',\n        argument: argument,\n    }, start);\n}\nfunction parseMethodDefinition(parser, context, privateScope, kind, inGroup, start) {\n    const modifierFlags = 1024 |\n        2048 |\n        8192 |\n        ((kind & 64) === 0 ? 512 | 16384 : 0);\n    context =\n        ((context | modifierFlags) ^ modifierFlags) |\n            (kind & 8 ? 1024 : 0) |\n            (kind & 16 ? 2048 : 0) |\n            (kind & 64 ? 16384 : 0) |\n            256 |\n            32768 |\n            65536;\n    let scope = parser.createScopeIfLexical(256);\n    const params = parseMethodFormals(parser, (context | 8192) & -524289, scope, privateScope, kind, 1, inGroup);\n    scope = scope?.createChildScope(64);\n    const body = parseFunctionBody(parser, (context & -655373) |\n        32768 |\n        4096, scope, privateScope, 0, void 0, scope?.parent);\n    return parser.finishNode({\n        type: 'FunctionExpression',\n        params,\n        body,\n        async: (kind & 16) > 0,\n        generator: (kind & 8) > 0,\n        id: null,\n    }, start);\n}\nfunction parseObjectLiteral(parser, context, privateScope, skipInitializer, inGroup) {\n    const expr = parseObjectLiteralOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0);\n    if (parser.destructible & 64) {\n        parser.report(63);\n    }\n    if (parser.destructible & 8) {\n        parser.report(62);\n    }\n    return expr;\n}\nfunction parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin) {\n    const { tokenStart: start } = parser;\n    nextToken(parser, context);\n    const properties = [];\n    let destructible = 0;\n    let prototypeCount = 0;\n    context = (context | 131072) ^ 131072;\n    while (parser.getToken() !== 1074790415) {\n        const { tokenValue, tokenStart } = parser;\n        const token = parser.getToken();\n        if (token === 14) {\n            properties.push(parseSpreadOrRestElement(parser, context, scope, privateScope, 1074790415, kind, origin, 0, inGroup, isPattern));\n        }\n        else {\n            let state = 0;\n            let key = null;\n            let value;\n            if (parser.getToken() & 143360 ||\n                parser.getToken() === -2147483528 ||\n                parser.getToken() === -2147483527) {\n                if (parser.getToken() === -2147483527)\n                    destructible |= 16;\n                key = parseIdentifier(parser, context);\n                if (parser.getToken() === 18 ||\n                    parser.getToken() === 1074790415 ||\n                    parser.getToken() === 1077936155) {\n                    state |= 4;\n                    if (context & 1 && (token & 537079808) === 537079808) {\n                        destructible |= 16;\n                    }\n                    else {\n                        validateBindingIdentifier(parser, context, kind, token, 0);\n                    }\n                    scope?.addVarOrBlock(context, tokenValue, kind, origin);\n                    if (consumeOpt(parser, context | 32, 1077936155)) {\n                        destructible |= 8;\n                        const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n                        destructible |=\n                            parser.destructible & 256\n                                ? 256\n                                : 0 | (parser.destructible & 128)\n                                    ? 128\n                                    : 0;\n                        value = parser.finishNode({\n                            type: 'AssignmentPattern',\n                            left: parser.options.uniqueKeyInPattern ? Object.assign({}, key) : key,\n                            right,\n                        }, tokenStart);\n                    }\n                    else {\n                        destructible |=\n                            (token === 209006 ? 128 : 0) |\n                                (token === -2147483528 ? 16 : 0);\n                        value = parser.options.uniqueKeyInPattern ? Object.assign({}, key) : key;\n                    }\n                }\n                else if (consumeOpt(parser, context | 32, 21)) {\n                    const { tokenStart } = parser;\n                    if (tokenValue === '__proto__')\n                        prototypeCount++;\n                    if (parser.getToken() & 143360) {\n                        const tokenAfterColon = parser.getToken();\n                        const valueAfterColon = parser.tokenValue;\n                        value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);\n                        const token = parser.getToken();\n                        value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (token === 1077936155 || token === 1074790415 || token === 18) {\n                                destructible |= parser.destructible & 128 ? 128 : 0;\n                                if (parser.assignable & 2) {\n                                    destructible |= 16;\n                                }\n                                else if ((tokenAfterColon & 143360) === 143360) {\n                                    scope?.addVarOrBlock(context, valueAfterColon, kind, origin);\n                                }\n                            }\n                            else {\n                                destructible |=\n                                    parser.assignable & 1\n                                        ? 32\n                                        : 16;\n                            }\n                        }\n                        else if ((parser.getToken() & 4194304) === 4194304) {\n                            if (parser.assignable & 2) {\n                                destructible |= 16;\n                            }\n                            else if (token !== 1077936155) {\n                                destructible |= 32;\n                            }\n                            else {\n                                scope?.addVarOrBlock(context, valueAfterColon, kind, origin);\n                            }\n                            value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                        }\n                        else {\n                            destructible |= 16;\n                            if ((parser.getToken() & 8388608) === 8388608) {\n                                value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);\n                            }\n                            if (consumeOpt(parser, context | 32, 22)) {\n                                value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);\n                            }\n                        }\n                    }\n                    else if ((parser.getToken() & 2097152) === 2097152) {\n                        value =\n                            parser.getToken() === 69271571\n                                ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)\n                                : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);\n                        destructible = parser.destructible;\n                        parser.assignable =\n                            destructible & 16 ? 2 : 1;\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (parser.assignable & 2)\n                                destructible |= 16;\n                        }\n                        else if (parser.destructible & 8) {\n                            parser.report(71);\n                        }\n                        else {\n                            value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                            destructible = parser.assignable & 2 ? 16 : 0;\n                            if ((parser.getToken() & 4194304) === 4194304) {\n                                value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                            }\n                            else {\n                                if ((parser.getToken() & 8388608) === 8388608) {\n                                    value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);\n                                }\n                                if (consumeOpt(parser, context | 32, 22)) {\n                                    value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);\n                                }\n                                destructible |=\n                                    parser.assignable & 2\n                                        ? 16\n                                        : 32;\n                            }\n                        }\n                    }\n                    else {\n                        value = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1);\n                        destructible |=\n                            parser.assignable & 1\n                                ? 32\n                                : 16;\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (parser.assignable & 2)\n                                destructible |= 16;\n                        }\n                        else {\n                            value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                            destructible = parser.assignable & 2 ? 16 : 0;\n                            if (parser.getToken() !== 18 && token !== 1074790415) {\n                                if (parser.getToken() !== 1077936155)\n                                    destructible |= 16;\n                                value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                            }\n                        }\n                    }\n                }\n                else if (parser.getToken() === 69271571) {\n                    destructible |= 16;\n                    if (token === 209005)\n                        state |= 16;\n                    state |=\n                        (token === 209008\n                            ? 256\n                            : token === 209009\n                                ? 512\n                                : 1) | 2;\n                    key = parseComputedPropertyName(parser, context, privateScope, inGroup);\n                    destructible |= parser.assignable;\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else if (parser.getToken() & 143360) {\n                    destructible |= 16;\n                    if (token === -2147483528)\n                        parser.report(95);\n                    if (token === 209005) {\n                        if (parser.flags & 1)\n                            parser.report(132);\n                        state |= 16 | 1;\n                    }\n                    else if (token === 209008) {\n                        state |= 256;\n                    }\n                    else if (token === 209009) {\n                        state |= 512;\n                    }\n                    else {\n                        parser.report(0);\n                    }\n                    key = parseIdentifier(parser, context);\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else if (parser.getToken() === 67174411) {\n                    destructible |= 16;\n                    state |= 1;\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else if (parser.getToken() === 8391476) {\n                    destructible |= 16;\n                    if (token === 209008) {\n                        parser.report(42);\n                    }\n                    else if (token === 209009) {\n                        parser.report(43);\n                    }\n                    else if (token !== 209005) {\n                        parser.report(30, KeywordDescTable[8391476 & 255]);\n                    }\n                    nextToken(parser, context);\n                    state |=\n                        8 | 1 | (token === 209005 ? 16 : 0);\n                    if (parser.getToken() & 143360) {\n                        key = parseIdentifier(parser, context);\n                    }\n                    else if ((parser.getToken() & 134217728) === 134217728) {\n                        key = parseLiteral(parser, context);\n                    }\n                    else if (parser.getToken() === 69271571) {\n                        state |= 2;\n                        key = parseComputedPropertyName(parser, context, privateScope, inGroup);\n                        destructible |= parser.assignable;\n                    }\n                    else {\n                        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n                    }\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else if ((parser.getToken() & 134217728) === 134217728) {\n                    if (token === 209005)\n                        state |= 16;\n                    state |=\n                        token === 209008\n                            ? 256\n                            : token === 209009\n                                ? 512\n                                : 1;\n                    destructible |= 16;\n                    key = parseLiteral(parser, context);\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else {\n                    parser.report(133);\n                }\n            }\n            else if ((parser.getToken() & 134217728) === 134217728) {\n                key = parseLiteral(parser, context);\n                if (parser.getToken() === 21) {\n                    consume(parser, context | 32, 21);\n                    const { tokenStart } = parser;\n                    if (tokenValue === '__proto__')\n                        prototypeCount++;\n                    if (parser.getToken() & 143360) {\n                        value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);\n                        const { tokenValue: valueAfterColon } = parser;\n                        const token = parser.getToken();\n                        value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (token === 1077936155 || token === 1074790415 || token === 18) {\n                                if (parser.assignable & 2) {\n                                    destructible |= 16;\n                                }\n                                else {\n                                    scope?.addVarOrBlock(context, valueAfterColon, kind, origin);\n                                }\n                            }\n                            else {\n                                destructible |=\n                                    parser.assignable & 1\n                                        ? 32\n                                        : 16;\n                            }\n                        }\n                        else if (parser.getToken() === 1077936155) {\n                            if (parser.assignable & 2)\n                                destructible |= 16;\n                            value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                        }\n                        else {\n                            destructible |= 16;\n                            value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                        }\n                    }\n                    else if ((parser.getToken() & 2097152) === 2097152) {\n                        value =\n                            parser.getToken() === 69271571\n                                ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)\n                                : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);\n                        destructible = parser.destructible;\n                        parser.assignable =\n                            destructible & 16 ? 2 : 1;\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (parser.assignable & 2) {\n                                destructible |= 16;\n                            }\n                        }\n                        else if ((parser.destructible & 8) !== 8) {\n                            value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                            destructible = parser.assignable & 2 ? 16 : 0;\n                            if ((parser.getToken() & 4194304) === 4194304) {\n                                value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                            }\n                            else {\n                                if ((parser.getToken() & 8388608) === 8388608) {\n                                    value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);\n                                }\n                                if (consumeOpt(parser, context | 32, 22)) {\n                                    value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);\n                                }\n                                destructible |=\n                                    parser.assignable & 2\n                                        ? 16\n                                        : 32;\n                            }\n                        }\n                    }\n                    else {\n                        value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);\n                        destructible |=\n                            parser.assignable & 1\n                                ? 32\n                                : 16;\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (parser.assignable & 2) {\n                                destructible |= 16;\n                            }\n                        }\n                        else {\n                            value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                            destructible = parser.assignable & 1 ? 0 : 16;\n                            if (parser.getToken() !== 18 && parser.getToken() !== 1074790415) {\n                                if (parser.getToken() !== 1077936155)\n                                    destructible |= 16;\n                                value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                            }\n                        }\n                    }\n                }\n                else if (parser.getToken() === 67174411) {\n                    state |= 1;\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                    destructible = parser.assignable | 16;\n                }\n                else {\n                    parser.report(134);\n                }\n            }\n            else if (parser.getToken() === 69271571) {\n                key = parseComputedPropertyName(parser, context, privateScope, inGroup);\n                destructible |= parser.destructible & 256 ? 256 : 0;\n                state |= 2;\n                if (parser.getToken() === 21) {\n                    nextToken(parser, context | 32);\n                    const { tokenStart, tokenValue } = parser;\n                    const tokenAfterColon = parser.getToken();\n                    if (parser.getToken() & 143360) {\n                        value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);\n                        const token = parser.getToken();\n                        value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                        if ((parser.getToken() & 4194304) === 4194304) {\n                            destructible |=\n                                parser.assignable & 2\n                                    ? 16\n                                    : token === 1077936155\n                                        ? 0\n                                        : 32;\n                            value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                        }\n                        else if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (token === 1077936155 || token === 1074790415 || token === 18) {\n                                if (parser.assignable & 2) {\n                                    destructible |= 16;\n                                }\n                                else if ((tokenAfterColon & 143360) === 143360) {\n                                    scope?.addVarOrBlock(context, tokenValue, kind, origin);\n                                }\n                            }\n                            else {\n                                destructible |=\n                                    parser.assignable & 1\n                                        ? 32\n                                        : 16;\n                            }\n                        }\n                        else {\n                            destructible |= 16;\n                            value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                        }\n                    }\n                    else if ((parser.getToken() & 2097152) === 2097152) {\n                        value =\n                            parser.getToken() === 69271571\n                                ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)\n                                : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);\n                        destructible = parser.destructible;\n                        parser.assignable =\n                            destructible & 16 ? 2 : 1;\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (parser.assignable & 2)\n                                destructible |= 16;\n                        }\n                        else if (destructible & 8) {\n                            parser.report(62);\n                        }\n                        else {\n                            value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                            destructible =\n                                parser.assignable & 2 ? destructible | 16 : 0;\n                            if ((parser.getToken() & 4194304) === 4194304) {\n                                if (parser.getToken() !== 1077936155)\n                                    destructible |= 16;\n                                value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                            }\n                            else {\n                                if ((parser.getToken() & 8388608) === 8388608) {\n                                    value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);\n                                }\n                                if (consumeOpt(parser, context | 32, 22)) {\n                                    value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);\n                                }\n                                destructible |=\n                                    parser.assignable & 2\n                                        ? 16\n                                        : 32;\n                            }\n                        }\n                    }\n                    else {\n                        value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);\n                        destructible |=\n                            parser.assignable & 1\n                                ? 32\n                                : 16;\n                        if (parser.getToken() === 18 || parser.getToken() === 1074790415) {\n                            if (parser.assignable & 2)\n                                destructible |= 16;\n                        }\n                        else {\n                            value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);\n                            destructible = parser.assignable & 1 ? 0 : 16;\n                            if (parser.getToken() !== 18 && parser.getToken() !== 1074790415) {\n                                if (parser.getToken() !== 1077936155)\n                                    destructible |= 16;\n                                value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);\n                            }\n                        }\n                    }\n                }\n                else if (parser.getToken() === 67174411) {\n                    state |= 1;\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                    destructible = 16;\n                }\n                else {\n                    parser.report(44);\n                }\n            }\n            else if (token === 8391476) {\n                consume(parser, context | 32, 8391476);\n                state |= 8;\n                if (parser.getToken() & 143360) {\n                    const token = parser.getToken();\n                    key = parseIdentifier(parser, context);\n                    state |= 1;\n                    if (parser.getToken() === 67174411) {\n                        destructible |= 16;\n                        value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                    }\n                    else {\n                        throw new ParseError(parser.tokenStart, parser.currentLocation, token === 209005\n                            ? 46\n                            : token === 209008 || parser.getToken() === 209009\n                                ? 45\n                                : 47, KeywordDescTable[token & 255]);\n                    }\n                }\n                else if ((parser.getToken() & 134217728) === 134217728) {\n                    destructible |= 16;\n                    key = parseLiteral(parser, context);\n                    state |= 1;\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else if (parser.getToken() === 69271571) {\n                    destructible |= 16;\n                    state |= 2 | 1;\n                    key = parseComputedPropertyName(parser, context, privateScope, inGroup);\n                    value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);\n                }\n                else {\n                    parser.report(126);\n                }\n            }\n            else {\n                parser.report(30, KeywordDescTable[token & 255]);\n            }\n            destructible |= parser.destructible & 128 ? 128 : 0;\n            parser.destructible = destructible;\n            properties.push(parser.finishNode({\n                type: 'Property',\n                key: key,\n                value,\n                kind: !(state & 768) ? 'init' : state & 512 ? 'set' : 'get',\n                computed: (state & 2) > 0,\n                method: (state & 1) > 0,\n                shorthand: (state & 4) > 0,\n            }, tokenStart));\n        }\n        destructible |= parser.destructible;\n        if (parser.getToken() !== 18)\n            break;\n        nextToken(parser, context);\n    }\n    consume(parser, context, 1074790415);\n    if (prototypeCount > 1)\n        destructible |= 64;\n    const node = parser.finishNode({\n        type: isPattern ? 'ObjectPattern' : 'ObjectExpression',\n        properties,\n    }, start);\n    if (!skipInitializer && parser.getToken() & 4194304) {\n        return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node);\n    }\n    parser.destructible = destructible;\n    return node;\n}\nfunction parseMethodFormals(parser, context, scope, privateScope, kind, type, inGroup) {\n    consume(parser, context, 67174411);\n    const params = [];\n    parser.flags = (parser.flags | 128) ^ 128;\n    if (parser.getToken() === 16) {\n        if (kind & 512) {\n            parser.report(37, 'Setter', 'one', '');\n        }\n        nextToken(parser, context);\n        return params;\n    }\n    if (kind & 256) {\n        parser.report(37, 'Getter', 'no', 's');\n    }\n    if (kind & 512 && parser.getToken() === 14) {\n        parser.report(38);\n    }\n    context = (context | 131072) ^ 131072;\n    let setterArgs = 0;\n    let isNonSimpleParameterList = 0;\n    while (parser.getToken() !== 18) {\n        let left = null;\n        const { tokenStart } = parser;\n        if (parser.getToken() & 143360) {\n            if ((context & 1) === 0) {\n                if ((parser.getToken() & 36864) === 36864) {\n                    parser.flags |= 256;\n                }\n                if ((parser.getToken() & 537079808) === 537079808) {\n                    parser.flags |= 512;\n                }\n            }\n            left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0);\n        }\n        else {\n            if (parser.getToken() === 2162700) {\n                left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0);\n            }\n            else if (parser.getToken() === 69271571) {\n                left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0);\n            }\n            else if (parser.getToken() === 14) {\n                left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, type, 0, 0, inGroup, 1);\n            }\n            isNonSimpleParameterList = 1;\n            if (parser.destructible & (32 | 16))\n                parser.report(50);\n        }\n        if (parser.getToken() === 1077936155) {\n            nextToken(parser, context | 32);\n            isNonSimpleParameterList = 1;\n            const right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n            left = parser.finishNode({\n                type: 'AssignmentPattern',\n                left: left,\n                right,\n            }, tokenStart);\n        }\n        setterArgs++;\n        params.push(left);\n        if (!consumeOpt(parser, context, 18))\n            break;\n        if (parser.getToken() === 16) {\n            break;\n        }\n    }\n    if (kind & 512 && setterArgs !== 1) {\n        parser.report(37, 'Setter', 'one', '');\n    }\n    scope?.reportScopeError();\n    if (isNonSimpleParameterList)\n        parser.flags |= 128;\n    consume(parser, context, 16);\n    return params;\n}\nfunction parseComputedPropertyName(parser, context, privateScope, inGroup) {\n    nextToken(parser, context | 32);\n    const key = parseExpression(parser, (context | 131072) ^ 131072, privateScope, 1, inGroup, parser.tokenStart);\n    consume(parser, context, 20);\n    return key;\n}\nfunction parseParenthesizedExpression(parser, context, privateScope, canAssign, kind, origin, start) {\n    parser.flags = (parser.flags | 128) ^ 128;\n    const parenthesesStart = parser.tokenStart;\n    nextToken(parser, context | 32 | 262144);\n    const scope = parser.createScopeIfLexical()?.createChildScope(512);\n    context = (context | 131072) ^ 131072;\n    if (consumeOpt(parser, context, 16)) {\n        return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 0, start);\n    }\n    let destructible = 0;\n    parser.destructible &= -385;\n    let expr;\n    let expressions = [];\n    let isSequence = 0;\n    let isNonSimpleParameterList = 0;\n    let hasStrictReserved = 0;\n    const tokenAfterParenthesesStart = parser.tokenStart;\n    parser.assignable = 1;\n    while (parser.getToken() !== 16) {\n        const { tokenStart } = parser;\n        const token = parser.getToken();\n        if (token & 143360) {\n            scope?.addBlockName(context, parser.tokenValue, 1, 0);\n            if ((token & 537079808) === 537079808) {\n                isNonSimpleParameterList = 1;\n            }\n            else if ((token & 36864) === 36864) {\n                hasStrictReserved = 1;\n            }\n            expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenStart);\n            if (parser.getToken() === 16 || parser.getToken() === 18) {\n                if (parser.assignable & 2) {\n                    destructible |= 16;\n                    isNonSimpleParameterList = 1;\n                }\n            }\n            else {\n                if (parser.getToken() === 1077936155) {\n                    isNonSimpleParameterList = 1;\n                }\n                else {\n                    destructible |= 16;\n                }\n                expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenStart);\n                if (parser.getToken() !== 16 && parser.getToken() !== 18) {\n                    expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenStart, expr);\n                }\n            }\n        }\n        else if ((token & 2097152) === 2097152) {\n            expr =\n                token === 2162700\n                    ? parseObjectLiteralOrPattern(parser, context | 262144, scope, privateScope, 0, 1, 0, kind, origin)\n                    : parseArrayExpressionOrPattern(parser, context | 262144, scope, privateScope, 0, 1, 0, kind, origin);\n            destructible |= parser.destructible;\n            isNonSimpleParameterList = 1;\n            parser.assignable = 2;\n            if (parser.getToken() !== 16 && parser.getToken() !== 18) {\n                if (destructible & 8)\n                    parser.report(122);\n                expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);\n                destructible |= 16;\n                if (parser.getToken() !== 16 && parser.getToken() !== 18) {\n                    expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);\n                }\n            }\n        }\n        else if (token === 14) {\n            expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 0, 1, 0);\n            if (parser.destructible & 16)\n                parser.report(74);\n            isNonSimpleParameterList = 1;\n            if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {\n                expressions.push(expr);\n            }\n            destructible |= 8;\n            break;\n        }\n        else {\n            destructible |= 16;\n            expr = parseExpression(parser, context, privateScope, 1, 1, tokenStart);\n            if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {\n                expressions.push(expr);\n            }\n            if (parser.getToken() === 18) {\n                if (!isSequence) {\n                    isSequence = 1;\n                    expressions = [expr];\n                }\n            }\n            if (isSequence) {\n                while (consumeOpt(parser, context | 32, 18)) {\n                    expressions.push(parseExpression(parser, context, privateScope, 1, 1, parser.tokenStart));\n                }\n                parser.assignable = 2;\n                expr = parser.finishNode({\n                    type: 'SequenceExpression',\n                    expressions,\n                }, tokenAfterParenthesesStart);\n            }\n            consume(parser, context, 16);\n            parser.destructible = destructible;\n            return parser.options.preserveParens\n                ? parser.finishNode({\n                    type: 'ParenthesizedExpression',\n                    expression: expr,\n                }, parenthesesStart)\n                : expr;\n        }\n        if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {\n            expressions.push(expr);\n        }\n        if (!consumeOpt(parser, context | 32, 18))\n            break;\n        if (!isSequence) {\n            isSequence = 1;\n            expressions = [expr];\n        }\n        if (parser.getToken() === 16) {\n            destructible |= 8;\n            break;\n        }\n    }\n    if (isSequence) {\n        parser.assignable = 2;\n        expr = parser.finishNode({\n            type: 'SequenceExpression',\n            expressions,\n        }, tokenAfterParenthesesStart);\n    }\n    consume(parser, context, 16);\n    if (destructible & 16 && destructible & 8)\n        parser.report(151);\n    destructible |=\n        parser.destructible & 256\n            ? 256\n            : 0 | (parser.destructible & 128)\n                ? 128\n                : 0;\n    if (parser.getToken() === 10) {\n        if (destructible & (32 | 16))\n            parser.report(49);\n        if (context & (2048 | 2) && destructible & 128)\n            parser.report(31);\n        if (context & (1 | 1024) && destructible & 256) {\n            parser.report(32);\n        }\n        if (isNonSimpleParameterList)\n            parser.flags |= 128;\n        if (hasStrictReserved)\n            parser.flags |= 256;\n        return parseParenthesizedArrow(parser, context, scope, privateScope, isSequence ? expressions : [expr], canAssign, 0, start);\n    }\n    if (destructible & 64) {\n        parser.report(63);\n    }\n    if (destructible & 8) {\n        parser.report(144);\n    }\n    parser.destructible = ((parser.destructible | 256) ^ 256) | destructible;\n    return parser.options.preserveParens\n        ? parser.finishNode({\n            type: 'ParenthesizedExpression',\n            expression: expr,\n        }, parenthesesStart)\n        : expr;\n}\nfunction parseIdentifierOrArrow(parser, context, privateScope) {\n    const { tokenStart: start } = parser;\n    const { tokenValue } = parser;\n    let isNonSimpleParameterList = 0;\n    let hasStrictReserved = 0;\n    if ((parser.getToken() & 537079808) === 537079808) {\n        isNonSimpleParameterList = 1;\n    }\n    else if ((parser.getToken() & 36864) === 36864) {\n        hasStrictReserved = 1;\n    }\n    const expr = parseIdentifier(parser, context);\n    parser.assignable = 1;\n    if (parser.getToken() === 10) {\n        const scope = parser.options.lexical ? createArrowHeadParsingScope(parser, context, tokenValue) : undefined;\n        if (isNonSimpleParameterList)\n            parser.flags |= 128;\n        if (hasStrictReserved)\n            parser.flags |= 256;\n        return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, start);\n    }\n    return expr;\n}\nfunction parseArrowFromIdentifier(parser, context, privateScope, value, expr, inNew, canAssign, isAsync, start) {\n    if (!canAssign)\n        parser.report(57);\n    if (inNew)\n        parser.report(51);\n    parser.flags &= -129;\n    const scope = parser.options.lexical ? createArrowHeadParsingScope(parser, context, value) : void 0;\n    return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], isAsync, start);\n}\nfunction parseParenthesizedArrow(parser, context, scope, privateScope, params, canAssign, isAsync, start) {\n    if (!canAssign)\n        parser.report(57);\n    for (let i = 0; i < params.length; ++i)\n        reinterpretToPattern(parser, params[i]);\n    return parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start);\n}\nfunction parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start) {\n    if (parser.flags & 1)\n        parser.report(48);\n    consume(parser, context | 32, 10);\n    const modifierFlags = 1024 | 2048 | 8192 | 524288;\n    context = ((context | modifierFlags) ^ modifierFlags) | (isAsync ? 2048 : 0);\n    const expression = parser.getToken() !== 2162700;\n    let body;\n    scope?.reportScopeError();\n    if (expression) {\n        parser.flags =\n            (parser.flags | 512 | 256 | 64 | 4096) ^\n                (512 | 256 | 64 | 4096);\n        body = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n    }\n    else {\n        scope = scope?.createChildScope(64);\n        const modifierFlags = 4 | 131072 | 8;\n        body = parseFunctionBody(parser, ((context | modifierFlags) ^ modifierFlags) | 4096, scope, privateScope, 16, void 0, void 0);\n        switch (parser.getToken()) {\n            case 69271571:\n                if ((parser.flags & 1) === 0) {\n                    parser.report(116);\n                }\n                break;\n            case 67108877:\n            case 67174409:\n            case 22:\n                parser.report(117);\n            case 67174411:\n                if ((parser.flags & 1) === 0) {\n                    parser.report(116);\n                }\n                parser.flags |= 1024;\n                break;\n        }\n        if ((parser.getToken() & 8388608) === 8388608 && (parser.flags & 1) === 0)\n            parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n        if ((parser.getToken() & 33619968) === 33619968)\n            parser.report(125);\n    }\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'ArrowFunctionExpression',\n        params,\n        body,\n        async: isAsync === 1,\n        expression,\n        generator: false,\n    }, start);\n}\nfunction parseFormalParametersOrFormalList(parser, context, scope, privateScope, inGroup, kind) {\n    consume(parser, context, 67174411);\n    parser.flags = (parser.flags | 128) ^ 128;\n    const params = [];\n    if (consumeOpt(parser, context, 16))\n        return params;\n    context = (context | 131072) ^ 131072;\n    let isNonSimpleParameterList = 0;\n    while (parser.getToken() !== 18) {\n        let left;\n        const { tokenStart } = parser;\n        const token = parser.getToken();\n        if (token & 143360) {\n            if ((context & 1) === 0) {\n                if ((token & 36864) === 36864) {\n                    parser.flags |= 256;\n                }\n                if ((token & 537079808) === 537079808) {\n                    parser.flags |= 512;\n                }\n            }\n            left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0);\n        }\n        else {\n            if (token === 2162700) {\n                left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0);\n            }\n            else if (token === 69271571) {\n                left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0);\n            }\n            else if (token === 14) {\n                left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, 0, 0, inGroup, 1);\n            }\n            else {\n                parser.report(30, KeywordDescTable[token & 255]);\n            }\n            isNonSimpleParameterList = 1;\n            if (parser.destructible & (32 | 16)) {\n                parser.report(50);\n            }\n        }\n        if (parser.getToken() === 1077936155) {\n            nextToken(parser, context | 32);\n            isNonSimpleParameterList = 1;\n            const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);\n            left = parser.finishNode({\n                type: 'AssignmentPattern',\n                left,\n                right,\n            }, tokenStart);\n        }\n        params.push(left);\n        if (!consumeOpt(parser, context, 18))\n            break;\n        if (parser.getToken() === 16) {\n            break;\n        }\n    }\n    if (isNonSimpleParameterList)\n        parser.flags |= 128;\n    if (isNonSimpleParameterList || context & 1) {\n        scope?.reportScopeError();\n    }\n    consume(parser, context, 16);\n    return params;\n}\nfunction parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, start) {\n    const token = parser.getToken();\n    if (token & 67108864) {\n        if (token === 67108877) {\n            nextToken(parser, context | 262144);\n            parser.assignable = 1;\n            const property = parsePropertyOrPrivatePropertyName(parser, context, privateScope);\n            return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({\n                type: 'MemberExpression',\n                object: expr,\n                computed: false,\n                property,\n                optional: false,\n            }, start), 0, start);\n        }\n        else if (token === 69271571) {\n            nextToken(parser, context | 32);\n            const { tokenStart } = parser;\n            const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);\n            consume(parser, context, 20);\n            parser.assignable = 1;\n            return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({\n                type: 'MemberExpression',\n                object: expr,\n                computed: true,\n                property,\n                optional: false,\n            }, start), 0, start);\n        }\n        else if (token === 67174408 || token === 67174409) {\n            parser.assignable = 2;\n            return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({\n                type: 'TaggedTemplateExpression',\n                tag: expr,\n                quasi: parser.getToken() === 67174408\n                    ? parseTemplate(parser, context | 64, privateScope)\n                    : parseTemplateLiteral(parser, context | 64),\n            }, start), 0, start);\n        }\n    }\n    return expr;\n}\nfunction parseNewExpression(parser, context, privateScope, inGroup) {\n    const { tokenStart: start } = parser;\n    const id = parseIdentifier(parser, context | 32);\n    const { tokenStart } = parser;\n    if (consumeOpt(parser, context, 67108877)) {\n        if (context & 65536 && parser.getToken() === 209029) {\n            parser.assignable = 2;\n            return parseMetaProperty(parser, context, id, start);\n        }\n        parser.report(94);\n    }\n    parser.assignable = 2;\n    if ((parser.getToken() & 16842752) === 16842752) {\n        parser.report(65, KeywordDescTable[parser.getToken() & 255]);\n    }\n    const expr = parsePrimaryExpression(parser, context, privateScope, 2, 1, 0, inGroup, 1, tokenStart);\n    context = (context | 131072) ^ 131072;\n    if (parser.getToken() === 67108990)\n        parser.report(168);\n    const callee = parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, tokenStart);\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'NewExpression',\n        callee,\n        arguments: parser.getToken() === 67174411 ? parseArguments(parser, context, privateScope, inGroup) : [],\n    }, start);\n}\nfunction parseMetaProperty(parser, context, meta, start) {\n    const property = parseIdentifier(parser, context);\n    return parser.finishNode({\n        type: 'MetaProperty',\n        meta,\n        property,\n    }, start);\n}\nfunction parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start) {\n    if (parser.getToken() === 209006)\n        parser.report(31);\n    if (context & (1 | 1024) && parser.getToken() === 241771) {\n        parser.report(32);\n    }\n    classifyIdentifier(parser, context, parser.getToken());\n    if ((parser.getToken() & 36864) === 36864) {\n        parser.flags |= 256;\n    }\n    return parseArrowFromIdentifier(parser, (context & -524289) | 2048, privateScope, parser.tokenValue, parseIdentifier(parser, context), 0, canAssign, 1, start);\n}\nfunction parseAsyncArrowOrCallExpression(parser, context, privateScope, callee, canAssign, kind, origin, flags, start) {\n    nextToken(parser, context | 32);\n    const scope = parser.createScopeIfLexical()?.createChildScope(512);\n    context = (context | 131072) ^ 131072;\n    if (consumeOpt(parser, context, 16)) {\n        if (parser.getToken() === 10) {\n            if (flags & 1)\n                parser.report(48);\n            return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 1, start);\n        }\n        return parser.finishNode({\n            type: 'CallExpression',\n            callee,\n            arguments: [],\n            optional: false,\n        }, start);\n    }\n    let destructible = 0;\n    let expr = null;\n    let isNonSimpleParameterList = 0;\n    parser.destructible =\n        (parser.destructible | 256 | 128) ^\n            (256 | 128);\n    const params = [];\n    while (parser.getToken() !== 16) {\n        const { tokenStart } = parser;\n        const token = parser.getToken();\n        if (token & 143360) {\n            scope?.addBlockName(context, parser.tokenValue, kind, 0);\n            if ((token & 537079808) === 537079808) {\n                parser.flags |= 512;\n            }\n            else if ((token & 36864) === 36864) {\n                parser.flags |= 256;\n            }\n            expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenStart);\n            if (parser.getToken() === 16 || parser.getToken() === 18) {\n                if (parser.assignable & 2) {\n                    destructible |= 16;\n                    isNonSimpleParameterList = 1;\n                }\n            }\n            else {\n                if (parser.getToken() === 1077936155) {\n                    isNonSimpleParameterList = 1;\n                }\n                else {\n                    destructible |= 16;\n                }\n                expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenStart);\n                if (parser.getToken() !== 16 && parser.getToken() !== 18) {\n                    expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenStart, expr);\n                }\n            }\n        }\n        else if (token & 2097152) {\n            expr =\n                token === 2162700\n                    ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin)\n                    : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin);\n            destructible |= parser.destructible;\n            isNonSimpleParameterList = 1;\n            if (parser.getToken() !== 16 && parser.getToken() !== 18) {\n                if (destructible & 8)\n                    parser.report(122);\n                expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);\n                destructible |= 16;\n                if ((parser.getToken() & 8388608) === 8388608) {\n                    expr = parseBinaryExpression(parser, context, privateScope, 1, start, 4, token, expr);\n                }\n                if (consumeOpt(parser, context | 32, 22)) {\n                    expr = parseConditionalExpression(parser, context, privateScope, expr, start);\n                }\n            }\n        }\n        else if (token === 14) {\n            expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 1, 1, 0);\n            destructible |=\n                (parser.getToken() === 16 ? 0 : 16) | parser.destructible;\n            isNonSimpleParameterList = 1;\n        }\n        else {\n            expr = parseExpression(parser, context, privateScope, 1, 0, tokenStart);\n            destructible = parser.assignable;\n            params.push(expr);\n            while (consumeOpt(parser, context | 32, 18)) {\n                params.push(parseExpression(parser, context, privateScope, 1, 0, tokenStart));\n            }\n            destructible |= parser.assignable;\n            consume(parser, context, 16);\n            parser.destructible = destructible | 16;\n            parser.assignable = 2;\n            return parser.finishNode({\n                type: 'CallExpression',\n                callee,\n                arguments: params,\n                optional: false,\n            }, start);\n        }\n        params.push(expr);\n        if (!consumeOpt(parser, context | 32, 18))\n            break;\n    }\n    consume(parser, context, 16);\n    destructible |=\n        parser.destructible & 256\n            ? 256\n            : 0 | (parser.destructible & 128)\n                ? 128\n                : 0;\n    if (parser.getToken() === 10) {\n        if (destructible & (32 | 16))\n            parser.report(27);\n        if (parser.flags & 1 || flags & 1)\n            parser.report(48);\n        if (destructible & 128)\n            parser.report(31);\n        if (context & (1 | 1024) && destructible & 256)\n            parser.report(32);\n        if (isNonSimpleParameterList)\n            parser.flags |= 128;\n        return parseParenthesizedArrow(parser, context | 2048, scope, privateScope, params, canAssign, 1, start);\n    }\n    if (destructible & 64) {\n        parser.report(63);\n    }\n    if (destructible & 8) {\n        parser.report(62);\n    }\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'CallExpression',\n        callee,\n        arguments: params,\n        optional: false,\n    }, start);\n}\nfunction parseRegExpLiteral(parser, context) {\n    const { tokenRaw, tokenRegExp, tokenValue, tokenStart } = parser;\n    nextToken(parser, context);\n    parser.assignable = 2;\n    const node = {\n        type: 'Literal',\n        value: tokenValue,\n        regex: tokenRegExp,\n    };\n    if (parser.options.raw) {\n        node.raw = tokenRaw;\n    }\n    return parser.finishNode(node, tokenStart);\n}\nfunction parseClassDeclaration(parser, context, scope, privateScope, flags) {\n    let start;\n    let decorators;\n    if (parser.leadingDecorators.decorators.length) {\n        if (parser.getToken() === 132) {\n            parser.report(30, '@');\n        }\n        start = parser.leadingDecorators.start;\n        decorators = [...parser.leadingDecorators.decorators];\n        parser.leadingDecorators.decorators.length = 0;\n    }\n    else {\n        start = parser.tokenStart;\n        decorators = parseDecorators(parser, context, privateScope);\n    }\n    context = (context | 16384 | 1) ^ 16384;\n    nextToken(parser, context);\n    let id = null;\n    let superClass = null;\n    const { tokenValue } = parser;\n    if (parser.getToken() & 4096 && parser.getToken() !== 20565) {\n        if (isStrictReservedWord(parser, context, parser.getToken())) {\n            parser.report(118);\n        }\n        if ((parser.getToken() & 537079808) === 537079808) {\n            parser.report(119);\n        }\n        if (scope) {\n            scope.addBlockName(context, tokenValue, 32, 0);\n            if (flags) {\n                if (flags & 2) {\n                    parser.declareUnboundVariable(tokenValue);\n                }\n            }\n        }\n        id = parseIdentifier(parser, context);\n    }\n    else {\n        if ((flags & 1) === 0)\n            parser.report(39, 'Class');\n    }\n    let inheritedContext = context;\n    if (consumeOpt(parser, context | 32, 20565)) {\n        superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 0);\n        inheritedContext |= 512;\n    }\n    else {\n        inheritedContext = (inheritedContext | 512) ^ 512;\n    }\n    const body = parseClassBody(parser, inheritedContext, context, scope, privateScope, 2, 8, 0);\n    return parser.finishNode({\n        type: 'ClassDeclaration',\n        id,\n        superClass,\n        body,\n        ...(parser.options.next ? { decorators } : null),\n    }, start);\n}\nfunction parseClassExpression(parser, context, privateScope, inGroup, start) {\n    let id = null;\n    let superClass = null;\n    const decorators = parseDecorators(parser, context, privateScope);\n    context = (context | 1 | 16384) ^ 16384;\n    nextToken(parser, context);\n    if (parser.getToken() & 4096 && parser.getToken() !== 20565) {\n        if (isStrictReservedWord(parser, context, parser.getToken()))\n            parser.report(118);\n        if ((parser.getToken() & 537079808) === 537079808) {\n            parser.report(119);\n        }\n        id = parseIdentifier(parser, context);\n    }\n    let inheritedContext = context;\n    if (consumeOpt(parser, context | 32, 20565)) {\n        superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 0);\n        inheritedContext |= 512;\n    }\n    else {\n        inheritedContext = (inheritedContext | 512) ^ 512;\n    }\n    const body = parseClassBody(parser, inheritedContext, context, void 0, privateScope, 2, 0, inGroup);\n    parser.assignable = 2;\n    return parser.finishNode({\n        type: 'ClassExpression',\n        id,\n        superClass,\n        body,\n        ...(parser.options.next ? { decorators } : null),\n    }, start);\n}\nfunction parseDecorators(parser, context, privateScope) {\n    const list = [];\n    if (parser.options.next) {\n        while (parser.getToken() === 132) {\n            list.push(parseDecoratorList(parser, context, privateScope));\n        }\n    }\n    return list;\n}\nfunction parseDecoratorList(parser, context, privateScope) {\n    const start = parser.tokenStart;\n    nextToken(parser, context | 32);\n    let expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, start);\n    expression = parseMemberOrUpdateExpression(parser, context, privateScope, expression, 0, 0, parser.tokenStart);\n    return parser.finishNode({\n        type: 'Decorator',\n        expression,\n    }, start);\n}\nfunction parseClassBody(parser, context, inheritedContext, scope, parentScope, kind, origin, inGroup) {\n    const { tokenStart } = parser;\n    const privateScope = parser.createPrivateScopeIfLexical(parentScope);\n    consume(parser, context | 32, 2162700);\n    const modifierFlags = 131072 | 524288;\n    context = (context | modifierFlags) ^ modifierFlags;\n    const hasConstr = parser.flags & 32;\n    parser.flags = (parser.flags | 32) ^ 32;\n    const body = [];\n    while (parser.getToken() !== 1074790415) {\n        const decoratorStart = parser.tokenStart;\n        const decorators = parseDecorators(parser, context, privateScope);\n        if (decorators.length > 0 && parser.tokenValue === 'constructor') {\n            parser.report(109);\n        }\n        if (parser.getToken() === 1074790415)\n            parser.report(108);\n        if (consumeOpt(parser, context, 1074790417)) {\n            if (decorators.length > 0)\n                parser.report(120);\n            continue;\n        }\n        body.push(parseClassElementList(parser, context, scope, privateScope, inheritedContext, kind, decorators, 0, inGroup, decorators.length > 0 ? decoratorStart : parser.tokenStart));\n    }\n    consume(parser, origin & 8 ? context | 32 : context, 1074790415);\n    privateScope?.validatePrivateIdentifierRefs();\n    parser.flags = (parser.flags & -33) | hasConstr;\n    return parser.finishNode({\n        type: 'ClassBody',\n        body,\n    }, tokenStart);\n}\nfunction parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, isStatic, inGroup, start) {\n    let kind = isStatic ? 32 : 0;\n    let key = null;\n    const token = parser.getToken();\n    if (token & (143360 | 36864) || token === -2147483528) {\n        key = parseIdentifier(parser, context);\n        switch (token) {\n            case 36970:\n                if (!isStatic &&\n                    parser.getToken() !== 67174411 &&\n                    (parser.getToken() & 1048576) !== 1048576 &&\n                    parser.getToken() !== 1077936155) {\n                    return parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, 1, inGroup, start);\n                }\n                break;\n            case 209005:\n                if (parser.getToken() !== 67174411 && (parser.flags & 1) === 0) {\n                    if ((parser.getToken() & 1073741824) === 1073741824) {\n                        return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);\n                    }\n                    kind |= 16 | (optionalBit(parser, context, 8391476) ? 8 : 0);\n                }\n                break;\n            case 209008:\n                if (parser.getToken() !== 67174411) {\n                    if ((parser.getToken() & 1073741824) === 1073741824) {\n                        return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);\n                    }\n                    kind |= 256;\n                }\n                break;\n            case 209009:\n                if (parser.getToken() !== 67174411) {\n                    if ((parser.getToken() & 1073741824) === 1073741824) {\n                        return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);\n                    }\n                    kind |= 512;\n                }\n                break;\n            case 12402:\n                if (parser.getToken() !== 67174411 && (parser.flags & 1) === 0) {\n                    if ((parser.getToken() & 1073741824) === 1073741824) {\n                        return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);\n                    }\n                    if (parser.options.next)\n                        kind |= 1024;\n                }\n                break;\n        }\n    }\n    else if (token === 69271571) {\n        kind |= 2;\n        key = parseComputedPropertyName(parser, inheritedContext, privateScope, inGroup);\n    }\n    else if ((token & 134217728) === 134217728) {\n        key = parseLiteral(parser, context);\n    }\n    else if (token === 8391476) {\n        kind |= 8;\n        nextToken(parser, context);\n    }\n    else if (parser.getToken() === 130) {\n        kind |= 8192;\n        key = parsePrivateIdentifier(parser, context | 16, privateScope, 768);\n    }\n    else if ((parser.getToken() & 1073741824) === 1073741824) {\n        kind |= 128;\n    }\n    else if (isStatic && token === 2162700) {\n        return parseStaticBlock(parser, context | 16, scope, privateScope, start);\n    }\n    else if (token === -2147483527) {\n        key = parseIdentifier(parser, context);\n        if (parser.getToken() !== 67174411)\n            parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n    else {\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n    if (kind & (8 | 16 | 768 | 1024)) {\n        if (parser.getToken() & 143360 ||\n            parser.getToken() === -2147483528 ||\n            parser.getToken() === -2147483527) {\n            key = parseIdentifier(parser, context);\n        }\n        else if ((parser.getToken() & 134217728) === 134217728) {\n            key = parseLiteral(parser, context);\n        }\n        else if (parser.getToken() === 69271571) {\n            kind |= 2;\n            key = parseComputedPropertyName(parser, context, privateScope, 0);\n        }\n        else if (parser.getToken() === 130) {\n            kind |= 8192;\n            key = parsePrivateIdentifier(parser, context, privateScope, kind);\n        }\n        else\n            parser.report(135);\n    }\n    if ((kind & 2) === 0) {\n        if (parser.tokenValue === 'constructor') {\n            if ((parser.getToken() & 1073741824) === 1073741824) {\n                parser.report(129);\n            }\n            else if ((kind & 32) === 0 && parser.getToken() === 67174411) {\n                if (kind & (768 | 16 | 128 | 8)) {\n                    parser.report(53, 'accessor');\n                }\n                else if ((context & 512) === 0) {\n                    if (parser.flags & 32)\n                        parser.report(54);\n                    else\n                        parser.flags |= 32;\n                }\n            }\n            kind |= 64;\n        }\n        else if ((kind & 8192) === 0 &&\n            kind & 32 &&\n            parser.tokenValue === 'prototype') {\n            parser.report(52);\n        }\n    }\n    if (kind & 1024 || (parser.getToken() !== 67174411 && (kind & 768) === 0)) {\n        return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);\n    }\n    const value = parseMethodDefinition(parser, context | 16, privateScope, kind, inGroup, parser.tokenStart);\n    return parser.finishNode({\n        type: 'MethodDefinition',\n        kind: (kind & 32) === 0 && kind & 64\n            ? 'constructor'\n            : kind & 256\n                ? 'get'\n                : kind & 512\n                    ? 'set'\n                    : 'method',\n        static: (kind & 32) > 0,\n        computed: (kind & 2) > 0,\n        key,\n        value,\n        ...(parser.options.next ? { decorators } : null),\n    }, start);\n}\nfunction parsePrivateIdentifier(parser, context, privateScope, kind) {\n    const { tokenStart } = parser;\n    nextToken(parser, context);\n    const { tokenValue } = parser;\n    if (tokenValue === 'constructor')\n        parser.report(128);\n    if (parser.options.lexical) {\n        if (!privateScope)\n            parser.report(4, tokenValue);\n        if (kind) {\n            privateScope.addPrivateIdentifier(tokenValue, kind);\n        }\n        else {\n            privateScope.addPrivateIdentifierRef(tokenValue);\n        }\n    }\n    nextToken(parser, context);\n    return parser.finishNode({\n        type: 'PrivateIdentifier',\n        name: tokenValue,\n    }, tokenStart);\n}\nfunction parsePropertyDefinition(parser, context, privateScope, key, state, decorators, start) {\n    let value = null;\n    if (state & 8)\n        parser.report(0);\n    if (parser.getToken() === 1077936155) {\n        nextToken(parser, context | 32);\n        const { tokenStart } = parser;\n        if (parser.getToken() === 537079927)\n            parser.report(119);\n        const modifierFlags = 1024 |\n            2048 |\n            8192 |\n            ((state & 64) === 0 ? 512 | 16384 : 0);\n        context =\n            ((context | modifierFlags) ^ modifierFlags) |\n                (state & 8 ? 1024 : 0) |\n                (state & 16 ? 2048 : 0) |\n                (state & 64 ? 16384 : 0) |\n                256 |\n                65536;\n        value = parsePrimaryExpression(parser, context | 16, privateScope, 2, 0, 1, 0, 1, tokenStart);\n        if ((parser.getToken() & 1073741824) !== 1073741824 ||\n            (parser.getToken() & 4194304) === 4194304) {\n            value = parseMemberOrUpdateExpression(parser, context | 16, privateScope, value, 0, 0, tokenStart);\n            value = parseAssignmentExpression(parser, context | 16, privateScope, 0, 0, tokenStart, value);\n        }\n    }\n    matchOrInsertSemicolon(parser, context);\n    return parser.finishNode({\n        type: state & 1024 ? 'AccessorProperty' : 'PropertyDefinition',\n        key,\n        value,\n        static: (state & 32) > 0,\n        computed: (state & 2) > 0,\n        ...(parser.options.next ? { decorators } : null),\n    }, start);\n}\nfunction parseBindingPattern(parser, context, scope, privateScope, type, origin) {\n    if (parser.getToken() & 143360 ||\n        ((context & 1) === 0 && parser.getToken() === -2147483527))\n        return parseAndClassifyIdentifier(parser, context, scope, type, origin);\n    if ((parser.getToken() & 2097152) !== 2097152)\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    const left = parser.getToken() === 69271571\n        ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin)\n        : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin);\n    if (parser.destructible & 16)\n        parser.report(50);\n    if (parser.destructible & 32)\n        parser.report(50);\n    return left;\n}\nfunction parseAndClassifyIdentifier(parser, context, scope, kind, origin) {\n    const token = parser.getToken();\n    if (context & 1) {\n        if ((token & 537079808) === 537079808) {\n            parser.report(119);\n        }\n        else if ((token & 36864) === 36864 || token === -2147483527) {\n            parser.report(118);\n        }\n    }\n    if ((token & 20480) === 20480) {\n        parser.report(102);\n    }\n    if (token === 241771) {\n        if (context & 1024)\n            parser.report(32);\n        if (context & 2)\n            parser.report(111);\n    }\n    if ((token & 255) === (241737 & 255)) {\n        if (kind & (8 | 16))\n            parser.report(100);\n    }\n    if (token === 209006) {\n        if (context & 2048)\n            parser.report(176);\n        if (context & 2)\n            parser.report(110);\n    }\n    const { tokenValue, tokenStart: start } = parser;\n    nextToken(parser, context);\n    scope?.addVarOrBlock(context, tokenValue, kind, origin);\n    return parser.finishNode({\n        type: 'Identifier',\n        name: tokenValue,\n    }, start);\n}\nfunction parseJSXRootElementOrFragment(parser, context, privateScope, inJSXChild, start) {\n    if (!inJSXChild)\n        consume(parser, context, 8456256);\n    if (parser.getToken() === 8390721) {\n        const openingFragment = parseJSXOpeningFragment(parser, start);\n        const [children, closingFragment] = parseJSXChildrenAndClosingFragment(parser, context, privateScope, inJSXChild);\n        return parser.finishNode({\n            type: 'JSXFragment',\n            openingFragment,\n            children,\n            closingFragment,\n        }, start);\n    }\n    if (parser.getToken() === 8457014)\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    let closingElement = null;\n    let children = [];\n    const openingElement = parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start);\n    if (!openingElement.selfClosing) {\n        [children, closingElement] = parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXChild);\n        const close = isEqualTagName(closingElement.name);\n        if (isEqualTagName(openingElement.name) !== close)\n            parser.report(155, close);\n    }\n    return parser.finishNode({\n        type: 'JSXElement',\n        children,\n        openingElement,\n        closingElement,\n    }, start);\n}\nfunction parseJSXOpeningFragment(parser, start) {\n    nextJSXToken(parser);\n    return parser.finishNode({\n        type: 'JSXOpeningFragment',\n    }, start);\n}\nfunction parseJSXClosingElement(parser, context, inJSXChild, start) {\n    consume(parser, context, 8457014);\n    const name = parseJSXElementName(parser, context);\n    if (parser.getToken() !== 8390721) {\n        parser.report(25, KeywordDescTable[8390721 & 255]);\n    }\n    if (inJSXChild) {\n        nextJSXToken(parser);\n    }\n    else {\n        nextToken(parser, context);\n    }\n    return parser.finishNode({\n        type: 'JSXClosingElement',\n        name,\n    }, start);\n}\nfunction parseJSXClosingFragment(parser, context, inJSXChild, start) {\n    consume(parser, context, 8457014);\n    if (parser.getToken() !== 8390721) {\n        parser.report(25, KeywordDescTable[8390721 & 255]);\n    }\n    if (inJSXChild) {\n        nextJSXToken(parser);\n    }\n    else {\n        nextToken(parser, context);\n    }\n    return parser.finishNode({\n        type: 'JSXClosingFragment',\n    }, start);\n}\nfunction parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXChild) {\n    const children = [];\n    while (true) {\n        const child = parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild);\n        if (child.type === 'JSXClosingElement') {\n            return [children, child];\n        }\n        children.push(child);\n    }\n}\nfunction parseJSXChildrenAndClosingFragment(parser, context, privateScope, inJSXChild) {\n    const children = [];\n    while (true) {\n        const child = parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild);\n        if (child.type === 'JSXClosingFragment') {\n            return [children, child];\n        }\n        children.push(child);\n    }\n}\nfunction parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild) {\n    if (parser.getToken() === 137)\n        return parseJSXText(parser, context);\n    if (parser.getToken() === 2162700)\n        return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);\n    if (parser.getToken() === 8456256) {\n        const { tokenStart } = parser;\n        nextToken(parser, context);\n        if (parser.getToken() === 8457014)\n            return parseJSXClosingElement(parser, context, inJSXChild, tokenStart);\n        return parseJSXRootElementOrFragment(parser, context, privateScope, 1, tokenStart);\n    }\n    parser.report(0);\n}\nfunction parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild) {\n    if (parser.getToken() === 137)\n        return parseJSXText(parser, context);\n    if (parser.getToken() === 2162700)\n        return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);\n    if (parser.getToken() === 8456256) {\n        const { tokenStart } = parser;\n        nextToken(parser, context);\n        if (parser.getToken() === 8457014)\n            return parseJSXClosingFragment(parser, context, inJSXChild, tokenStart);\n        return parseJSXRootElementOrFragment(parser, context, privateScope, 1, tokenStart);\n    }\n    parser.report(0);\n}\nfunction parseJSXText(parser, context) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    const node = {\n        type: 'JSXText',\n        value: parser.tokenValue,\n    };\n    if (parser.options.raw) {\n        node.raw = parser.tokenRaw;\n    }\n    return parser.finishNode(node, start);\n}\nfunction parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start) {\n    if ((parser.getToken() & 143360) !== 143360 &&\n        (parser.getToken() & 4096) !== 4096)\n        parser.report(0);\n    const tagName = parseJSXElementName(parser, context);\n    const attributes = parseJSXAttributes(parser, context, privateScope);\n    const selfClosing = parser.getToken() === 8457014;\n    if (selfClosing)\n        consume(parser, context, 8457014);\n    if (parser.getToken() !== 8390721) {\n        parser.report(25, KeywordDescTable[8390721 & 255]);\n    }\n    if (inJSXChild || !selfClosing) {\n        nextJSXToken(parser);\n    }\n    else {\n        nextToken(parser, context);\n    }\n    return parser.finishNode({\n        type: 'JSXOpeningElement',\n        name: tagName,\n        attributes,\n        selfClosing,\n    }, start);\n}\nfunction parseJSXElementName(parser, context) {\n    const { tokenStart } = parser;\n    rescanJSXIdentifier(parser);\n    let key = parseJSXIdentifier(parser, context);\n    if (parser.getToken() === 21)\n        return parseJSXNamespacedName(parser, context, key, tokenStart);\n    while (consumeOpt(parser, context, 67108877)) {\n        rescanJSXIdentifier(parser);\n        key = parseJSXMemberExpression(parser, context, key, tokenStart);\n    }\n    return key;\n}\nfunction parseJSXMemberExpression(parser, context, object, start) {\n    const property = parseJSXIdentifier(parser, context);\n    return parser.finishNode({\n        type: 'JSXMemberExpression',\n        object,\n        property,\n    }, start);\n}\nfunction parseJSXAttributes(parser, context, privateScope) {\n    const attributes = [];\n    while (parser.getToken() !== 8457014 &&\n        parser.getToken() !== 8390721 &&\n        parser.getToken() !== 1048576) {\n        attributes.push(parseJsxAttribute(parser, context, privateScope));\n    }\n    return attributes;\n}\nfunction parseJSXSpreadAttribute(parser, context, privateScope) {\n    const start = parser.tokenStart;\n    nextToken(parser, context);\n    consume(parser, context, 14);\n    const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n    consume(parser, context, 1074790415);\n    return parser.finishNode({\n        type: 'JSXSpreadAttribute',\n        argument: expression,\n    }, start);\n}\nfunction parseJsxAttribute(parser, context, privateScope) {\n    const { tokenStart } = parser;\n    if (parser.getToken() === 2162700)\n        return parseJSXSpreadAttribute(parser, context, privateScope);\n    rescanJSXIdentifier(parser);\n    let value = null;\n    let name = parseJSXIdentifier(parser, context);\n    if (parser.getToken() === 21) {\n        name = parseJSXNamespacedName(parser, context, name, tokenStart);\n    }\n    if (parser.getToken() === 1077936155) {\n        const token = scanJSXAttributeValue(parser, context);\n        switch (token) {\n            case 134283267:\n                value = parseLiteral(parser, context);\n                break;\n            case 8456256:\n                value = parseJSXRootElementOrFragment(parser, context, privateScope, 0, parser.tokenStart);\n                break;\n            case 2162700:\n                value = parseJSXExpressionContainer(parser, context, privateScope, 0, 1);\n                break;\n            default:\n                parser.report(154);\n        }\n    }\n    return parser.finishNode({\n        type: 'JSXAttribute',\n        value,\n        name,\n    }, tokenStart);\n}\nfunction parseJSXNamespacedName(parser, context, namespace, start) {\n    consume(parser, context, 21);\n    const name = parseJSXIdentifier(parser, context);\n    return parser.finishNode({\n        type: 'JSXNamespacedName',\n        namespace,\n        name,\n    }, start);\n}\nfunction parseJSXExpressionContainer(parser, context, privateScope, inJSXChild, isAttr) {\n    const { tokenStart: start } = parser;\n    nextToken(parser, context | 32);\n    const { tokenStart } = parser;\n    if (parser.getToken() === 14)\n        return parseJSXSpreadChild(parser, context, privateScope, start);\n    let expression = null;\n    if (parser.getToken() === 1074790415) {\n        if (isAttr)\n            parser.report(157);\n        expression = parseJSXEmptyExpression(parser, {\n            index: parser.startIndex,\n            line: parser.startLine,\n            column: parser.startColumn,\n        });\n    }\n    else {\n        expression = parseExpression(parser, context, privateScope, 1, 0, tokenStart);\n    }\n    if (parser.getToken() !== 1074790415) {\n        parser.report(25, KeywordDescTable[1074790415 & 255]);\n    }\n    if (inJSXChild) {\n        nextJSXToken(parser);\n    }\n    else {\n        nextToken(parser, context);\n    }\n    return parser.finishNode({\n        type: 'JSXExpressionContainer',\n        expression,\n    }, start);\n}\nfunction parseJSXSpreadChild(parser, context, privateScope, start) {\n    consume(parser, context, 14);\n    const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);\n    consume(parser, context, 1074790415);\n    return parser.finishNode({\n        type: 'JSXSpreadChild',\n        expression,\n    }, start);\n}\nfunction parseJSXEmptyExpression(parser, start) {\n    return parser.finishNode({\n        type: 'JSXEmptyExpression',\n    }, start, parser.tokenStart);\n}\nfunction parseJSXIdentifier(parser, context) {\n    const start = parser.tokenStart;\n    if (!(parser.getToken() & 143360)) {\n        parser.report(30, KeywordDescTable[parser.getToken() & 255]);\n    }\n    const { tokenValue } = parser;\n    nextToken(parser, context);\n    return parser.finishNode({\n        type: 'JSXIdentifier',\n        name: tokenValue,\n    }, start);\n}\n\nvar version$1 = \"6.1.4\";\n\nconst version = version$1;\nfunction parseScript(source, options) {\n    return parseSource(source, options);\n}\nfunction parseModule(source, options) {\n    return parseSource(source, options, 1 | 2);\n}\nfunction parse(source, options) {\n    return parseSource(source, options);\n}\n\nexport { parse, parseModule, parseScript, version };\n", "import { parseScript, type ESTree } from 'meriyah';\nimport { jsBuiltIns, memberBaseName, memberToString, walkAst } from './helpers.js';\n\nexport interface ExtractionConfig {\n  /**\n   * Predicate that determines whether the current node should be considered a match.\n   */\n  match: (node: ESTree.Node) => boolean | ESTree.Node;\n  /**\n   * When `false`, dependency resolution is not enforced and extractions are marked as ready immediately\n   * when `stopWhenReady` is true.\n   */\n  collectDependencies?: boolean;\n  /**\n   * When `true`, traversal stops once the extraction is matched and all its dependencies (when `collectDependencies=true`) resolve.\n   * Only useful for small functions/vars without too many dependencies. Deeper dependency trees will usually have the unresolvable\n   * member expression here and there, for example:\n   * ```js\n   *  var Vmi = g.dX.window, Wr = Vmi?.yt?.config_ || Vmi?.ytcfg?.data_ || {};\n   * ```\n   * \n   * Since `Vmi.ytcfg` is a dependency, it will never resolve because it comes from `g.dX.window`, which is an external object we don't have access to. \n   * In cases like this, `stopWhenReady` option does nothing useful.\n   */\n  stopWhenReady?: boolean;\n  /**\n   * If `true`, dependency collection is limited to the match context node itself.\n   */\n  onlyProcessMatchContext?: boolean;\n  /**\n   * Name for easier identification of extractions.\n   */\n  friendlyName?: string;\n}\n\nexport interface AnalyzerOptions {\n  /**\n   * One or more extraction configurations to look for while traversing.\n   */\n  extractions?: ExtractionConfig | ExtractionConfig[];\n}\n\nexport interface VariableMetadata {\n  name: string;\n  node?: any;\n  dependencies: Set<string>;\n  dependents: Set<string>;\n  prototypeAliases: Map<string, Set<VariableMetadata>>;\n  predeclared: boolean;\n}\n\nexport interface ExtractionState {\n  config: ExtractionConfig;\n  node?: ESTree.Node;\n  metadata?: VariableMetadata;\n  dependencies: Set<string>;\n  dependents: Set<string>;\n  matchContext?: ESTree.Node;\n  ready: boolean;\n}\n\nexport type ExtractionMatch = ExtractionState;\n\ntype Scope = {\n  names: Set<string>;\n  type: 'function' | 'block'\n};\n\n/**\n * Performs dependency-aware extraction of variables inside an IIFE.\n */\nexport class JsAnalyzer {\n  private readonly source: string;\n  private readonly programAst: ESTree.Program;\n  private readonly hasExtractions: boolean;\n  private readonly extractionStates: ExtractionState[];\n  private readonly dependentsTracker: Map<string, Set<string>> = new Map();\n  private pendingPrototypeAliasBinding: [string, VariableMetadata] | null = null;\n\n  public iifeParamName: string | null = null;\n  public readonly declaredVariables: Map<string, VariableMetadata> = new Map();\n\n  /**\n   * Creates a new instance over the provided source.\n   * @param code JavaScript source to parse and inspect.\n   * @param options Optional traversal settings.\n   */\n  constructor(code: string, options: AnalyzerOptions = {}) {\n    this.source = code;\n    const extractionConfigs = options.extractions\n      ? Array.isArray(options.extractions)\n        ? options.extractions\n        : [ options.extractions ]\n      : [];\n\n    this.extractionStates = extractionConfigs.map((config) => ({\n      config: { collectDependencies: true, stopWhenReady: true, ...config },\n      dependencies: new Set<string>(),\n      dependents: new Set<string>(),\n      ready: false\n    }));\n\n    this.hasExtractions = this.extractionStates.length > 0;\n\n    this.programAst = parseScript(code, {\n      ranges: true,\n      loc: false,\n      module: false\n    });\n\n    this.analyzeAst();\n  }\n\n  /**\n   * Walks the AST to collect declarations and resolve initial targets.\n   */\n  private analyzeAst(): void {\n    let iifeBody: ESTree.BlockStatement | undefined;\n\n    for (const statement of this.programAst.body) {\n      if (statement.type === 'ExpressionStatement' && statement.expression.type === 'CallExpression') {\n        const callExpr = statement.expression;\n        if (callExpr.callee.type === 'FunctionExpression') {\n          const funcExpr = callExpr.callee;\n          const firstParam = funcExpr.params.length > 0 ? funcExpr.params[0] : null;\n\n          if (!this.iifeParamName && firstParam?.type === 'Identifier') {\n            this.iifeParamName = firstParam.name; // Maybe it should be an array?\n          }\n\n          if (funcExpr.body?.type === 'BlockStatement') {\n            iifeBody = funcExpr.body;\n            break; // Found it, no need to continue.\n          }\n        }\n      }\n    }\n\n    if (!iifeBody) return;\n\n    for (const currentNode of iifeBody.body) {\n      switch (currentNode.type) {\n        case 'ExpressionStatement': {\n          const assignment = currentNode.expression;\n          if (assignment.type !== 'AssignmentExpression') continue;\n\n          const left = assignment.left;\n          const right = assignment.right;\n\n          // Detect things like `a.b = g.c.prototype` so later `a.b.foo = ...` can be attributed back to `g.c`.\n          if (\n            right.type === 'MemberExpression' &&\n            !right.computed &&\n            right.property.type === 'Identifier' &&\n            right.property.name === 'prototype'\n          ) {\n            const prototypeSourceExpr = memberToString(right, this.source);\n            const aliasTargetExpr = left.type === 'Identifier' ? left.name : memberToString(left, this.source);\n\n            if (prototypeSourceExpr) {\n              const prototypeOwnerMeta = this.declaredVariables.get(\n                prototypeSourceExpr.replace('.prototype', '')\n              );\n\n              if (aliasTargetExpr && prototypeOwnerMeta) {\n                const aliasedPrototypeMembers = new Set<VariableMetadata>();\n                const aliasExpr = `${aliasTargetExpr}.`; // Had to add a dot here so we can detect it later when matching member expressions..\n\n                // Activate an alias binding context, so subsequent member assignments to the alias (`a.b.foo = ...`) can be tracked.\n                // NOTE: This assumes that the alias members come right after this declaration and are grouped together in the code, hehe :)\n                this.pendingPrototypeAliasBinding = [ aliasExpr, prototypeOwnerMeta ];\n\n                prototypeOwnerMeta.prototypeAliases.set(aliasExpr, aliasedPrototypeMembers);\n              }\n            }\n          }\n\n          if (left.type === 'Identifier') {\n            // This identifier existing means it was a pre-declared and\n            // we just got to it.\n            const existingVariable = this.declaredVariables.get(left.name);\n            if (!existingVariable) continue;\n\n            existingVariable.node.init = right;\n\n            if (this.needsDependencyAnalysis(right)) {\n              existingVariable.dependencies = this.findDependencies(assignment.right, left.name);\n            }\n\n            if (this.onMatch(existingVariable.node, existingVariable)) return;\n          } else if (assignment.left.type === 'MemberExpression') {\n            const memberName = memberToString(assignment.left, this.source);\n            const activeAliasExpr = this.pendingPrototypeAliasBinding?.[0];\n\n            // While an alias binding is active, collect member assignments made through the alias (`g.q.foo = ...`).\n            if (activeAliasExpr && (memberName?.includes(activeAliasExpr) || memberName === activeAliasExpr.slice(0, -1))) {\n              const aliasOwnerMeta = this.declaredVariables.get(this.pendingPrototypeAliasBinding?.[1].name || '');\n              if (aliasOwnerMeta) {\n                const existingAliasedMembers = aliasOwnerMeta.prototypeAliases.get(activeAliasExpr);\n\n                const aliasedMemberMeta: VariableMetadata = {\n                  name: memberName,\n                  node: currentNode,\n                  dependents: this.dependentsTracker.get(memberName) || new Set<string>(),\n                  predeclared: false,\n                  prototypeAliases: new Map<string, Set<VariableMetadata>>(),\n                  dependencies: this.findDependencies(right, memberName)\n                };\n\n                if (existingAliasedMembers) {\n                  existingAliasedMembers.add(aliasedMemberMeta);\n                } else {\n                  aliasOwnerMeta.prototypeAliases.set(activeAliasExpr, new Set([ aliasedMemberMeta ]));\n                }\n              }\n            } else {\n              this.pendingPrototypeAliasBinding = null;\n            }\n\n            if (!memberName || this.declaredVariables.has(memberName)) continue;\n\n            const metadata: VariableMetadata = {\n              name: memberName,\n              node: currentNode,\n              dependents: this.dependentsTracker.get(memberName) || new Set<string>(),\n              predeclared: false,\n              prototypeAliases: new Map<string, Set<VariableMetadata>>(),\n              dependencies: this.findDependencies(right, memberName)\n            };\n\n            const baseName = memberBaseName(assignment.left, this.source);\n            if (baseName && baseName !== memberName && !baseName.startsWith('this.')) {\n              metadata.dependencies.add(baseName.replace('.prototype', ''));\n            }\n\n            if (this.dependentsTracker.has(memberName)) {\n              this.dependentsTracker.delete(memberName);\n            }\n\n            this.declaredVariables.set(memberName, metadata);\n\n            if (this.onMatch(currentNode, metadata)) return;\n          }\n          break;\n        }\n        case 'VariableDeclaration': {\n          this.pendingPrototypeAliasBinding = null;\n\n          for (const declaration of currentNode.declarations) {\n            if (declaration.id.type !== 'Identifier') continue;\n\n            const metadata: VariableMetadata = {\n              name: declaration.id.name,\n              node: declaration,\n              dependents: this.dependentsTracker.get(declaration.id.name) || new Set<string>(),\n              prototypeAliases: new Map<string, Set<VariableMetadata>>(),\n              dependencies: new Set(),\n              predeclared: false\n            };\n\n            const init = declaration.init;\n\n            if (!init && currentNode.kind === 'var') {\n              metadata.predeclared = true; // \"var x, y, z;\"\n            } else if (init && this.needsDependencyAnalysis(init)) {\n              metadata.dependencies = this.findDependencies(init, metadata.name);\n            }\n\n            if (this.dependentsTracker.has(metadata.name)) {\n              this.dependentsTracker.delete(metadata.name);\n            }\n\n            this.declaredVariables.set(metadata.name, metadata);\n\n            if (this.onMatch(declaration, metadata)) return;\n          }\n          break;\n        }\n      }\n    }\n  }\n\n  /**\n   * Quick check if node type requires dependency analysis\n   */\n  private needsDependencyAnalysis(node: ESTree.Node | null): boolean {\n    if (!node) return false;\n    switch (node.type) {\n      case 'FunctionExpression':\n      case 'ArrowFunctionExpression':\n      case 'ArrayExpression':\n      case 'LogicalExpression':\n      case 'CallExpression':\n      case 'NewExpression':\n      case 'MemberExpression':\n      case 'BinaryExpression':\n      case 'ConditionalExpression':\n      case 'ObjectExpression':\n      case 'SequenceExpression':\n      case 'ClassExpression':\n      case 'Identifier':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Records a match, attaches metadata, and updates readiness state.\n   * @returns True when traversal can stop as a result of the match.\n   */\n  private onMatch(\n    node: ESTree.Node,\n    metadata?: VariableMetadata\n  ): boolean {\n    if (!this.hasExtractions) return false;\n\n    let matched = false;\n    let result: ESTree.Node | boolean = false;\n\n    for (const state of this.extractionStates) {\n      if (!state.node) {\n        if (node.type === 'VariableDeclarator' && !node.init) continue;\n\n        result = state.config.match(node);\n\n        if (!result) continue;\n        state.node = node;\n\n        matched = true;\n\n        if (metadata) {\n          state.metadata = metadata;\n          state.dependents = metadata.dependents;\n          state.dependencies = metadata.dependencies;\n          if (typeof result !== 'boolean')\n            state.matchContext = result;\n        }\n\n        this.refreshExtractionState(state);\n      } else if (state.node !== node) {\n        // Use this as a chance to refresh readiness in case dependencies were resolved since last time\n        // we checked.\n        this.refreshExtractionState(state);\n\n        if (this.shouldStopTraversal()) {\n          return true;\n        }\n      }\n    }\n\n    if (!matched) return false;\n\n    return this.shouldStopTraversal();\n  }\n\n  /**\n   * Refreshes the readiness state of an extraction target based on its dependencies\n   * and/or configuration.\n   * @param state - State to refresh.\n   */\n  private refreshExtractionState(state: ExtractionState): void {\n    if (!state.node) {\n      state.ready = false;\n      return;\n    }\n\n    if (state.config.collectDependencies === false) {\n      state.ready = true;\n      return;\n    }\n\n    if (!state.metadata) {\n      state.ready = false;\n      return;\n    }\n\n    state.ready = this.areDependenciesResolved(state.dependencies);\n  }\n\n  /**\n   * Determines whether traversal should stop based on extraction states and configuration.\n   */\n  private shouldStopTraversal(): boolean {\n    if (!this.hasExtractions) return false;\n\n    let hasStoppingTarget = false;\n\n    for (const state of this.extractionStates) {\n      if (state.config.stopWhenReady === false) continue;\n\n      hasStoppingTarget = true;\n\n      if (!state.node) return false;\n      if (!state.ready) return false;\n    }\n\n    return hasStoppingTarget;\n  }\n\n  /**\n   * Checks if every dependency resolves to a declaration or built-in symbol.\n   * @param dependencies - Dependencies to validate.\n   * @param seen - Tracks recursively visited identifiers.\n   */\n  private areDependenciesResolved(\n    dependencies: Set<string>,\n    seen: Set<string> = new Set()\n  ): boolean {\n    if (!dependencies || dependencies.size === 0)\n      return true;\n\n    for (const dependency of dependencies) {\n      if (!dependency) continue;\n      if (jsBuiltIns.has(dependency)) continue;\n      if (dependency === this.iifeParamName) continue;\n\n      if (seen.has(dependency)) continue;\n\n      const depMeta = this.declaredVariables.get(dependency);\n      if (!depMeta) return false;\n\n      seen.add(dependency);\n\n      if (!this.areDependenciesResolved(depMeta.dependencies, seen)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Collects free identifier dependencies reachable from the provided AST node.\n   * @param rootNode - AST node to search for dependencies.\n   * @param identifierName - Name of the identifier represented by `rootNode`, used for tracking dependents.\n   */\n  private findDependencies(rootNode: ESTree.Node, identifierName: string): Set<string> {\n    const dependencies = new Set<string>();\n    if (!rootNode) return dependencies;\n\n    const scopeStack: Scope[] = [\n      {\n        names: new Set<string>(),\n        type: 'block'\n      }\n    ];\n\n    const currentScope = () => scopeStack[scopeStack.length - 1];\n\n    const isInScope = (name: string) => {\n      for (let i = scopeStack.length - 1; i >= 0; i--) {\n        if (scopeStack[i].names.has(name)) return true;\n      }\n      return false;\n    };\n\n    const rootIdentifierName = 'id' in rootNode && rootNode?.id?.type === 'Identifier' ? rootNode.id.name : undefined;\n\n    const collectBindingIdentifiers = (pattern: ESTree.Node | null, target: Set<string>) => {\n      if (!pattern)\n        return;\n\n      switch (pattern.type) {\n        case 'Identifier':\n          target.add(pattern.name);\n          break;\n        case 'ObjectPattern':\n          for (const prop of pattern.properties) {\n            if (prop.type === 'RestElement') {\n              collectBindingIdentifiers(prop.argument, target);\n            } else if (prop.type === 'Property') {\n              collectBindingIdentifiers(prop.value, target);\n            }\n          }\n          break;\n        case 'ArrayPattern':\n          for (const el of pattern.elements) {\n            if (el) collectBindingIdentifiers(el, target);\n          }\n          break;\n        case 'RestElement':\n          collectBindingIdentifiers(pattern.argument, target);\n          break;\n        case 'AssignmentPattern':\n          collectBindingIdentifiers(pattern.left, target);\n          break;\n      }\n    };\n\n    const collectParams = (fnNode: ESTree.ArrowFunctionExpression | ESTree.FunctionExpression | ESTree.FunctionDeclaration, target: Set<string>) => {\n      if (!fnNode?.params) return;\n      for (const p of fnNode.params) collectBindingIdentifiers(p, target);\n    };\n\n    walkAst(rootNode, {\n      enter: (n, parent) => {\n        switch (n.type) {\n          // Note for anybody debugging this in the future:\n          // *DO NOT* add MethodDefinition here.\n          // MethodDefinition.value is a FunctionExpression, so it is already handled...\n          case 'FunctionDeclaration':\n          case 'FunctionExpression':\n          case 'ArrowFunctionExpression': {\n            const isDecl = n.type === 'FunctionDeclaration';\n            const fnName = 'id' in n ? n.id?.name : undefined;\n\n            // Add func name to scope if it's a declaration, this way it won't be considered a dep itself.\n            if (isDecl && fnName) {\n              currentScope().names.add(fnName);\n            }\n\n            // Enter function scope.\n            const fnScope: Scope = { names: new Set<string>(), type: 'function' };\n\n            if (n.type === 'FunctionExpression' && fnName) {\n              fnScope.names.add(fnName);\n            }\n\n            collectParams(n, fnScope.names);\n            scopeStack.push(fnScope);\n            break;\n          }\n          case 'BlockStatement': {\n            scopeStack.push({ names: new Set<string>(), type: 'block' });\n            break;\n          }\n          case 'CatchClause': {\n            const s = new Set<string>();\n            if (n.param) collectBindingIdentifiers(n.param, s);\n            scopeStack.push({ names: s, type: 'block' });\n            break;\n          }\n          case 'VariableDeclaration': {\n            // var hoists to function scope...\n            const targetScope = n.kind === 'var'\n              ? scopeStack.findLast((s) => s.type === 'function') ?? currentScope()\n              : currentScope();\n            for (const d of n.declarations) {\n              collectBindingIdentifiers(d.id, targetScope.names);\n            }\n            break;\n          }\n          case 'ClassDeclaration': {\n            if (n.id?.name) {\n              currentScope().names.add(n.id.name);\n            }\n            break;\n          }\n          case 'LabeledStatement': { // YouTube uses these things for some reason.\n            if (n.label?.type === 'Identifier') currentScope().names.add(n.label.name);\n            break;\n          }\n          case 'Identifier': {\n            if (n.name === rootIdentifierName) return;\n\n            // Ignore if it's a property name (e.g., \"obj.prop\" or \"{prop: 1}\"\", we don't care about the \"prop\" name itself).\n            if (parent?.type === 'Property' && parent.key === n && !parent.computed) return;\n            // Ignore class method names. They are declarations, not external dependencies.\n            if (parent?.type === 'MethodDefinition' && parent.key === n && !parent.computed) return;\n            if (parent?.type === 'MemberExpression' && parent.property === n && !parent.computed) {\n              if (parent.object.type === 'ThisExpression') return; // Skip 'this.property', etc.\n\n              const full = memberToString(parent, this.source);\n              if (!full) return;\n\n              const declaredVariable = this.declaredVariables.get(full);\n              if (declaredVariable) {\n                declaredVariable.dependents.add(identifierName);\n                dependencies.add(full);\n              } else if (parent.object.type === 'Identifier') {\n                const baseName = parent.object.name;\n\n                const declaredBaseVariable = this.declaredVariables.get(baseName);\n                if (\n                  (declaredBaseVariable || baseName === this.iifeParamName) &&\n                  !isInScope(baseName) && !jsBuiltIns.has(baseName)\n                ) {\n                  declaredBaseVariable?.dependents.add(identifierName);\n                  dependencies.add(full);\n\n                  // We have this object, but not the full member chain.\n                  const existingTracker = this.dependentsTracker.get(full);\n                  if (existingTracker) {\n                    existingTracker.add(identifierName);\n                  } else {\n                    this.dependentsTracker.set(full, new Set([ identifierName ]));\n                  }\n                }\n              }\n              return;\n            }\n\n            if (parent?.type === 'MetaProperty') {\n              return; // Skip stuff like \"new.target\" or \"import.meta\"\n            }\n\n            if (isInScope(n.name) || jsBuiltIns.has(n.name)) return;\n\n            // It's a free variable, so it's a dependency.\n            dependencies.add(n.name);\n\n            const declaredVariable = this.declaredVariables.get(n.name);\n            if (declaredVariable) {\n              declaredVariable.dependents.add(identifierName);\n            } else {\n              // Not declared yet, track for future resolution.\n              const existing = this.dependentsTracker.get(n.name);\n              if (existing) {\n                existing.add(identifierName);\n              } else {\n                this.dependentsTracker.set(n.name, new Set([ identifierName ]));\n              }\n            }\n            break;\n          }\n          case 'ForStatement':\n          case 'ForInStatement':\n          case 'ForOfStatement': {\n            scopeStack.push({ names: new Set<string>(), type: 'block' });\n            break;\n          }\n        }\n      },\n      leave: (n: any) => {\n        switch (n.type) {\n          case 'FunctionDeclaration':\n          case 'FunctionExpression':\n          case 'ArrowFunctionExpression':\n          case 'BlockStatement':\n          case 'CatchClause':\n          case 'ForStatement':\n          case 'ForInStatement':\n          case 'ForOfStatement':\n            if (scopeStack.length > 1) scopeStack.pop();\n            break;\n        }\n      }\n    });\n\n    return dependencies;\n  }\n\n  /**\n   * Returns the current set of matched extractions.\n   */\n  public getExtractedMatches(): ExtractionMatch[] {\n    return this.extractionStates\n      .filter((state) => !!state.node);\n  }\n\n  /**\n   * Returns the raw, original source.\n   */\n  public getSource(): string {\n    return this.source;\n  }\n}", "import type { ESTree } from 'meriyah';\nimport type { JsAnalyzer, VariableMetadata } from './JsAnalyzer.js';\nimport { createWrapperFunction, extractNodeSource, indent, jsBuiltIns, memberToString } from './helpers.js';\n\nexport type SideEffectMode = 'strict' | 'loose';\n\nexport interface SideEffectPolicyOptions {\n  /**\n   * Determines how strictly side-effect detection should behave.\n   * Use `\"loose\"` to allow benign computed expressions.\n   */\n  mode?: SideEffectMode;\n}\n\nexport interface EmitterOptions {\n  /**\n   * The maximum depth to traverse when emitting dependencies.\n   * If not specified, there is no limit on the depth.\n   */\n  maxDepth?: number;\n  /**\n   * When true or configured, replace unsafe initializers (calls, `new`, etc.)\n   * with `undefined` to avoid executing side-effectful code.\n   * Use `{ mode: 'loose' }` to allow a broader set of expressions.\n   */\n  disallowSideEffectInitializers?: boolean | SideEffectPolicyOptions;\n  /**\n   * When true, emit a single `var` declaration for every variable\n   * encountered, even if it originally had an initializer.\n   */\n  forceVarPredeclaration?: boolean;\n  /**\n   * When true, also export raw values of matched nodes.\n   */\n  exportRawValues?: boolean;\n  /**\n   * Array of names to skip emitting code/deps for, but still export the raw value.\n   */\n  rawValueOnly?: string[];\n}\n\nexport interface BuildScriptResult {\n  /**\n   * The generated output script as a string.\n   */\n  output: string;\n  /**\n   * An array of exported variable names.\n   */\n  exported: string[];\n  /**\n   * An object mapping exported variable names to their raw values, if `exportRawValues` was enabled.\n   */\n  exportedRawValues?: Record<string, any>;\n}\n\n/**\n * Class responsible for extracting and emitting JavaScript code snippets\n * based on analysis results from a `JsAnalyzer` instance.\n */\nexport class JsExtractor {\n  constructor(private analyzer: JsAnalyzer) { /** no-op */ }\n\n  /**\n   * Checks if all provided arguments are safe initializers.\n   * @param args - The arguments to check.\n   * @param mode - The side effect mode to use ('strict' or 'loose').\n   */\n  private areSafeArgs(\n    args?: (ESTree.Expression | ESTree.SpreadElement | null | undefined)[],\n    mode: SideEffectMode = 'strict'\n  ): boolean {\n    return (args ?? []).every((arg) => {\n      if (!arg) return false;\n      if (arg.type === 'SpreadElement') return false;\n      return this.isSafeInitializer(arg, mode);\n    });\n  }\n\n  /**\n   * Determines if a given AST node is a safe initializer without side effects.\n   * @param node - The AST node to evaluate.\n   * @param mode - The side effect mode to use ('strict' or 'loose').\n   */\n  private isSafeInitializer(\n    node?: ESTree.Node | null,\n    mode: SideEffectMode = 'strict'\n  ): boolean {\n    if (!node) return true;\n\n    switch (node.type) {\n      case 'ClassExpression':\n        return true;\n      case 'Literal': {\n        const literal = node as ESTree.Literal & { regex?: unknown };\n        return (\n          typeof literal.value === 'string' ||\n          typeof literal.value === 'number' ||\n          typeof literal.value === 'boolean' ||\n          literal.value === null ||\n          Boolean(literal.regex)\n        );\n      }\n      case 'TemplateLiteral': {\n        return node.expressions.every((expr) => this.isSafeInitializer(expr, mode));\n      }\n      case 'ArrayExpression': {\n        return node.elements.every((elem) => {\n          if (!elem) return true;\n          if (elem.type === 'SpreadElement') return false;\n          return this.isSafeInitializer(elem, mode);\n        });\n      }\n      case 'ObjectExpression': {\n        return node.properties.every((prop) => {\n          if (prop.type !== 'Property') return false;\n          if (prop.computed) return false;\n          if (prop.kind !== 'init') return false;\n\n          const value = prop.value;\n          if (!value) return false;\n\n          // e.g., { a: function() {} }, { a: () => {} }, or { a: \"string\" }\n          return value.type === 'FunctionExpression' ||\n            value.type === 'ArrowFunctionExpression' ||\n            value.type === 'Literal';\n\n        });\n      }\n      case 'CallExpression': {\n        if (node.callee.type === 'Identifier' && jsBuiltIns.has(node.callee.name)) {\n          return this.areSafeArgs(node.arguments, mode);\n        } else if (node.callee.type === 'MemberExpression') {\n          if (!this.isSafeInitializer(node.callee.object, mode)) return false;\n\n          if (mode === 'strict') {\n            const propertyName = node.callee.property.type === 'Identifier' ? node.callee.property.name : '';\n            if (node.callee.computed || !jsBuiltIns.has(propertyName)) {\n              return false;\n            }\n          }\n\n          return this.areSafeArgs(node.arguments, mode);\n        }\n        return false;\n      }\n      case 'NewExpression': {\n        if (node.callee.type === 'Identifier') {\n          if (jsBuiltIns.has(node.callee.name)) {\n            return this.areSafeArgs(node.arguments, mode);\n          }\n          if (mode === 'loose') {\n            return this.areSafeArgs(node.arguments, mode);\n          }\n        }\n        return false;\n      }\n      case 'UnaryExpression': {\n        return this.isSafeInitializer(node.argument, mode);\n      }\n      case 'FunctionExpression':\n      case 'ArrowFunctionExpression':\n      case 'Identifier': {\n        return true;\n      }\n      case 'MemberExpression': {\n        if (mode === 'loose') {\n          if (node.computed && !this.isSafeInitializer(node.property, mode)) {\n            return false;\n          }\n          return this.isSafeInitializer(node.object, mode);\n        }\n\n        // Allow cases such as a.b = c.prototype;\n        if (!node.computed && node.property.type === 'Identifier' && node.property.name === 'prototype') {\n          return true;\n        }\n\n        return false;\n      }\n      case 'LogicalExpression':\n      case 'BinaryExpression': {\n        return (\n          this.isSafeInitializer(node.left, mode) &&\n          this.isSafeInitializer(node.right, mode)\n        );\n      }\n      case 'ConditionalExpression': {\n        if (mode === 'loose') {\n          return (\n            this.isSafeInitializer(node.test, mode) &&\n            this.isSafeInitializer(node.consequent, mode) &&\n            this.isSafeInitializer(node.alternate, mode)\n          );\n        }\n        return false;\n      }\n      case 'SequenceExpression': {\n        if (mode === 'loose') {\n          return node.expressions.every((expr) => this.isSafeInitializer(expr, mode));\n        }\n        return false;\n      }\n      case 'AssignmentExpression': {\n        if (node.left.type === 'MemberExpression' && !node.left.computed) {\n          const object = node.left.object;\n          if (object.type === 'Identifier' && this.analyzer.declaredVariables.get(object.name)?.node.init !== undefined) {\n            return this.isSafeInitializer(node.right, mode);\n          }\n        } else if (node.left.type === 'Identifier') {\n          if (this.analyzer.declaredVariables.has(node.left.name)) {\n            return this.isSafeInitializer(node.right, mode);\n          }\n        }\n        return false;\n      }\n      // @todo: check for more?\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Provides a fallback initializer string based on the type of the initializer node.\n   * @TODO: Check more cases.\n   * @param init - The initializer expression to evaluate.\n   */\n  private getInitializerFallback(init?: ESTree.Expression | null): string {\n    switch (init?.type) {\n      case 'ObjectExpression':\n      case 'NewExpression':\n      case 'MemberExpression':\n      case 'LogicalExpression':\n        return '{}';\n      case 'ArrayExpression':\n        return '[]';\n      default:\n        return 'undefined';\n    }\n  }\n\n  /**\n   * Renders an AST node to JavaScript source code, with special handling for variable declarators.\n   * @param node - The ESTree node to render.\n   * @param preDeclared - Whether the variable has been previously declared.\n   * @param options - Configuration options for the emitter.\n   */\n  private renderNode(\n    node: ESTree.Node,\n    preDeclared: boolean,\n    options: EmitterOptions = {}\n  ) {\n    const source = this.analyzer.getSource();\n    const declaredVariables = this.analyzer.declaredVariables;\n\n    const sideEffectPolicy = options.disallowSideEffectInitializers;\n    const sideEffectMode = typeof sideEffectPolicy === 'object' && sideEffectPolicy !== null ?\n      sideEffectPolicy.mode ?? 'strict' : 'strict';\n    const canDisallow = Boolean(sideEffectPolicy);\n\n    const assignmentTarget =\n      node.type === 'AssignmentExpression'\n        ? node\n        : node.type === 'ExpressionStatement' && node.expression.type === 'AssignmentExpression'\n          ? node.expression\n          : null;\n\n    const init = assignmentTarget && assignmentTarget.operator === '=' ? assignmentTarget.right : node.type === 'VariableDeclarator' ? node.init : null;\n    const forceRemove = canDisallow && init && !this.isSafeInitializer(init, sideEffectMode);\n    const initializerFallback = this.getInitializerFallback(init);\n\n    let initSource = initializerFallback;\n\n    if (!forceRemove && init) {\n      // e.g. `var someVar = document;`\n      if (!preDeclared && init.type === 'Identifier' && !declaredVariables.has(init.name)) {\n        initSource = initializerFallback;\n      } else {\n        const left = assignmentTarget?.left;\n        const isPrototypeAlias = init?.type === 'MemberExpression' && !init.computed && init.property.type === 'Identifier' && init.property.name === 'prototype';\n\n        // Skip things we don't need.\n        if (!isPrototypeAlias && left?.type === 'MemberExpression' && init) {\n          if (\n            canDisallow &&\n            left.object.type === 'Identifier' &&\n            init.type !== 'FunctionExpression' &&\n            init.type !== 'ArrowFunctionExpression' &&\n            init.type !== 'LogicalExpression' &&\n            init.type !== 'ClassExpression'\n          ) {\n            return `${indent}// Skipped ${memberToString(left, source)} assignment.`;\n          }\n        }\n\n        // e.g. `someVar = someOtherVarFuncOrCall`\n        initSource = extractNodeSource(init, source)\n          ?.trim()\n          .replace(/;\\s*$/, '') || 'undefined // [JsExtractor] Failed to extract initializer source.';\n      }\n    }\n\n    // Wrap sequence expressions in parens to avoid syntax issues.\n    if (!forceRemove && init && init.type === 'SequenceExpression' && !initSource.startsWith('(')) {\n      initSource = `(${initSource})`;\n    }\n\n    const idName =\n      node.type === 'VariableDeclarator' && node.id.type === 'Identifier' ? node.id.name :\n        assignmentTarget && assignmentTarget.left.type === 'Identifier' ? assignmentTarget.left.name :\n          assignmentTarget?.type === 'AssignmentExpression' ? memberToString(assignmentTarget.left, source)?.trim() : 'unknown';\n\n    const assignmentExpression = `${idName} = ${initSource};`;\n\n    // If it's not pre-declared and has an initializer, we need to use the `var` keyword (duh).\n    if (node.type === 'VariableDeclarator' && node.init && !preDeclared) {\n      return `${indent}var ${assignmentExpression}`;\n    }\n\n    return `${indent}${assignmentExpression}`;\n  }\n\n  /**\n   * Processes extracted matches from the analyzer, handles dependencies, predeclares \n   * variables as needed, and generates an IIFE-wrapped output string containing the\n   * code snippets and exported variables.\n   * @param config - Configuration options for the emitter.\n   */\n  public buildScript(config: EmitterOptions): BuildScriptResult {\n    const { maxDepth = Infinity, forceVarPredeclaration = false, exportRawValues = false, rawValueOnly: skipEmitFor = [] } = config;\n\n    const extractions = this.analyzer.getExtractedMatches();\n    const seen = new Set<string>(extractions.map((e) => e.metadata?.name || ''));\n\n    const snippets: string[] = [];\n    const predeclaredVarSet = new Set<string>();\n    const exported = new Map<string, ESTree.Node>();\n    const exportedRawValues: Record<string, any> = {};\n\n    function registerPredeclaredVar(name?: string) {\n      if (!name || name.includes('.')) return;\n      predeclaredVarSet.add(name);\n    }\n\n    const visit = (metadata?: VariableMetadata, depth: number = 0, whitelistedDep?: string) => {\n      if (!metadata || depth > maxDepth) return;\n\n      for (const dependency of metadata.dependencies) {\n        if (whitelistedDep && whitelistedDep !== dependency) {\n          // If we haven't yet encountered the whitelisted dependency, skip this one.\n          // And if we have, delete the whitelist var so that all subsequent dependencies are included.\n          if (!seen.has(whitelistedDep))\n            continue;\n          whitelistedDep = undefined;\n        }\n\n        if (seen.has(dependency))\n          continue;\n\n        seen.add(dependency);\n\n        const dependencyMetadata = this.analyzer.declaredVariables.get(dependency);\n\n        if (!dependencyMetadata)\n          continue;\n\n        const shouldPredeclare = forceVarPredeclaration || dependencyMetadata.predeclared;\n        if (shouldPredeclare) {\n          registerPredeclaredVar(dependency);\n        }\n\n        visit(dependencyMetadata, depth + 1, whitelistedDep);\n\n        snippets.push(this.renderNode(dependencyMetadata.node, shouldPredeclare, config));\n\n        if (dependencyMetadata.prototypeAliases.size > 0) {\n          for (const [ , aliasMembers ] of dependencyMetadata.prototypeAliases) {\n            for (const member of aliasMembers) {\n              // This is deeper than the first visit, so no need to pass the whitelist, we want all deps of the member to be included.\n              visit(member, depth);\n              snippets.push(this.renderNode(member.node, shouldPredeclare, config));\n            }\n          }\n        }\n      }\n    };\n\n    // Now we can process the main stuff.\n    for (const extraction of extractions) {\n      const fname = extraction.config.friendlyName;\n      const shouldSkip = fname && skipEmitFor.includes(fname);\n\n      if (extraction.metadata) {\n        if (!shouldSkip)\n          snippets.push(`${indent}//#region --- start [${fname || 'Unknown'}] ---`);\n\n        const shouldPredeclare = (forceVarPredeclaration || extraction.metadata.predeclared) && !shouldSkip;\n        const onlyProcessMatchContext = extraction.config.onlyProcessMatchContext;\n\n        if (shouldPredeclare) {\n          registerPredeclaredVar(extraction.metadata.name);\n        }\n\n        if (extraction.config.collectDependencies && !shouldSkip) {\n          let whitelistedDep;\n\n          const matchContextNode = extraction.matchContext;\n\n          if (matchContextNode?.type === 'NewExpression' && onlyProcessMatchContext) {\n            if (matchContextNode.callee.type === 'Identifier') {\n              whitelistedDep = matchContextNode.callee.name;\n            } else if (matchContextNode.callee.type === 'MemberExpression') {\n              whitelistedDep = memberToString(matchContextNode.callee, this.analyzer.getSource()) || undefined;\n            }\n          }\n\n          visit(extraction.metadata, undefined, whitelistedDep);\n        }\n\n        if (extraction.matchContext && fname) {\n          exported.set(fname, extraction.matchContext);\n\n          if (exportRawValues) {\n            const ctx = extraction.matchContext;\n            const src = this.analyzer.getSource();\n            let rawValue: string | null = null;\n\n            if (ctx.type === 'Property') {\n              rawValue = extractNodeSource(ctx.value, src);\n            } else if (ctx.type === 'Identifier') {\n              rawValue = ctx.name;\n            } else {\n              rawValue = extractNodeSource(ctx, src);\n            }\n\n            exportedRawValues[fname] = rawValue;\n          }\n        }\n\n        if (!shouldSkip) {\n          if (!onlyProcessMatchContext) {\n            snippets.push(this.renderNode(extraction.metadata.node, shouldPredeclare, config));\n          }\n\n          snippets.push(`${indent}//#endregion --- end [${fname || 'Unknown'}] ---\\n`);\n        }\n      }\n    }\n\n    const output = [];\n\n    output.push('const __jsExtractorGlobal = typeof globalThis !== \\'undefined\\' ? globalThis :');\n    output.push(`${indent}typeof self !== 'undefined' ? self :`);\n    output.push(`${indent}typeof window !== 'undefined' ? window :`);\n    output.push(`${indent}typeof global !== 'undefined' ? global : {};\\n`);\n\n    output.push(`const exportedVars = (function(${this.analyzer.iifeParamName}) {`);\n    output.push(`${indent}const window = typeof __jsExtractorGlobal.window !== 'undefined' ? __jsExtractorGlobal.window : Object.create(null);`);\n    output.push(`${indent}const document = typeof __jsExtractorGlobal.document !== 'undefined' ? __jsExtractorGlobal.document : {};`);\n    output.push(`${indent}const self = typeof __jsExtractorGlobal.self !== 'undefined' ? __jsExtractorGlobal.self : window;\\n`);\n\n    if (predeclaredVarSet.size > 0) {\n      output.push(`${indent}var ${Array.from(predeclaredVarSet).join(', ')};\\n`);\n    }\n\n    output.push(snippets.join('\\n'));\n\n    const exportedVars = [];\n\n    // Finally, export the matched stuff.\n    for (const [ friendlyName, node ] of exported) {\n      let currentFunctionNode: ESTree.Node | null = null;\n\n      if (node.type === 'Identifier') {\n        const decl = this.analyzer.declaredVariables.get(node.name);\n        if (decl?.node?.type === 'VariableDeclarator' && decl.node.init?.type === 'FunctionExpression') {\n          currentFunctionNode = decl.node;\n        }\n      } else if (node.type === 'CallExpression' || node.type === 'NewExpression' || node.type === 'VariableDeclarator') {\n        currentFunctionNode = node;\n      }\n\n      if (currentFunctionNode) {\n        const wrapper = createWrapperFunction(this.analyzer, friendlyName, currentFunctionNode);\n        if (wrapper) {\n          output.push(`${wrapper}\\n`);\n          exportedVars.push(friendlyName);\n        }\n      }\n    }\n\n    if (exportRawValues) {\n      const rawJson = JSON.stringify(exportedRawValues, null, indent.length);\n      const rawJsonLines = rawJson.split('\\n');\n\n      // Indent all lines except the first one..\n      const formattedRawJson =\n        `${rawJsonLines[0]}\\n${rawJsonLines.slice(1).map((line) => indent + line).join('\\n')}`;\n\n      output.push(`${indent}const rawValues = ${formattedRawJson};\\n`);\n\n      exportedVars.push('rawValues');\n    }\n\n    output.push(`${indent}return { ${exportedVars.join(', ')} };`);\n    output.push('})({});\\n');\n\n    return {\n      output: output.join('\\n'),\n      exported: exportedVars,\n      exportedRawValues: exportRawValues ? exportedRawValues : undefined\n    };\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class OpenPopupAction extends YTNode {\n  static type = 'OpenPopupAction';\n\n  popup: YTNode;\n  popup_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.popup = Parser.parseItem(data.popup);\n    this.popup_type = data.popupType;\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class Button extends YTNode {\n  static type = 'Button';\n\n  public text?: string;\n  public label?: string;\n  public tooltip?: string;\n  public style?: string;\n  public size?: string;\n  public icon_type?: string;\n  public is_disabled?: boolean;\n  public target_id?: string;\n  public endpoint: NavigationEndpoint;\n  public accessibility?: AccessibilitySupportedDatas;\n  \n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'text'))\n      this.text = new Text(data.text).toString();\n\n    if (Reflect.has(data, 'accessibility') && Reflect.has(data.accessibility, 'label')) {\n      this.label = data.accessibility.label;\n    }\n\n    if ('accessibilityData' in data\n      && 'accessibilityData' in data.accessibilityData) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)\n      };\n    }\n\n    if (Reflect.has(data, 'tooltip'))\n      this.tooltip = data.tooltip;\n\n    if (Reflect.has(data, 'style'))\n      this.style = data.style;\n\n    if (Reflect.has(data, 'size'))\n      this.size = data.size;\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))\n      this.icon_type = data.icon.iconType;\n\n    if (Reflect.has(data, 'isDisabled'))\n      this.is_disabled = data.isDisabled;\n\n    if (Reflect.has(data, 'targetId'))\n      this.target_id = data.targetId;\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint || data.command);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class DropdownItem extends YTNode {\n  static type = 'DropdownItem';\n\n  label: string;\n  selected: boolean;\n  value?: number | string;\n  icon_type?: string;\n  description?: Text;\n  endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label).toString();\n    this.selected = !!data.isSelected;\n\n    if (Reflect.has(data, 'int32Value')) {\n      this.value = data.int32Value;\n    } else if (data.stringValue) {\n      this.value = data.stringValue;\n    }\n\n    if (Reflect.has(data, 'onSelectCommand')) {\n      this.endpoint = new NavigationEndpoint(data.onSelectCommand);\n    }\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon?.iconType;\n    }\n\n    if (Reflect.has(data, 'descriptionText')) {\n      this.description = new Text(data.descriptionText);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DropdownItem from './DropdownItem.js';\n\nexport default class Dropdown extends YTNode {\n  static type = 'Dropdown';\n\n  label: string;\n  entries: ObservedArray<DropdownItem>;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = data.label || '';\n    this.entries = Parser.parseArray(data.entries, DropdownItem);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Dropdown from './Dropdown.js';\nimport Text from './misc/Text.js';\n\nexport default class CreatePlaylistDialog extends YTNode {\n  static type = 'CreatePlaylistDialog';\n\n  title: string;\n  title_placeholder: string;\n  privacy_option: Dropdown | null;\n  cancel_button: Button | null;\n  create_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.dialogTitle).toString();\n    this.title_placeholder = data.titlePlaceholder || '';\n    this.privacy_option = Parser.parseItem(data.privacyOption, Dropdown);\n    this.create_button = Parser.parseItem(data.cancelButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class CommandExecutorCommand extends YTNode {\n  static type = 'CommandExecutorCommand';\n\n  public commands: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.commands = Parser.parseCommands(data.commands);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type IEndpoint, type RawNode } from '../index.js';\nimport OpenPopupAction from './actions/OpenPopupAction.js';\nimport CreatePlaylistDialog from './CreatePlaylistDialog.js';\nimport CommandExecutorCommand from './commands/CommandExecutorCommand.js';\n\nimport type Actions from '../../core/Actions.js';\nimport type ModalWithTitleAndButton from './ModalWithTitleAndButton.js';\nimport type { ApiResponse } from '../../core/Actions.js';\nimport type { IParsedResponse } from '../types/index.js';\n\nexport type Metadata = {\n  url?: string;\n  api_url?: string;\n  page_type?: string;\n  send_post?: boolean;\n};\n\nexport default class NavigationEndpoint extends YTNode {\n  static type = 'NavigationEndpoint';\n\n  public name?: string;\n  public payload: any;\n  public dialog?: CreatePlaylistDialog | YTNode | null;\n  public modal?: ModalWithTitleAndButton | YTNode | null;\n  public open_popup?: OpenPopupAction | null;\n  public next_endpoint?: NavigationEndpoint;\n  public metadata: Metadata;\n  public command?: YTNode | YTNode & IEndpoint;\n  public commands?: NavigationEndpoint[];\n\n  constructor(data: RawNode) {\n    super();\n    if (data) {\n      if (data.serialCommand || data.parallelCommand) {\n        const raw_command = data.serialCommand || data.parallelCommand;\n        this.commands = raw_command.commands.map((command: RawNode) => new NavigationEndpoint(command));\n      }\n\n      if (data.innertubeCommand || data.command || data.performOnceCommand) {\n        data = data.innertubeCommand || data.command || data.performOnceCommand;\n      }\n    }\n\n    this.command = Parser.parseCommand(data);\n\n    if (Reflect.has(data || {}, 'openPopupAction'))\n      this.open_popup = new OpenPopupAction(data.openPopupAction);\n\n    this.name = Object.keys(data || {})\n      .find((item) =>\n        item.endsWith('Endpoint') ||\n        item.endsWith('Command')\n      );\n\n    this.payload = this.name ? Reflect.get(data, this.name) : {};\n\n    if (Reflect.has(this.payload, 'dialog') || Reflect.has(this.payload, 'content')) {\n      this.dialog = Parser.parseItem(this.payload.dialog || this.payload.content);\n    }\n\n    if (Reflect.has(this.payload, 'modal')) {\n      this.modal = Parser.parseItem(this.payload.modal);\n    }\n\n    if (Reflect.has(this.payload, 'nextEndpoint')) {\n      this.next_endpoint = new NavigationEndpoint(this.payload.nextEndpoint);\n    }\n\n    if (data?.serviceEndpoint) {\n      data = data.serviceEndpoint;\n    }\n\n    this.metadata = {};\n\n    if (data?.commandMetadata?.webCommandMetadata?.url) {\n      this.metadata.url = data.commandMetadata.webCommandMetadata.url;\n    }\n\n    if (data?.commandMetadata?.webCommandMetadata?.webPageType) {\n      this.metadata.page_type = data.commandMetadata.webCommandMetadata.webPageType;\n    }\n\n    if (data?.commandMetadata?.webCommandMetadata?.apiUrl) {\n      this.metadata.api_url = data.commandMetadata.webCommandMetadata.apiUrl.replace('/youtubei/v1/', '');\n    } else if (this.name) {\n      this.metadata.api_url = this.getPath(this.name);\n    }\n\n    if (data?.commandMetadata?.webCommandMetadata?.sendPost) {\n      this.metadata.send_post = data.commandMetadata.webCommandMetadata.sendPost;\n    }\n\n    if (data?.createPlaylistEndpoint) {\n      if (data?.createPlaylistEndpoint.createPlaylistDialog) {\n        this.dialog = Parser.parseItem(data?.createPlaylistEndpoint.createPlaylistDialog, CreatePlaylistDialog);\n      }\n    }\n  }\n\n  /**\n   * Sometimes InnerTube does not return an API url, in that case the library should set it based on the name of the payload object.\n   * @deprecated This should be removed in the future.\n   */\n  getPath(name: string) {\n    switch (name) {\n      case 'browseEndpoint':\n        return '/browse';\n      case 'watchEndpoint':\n      case 'reelWatchEndpoint':\n        return '/player';\n      case 'searchEndpoint':\n        return '/search';\n      case 'watchPlaylistEndpoint':\n        return '/next';\n      case 'liveChatItemContextMenuEndpoint':\n        return '/live_chat/get_item_context_menu';\n    }\n  }\n\n  call<T extends IParsedResponse>(actions: Actions, args: { [key: string]: any; parse: true }): Promise<T>;\n  call(actions: Actions, args?: { [key: string]: any; parse?: false }): Promise<ApiResponse>;\n  call(actions: Actions, args?: { [key: string]: any; parse?: boolean }): Promise<IParsedResponse | ApiResponse> {\n    if (!actions)\n      throw new Error('An API caller must be provided');\n\n    if (this.command) {\n      let command = this.command as (YTNode & IEndpoint);\n\n      if (command.is(CommandExecutorCommand)) {\n        command = command.commands.at(-1) as (YTNode & IEndpoint);\n      }\n\n      return actions.execute(command.getApiPath(), { ...command.buildRequest(), ...args });\n    }\n\n    if (!this.metadata.api_url)\n      throw new Error('Expected an api_url, but none was found.');\n\n    return actions.execute(this.metadata.api_url, { ...this.payload, ...args });\n  }\n\n  toURL(): string | undefined {\n    if (!this.metadata.url)\n      return undefined;\n    if (!this.metadata.page_type)\n      return undefined;\n    return (\n      this.metadata.page_type === 'WEB_PAGE_TYPE_UNKNOWN' ?\n        this.metadata.url : `https://www.youtube.com${this.metadata.url}`\n    );\n  }\n}", "import type { RawNode } from '../../index.js';\n\nexport default class Thumbnail {\n  url: string;\n  width: number;\n  height: number;\n\n  constructor(data: RawNode) {\n    this.url = data.url;\n    this.width = data.width;\n    this.height = data.height;\n  }\n\n  /**\n   * Get thumbnails from response object.\n   */\n  static fromResponse(data: any): Thumbnail[] {\n    if (!data) return [];\n\n    let thumbnail_data;\n\n    if (data.thumbnails) {\n      thumbnail_data = data.thumbnails;\n    } else if (data.sources) {\n      thumbnail_data = data.sources;\n    }\n\n    if (thumbnail_data) {\n      return thumbnail_data.map((x: any) => new Thumbnail(x)).sort((a: Thumbnail, b: Thumbnail) => b.width - a.width);\n    }\n\n    return [];\n  }\n}", "import type { RawNode } from '../../index.js';\nimport { escape, type Run } from './Text.js';\nimport Thumbnail from './Thumbnail.js';\n\nexport interface Emoji {\n  emoji_id: string;\n  shortcuts: string[];\n  search_terms: string[];\n  image: Thumbnail[];\n  is_custom: boolean;\n}\n\nexport default class EmojiRun implements Run {\n  public text: string;\n  public emoji: Emoji;\n\n  constructor(data: RawNode) {\n    this.text =\n      data.emoji?.emojiId ||\n      data.emoji?.shortcuts?.[0] ||\n      data.text ||\n      '';\n\n    this.emoji = {\n      emoji_id: data.emoji.emojiId,\n      shortcuts: data.emoji?.shortcuts || [],\n      search_terms: data.emoji?.searchTerms || [],\n      image: Thumbnail.fromResponse(data.emoji.image),\n      is_custom: !!data.emoji?.isCustomEmoji\n    };\n  }\n\n  toString(): string {\n    return this.text;\n  }\n\n  toHTML(): string {\n    const escaped_text = escape(this.text);\n    return `<img src=\"${this.emoji.image[0].url}\" alt=\"${escaped_text}\" title=\"${escaped_text}\" style=\"display: inline-block; vertical-align: text-top; height: var(--yt-emoji-size, 1rem); width: var(--yt-emoji-size, 1rem);\" loading=\"lazy\" crossorigin=\"anonymous\" />`;\n  }\n}", "import NavigationEndpoint from '../NavigationEndpoint.js';\nimport { escape, type Run } from './Text.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class TextRun implements Run {\n  public text: string;\n  public text_color?: number;\n  public endpoint?: NavigationEndpoint;\n  public bold: boolean;\n  public bracket: boolean;\n  public dark_mode_text_color?: number;\n  public deemphasize: boolean;\n  public italics: boolean;\n  public strikethrough: boolean;\n  public error_underline: boolean;\n  public underline: boolean;\n  public font_face?:\n    | 'FONT_FACE_UNKNOWN'\n    | 'FONT_FACE_YT_SANS_MEDIUM'\n    | 'FONT_FACE_ROBOTO_MEDIUM'\n    | 'FONT_FACE_YOUTUBE_SANS_LIGHT'\n    | 'FONT_FACE_YOUTUBE_SANS_REGULAR'\n    | 'FONT_FACE_YOUTUBE_SANS_MEDIUM'\n    | 'FONT_FACE_YOUTUBE_SANS_SEMIBOLD'\n    | 'FONT_FACE_YOUTUBE_SANS_BOLD'\n    | 'FONT_FACE_YOUTUBE_SANS_EXTRABOLD'\n    | 'FONT_FACE_YOUTUBE_SANS_BLACK'\n    | 'FONT_FACE_YT_SANS_BOLD'\n    | 'FONT_FACE_ROBOTO_REGULAR';\n  public attachment;\n\n  constructor(data: RawNode) {\n    this.text = data.text;\n    this.bold = Boolean(data.bold);\n    this.bracket = Boolean(data.bracket);\n    this.italics = Boolean(data.italics);\n    this.strikethrough = Boolean(data.strikethrough);\n    this.error_underline = Boolean(data.error_underline);\n    this.underline = Boolean(data.underline);\n    this.deemphasize = Boolean(data.deemphasize);\n\n    if ('textColor' in data) {\n      this.text_color = data.textColor;\n    }\n    \n    if ('navigationEndpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n\n    if ('darkModeTextColor' in data) {\n      this.dark_mode_text_color = data.darkModeTextColor;\n    }\n    \n    if ('fontFace' in data) {\n      this.font_face = data.fontFace;\n    }\n\n    this.attachment = data.attachment;\n  }\n\n  toString(): string {\n    return this.text;\n  }\n\n  toHTML(): string {\n    const tags: string[] = [];\n\n    if (this.bold) tags.push('b');\n    if (this.italics) tags.push('i');\n    if (this.strikethrough) tags.push('s');\n    if (this.deemphasize) tags.push('small');\n    if (this.underline) tags.push('u');\n    if (this.error_underline) tags.push('u');\n\n    if (!this.text?.length)\n      return '';\n\n    const escaped_text = escape(this.text);\n    const styled_text = tags.map((tag) => `<${tag}>`).join('') + escaped_text + tags.map((tag) => `</${tag}>`).join('');\n    const wrapped_text = `<span style=\"white-space: pre-wrap;\">${styled_text}</span>`;\n\n    if (this.attachment) {\n      if (this.attachment.element.type.imageType.image.sources.length) {\n        if (this.endpoint) {\n          const { url } = this.attachment.element.type.imageType.image.sources[0];\n\n          let image_el = '';\n\n          if (url) {\n            image_el = `<img src=\"${url}\" style=\"vertical-align: middle; height: ${this.attachment.element.properties.layoutProperties.height.value}px; width: ${this.attachment.element.properties.layoutProperties.width.value}px;\" alt=\"\">`;\n          }\n\n          const nav_url = this.endpoint.toURL();\n          if (nav_url) return `<a href=\"${nav_url}\" class=\"yt-ch-link\">${image_el}${wrapped_text}</a>`;\n        }\n      }\n    }\n\n    if (this.endpoint) {\n      const url = this.endpoint.toURL();\n      if (url) return `<a href=\"${url}\">${wrapped_text}</a>`;\n    }\n\n    return wrapped_text;\n  }\n}", "import { Log } from '../../../utils/index.js';\nimport type { RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport EmojiRun from './EmojiRun.js';\nimport TextRun from './TextRun.js';\nimport AccessibilityData from './AccessibilityData.js';\n\nexport interface Run {\n  text: string;\n\n  toString(): string;\n\n  toHTML(): string;\n}\n\nexport interface FormattedStringSupportedAccessibilityDatas {\n  accessibility_data: AccessibilityData;\n}\n\nexport function escape(text: string) {\n  return text\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#039;');\n}\n\nconst TAG = 'Text';\n\n/**\n * Represents text content that may include formatting, emojis, and navigation endpoints.\n */\nexport default class Text {\n  /**\n   * The plain text content.\n   */\n  public text?: string;\n\n  /**\n   * Individual text segments with their formatting.\n   */\n  public runs?: (EmojiRun | TextRun)[];\n\n  /**\n   * Navigation endpoint associated with this text.\n   */\n  public endpoint?: NavigationEndpoint;\n\n  /**\n   * Accessibility data associated with this text.\n   */\n  public accessibility?: FormattedStringSupportedAccessibilityDatas;\n\n  /**\n   * Indicates if the text is right-to-left.\n   */\n  public rtl: boolean;\n\n  constructor(data: RawNode) {\n    if (this.isRunsData(data)) {\n      this.runs = data.runs.map((run: RawNode) =>\n        run.emoji ? new EmojiRun(run) : new TextRun(run)\n      );\n      this.text = this.runs.map((run) => run.text).join('');\n    } else {\n      this.text = data?.simpleText;\n    }\n\n    if (this.isObject(data) && 'accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n\n    this.rtl = !!data?.rtl;\n\n    this.parseEndpoint(data);\n  }\n\n  private isRunsData(data: RawNode): data is { runs: RawNode[] } {\n    return this.isObject(data) &&\n      Reflect.has(data, 'runs') &&\n      Array.isArray(data.runs);\n  }\n\n  private parseEndpoint(data: RawNode): void {\n    if (!this.isObject(data)) return;\n    if ('navigationEndpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    } else if ('titleNavigationEndpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.titleNavigationEndpoint);\n    } else if ((this.runs?.[0] as TextRun)?.endpoint) {\n      this.endpoint = (this.runs?.[0] as TextRun).endpoint;\n    }\n  }\n\n  private isObject(data: RawNode): boolean {\n    return typeof data === 'object' && data !== null;\n  }\n\n  static fromAttributed(data: AttributedText) {\n    const {\n      content,\n      commandRuns: command_runs,\n      attachmentRuns: attachment_runs\n    } = data;\n\n    const runs: RawRun[] = [\n      {\n        text: content,\n        startIndex: 0\n      }\n    ];\n\n    // In AttributedText, styleRuns may not always include the `startIndex` or `length` properties\n    // - If `startIndex` is missing, we assume the style applies from the beginning of the text\n    // - If `length` is missing, we assume the style applies to the entire text\n    // The following code ensures default values are provided for these properties\n    const style_runs = data.styleRuns?.map((run) => ({\n      ...run,\n      startIndex: run.startIndex ?? 0,\n      length: run.length ?? content.length\n    }) as StyleRun & ResponseRun);\n\n    if (style_runs?.length)\n      this.processStyleRuns(runs, style_runs, data);\n\n    if (command_runs?.length)\n      this.processCommandRuns(runs, command_runs, data);\n\n    if (attachment_runs?.length)\n      this.processAttachmentRuns(runs, attachment_runs, data);\n\n    return new Text({ runs });\n  }\n\n  private static processStyleRuns(runs: RawRun[], style_runs: (StyleRun & ResponseRun)[], data: AttributedText) {\n    for (const style_run of style_runs) {\n      if (\n        style_run.italic ||\n        style_run.strikethrough === 'LINE_STYLE_SINGLE' ||\n        style_run.weightLabel === 'FONT_WEIGHT_MEDIUM' ||\n        style_run.weightLabel === 'FONT_WEIGHT_BOLD'\n      ) {\n        const matching_run = findMatchingRun(runs, style_run);\n\n        if (!matching_run) {\n          Log.warn(TAG, 'Unable to find matching run for style run. Skipping...', {\n            style_run,\n            input_data: data,\n            // For performance reasons, web browser consoles only expand an object, when the user clicks on it,\n            // So if we log the original runs object, it might have changed by the time the user looks at it.\n            // Deep clone, so that we log the exact state of the runs at this point.\n            parsed_runs: JSON.parse(JSON.stringify(runs))\n          });\n\n          continue;\n        }\n\n        // Comments use MEDIUM for bold text and video descriptions use BOLD for bold text\n        insertSubRun(runs, matching_run, style_run, {\n          bold: style_run.weightLabel === 'FONT_WEIGHT_MEDIUM' || style_run.weightLabel === 'FONT_WEIGHT_BOLD',\n          italics: style_run.italic,\n          strikethrough: style_run.strikethrough === 'LINE_STYLE_SINGLE'\n        });\n      } else {\n        Log.debug(TAG, 'Skipping style run as it is doesn\\'t have any information that we parse.', {\n          style_run,\n          input_data: data\n        });\n      }\n    }\n  }\n\n  private static processCommandRuns(runs: RawRun[], command_runs: CommandRun[], data: AttributedText) {\n    for (const command_run of command_runs) {\n      if (command_run.onTap) {\n        const matching_run = findMatchingRun(runs, command_run);\n\n        if (!matching_run) {\n          Log.warn(TAG, 'Unable to find matching run for command run. Skipping...', {\n            command_run,\n            input_data: data,\n            // For performance reasons, web browser consoles only expand an object, when the user clicks on it,\n            // So if we log the original runs object, it might have changed by the time the user looks at it.\n            // Deep clone, so that we log the exact state of the runs at this point.\n            parsed_runs: JSON.parse(JSON.stringify(runs))\n          });\n\n          continue;\n        }\n\n        insertSubRun(runs, matching_run, command_run, {\n          navigationEndpoint: command_run.onTap\n        });\n      } else {\n        Log.debug(TAG, 'Skipping command run as it is missing the \"doTap\" property.', {\n          command_run,\n          input_data: data\n        });\n      }\n    }\n  }\n\n  private static processAttachmentRuns(runs: RawRun[], attachment_runs: AttachmentRun[], data: AttributedText) {\n    for (const attachment_run of attachment_runs) {\n      const matching_run = findMatchingRun(runs, attachment_run);\n\n      if (!matching_run) {\n        Log.warn(TAG, 'Unable to find matching run for attachment run. Skipping...', {\n          attachment_run,\n          input_data: data,\n          // For performance reasons, web browser consoles only expand an object, when the user clicks on it,\n          // So if we log the original runs object, it might have changed by the time the user looks at it.\n          // Deep clone, so that we log the exact state of the runs at this point.\n          parsed_runs: JSON.parse(JSON.stringify(runs))\n        });\n\n        continue;\n      }\n\n      if (attachment_run.length === 0) {\n        matching_run.attachment = attachment_run;\n      } else {\n        const offset_start_index = attachment_run.startIndex - matching_run.startIndex;\n\n        const text = matching_run.text.substring(offset_start_index, offset_start_index + attachment_run.length);\n\n        const is_custom_emoji = (/^:[^:]+:$/).test(text);\n\n        if (attachment_run.element?.type?.imageType?.image && (is_custom_emoji || (/^(?:\\p{Emoji}|\\u200d)+$/u).test(text))) {\n          const emoji = {\n            image: attachment_run.element.type.imageType.image,\n            isCustomEmoji: is_custom_emoji,\n            shortcuts: is_custom_emoji ? [ text ] : undefined\n          };\n\n          insertSubRun(runs, matching_run, attachment_run, { emoji });\n        } else {\n          insertSubRun(runs, matching_run, attachment_run, {\n            attachment: attachment_run\n          });\n        }\n      }\n    }\n  }\n\n  /**\n   * Converts the text to HTML.\n   * @returns The HTML.\n   */\n  toHTML(): string | undefined {\n    return this.runs ? this.runs.map((run) => run.toHTML()).join('') : this.text;\n  }\n\n  /**\n   * Checks if the text is empty.\n   * @returns Whether the text is empty.\n   */\n  isEmpty(): boolean {\n    return this.text === undefined;\n  }\n\n  /**\n   * Converts the text to a string.\n   * @returns The text.\n   */\n  toString(): string {\n    return this.text || 'N/A';\n  }\n}\n\nfunction findMatchingRun(runs: RawRun[], response_run: ResponseRun) {\n  return runs.find((run) => {\n    return run.startIndex <= response_run.startIndex &&\n      response_run.startIndex + response_run.length <= run.startIndex + run.text.length;\n  });\n}\n\nfunction insertSubRun(runs: RawRun[], original_run: RawRun, response_run: ResponseRun, properties_to_add: Omit<RawRun, 'text' | 'startIndex'>) {\n  const replace_index = runs.indexOf(original_run);\n  const replacement_runs = [];\n\n  const offset_start_index = response_run.startIndex - original_run.startIndex;\n\n  // Stuff before the run\n  if (response_run.startIndex > original_run.startIndex) {\n    replacement_runs.push({\n      ...original_run,\n      text: original_run.text.substring(0, offset_start_index)\n    });\n  }\n\n  replacement_runs.push({\n    ...original_run,\n    text: original_run.text.substring(offset_start_index, offset_start_index + response_run.length),\n    startIndex: response_run.startIndex,\n    ...properties_to_add\n  });\n\n  // Stuff after the run\n  if (response_run.startIndex + response_run.length < original_run.startIndex + original_run.text.length) {\n    replacement_runs.push({\n      ...original_run,\n      text: original_run.text.substring(offset_start_index + response_run.length),\n      startIndex: response_run.startIndex + response_run.length\n    });\n  }\n\n  runs.splice(replace_index, 1, ...replacement_runs);\n}\n\ninterface RawRun {\n  text: string,\n  bold?: boolean;\n  italics?: boolean;\n  strikethrough?: boolean;\n  navigationEndpoint?: RawNode;\n  attachment?: RawNode;\n  emoji?: RawNode;\n  startIndex: number;\n}\n\nexport interface AttributedText {\n  content: string;\n  styleRuns?: StyleRun[];\n  commandRuns?: CommandRun[];\n  attachmentRuns?: AttachmentRun[];\n  decorationRuns?: ResponseRun[];\n}\n\ninterface ResponseRun {\n  startIndex: number;\n  length: number;\n}\n\ninterface StyleRun extends Partial<ResponseRun> {\n  italic?: boolean;\n  weightLabel?: string;\n  strikethrough?: string;\n  fontFamilyName?: string;\n  styleRunExtensions?: {\n    styleRunColorMapExtension?: {\n      colorMap?: {\n        key: string,\n        value: number\n      }[]\n    }\n  };\n}\n\ninterface CommandRun extends ResponseRun {\n  onTap?: RawNode;\n}\n\ninterface AttachmentRun extends ResponseRun {\n  alignment?: string;\n  element?: {\n    type?: {\n      imageType?: {\n        image: RawNode,\n        playbackState?: string;\n      }\n    };\n    properties?: RawNode\n  };\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelExternalLinkView extends YTNode {\n  static type = 'ChannelExternalLinkView';\n\n  title: Text;\n  link: Text;\n  favicon: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = Text.fromAttributed(data.title);\n    this.link = Text.fromAttributed(data.link);\n    this.favicon = Thumbnail.fromResponse(data.favicon);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChannelExternalLinkView from './ChannelExternalLinkView.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class AboutChannelView extends YTNode {\n  static type = 'AboutChannelView';\n\n  description?: string;\n  description_label?: Text;\n  country?: string;\n  custom_links_label?: Text;\n  subscriber_count?: string;\n  view_count?: string;\n  joined_date?: Text;\n  canonical_channel_url?: string;\n  channel_id?: string;\n  additional_info_label?: Text;\n  custom_url_on_tap?: NavigationEndpoint;\n  video_count?: string;\n  sign_in_for_business_email?: Text;\n  links: ObservedArray<ChannelExternalLinkView>;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'description')) {\n      this.description = data.description;\n    }\n\n    if (Reflect.has(data, 'descriptionLabel')) {\n      this.description_label = Text.fromAttributed(data.descriptionLabel);\n    }\n\n    if (Reflect.has(data, 'country')) {\n      this.country = data.country;\n    }\n\n    if (Reflect.has(data, 'customLinksLabel')) {\n      this.custom_links_label = Text.fromAttributed(data.customLinksLabel);\n    }\n\n    if (Reflect.has(data, 'subscriberCountText')) {\n      this.subscriber_count = data.subscriberCountText;\n    }\n\n    if (Reflect.has(data, 'viewCountText')) {\n      this.view_count = data.viewCountText;\n    }\n\n    if (Reflect.has(data, 'joinedDateText')) {\n      this.joined_date = Text.fromAttributed(data.joinedDateText);\n    }\n\n    if (Reflect.has(data, 'canonicalChannelUrl')) {\n      this.canonical_channel_url = data.canonicalChannelUrl;\n    }\n\n    if (Reflect.has(data, 'channelId')) {\n      this.channel_id = data.channelId;\n    }\n\n    if (Reflect.has(data, 'additionalInfoLabel')) {\n      this.additional_info_label = Text.fromAttributed(data.additionalInfoLabel);\n    }\n\n    if (Reflect.has(data, 'customUrlOnTap')) {\n      this.custom_url_on_tap = new NavigationEndpoint(data.customUrlOnTap);\n    }\n\n    if (Reflect.has(data, 'videoCountText')) {\n      this.video_count = data.videoCountText;\n    }\n\n    if (Reflect.has(data, 'signInForBusinessEmail')) {\n      this.sign_in_for_business_email = Text.fromAttributed(data.signInForBusinessEmail);\n    }\n\n    if (Reflect.has(data, 'links')) {\n      this.links = Parser.parseArray(data.links, ChannelExternalLinkView);\n    } else {\n      this.links = [] as unknown as ObservedArray<ChannelExternalLinkView>;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AboutChannelView from './AboutChannelView.js';\nimport Button from './Button.js';\n\nexport default class AboutChannel extends YTNode {\n  static type = 'AboutChannel';\n\n  metadata: AboutChannelView | null;\n  share_channel: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.metadata = Parser.parseItem(data.metadata, AboutChannelView);\n    this.share_channel = Parser.parseItem(data.shareChannel, Button);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AccountChannel extends YTNode {\n  static type = 'AccountChannel';\n\n  title: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\n/**\n * Not a real renderer but we treat it as one to keep things organized.\n */\nexport default class AccountItem extends YTNode {\n  static type = 'AccountItem';\n\n  account_name: Text;\n  account_photo: Thumbnail[];\n  is_selected: boolean;\n  is_disabled: boolean;\n  has_channel: boolean;\n  endpoint: NavigationEndpoint;\n  account_byline: Text;\n  channel_handle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.account_name = new Text(data.accountName);\n    this.account_photo = Thumbnail.fromResponse(data.accountPhoto);\n    this.is_selected = !!data.isSelected;\n    this.is_disabled = !!data.isDisabled;\n    this.has_channel = !!data.hasChannel;\n    this.endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    this.account_byline = new Text(data.accountByline);\n    this.channel_handle = new Text(data.channelHandle);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AccountItemSectionHeader extends YTNode {\n  static type = 'AccountItemSectionHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CompactLink extends YTNode {\n  static type = 'CompactLink';\n\n  public title: string;\n  public subtitle?: Text;\n  public endpoint: NavigationEndpoint;\n  public style: string;\n  public icon_type?: string;\n  public secondary_icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title).toString();\n\n    if ('subtitle' in data)\n      this.subtitle = new Text(data.subtitle);\n    \n    if ('icon' in data && 'iconType' in data.icon)\n      this.icon_type = data.icon.iconType;\n    \n    if ('secondaryIcon' in data && 'iconType' in data.secondaryIcon)\n      this.secondary_icon_type = data.secondaryIcon.iconType;\n    \n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);\n    this.style = data.style;\n  }\n}", "import { Parser } from '../index.js';\nimport AccountItem from './AccountItem.js';\nimport AccountItemSectionHeader from './AccountItemSectionHeader.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport CompactLink from './CompactLink.js';\n\nexport default class AccountItemSection extends YTNode {\n  static type = 'AccountItemSection';\n\n  public contents: ObservedArray<AccountItem | CompactLink>;\n  public header: AccountItemSectionHeader | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ AccountItem, CompactLink ]);\n    this.header = Parser.parseItem(data.header, AccountItemSectionHeader);\n  }\n}", "import { Parser } from '../index.js';\nimport AccountChannel from './AccountChannel.js';\nimport AccountItemSection from './AccountItemSection.js';\n\nimport type { RawNode } from '../index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class AccountSectionList extends YTNode {\n  static type = 'AccountSectionList';\n\n  public contents: ObservedArray<AccountItemSection>;\n  public footers: ObservedArray<AccountChannel>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, AccountItemSection);\n    this.footers = Parser.parseArray(data.footers, AccountChannel);\n  }\n}", "import { Parser } from '../../index.js';\nimport type { RawNode } from '../../index.js';\nimport type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\n\nexport default class AppendContinuationItemsAction extends YTNode {\n  static type = 'AppendContinuationItemsAction';\n\n  contents: ObservedArray<YTNode>;\n  target: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.continuationItems);\n    this.target = data.target;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ChangeEngagementPanelVisibilityAction extends YTNode {\n  static type = 'ChangeEngagementPanelVisibilityAction';\n  \n  public target_id: string;\n  public visibility: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_id = data.targetId;\n    this.visibility = data.visibility;\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\n\nexport default class MultiPageMenu extends YTNode {\n  static type = 'MultiPageMenu';\n\n  header: YTNode;\n  sections: ObservedArray<YTNode>;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.sections = Parser.parseArray(data.sections);\n    this.style = data.style;\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport MultiPageMenu from '../menus/MultiPageMenu.js';\n\nexport default class GetMultiPageMenuAction extends YTNode {\n  static type = 'GetMultiPageMenuAction';\n  \n  public menu: MultiPageMenu | null;\n  \n  constructor(data: RawNode) {\n    super();\n    this.menu = Parser.parseItem(data.menu, MultiPageMenu);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../types/index.js';\n\nexport default class SendFeedbackAction extends YTNode {\n  static type = 'SendFeedbackAction';\n  \n  public bucket: string;\n  \n  constructor(data: RawNode) {\n    super();\n    this.bucket = data.bucket;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class SignalAction extends YTNode {\n  static type = 'SignalAction';\n\n  public signal: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.signal = data.signal;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class ChannelSwitcherPage extends YTNode {\n  static type = 'ChannelSwitcherPage';\n\n  header: YTNode;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.contents = Parser.parse(data.contents, true);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport ChannelSwitcherPage from '../ChannelSwitcherPage.js';\n\nexport default class UpdateChannelSwitcherPageAction extends YTNode {\n  static type = 'UpdateChannelSwitcherPageAction';\n\n  public header?: YTNode;\n  public contents?: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    const page = Parser.parseItem(data.page, ChannelSwitcherPage);\n    if (page) {\n      this.header = page.header;\n      this.contents = page.contents;\n    }\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport interface SubMenuItem {\n  title: string;\n  selected: boolean;\n  continuation: string;\n  endpoint: NavigationEndpoint;\n  subtitle: string | null;\n}\n\nexport default class SortFilterSubMenu extends YTNode {\n  static type = 'SortFilterSubMenu';\n\n  public title?: string;\n  public icon_type?: string;\n  public tooltip?: string;\n  public sub_menu_items?: SubMenuItem[];\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    if ('title' in data) {\n      this.title = data.title;\n    }\n\n    if ('icon' in data) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if ('tooltip' in data) {\n      this.tooltip = data.tooltip;\n    }\n\n    if ('subMenuItems' in data) {\n      this.sub_menu_items = data.subMenuItems.map((item: RawNode) => ({\n        title: item.title,\n        selected: item.selected,\n        continuation: item.continuation?.reloadContinuationData?.continuation,\n        endpoint: new NavigationEndpoint(item.serviceEndpoint || item.navigationEndpoint),\n        subtitle: item.subtitle || null\n      }));\n    }\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport SortFilterSubMenu from './SortFilterSubMenu.js';\n\nexport default class TranscriptFooter extends YTNode {\n  static type = 'TranscriptFooter';\n\n  language_menu: SortFilterSubMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.language_menu = Parser.parseItem(data.languageMenu, SortFilterSubMenu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { Text } from '../misc.js';\n\nexport default class TranscriptSearchBox extends YTNode {\n  static type = 'TranscriptSearchBox';\n\n  formatted_placeholder: Text;\n  clear_button: Button | null;\n  endpoint: NavigationEndpoint;\n  search_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.formatted_placeholder = new Text(data.formattedPlaceholder);\n    this.clear_button = Parser.parseItem(data.clearButton, Button);\n    this.endpoint = new NavigationEndpoint(data.onTextChangeCommand);\n    this.search_button = Parser.parseItem(data.searchButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class TranscriptSectionHeader extends YTNode {\n  static type = 'TranscriptSectionHeader';\n\n  start_ms: string;\n  end_ms: string;\n  snippet: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_ms = data.startMs;\n    this.end_ms = data.endMs;\n    this.snippet = new Text(data.snippet);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class TranscriptSegment extends YTNode {\n  static type = 'TranscriptSegment';\n\n  start_ms: string;\n  end_ms: string;\n  snippet: Text;\n  start_time_text: Text;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_ms = data.startMs;\n    this.end_ms = data.endMs;\n    this.snippet = new Text(data.snippet);\n    this.start_time_text = new Text(data.startTimeText);\n    this.target_id = data.targetId;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport { Text } from '../misc.js';\nimport TranscriptSectionHeader from './TranscriptSectionHeader.js';\nimport TranscriptSegment from './TranscriptSegment.js';\n\nexport default class TranscriptSegmentList extends YTNode {\n  static type = 'TranscriptSegmentList';\n\n  initial_segments: ObservedArray<TranscriptSegment | TranscriptSectionHeader>;\n  no_result_label: Text;\n  retry_label: Text;\n  touch_captions_enabled: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.initial_segments = Parser.parseArray(data.initialSegments, [ TranscriptSegment, TranscriptSectionHeader ]);\n    this.no_result_label = new Text(data.noResultLabel);\n    this.retry_label = new Text(data.retryLabel);\n    this.touch_captions_enabled = data.touchCaptionsEnabled;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport TranscriptFooter from './TranscriptFooter.js';\nimport TranscriptSearchBox from './TranscriptSearchBox.js';\nimport TranscriptSegmentList from './TranscriptSegmentList.js';\n\nexport default class TranscriptSearchPanel extends YTNode {\n  static type = 'TranscriptSearchPanel';\n\n  header: TranscriptSearchBox | null;\n  body: TranscriptSegmentList | null;\n  footer: TranscriptFooter | null;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, TranscriptSearchBox);\n    this.body = Parser.parseItem(data.body, TranscriptSegmentList);\n    this.footer = Parser.parseItem(data.footer, TranscriptFooter);\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport TranscriptSearchPanel from './TranscriptSearchPanel.js';\n\nexport default class Transcript extends YTNode {\n  static type = 'Transcript';\n\n  content: TranscriptSearchPanel | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, TranscriptSearchPanel);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Transcript from '../Transcript.js';\n\nexport default class UpdateEngagementPanelAction extends YTNode {\n  static type = 'UpdateEngagementPanelAction';\n\n  target_id: string;\n  content: Transcript | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_id = data.targetId;\n    this.content = Parser.parseItem(data.content, Transcript);\n  }\n}", "import type { RawNode } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\n\nexport default class UpdateSubscribeButtonAction extends YTNode {\n  static type = 'UpdateSubscribeButtonAction';\n\n  public channel_id: string;\n  public subscribed: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.channel_id = data.channelId;\n    this.subscribed = data.subscribed;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ActiveAccountHeader extends YTNode {\n  static type = 'ActiveAccountHeader';\n\n  public account_name: Text;\n  public account_photo: Thumbnail[];\n  public endpoint: NavigationEndpoint;\n  public manage_account_title: Text;\n  public channel_handle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.account_name = new Text(data.accountName);\n    this.account_photo = Thumbnail.fromResponse(data.accountPhoto);\n    this.endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    this.manage_account_title = new Text(data.manageAccountTitle);\n    this.channel_handle = new Text(data.channelHandle);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MenuTitle extends YTNode {\n  static type = 'MenuTitle';\n\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport type { RawNode } from '../index.js';\n\nexport type PrivacyIcon = {\n  icon_type: string | null;\n};\n\nexport default class PlaylistAddToOption extends YTNode {\n  static type = 'PlaylistAddToOption';\n\n  public add_to_playlist_service_endpoint: NavigationEndpoint;\n  public contains_selected_videos: 'ALL' | 'NONE';\n  public playlist_id: string;\n  public privacy: string;\n  public privacy_icon: PrivacyIcon;\n  public remove_from_playlist_service_endpoint: NavigationEndpoint;\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.add_to_playlist_service_endpoint = new NavigationEndpoint(data.addToPlaylistServiceEndpoint);\n    this.contains_selected_videos = data.containsSelectedVideos;\n    this.playlist_id = data.playlistId;\n    this.privacy = data.privacy;\n    this.privacy_icon = { icon_type: data.privacyIcon?.iconType || null };\n    this.remove_from_playlist_service_endpoint = new NavigationEndpoint(data.removeFromPlaylistServiceEndpoint);\n    this.title = new Text(data.title);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport MenuTitle from './MenuTitle.js';\nimport PlaylistAddToOption from './PlaylistAddToOption.js';\n\nexport default class AddToPlaylist extends YTNode {\n  static type = 'AddToPlaylist';\n\n  public actions: ObservedArray<MenuTitle | Button>;\n  public playlists: ObservedArray<PlaylistAddToOption>;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions = Parser.parseArray(data.actions, [ MenuTitle, Button ]);\n    this.playlists = Parser.parseArray(data.playlists, PlaylistAddToOption);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport type AlertType = 'UNKNOWN' | 'WARNING' | 'ERROR' | 'SUCCESS' | 'INFO';\n\nexport default class Alert extends YTNode {\n  static type = 'Alert';\n\n  text: Text;\n  alert_type: AlertType;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.alert_type = data.type;\n  }\n}", "import Button from './Button.js';\nimport Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class AlertWithButton extends YTNode {\n  static type = 'AlertWithButton';\n\n  text: Text;\n  alert_type: string;\n  dismiss_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.alert_type = data.type;\n    this.dismiss_button = Parser.parseItem(data.dismissButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class AnimatedThumbnailOverlayView extends YTNode {\n  static type = 'AnimatedThumbnailOverlayView';\n\n  public thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class AttributionView extends YTNode {\n  static type = 'AttributionView';\n\n  text: Text;\n  suffix: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.text = Text.fromAttributed(data.text);\n    this.suffix = Text.fromAttributed(data.suffix);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AudioOnlyPlayability extends YTNode {\n  static type = 'AudioOnlyPlayability';\n\n  audio_only_availability: string;\n\n  constructor (data: RawNode) {\n    super();\n    this.audio_only_availability = data.audioOnlyAvailability;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AutomixPreviewVideo extends YTNode {\n  static type = 'AutomixPreviewVideo';\n\n  playlist_video?: { endpoint: NavigationEndpoint };\n\n  constructor(data: RawNode) {\n    super();\n    if (data?.content?.automixPlaylistVideoRenderer?.navigationEndpoint) {\n      this.playlist_video = {\n        endpoint: new NavigationEndpoint(data.content.automixPlaylistVideoRenderer.navigationEndpoint)\n      };\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Thumbnail } from '../misc.js';\n\nexport default class AvatarView extends YTNode {\n  static type = 'AvatarView';\n\n  image: Thumbnail[];\n  image_processor: {\n    border_image_processor: {\n      circular: boolean\n    }\n  } | undefined;\n  avatar_image_size: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.avatar_image_size = data.avatarImageSize;\n\n    if (data.image.processor) {\n      this.image_processor = {\n        border_image_processor: {\n          circular: data.image.processor.borderImageProcessor.circular\n        }\n      };\n    }\n  }\n}", "import type { RawNode } from '../../types/index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\n\nexport default class CommandContext {\n  public on_focus?: NavigationEndpoint;\n  public on_hidden?: NavigationEndpoint;\n  public on_touch_end?: NavigationEndpoint;\n  public on_touch_move?: NavigationEndpoint;\n  public on_long_press?: NavigationEndpoint;\n  public on_tap?: NavigationEndpoint;\n  public on_touch_start?: NavigationEndpoint;\n  public on_visible?: NavigationEndpoint;\n  public on_first_visible?: NavigationEndpoint;\n  public on_hover?: NavigationEndpoint;\n  \n  constructor(data: RawNode) {\n    if ('onFocus' in data)\n      this.on_focus = new NavigationEndpoint(data.onFocus);\n    \n    if ('onHidden' in data)\n      this.on_hidden = new NavigationEndpoint(data.onHidden);\n    \n    if ('onTouchEnd' in data)\n      this.on_touch_end = new NavigationEndpoint(data.onTouchEnd);\n    \n    if ('onTouchMove' in data)\n      this.on_touch_move = new NavigationEndpoint(data.onTouchMove);\n    \n    if ('onLongPress' in data)\n      this.on_long_press = new NavigationEndpoint(data.onLongPress);\n    \n    if ('onTap' in data)\n      this.on_tap = new NavigationEndpoint(data.onTap);\n    \n    if ('onTouchStart' in data)\n      this.on_touch_start = new NavigationEndpoint(data.onTouchStart);\n    \n    if ('onVisible' in data)\n      this.on_visible = new NavigationEndpoint(data.onVisible);\n    \n    if ('onFirstVisible' in data)\n      this.on_first_visible = new NavigationEndpoint(data.onFirstVisible);\n    \n    if ('onHover' in data)\n      this.on_hover = new NavigationEndpoint(data.onHover);\n  }\n}", "import type { RawNode } from '../../types/index.js';\nimport CommandContext from './CommandContext.js';\nimport AccessibilityContext from './AccessibilityContext.js';\n\nexport default class RendererContext {\n  public command_context?: CommandContext;\n  public accessibility_context?: AccessibilityContext;\n\n  constructor(data?: RawNode) {\n    if (!data)\n      return;\n\n    if ('commandContext' in data) {\n      this.command_context = new CommandContext(data.commandContext);\n    }\n\n    if ('accessibilityContext' in data) {\n      this.accessibility_context = new AccessibilityContext(data.accessibilityContext);\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\nimport { Parser } from '../index.js';\n\nimport Text from './misc/Text.js';\nimport AvatarView from './AvatarView.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class AvatarStackView extends YTNode {\n  static type = 'AvatarStackView';\n\n  public avatars: ObservedArray<AvatarView>;\n  public text?: Text;\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.avatars = Parser.parseArray(data.avatars, AvatarView);\n\n    if (Reflect.has(data, 'text'))\n      this.text = Text.fromAttributed(data.text);\n    \n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ButtonView extends YTNode {\n  static type = 'ButtonView';\n\n  public secondary_icon_image?: Thumbnail[];\n  public icon_name?: string;\n  public enable_icon_button?: boolean;\n  public tooltip?: string;\n  public icon_image_flip_for_rtl?: boolean;\n  public button_size?: 'BUTTON_VIEW_MODEL_SIZE_UNKNOWN' | 'BUTTON_VIEW_MODEL_SIZE_DEFAULT' | 'BUTTON_VIEW_MODEL_SIZE_COMPACT' | 'BUTTON_VIEW_MODEL_SIZE_XSMALL' | 'BUTTON_VIEW_MODEL_SIZE_LARGE' | 'BUTTON_VIEW_MODEL_SIZE_XLARGE' | 'BUTTON_VIEW_MODEL_SIZE_XXLARGE';\n  public icon_position?: 'BUTTON_VIEW_MODEL_ICON_POSITION_UNKNOWN' | 'BUTTON_VIEW_MODEL_ICON_POSITION_TRAILING' | 'BUTTON_VIEW_MODEL_ICON_POSITION_LEADING' | 'BUTTON_VIEW_MODEL_ICON_POSITION_ABOVE' | 'BUTTON_VIEW_MODEL_ICON_POSITION_LEADING_TRAILING';\n  public is_full_width?: boolean;\n  public state?: 'BUTTON_VIEW_MODEL_STATE_UNKNOWN' | 'BUTTON_VIEW_MODEL_STATE_ACTIVE' | 'BUTTON_VIEW_MODEL_STATE_INACTIVE' | 'BUTTON_VIEW_MODEL_STATE_DISABLED';\n  public on_disabled_tap?: NavigationEndpoint;\n  public custom_border_color?: number;\n  public on_tap?: NavigationEndpoint;\n  public style?: 'BUTTON_VIEW_MODEL_STYLE_UNKNOWN' | 'BUTTON_VIEW_MODEL_STYLE_CTA' | 'BUTTON_VIEW_MODEL_STYLE_BRAND' | 'BUTTON_VIEW_MODEL_STYLE_ADS_CTA' | 'BUTTON_VIEW_MODEL_STYLE_OVERLAY' | 'BUTTON_VIEW_MODEL_STYLE_CTA_THEMED' | 'BUTTON_VIEW_MODEL_STYLE_BLACK_CTA' | 'BUTTON_VIEW_MODEL_STYLE_CUSTOM' | 'BUTTON_VIEW_MODEL_STYLE_MONO' | 'BUTTON_VIEW_MODEL_STYLE_OVERLAY_DARK' | 'BUTTON_VIEW_MODEL_STYLE_CTA_OVERLAY' | 'BUTTON_VIEW_MODEL_STYLE_BRAND_AI' | 'BUTTON_VIEW_MODEL_STYLE_YT_GRADIENT' | 'BUTTON_VIEW_MODEL_STYLE_BRAND_GRADIENT';\n  public icon_image?: object;\n  public custom_dark_theme_border_color?: number;\n  public title?: string;\n  public target_id?: string;\n  public enable_full_width_margins?: boolean;\n  public custom_font_color?: number;\n  public button_type?: 'BUTTON_VIEW_MODEL_TYPE_UNKNOWN' | 'BUTTON_VIEW_MODEL_TYPE_FILLED' | 'BUTTON_VIEW_MODEL_TYPE_OUTLINE' | 'BUTTON_VIEW_MODEL_TYPE_TEXT' | 'BUTTON_VIEW_MODEL_TYPE_TONAL';\n  public enabled?: boolean;\n  public accessibility_id?: string;\n  public custom_background_color?: number;\n  public on_long_press?: NavigationEndpoint;\n  public title_formatted?: object;\n  public on_visible?: object;\n  public icon_trailing?: boolean;\n  public accessibility_text?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if ('secondaryIconImage' in data)\n      this.secondary_icon_image = Thumbnail.fromResponse(data.secondaryIconImage);\n\n    if ('iconName' in data)\n      this.icon_name = data.iconName;\n    \n    if ('enableIconButton' in data)\n      this.enable_icon_button = data.enableIconButton;\n    \n    if ('tooltip' in data)\n      this.tooltip = data.tooltip;\n    \n    if ('iconImageFlipForRtl' in data)\n      this.icon_image_flip_for_rtl = data.iconImageFlipForRtl;\n    \n    if ('buttonSize' in data)\n      this.button_size = data.buttonSize;\n    \n    if ('iconPosition' in data)\n      this.icon_position = data.iconPosition;\n    \n    if ('isFullWidth' in data)\n      this.is_full_width = data.isFullWidth;\n    \n    if ('state' in data)\n      this.state = data.state;\n    \n    if ('onDisabledTap' in data)\n      this.on_disabled_tap = new NavigationEndpoint(data.onDisabledTap);\n    \n    if ('customBorderColor' in data)\n      this.custom_border_color = data.customBorderColor;\n    \n    if ('onTap' in data)\n      this.on_tap = new NavigationEndpoint(data.onTap);\n    \n    if ('style' in data)\n      this.style = data.style;\n    \n    if ('iconImage' in data)\n      this.icon_image = data.iconImage;\n    \n    if ('customDarkThemeBorderColor' in data)\n      this.custom_dark_theme_border_color = data.customDarkThemeBorderColor;\n    \n    if ('title' in data)\n      this.title = data.title;\n    \n    if ('targetId' in data)\n      this.target_id = data.targetId;\n    \n    if ('enableFullWidthMargins' in data)\n      this.enable_full_width_margins = data.enableFullWidthMargins;\n    \n    if ('customFontColor' in data)\n      this.custom_font_color = data.customFontColor;\n    \n    if ('type' in data)\n      this.button_type = data.type;\n    \n    if ('enabled' in data)\n      this.enabled = data.enabled;\n    \n    if ('accessibilityId' in data)\n      this.accessibility_id = data.accessibilityId;\n    \n    if ('customBackgroundColor' in data)\n      this.custom_background_color = data.customBackgroundColor;\n    \n    if ('onLongPress' in data)\n      this.on_long_press = new NavigationEndpoint(data.onLongPress);\n    \n    if ('titleFormatted' in data)\n      this.title_formatted = data.titleFormatted;\n    \n    if ('onVisible' in data)\n      this.on_visible = data.onVisible;\n    \n    if ('iconTrailing' in data)\n      this.icon_trailing = data.iconTrailing;\n    \n    if ('accessibilityText' in data)\n      this.accessibility_text = data.accessibilityText;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class BackgroundPromo extends YTNode {\n  static type = 'BackgroundPromo';\n\n  public body_text?: Text;\n  public cta_button?: Button | ButtonView | null;\n  public icon_type?: string;\n  public title?: Text;\n  \n  constructor(data: RawNode) {\n    super();\n    this.body_text = new Text(data.bodyText);\n    this.cta_button = Parser.parseItem(data.ctaButton, [ Button, ButtonView ]);\n    \n    if (Reflect.has(data, 'icon'))\n      this.icon_type = data.icon.iconType;\n    \n    this.title = new Text(data.title);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class BackstageImage extends YTNode {\n  static type = 'BackstageImage';\n\n  image: Thumbnail[];\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.endpoint = new NavigationEndpoint(data.command);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ToggleButton extends YTNode {\n  static type = 'ToggleButton';\n\n  text: Text;\n  toggled_text: Text;\n  tooltip: string;\n  toggled_tooltip: string;\n  is_toggled: boolean;\n  is_disabled: boolean;\n  icon_type: string;\n  like_count?: number;\n  short_like_count?: string;\n  endpoint: NavigationEndpoint;\n  toggled_endpoint: NavigationEndpoint;\n  button_id?: string;\n  target_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.defaultText);\n    this.toggled_text = new Text(data.toggledText);\n    this.tooltip = data.defaultTooltip;\n    this.toggled_tooltip = data.toggledTooltip;\n    this.is_toggled = data.isToggled;\n    this.is_disabled = data.isDisabled;\n    this.icon_type = data.defaultIcon?.iconType;\n\n    const acc_label =\n      data?.defaultText?.accessibility?.accessibilityData?.label ||\n      data?.accessibilityData?.accessibilityData?.label ||\n      data?.accessibility?.label;\n\n    if (this.icon_type == 'LIKE') {\n      this.like_count = parseInt(acc_label.replace(/\\D/g, ''));\n      this.short_like_count = new Text(data.defaultText).toString();\n    }\n\n    this.endpoint =\n      data.defaultServiceEndpoint?.commandExecutorCommand?.commands ?\n        new NavigationEndpoint(data.defaultServiceEndpoint.commandExecutorCommand.commands.pop()) :\n        new NavigationEndpoint(data.defaultServiceEndpoint);\n\n    this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);\n\n    if (Reflect.has(data, 'toggleButtonSupportedData') && Reflect.has(data.toggleButtonSupportedData, 'toggleButtonIdData')) {\n      this.button_id = data.toggleButtonSupportedData.toggleButtonIdData.id;\n    }\n\n    if (Reflect.has(data, 'targetId')) {\n      this.target_id = data.targetId;\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nexport default class CreatorHeart extends YTNode {\n  static type = 'CreatorHeart';\n\n  creator_thumbnail: Thumbnail[];\n  heart_icon_type?: string;\n  heart_color: {\n    basic_color_palette_data: {\n      foreground_title_color: string;\n    }\n  };\n  hearted_tooltip: string;\n  is_hearted: boolean;\n  is_enabled: boolean;\n  kennedy_heart_color_string: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.creator_thumbnail = Thumbnail.fromResponse(data.creatorThumbnail);\n\n    if (Reflect.has(data, 'heartIcon') && Reflect.has(data.heartIcon, 'iconType')) {\n      this.heart_icon_type = data.heartIcon.iconType;\n    }\n\n    this.heart_color = {\n      basic_color_palette_data: {\n        foreground_title_color: data.heartColor?.basicColorPaletteData?.foregroundTitleColor\n      }\n    };\n\n    this.hearted_tooltip = data.heartedTooltip;\n    this.is_hearted = data.isHearted;\n    this.is_enabled = data.isEnabled;\n    this.kennedy_heart_color_string = data.kennedyHeartColorString;\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport ToggleButton from '../ToggleButton.js';\nimport CreatorHeart from './CreatorHeart.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentActionButtons extends YTNode {\n  static type = 'CommentActionButtons';\n\n  like_button: ToggleButton | null;\n  dislike_button: ToggleButton | null;\n  reply_button: Button | null;\n  creator_heart: CreatorHeart | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButton, ToggleButton);\n    this.dislike_button = Parser.parseItem(data.dislikeButton, ToggleButton);\n    this.reply_button = Parser.parseItem(data.replyButton, Button);\n    this.creator_heart = Parser.parseItem(data.creatorHeart, CreatorHeart);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class ToggleButtonView extends YTNode {\n  static type = 'ToggleButtonView';\n\n  default_button: ButtonView | null;\n  toggled_button: ButtonView | null;\n  is_toggling_disabled: boolean;\n  identifier?: string;\n  is_toggled?: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.default_button = Parser.parseItem(data.defaultButtonViewModel, ButtonView);\n    this.toggled_button = Parser.parseItem(data.toggledButtonViewModel, ButtonView);\n    this.is_toggling_disabled = data.isTogglingDisabled;\n    this.identifier = data.identifier;\n    \n    if (Reflect.has(data, 'isToggled')) {\n      this.is_toggled = data.isToggled;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport default class LikeButtonView extends YTNode {\n  static type = 'LikeButtonView';\n\n  toggle_button: ToggleButtonView | null;\n  like_status_entity_key: string;\n  like_status_entity: {\n    key: string,\n    like_status: string\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.toggle_button = Parser.parseItem(data.toggleButtonViewModel, ToggleButtonView);\n    this.like_status_entity_key = data.likeStatusEntityKey;\n    this.like_status_entity = {\n      key: data.likeStatusEntity.key,\n      like_status: data.likeStatusEntity.likeStatus\n    };\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport default class DislikeButtonView extends YTNode {\n  static type = 'DislikeButtonView';\n\n  toggle_button: ToggleButtonView | null;\n  dislike_entity_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.toggle_button = Parser.parseItem(data.toggleButtonViewModel, ToggleButtonView);\n    this.dislike_entity_key = data.dislikeEntityKey;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport LikeButtonView from './LikeButtonView.js';\nimport DislikeButtonView from './DislikeButtonView.js';\n\nexport default class SegmentedLikeDislikeButtonView extends YTNode {\n  static type = 'SegmentedLikeDislikeButtonView';\n\n  like_button: LikeButtonView | null;\n  dislike_button: DislikeButtonView | null;\n  icon_type: string;\n  like_count_entity: {\n    key: string\n  };\n  dynamic_like_count_update_data: {\n    update_status_key: string,\n    placeholder_like_count_values_key: string,\n    update_delay_loop_id: string,\n    update_delay_sec: number\n  };\n\n  like_count?: number;\n  short_like_count?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButtonViewModel, LikeButtonView);\n    this.dislike_button = Parser.parseItem(data.dislikeButtonViewModel, DislikeButtonView);\n    this.icon_type = data.iconType;\n\n    if (this.like_button && this.like_button.toggle_button) {\n      const toggle_button = this.like_button.toggle_button;\n\n      if (toggle_button.default_button) {\n        this.short_like_count = toggle_button.default_button.title;\n\n        if (toggle_button.default_button.accessibility_text)\n          this.like_count = parseInt(toggle_button.default_button.accessibility_text.replace(/\\D/g, ''));\n      } else if (toggle_button.toggled_button) {\n        this.short_like_count = toggle_button.toggled_button.title;\n        if (toggle_button.toggled_button.accessibility_text)\n          this.like_count = parseInt(toggle_button.toggled_button.accessibility_text.replace(/\\D/g, ''));\n      }\n    }\n\n    this.like_count_entity = {\n      key: data.likeCountEntity.key\n    };\n\n    this.dynamic_like_count_update_data = {\n      update_status_key: data.dynamicLikeCountUpdateData.updateStatusKey,\n      placeholder_like_count_values_key: data.dynamicLikeCountUpdateData.placeholderLikeCountValuesKey,\n      update_delay_loop_id: data.dynamicLikeCountUpdateData.updateDelayLoopId,\n      update_delay_sec: data.dynamicLikeCountUpdateData.updateDelaySec\n    };\n  }\n}", "import Button from '../Button.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MenuServiceItem extends Button {\n  static type = 'MenuServiceItem';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class DownloadButton extends YTNode {\n  static type = 'DownloadButton';\n\n  style: string;\n  size: string; // TODO: check this\n  endpoint: NavigationEndpoint;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.style = data.style;\n    this.size = data.size;\n    this.endpoint = new NavigationEndpoint(data.command);\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\n\nexport default class MenuServiceItemDownload extends YTNode {\n  static type = 'MenuServiceItemDownload';\n\n  has_separator: boolean;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.has_separator = !!data.hasSeparator;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);\n  }\n}", "import type { RawNode } from '../types/RawResponse.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\ninterface ButtonContent {\n  button_text: string;\n  accessibility_text: string;\n  image_name: string;\n  subscribe_state_subscribed: boolean;\n  endpoint: NavigationEndpoint;\n}\n\ninterface BellAccessibilityData {\n  off_label?: string;\n  all_label?: string;\n  occasional_label?: string;\n  disabled_label?: string;\n}\n\ninterface ButtonStyle {\n  unsubscribed_state_style?: string;\n  subscribed_state_style?: string;\n}\n\nexport default class SubscribeButtonView extends YTNode {\n  static type = 'SubscribeButtonView';\n\n  public subscribe_button_content: ButtonContent;\n  public unsubscribe_button_content: ButtonContent;\n  public disable_notification_bell: boolean;\n  public button_style?: ButtonStyle;\n  public is_signed_out: boolean;\n  public background_style: string;\n  public disable_subscribe_button: boolean;\n  public on_show_subscription_options?: NavigationEndpoint;\n  public channel_id: string;\n  public enable_subscribe_button_post_click_animation: boolean;\n  public bell_accessibility_data?: BellAccessibilityData;\n\n  constructor(data: RawNode) {\n    super();\n    this.subscribe_button_content = this.#parseButtonContent(data.subscribeButtonContent);\n    this.unsubscribe_button_content = this.#parseButtonContent(data.unsubscribeButtonContent);\n    this.disable_notification_bell = data.disableNotificationBell;\n\n    if ('buttonStyle' in data) {\n      this.button_style = {\n        unsubscribed_state_style: data.buttonStyle?.unsubscribedStateStyle,\n        subscribed_state_style: data.buttonStyle?.subscribedStateStyle\n      };\n    }\n\n    this.is_signed_out = data.isSignedOut;\n    this.background_style = data.backgroundStyle;\n    this.disable_subscribe_button = data.disableSubscribeButton;\n\n    if ('onShowSubscriptionOptions' in data) {\n      this.on_show_subscription_options = new NavigationEndpoint(data.onShowSubscriptionOptions);\n    }\n\n    this.channel_id = data.channelId;\n    this.enable_subscribe_button_post_click_animation = data.enableSubscribeButtonPostClickAnimation;\n\n    if ('bellAccessibilityData' in data) {\n      this.bell_accessibility_data = {\n        off_label: data.bellAccessibilityData?.offLabel,\n        all_label: data.bellAccessibilityData?.allLabel,\n        occasional_label: data.bellAccessibilityData?.occasionalLabel,\n        disabled_label: data.bellAccessibilityData?.disabledLabel\n      };\n    }\n  }\n\n  #parseButtonContent(data: RawNode): ButtonContent {\n    return {\n      button_text: data.buttonText,\n      accessibility_text: data.accessibilityText,\n      image_name: data.imageName,\n      subscribe_state_subscribed: data.subscribeState.subscribed,\n      endpoint: new NavigationEndpoint(data.onTapCommand)\n    };\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../types/RawResponse.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser } from '../index.js';\n\nimport AvatarView from './AvatarView.js';\nimport RendererContext from './misc/RendererContext.js';\nimport SubscribeButtonView from './SubscribeButtonView.js';\nimport Text from './misc/Text.js';\n\nexport default class ListItemView extends YTNode {\n  static type = 'ListItemView';\n\n  public title?: Text;\n  public subtitle?: Text;\n  public leading_accessory: AvatarView | null;\n  public renderer_context?: RendererContext;\n  public trailing_buttons: ObservedArray<SubscribeButtonView>;\n\n  constructor(data: RawNode) {\n    super();\n    if ('title' in data) {\n      this.title = Text.fromAttributed(data.title);\n    }\n\n    if ('subtitle' in data) {\n      this.subtitle = Text.fromAttributed(data.subtitle);\n    }\n\n    this.leading_accessory = Parser.parseItem(data.leadingAccessory, AvatarView);\n\n    if ('rendererContext' in data) {\n      this.renderer_context = new RendererContext(data.rendererContext);\n    }\n\n    this.trailing_buttons = Parser.parseArray(data.trailingButtons?.buttons, SubscribeButtonView);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nimport Button from '../Button.js';\nimport ButtonView from '../ButtonView.js';\nimport MenuServiceItem from './MenuServiceItem.js';\nimport DownloadButton from '../DownloadButton.js';\nimport MenuServiceItemDownload from './MenuServiceItemDownload.js';\nimport ListItemView from '../ListItemView.js';\n\nexport default class MenuFlexibleItem extends YTNode {\n  static type = 'MenuFlexibleItem';\n\n  public menu_item: ListItemView | MenuServiceItem | MenuServiceItemDownload | null;\n  public top_level_button: DownloadButton | ButtonView | Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.menu_item = Parser.parseItem(data.menuItem, [ ListItemView, MenuServiceItem, MenuServiceItemDownload ]);\n    this.top_level_button = Parser.parseItem(data.topLevelButton, [ DownloadButton, ButtonView, Button ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class LikeButton extends YTNode {\n  static type = 'LikeButton';\n\n  target: {\n    video_id: string;\n  };\n\n  like_status: string;\n  likes_allowed: string;\n  endpoints?: NavigationEndpoint[];\n\n  constructor(data: RawNode) {\n    super();\n\n    this.target = {\n      video_id: data.target.videoId\n    };\n\n    this.like_status = data.likeStatus;\n    this.likes_allowed = data.likesAllowed;\n\n    if (Reflect.has(data, 'serviceEndpoints')) {\n      this.endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\nimport ToggleButtonView from './ToggleButtonView.js';\nimport SubscribeButtonView from './SubscribeButtonView.js';\n\nexport type ActionRow = {\n  actions: ObservedArray<ButtonView | ToggleButtonView | SubscribeButtonView>;\n};\n\nexport default class FlexibleActionsView extends YTNode {\n  static type = 'FlexibleActionsView';\n\n  actions_rows: ActionRow[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions_rows = data.actionsRows.map((row: RawNode) => ({\n      actions: Parser.parseArray(row.actions, [ ButtonView, ToggleButtonView, SubscribeButtonView ])\n    }));\n    this.style = data.style;\n  }\n}\n", "import { Parser } from '../../index.js';\nimport type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport Button from '../Button.js';\nimport ButtonView from '../ButtonView.js';\nimport SegmentedLikeDislikeButtonView from '../SegmentedLikeDislikeButtonView.js';\nimport MenuFlexibleItem from './MenuFlexibleItem.js';\nimport LikeButton from '../LikeButton.js';\nimport ToggleButton from '../ToggleButton.js';\nimport FlexibleActionsView from '../FlexibleActionsView.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from '../misc/AccessibilityData.js';\n\nexport default class Menu extends YTNode {\n  static type = 'Menu';\n\n  public items: ObservedArray<YTNode>;\n  public flexible_items: ObservedArray<MenuFlexibleItem>;\n  public top_level_buttons: ObservedArray<ToggleButton | LikeButton | Button |ButtonView | SegmentedLikeDislikeButtonView | FlexibleActionsView>;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.flexible_items = Parser.parseArray(data.flexibleItems, MenuFlexibleItem);\n    this.top_level_buttons = Parser.parseArray(data.topLevelButtons, [ ToggleButton, LikeButton, Button, ButtonView, SegmentedLikeDislikeButtonView, FlexibleActionsView ]);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n\n  // XXX: alias for consistency\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport CommentActionButtons from './comments/CommentActionButtons.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class BackstagePost extends YTNode {\n  static type = 'BackstagePost';\n\n  id: string;\n  author: Author;\n  content: Text;\n  published: Text;\n  poll_status?: string;\n  vote_status?: string;\n  vote_count?: Text;\n  menu?: Menu | null;\n  action_buttons?: CommentActionButtons | null;\n  vote_button?: Button | null;\n  surface: string;\n  endpoint?: NavigationEndpoint;\n  attachment;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.postId;\n\n    this.author = new Author({\n      ...data.authorText,\n      navigationEndpoint: data.authorEndpoint\n    }, null, data.authorThumbnail);\n\n    this.content = new Text(data.contentText);\n    this.published = new Text(data.publishedTimeText);\n\n    if (Reflect.has(data, 'pollStatus')) {\n      this.poll_status = data.pollStatus;\n    }\n\n    if (Reflect.has(data, 'voteStatus')) {\n      this.vote_status = data.voteStatus;\n    }\n\n    if (Reflect.has(data, 'voteCount')) {\n      this.vote_count = new Text(data.voteCount);\n    }\n\n    if (Reflect.has(data, 'actionMenu')) {\n      this.menu = Parser.parseItem(data.actionMenu, Menu);\n    }\n\n    if (Reflect.has(data, 'actionButtons')) {\n      this.action_buttons = Parser.parseItem(data.actionButtons, CommentActionButtons);\n    }\n\n    if (Reflect.has(data, 'voteButton')) {\n      this.vote_button = Parser.parseItem(data.voteButton, Button);\n    }\n\n    if (Reflect.has(data, 'navigationEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n\n    if (Reflect.has(data, 'backstageAttachment')) {\n      this.attachment = Parser.parseItem(data.backstageAttachment);\n    }\n\n    this.surface = data.surface;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class BackstagePostThread extends YTNode {\n  static type = 'BackstagePostThread';\n\n  post: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.post = Parser.parseItem(data.post);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\n\nexport default class BadgeView extends YTNode {\n  text: string;\n  style: string;\n  accessibility_label: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.text = data.badgeText;\n    this.style = data.badgeStyle;\n    this.accessibility_label = data.accessibilityLabel;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SubFeedOption extends YTNode {\n  static type = 'SubFeedOption';\n\n  name: Text;\n  is_selected: boolean;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.name = new Text(data.name);\n    this.is_selected = data.isSelected;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport SubFeedOption from './SubFeedOption.js';\n\nexport default class SubFeedSelector extends YTNode {\n  static type = 'SubFeedSelector';\n\n  title: Text;\n  options: ObservedArray<SubFeedOption>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.options = Parser.parseArray(data.options, SubFeedOption);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class EomSettingsDisclaimer extends YTNode {\n  static type = 'EomSettingsDisclaimer';\n\n  disclaimer: Text;\n  info_icon: {\n    icon_type: string\n  };\n  usage_scenario: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.disclaimer = new Text(data.disclaimer);\n    this.info_icon = {\n      icon_type: data.infoIcon.iconType\n    };\n    this.usage_scenario = data.usageScenario;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SearchBox extends YTNode {\n  static type = 'SearchBox';\n\n  endpoint: NavigationEndpoint;\n  search_button: Button | null;\n  clear_button: Button | null;\n  placeholder_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.search_button = Parser.parseItem(data.searchButton, Button);\n    this.clear_button = Parser.parseItem(data.clearButton, Button);\n    this.placeholder_text = new Text(data.placeholderText);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport SubFeedSelector from './SubFeedSelector.js';\nimport EomSettingsDisclaimer from './EomSettingsDisclaimer.js';\nimport ToggleButton from './ToggleButton.js';\nimport CompactLink from './CompactLink.js';\nimport SearchBox from './SearchBox.js';\nimport Button from './Button.js';\n\nexport default class BrowseFeedActions extends YTNode {\n  static type = 'BrowseFeedActions';\n\n  public contents: ObservedArray<SubFeedSelector | EomSettingsDisclaimer | ToggleButton | CompactLink | SearchBox | Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ SubFeedSelector, EomSettingsDisclaimer, ToggleButton, CompactLink, SearchBox, Button ]);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class BrowserMediaSession extends YTNode {\n  static type = 'BrowserMediaSession';\n\n  album: Text;\n  thumbnails: Thumbnail[];\n\n  constructor (data: RawNode) {\n    super();\n    this.album = new Text(data.album);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnailDetails);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class ButtonCardView extends YTNode {\n  static type = 'ButtonCardView';\n\n  public title: string;\n  public icon_name: string;\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.icon_name = data.image.sources[0].clientResource.imageName;\n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}\n", "import { YTNode, observe, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\n// XXX (LuanRT): This is not a real YTNode, but we treat it as one to keep things clean.\nexport class HeaderLink extends YTNode {\n  static type = 'HeaderLink';\n\n  endpoint: NavigationEndpoint;\n  icon: Thumbnail[];\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.icon = Thumbnail.fromResponse(data.icon);\n    this.title = new Text(data.title);\n  }\n}\n\nexport default class ChannelHeaderLinks extends YTNode {\n  static type = 'ChannelHeaderLinks';\n\n  primary: ObservedArray<HeaderLink>;\n  secondary: ObservedArray<HeaderLink>;\n\n  constructor(data: RawNode) {\n    super();\n    this.primary = observe(data.primaryLinks?.map((link: RawNode) => new HeaderLink(link)) || []);\n    this.secondary = observe(data.secondaryLinks?.map((link: RawNode) => new HeaderLink(link)) || []);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ChannelHeaderLinksView extends YTNode {\n  static type = 'ChannelHeaderLinksView';\n\n  first_link?: Text;\n  more?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'firstLink')) {\n      this.first_link = Text.fromAttributed(data.firstLink);\n    }\n\n    if (Reflect.has(data, 'more')) {\n      this.more = Text.fromAttributed(data.more);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipCreationTextInput extends YTNode {\n  static type = 'ClipCreationTextInput';\n\n  placeholder_text: Text;\n  max_character_limit: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.placeholder_text = new Text(data.placeholderText);\n    this.max_character_limit = data.maxCharacterLimit;\n  }\n}", "import { YTNode } from '../helpers.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipCreationScrubber extends YTNode {\n  static type = 'ClipCreationScrubber';\n\n  length_template: string;\n  max_length_ms: number;\n  min_length_ms: number;\n  default_length_ms: number;\n  window_size_ms: number;\n  start_label?: string;\n  end_label?: string;\n  duration_label?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.length_template = data.lengthTemplate;\n    this.max_length_ms = data.maxLengthMs;\n    this.min_length_ms = data.minLengthMs;\n    this.default_length_ms = data.defaultLengthMs;\n    this.window_size_ms = data.windowSizeMs;\n    this.start_label = data.startAccessibility?.accessibilityData?.label;\n    this.end_label = data.endAccessibility?.accessibilityData?.label;\n    this.duration_label = data.durationAccessibility?.accessibilityData?.label;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipAdState extends YTNode {\n  static type = 'ClipAdState';\n\n  title: Text;\n  body: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.body = new Text(data.body);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Button from './Button.js';\nimport ClipCreationTextInput from './ClipCreationTextInput.js';\nimport ClipCreationScrubber from './ClipCreationScrubber.js';\nimport ClipAdState from './ClipAdState.js';\nimport Text from './misc/Text.js';\n\nimport { Parser } from '../index.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipCreation extends YTNode {\n  static type = 'ClipCreation';\n\n  user_avatar: Thumbnail[];\n  title_input: ClipCreationTextInput | null;\n  scrubber: ClipCreationScrubber | null;\n  save_button: Button | null;\n  display_name: Text;\n  publicity_label: string;\n  cancel_button: Button | null;\n  ad_state_overlay: ClipAdState | null;\n  external_video_id: string;\n  publicity_label_icon: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.user_avatar = Thumbnail.fromResponse(data.userAvatar);\n    this.title_input = Parser.parseItem(data.titleInput, [ ClipCreationTextInput ]);\n    this.scrubber = Parser.parseItem(data.scrubber, [ ClipCreationScrubber ]);\n    this.save_button = Parser.parseItem(data.saveButton, [ Button ]);\n    this.display_name = new Text(data.displayName);\n    this.publicity_label = data.publicityLabel;\n    this.cancel_button = Parser.parseItem(data.cancelButton, [ Button ]);\n    this.ad_state_overlay = Parser.parseItem(data.adStateOverlay, [ ClipAdState ]);\n    this.external_video_id = data.externalVideoId;\n    this.publicity_label_icon = data.publicityLabelIcon;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\n\nimport ClipCreation from './ClipCreation.js';\n\nimport { Parser } from '../index.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipSection extends YTNode {\n  static type = 'ClipSection';\n\n  contents: ObservedArray<ClipCreation> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data.contents, true, [ ClipCreation ]);\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ContinuationItem extends YTNode {\n  static type = 'ContinuationItem';\n\n  trigger: string;\n  button?: Button | null;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.trigger = data.trigger;\n\n    if (Reflect.has(data, 'button')) {\n      this.button = Parser.parseItem(data.button, Button);\n    }\n\n    this.endpoint = new NavigationEndpoint(data.continuationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\n\nexport default class EngagementPanelTitleHeader extends YTNode {\n  static type = 'EngagementPanelTitleHeader';\n\n  public title: Text;\n  public visibility_button: Button | null;\n  public contextual_info?: Text;\n  public menu: YTNode | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contextual_info = data.contextualInfo ? new Text(data.contextualInfo) : undefined;\n    this.visibility_button = Parser.parseItem(data.visibilityButton, Button);\n    this.menu = Parser.parseItem(data.menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\nexport default class MacroMarkersInfoItem extends YTNode {\n  static type = 'MacroMarkersInfoItem';\n\n  info_text: Text;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.info_text = new Text(data.infoText);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MacroMarkersListItem extends YTNode {\n  static type = 'MacroMarkersListItem';\n\n  title: Text;\n  time_description: Text;\n  thumbnail: Thumbnail[];\n  on_tap_endpoint: NavigationEndpoint;\n  layout: string;\n  is_highlighted: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.time_description = new Text(data.timeDescription);\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n    this.layout = data.layout;\n    this.is_highlighted = !!data.isHighlighted;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport MacroMarkersInfoItem from './MacroMarkersInfoItem.js';\nimport MacroMarkersListItem from './MacroMarkersListItem.js';\n\nexport default class MacroMarkersList extends YTNode {\n  static type = 'MacroMarkersList';\n\n  contents: ObservedArray<MacroMarkersInfoItem | MacroMarkersListItem>;\n  sync_button_label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ MacroMarkersInfoItem, MacroMarkersListItem ]);\n    this.sync_button_label = new Text(data.syncButtonLabel);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\n\nexport default class ProductList extends YTNode {\n  static type = 'ProductList';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class SectionList extends YTNode {\n  static type = 'SectionList';\n\n  contents: ObservedArray<YTNode>;\n  target_id?: string;\n  continuation?: string;\n  header?: YTNode;\n  sub_menu?: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n\n    if (Reflect.has(data, 'targetId')) {\n      this.target_id = data.targetId;\n    }\n\n    if (Reflect.has(data, 'continuations')) {\n      if (Reflect.has(data.continuations[0], 'nextContinuationData')) {\n        this.continuation = data.continuations[0].nextContinuationData.continuation;\n      } else if (Reflect.has(data.continuations[0], 'reloadContinuationData')) {\n        this.continuation = data.continuations[0].reloadContinuationData.continuation;\n      }\n    }\n\n    if (Reflect.has(data, 'header')) {\n      this.header = Parser.parseItem(data.header);\n    }\n\n    if (Reflect.has(data, 'subMenu')) {\n      this.sub_menu = Parser.parseItem(data.subMenu);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nimport type { RawNode } from '../index.js';\n\nexport default class ExpandableVideoDescriptionBody extends YTNode {\n  static type = 'ExpandableVideoDescriptionBody';\n\n  show_more_text: Text;\n  show_less_text: Text;\n  attributed_description_body_text?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.show_more_text = new Text(data.showMoreText);\n    this.show_less_text = new Text(data.showLessText);\n    if (Reflect.has(data, 'attributedDescriptionBodyText')) {\n      this.attributed_description_body_text = Text.fromAttributed(data.attributedDescriptionBodyText);\n    }\n  }\n}\n", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SearchRefinementCard extends YTNode {\n  static type = 'SearchRefinementCard';\n\n  thumbnails: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  query: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.searchEndpoint);\n    this.query = new Text(data.query).toString();\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class GameCard extends YTNode {\n  static type = 'GameCard';\n\n  game: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.game = Parser.parseItem(data.game);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class HorizontalList extends YTNode {\n  static type = 'HorizontalList';\n\n  visible_item_count: string;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.visible_item_count = data.visibleItemCount;\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class VideoSummaryParagraphView extends YTNode {\n  static type = 'VideoSummaryParagraphView';\n\n  public text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = Text.fromAttributed(data.text);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DislikeButtonView from './DislikeButtonView.js';\nimport LikeButtonView from './LikeButtonView.js';\nimport VideoSummaryParagraphView from './VideoSummaryParagraphView.js';\n\nexport default class VideoSummaryContentView extends YTNode {\n  static type = 'VideoSummaryContentView';\n\n  public dislike_button_view?: DislikeButtonView | null;\n  public like_button_view?: LikeButtonView | null;\n  public paragraphs: ObservedArray<VideoSummaryParagraphView>;\n\n  constructor(data: RawNode) {\n    super();\n\n    if ('dislikeButtonViewModel' in data) {\n      this.dislike_button_view = Parser.parseItem(data.dislikeButtonViewModel, DislikeButtonView);\n    }\n\n    if ('likeButtonViewModel' in data) {\n      this.like_button_view = Parser.parseItem(data.likeButtonViewModel, LikeButtonView);\n    }\n\n    this.paragraphs = Parser.parseArray(data.paragraphs, VideoSummaryParagraphView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport HorizontalCardList from './HorizontalCardList.js';\nimport HorizontalList from './HorizontalList.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport VideoSummaryContentView from './VideoSummaryContentView.js';\n\nexport default class ExpandableMetadata extends YTNode {\n  static type = 'ExpandableMetadata';\n\n  header?: {\n    collapsed_title: Text;\n    collapsed_thumbnail: Thumbnail[];\n    collapsed_label: Text;\n    expanded_title: Text;\n  };\n\n  expanded_content: VideoSummaryContentView | HorizontalCardList | HorizontalList | null;\n  expand_button: Button | null;\n  collapse_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'header')) {\n      this.header = {\n        collapsed_title: new Text(data.header.collapsedTitle),\n        collapsed_thumbnail: Thumbnail.fromResponse(data.header.collapsedThumbnail),\n        collapsed_label: new Text(data.header.collapsedLabel),\n        expanded_title: new Text(data.header.expandedTitle)\n      };\n    }\n\n    this.expanded_content = Parser.parseItem(data.expandedContent, [ VideoSummaryContentView, HorizontalCardList, HorizontalList ]);\n    this.expand_button = Parser.parseItem(data.expandButton, Button);\n    this.collapse_button = Parser.parseItem(data.collapseButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MetadataBadge extends YTNode {\n  static type = 'MetadataBadge';\n\n  icon_type?: string;\n  style?: string;\n  label?: string;\n  tooltip?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'style')) {\n      this.style = data.style;\n    }\n\n    if (Reflect.has(data, 'label')) {\n      this.label = data.label;\n    }\n\n    if (Reflect.has(data, 'tooltip') || Reflect.has(data, 'iconTooltip')) {\n      this.tooltip = data.tooltip || data.iconTooltip;\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayTimeStatus extends YTNode {\n  static type = 'ThumbnailOverlayTimeStatus';\n\n  text: string;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n    this.style = data.style;\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ExpandableMetadata from './ExpandableMetadata.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ThumbnailOverlayTimeStatus from './ThumbnailOverlayTimeStatus.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Video extends YTNode {\n  static type = 'Video';\n\n  public video_id: string;\n  public title: Text;\n  public untranslated_title?: Text;\n  public description_snippet?: Text;\n  public snippets?: { text: Text; hover_text: Text; }[];\n  public expandable_metadata: ExpandableMetadata | null;\n  public additional_metadatas?: Text[];\n  public thumbnails: Thumbnail[];\n  public thumbnail_overlays: ObservedArray<YTNode>;\n  public rich_thumbnail?: YTNode;\n  public author: Author;\n  public badges: ObservedArray<MetadataBadge>;\n  public endpoint?: NavigationEndpoint;\n  public published?: Text;\n  public view_count?: Text;\n  public short_view_count?: Text;\n  public upcoming?: Date;\n  public length_text?: Text;\n  public show_action_menu: boolean;\n  public is_watched: boolean;\n  public menu: Menu | null;\n  public byline_text?: Text;\n  public search_video_result_entity_key?: string;\n  public service_endpoints?: NavigationEndpoint[];\n  public service_endpoint?: NavigationEndpoint;\n  public style?: 'VIDEO_STYLE_TYPE_UNKNOWN' | 'VIDEO_STYLE_TYPE_NORMAL' | 'VIDEO_STYLE_TYPE_POST' | 'VIDEO_STYLE_TYPE_SUB' | 'VIDEO_STYLE_TYPE_LIVE_POST' | 'VIDEO_STYLE_TYPE_FULL_BLEED_ISOLATED' | 'VIDEO_STYLE_TYPE_WITH_EXPANDED_METADATA';\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.video_id = data.videoId;\n    this.expandable_metadata = Parser.parseItem(data.expandableMetadata, ExpandableMetadata);\n\n    if ('untranslatedTitle' in data)\n      this.untranslated_title = new Text(data.untranslatedTitle);\n\n    if ('descriptionSnippet' in data)\n      this.description_snippet = new Text(data.descriptionSnippet);\n\n    if ('detailedMetadataSnippets' in data) {\n      this.snippets = data.detailedMetadataSnippets.map((snippet: RawNode) => ({\n        text: new Text(snippet.snippetText),\n        hover_text: new Text(snippet.snippetHoverText)\n      }));\n    }\n\n    if ('additionalMetadatas' in data)\n      this.additional_metadatas = data.additionalMetadatas.map((meta: RawNode) => new Text(meta));\n\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n\n    if ('richThumbnail' in data)\n      this.rich_thumbnail = Parser.parseItem(data.richThumbnail);\n\n    this.author = new Author(data.ownerText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n\n    if ('navigationEndpoint' in data)\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('publishedTimeText' in data)\n      this.published = new Text(data.publishedTimeText);\n\n    if ('viewCountText' in data)\n      this.view_count = new Text(data.viewCountText);\n\n    if ('shortViewCountText' in data)\n      this.short_view_count = new Text(data.shortViewCountText);\n\n    if ('upcomingEventData' in data)\n      this.upcoming = new Date(Number(`${data.upcomingEventData.startTime}000`));\n\n    this.show_action_menu = !!data.showActionMenu;\n    this.is_watched = !!data.isWatched;\n    this.menu = Parser.parseItem(data.menu, Menu);\n\n    if ('searchVideoResultEntityKey' in data)\n      this.search_video_result_entity_key = data.searchVideoResultEntityKey;\n\n    if ('bylineText' in data)\n      this.byline_text = new Text(data.bylineText);\n\n    if ('lengthText' in data)\n      this.length_text = new Text(data.lengthText);\n\n    if ('serviceEndpoints' in data)\n      this.service_endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if ('serviceEndpoint' in data)\n      this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    \n    if ('style' in data)\n      this.style = data.style;\n  }\n\n  /**\n   * @deprecated Use {@linkcode video_id} instead.\n   */\n  get id(): string {\n    return this.video_id;\n  }\n\n  get description(): string {\n    if (this.snippets)\n      return this.snippets.map((snip) => snip.text.toString()).join('');\n    return this.description_snippet?.toString() || '';\n  }\n\n  get is_live(): boolean {\n    return this.badges.some((badge) => {\n      if (badge.style === 'BADGE_STYLE_TYPE_LIVE_NOW' || badge.label === 'LIVE')\n        return true;\n    }) || this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === 'LIVE';\n  }\n\n  get is_upcoming(): boolean | undefined {\n    return this.upcoming && this.upcoming > new Date();\n  }\n\n  get is_premiere(): boolean {\n    return this.badges.some((badge) => badge.label === 'PREMIERE');\n  }\n\n  get is_4k(): boolean {\n    return this.badges.some((badge) => badge.label === '4K');\n  }\n\n  get has_captions(): boolean {\n    return this.badges.some((badge) => badge.label === 'CC');\n  }\n\n  get best_thumbnail(): Thumbnail | undefined {\n    return this.thumbnails[0];\n  }\n\n  get duration() {\n    const overlay_time_status = this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus);\n    const length_text = this.length_text?.toString() || overlay_time_status?.text.toString();\n    return {\n      text: length_text,\n      seconds: length_text ? timeToSeconds(length_text) : 0\n    };\n  }\n}\n", "import type { RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Video from './Video.js';\n\nexport default class VideoCard extends Video {\n  static type = 'VideoCard';\n  \n  public metadata_text?: Text;\n\n  constructor(data: RawNode) {\n    super(data);\n    if (Reflect.has(data, 'metadataText')) {\n      this.metadata_text = new Text(data.metadataText);\n      if (this.metadata_text.text) {\n        this.short_view_count = new Text({ simpleText: this.metadata_text.text.split('\u00B7')[0]?.trim() } as RawNode);\n        this.published = new Text({ simpleText: this.metadata_text.text.split('\u00B7')[1]?.trim() } as RawNode);\n      }\n    }\n    \n    if (Reflect.has(data, 'bylineText')) {\n      this.author = new Author(data.bylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ContentPreviewImageView extends YTNode {\n  static type = 'ContentPreviewImageView';\n\n  image: Thumbnail[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nimport ContentPreviewImageView from './ContentPreviewImageView.js';\nimport { Parser } from '../index.js';\n\nimport type { RawNode } from '../types/index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class VideoAttributeView extends YTNode {\n  static type = 'VideoAttributeView';\n\n  image: ContentPreviewImageView | Thumbnail[] | null;\n  image_style: string;\n  title: string;\n  subtitle: string;\n  secondary_subtitle?: {\n    content: string\n  };\n  orientation: string;\n  sizing_rule: string;\n  overflow_menu_on_tap: NavigationEndpoint;\n  overflow_menu_a11y_label: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (data.image?.sources) {\n      this.image = Thumbnail.fromResponse(data.image);\n    } else {\n      this.image = Parser.parseItem(data.image, ContentPreviewImageView);\n    }\n\n    this.image_style = data.imageStyle;\n    this.title = data.title;\n    this.subtitle = data.subtitle;\n\n    if (Reflect.has(data, 'secondarySubtitle')) {\n      this.secondary_subtitle = {\n        content: data.secondarySubtitle.content\n      };\n    }\n\n    this.orientation = data.orientation;\n    this.sizing_rule = data.sizingRule;\n    this.overflow_menu_on_tap = new NavigationEndpoint(data.overflowMenuOnTap);\n    this.overflow_menu_a11y_label = data.overflowMenuA11yLabel;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport SearchRefinementCard from './SearchRefinementCard.js';\nimport Button from './Button.js';\nimport MacroMarkersListItem from './MacroMarkersListItem.js';\nimport GameCard from './GameCard.js';\nimport VideoCard from './VideoCard.js';\nimport VideoAttributeView from './VideoAttributeView.js';\n\nexport default class HorizontalCardList extends YTNode {\n  static type = 'HorizontalCardList';\n\n  cards: ObservedArray<VideoAttributeView | SearchRefinementCard | MacroMarkersListItem | GameCard | VideoCard>;\n  header: YTNode;\n  previous_button: Button | null;\n  next_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.cards = Parser.parseArray(data.cards, [ VideoAttributeView, SearchRefinementCard, MacroMarkersListItem, GameCard, VideoCard ]);\n    this.header = Parser.parseItem(data.header);\n    this.previous_button = Parser.parseItem(data.previousButton, Button);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class Factoid extends YTNode {\n  static type = 'Factoid';\n\n  label: Text;\n  value: Text;\n  accessibility_text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.value = new Text(data.value);\n    this.accessibility_text = data.accessibilityText;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Factoid from './Factoid.js';\n\nexport default class UploadTimeFactoid extends YTNode {\n  static type = 'UploadTimeFactoid';\n\n  factoid: Factoid | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.factoid = Parser.parseItem(data.factoid, Factoid);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Factoid from './Factoid.js';\n\nexport default class ViewCountFactoid extends YTNode {\n  static type = 'ViewCountFactoid';\n\n  view_count_entity_key: string;\n  factoid: Factoid | null;\n  view_count_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.view_count_entity_key = data.viewCountEntityKey;\n    this.factoid = Parser.parseItem(data.factoid, [ Factoid ]);\n    this.view_count_type = data.viewCountType;\n  }\n}\n", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Factoid from './Factoid.js';\n\nexport default class HypePointsFactoid extends YTNode {\n  static type = 'HypePointsFactoid';\n\n  public factoid: Factoid | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.factoid = Parser.parseItem(data.factoid, Factoid);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text, Thumbnail } from '../misc.js';\nimport Factoid from './Factoid.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport UploadTimeFactoid from './UploadTimeFactoid.js';\nimport ViewCountFactoid from './ViewCountFactoid.js';\nimport HypePointsFactoid from './HypePointsFactoid.js';\n\nexport default class VideoDescriptionHeader extends YTNode {\n  static type = 'VideoDescriptionHeader';\n\n  channel: Text;\n  channel_navigation_endpoint?: NavigationEndpoint;\n  channel_thumbnail: Thumbnail[];\n  factoids: ObservedArray<HypePointsFactoid | Factoid | ViewCountFactoid | UploadTimeFactoid>;\n  publish_date: Text;\n  title: Text;\n  views: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.channel = new Text(data.channel);\n    this.channel_navigation_endpoint = new NavigationEndpoint(data.channelNavigationEndpoint);\n    this.channel_thumbnail = Thumbnail.fromResponse(data.channelThumbnail);\n    this.publish_date = new Text(data.publishDate);\n    this.views = new Text(data.views);\n    this.factoids = Parser.parseArray(data.factoid, [ Factoid, HypePointsFactoid, ViewCountFactoid, UploadTimeFactoid ]);\n  }\n}\n", "import { Parser, type RawNode } from '../index.js';\n\nimport { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class VideoDescriptionInfocardsSection extends YTNode {\n  static type = 'VideoDescriptionInfocardsSection';\n\n  section_title: Text;\n  creator_videos_button: Button | null;\n  creator_about_button: Button | null;\n  section_subtitle: Text;\n  channel_avatar: Thumbnail[];\n  channel_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.section_title = new Text(data.sectionTitle);\n    this.creator_videos_button = Parser.parseItem(data.creatorVideosButton, Button);\n    this.creator_about_button = Parser.parseItem(data.creatorAboutButton, Button);\n    this.section_subtitle = new Text(data.sectionSubtitle);\n    this.channel_avatar = Thumbnail.fromResponse(data.channelAvatar);\n    this.channel_endpoint = new NavigationEndpoint(data.channelEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport type { RawNode } from '../index.js';\n\nexport default class InfoRow extends YTNode {\n  static type = 'InfoRow';\n\n  title: Text;\n  default_metadata?: Text;\n  expanded_metadata?: Text;\n  info_row_expand_status_key?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'defaultMetadata')) {\n      this.default_metadata = new Text(data.defaultMetadata);\n    }\n\n    if (Reflect.has(data, 'expandedMetadata')) {\n      this.expanded_metadata = new Text(data.expandedMetadata);\n    }\n\n    if (Reflect.has(data, 'infoRowExpandStatusKey')) {\n      this.info_row_expand_status_key = data.infoRowExpandStatusKey;\n    }\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ThumbnailOverlayTimeStatus from './ThumbnailOverlayTimeStatus.js';\n\nexport default class CompactVideo extends YTNode {\n  static type = 'CompactVideo';\n\n  public video_id: string;\n  public thumbnails: Thumbnail[];\n  public rich_thumbnail?: YTNode;\n  public title: Text;\n  public author: Author;\n  public view_count?: Text;\n  public short_view_count?: Text;\n  public short_byline_text?: Text;\n  public long_byline_text?: Text;\n  public published?: Text;\n  public badges: ObservedArray<MetadataBadge>;\n  public thumbnail_overlays: ObservedArray<YTNode>;\n  public endpoint?: NavigationEndpoint;\n  public menu: Menu | null;\n  public length_text?: Text;\n  public is_watched: boolean;\n  public service_endpoints?: NavigationEndpoint[];\n  public service_endpoint?: NavigationEndpoint;\n  public style?: 'COMPACT_VIDEO_STYLE_TYPE_UNKNOWN' | 'COMPACT_VIDEO_STYLE_TYPE_NORMAL' | 'COMPACT_VIDEO_STYLE_TYPE_PROMINENT_THUMBNAIL' | 'COMPACT_VIDEO_STYLE_TYPE_HERO';\n\n  constructor(data: RawNode) {\n    super();\n    this.video_id = data.videoId;\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.author = new Author(data.longBylineText, data.ownerBadges, data.channelThumbnail);\n    this.is_watched = !!data.isWatched;\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n\n    if ('publishedTimeText' in data)\n      this.published = new Text(data.publishedTimeText);\n    \n    if ('shortBylineText' in data)\n      this.view_count = new Text(data.viewCountText);\n\n    if ('shortViewCountText' in data)\n      this.short_view_count = new Text(data.shortViewCountText);\n\n    if ('richThumbnail' in data)\n      this.rich_thumbnail = Parser.parseItem(data.richThumbnail);\n\n    if ('shortBylineText' in data)\n      this.short_byline_text = new Text(data.shortBylineText);\n\n    if ('longBylineText' in data)\n      this.long_byline_text = new Text(data.longBylineText);\n\n    if ('lengthText' in data)\n      this.length_text = new Text(data.lengthText);\n\n    if ('serviceEndpoints' in data)\n      this.service_endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if ('serviceEndpoint' in data)\n      this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);\n\n    if ('navigationEndpoint' in data)\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('style' in data)\n      this.style = data.style;\n  }\n\n  /**\n   * @deprecated Use {@linkcode video_id} instead.\n   */\n  get id(): string {\n    return this.video_id;\n  }\n\n  get duration() {\n    const overlay_time_status = this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus);\n    const length_text = this.length_text?.toString() || overlay_time_status?.text.toString();\n    return {\n      text: length_text,\n      seconds: length_text ? timeToSeconds(length_text) : 0\n    };\n  }\n\n  get best_thumbnail() {\n    return this.thumbnails[0];\n  }\n\n  get is_fundraiser(): boolean {\n    return this.badges.some((badge) => badge.label === 'Fundraiser');\n  }\n\n  get is_live(): boolean {\n    return this.badges.some((badge) => {\n      if (badge.style === 'BADGE_STYLE_TYPE_LIVE_NOW' || badge.label === 'LIVE')\n        return true;\n    });\n  }\n\n  get is_new(): boolean {\n    return this.badges.some((badge) => badge.label === 'New');\n  }\n\n  get is_premiere(): boolean {\n    return this.badges.some((badge) => badge.style === 'PREMIERE');\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport InfoRow from './InfoRow.js';\nimport { Parser, type RawNode } from '../index.js';\nimport CompactVideo from './CompactVideo.js';\n\nexport default class CarouselLockup extends YTNode {\n  static type = 'CarouselLockup';\n\n  info_rows: ObservedArray<InfoRow>;\n  video_lockup?: CompactVideo | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.info_rows = Parser.parseArray(data.infoRows, InfoRow);\n    this.video_lockup = Parser.parseItem(data.videoLockup, CompactVideo);\n  }\n}\n", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport CarouselLockup from './CarouselLockup.js';\n\nexport default class VideoDescriptionMusicSection extends YTNode {\n  static type = 'VideoDescriptionMusicSection';\n\n  carousel_lockups: ObservedArray<CarouselLockup>;\n  section_title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.carousel_lockups = Parser.parseArray(data.carouselLockups, CarouselLockup);\n    this.section_title = new Text(data.sectionTitle);\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport { Text } from '../misc.js';\nimport Button from './Button.js';\n\nexport default class VideoDescriptionTranscriptSection extends YTNode {\n  static type = 'VideoDescriptionTranscriptSection';\n\n  section_title: Text;\n  sub_header_text: Text;\n  primary_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.section_title = new Text(data.sectionTitle);\n    this.sub_header_text = new Text(data.subHeaderText);\n    this.primary_button = Parser.parseItem(data.primaryButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class StructuredDescriptionPlaylistLockup extends YTNode {\n  static type = 'StructuredDescriptionPlaylistLockup';\n\n  thumbnail: Thumbnail[];\n  title: Text;\n  short_byline_text: Text;\n  video_count_short_text: Text;\n  endpoint: NavigationEndpoint;\n  thumbnail_width: number;\n  aspect_ratio: number;\n  max_lines_title: number;\n  max_lines_short_byline_text: number;\n  overlay_position: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.short_byline_text = new Text(data.shortBylineText);\n    this.video_count_short_text = new Text(data.videoCountShortText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnail_width = data.thumbnailWidth;\n    this.aspect_ratio = data.aspectRatio;\n    this.max_lines_title = data.maxLinesTitle;\n    this.max_lines_short_byline_text = data.maxLinesShortBylineText;\n    this.overlay_position = data.overlayPosition;\n  }\n}\n", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport StructuredDescriptionPlaylistLockup from './StructuredDescriptionPlaylistLockup.js';\nimport Text from './misc/Text.js';\n\nexport default class VideoDescriptionCourseSection extends YTNode {\n  static type = 'VideoDescriptionCourseSection';\n\n  section_title: Text;\n  media_lockups: ObservedArray<StructuredDescriptionPlaylistLockup>;\n\n  constructor(data: RawNode) {\n    super();\n    this.section_title = new Text(data.sectionTitle);\n    this.media_lockups = Parser.parseArray(data.mediaLockups, [ StructuredDescriptionPlaylistLockup ]);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\n\nimport ButtonView from './ButtonView.js';\nimport VideoAttributeView from './VideoAttributeView.js';\n\nexport default class VideoAttributesSectionView extends YTNode {\n  static type = 'VideoAttributesSectionView';\n\n  header_title: string;\n  header_subtitle: string;\n  video_attributes: ObservedArray<VideoAttributeView>;\n  previous_button: ButtonView | null;\n  next_button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_title = data.headerTitle;\n    this.header_subtitle = data.headerSubtitle;\n    this.video_attributes = Parser.parseArray(data.videoAttributeViewModels, VideoAttributeView);\n    this.previous_button = Parser.parseItem(data.previousButton, ButtonView);\n    this.next_button = Parser.parseItem(data.nextButton, ButtonView);\n  }\n}\n", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nexport default class HowThisWasMadeSectionView extends YTNode {\n  static type = 'HowThisWasMadeSectionView';\n\n  public section_title?: Text;\n  public body_text?: Text;\n  public body_header?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'sectionText'))\n      this.section_title = Text.fromAttributed(data.sectionText);\n    if (Reflect.has(data, 'bodyText'))\n      this.body_text = Text.fromAttributed(data.bodyText);\n    if (Reflect.has(data, 'bodyHeader'))\n      this.body_header = Text.fromAttributed(data.bodyHeader);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ReelShelf extends YTNode {\n  static type = 'ReelShelf';\n\n  title: Text;\n  items: ObservedArray<YTNode>;\n  endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.items = Parser.parseArray(data.items);\n\n    if (Reflect.has(data, 'endpoint')) {\n      this.endpoint = new NavigationEndpoint(data.endpoint);\n    }\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class MerchandiseShelf extends YTNode {\n  static type = 'MerchandiseShelf';\n\n  title: string;\n  menu: YTNode;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.menu = Parser.parseItem(data.actionButton);\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ExpandableVideoDescriptionBody from './ExpandableVideoDescriptionBody.js';\nimport HorizontalCardList from './HorizontalCardList.js';\nimport VideoDescriptionHeader from './VideoDescriptionHeader.js';\nimport VideoDescriptionInfocardsSection from './VideoDescriptionInfocardsSection.js';\nimport VideoDescriptionMusicSection from './VideoDescriptionMusicSection.js';\nimport VideoDescriptionTranscriptSection from './VideoDescriptionTranscriptSection.js';\nimport VideoDescriptionCourseSection from './VideoDescriptionCourseSection.js';\nimport VideoAttributesSectionView from './VideoAttributesSectionView.js';\nimport HowThisWasMadeSectionView from './HowThisWasMadeSectionView.js';\nimport ReelShelf from './ReelShelf.js';\nimport ExpandableMetadata from './ExpandableMetadata.js';\nimport MerchandiseShelf from './MerchandiseShelf.js';\n\nexport default class StructuredDescriptionContent extends YTNode {\n  static type = 'StructuredDescriptionContent';\n\n  public items: ObservedArray<\n    VideoDescriptionHeader | ExpandableVideoDescriptionBody | VideoDescriptionMusicSection |\n    VideoDescriptionInfocardsSection | VideoDescriptionTranscriptSection |\n    VideoDescriptionCourseSection | HorizontalCardList | ReelShelf | VideoAttributesSectionView |\n    HowThisWasMadeSectionView | ExpandableMetadata | MerchandiseShelf\n  >;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items, [\n      VideoDescriptionHeader, ExpandableVideoDescriptionBody, VideoDescriptionMusicSection,\n      VideoDescriptionInfocardsSection, VideoDescriptionCourseSection, VideoDescriptionTranscriptSection,\n      VideoDescriptionTranscriptSection, HorizontalCardList, ReelShelf, VideoAttributesSectionView,\n      HowThisWasMadeSectionView, ExpandableMetadata, MerchandiseShelf \n    ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ClipSection from './ClipSection.js';\nimport ContinuationItem from './ContinuationItem.js';\nimport EngagementPanelTitleHeader from './EngagementPanelTitleHeader.js';\nimport MacroMarkersList from './MacroMarkersList.js';\nimport ProductList from './ProductList.js';\nimport SectionList from './SectionList.js';\nimport StructuredDescriptionContent from './StructuredDescriptionContent.js';\nimport VideoAttributeView from './VideoAttributeView.js';\n\nexport default class EngagementPanelSectionList extends YTNode {\n  static type = 'EngagementPanelSectionList';\n\n  header: EngagementPanelTitleHeader | null;\n  content: VideoAttributeView | SectionList | ContinuationItem | ClipSection | StructuredDescriptionContent | MacroMarkersList | ProductList | null;\n  target_id?: string;\n  panel_identifier?: string;\n  identifier?: {\n    surface: string,\n    tag: string\n  };\n  visibility?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, EngagementPanelTitleHeader);\n    this.content = Parser.parseItem(data.content, [ VideoAttributeView, SectionList, ContinuationItem, ClipSection, StructuredDescriptionContent, MacroMarkersList, ProductList ]);\n    this.panel_identifier = data.panelIdentifier;\n    this.identifier = data.identifier ? {\n      surface: data.identifier.surface,\n      tag: data.identifier.tag\n    } : undefined;\n    this.target_id = data.targetId;\n    this.visibility = data.visibility;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport EngagementPanelSectionList from './EngagementPanelSectionList.js';\n\nexport default class ChannelTagline extends YTNode {\n  static type = 'ChannelTagline';\n\n  content: string;\n  max_lines: number;\n  more_endpoint: {\n    show_engagement_panel_endpoint: {\n      engagement_panel: EngagementPanelSectionList | null,\n      engagement_panel_popup_type: string;\n      identifier: {\n        surface: string,\n        tag: string\n      }\n    }\n  } | NavigationEndpoint;\n  more_icon_type: string;\n  more_label: string;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.content = data.content;\n    this.max_lines = data.maxLines;\n    this.more_endpoint = data.moreEndpoint.showEngagementPanelEndpoint ? {\n      show_engagement_panel_endpoint: {\n        engagement_panel: Parser.parseItem(data.moreEndpoint.showEngagementPanelEndpoint.engagementPanel, EngagementPanelSectionList),\n        engagement_panel_popup_type: data.moreEndpoint.showEngagementPanelEndpoint.engagementPanelPresentationConfigs.engagementPanelPopupPresentationConfig.popupType,\n        identifier: {\n          surface: data.moreEndpoint.showEngagementPanelEndpoint.identifier.surface,\n          tag: data.moreEndpoint.showEngagementPanelEndpoint.identifier.tag\n        }\n      }\n    } : new NavigationEndpoint(data.moreEndpoint);\n    this.more_icon_type = data.moreIcon.iconType;\n    this.more_label = data.moreLabel;\n    this.target_id = data.targetId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type SuperParsedResult, YTNode } from '../helpers.js';\n\nexport default class SubscriptionNotificationToggleButton extends YTNode {\n  static type = 'SubscriptionNotificationToggleButton';\n\n  states: {\n    id: string;\n    next_id: string;\n    state: SuperParsedResult<YTNode>;\n  };\n\n  current_state_id: string;\n  target_id: string;\n\n  constructor(data: any) {\n    super();\n    this.states = data.states.map((data: RawNode) => ({\n      id: data.stateId,\n      next_id: data.nextStateId,\n      state: Parser.parse(data.state)\n    }));\n\n    this.current_state_id = data.currentStateId;\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscriptionNotificationToggleButton from './SubscriptionNotificationToggleButton.js';\nimport Text from './misc/Text.js';\n\nexport default class SubscribeButton extends YTNode {\n  static type = 'SubscribeButton';\n\n  public button_text: Text;\n  public subscribed: boolean;\n  public enabled: boolean;\n  public item_type: string;\n  public channel_id: string;\n  public show_preferences: boolean;\n  public subscribed_text?: Text;\n  public unsubscribed_text?: Text;\n  public unsubscribe_text?: Text;\n  public notification_preference_button: SubscriptionNotificationToggleButton | null;\n  public service_endpoints?: NavigationEndpoint[];\n  public on_subscribe_endpoints?: NavigationEndpoint[];\n  public on_unsubscribe_endpoints?: NavigationEndpoint[];\n  public subscribed_entity_key?: string;\n  public target_id?: string;\n  public subscribe_accessibility_label?: string;\n  public unsubscribe_accessibility_label?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.button_text = new Text(data.buttonText);\n    this.subscribed = data.subscribed;\n    this.enabled = data.enabled;\n    this.item_type = data.type;\n    this.channel_id = data.channelId;\n    this.show_preferences = data.showPreferences;\n\n    if (Reflect.has(data, 'subscribedButtonText'))\n      this.subscribed_text = new Text(data.subscribedButtonText);\n\n    if (Reflect.has(data, 'unsubscribedButtonText'))\n      this.unsubscribed_text = new Text(data.unsubscribedButtonText);\n\n    if (Reflect.has(data, 'unsubscribeButtonText'))\n      this.unsubscribe_text = new Text(data.unsubscribeButtonText);\n\n    this.notification_preference_button = Parser.parseItem(data.notificationPreferenceButton, SubscriptionNotificationToggleButton);\n\n    if (Reflect.has(data, 'serviceEndpoints'))\n      this.service_endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if (Reflect.has(data, 'onSubscribeEndpoints'))\n      this.on_subscribe_endpoints = data.onSubscribeEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if (Reflect.has(data, 'onUnsubscribeEndpoints'))\n      this.on_unsubscribe_endpoints = data.onUnsubscribeEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if (Reflect.has(data, 'subscribedEntityKey'))\n      this.subscribed_entity_key = data.subscribedEntityKey;\n\n    if (Reflect.has(data, 'targetId'))\n      this.target_id = data.targetId;\n\n    if (Reflect.has(data, 'subscribeAccessibility'))\n      this.subscribe_accessibility_label = data.subscribeAccessibility.accessibilityData?.label;\n\n    if (Reflect.has(data, 'unsubscribeAccessibility'))\n      this.unsubscribe_accessibility_label = data.unsubscribeAccessibility.accessibilityData?.label;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport ChannelHeaderLinks from './ChannelHeaderLinks.js';\nimport ChannelHeaderLinksView from './ChannelHeaderLinksView.js';\nimport ChannelTagline from './ChannelTagline.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class C4TabbedHeader extends YTNode {\n  static type = 'C4TabbedHeader';\n\n  author: Author;\n  banner?: Thumbnail[];\n  tv_banner?: Thumbnail[];\n  mobile_banner?: Thumbnail[];\n  subscribers?: Text;\n  videos_count?: Text;\n  sponsor_button?: Button | null;\n  subscribe_button?: SubscribeButton | Button | null;\n  header_links?: ChannelHeaderLinks | ChannelHeaderLinksView | null;\n  channel_handle?: Text;\n  channel_id?: string;\n  tagline?: ChannelTagline | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.author = new Author({\n      simpleText: data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.badges, data.avatar);\n\n    if (Reflect.has(data, 'banner')) {\n      this.banner = Thumbnail.fromResponse(data.banner);\n    }\n\n    if (Reflect.has(data, 'tv_banner')) {\n      this.tv_banner = Thumbnail.fromResponse(data.tvBanner);\n    }\n\n    if (Reflect.has(data, 'mobile_banner')) {\n      this.mobile_banner = Thumbnail.fromResponse(data.mobileBanner);\n    }\n\n    if (Reflect.has(data, 'subscriberCountText')) {\n      this.subscribers = new Text(data.subscriberCountText);\n    }\n\n    if (Reflect.has(data, 'videosCountText')) {\n      this.videos_count = new Text(data.videosCountText);\n    }\n\n    if (Reflect.has(data, 'sponsorButton')) {\n      this.sponsor_button = Parser.parseItem(data.sponsorButton, Button);\n    }\n\n    if (Reflect.has(data, 'subscribeButton')) {\n      this.subscribe_button = Parser.parseItem(data.subscribeButton, [ SubscribeButton, Button ]);\n    }\n\n    if (Reflect.has(data, 'headerLinks')) {\n      this.header_links = Parser.parseItem(data.headerLinks, [ ChannelHeaderLinks, ChannelHeaderLinksView ]);\n    }\n\n    if (Reflect.has(data, 'channelHandleText')) {\n      this.channel_handle = new Text(data.channelHandleText);\n    }\n\n    if (Reflect.has(data, 'channelId')) {\n      this.channel_id = data.channelId;\n    }\n\n    if (Reflect.has(data, 'tagline')) {\n      this.tagline = Parser.parseItem(data.tagline, ChannelTagline);\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CallToActionButton extends YTNode {\n  static type = 'CallToActionButton';\n\n  label: Text;\n  icon_type: string;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.icon_type = data.icon.iconType;\n    this.style = data.style;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class Card extends YTNode {\n  static type = 'Card';\n\n  teaser: YTNode;\n  content: YTNode;\n  card_id?: string;\n  feature?: string;\n\n  cue_ranges: {\n    start_card_active_ms: string;\n    end_card_active_ms: string;\n    teaser_duration_ms: string;\n    icon_after_teaser_ms: string;\n  }[];\n\n  constructor(data: RawNode) {\n    super();\n    this.teaser = Parser.parseItem(data.teaser);\n    this.content = Parser.parseItem(data.content);\n\n    if (Reflect.has(data, 'cardId')) {\n      this.card_id = data.cardId;\n    }\n\n    if (Reflect.has(data, 'feature')) {\n      this.feature = data.feature;\n    }\n\n    this.cue_ranges = data.cueRanges.map((cr: any) => ({\n      start_card_active_ms: cr.startCardActiveMs,\n      end_card_active_ms: cr.endCardActiveMs,\n      teaser_duration_ms: cr.teaserDurationMs,\n      icon_after_teaser_ms: cr.iconAfterTeaserMs\n    }));\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class CardCollection extends YTNode {\n  static type = 'CardCollection';\n\n  cards: ObservedArray<YTNode>;\n  header: Text;\n  allow_teaser_dismiss: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.cards = Parser.parseArray(data.cards);\n    this.header = new Text(data.headerText);\n    this.allow_teaser_dismiss = data.allowTeaserDismiss;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class CarouselHeader extends YTNode {\n  static type = 'CarouselHeader';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class CarouselItem extends YTNode {\n  static type = 'CarouselItem';\n\n  items: ObservedArray<YTNode>;\n  background_color: string;\n  layout_style: string;\n  pagination_thumbnails: Thumbnail[];\n  paginator_alignment: string;\n\n  constructor (data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.carouselItems);\n    this.background_color = data.backgroundColor;\n    this.layout_style = data.layoutStyle;\n    this.pagination_thumbnails = Thumbnail.fromResponse(data.paginationThumbnails);\n    this.paginator_alignment = data.paginatorAlignment;\n  }\n\n  // XXX: For consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport ButtonView from './ButtonView.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class TextCarouselItemView extends YTNode {\n  static type = 'TextCarouselItemView';\n\n  icon_name: string;\n  text: Text;\n  on_tap_endpoint: NavigationEndpoint;\n  button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.icon_name = data.iconName;\n    this.text = Text.fromAttributed(data.text);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n    this.button = Parser.parseItem(data.button, ButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport TextCarouselItemView from './TextCarouselItemView.js';\n\nexport default class CarouselItemView extends YTNode {\n  static type = 'CarouselItemView';\n\n  item_type: string;\n  carousel_item: TextCarouselItemView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.item_type = data.itemType;\n    this.carousel_item = Parser.parseItem(data.carouselItem, TextCarouselItemView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class CarouselTitleView extends YTNode {\n  static type = 'CarouselTitleView';\n\n  title: string;\n  previous_button: ButtonView | null;\n  next_button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.previous_button = Parser.parseItem(data.previousButton, ButtonView);\n    this.next_button = Parser.parseItem(data.nextButton, ButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class Channel extends YTNode {\n  static type = 'Channel';\n\n  id: string;\n  author: Author;\n  subscriber_count: Text;\n  video_count: Text;\n  long_byline: Text;\n  short_byline: Text;\n  endpoint: NavigationEndpoint;\n  subscribe_button: SubscribeButton | Button | null;\n  description_snippet: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.channelId;\n\n    this.author = new Author({\n      ...data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.ownerBadges, data.thumbnail);\n\n    // XXX: `subscriberCountText` is now the channel's handle and `videoCountText` is the subscriber count.\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.video_count = new Text(data.videoCountText);\n    this.long_byline = new Text(data.longBylineText);\n    this.short_byline = new Text(data.shortBylineText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, [ SubscribeButton, Button ]);\n    this.description_snippet = new Text(data.descriptionSnippet);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelAboutFullMetadata extends YTNode {\n  static type = 'ChannelAboutFullMetadata';\n\n  id: string;\n  name: Text;\n  avatar: Thumbnail[];\n  canonical_channel_url: string;\n\n  primary_links: {\n    endpoint: NavigationEndpoint;\n    icon: Thumbnail[];\n    title: Text;\n  }[];\n\n  view_count: Text;\n  joined_date: Text;\n  description: Text;\n  email_reveal: NavigationEndpoint;\n  can_reveal_email: boolean;\n  country: Text;\n  buttons: ObservedArray<Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.channelId;\n    this.name = new Text(data.title);\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.canonical_channel_url = data.canonicalChannelUrl;\n\n    this.primary_links = data.primaryLinks?.map((link: any) => ({\n      endpoint: new NavigationEndpoint(link.navigationEndpoint),\n      icon: Thumbnail.fromResponse(link.icon),\n      title: new Text(link.title)\n    })) ?? [];\n\n    this.view_count = new Text(data.viewCountText);\n    this.joined_date = new Text(data.joinedDateText);\n    this.description = new Text(data.description);\n    this.email_reveal = new NavigationEndpoint(data.onBusinessEmailRevealClickCommand);\n    this.can_reveal_email = !data.signInForBusinessEmail;\n    this.country = new Text(data.country);\n    this.buttons = Parser.parseArray(data.actionButtons, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelAgeGate extends YTNode {\n  static type = 'ChannelAgeGate';\n\n  channel_title: string;\n  avatar: Thumbnail[];\n  header: Text;\n  main_text: Text;\n  sign_in_button: Button | null;\n  secondary_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.channel_title = data.channelTitle;\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.header = new Text(data.header);\n    this.main_text = new Text(data.mainText);\n    this.sign_in_button = Parser.parseItem(data.signInButton, Button);\n    this.secondary_text = new Text(data.secondaryText);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ChannelFeaturedContent extends YTNode {\n  static type = 'ChannelFeaturedContent';\n\n  title: Text;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelMetadata extends YTNode {\n  static type = 'ChannelMetadata';\n\n  title: string;\n  description: string;\n  url: string;\n  rss_url: string;\n  vanity_channel_url: string;\n  external_id: string;\n  is_family_safe: boolean;\n  keywords: string[];\n  avatar: Thumbnail[];\n  music_artist_name?: string;\n  available_countries: string[];\n  android_deep_link: string;\n  android_appindexing_link: string;\n  ios_appindexing_link: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.description = data.description;\n    this.url = data.channelUrl;\n    this.rss_url = data.rssUrl;\n    this.vanity_channel_url = data.vanityChannelUrl;\n    this.external_id = data.externalId;\n    this.is_family_safe = data.isFamilySafe;\n    this.keywords = data.keywords;\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    // Can be an empty string sometimes, so we need the extra length check\n    this.music_artist_name = typeof data.musicArtistName === 'string' && data.musicArtistName.length > 0 ? data.musicArtistName : undefined;\n    this.available_countries = data.availableCountryCodes;\n    this.android_deep_link = data.androidDeepLink;\n    this.android_appindexing_link = data.androidAppindexingLink;\n    this.ios_appindexing_link = data.iosAppindexingLink;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelMobileHeader extends YTNode {\n  static type = 'ChannelMobileHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelOptions extends YTNode {\n  static type = 'ChannelOptions';\n\n  avatar: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  name: string;\n  links: Text[];\n\n  constructor(data: RawNode) {\n    super();\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.endpoint = new NavigationEndpoint(data.avatarEndpoint);\n    this.name = data.name;\n    this.links = data.links.map((link: RawNode) => new Text(link));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelOwnerEmptyState extends YTNode {\n  static type = 'ChannelOwnerEmptyState';\n\n  illustration: Thumbnail[];\n  description: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.illustration = Thumbnail.fromResponse(data.illustration);\n    this.description = new Text(data.description);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ChannelSubMenu extends YTNode {\n  static type = 'ChannelSubMenu';\n\n  public content_type_sub_menu_items: {\n    endpoint: NavigationEndpoint;\n    selected: boolean;\n    title: string;\n  }[];\n\n  public sort_setting: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.content_type_sub_menu_items = data.sortSetting?.sortFilterSubMenuRenderer?.subMenuItems?.map((item: RawNode) => ({\n      endpoint: new NavigationEndpoint(item.navigationEndpoint || item.endpoint),\n      selected: item.selected,\n      title: item.title\n    })) || [];\n    this.sort_setting = Parser.parseItem(data.sortSetting);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport Button from './Button.js';\n\nexport default class ChannelSwitcherHeader extends YTNode {\n  static type = 'ChannelSwitcherHeader';\n\n  title: string;\n  button?: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title).toString();\n\n    if (Reflect.has(data, 'button')) {\n      this.button = Parser.parseItem(data.button, Button);\n    }\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class ChannelThumbnailWithLink extends YTNode {\n  static type = 'ChannelThumbnailWithLink';\n\n  public thumbnails: Thumbnail[];\n  public endpoint: NavigationEndpoint;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelVideoPlayer extends YTNode {\n  static type = 'ChannelVideoPlayer';\n\n  id: string;\n  title: Text;\n  description: Text;\n  view_count: Text;\n  published_time: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.view_count = new Text(data.viewCountText);\n    this.published_time = new Text(data.publishedTimeText);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class Chapter extends YTNode {\n  static type = 'Chapter';\n\n  title: Text;\n  time_range_start_millis: number;\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.time_range_start_millis = data.timeRangeStartMillis;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ChildVideo extends YTNode {\n  static type = 'ChildVideo';\n\n  id: string;\n  title: Text;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.duration = {\n      text: data.lengthText.simpleText,\n      seconds: timeToSeconds(data.lengthText.simpleText)\n    };\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ChipView extends YTNode {\n  static type = 'ChipView';\n\n  text: string;\n  display_type: string;\n  endpoint: NavigationEndpoint;\n  chip_entity_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = data.text;\n    this.display_type = data.displayType;\n    this.endpoint = new NavigationEndpoint(data.tapCommand);\n    this.chip_entity_key = data.chipEntityKey;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChipView from './ChipView.js';\n\nexport default class ChipBarView extends YTNode {\n  static type = 'ChipBarView';\n\n  chips: ObservedArray<ChipView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.chips = Parser.parseArray(data.chips, ChipView);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChipCloudChip extends YTNode {\n  static type = 'ChipCloudChip';\n\n  is_selected: boolean;\n  endpoint?: NavigationEndpoint;\n  text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.is_selected = data.isSelected;\n    if (Reflect.has(data, 'navigationEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n    this.text = new Text(data.text).toString();\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport ChipCloudChip from './ChipCloudChip.js';\n\nexport default class ChipCloud extends YTNode {\n  static type = 'ChipCloud';\n\n  chips: ObservedArray<ChipCloudChip>;\n  next_button: Button | null;\n  previous_button: Button | null;\n  horizontal_scrollable: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.chips = Parser.parseArray(data.chips, ChipCloudChip);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n    this.previous_button = Parser.parseItem(data.previousButton, Button);\n    this.horizontal_scrollable = data.horizontalScrollable;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ClientSideToggleMenuItem extends YTNode {\n  static type = 'ClientSideToggleMenuItem';\n\n  text: Text;\n  icon_type: string;\n  toggled_text: Text;\n  toggled_icon_type: string;\n  is_toggled?: boolean;\n  menu_item_identifier: string;\n  endpoint: NavigationEndpoint;\n  logging_directives?: {\n    visibility: {\n      types: string;\n    },\n    enable_displaylogger_experiment: boolean;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.defaultText);\n    this.icon_type = data.defaultIcon.iconType;\n    this.toggled_text = new Text(data.toggledText);\n    this.toggled_icon_type = data.toggledIcon.iconType;\n    \n    if (Reflect.has(data, 'isToggled')) {\n      this.is_toggled = data.isToggled;\n    }\n\n    this.menu_item_identifier = data.menuItemIdentifier;\n    this.endpoint = new NavigationEndpoint(data.command);\n\n    if (Reflect.has(data, 'loggingDirectives')) {\n      this.logging_directives = {\n        visibility: {\n          types: data.loggingDirectives.visibility.types\n        },\n        enable_displaylogger_experiment: data.loggingDirectives.enableDisplayloggerExperiment\n      };\n    }\n  }\n}\n", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CollaboratorInfoCardContent extends YTNode {\n  static type = 'CollaboratorInfoCardContent';\n\n  channel_avatar: Thumbnail[];\n  custom_text: Text;\n  channel_name: Text;\n  subscriber_count: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.channel_avatar = Thumbnail.fromResponse(data.channelAvatar);\n    this.custom_text = new Text(data.customText);\n    this.channel_name = new Text(data.channelName);\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CollageHeroImage extends YTNode {\n  static type = 'CollageHeroImage';\n\n  left: Thumbnail[];\n  top_right: Thumbnail[];\n  bottom_right: Thumbnail[];\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.left = Thumbnail.fromResponse(data.leftThumbnail);\n    this.top_right = Thumbnail.fromResponse(data.topRightThumbnail);\n    this.bottom_right = Thumbnail.fromResponse(data.bottomRightThumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailHoverOverlayView extends YTNode {\n  static type = 'ThumbnailHoverOverlayView';\n\n  icon_name: string;\n  text: Text;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.icon_name = data.icon.sources[0].clientResource.imageName;\n    this.text = Text.fromAttributed(data.text);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailBadgeView extends YTNode {\n  static type = 'ThumbnailBadgeView';\n\n  icon_name?: string;\n  text: string;\n  badge_style: string;\n  background_color?: {\n    light_theme: number;\n    dark_theme: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n\n    this.text = data.text;\n    this.badge_style = data.badgeStyle;\n\n    if (data.backgroundColor) {\n      this.background_color = {\n        light_theme: data.backgroundColor.lightTheme,\n        dark_theme: data.backgroundColor.darkTheme\n      };\n    }\n\n    if (data.iconName) {\n      this.icon_name = data.icon.sources[0].clientResource.imageName;\n    }\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailBadgeView from './ThumbnailBadgeView.js';\n\nexport default class ThumbnailOverlayBadgeView extends YTNode {\n  static type = 'ThumbnailOverlayBadgeView';\n\n  public badges: ObservedArray<ThumbnailBadgeView>;\n  public position: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.badges = Parser.parseArray(data.thumbnailBadges, ThumbnailBadgeView);\n    this.position = data.position;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport default class ThumbnailHoverOverlayToggleActionsView extends YTNode {\n  static type = 'ThumbnailHoverOverlayToggleActionsView';\n\n  public buttons: ObservedArray<ToggleButtonView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.buttons = Parser.parseArray(data.buttons, ToggleButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayProgressBarView extends YTNode {\n  static type = 'ThumbnailOverlayProgressBarView';\n\n  public start_percent: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_percent = data.startPercent;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailBadgeView from './ThumbnailBadgeView.js';\nimport ThumbnailOverlayProgressBarView from './ThumbnailOverlayProgressBarView.js';\n\nexport default class ThumbnailBottomOverlayView extends YTNode {\n  static type = 'ThumbnailBottomOverlayView';\n\n  public progress_bar: ThumbnailOverlayProgressBarView | null;\n  public badges: ObservedArray<ThumbnailBadgeView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.progress_bar = Parser.parseItem(data.progressBar, ThumbnailOverlayProgressBarView);\n    this.badges = Parser.parseArray(data.badges, ThumbnailBadgeView);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AnimatedThumbnailOverlayView from './AnimatedThumbnailOverlayView.js';\nimport ThumbnailHoverOverlayView from './ThumbnailHoverOverlayView.js';\nimport ThumbnailOverlayBadgeView from './ThumbnailOverlayBadgeView.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport ThumbnailHoverOverlayToggleActionsView from './ThumbnailHoverOverlayToggleActionsView.js';\nimport ThumbnailBottomOverlayView from './ThumbnailBottomOverlayView.js';\n\nexport type ThumbnailBackgroundColor = {\n  light_theme: number;\n  dark_theme: number;\n};\n\nexport default class ThumbnailView extends YTNode {\n  static type = 'ThumbnailView';\n\n  public image: Thumbnail[];\n  public overlays: ObservedArray<\n    ThumbnailHoverOverlayToggleActionsView | ThumbnailBottomOverlayView |\n    ThumbnailOverlayBadgeView | ThumbnailHoverOverlayView\n    | AnimatedThumbnailOverlayView\n  >;\n  public background_color?: ThumbnailBackgroundColor;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.image = Thumbnail.fromResponse(data.image);\n    this.overlays = Parser.parseArray(data.overlays, [\n      ThumbnailHoverOverlayToggleActionsView, ThumbnailBottomOverlayView,\n      ThumbnailOverlayBadgeView, ThumbnailHoverOverlayView,\n      AnimatedThumbnailOverlayView\n    ]);\n\n    if ('backgroundColor' in data) {\n      this.background_color = {\n        light_theme: data.backgroundColor.lightTheme,\n        dark_theme: data.backgroundColor.darkTheme\n      };\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailView from './ThumbnailView.js';\n\ninterface StackColor {\n  light_theme?: number;\n  dark_theme?: number;\n}\n\nexport default class CollectionThumbnailView extends YTNode {\n  static type = 'CollectionThumbnailView';\n\n  public primary_thumbnail: ThumbnailView | null;\n  public stack_color?: StackColor;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.primary_thumbnail = Parser.parseItem(data.primaryThumbnail, ThumbnailView);\n    \n    if ('stackColor' in data) {\n      this.stack_color = {\n        light_theme: data.stackColor?.lightTheme,\n        dark_theme: data.stackColor?.darkTheme\n      };\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { type RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\n\nexport default class AddToPlaylistCommand extends YTNode {\n  static type = 'AddToPlaylistCommand';\n\n  public open_miniplayer: boolean;\n  public video_id: string;\n  public list_type: string;\n  public endpoint: NavigationEndpoint;\n  public video_ids: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.open_miniplayer = data.openMiniplayer;\n    this.video_id = data.videoId;\n    this.list_type = data.listType;\n    this.endpoint = new NavigationEndpoint(data.onCreateListCommand);\n    this.video_ids = data.videoIds;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { ContinuationRequest, IEndpoint, RawNode } from '../../index.js';\n\nexport default class ContinuationCommand extends YTNode implements IEndpoint<ContinuationRequest> {\n  static type = 'ContinuationCommand';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    switch (this.#data.request) {\n      case 'CONTINUATION_REQUEST_TYPE_WATCH_NEXT':\n        return 'next';\n      case 'CONTINUATION_REQUEST_TYPE_BROWSE':\n        return 'browse';\n      case 'CONTINUATION_REQUEST_TYPE_SEARCH':\n        return 'search';\n      case 'CONTINUATION_REQUEST_TYPE_ACCOUNTS_LIST':\n        return 'account/accounts_list';\n      case 'CONTINUATION_REQUEST_TYPE_COMMENTS_NOTIFICATION_MENU':\n        return 'notification/get_notification_menu';\n      case 'CONTINUATION_REQUEST_TYPE_COMMENT_REPLIES':\n        return 'comment/get_comment_replies';\n      case 'CONTINUATION_REQUEST_TYPE_REEL_WATCH_SEQUENCE':\n        return 'reel/reel_watch_sequence';\n      case 'CONTINUATION_REQUEST_TYPE_GET_PANEL':\n        return 'get_panel';\n      default:\n        return '';\n    }\n  }\n\n  public buildRequest(): ContinuationRequest {\n    const request: ContinuationRequest = {};\n\n    if (this.#data.formData)\n      request.formData = this.#data.formData;\n\n    if (this.#data.token)\n      request.continuation = this.#data.token;\n\n    if (this.#data.request === 'CONTINUATION_REQUEST_TYPE_COMMENTS_NOTIFICATION_MENU') {\n      request.notificationsMenuRequestType = 'NOTIFICATIONS_MENU_REQUEST_TYPE_COMMENTS';\n      if (this.#data.token) {\n        request.fetchCommentsParams = {\n          continuation: this.#data.token\n        };\n        delete request.continuation;\n      }\n    }\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { GetKidsBlocklistPickerRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'kids/get_kids_blocklist_picker';\n\nexport default class GetKidsBlocklistPickerCommand extends YTNode implements IEndpoint<GetKidsBlocklistPickerRequest> {\n  static type = 'GetKidsBlocklistPickerCommand';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): GetKidsBlocklistPickerRequest {\n    const request: GetKidsBlocklistPickerRequest = {};\n\n    if (this.#data.blockedForKidsContent)\n      request.blockedForKidsContent = this.#data.blockedForKidsContent;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../types/index.js';\n\nexport type AttIds = {\n  encrypted_video_id?: string;\n  external_channel_id?: string;\n  comment_id?: string;\n  external_owner_id?: string;\n  artist_id?: string;\n  playlist_id?: string;\n  external_post_id?: string;\n  share_id?: string;\n}\n\nexport default class RunAttestationCommand extends YTNode {\n  static type = 'RunAttestationCommand';\n  \n  public engagement_type: string;\n  public ids?: AttIds[];\n\n  constructor(data: RawNode) {\n    super();\n    this.engagement_type = data.engagementType;\n    if (Reflect.has(data, 'ids')) {\n      this.ids = data.ids.map((id: RawNode) => ({\n        encrypted_video_id: id.encryptedVideoId,\n        external_channel_id: id.externalChannelId,\n        comment_id: id.commentId,\n        external_owner_id: id.externalOwnerId,\n        artist_id: id.artistId,\n        playlist_id: id.playlistId,\n        external_post_id: id.externalPostId,\n        share_id: id.shareId\n      }));\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class ShowDialogCommand extends YTNode {\n  static type = 'ShowDialogCommand';\n\n  public inline_content: YTNode | null;\n  public remove_default_padding: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.inline_content = Parser.parseItem(data.panelLoadingStrategy?.inlineContent);\n    this.remove_default_padding = !!data.removeDefaultPadding;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { type RawNode } from '../../index.js';\n\ntype Identifier = {\n  surface: string,\n  tag: string;\n}\n\nexport default class UpdateEngagementPanelContentCommand extends YTNode {\n  static type = 'UpdateEngagementPanelContentCommand';\n\n  public content_source_panel_identifier?: Identifier;\n  public target_panel_identifier?: Identifier;\n  \n  constructor(data: RawNode) {\n    super();\n    this.content_source_panel_identifier = data.contentSourcePanelIdentifier;\n    this.target_panel_identifier = data.targetPanelIdentifier;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class AuthorCommentBadge extends YTNode {\n  static type = 'AuthorCommentBadge';\n\n  #data;\n\n  icon_type?: string;\n  tooltip: string;\n  style?: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.tooltip = data.iconTooltip;\n\n    // *** For consistency\n    if (this.tooltip === 'Verified') {\n      this.style = 'BADGE_STYLE_TYPE_VERIFIED';\n      data.style = 'BADGE_STYLE_TYPE_VERIFIED';\n    }\n\n    this.#data = data;\n  }\n\n  get orig_badge() {\n    return this.#data;\n  }\n}", "import { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Text from '../misc/Text.js';\n\nexport default class EmojiPicker extends YTNode {\n  static type = 'EmojiPicker';\n\n  id: string;\n  categories: ObservedArray<YTNode>;\n  category_buttons: ObservedArray<YTNode>;\n  search_placeholder: Text;\n  search_no_results: Text;\n  pick_skin_tone: Text;\n  clear_search_label: string;\n  skin_tone_generic_label: string;\n  skin_tone_light_label: string;\n  skin_tone_medium_light_label: string;\n  skin_tone_medium_label: string;\n  skin_tone_medium_dark_label: string;\n  skin_tone_dark_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.categories = Parser.parseArray(data.categories);\n    this.category_buttons = Parser.parseArray(data.categoryButtons);\n    this.search_placeholder = new Text(data.searchPlaceholderText);\n    this.search_no_results = new Text(data.searchNoResultsText);\n    this.pick_skin_tone = new Text(data.pickSkinToneText);\n    this.clear_search_label = data.clearSearchLabel;\n    this.skin_tone_generic_label = data.skinToneGenericLabel;\n    this.skin_tone_light_label = data.skinToneLightLabel;\n    this.skin_tone_medium_light_label = data.skinToneMediumLightLabel;\n    this.skin_tone_medium_label = data.skinToneMediumLabel;\n    this.skin_tone_medium_dark_label = data.skinToneMediumDarkLabel;\n    this.skin_tone_dark_label = data.skinToneDarkLabel;\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport EmojiPicker from './EmojiPicker.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentDialog extends YTNode {\n  static type = 'CommentDialog';\n\n  editable_text: Text;\n  author_thumbnail: Thumbnail[];\n  submit_button: Button | null;\n  cancel_button: Button | null;\n  placeholder: Text;\n  emoji_button: Button | null;\n  emoji_picker: EmojiPicker | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.editable_text = new Text(data.editableText);\n    this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);\n    this.submit_button = Parser.parseItem(data.submitButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.placeholder = new Text(data.placeholderText);\n    this.emoji_button = Parser.parseItem(data.emojiButton, Button);\n    this.emoji_picker = Parser.parseItem(data.emojiPicker, EmojiPicker);\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode, type ObservedArray } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentReplies extends YTNode {\n  static type = 'CommentReplies';\n\n  contents: ObservedArray<YTNode>;\n  view_replies: Button | null;\n  hide_replies: Button | null;\n  view_replies_creator_thumbnail: Thumbnail[];\n  has_channel_owner_replied: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.view_replies = Parser.parseItem(data.viewReplies, Button);\n    this.hide_replies = Parser.parseItem(data.hideReplies, Button);\n    this.view_replies_creator_thumbnail = Thumbnail.fromResponse(data.viewRepliesCreatorThumbnail);\n    this.has_channel_owner_replied = !!data.viewRepliesCreatorThumbnail;\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentReplyDialog extends YTNode {\n  static type = 'CommentReplyDialog';\n\n  reply_button: Button | null;\n  cancel_button: Button | null;\n  author_thumbnail: Thumbnail[];\n  placeholder: Text;\n  error_message: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.reply_button = Parser.parseItem(data.replyButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);\n    this.placeholder = new Text(data.placeholderText);\n    this.error_message = new Text(data.errorMessage);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentsSimplebox extends YTNode {\n  static type = 'CommentsSimplebox';\n\n  simplebox_avatar: Thumbnail[];\n  simplebox_placeholder: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.simplebox_avatar = Thumbnail.fromResponse(data.simpleboxAvatar);\n    this.simplebox_placeholder = new Text(data.simpleboxPlaceholder);\n  }\n}", "import Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentsEntryPointTeaser extends YTNode {\n  static type = 'CommentsEntryPointTeaser';\n\n  teaser_avatar?: Thumbnail[];\n  teaser_content?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'teaserAvatar')) {\n      this.teaser_avatar = Thumbnail.fromResponse(data.teaserAvatar);\n    }\n\n    if (Reflect.has(data, 'teaserContent')) {\n      this.teaser_content = new Text(data.teaserContent);\n    }\n  }\n}", "import Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport CommentsSimplebox from './CommentsSimplebox.js';\nimport CommentsEntryPointTeaser from './CommentsEntryPointTeaser.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\n\nexport default class CommentsEntryPointHeader extends YTNode {\n  static type = 'CommentsEntryPointHeader';\n\n  header?: Text;\n  comment_count?: Text;\n  teaser_avatar?: Thumbnail[];\n  teaser_content?: Text;\n  content_renderer?: CommentsEntryPointTeaser | CommentsSimplebox | null;\n  simplebox_placeholder?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'headerText')) {\n      this.header = new Text(data.headerText);\n    }\n\n    if (Reflect.has(data, 'commentCount')) {\n      this.comment_count = new Text(data.commentCount);\n    }\n\n    if (Reflect.has(data, 'teaserAvatar') || Reflect.has(data, 'simpleboxAvatar')) {\n      this.teaser_avatar = Thumbnail.fromResponse(data.teaserAvatar || data.simpleboxAvatar);\n    }\n\n    if (Reflect.has(data, 'teaserContent')) {\n      this.teaser_content = new Text(data.teaserContent);\n    }\n\n    if (Reflect.has(data, 'contentRenderer')) {\n      this.content_renderer = Parser.parseItem(data.contentRenderer, [ CommentsEntryPointTeaser, CommentsSimplebox ]);\n    }\n\n    if (Reflect.has(data, 'simpleboxPlaceholder')) {\n      this.simplebox_placeholder = new Text(data.simpleboxPlaceholder);\n    }\n  }\n}", "import { Parser } from '../../index.js';\nimport SortFilterSubMenu from '../SortFilterSubMenu.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport type CustomEmoji = {\n  emoji_id: string;\n  shortcuts: string[];\n  search_terms: string[];\n  image: Thumbnail[];\n  is_custom_emoji: boolean;\n}\n\nexport default class CommentsHeader extends YTNode {\n  static type = 'CommentsHeader';\n\n  public title: Text;\n  public count: Text;\n  public comments_count: Text;\n  public create_renderer;\n  public sort_menu: SortFilterSubMenu | null;\n  public custom_emojis?: CustomEmoji[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.titleText);\n    this.count = new Text(data.countText);\n    this.comments_count = new Text(data.commentsCount);\n    this.create_renderer = Parser.parseItem(data.createRenderer);\n    this.sort_menu = Parser.parseItem(data.sortMenu, SortFilterSubMenu);\n\n    if (Reflect.has(data, 'customEmojis')) {\n      this.custom_emojis = data.customEmojis.map((emoji: RawNode) => ({\n        emoji_id: emoji.emojiId,\n        shortcuts: emoji.shortcuts,\n        search_terms: emoji.searchTerms,\n        image: Thumbnail.fromResponse(emoji.image),\n        is_custom_emoji: emoji.isCustomEmoji\n      }));\n    }\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentSimplebox extends YTNode {\n  static type = 'CommentSimplebox';\n\n  submit_button: Button | null;\n  cancel_button: Button | null;\n  author_thumbnail: Thumbnail[];\n  placeholder: Text;\n  avatar_size: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.submit_button = Parser.parseItem(data.submitButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);\n    this.placeholder = new Text(data.placeholderText);\n    this.avatar_size = data.avatarSize;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport Text from '../misc/Text.js';\n\nimport type { RawNode } from '../../index.js';\n\nexport default class VoiceReplyContainerView extends YTNode {\n  static type = 'VoiceReplyContainerView';\n\n  voice_reply_unavailable_text : Text;\n  transcript_text : Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.voice_reply_unavailable_text = Text.fromAttributed(data.voiceReplyUnavailableText);\n    this.transcript_text = Text.fromAttributed(data.transcriptText);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport Author from '../misc/Author.js';\nimport Text from '../misc/Text.js';\nimport CommentReplyDialog from './CommentReplyDialog.js';\nimport VoiceReplyContainerView from './VoiceReplyContainerView.js';\nimport { InnertubeError } from '../../../utils/Utils.js';\nimport * as ProtoUtils from '../../../utils/ProtoUtils.js';\n\nimport type Actions from '../../../core/Actions.js';\nimport type { ApiResponse } from '../../../core/Actions.js';\nimport type { RawNode } from '../../index.js';\n\n// TODO: Move these types to a different file.\nexport type CommentKeys = {\n  comment: string;\n  comment_surface: string;\n  toolbar_state: string;\n  toolbar_surface: string;\n  shared: string;\n}\n\nexport type MemberBadge = {\n  url: string;\n  a11y: string;\n}\n\nexport default class CommentView extends YTNode {\n  static type = 'CommentView';\n\n  #actions?: Actions;\n\n  public like_command?: NavigationEndpoint;\n  public dislike_command?: NavigationEndpoint;\n  public unlike_command?: NavigationEndpoint;\n  public undislike_command?: NavigationEndpoint;\n  public reply_command?: NavigationEndpoint;\n  public prepare_account_command?: NavigationEndpoint;\n\n  public comment_id: string;\n  public is_pinned: boolean;\n  public keys: CommentKeys;\n\n  public content?: Text;\n  public published_time?: string;\n  public author_is_channel_owner?: boolean;\n  public creator_thumbnail_url?: string;\n  public like_button_a11y?: string;\n  public like_count?: string;\n  public like_count_liked?: string;\n  public like_count_a11y?: string;\n  public like_active_tooltip?: string;\n  public like_inactive_tooltip?: string;\n  public dislike_active_tooltip?: string;\n  public dislike_inactive_tooltip?: string;\n  public heart_active_tooltip?: string;\n  public reply_count?: string;\n  public reply_count_a11y?: string;\n  public is_member?: boolean;\n  public member_badge?: MemberBadge;\n  public author?: Author;\n\n  public is_liked?: boolean;\n  public is_disliked?: boolean;\n  public is_hearted?: boolean;\n\n  public voice_reply_container?: VoiceReplyContainerView | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.comment_id = data.commentId;\n    this.is_pinned = !!data.pinnedText;\n\n    this.keys = {\n      comment: data.commentKey,\n      comment_surface: data.commentSurfaceKey,\n      toolbar_state: data.toolbarStateKey,\n      toolbar_surface: data.toolbarSurfaceKey,\n      shared: data.sharedKey\n    };\n  }\n\n  applyMutations(comment?: RawNode, toolbar_state?: RawNode, toolbar_surface?: RawNode, comment_surface?: RawNode) {\n    if (comment) {\n      this.content = Text.fromAttributed(comment.properties.content);\n      this.published_time = comment.properties.publishedTime;\n      this.author_is_channel_owner = !!comment.author.isCreator;\n      this.creator_thumbnail_url = comment.toolbar.creatorThumbnailUrl;\n      \n      this.like_count = comment.toolbar.likeCountNotliked ? comment.toolbar.likeCountNotliked : '0';\n      this.like_count_liked = comment.toolbar.likeCountLiked ? comment.toolbar.likeCountLiked : '0';\n      this.like_count_a11y = comment.toolbar.likeCountA11y;\n      this.like_active_tooltip = comment.toolbar.likeActiveTooltip;\n      this.like_inactive_tooltip = comment.toolbar.likeInactiveTooltip;\n      this.dislike_active_tooltip = comment.toolbar.dislikeActiveTooltip;\n      this.dislike_inactive_tooltip = comment.toolbar.dislikeInactiveTooltip;\n      this.like_button_a11y = comment.toolbar.likeButtonA11y;\n      this.heart_active_tooltip = comment.toolbar.heartActiveTooltip;\n      this.reply_count_a11y = comment.toolbar.replyCountA11y;\n      this.reply_count = comment.toolbar.replyCount ? comment.toolbar.replyCount : '0';\n\n      this.is_member = !!comment.author.sponsorBadgeUrl;\n\n      if (Reflect.has(comment.author, 'sponsorBadgeUrl')) {\n        this.member_badge = {\n          url: comment.author.sponsorBadgeUrl,\n          a11y: comment.author.A11y\n        };\n      }\n\n      this.author = new Author({\n        simpleText: comment.author.displayName,\n        navigationEndpoint: comment.avatar.endpoint\n      }, comment.author, comment.avatar.image, comment.author.channelId);\n    }\n\n    if (toolbar_state) {\n      this.is_hearted = toolbar_state.heartState === 'TOOLBAR_HEART_STATE_HEARTED';\n      this.is_liked = toolbar_state.likeState === 'TOOLBAR_LIKE_STATE_LIKED';\n      this.is_disliked = toolbar_state.likeState === 'TOOLBAR_LIKE_STATE_DISLIKED';\n    }\n\n    if (toolbar_surface) {\n      if ('prepareAccountCommand' in toolbar_surface) {\n        this.prepare_account_command = new NavigationEndpoint(toolbar_surface.prepareAccountCommand);\n      } else {\n        this.like_command = new NavigationEndpoint(toolbar_surface.likeCommand);\n        this.dislike_command = new NavigationEndpoint(toolbar_surface.dislikeCommand);\n        this.unlike_command = new NavigationEndpoint(toolbar_surface.unlikeCommand);\n        this.undislike_command = new NavigationEndpoint(toolbar_surface.undislikeCommand);\n        this.reply_command = new NavigationEndpoint(toolbar_surface.replyCommand);\n      }\n    }\n\n    if (comment_surface) {\n      if ('voiceReplyContainerViewModel' in comment_surface) {\n        this.voice_reply_container = Parser.parseItem(comment_surface.voiceReplyContainerViewModel, VoiceReplyContainerView);\n      }\n    }\n  }\n\n  /**\n   * Likes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the like command is not found.\n   */\n  async like(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.like_command)\n      throw new InnertubeError('Like command not found.');\n\n    if (this.is_liked)\n      throw new InnertubeError('This comment is already liked.', { comment_id: this.comment_id });\n\n    return this.like_command.call(this.#actions);\n  }\n\n  /**\n   * Dislikes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the dislike command is not found.\n   */\n  async dislike(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.dislike_command)\n      throw new InnertubeError('Dislike command not found.');\n\n    if (this.is_disliked)\n      throw new InnertubeError('This comment is already disliked.', { comment_id: this.comment_id });\n\n    return this.dislike_command.call(this.#actions);\n  }\n\n  /**\n   * Unlikes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the unlike command is not found.\n   */\n  async unlike(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.unlike_command)\n      throw new InnertubeError('Unlike command not found.');\n\n    if (!this.is_liked)\n      throw new InnertubeError('This comment is not liked.', { comment_id: this.comment_id });\n\n    return this.unlike_command.call(this.#actions);\n  }\n\n  /**\n   * Undislikes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the undislike command is not found.\n   */\n  async undislike(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.undislike_command)\n      throw new InnertubeError('Undislike command not found.');\n\n    if (!this.is_disliked)\n      throw new InnertubeError('This comment is not disliked.', { comment_id: this.comment_id });\n\n    return this.undislike_command.call(this.#actions);\n  }\n\n  /**\n   * Replies to the comment.\n   * @param comment_text - The text of the reply.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the reply command is not found.\n   */\n  async reply(comment_text: string): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.reply_command)\n      throw new InnertubeError('Reply command not found.');\n\n    const dialog = this.reply_command.dialog?.as(CommentReplyDialog);\n\n    if (!dialog)\n      throw new InnertubeError('Reply dialog not found.');\n\n    const reply_button = dialog.reply_button;\n\n    if (!reply_button)\n      throw new InnertubeError('Reply button not found in the dialog.');\n\n    if (!reply_button.endpoint)\n      throw new InnertubeError('Reply button endpoint not found.');\n\n    return reply_button.endpoint.call(this.#actions, { commentText: comment_text });\n  }\n\n  /**\n   * Translates the comment to the specified target language.\n   * @param target_language - The target language to translate the comment to, e.g. 'en', 'ja'.\n   * @returns Resolves to an ApiResponse object with the translated content, if available.\n   * @throws if the Actions instance is not set for this comment or if the comment content is not found.\n   */\n  async translate(target_language: string): Promise<ApiResponse & { content?: string }> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.content)\n      throw new InnertubeError('Comment content not found.', { comment_id: this.comment_id });\n\n    // Emojis must be removed otherwise InnerTube throws a 400 status code at us.\n    const text = this.content.toString().replace(/[^\\p{L}\\p{N}\\p{P}\\p{Z}]/gu, '');\n\n    const payload = { text, target_language };\n\n    const action = ProtoUtils.encodeCommentActionParams(22, payload);\n    const response = await this.#actions.execute('comment/perform_comment_action', { action });\n\n    // XXX: Should move this to Parser#parseResponse\n    const mutations = response.data.frameworkUpdates?.entityBatchUpdate?.mutations;\n    const content = mutations?.[0]?.payload?.commentEntityPayload?.translatedContent?.content;\n\n    return { ...response, content };\n  }\n\n  setActions(actions: Actions | undefined) {\n    this.#actions = actions;\n  }\n}", "\nimport { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport ContinuationItem from '../ContinuationItem.js';\nimport CommentView from './CommentView.js';\nimport CommentReplies from './CommentReplies.js';\nimport { InnertubeError } from '../../../utils/Utils.js';\nimport { observe, YTNode } from '../../helpers.js';\n\nimport type { RawNode } from '../../index.js';\nimport type Actions from '../../../core/Actions.js';\nimport type { Memo, ObservedArray } from '../../helpers.js';\n\nexport default class CommentThread extends YTNode {\n  static type = 'CommentThread';\n  \n  public comment: CommentView | null;\n  public replies?: ObservedArray<CommentView>;\n  public comment_replies_data: CommentReplies | null;\n  public is_moderated_elq_comment: boolean;\n  public has_replies: boolean;\n  \n  #actions?: Actions;\n  #continuation?: ContinuationItem;\n\n  constructor(data: RawNode) {\n    super();\n    this.comment = Parser.parseItem(data.commentViewModel, CommentView);\n    this.comment_replies_data = Parser.parseItem(data.replies, CommentReplies);\n    this.is_moderated_elq_comment = data.isModeratedElqComment;\n    this.has_replies = !!this.comment_replies_data;\n  }\n\n  get has_continuation(): boolean {\n    if (!this.replies)\n      throw new InnertubeError('Cannot determine if there is a continuation because this thread\\'s replies have not been loaded.');\n    return !!this.#continuation;\n  }\n\n  /**\n   * Retrieves replies to this comment thread.\n   */\n  async getReplies(): Promise<CommentThread> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this thread.');\n\n    if (!this.comment_replies_data)\n      throw new InnertubeError('This comment has no replies.', this);\n\n    const continuation = this.comment_replies_data.contents?.firstOfType(ContinuationItem);\n\n    if (!continuation)\n      throw new InnertubeError('Replies continuation not found.');\n\n    const response = await continuation.endpoint.call(this.#actions, { parse: true });\n\n    if (!response.on_response_received_endpoints_memo)\n      throw new InnertubeError('Unexpected response.', response);\n\n    this.replies = this.#getPatchedReplies(response.on_response_received_endpoints_memo);\n    this.#continuation = response.on_response_received_endpoints_memo.getType(ContinuationItem)[0];\n\n    return this;\n  }\n\n  /**\n   * Retrieves next batch of replies.\n   */\n  async getContinuation(): Promise<CommentThread> {\n    if (!this.replies)\n      throw new InnertubeError('Cannot retrieve continuation because this thread\\'s replies have not been loaded.');\n\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this thread.');\n\n    const load_more_button = this.#continuation.button?.as(Button);\n\n    if (!load_more_button)\n      throw new InnertubeError('\"Load more\" button not found.');\n\n    const response = await load_more_button.endpoint.call(this.#actions, { parse: true });\n\n    if (!response.on_response_received_endpoints_memo)\n      throw new InnertubeError('Unexpected response.', response);\n\n    this.replies = this.#getPatchedReplies(response.on_response_received_endpoints_memo);\n    this.#continuation = response.on_response_received_endpoints_memo.getType(ContinuationItem)[0];\n\n    return this;\n  }\n\n  setActions(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  #getPatchedReplies(data: Memo): ObservedArray<CommentView> {\n    return observe(data.getType(CommentView).map((comment) => {\n      comment.setActions(this.#actions);\n      return comment;\n    }));\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class PdgCommentChip extends YTNode {\n  static type = 'PdgCommentChip';\n\n  text: Text;\n  color_pallette: {\n    background_color?: string;\n    foreground_title_color?: string;\n  };\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.chipText);\n    this.color_pallette = {\n      background_color: data.chipColorPalette?.backgroundColor,\n      foreground_title_color: data.chipColorPalette?.foregroundTitleColor\n    };\n\n    if (Reflect.has(data, 'chipIcon') && Reflect.has(data.chipIcon, 'iconType')) {\n      this.icon_type = data.chipIcon.iconType;\n    }\n  }\n}", "import Thumbnail from '../misc/Thumbnail.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class SponsorCommentBadge extends YTNode {\n  static type = 'SponsorCommentBadge';\n\n  custom_badge: Thumbnail[];\n  tooltip: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.custom_badge = Thumbnail.fromResponse(data.customBadge);\n    this.tooltip = data.tooltip;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class CompactChannel extends YTNode {\n  static type = 'CompactChannel';\n\n  title: Text;\n  channel_id: string;\n  thumbnail: Thumbnail[];\n  display_name: Text;\n  video_count: Text;\n  subscriber_count: Text;\n  endpoint: NavigationEndpoint;\n  tv_banner: Thumbnail[];\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.channel_id = data.channelId;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.display_name = new Text(data.displayName);\n    this.video_count = new Text(data.videoCountText);\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.tv_banner = Thumbnail.fromResponse(data.tvBanner);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlaylistCustomThumbnail extends YTNode {\n  static type = 'PlaylistCustomThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlaylistVideoThumbnail extends YTNode {\n  static type = 'PlaylistVideoThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport PlaylistCustomThumbnail from './PlaylistCustomThumbnail.js';\nimport PlaylistVideoThumbnail from './PlaylistVideoThumbnail.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Playlist extends YTNode {\n  static type = 'Playlist';\n\n  id: string;\n  title: Text;\n  author: Text | Author;\n  thumbnails: Thumbnail[];\n  thumbnail_renderer?: PlaylistVideoThumbnail | PlaylistCustomThumbnail;\n  video_count: Text;\n  video_count_short: Text;\n  first_videos: ObservedArray<YTNode>;\n  share_url: string | null;\n  menu: YTNode;\n  badges: ObservedArray<YTNode>;\n  endpoint: NavigationEndpoint;\n  thumbnail_overlays: ObservedArray<YTNode>;\n  view_playlist?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n\n    this.author = data.shortBylineText?.simpleText ?\n      new Text(data.shortBylineText) :\n      new Author(data.longBylineText, data.ownerBadges, null);\n\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail || { thumbnails: data.thumbnails.map((th: any) => th.thumbnails).flat(1) });\n    this.video_count = new Text(data.thumbnailText);\n    this.video_count_short = new Text(data.videoCountShortText);\n    this.first_videos = Parser.parseArray(data.videos);\n    this.share_url = data.shareUrl || null;\n    this.menu = Parser.parseItem(data.menu);\n    this.badges = Parser.parseArray(data.ownerBadges);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n\n    if (Reflect.has(data, 'thumbnailRenderer')) {\n      this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer, [ PlaylistVideoThumbnail, PlaylistCustomThumbnail ]) || undefined;\n    }\n\n    if (Reflect.has(data, 'viewPlaylistText')) {\n      this.view_playlist = new Text(data.viewPlaylistText);\n    }\n  }\n}", "import type { RawNode } from '../index.js';\nimport Playlist from './Playlist.js';\n\nexport default class CompactMix extends Playlist {\n  static type = 'CompactMix';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Author from './misc/Author.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Menu from './menus/Menu.js';\nimport { timeToSeconds } from '../../utils/Utils.js';\n\nexport default class CompactMovie extends YTNode {\n  static type = 'CompactMovie';\n\n  id: string;\n  title: Text;\n  top_metadata_items: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  endpoint: NavigationEndpoint;\n  badges: ObservedArray<YTNode>;\n  use_vertical_poster: boolean;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    const overlay_time_status = data.thumbnailOverlays\n      .find((overlay: RawNode) => overlay.thumbnailOverlayTimeStatusRenderer)\n      ?.thumbnailOverlayTimeStatusRenderer.text || 'N/A';\n\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n\n    this.top_metadata_items = new Text(data.topMetadataItems);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.shortBylineText);\n\n    const durationText = data.lengthText ? new Text(data.lengthText).toString() : new Text(overlay_time_status).toString();\n\n    this.duration = {\n      text: durationText,\n      seconds: timeToSeconds(durationText)\n    };\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.badges = Parser.parseArray(data.badges);\n    this.use_vertical_poster = data.useVerticalPoster;\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import type { RawNode } from '../index.js';\nimport Playlist from './Playlist.js';\n\nclass CompactPlaylist extends Playlist {\n  static type = 'CompactPlaylist';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}\n\nexport default CompactPlaylist;", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class CompactStation extends YTNode {\n  static type = 'CompactStation';\n\n  title: Text;\n  description: Text;\n  video_count: Text;\n  endpoint: NavigationEndpoint;\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.video_count = new Text(data.videoCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\n\nexport default class CompositeVideoPrimaryInfo extends YTNode {\n  static type = 'CompositeVideoPrimaryInfo';\n\n  constructor(_data: RawNode) {\n    super();\n  }\n}\n", "import { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class ConfirmDialog extends YTNode {\n  static type = 'ConfirmDialog';\n\n  title: Text;\n  confirm_button: Button | null;\n  cancel_button: Button | null;\n  dialog_messages: Text[];\n\n  constructor (data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.confirm_button = Parser.parseItem(data.confirmButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.dialog_messages = data.dialogMessages.map((txt: RawNode) => new Text(txt));\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport { Parser } from '../index.js';\nimport AvatarStackView from './AvatarStackView.js';\nimport BadgeView from './BadgeView.js';\n\nexport type MetadataRow = {\n  metadata_parts?: {\n    text: Text | null;\n    avatar_stack: AvatarStackView | null;\n    enable_truncation?: boolean;\n  }[];\n  badges: ObservedArray<BadgeView>\n};\n\nexport default class ContentMetadataView extends YTNode {\n  static type = 'ContentMetadataView';\n\n  public metadata_rows: MetadataRow[];\n  public delimiter: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.metadata_rows = data.metadataRows?.map((row: RawNode) => ({\n      metadata_parts: row.metadataParts?.map((part: RawNode) => ({\n        text: part.text ? Text.fromAttributed(part.text) : null,\n        avatar_stack: Parser.parseItem(part.avatarStack, AvatarStackView),\n        enable_truncation: data.enableTruncation\n      })),\n      badges: Parser.parseArray(row.badges, BadgeView)\n    })) || [];\n\n    this.delimiter = data.delimiter;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class Message extends YTNode {\n  static type = 'Message';\n\n  text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Message from './Message.js';\n\nexport default class ConversationBar extends YTNode {\n  static type = 'ConversationBar';\n\n  availability_message: Message | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.availability_message = Parser.parseItem(data.availabilityMessage, Message);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\n\nexport default class CopyLink extends YTNode {\n  static type = 'CopyLink';\n\n  public copy_button: Button | null;\n  public short_url: string;\n  public style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.copy_button = Parser.parseItem(data.copyButton, Button);\n    this.short_url = data.shortUrl;\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text, Thumbnail } from '../misc.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport type Option = {\n  title: Text;\n  subtitle: Text;\n  leading_image: Thumbnail;\n  value: {\n    privacy_status_value?: string;\n  };\n  on_tap: NavigationEndpoint;\n  is_selected: boolean;\n};\n\nexport default class DropdownView extends YTNode {\n  static type = 'DropdownView';\n\n  public label: Text;\n  public placeholder_text: Text;\n  public disabled: boolean;\n  public options?: Option[];\n  public dropdown_type: string;\n  public id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.placeholder_text = new Text(data.placeholderText);\n    this.disabled = !!data.disabled;\n    this.dropdown_type = data.type;\n    this.id = data.id;\n\n    if (Reflect.has(data, 'options')) {\n      this.options = data.options.map((option: RawNode) => ({\n        title: new Text(option.title),\n        subtitle: new Text(option.subtitle),\n        leading_image: Thumbnail.fromResponse(option.leadingImage),\n        value: { privacy_status_value: option.value?.privacyStatusValue },\n        on_tap: new NavigationEndpoint(option.onTap),\n        is_selected: !!option.isSelected\n      }));\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport type DisplayProperties = {\n  isMultiline: boolean;\n  disableNewLines: boolean;\n};\n\nexport type ContentProperties = {\n  labelText: string;\n  placeholderText: string;\n  maxCharacterCount: number;\n};\n\nexport type InitialState = {\n  isFocused: boolean;\n};\n\nexport type FormFieldMetadata = {\n  formId: string;\n  fieldId: string;\n};\n\nexport default class TextFieldView extends YTNode {\n  static type = 'TextFieldView';\n\n  public display_properties?: DisplayProperties;\n  public content_properties?: ContentProperties;\n  public initial_state?: InitialState;\n  public form_field_metadata?: FormFieldMetadata;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'displayProperties')) {\n      this.display_properties = {\n        isMultiline: !!data.displayProperties.isMultiline,\n        disableNewLines: !!data.displayProperties.disableNewLines\n      };\n    }\n\n    if (Reflect.has(data, 'contentProperties')) {\n      this.content_properties = {\n        labelText: data.contentProperties.labelText,\n        placeholderText: data.contentProperties.placeholderText,\n        maxCharacterCount: data.contentProperties.maxCharacterCount\n      };\n    }\n\n    if (Reflect.has(data, 'initialState')) {\n      this.initial_state = {\n        isFocused: !!data.initialState.isFocused\n      };\n    }\n\n    if (Reflect.has(data, 'formFieldMetadata')) {\n      this.form_field_metadata = {\n        formId: data.formFieldMetadata.formId,\n        fieldId: data.formFieldMetadata.fieldId\n      };\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DropdownView from './DropdownView.js';\nimport TextFieldView from './TextFieldView.js';\n\nexport default class CreatePlaylistDialogFormView extends YTNode {\n  static type = 'CreatePlaylistDialogFormView';\n\n  public playlist_title: TextFieldView | null;\n  public playlist_visibility: DropdownView | null;\n  public disable_playlist_collaborate: boolean;\n  public create_playlist_params_collaboration_enabled: string;\n  public create_playlist_params_collaboration_disabled: string;\n  public video_ids: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.playlist_title = Parser.parseItem(data.playlistTitle, TextFieldView);\n    this.playlist_visibility = Parser.parseItem(data.playlistVisibility, DropdownView);\n    this.disable_playlist_collaborate = !!data.disablePlaylistCollaborate;\n    this.create_playlist_params_collaboration_enabled = data.createPlaylistParamsCollaborationEnabled;\n    this.create_playlist_params_collaboration_disabled = data.createPlaylistParamsCollaborationDisabled;\n    this.video_ids = data.videoIds;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AvatarView from './AvatarView.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class DecoratedAvatarView extends YTNode {\n  static type = 'DecoratedAvatarView';\n\n  public avatar: AvatarView | null;\n  public a11y_label: string;\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.avatar = Parser.parseItem(data.avatar, AvatarView);\n    this.a11y_label = data.a11yLabel;\n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class HeatMarker extends YTNode {\n  static type = 'HeatMarker';\n\n  time_range_start_millis: number;\n  marker_duration_millis: number;\n  heat_marker_intensity_score_normalized: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.time_range_start_millis = Number.parseInt(data.startMillis, 10);\n    this.marker_duration_millis = Number.parseInt(data.durationMillis, 10);\n    this.heat_marker_intensity_score_normalized = data.intensityScoreNormalized;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class TimedMarkerDecoration extends YTNode {\n  static type = 'TimedMarkerDecoration';\n\n  visible_time_range_start_millis: number;\n  visible_time_range_end_millis: number;\n  decoration_time_millis: number;\n  label: Text;\n  icon: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.visible_time_range_start_millis = data.visibleTimeRangeStartMillis;\n    this.visible_time_range_end_millis = data.visibleTimeRangeEndMillis;\n    this.decoration_time_millis = data.decorationTimeMillis;\n    this.label = new Text(data.label);\n    this.icon = data.icon;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport HeatMarker from './HeatMarker.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport TimedMarkerDecoration from './TimedMarkerDecoration.js';\n\nexport default class Heatmap extends YTNode {\n  static type = 'Heatmap';\n\n  max_height_dp: number;\n  min_height_dp: number;\n  show_hide_animation_duration_millis: number;\n  heat_markers: ObservedArray<HeatMarker>;\n  heat_markers_decorations: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.max_height_dp = data.maxHeightDp;\n    this.min_height_dp = data.minHeightDp;\n    this.show_hide_animation_duration_millis = data.showHideAnimationDurationMillis;\n    this.heat_markers = Parser.parseArray(data.heatMarkers, HeatMarker);\n    this.heat_markers_decorations = Parser.parseArray(data.heatMarkersDecorations, TimedMarkerDecoration);\n  }\n}", "import { YTNode, observe, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Chapter from './Chapter.js';\nimport Heatmap from './Heatmap.js';\n\nexport class Marker extends YTNode {\n  static type = 'Marker';\n\n  marker_key: string;\n  value: {\n    heatmap?: Heatmap | null;\n    chapters?: ObservedArray<Chapter>;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.marker_key = data.key;\n\n    this.value = {};\n\n    if (Reflect.has(data, 'value')) {\n      if (Reflect.has(data.value, 'heatmap')) {\n        this.value.heatmap = Parser.parseItem(data.value.heatmap, Heatmap);\n      }\n\n      if (Reflect.has(data.value, 'chapters')) {\n        this.value.chapters = Parser.parseArray(data.value.chapters, Chapter);\n      }\n    }\n  }\n}\n\nexport default class MultiMarkersPlayerBar extends YTNode {\n  static type = 'MultiMarkersPlayerBar';\n\n  markers_map: ObservedArray<Marker>;\n\n  constructor(data: RawNode) {\n    super();\n    this.markers_map = observe(data.markersMap?.map((marker: {\n      key: string;\n      value: {\n        [key: string]: RawNode\n      }\n    }) => new Marker(marker)) || []);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport MultiMarkersPlayerBar from './MultiMarkersPlayerBar.js';\n\nexport default class DecoratedPlayerBar extends YTNode {\n  static type = 'DecoratedPlayerBar';\n\n  player_bar: MultiMarkersPlayerBar | null;\n  player_bar_action_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.player_bar = Parser.parseItem(data.playerBar, MultiMarkersPlayerBar);\n    this.player_bar_action_button = Parser.parseItem(data.playerBarActionButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class DefaultPromoPanel extends YTNode {\n  static type = 'DefaultPromoPanel';\n\n  title: Text;\n  description: Text;\n  endpoint: NavigationEndpoint;\n  large_form_factor_background_thumbnail: YTNode;\n  small_form_factor_background_thumbnail: YTNode;\n  scrim_color_values: number[];\n  min_panel_display_duration_ms: number;\n  min_video_play_duration_ms: number;\n  scrim_duration: number;\n  metadata_order: string;\n  panel_layout: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.large_form_factor_background_thumbnail = Parser.parseItem(data.largeFormFactorBackgroundThumbnail);\n    this.small_form_factor_background_thumbnail = Parser.parseItem(data.smallFormFactorBackgroundThumbnail);\n    this.scrim_color_values = data.scrimColorValues;\n    this.min_panel_display_duration_ms = data.minPanelDisplayDurationMs;\n    this.min_video_play_duration_ms = data.minVideoPlayDurationMs;\n    this.scrim_duration = data.scrimDuration;\n    this.metadata_order = data.metadataOrder;\n    this.panel_layout = data.panelLayout;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport EngagementPanelSectionList from './EngagementPanelSectionList.js';\nimport Text from './misc/Text.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class DescriptionPreviewView extends YTNode {\n  static type = 'DescriptionPreviewView';\n\n  public description?: Text;\n  public max_lines?: number;\n  public truncation_text?: Text;\n  public always_show_truncation_text: boolean;\n  public more_endpoint?: {\n    show_engagement_panel_endpoint: {\n      engagement_panel: EngagementPanelSectionList | null,\n      engagement_panel_popup_type: string;\n      identifier: {\n        surface: string,\n        tag: string\n      }\n    }\n  };\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n\n    if ('description' in data)\n      this.description = Text.fromAttributed(data.description);\n\n    if ('maxLines' in data)\n      this.max_lines = parseInt(data.maxLines);\n\n    if ('truncationText' in data)\n      this.truncation_text = Text.fromAttributed(data.truncationText);\n    \n    this.always_show_truncation_text = !!data.alwaysShowTruncationText;\n\n    // @TODO: Do something about this.\n    if (data.rendererContext.commandContext?.onTap?.innertubeCommand?.showEngagementPanelEndpoint) {\n      const endpoint = data.rendererContext.commandContext?.onTap?.innertubeCommand?.showEngagementPanelEndpoint;\n\n      this.more_endpoint = {\n        show_engagement_panel_endpoint: {\n          engagement_panel: Parser.parseItem(endpoint.engagementPanel, EngagementPanelSectionList),\n          engagement_panel_popup_type: endpoint.engagementPanelPresentationConfigs.engagementPanelPopupPresentationConfig.popupType,\n          identifier: {\n            surface: endpoint.identifier.surface,\n            tag: endpoint.identifier.tag\n          }\n        }\n      };\n    }\n    \n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class DialogHeaderView extends YTNode {\n  static type = 'DialogHeaderView';\n\n  public headline: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.headline = Text.fromAttributed(data.headline);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class PanelFooterView extends YTNode {\n  static type = 'PanelFooterView';\n\n  public primary_button: ButtonView | null;\n  public secondary_button: ButtonView | null;\n  public should_hide_divider: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.primary_button = Parser.parseItem(data.primaryButton, ButtonView);\n    this.secondary_button = Parser.parseItem(data.secondaryButton, ButtonView);\n    this.should_hide_divider = !!data.shouldHideDivider;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport PanelFooterView from './PanelFooterView.js';\n\nexport default class FormFooterView extends YTNode {\n  static type = 'FormFooterView';\n\n  public panel_footer: PanelFooterView | null;\n  public form_id: string;\n  public container_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_footer = Parser.parseItem(data.panelFooter, PanelFooterView);\n    this.form_id = data.formId;\n    this.container_type = data.containerType;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../types/RawResponse.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser } from '../index.js';\n\nimport ListItemView from './ListItemView.js';\n\nexport default class ListView extends YTNode {\n  static type = 'ListView';\n\n  public items: ObservedArray<ListItemView>;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.items = Parser.parseArray(data.listItems, ListItemView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DialogHeaderView from './DialogHeaderView.js';\nimport FormFooterView from './FormFooterView.js';\nimport CreatePlaylistDialogFormView from './CreatePlaylistDialogFormView.js';\nimport ListView from './ListView.js';\nimport PanelFooterView from './PanelFooterView.js';\n\nexport default class DialogView extends YTNode {\n  static type = 'DialogView';\n\n  public header: DialogHeaderView | null;\n  public footer: FormFooterView | PanelFooterView | null;\n  public custom_content: CreatePlaylistDialogFormView | ListView | null;\n\n  constructor (data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, DialogHeaderView);\n    this.footer = Parser.parseItem(data.footer, [ FormFooterView, PanelFooterView ]);\n    this.custom_content = Parser.parseItem(data.customContent, [ CreatePlaylistDialogFormView, ListView ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class DidYouMean extends YTNode {\n  static type = 'DidYouMean';\n\n  text: string;\n  corrected_query: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.didYouMean).toString();\n    this.corrected_query = new Text(data.correctedQuery);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.correctedQueryEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class DismissableDialogContentSection extends YTNode {\n  static type = 'DismissableDialogContentSection';\n\n  public title: Text;\n  public subtitle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n  }\n}\n", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DismissableDialogContentSection from './DismissableDialogContentSection.js';\n\nexport default class DismissableDialog extends YTNode {\n  static type = 'DismissableDialog';\n\n  public title: string;\n  public sections: ObservedArray<DismissableDialogContentSection>;\n  public metadata: YTNode | null;\n  public display_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.sections = Parser.parseArray(data.sections, DismissableDialogContentSection);\n    this.metadata = Parser.parseItem(data.metadata);\n    this.display_style = data.displayStyle;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class DynamicTextView extends YTNode {\n  static type = 'DynamicTextView';\n\n  text: Text;\n  max_lines: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = Text.fromAttributed(data.text);\n    this.max_lines = parseInt(data.maxLines);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ChildElement extends YTNode {\n  static type = 'ChildElement';\n\n  text?: string;\n  properties;\n  child_elements?: ChildElement[];\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'type') && Reflect.has(data.type, 'textType')) {\n      this.text = data.type.textType.text?.content;\n    }\n\n    this.properties = data.properties;\n\n    if (Reflect.has(data, 'childElements')) {\n      this.child_elements = data.childElements.map((el: RawNode) => new ChildElement(el));\n    }\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport ChildElement from './misc/ChildElement.js';\nimport { type ObservedArray, YTNode, observe } from '../helpers.js';\n\nexport default class Element extends YTNode {\n  static type = 'Element';\n\n  model?: YTNode;\n  child_elements?: ObservedArray<ChildElement>;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'elementRenderer')) {\n      return Parser.parseItem(data, Element) as Element;\n    }\n\n    const type = data.newElement.type.componentType;\n\n    this.model = Parser.parseItem(type?.model);\n\n    if (Reflect.has(data, 'newElement') && Reflect.has(data.newElement, 'childElements')) {\n      this.child_elements = observe(data.newElement.childElements?.map((el: RawNode) => new ChildElement(el)) || []);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\nexport default class EmergencyOnebox extends YTNode {\n  static type = 'EmergencyOnebox';\n\n  title: Text;\n  first_option: YTNode;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.first_option = Parser.parseItem(data.firstOption);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class EmojiPickerCategory extends YTNode {\n  static type = 'EmojiPickerCategory';\n\n  category_id: string;\n  title: Text;\n  emoji_ids: string[];\n  image_loading_lazy: boolean;\n  category_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.category_id = data.categoryId;\n    this.title = new Text(data.title);\n    this.emoji_ids = data.emojiIds;\n    this.image_loading_lazy = !!data.imageLoadingLazy;\n    this.category_type = data.categoryType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class EmojiPickerCategoryButton extends YTNode {\n  static type = 'EmojiPickerCategoryButton';\n\n  category_id: string;\n  icon_type?: string;\n  tooltip: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.category_id = data.categoryId;\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon?.iconType;\n    }\n\n    this.tooltip = data.tooltip;\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class EmojiPickerUpsellCategory extends YTNode {\n  static type = 'EmojiPickerUpsellCategory';\n\n  category_id: string;\n  title: Text;\n  upsell: Text;\n  emoji_tooltip: string;\n  endpoint: NavigationEndpoint;\n  emoji_ids: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.category_id = data.categoryId;\n    this.title = new Text(data.title);\n    this.upsell = new Text(data.upsell);\n    this.emoji_tooltip = data.emojiTooltip;\n    this.endpoint = new NavigationEndpoint(data.command);\n    this.emoji_ids = data.emojiIds;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { AddToPlaylistServiceRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'playlist/get_add_to_playlist';\n\nexport default class AddToPlaylistServiceEndpoint extends YTNode implements IEndpoint<AddToPlaylistServiceRequest> {\n  static type = 'AddToPlaylistServiceEndpoint';\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): AddToPlaylistServiceRequest {\n    const request: AddToPlaylistServiceRequest = {};\n\n    request.videoIds = this.#data.videoIds ? this.#data.videoIds : [ this.#data.videoId ];\n    \n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    request.excludeWatchLater = !!this.#data.excludeWatchLater;\n\n    return request;\n  }\n}", "import type { RawNode } from '../../index.js';\nimport AddToPlaylistServiceEndpoint from './AddToPlaylistServiceEndpoint.js';\n\nexport default class AddToPlaylistEndpoint extends AddToPlaylistServiceEndpoint {\n  static type = 'AddToPlaylistEndpoint';\n\n  constructor (data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { BrowseRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'browse';\n\nexport default class BrowseEndpoint extends YTNode implements IEndpoint<BrowseRequest> {\n  static type = 'BrowseEndpoint';\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): BrowseRequest {\n    const request: BrowseRequest = {};\n\n    if (this.#data.browseId)\n      request.browseId = this.#data.browseId;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.query)\n      request.query = this.#data.query;\n\n    if (this.#data.browseId === 'FEsubscriptions') {\n      request.subscriptionSettingsState = this.#data.subscriptionSettingsState || 'MY_SUBS_SETTINGS_STATE_LAYOUT_FORMAT_LIST';\n    }\n\n    if (this.#data.browseId === 'SPaccount_playback') {\n      request.formData = this.#data.formData || {\n        accountSettingsFormData: {\n          flagCaptionsDefaultOff: false,\n          flagAutoCaptionsDefaultOn: false,\n          flagDisableInlinePreview: false,\n          flagAudioDescriptionDefaultOn: false\n        }\n      };\n    }\n\n    if (this.#data.browseId === 'FEwhat_to_watch') {\n      if (this.#data.browseRequestSupportedMetadata)\n        request.browseRequestSupportedMetadata = this.#data.browseRequestSupportedMetadata;\n      if (this.#data.inlineSettingStatus)\n        request.inlineSettingStatus = this.#data.inlineSettingStatus;\n    }\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { CreateCommentRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'comment/create_comment';\n\nexport default class CreateCommentEndpoint extends YTNode implements IEndpoint<CreateCommentRequest> {\n  static type = 'CreateCommentEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): CreateCommentRequest {\n    const request: CreateCommentRequest = {};\n\n    if (this.#data.createCommentParams)\n      request.createCommentParams = this.#data.createCommentParams;\n\n    if (this.#data.commentText)\n      request.commentText = this.#data.commentText;\n\n    if (this.#data.attachedVideoId)\n      request.videoAttachment = { videoId: this.#data.attachedVideoId };\n    else if (this.#data.pollOptions)\n      request.pollAttachment = { choices: this.#data.pollOptions };\n    else if (this.#data.imageBlobId)\n      request.imageAttachment = { encryptedBlobId: this.#data.imageBlobId };\n    else if (this.#data.sharedPostId)\n      request.sharedPostAttachment = { postId: this.#data.sharedPostId };\n\n    if (this.#data.accessRestrictions && typeof this.#data.accessRestrictions === 'number') {\n      const restriction = this.#data.accessRestrictions === 1 ? 'RESTRICTION_TYPE_EVERYONE' : 'RESTRICTION_TYPE_SPONSORS_ONLY';\n      request.accessRestrictions = { restriction };\n    }\n\n    if (this.#data.botguardResponse)\n      request.botguardResponse = this.#data.botguardResponse;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { CreatePlaylistServiceRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'playlist/create';\n\nexport default class CreatePlaylistServiceEndpoint extends YTNode implements IEndpoint<CreatePlaylistServiceRequest> {\n  static type = 'CreatePlaylistServiceEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): CreatePlaylistServiceRequest {\n    const request: CreatePlaylistServiceRequest = {};\n  \n    if (this.#data.title)\n      request.title = this.#data.title;\n\n    if (this.#data.privacyStatus)\n      request.privacyStatus = this.#data.privacyStatus;\n\n    if (this.#data.description)\n      request.description = this.#data.description;\n\n    if (this.#data.videoIds)\n      request.videoIds = this.#data.videoIds;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.sourcePlaylistId)\n      request.sourcePlaylistId = this.#data.sourcePlaylistId;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { DeletePlaylistServiceRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'playlist/delete';\n\nexport default class DeletePlaylistEndpoint extends YTNode implements IEndpoint<DeletePlaylistServiceRequest> {\n  static type = 'DeletePlaylistEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): DeletePlaylistServiceRequest {\n    const request: DeletePlaylistServiceRequest = {};\n\n    if (this.#data.playlistId)\n      request.playlistId = this.#data.sourcePlaylistId;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { FeedbackRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'feedback';\n\nexport default class FeedbackEndpoint extends YTNode implements IEndpoint<FeedbackRequest> {\n  static type = 'FeedbackEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): FeedbackRequest {\n    const request: FeedbackRequest = {};\n\n    if (this.#data.feedbackToken)\n      request.feedbackTokens = [ this.#data.feedbackToken ];\n\n    if (this.#data.cpn)\n      request.feedbackContext = { cpn: this.#data.cpn };\n\n    request.isFeedbackTokenUnencrypted = !!this.#data.isFeedbackTokenUnencrypted;\n    request.shouldMerge = !!this.#data.shouldMerge;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { GetAccountsListInnertubeRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'account/accounts_list';\n\nexport default class GetAccountsListInnertubeEndpoint extends YTNode implements IEndpoint<GetAccountsListInnertubeRequest> {\n  static type = 'GetAccountsListInnertubeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): GetAccountsListInnertubeRequest {\n    const request: GetAccountsListInnertubeRequest = {};\n\n    if (this.#data.requestType) {\n      request.requestType = this.#data.requestType;\n      if (this.#data.requestType === 'ACCOUNTS_LIST_REQUEST_TYPE_CHANNEL_SWITCHER' || this.#data.requestType === 'ACCOUNTS_LIST_REQUEST_TYPE_IDENTITY_PROMPT') {\n        if (this.#data.nextUrl)\n          request.nextNavendpoint = {\n            urlEndpoint: {\n              url: this.#data.nextUrl\n            }\n          };\n      }\n    }\n\n    if (this.#data.channelSwitcherQuery)\n      request.channelSwitcherQuery = this.#data.channelSwitcherQuery;\n\n    if (this.#data.triggerChannelCreation)\n      request.triggerChannelCreation = this.#data.triggerChannelCreation;\n\n    if (this.#data.contentOwnerConfig && this.#data.contentOwnerConfig.externalContentOwnerId)\n      request.contentOwnerConfig = this.#data.contentOwnerConfig;\n\n    if (this.#data.obfuscatedSelectedGaiaId)\n      request.obfuscatedSelectedGaiaId = this.#data.obfuscatedSelectedGaiaId;\n\n    if (this.#data.selectedSerializedDelegationContext)\n      request.selectedSerializedDelegationContext = this.#data.selectedSerializedDelegationContext;\n\n    if (this.#data.callCircumstance)\n      request.callCircumstance = this.#data.callCircumstance;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class HideEngagementPanelEndpoint extends YTNode {\n  static type = 'HideEngagementPanelEndpoint';\n\n  public panel_identifier: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_identifier = data.panelIdentifier;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, LikeRequest, RawNode } from '../../index.js';\n\nconst LIKE_API_PATH = 'like/like';\nconst DISLIKE_API_PATH = 'like/dislike';\nconst REMOVE_LIKE_API_PATH = 'like/removelike';\n\nexport default class LikeEndpoint extends YTNode implements IEndpoint<LikeRequest> {\n  static type = 'LikeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return this.#data.status === 'DISLIKE' ?\n      DISLIKE_API_PATH : this.#data.status === 'INDIFFERENT' ?\n        REMOVE_LIKE_API_PATH : LIKE_API_PATH;\n  }\n\n  public buildRequest(): LikeRequest {\n    const request: LikeRequest = {};\n\n    if (this.#data.target)\n      request.target = this.#data.target;\n\n    const params = this.getParams();\n    if (params)\n      request.params = params;\n\n    return request;\n  }\n\n  public getParams(): string | undefined {\n    switch (this.#data.status) {\n      case 'LIKE':\n        return this.#data.likeParams;\n      case 'DISLIKE':\n        return this.#data.dislikeParams;\n      case 'INDIFFERENT':\n        return this.#data.removeLikeParams;\n      default:\n        return undefined;\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, LiveChatItemContextMenuRequest } from '../../index.js';\n\nconst API_PATH = 'live_chat/get_item_context_menu';\n\nexport default class LiveChatItemContextMenuEndpoint extends YTNode implements IEndpoint<LiveChatItemContextMenuRequest> {\n  static type = 'LiveChatItemContextMenuEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): LiveChatItemContextMenuRequest {\n    const request: LiveChatItemContextMenuRequest = {};\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, ModifyChannelNotificationPreferenceRequest, RawNode } from '../../index.js';\n\nconst API_PATH = 'notification/modify_channel_preference';\n\nexport default class ModifyChannelNotificationPreferenceEndpoint extends YTNode implements IEndpoint<ModifyChannelNotificationPreferenceRequest> {\n  static type = 'ModifyChannelNotificationPreferenceEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): ModifyChannelNotificationPreferenceRequest {\n    const request: ModifyChannelNotificationPreferenceRequest = {};\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.secondaryParams)\n      request.secondaryParams = this.#data.secondaryParams;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, PerformCommentActionRequest, RawNode } from '../../index.js';\n\nconst API_PATH = 'comment/perform_comment_action';\n\nexport default class PerformCommentActionEndpoint extends YTNode implements IEndpoint<PerformCommentActionRequest> {\n  static type = 'PerformCommentActionEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): PerformCommentActionRequest {\n    const request: PerformCommentActionRequest = {};\n\n    if (this.#data.actions)\n      request.actions = this.#data.actions;\n\n    if (this.#data.action)\n      request.actions = [ this.#data.action ];\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, PlaylistEditRequest, RawNode } from '../../index.js';\n\nconst API_PATH = 'browse/edit_playlist';\n\nexport default class PlaylistEditEndpoint extends YTNode implements IEndpoint<PlaylistEditRequest> {\n  static type = 'PlaylistEditEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): PlaylistEditRequest {\n    const request: PlaylistEditRequest = {};\n\n    if (this.#data.actions)\n      request.actions = this.#data.actions;\n \n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, WatchRequest } from '../../index.js';\n\nconst API_PATH = 'player';\n\nexport default class WatchEndpoint extends YTNode implements IEndpoint<WatchRequest> {\n  static type = 'WatchEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): WatchRequest {\n    const request: WatchRequest = {};\n\n    if (this.#data.videoId)\n      request.videoId = this.#data.videoId;\n\n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.index !== undefined || this.#data.playlistIndex !== undefined)\n      request.playlistIndex = this.#data.index || this.#data.playlistIndex;\n\n    if (this.#data.playerParams || this.#data.params)\n      request.params = this.#data.playerParams || this.#data.params;\n\n    if (this.#data.startTimeSeconds)\n      request.startTimeSecs = this.#data.startTimeSeconds;\n\n    if (this.#data.overrideMutedAtStart)\n      request.overrideMutedAtStart = this.#data.overrideMutedAtStart;\n\n    request.racyCheckOk = !!this.#data.racyCheckOk;\n    request.contentCheckOk = !!this.#data.contentCheckOk;\n\n    return request;\n  }\n}", "import type { RawNode } from '../../index.js';\nimport WatchEndpoint from './WatchEndpoint.js';\n\nexport default class PrefetchWatchCommand extends WatchEndpoint {\n  static type = 'PrefetchWatchCommand';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, ReelWatchRequest } from '../../index.js';\n\nconst API_PATH = 'reel/reel_item_watch';\n\nexport default class ReelWatchEndpoint extends YTNode implements IEndpoint<ReelWatchRequest> {\n  static type = 'ReelWatchEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): ReelWatchRequest {\n    const request: ReelWatchRequest = {};\n\n    if (this.#data.videoId) {\n      request.playerRequest = {\n        videoId: this.#data.videoId\n      };\n    }\n    \n    if (request.playerRequest) {\n      if (this.#data.playerParams)\n        request.playerRequest.params = this.#data.playerParams;\n\n      if (this.#data.racyCheckOk)\n        request.playerRequest.racyCheckOk = !!this.#data.racyCheckOk;\n\n      if (this.#data.contentCheckOk)\n        request.playerRequest.contentCheckOk = !!this.#data.contentCheckOk;\n    }\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.inputType)\n      request.inputType = this.#data.inputType;\n\n    request.disablePlayerResponse = !!this.#data.disablePlayerResponse;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, SearchRequest } from '../../index.js';\n\nconst API_PATH = 'search';\n\nexport default class SearchEndpoint extends YTNode implements IEndpoint<SearchRequest> {\n  static type = 'SearchEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): SearchRequest {\n    const request: SearchRequest = {};\n    \n    if (this.#data.query)\n      request.query = this.#data.query;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.webSearchboxStatsUrl)\n      request.webSearchboxStatsUrl = this.#data.webSearchboxStatsUrl;\n\n    if (this.#data.suggestStats)\n      request.suggestStats = this.#data.suggestStats;\n  \n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, ShareEntityServiceRequest } from '../../index.js';\n\nconst API_PATH = 'share/get_share_panel';\n\nexport default class ShareEntityServiceEndpoint extends YTNode implements IEndpoint<ShareEntityServiceRequest> {\n  static type = 'ShareEntityServiceEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): ShareEntityServiceRequest {\n    const request: ShareEntityServiceRequest = {};\n\n    if (this.#data.serializedShareEntity)\n      request.serializedSharedEntity = this.#data.serializedShareEntity;\n\n    if (this.#data.clientParams)\n      request.clientParams = this.#data.clientParams;\n\n    return request;\n  }\n}", "import type { RawNode } from '../../index.js';\nimport ShareEntityServiceEndpoint from './ShareEntityServiceEndpoint.js';\n\nexport default class ShareEndpoint extends ShareEntityServiceEndpoint {\n  static type = 'ShareEndpoint';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import type { RawNode } from '../../index.js';\nimport ShareEntityServiceEndpoint from './ShareEntityServiceEndpoint.js';\n\nexport default class ShareEntityEndpoint extends ShareEntityServiceEndpoint {\n  static type = 'ShareEntityEndpoint';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowEngagementPanelEndpoint extends YTNode {\n  static type = 'ShowEngagementPanelEndpoint';\n\n  public panel_identifier: string;\n  public source_panel_identifier?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_identifier = data.panelIdentifier;\n    this.source_panel_identifier = data.sourcePanelIdentifier;\n  }\n}", "import { type ObservedArray, YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class SignalServiceEndpoint extends YTNode {\n  static type = 'SignalServiceEndpoint';\n\n  public actions?: ObservedArray<YTNode>;\n  public signal?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Array.isArray(data.actions)) {\n      this.actions = Parser.parseArray(data.actions.map((action: RawNode) => {\n        delete action.clickTrackingParams;\n        return action;\n      }));\n    }\n    this.signal = data.signal;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, SubscribeRequest } from '../../index.js';\n\nconst API_PATH = 'subscription/subscribe';\n\nexport default class SubscribeEndpoint extends YTNode implements IEndpoint<SubscribeRequest> {\n  static type = 'SubscribeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): SubscribeRequest {\n    const request: SubscribeRequest = {};\n\n    if (this.#data.channelIds)\n      request.channelIds = this.#data.channelIds;\n\n    if (this.#data.siloName)\n      request.siloName = this.#data.siloName;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.botguardResponse)\n      request.botguardResponse = this.#data.botguardResponse;\n\n    if (this.#data.feature)\n      request.clientFeature = this.#data.feature;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, UnsubscribeRequest } from '../../index.js';\n\nconst API_PATH = 'subscription/unsubscribe';\n\nexport default class UnsubscribeEndpoint extends YTNode implements IEndpoint<UnsubscribeRequest> {\n  static type = 'UnsubscribeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string{\n    return API_PATH;\n  }\n\n  public buildRequest(): UnsubscribeRequest {\n    const request: UnsubscribeRequest = {};\n\n    if (this.#data.channelIds)\n      request.channelIds = this.#data.channelIds;\n\n    if (this.#data.siloName)\n      request.siloName = this.#data.siloName;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, WatchNextRequest } from '../../index.js';\n\nconst API_PATH = 'next';\n\nexport default class WatchNextEndpoint extends YTNode implements IEndpoint<WatchNextRequest> {\n  static type = 'WatchNextEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): WatchNextRequest {\n    const request: WatchNextRequest = {};\n\n    if (this.#data.videoId)\n      request.videoId = this.#data.videoId;\n\n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.index !== undefined || this.#data.playlistIndex !== undefined)\n      request.playlistIndex = this.#data.index || this.#data.playlistIndex;\n\n    if (this.#data.playerParams || this.#data.params)\n      request.params = this.#data.playerParams || this.#data.params;\n\n    request.racyCheckOk = !!this.#data.racyCheckOk;\n    request.contentCheckOk = !!this.#data.contentCheckOk;\n\n    return request;\n  }\n}", "import { Parser } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class Endscreen extends YTNode {\n  static type = 'Endscreen';\n\n  elements: ObservedArray<YTNode>;\n  start_ms: string;\n\n  constructor(data: any) {\n    super();\n    this.elements = Parser.parseArray(data.elements);\n    this.start_ms = data.startMs;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class EndscreenElement extends YTNode {\n  static type = 'EndscreenElement';\n\n  style: string;\n  title: Text;\n  endpoint: NavigationEndpoint;\n  image?: Thumbnail[];\n  icon?: Thumbnail[];\n  metadata?: Text;\n  call_to_action?: Text;\n  hovercard_button?: YTNode;\n  is_subscribe?: boolean;\n  playlist_length?: Text;\n  thumbnail_overlays?: ObservedArray<YTNode>;\n  left: number;\n  top: number;\n  width: number;\n  aspect_ratio: number;\n  start_ms: number;\n  end_ms: number;\n  id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.style = data.style;\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n\n    if (Reflect.has(data, 'image')) {\n      this.image = Thumbnail.fromResponse(data.image);\n    }\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon = Thumbnail.fromResponse(data.icon);\n    }\n\n    if (Reflect.has(data, 'metadata')) {\n      this.metadata = new Text(data.metadata);\n    }\n\n    if (Reflect.has(data, 'callToAction')) {\n      this.call_to_action = new Text(data.callToAction);\n    }\n\n    if (Reflect.has(data, 'hovercardButton')) {\n      this.hovercard_button = Parser.parseItem(data.hovercardButton);\n    }\n\n    if (Reflect.has(data, 'isSubscribe')) {\n      this.is_subscribe = !!data.isSubscribe;\n    }\n\n    if (Reflect.has(data, 'playlistLength')) {\n      this.playlist_length = new Text(data.playlistLength);\n    }\n\n    if (Reflect.has(data, 'thumbnailOverlays')) {\n      this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    }\n\n    this.left = parseFloat(data.left);\n    this.width = parseFloat(data.width);\n    this.top = parseFloat(data.top);\n    this.aspect_ratio = parseFloat(data.aspectRatio);\n    this.start_ms = parseFloat(data.startMs);\n    this.end_ms = parseFloat(data.endMs);\n    this.id = data.id;\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class EndScreenPlaylist extends YTNode {\n  static type = 'EndScreenPlaylist';\n\n  id: string;\n  title: Text;\n  author: Text;\n  endpoint: NavigationEndpoint;\n  thumbnails: Thumbnail[];\n  video_count: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n    this.author = new Text(data.longBylineText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_count = new Text(data.videoCountText);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class EndScreenVideo extends YTNode {\n  static type = 'EndScreenVideo';\n\n  id: string;\n  title: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n  endpoint: NavigationEndpoint;\n  short_view_count: Text;\n  badges: ObservedArray<YTNode>;\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.shortBylineText, data.ownerBadges);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.short_view_count = new Text(data.shortViewCountText);\n    this.badges = Parser.parseArray(data.badges);\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: data.lengthInSeconds\n    };\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ExpandableTab extends YTNode {\n  static type = 'ExpandableTab';\n\n  title: string;\n  endpoint: NavigationEndpoint;\n  selected: boolean;\n  content: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.selected = data.selected;\n    this.content = Parser.parseItem(data.content);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class ExpandedShelfContents extends YTNode {\n  static type = 'ExpandedShelfContents';\n\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class FancyDismissibleDialog extends YTNode {\n  static type = 'FancyDismissibleDialog';\n\n  dialog_message: Text;\n  confirm_label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.dialog_message = new Text(data.dialogMessage);\n    this.confirm_label = new Text(data.confirmLabel);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChipCloudChip from './ChipCloudChip.js';\n\nexport default class FeedFilterChipBar extends YTNode {\n  static type = 'FeedFilterChipBar';\n\n  contents: ObservedArray<ChipCloudChip>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, ChipCloudChip);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class FeedNudge extends YTNode {\n  static type = 'FeedNudge';\n\n  title: Text;\n  subtitle: Text;\n  endpoint: NavigationEndpoint;\n  apply_modernized_style: boolean;\n  trim_style: string;\n  background_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.endpoint = new NavigationEndpoint(data.impressionEndpoint);\n    this.apply_modernized_style = data.applyModernizedStyle;\n    this.trim_style = data.trimStyle;\n    this.background_style = data.backgroundStyle;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class FeedTabbedHeader extends YTNode {\n  static type = 'FeedTabbedHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ToggleFormField extends YTNode {\n  static type = 'ToggleFormField';\n\n  public label: Text;\n  public toggled: boolean;\n  public toggle_on_action?: NavigationEndpoint;\n  public toggle_off_action?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.toggled = data.toggled;\n\n    if ('toggleOnAction' in data)\n      this.toggle_on_action = new NavigationEndpoint(data.toggleOnAction);\n\n    if ('toggleOffAction' in data)\n      this.toggle_off_action = new NavigationEndpoint(data.toggleOffAction);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray } from '../helpers.js';\nimport ToggleFormField from './ToggleFormField.js';\n\nexport default class Form extends YTNode {\n  static type = 'Form';\n\n  fields: ObservedArray<ToggleFormField>;\n\n  constructor(data: RawNode) {\n    super();\n    this.fields = Parser.parseArray(data.fields, ToggleFormField);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray } from '../helpers.js';\nimport Text from './misc/Text.js';\nimport Form from './Form.js';\nimport Button from './Button.js';\n\nexport default class FormPopup extends YTNode {\n  static type = 'FormPopup';\n\n  title: Text;\n  form: Form | null;\n  buttons: ObservedArray<Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.form = Parser.parseItem(data.form, Form);\n    this.buttons = Parser.parseArray(data.buttons, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class GameDetails extends YTNode {\n  static type = 'GameDetails';\n\n  title: Text;\n  box_art: Thumbnail[];\n  box_art_overlay_text: Text;\n  endpoint: NavigationEndpoint;\n  is_official_box_art: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.box_art = Thumbnail.fromResponse(data.boxArt);\n    this.box_art_overlay_text = new Text(data.boxArtOverlayText);\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.is_official_box_art = !!data.isOfficialBoxArt;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class Grid extends YTNode {\n  static type = 'Grid';\n\n  items: ObservedArray<YTNode>;\n  is_collapsible?: boolean;\n  visible_row_count?: string;\n  target_id?: string;\n  continuation: string | null;\n  header?: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.items = Parser.parseArray(data.items);\n\n    if (Reflect.has(data, 'header')) {\n      this.header = Parser.parseItem(data.header);\n    }\n\n    if (Reflect.has(data, 'isCollapsible')) {\n      this.is_collapsible = data.isCollapsible;\n    }\n\n    if (Reflect.has(data, 'visibleRowCount')) {\n      this.visible_row_count = data.visibleRowCount;\n    }\n\n    if (Reflect.has(data, 'targetId')) {\n      this.target_id = data.targetId;\n    }\n\n    this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null;\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class GridChannel extends YTNode {\n  static type = 'GridChannel';\n\n  id: string;\n  author: Author;\n  subscribers: Text;\n  video_count: Text;\n  endpoint: NavigationEndpoint;\n  subscribe_button: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.channelId;\n\n    this.author = new Author({\n      ...data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.ownerBadges, data.thumbnail);\n\n    this.subscribers = new Text(data.subscriberCountText);\n    this.video_count = new Text(data.videoCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GridHeader extends YTNode {\n  static type = 'GridHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class GridMix extends YTNode {\n  static type = 'GridMix';\n\n  id: string;\n  title: Text;\n  author: Text | null;\n  thumbnails: Thumbnail[];\n  video_count: Text;\n  video_count_short: Text;\n  endpoint: NavigationEndpoint;\n  secondary_endpoint: NavigationEndpoint;\n  thumbnail_overlays: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n\n    this.author = data.shortBylineText?.simpleText ?\n      new Text(data.shortBylineText) : data.longBylineText?.simpleText ?\n        new Text(data.longBylineText) : null;\n\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_count = new Text(data.videoCountText);\n    this.video_count_short = new Text(data.videoCountShortText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.secondary_endpoint = new NavigationEndpoint(data.secondaryNavigationEndpoint);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class GridMovie extends YTNode {\n  static type = 'GridMovie';\n\n  id: string;\n  title: Text;\n  thumbnails: Thumbnail[];\n  duration: Text | null;\n  endpoint: NavigationEndpoint;\n  badges: ObservedArray<MetadataBadge>;\n  metadata: Text;\n  thumbnail_overlays: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    const length_alt = data.thumbnailOverlays.find((overlay: RawNode) => overlay.hasOwnProperty('thumbnailOverlayTimeStatusRenderer'))?.thumbnailOverlayTimeStatusRenderer;\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.duration = data.lengthText ? new Text(data.lengthText) : length_alt?.text ? new Text(length_alt.text) : null;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n    this.metadata = new Text(data.metadata);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class GridPlaylist extends YTNode {\n  static type = 'GridPlaylist';\n\n  id: string;\n  title: Text;\n  author?: Author;\n  badges: ObservedArray<YTNode>;\n  endpoint: NavigationEndpoint;\n  view_playlist: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_renderer;\n  sidebar_thumbnails: Thumbnail[] | null;\n  video_count: Text;\n  video_count_short: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'shortBylineText')) {\n      this.author = new Author(data.shortBylineText, data.ownerBadges);\n    }\n\n    this.badges = Parser.parseArray(data.ownerBadges);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.view_playlist = new Text(data.viewPlaylistText);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer);\n    this.sidebar_thumbnails = [].concat(...data.sidebarThumbnails?.map((thumbnail: any) => Thumbnail.fromResponse(thumbnail)) || []) || null;\n    this.video_count = new Text(data.thumbnailText);\n    this.video_count_short = new Text(data.videoCountShortText);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class GridShelfView extends YTNode {\n  static type = 'GridShelfView';\n\n  public contents: ObservedArray<YTNode>;\n  public header: YTNode | null;\n  public content_aspect_ratio: string;\n  public enable_vertical_expansion: boolean;\n  public show_more_button: ButtonView | null;\n  public show_less_button: ButtonView | null;\n  public min_collapsed_item_count: number;\n  \n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.header = Parser.parseItem(data.header);\n    this.content_aspect_ratio = data.contentAspectRatio;\n    this.enable_vertical_expansion = data.enableVerticalExpansion;\n    this.show_more_button = Parser.parseItem(data.showMoreButton, ButtonView);\n    this.show_less_button = Parser.parseItem(data.showLessButton, ButtonView);\n    this.min_collapsed_item_count = data.minCollapsedItemCount;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ShowCustomThumbnail extends YTNode {\n  static type = 'ShowCustomThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayBottomPanel extends YTNode {\n  static type = 'ThumbnailOverlayBottomPanel';\n\n  text?: Text;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'text')) {\n      this.text = new Text(data.text);\n    }\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport * as Parser from '../parser.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ShowCustomThumbnail from './ShowCustomThumbnail.js';\nimport ThumbnailOverlayBottomPanel from './ThumbnailOverlayBottomPanel.js';\n\nexport default class GridShow extends YTNode {\n  static type = 'GridShow';\n\n  title: Text;\n  thumbnail_renderer: ShowCustomThumbnail | null;\n  endpoint: NavigationEndpoint;\n  long_byline_text: Text;\n  thumbnail_overlays: ObservedArray<ThumbnailOverlayBottomPanel>;\n  author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer, ShowCustomThumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.long_byline_text = new Text(data.longBylineText);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays, ThumbnailOverlayBottomPanel);\n    this.author = new Author(data.shortBylineText, undefined);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class GridVideo extends YTNode {\n  static type = 'GridVideo';\n\n  public video_id: string;\n  public title: Text;\n  public thumbnails: Thumbnail[];\n  public thumbnail_overlays: ObservedArray<YTNode>;\n  public rich_thumbnail: YTNode;\n  public published: Text;\n  public duration: Text | null;\n  public author: Author;\n  public views: Text;\n  public short_view_count: Text;\n  public endpoint: NavigationEndpoint;\n  public menu: Menu | null;\n  public buttons?: ObservedArray<YTNode>;\n  public upcoming?: Date;\n  public upcoming_text?: Text;\n  public is_reminder_set?: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    const length_alt = data.thumbnailOverlays.find((overlay: RawNode) => overlay.hasOwnProperty('thumbnailOverlayTimeStatusRenderer'))?.thumbnailOverlayTimeStatusRenderer;\n\n    this.video_id = data.videoId;\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.rich_thumbnail = Parser.parseItem(data.richThumbnail);\n    this.published = new Text(data.publishedTimeText);\n    this.duration = data.lengthText ? new Text(data.lengthText) : length_alt?.text ? new Text(length_alt.text) : null;\n    this.author = data.shortBylineText && new Author(data.shortBylineText, data.ownerBadges);\n    this.views = new Text(data.viewCountText);\n    this.short_view_count = new Text(data.shortViewCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.menu = Parser.parseItem(data.menu, Menu);\n\n    if (Reflect.has(data, 'buttons')) {\n      this.buttons = Parser.parseArray(data.buttons);\n    }\n\n    if (Reflect.has(data, 'upcomingEventData')) {\n      this.upcoming = new Date(Number(`${data.upcomingEventData.startTime}000`));\n      this.upcoming_text = new Text(data.upcomingEventData.upcomingEventText);\n      this.is_reminder_set = !!data.upcomingEventData?.isReminderSet;\n    }\n  }\n\n  /**\n   * @deprecated Use {@linkcode video_id} instead.\n   */\n  get id(): string {\n    return this.video_id;\n  }\n\n  get is_upcoming(): boolean {\n    return Boolean(this.upcoming && this.upcoming > new Date());\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GuideEntry extends YTNode {\n  static type = 'GuideEntry';\n\n  title: Text;\n  endpoint: NavigationEndpoint;\n  icon_type?: string;\n  thumbnails?: Thumbnail[];\n  badges?: any;\n  is_primary: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.formattedTitle);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'thumbnail')) {\n      this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    }\n\n    // (LuanRT) XXX: Check this property's data and parse it.\n    if (Reflect.has(data, 'badges')) {\n      this.badges = data.badges;\n    }\n\n    this.is_primary = !!data.isPrimary;\n  }\n}", "import * as Parser from '../parser.js';\nimport GuideEntry from './GuideEntry.js';\nimport type { RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class GuideCollapsibleEntry extends YTNode {\n  static type = 'GuideCollapsibleEntry';\n\n  expander_item: GuideEntry | null;\n  collapser_item: GuideEntry | null;\n  expandable_items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.expander_item = Parser.parseItem(data.expanderItem, GuideEntry);\n    this.collapser_item = Parser.parseItem(data.collapserItem, GuideEntry);\n    this.expandable_items = Parser.parseArray(data.expandableItems);\n  }\n}", "import * as Parser from '../parser.js';\nimport type { RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class GuideCollapsibleSectionEntry extends YTNode {\n  static type = 'GuideCollapsibleSectionEntry';\n\n  header_entry: YTNode;\n  expander_icon: string;\n  collapser_icon: string;\n  section_items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_entry = Parser.parseItem(data.headerEntry);\n    this.expander_icon = data.expanderIcon.iconType;\n    this.collapser_icon = data.collapserIcon.iconType;\n    this.section_items = Parser.parseArray(data.sectionItems);\n  }\n}", "import GuideEntry from './GuideEntry.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GuideDownloadsEntry extends GuideEntry {\n  static type = 'GuideDownloadsEntry';\n\n  always_show: boolean;\n\n  constructor(data: RawNode) {\n    super(data.entryRenderer.guideEntryRenderer);\n    this.always_show = !!data.alwaysShow;\n  }\n}", "import Text from './misc/Text.js';\nimport * as Parser from '../parser.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GuideSection extends YTNode {\n  static type = 'GuideSection';\n\n  title?: Text;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'formattedTitle')) {\n      this.title = new Text(data.formattedTitle);\n    }\n\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import GuideSection from './GuideSection.js';\n\nexport default class GuideSubscriptionsSection extends GuideSection {\n  static type = 'GuideSubscriptionsSection';\n}", "import { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\nimport type { RawNode } from '../index.js';\n\nexport default class HashtagHeader extends YTNode {\n  static type = 'HashtagHeader';\n\n  hashtag: Text;\n  hashtag_info: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.hashtag = new Text(data.hashtag);\n    this.hashtag_info = new Text(data.hashtagInfoText);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Thumbnail } from '../misc.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class HashtagTile extends YTNode {\n  static type = 'HashtagTile';\n\n  hashtag: Text;\n  hashtag_info_text: Text;\n  hashtag_thumbnail: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  hashtag_background_color: number;\n  hashtag_video_count: Text;\n  hashtag_channel_count: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.hashtag = new Text(data.hashtag);\n    this.hashtag_info_text = new Text(data.hashtagInfoText);\n    this.hashtag_thumbnail = Thumbnail.fromResponse(data.hashtagThumbnail);\n    this.endpoint = new NavigationEndpoint(data.onTapCommand);\n    this.hashtag_background_color = data.hashtagBackgroundColor;\n    this.hashtag_video_count = new Text(data.hashtagVideoCount);\n    this.hashtag_channel_count = new Text(data.hashtagChannelCount);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class HeroPlaylistThumbnail extends YTNode {\n  static type = 'HeroPlaylistThumbnail';\n\n  thumbnails: Thumbnail[];\n  on_tap_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode, observe } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport class Panel extends YTNode {\n  static type = 'Panel';\n\n  thumbnail?: {\n    image: Thumbnail[];\n    endpoint: NavigationEndpoint;\n    on_long_press_endpoint: NavigationEndpoint;\n    content_mode: string;\n    crop_options: string;\n  };\n\n  background_image: {\n    image: Thumbnail[];\n    gradient_image: Thumbnail[];\n  };\n\n  strapline: string;\n  title: string;\n  description: string;\n  text_on_tap_endpoint: NavigationEndpoint;\n\n  cta: {\n    icon_name: string;\n    title: string;\n    endpoint: NavigationEndpoint;\n    accessibility_text: string;\n    state: string;\n  };\n\n  constructor(data: RawNode) {\n    super();\n\n    if (data.thumbnail) {\n      this.thumbnail = {\n        image: Thumbnail.fromResponse(data.thumbnail.image),\n        endpoint: new NavigationEndpoint(data.thumbnail.onTap),\n        on_long_press_endpoint: new NavigationEndpoint(data.thumbnail.onLongPress),\n        content_mode: data.thumbnail.contentMode,\n        crop_options: data.thumbnail.cropOptions\n      };\n    }\n\n    this.background_image = {\n      image: Thumbnail.fromResponse(data.backgroundImage.image),\n      gradient_image: Thumbnail.fromResponse(data.backgroundImage.gradientImage)\n    };\n\n    this.strapline = data.strapline;\n    this.title = data.title;\n    this.description = data.description;\n\n    this.cta = {\n      icon_name: data.cta.iconName,\n      title: data.cta.title,\n      endpoint: new NavigationEndpoint(data.cta.onTap),\n      accessibility_text: data.cta.accessibilityText,\n      state: data.cta.state\n    };\n\n    this.text_on_tap_endpoint = new NavigationEndpoint(data.textOnTap);\n  }\n}\n\nexport default class HighlightsCarousel extends YTNode {\n  static type = 'HighlightsCarousel';\n\n  panels: Panel[];\n\n  constructor(data: RawNode) {\n    super();\n    this.panels = observe(data.highlightsCarousel.panels.map((el: RawNode) => new Panel(el)));\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SearchSuggestion extends YTNode {\n  static type = 'SearchSuggestion';\n\n  suggestion: Text;\n  endpoint: NavigationEndpoint;\n  icon_type?: string;\n  service_endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.suggestion = new Text(data.suggestion);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'serviceEndpoint')) {\n      this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    }\n  }\n}", "import type { RawNode } from '../index.js';\nimport SearchSuggestion from './SearchSuggestion.js';\n\nexport default class HistorySuggestion extends SearchSuggestion {\n  static type = 'HistorySuggestion';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport Button from './Button.js';\n\nexport default class HorizontalMovieList extends YTNode {\n  static type = 'HorizontalMovieList';\n\n  items: ObservedArray<YTNode>;\n  previous_button: Button | null;\n  next_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.previous_button = Parser.parseItem(data.previousButton, Button);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class IconLink extends YTNode {\n  static type = 'IconLink';\n\n  icon_type: string;\n  tooltip?: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.icon_type = data.icon?.iconType;\n\n    if (Reflect.has(data, 'tooltip')) {\n      this.tooltip = new Text(data.tooltip).toString();\n    }\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ImageBannerView extends YTNode {\n  static type = 'ImageBannerView';\n\n  image: Thumbnail[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class IncludingResultsFor extends YTNode {\n  static type = 'IncludingResultsFor';\n\n  including_results_for: Text;\n  corrected_query: Text;\n  corrected_query_endpoint: NavigationEndpoint;\n  search_only_for?: Text;\n  original_query?: Text;\n  original_query_endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.including_results_for = new Text(data.includingResultsFor);\n    this.corrected_query = new Text(data.correctedQuery);\n    this.corrected_query_endpoint = new NavigationEndpoint(data.correctedQueryEndpoint);\n    this.search_only_for = Reflect.has(data, 'searchOnlyFor') ? new Text(data.searchOnlyFor) : undefined;\n    this.original_query = Reflect.has(data, 'originalQuery') ? new Text(data.originalQuery) : undefined;\n    this.original_query_endpoint = Reflect.has(data, 'originalQueryEndpoint') ? new NavigationEndpoint(data.originalQueryEndpoint) : undefined;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport type { AttributedText } from './misc/Text.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class InfoPanelContent extends YTNode {\n  static type = 'InfoPanelContent';\n\n  title: Text;\n  source: Text;\n  paragraphs?: Text[];\n  attributed_paragraphs?: Text[];\n  thumbnail: Thumbnail[];\n  source_endpoint: NavigationEndpoint;\n  truncate_paragraphs: boolean;\n  background: string;\n  inline_link_icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.source = new Text(data.source);\n\n    if (Reflect.has(data, 'paragraphs'))\n      this.paragraphs = data.paragraphs.map((p: RawNode) => new Text(p));\n\n    if (Reflect.has(data, 'attributedParagraphs'))\n      this.attributed_paragraphs = data.attributedParagraphs.map((p: AttributedText) => Text.fromAttributed(p));\n\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.source_endpoint = new NavigationEndpoint(data.sourceEndpoint);\n    this.truncate_paragraphs = !!data.truncateParagraphs;\n    this.background = data.background;\n\n    if (Reflect.has(data, 'inlineLinkIcon') && Reflect.has(data.inlineLinkIcon, 'iconType')) {\n      this.inline_link_icon_type = data.inlineLinkIcon.iconType;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport InfoPanelContent from './InfoPanelContent.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class InfoPanelContainer extends YTNode {\n  static type = 'InfoPanelContainer';\n\n  title: Text;\n  menu: Menu | null;\n  content: InfoPanelContent | null;\n  header_endpoint?: NavigationEndpoint;\n  background: string;\n  title_style?: string;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.content = Parser.parseItem(data.content, InfoPanelContent);\n\n    if (data.headerEndpoint)\n      this.header_endpoint = new NavigationEndpoint(data.headerEndpoint);\n\n    this.background = data.background;\n    this.title_style = data.titleStyle;\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon?.iconType;\n    }\n  }\n}", "import Button from './Button.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class InteractiveTabbedHeader extends YTNode {\n  static type = 'InteractiveTabbedHeader';\n\n  header_type: string;\n  title: Text;\n  description: Text;\n  metadata: Text;\n  badges: ObservedArray<MetadataBadge>;\n  box_art: Thumbnail[];\n  banner: Thumbnail[];\n  buttons: ObservedArray<SubscribeButton | Button>;\n  auto_generated: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_type = data.type;\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.metadata = new Text(data.metadata);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n    this.box_art = Thumbnail.fromResponse(data.boxArt);\n    this.banner = Thumbnail.fromResponse(data.banner);\n    this.buttons = Parser.parseArray(data.buttons, [ SubscribeButton, Button ]);\n    this.auto_generated = new Text(data.autoGenerated);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ItemSectionHeader extends YTNode {\n  static type = 'ItemSectionHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ItemSectionTab extends YTNode {\n  static type = 'Tab';\n\n  title: Text;\n  selected: boolean;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.selected = !!data.selected;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ItemSectionTab from './ItemSectionTab.js';\nimport Text from './misc/Text.js';\n\nexport default class ItemSectionTabbedHeader extends YTNode {\n  static type = 'ItemSectionTabbedHeader';\n\n  title: Text;\n  tabs: ObservedArray<ItemSectionTab>;\n  end_items?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.tabs = Parser.parseArray(data.tabs, ItemSectionTab);\n    if (Reflect.has(data, 'endItems')) {\n      this.end_items = Parser.parseArray(data.endItems);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, YTNodes, type RawNode } from '../index.js';\n\nexport default class SortFilterHeader extends YTNode {\n  static type = 'SortFilterHeader';\n\n  filter_menu: YTNodes.SortFilterSubMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.filter_menu = Parser.parseItem(data.filterMenu, YTNodes.SortFilterSubMenu);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ItemSectionHeader from './ItemSectionHeader.js';\nimport ItemSectionTabbedHeader from './ItemSectionTabbedHeader.js';\nimport CommentsHeader from './comments/CommentsHeader.js';\nimport SortFilterHeader from './SortFilterHeader.js';\nimport FeedFilterChipBar from './FeedFilterChipBar.js';\n\nexport default class ItemSection extends YTNode {\n  static type = 'ItemSection';\n\n  header: CommentsHeader | ItemSectionHeader | ItemSectionTabbedHeader | SortFilterHeader | FeedFilterChipBar | null;\n  contents: ObservedArray<YTNode>;\n  target_id?: string;\n  continuation?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, [ CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader, SortFilterHeader, FeedFilterChipBar ]);\n    this.contents = Parser.parseArray(data.contents);\n\n    if (data.targetId || data.sectionIdentifier) {\n      this.target_id = data.targetId || data.sectionIdentifier;\n    }\n\n    if (data.continuations) {\n      this.continuation = data.continuations?.at(0)?.nextContinuationData?.continuation;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class LiveChat extends YTNode {\n  static type = 'LiveChat';\n\n  header: YTNode;\n  initial_display_state: string;\n  continuation: string;\n\n  client_messages: {\n    reconnect_message: Text;\n    unable_to_reconnect_message: Text;\n    fatal_error: Text;\n    reconnected_message: Text;\n    generic_error: Text;\n  };\n\n  is_replay: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.initial_display_state = data.initialDisplayState;\n    this.continuation = data.continuations[0]?.reloadContinuationData?.continuation;\n\n    this.client_messages = {\n      reconnect_message: new Text(data.clientMessages.reconnectMessage),\n      unable_to_reconnect_message: new Text(data.clientMessages.unableToReconnectMessage),\n      fatal_error: new Text(data.clientMessages.fatalError),\n      reconnected_message: new Text(data.clientMessages.reconnectedMessage),\n      generic_error: new Text(data.clientMessages.genericError)\n    };\n\n    this.is_replay = !!data.isReplay;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatBannerHeader extends YTNode {\n  static type = 'LiveChatBannerHeader';\n\n  text: Text;\n  icon_type?: string;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport LiveChatBannerHeader from './LiveChatBannerHeader.js';\n\nexport default class LiveChatBanner extends YTNode {\n  static type = 'LiveChatBanner';\n\n  header: LiveChatBannerHeader | null;\n  contents: YTNode;\n  action_id: string;\n  viewer_is_creator?: boolean;\n  target_id: string;\n  is_stackable: boolean;\n  background_type?: string;\n  banner_type: string;\n  banner_properties_is_ephemeral?: boolean;\n  banner_properties_auto_collapse_delay_seconds?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, LiveChatBannerHeader);\n    this.contents = Parser.parseItem(data.contents);\n    this.action_id = data.actionId;\n\n    if (Reflect.has(data, 'viewerIsCreator')) {\n      this.viewer_is_creator = data.viewerIsCreator;\n    }\n\n    this.target_id = data.targetId;\n    this.is_stackable = data.isStackable;\n\n    if (Reflect.has(data, 'backgroundType')) {\n      this.background_type = data.backgroundType;\n    }\n\n    this.banner_type = data.bannerType;\n\n    if (\n      Reflect.has(data, 'bannerProperties') &&\n      Reflect.has(data.bannerProperties, 'isEphemeral')\n    ) {\n      this.banner_properties_is_ephemeral = Boolean(data.bannerProperties.isEphemeral);\n    }\n\n    if (\n      Reflect.has(data, 'bannerProperties') &&\n      Reflect.has(data.bannerProperties, 'autoCollapseDelay') &&\n      Reflect.has(data.bannerProperties.autoCollapseDelay, 'seconds')\n    ) {\n      this.banner_properties_auto_collapse_delay_seconds = data.bannerProperties.autoCollapseDelay.seconds;\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport LiveChatBanner from './items/LiveChatBanner.js';\n\nexport default class AddBannerToLiveChatCommand extends YTNode {\n  static type = 'AddBannerToLiveChatCommand';\n\n  banner: LiveChatBanner | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.banner = Parser.parseItem(data.bannerRenderer, LiveChatBanner);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class AddChatItemAction extends YTNode {\n  static type = 'AddChatItemAction';\n\n  item: YTNode;\n  client_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.item = Parser.parseItem(data.item);\n    if (Reflect.has(data, 'clientId')) {\n      this.client_id = data.clientId;\n    }\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class AddLiveChatTickerItemAction extends YTNode {\n  static type = 'AddLiveChatTickerItemAction';\n\n  item: YTNode;\n  duration_sec: string; // TODO: check this assumption.\n\n  constructor(data: RawNode) {\n    super();\n    this.item = Parser.parseItem(data.item);\n    this.duration_sec = data.durationSec;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class DimChatItemAction extends YTNode {\n  static type = 'DimChatItemAction';\n\n  client_assigned_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.client_assigned_id = data.clientAssignedId;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { type RawNode } from '../../../index.js';\nimport Text from '../../misc/Text.js';\n\nexport default class BumperUserEduContentView extends YTNode {\n  static type = 'BumperUserEduContentView';\n  \n  text: Text;\n  image_name: string;\n  image_color: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = Text.fromAttributed(data.text);\n    this.image_name = data.image.sources[0].clientResource.imageName;\n    this.image_color = data.image.sources[0].clientResource.imageColor;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class CreatorHeartView extends YTNode {\n  static type = 'CreatorHeartView';\n\n  creator_thumbnail: Thumbnail[];\n  hearted_icon_name: string;\n  unhearted_icon_name: string;\n  unhearted_icon_processor: {\n    border_image_processor: {\n      image_tint: {\n        color: number\n      }\n    }\n  };\n  hearted_hover_text: string;\n  hearted_accessibility_label: string;\n  unhearted_accessibility_label: string;\n  engagement_state_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.creator_thumbnail = Thumbnail.fromResponse(data.creatorThumbnail);\n    this.hearted_icon_name = data.heartedIcon.sources[0].clientResource.imageName;\n    this.unhearted_icon_name = data.unheartedIcon.sources[0].clientResource.imageName;\n    this.unhearted_icon_processor = {\n      border_image_processor: {\n        image_tint: {\n          color: data.unheartedIcon.processor.borderImageProcessor.imageTint.color\n        }\n      }\n    };\n    this.hearted_hover_text = data.heartedHoverText;\n    this.hearted_accessibility_label = data.heartedAccessibilityLabel;\n    this.unhearted_accessibility_label = data.unheartedAccessibilityLabel;\n    this.engagement_state_key = data.engagementStateKey;\n  }\n}", "import { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\n\nimport { YTNode, type ObservedArray } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatAutoModMessage extends YTNode {\n  static type = 'LiveChatAutoModMessage';\n\n  menu_endpoint?: NavigationEndpoint;\n  moderation_buttons: ObservedArray<Button>;\n  auto_moderated_item: YTNode;\n  header_text: Text;\n  timestamp: number;\n  id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.moderation_buttons = Parser.parseArray(data.moderationButtons, Button);\n    this.auto_moderated_item = Parser.parseItem(data.autoModeratedItem);\n    this.header_text = new Text(data.headerText);\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.id = data.id;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport Text from '../../misc/Text.js';\nimport ToggleButtonView from '../../ToggleButtonView.js';\n\nexport default class LiveChatBannerChatSummary extends YTNode {\n  static type = 'LiveChatBannerChatSummary';\n\n  id: string;\n  chat_summary: Text;\n  icon_type: string;\n  like_feedback_button: ToggleButtonView | null;\n  dislike_feedback_button: ToggleButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.liveChatSummaryId;\n    this.chat_summary = new Text(data.chatSummary);\n    this.icon_type = data.icon.iconType;\n    this.like_feedback_button = Parser.parseItem(data.likeFeedbackButton, ToggleButtonView);\n    this.dislike_feedback_button = Parser.parseItem(data.dislikeFeedbackButton, ToggleButtonView);\n  }\n}\n", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class LiveChatBannerPoll extends YTNode {\n  static type = 'LiveChatBannerPoll';\n\n  poll_question: Text;\n  author_photo: Thumbnail[];\n\n  choices: {\n    option_id: string;\n    text: string;\n  }[];\n\n  collapsed_state_entity_key: string;\n  live_chat_poll_state_entity_key: string;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.poll_question = new Text(data.pollQuestion);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n\n    this.choices = data.pollChoices.map((choice: RawNode) => ({\n      option_id: choice.pollOptionId,\n      text: new Text(choice.text).toString() // XXX: This toString should probably not be used here.\n    }));\n\n    this.collapsed_state_entity_key = data.collapsedStateEntityKey;\n    this.live_chat_poll_state_entity_key = data.liveChatPollStateEntityKey;\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class LiveChatBannerRedirect extends YTNode {\n  static type = 'LiveChatBannerRedirect';\n\n  banner_message: Text;\n  author_photo: Thumbnail[];\n  inline_action_button: Button | null;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.banner_message = new Text(data.bannerMessage);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.inline_action_button = Parser.parseItem(data.inlineActionButton, Button);\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport BumperUserEduContentView from './BumperUserEduContentView.js';\n\nexport default class LiveChatItemBumperView extends YTNode {\n  static type = 'LiveChatItemBumperView';\n  \n  content: BumperUserEduContentView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, BumperUserEduContentView);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatMembershipItem extends YTNode {\n  static type = 'LiveChatMembershipItem';\n\n  id: string;\n  timestamp: number;\n  timestamp_usec: string;\n  timestamp_text?: Text;\n  header_primary_text?: Text;\n  header_subtext: Text;\n  message?: Text;\n  author: Author;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n\n    if (Reflect.has(data, 'timestampText')) {\n      this.timestamp_text = new Text(data.timestampText);\n    }\n\n    if (Reflect.has(data, 'headerPrimaryText')) {\n      this.header_primary_text = new Text(data.headerPrimaryText);\n    }\n\n    this.header_subtext = new Text(data.headerSubtext);\n\n    if (Reflect.has(data, 'message')) {\n      this.message = new Text(data.message);\n    }\n\n    this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatModeChangeMessage extends YTNode {\n  static type = 'LiveChatModeChangeMessage';\n\n  id: string;\n  icon_type: string;\n  text: Text;\n  subtext: Text;\n  timestamp: number;\n  timestamp_usec: string;\n  timestamp_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.icon_type = data.icon.iconType;\n    this.text = new Text(data.text);\n    this.subtext = new Text(data.subtext);\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n    this.timestamp_text = new Text(data.timestampText);\n  }\n}\n", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport ButtonView from '../../ButtonView.js';\nimport Text from '../../misc/Text.js';\n\nexport default class PdgReplyButtonView extends YTNode {\n  static type = 'PdgReplyButtonView';\n\n  reply_button: ButtonView | null;\n  reply_count_entity_key: string;\n  reply_count_placeholder: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.reply_button = Parser.parseItem(data.replyButton, ButtonView);\n    this.reply_count_entity_key = data.replyCountEntityKey;\n    this.reply_count_placeholder = Text.fromAttributed(data.replyCountPlaceholder);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport CreatorHeartView from './CreatorHeartView.js';\nimport LiveChatItemBumperView from './LiveChatItemBumperView.js';\nimport PdgReplyButtonView from './PdgReplyButtonView.js';\n\nexport default class LiveChatPaidMessage extends YTNode {\n  static type = 'LiveChatPaidMessage';\n\n  id: string;\n  message: Text;\n  author: Author;\n  author_name_text_color: number;\n  header_background_color: number;\n  header_text_color: number;\n  body_background_color: number;\n  body_text_color: number;\n  purchase_amount: string;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n  timestamp: number;\n  timestamp_usec: string;\n  timestamp_text?: string;\n  timestamp_color: number;\n  header_overlay_image?: Thumbnail[];\n  text_input_background_color: number;\n  lower_bumper: LiveChatItemBumperView | null;\n  creator_heart_button: CreatorHeartView | null;\n  is_v2_style: boolean;\n  reply_button: PdgReplyButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.message = new Text(data.message);\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    this.author_name_text_color = data.authorNameTextColor;\n    this.header_background_color = data.headerBackgroundColor;\n    this.header_text_color = data.headerTextColor;\n    this.body_background_color = data.bodyBackgroundColor;\n    this.body_text_color = data.bodyTextColor;\n    this.purchase_amount = new Text(data.purchaseAmountText).toString();\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n\n    if (Reflect.has(data, 'timestampText')) {\n      this.timestamp_text = new Text(data.timestampText).toString();\n    }\n\n    this.timestamp_color = data.timestampColor;\n\n    if (Reflect.has(data, 'headerOverlayImage')) {\n      this.header_overlay_image = Thumbnail.fromResponse(data.headerOverlayImage);\n    }\n\n    this.text_input_background_color = data.textInputBackgroundColor;\n    this.lower_bumper = Parser.parseItem(data.lowerBumper, LiveChatItemBumperView);\n    this.creator_heart_button = Parser.parseItem(data.creatorHeartButton, CreatorHeartView);\n    this.is_v2_style = data.isV2Style;\n    this.reply_button = Parser.parseItem(data.replyButton, PdgReplyButtonView);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class LiveChatPaidSticker extends YTNode {\n  static type = 'LiveChatPaidSticker';\n\n  id: string;\n  author: Author;\n  money_chip_background_color: number;\n  money_chip_text_color: number;\n  background_color: number;\n  author_name_text_color: number;\n  sticker: Thumbnail[];\n  sticker_accessibility_label: string;\n  sticker_display_width: number;\n  sticker_display_height: number;\n  purchase_amount: string;\n  menu_endpoint: NavigationEndpoint;\n  context_menu: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n  timestamp: number;\n  timestamp_usec: string;\n  is_v2_style: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    this.money_chip_background_color = data.moneyChipBackgroundColor;\n    this.money_chip_text_color = data.moneyChipTextColor;\n    this.background_color = data.backgroundColor;\n    this.author_name_text_color = data.authorNameTextColor;\n    this.sticker = Thumbnail.fromResponse(data.sticker);\n    this.sticker_accessibility_label = data.sticker.accessibility.accessibilityData.label;\n    this.sticker_display_width = data.stickerDisplayWidth;\n    this.sticker_display_height = data.stickerDisplayHeight;\n    this.purchase_amount = new Text(data.purchaseAmountText).toString();\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu = this.menu_endpoint;\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n    this.is_v2_style = data.isV2Style;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatPlaceholderItem extends YTNode {\n  static type = 'LiveChatPlaceholderItem';\n\n  id: string;\n  timestamp: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n  }\n}", "import { Parser } from '../../../index.js';\nimport { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\n\nexport default class LiveChatProductItem extends YTNode {\n  static type = 'LiveChatProductItem';\n\n  title: string;\n  accessibility_title: string;\n  thumbnail: Thumbnail[];\n  price: string;\n  vendor_name: string;\n  from_vendor_text: string;\n  information_button: YTNode;\n  endpoint: NavigationEndpoint;\n  creator_message: string;\n  creator_name: string;\n  author_photo: Thumbnail[];\n  information_dialog: YTNode;\n  is_verified: boolean;\n  creator_custom_message: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.accessibility_title = data.accessibilityTitle;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.price = data.price;\n    this.vendor_name = data.vendorName;\n    this.from_vendor_text = data.fromVendorText;\n    this.information_button = Parser.parseItem(data.informationButton);\n    this.endpoint = new NavigationEndpoint(data.onClickCommand);\n    this.creator_message = data.creatorMessage;\n    this.creator_name = data.creatorName;\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.information_dialog = Parser.parseItem(data.informationDialog);\n    this.is_verified = data.isVerified;\n    this.creator_custom_message = new Text(data.creatorCustomMessage);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport Text from '../../misc/Text.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatRestrictedParticipation extends YTNode {\n  static type = 'LiveChatRestrictedParticipation';\n\n  message: Text;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.message = new Text(data.message);\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n    // TODO: parse onClickCommand\n  }\n}", "import type { RawNode } from '../index.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class LiveChatAuthorBadge extends MetadataBadge {\n  static type = 'LiveChatAuthorBadge';\n\n  custom_thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super(data);\n    this.custom_thumbnail = Thumbnail.fromResponse(data.customThumbnail);\n  }\n}", "import { Parser } from '../../../index.js';\nimport { YTNode } from '../../../helpers.js';\nimport type { ObservedArray } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport LiveChatAuthorBadge from '../../LiveChatAuthorBadge.js';\n\nexport default class LiveChatSponsorshipsHeader extends YTNode {\n  static type = 'LiveChatSponsorshipsHeader';\n\n  author_name: Text;\n  author_photo: Thumbnail[];\n  author_badges: ObservedArray<LiveChatAuthorBadge>;\n  primary_text: Text;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n  image: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.author_name = new Text(data.authorName);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.author_badges = Parser.parseArray(data.authorBadges, LiveChatAuthorBadge);\n    this.primary_text = new Text(data.primaryText);\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    this.image = Thumbnail.fromResponse(data.image);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport LiveChatSponsorshipsHeader from './LiveChatSponsorshipsHeader.js';\n\nexport default class LiveChatSponsorshipsGiftPurchaseAnnouncement extends YTNode {\n  static type = 'LiveChatSponsorshipsGiftPurchaseAnnouncement';\n\n  id: string;\n  timestamp_usec: string;\n  author_external_channel_id: string;\n  header: LiveChatSponsorshipsHeader | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp_usec = data.timestampUsec;\n    this.author_external_channel_id = data.authorExternalChannelId;\n    this.header = Parser.parseItem(data.header, LiveChatSponsorshipsHeader);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatSponsorshipsGiftRedemptionAnnouncement extends YTNode {\n  static type = 'LiveChatSponsorshipsGiftRedemptionAnnouncement';\n\n  id: string;\n  timestamp_usec: string;\n  timestamp_text: Text;\n  author: Author;\n  message: Text;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp_usec = data.timestampUsec;\n    this.timestamp_text = new Text(data.timestampText);\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    this.message = new Text(data.message);\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n  }\n}", "import { type ObservedArray, YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport ButtonView from '../../ButtonView.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatTextMessage extends YTNode {\n  static type = 'LiveChatTextMessage';\n\n  id: string;\n  message: Text;\n  inline_action_buttons: ObservedArray<Button>;\n  timestamp: number;\n  timestamp_usec: number;\n  timestamp_text?: string;\n  author: Author;\n  menu_endpoint?: NavigationEndpoint;\n  context_menu_accessibility_label?: string;\n  before_content_buttons: ObservedArray<ButtonView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.message = new Text(data.message);\n    this.inline_action_buttons = Parser.parseArray(data.inlineActionButtons, Button);\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n\n    if (Reflect.has(data, 'timestampText')) {\n      this.timestamp_text = new Text(data.timestampText).toString();\n    }\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    if (Reflect.has(data, 'contextMenuEndpoint')) {\n      this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    }\n\n    if (\n      Reflect.has(data, 'contextMenuAccessibility') &&\n      Reflect.has(data.contextMenuAccessibility, 'accessibilityData') &&\n      Reflect.has(data.contextMenuAccessibility.accessibilityData, 'label')\n    ) {\n      this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    }\n\n    this.before_content_buttons = Parser.parseArray(data.beforeContentButtons, ButtonView);\n  }\n}", "import Author from '../../misc/Author.js';\nimport { Parser } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\n\nimport { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatTickerPaidMessageItem extends YTNode {\n  static type = 'LiveChatTickerPaidMessageItem';\n\n  id: string;\n  author: Author;\n  amount?: Text;\n  amount_text_color: number;\n  start_background_color: number;\n  end_background_color: number;\n  duration_sec: number;\n  full_duration_sec: number;\n  show_item: YTNode;\n  show_item_endpoint: NavigationEndpoint;\n  animation_origin: string;\n  open_engagement_panel_command: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n\n    this.author = new Author(\n      data.authorName || data.authorUsername,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    if (Reflect.has(data, 'amount')) {\n      this.amount = new Text(data.amount);\n    }\n\n    this.amount_text_color = data.amountTextColor;\n    this.start_background_color = data.startBackgroundColor;\n    this.end_background_color = data.endBackgroundColor;\n    this.duration_sec = data.durationSec;\n    this.full_duration_sec = data.fullDurationSec;\n    this.show_item = Parser.parseItem(data.showItemEndpoint?.showLiveChatItemEndpoint?.renderer);\n    this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint);\n    this.animation_origin = data.animationOrigin;\n    this.open_engagement_panel_command = new NavigationEndpoint(data.openEngagementPanelCommand);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\n\nexport default class LiveChatTickerPaidStickerItem extends YTNode {\n  static type = 'LiveChatTickerPaidStickerItem';\n\n  id: string;\n  author_external_channel_id: string;\n  author_photo: Thumbnail[];\n  start_background_color: number;\n  end_background_color: number;\n  duration_sec: number;\n  full_duration_sec: number;\n  show_item: YTNode;\n  show_item_endpoint: NavigationEndpoint;\n  ticker_thumbnails: {\n    thumbnails: Thumbnail[],\n    label?: string,\n  }[];\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.author_external_channel_id = data.authorExternalChannelId;\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.start_background_color = data.startBackgroundColor;\n    this.end_background_color = data.endBackgroundColor;\n    this.duration_sec = data.durationSec;\n    this.full_duration_sec = data.fullDurationSec;\n    this.show_item = Parser.parseItem(data.showItemEndpoint?.showLiveChatItemEndpoint?.renderer);\n    this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint);\n\n    this.ticker_thumbnails = data.tickerThumbnails.map((item: any) => ({\n      thumbnails: Thumbnail.fromResponse(item),\n      label: item?.accessibility?.accessibilityData?.label\n    }));\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatTickerSponsorItem extends YTNode {\n  static type = 'LiveChatTickerSponsorItem';\n\n  id: string;\n  detail: Text;\n  author: Author;\n  duration_sec: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.detail = new Text(data.detailText);\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.sponsorPhoto,\n      data.authorExternalChannelId\n    );\n    this.duration_sec = data.durationSec;\n    // TODO: Parse remaining props.\n  }\n}", "import { Parser } from '../../../index.js';\nimport type { RawNode } from '../../../index.js';\nimport { YTNode } from '../../../helpers.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatViewerEngagementMessage extends YTNode {\n  static type = 'LiveChatViewerEngagementMessage';\n\n  id: string;\n  timestamp?: number;\n  timestamp_usec?: string;\n  icon_type?: string;\n  message: Text;\n  action_button: YTNode | null;\n  menu_endpoint?: NavigationEndpoint;\n  context_menu_accessibility_label?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n\n    if (Reflect.has(data, 'timestampUsec')) {\n      this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n      this.timestamp_usec = data.timestampUsec;\n    }\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.message = new Text(data.message);\n    this.action_button = Parser.parseItem(data.actionButton);\n\n    if (Reflect.has(data, 'contextMenuEndpoint')) {\n      this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    }\n\n    if (\n      Reflect.has(data, 'contextMenuAccessibility') &&\n      Reflect.has(data.contextMenuAccessibility, 'accessibilityData') &&\n      Reflect.has(data.contextMenuAccessibility.accessibilityData, 'label')\n    ) {\n      this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    }\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class PollHeader extends YTNode {\n  static type = 'PollHeader';\n\n  poll_question: Text;\n  thumbnails: Thumbnail[];\n  metadata: Text;\n  live_chat_poll_type: string;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.poll_question = new Text(data.pollQuestion);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.metadata = new Text(data.metadataText);\n    this.live_chat_poll_type = data.liveChatPollType;\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { Parser } from '../../index.js';\nimport { type SuperParsedResult, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class LiveChatActionPanel extends YTNode {\n  static type = 'LiveChatActionPanel';\n\n  id: string;\n  contents: SuperParsedResult<YTNode>;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.contents = Parser.parse(data.contents);\n    this.target_id = data.targetId;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MarkChatItemAsDeletedAction extends YTNode {\n  static type = 'MarkChatItemAsDeletedAction';\n\n  deleted_state_message: Text;\n  target_item_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.deleted_state_message = new Text(data.deletedStateMessage);\n    this.target_item_id = data.targetItemId;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MarkChatItemsByAuthorAsDeletedAction extends YTNode {\n  static type = 'MarkChatItemsByAuthorAsDeletedAction';\n\n  deleted_state_message: Text;\n  external_channel_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.deleted_state_message = new Text(data.deletedStateMessage);\n    this.external_channel_id = data.externalChannelId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class RemoveBannerForLiveChatCommand extends YTNode {\n  static type = 'RemoveBannerForLiveChatCommand';\n\n  target_action_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_action_id = data.targetActionId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class RemoveChatItemAction extends YTNode {\n  static type = 'RemoveChatItemAction';\n\n  target_item_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_item_id = data.targetItemId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class RemoveChatItemByAuthorAction extends YTNode {\n  static type = 'RemoveChatItemByAuthorAction';\n\n  external_channel_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.external_channel_id = data.externalChannelId;\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ReplaceChatItemAction extends YTNode {\n  static type = 'ReplaceChatItemAction';\n\n  target_item_id: string;\n  replacement_item: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_item_id = data.targetItemId;\n    this.replacement_item = Parser.parseItem(data.replacementItem);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class ReplaceLiveChatAction extends YTNode {\n  static type = 'ReplaceLiveChatAction';\n\n  to_replace: string;\n  replacement: YTNode | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.to_replace = data.toReplace;\n    this.replacement = Parser.parseItem(data.replacement);\n  }\n}\n", "import { Parser } from '../../index.js';\nimport { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ReplayChatItemAction extends YTNode {\n  static type = 'ReplayChatItemAction';\n\n  actions: ObservedArray<YTNode>;\n  video_offset_time_msec: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions = Parser.parseArray(data.actions?.map((action: RawNode) => {\n      delete action.clickTrackingParams;\n      return action;\n    }));\n\n    this.video_offset_time_msec = data.videoOffsetTimeMsec;\n  }\n}", "import { Parser } from '../../index.js';\nimport LiveChatActionPanel from './LiveChatActionPanel.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowLiveChatActionPanelAction extends YTNode {\n  static type = 'ShowLiveChatActionPanelAction';\n\n  panel_to_show: LiveChatActionPanel | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_to_show = Parser.parseItem(data.panelToShow, LiveChatActionPanel);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowLiveChatDialogAction extends YTNode {\n  static type = 'ShowLiveChatDialogAction';\n\n  dialog: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.dialog = Parser.parseItem(data.dialog);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowLiveChatTooltipCommand extends YTNode {\n  static type = 'ShowLiveChatTooltipCommand';\n\n  tooltip: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.tooltip = Parser.parseItem(data.tooltip);\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateDateTextAction extends YTNode {\n  static type = 'UpdateDateTextAction';\n\n  date_text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.date_text = new Text(data.dateText).toString();\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateDescriptionAction extends YTNode {\n  static type = 'UpdateDescriptionAction';\n\n  description: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.description = new Text(data.description);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateLiveChatPollAction extends YTNode {\n  static type = 'UpdateLiveChatPollAction';\n\n  poll_to_update: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.poll_to_update = Parser.parseItem(data.pollToUpdate);\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateTitleAction extends YTNode {\n  static type = 'UpdateTitleAction';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateToggleButtonTextAction extends YTNode {\n  static type = 'UpdateToggleButtonTextAction';\n\n  default_text: string;\n  toggled_text: string;\n  button_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.default_text = new Text(data.defaultText).toString();\n    this.toggled_text = new Text(data.toggledText).toString();\n    this.button_id = data.buttonId;\n  }\n}", "import { Text } from '../misc.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class VideoViewCount extends YTNode {\n  static type = 'VideoViewCount';\n\n  public original_view_count?: number;\n  public unlabeled_view_count_value?: Text;\n  public short_view_count?: Text;\n  public extra_short_view_count?: Text;\n  public view_count?: Text;\n  public is_live: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    if ('originalViewCount' in data) {\n      this.original_view_count = parseInt(data.originalViewCount);\n    }\n\n    if ('unlabeledViewCountValue' in data) {\n      this.unlabeled_view_count_value = new Text(data.unlabeledViewCountValue);\n    }\n\n    if ('shortViewCount' in data) {\n      this.short_view_count = new Text(data.shortViewCount);\n    }\n\n    if ('extraShortViewCount' in data) {\n      this.extra_short_view_count = new Text(data.extraShortViewCount);\n    }\n\n    if ('viewCount' in data) {\n      this.view_count = new Text(data.viewCount);\n    }\n\n    this.is_live = !!data.isLive;\n  }\n}", "import type Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport VideoViewCount from '../VideoViewCount.js';\n\nexport default class UpdateViewershipAction extends YTNode {\n  static type = 'UpdateViewershipAction';\n\n  public view_count_node: VideoViewCount | null;\n\n  /**\n   * @deprecated Use `view_count_node.view_count` instead.\n   */\n  get view_count(): Text | undefined {\n    return this.view_count_node?.view_count;\n  }\n\n  /**\n   * @deprecated Use `view_count_node.extra_short_view_count` instead.\n   */\n  get extra_short_view_count(): Text | undefined {\n    return this.view_count_node?.extra_short_view_count;\n  }\n\n  /**\n   * @deprecated Use `view_count_node.short_view_count` instead.\n   */\n  get short_view_count(): Text | undefined {\n    return this.view_count_node?.short_view_count;\n  }\n\n  /**\n   * @deprecated Use `view_count_node.original_view_count` instead.\n   */\n  get original_view_count(): number | undefined {\n    return this.view_count_node?.original_view_count;\n  }\n\n  /**\n   * @deprecated Use `view_count_node.unlabeled_view_count_value` instead.\n   */\n  get unlabeled_view_count_value(): Text | undefined {\n    return this.view_count_node?.unlabeled_view_count_value;\n  }\n\n  /**\n   * @deprecated Use `view_count_node.is_live` instead.\n   */\n  get is_live(): boolean | undefined {\n    return this.view_count_node?.is_live;\n  }\n\n  constructor(data: RawNode) {\n    super();\n    this.view_count_node = Parser.parseItem(data.viewCount, VideoViewCount);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\n\nexport default class LiveChatDialog extends YTNode {\n  static type = 'LiveChatDialog';\n\n  confirm_button: Button | null;\n  dialog_messages: Text[];\n\n  constructor (data: RawNode) {\n    super();\n    this.confirm_button = Parser.parseItem(data.confirmButton, Button);\n    this.dialog_messages = data.dialogMessages.map((el: RawNode) => new Text(el));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport SortFilterSubMenu from './SortFilterSubMenu.js';\nimport Menu from './menus/Menu.js';\n\nexport default class LiveChatHeader extends YTNode {\n  static type = 'LiveChatHeader';\n\n  overflow_menu: Menu | null;\n  collapse_button: Button | null;\n  view_selector: SortFilterSubMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.overflow_menu = Parser.parseItem(data.overflowMenu, Menu);\n    this.collapse_button = Parser.parseItem(data.collapseButton, Button);\n    this.view_selector = Parser.parseItem(data.viewSelector, SortFilterSubMenu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\n\nexport default class LiveChatItemList extends YTNode {\n  static type = 'LiveChatItemList';\n\n  max_items_to_display: string;\n  more_comments_below_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.max_items_to_display = data.maxItemsToDisplay;\n    this.more_comments_below_button = Parser.parseItem(data.moreCommentsBelowButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class LiveChatMessageInput extends YTNode {\n  static type = 'LiveChatMessageInput';\n\n  author_name: Text;\n  author_photo: Thumbnail[];\n  send_button: Button | null;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.author_name = new Text(data.authorName);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.send_button = Parser.parseItem(data.sendButton, Button);\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class LiveChatParticipant extends YTNode {\n  static type = 'LiveChatParticipant';\n\n  name: Text;\n  photo: Thumbnail[];\n  badges: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.name = new Text(data.authorName);\n    this.photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.badges = Parser.parseArray(data.authorBadges);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport LiveChatParticipant from './LiveChatParticipant.js';\nimport Text from './misc/Text.js';\n\nexport default class LiveChatParticipantsList extends YTNode {\n  static type = 'LiveChatParticipantsList';\n\n  title: Text;\n  participants: ObservedArray<LiveChatParticipant>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.participants = Parser.parseArray(data.participants, LiveChatParticipant);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ContentMetadataView from './ContentMetadataView.js';\nimport AvatarStackView from './AvatarStackView.js';\nimport DecoratedAvatarView from './DecoratedAvatarView.js';\nimport Text from './misc/Text.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class LockupMetadataView extends YTNode {\n  static type = 'LockupMetadataView';\n\n  public title: Text;\n  public metadata: ContentMetadataView | null;\n  public image: DecoratedAvatarView | AvatarStackView | null;\n  public menu_button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = Text.fromAttributed(data.title);\n    this.metadata = Parser.parseItem(data.metadata, ContentMetadataView);\n    this.image = Parser.parseItem(data.image, [ DecoratedAvatarView, AvatarStackView ]);\n    this.menu_button = Parser.parseItem(data.menuButton, ButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailView from './ThumbnailView.js';\nimport CollectionThumbnailView from './CollectionThumbnailView.js';\nimport LockupMetadataView from './LockupMetadataView.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class LockupView extends YTNode {\n  static type = 'LockupView';\n\n  public content_image: CollectionThumbnailView | ThumbnailView | null;\n  public metadata: LockupMetadataView | null;\n  public content_id: string;\n  public content_type: 'UNSPECIFIED' | 'VIDEO' | 'PLAYLIST' | 'SHORT' | 'CHANNEL' | 'ALBUM' | 'PRODUCT' | 'GAME' | 'CLIP' | 'PODCAST' | 'SOURCE' | 'SHOPPING_COLLECTION' | 'MOVIE';\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.content_image = Parser.parseItem(data.contentImage, [ CollectionThumbnailView, ThumbnailView ]);\n    this.metadata = Parser.parseItem(data.metadata, LockupMetadataView);\n    this.content_id = data.contentId;\n    this.content_type = data.contentType.replace('LOCKUP_CONTENT_TYPE_', '');\n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode, type ObservedArray, observe } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport HeatMarker from './HeatMarker.js';\nimport TimedMarkerDecoration from './TimedMarkerDecoration.js';\nimport Heatmap from './Heatmap.js';\nimport * as Parser from '../parser.js';\n\n/**\n * Represents a list of markers for a video. Can contain different types of markers:\n * - MARKER_TYPE_HEATMAP: Heat map markers showing audience engagement data\n * - Other marker types may exist but are not currently handled\n */\nexport default class MacroMarkersListEntity extends YTNode {\n  static type = 'MacroMarkersListEntity';\n\n  marker_entity_key: string;\n  external_video_id: string;\n  /** The type of markers in this entity (e.g., 'MARKER_TYPE_HEATMAP') */\n  marker_type: string;\n  markers: ObservedArray<HeatMarker>;\n  max_height_dp: number;\n  min_height_dp: number;\n  show_hide_animation_duration_millis: number;\n  timed_marker_decorations: ObservedArray<TimedMarkerDecoration>;\n\n  // Store raw API data for use in toHeatmap\n  private raw_api_markers: RawNode[];\n  private raw_api_decorations: RawNode[];\n\n  constructor(data: RawNode) {\n    super();\n    this.marker_entity_key = data.key;\n    this.external_video_id = data.externalVideoId;\n    this.marker_type = data.markersList?.markerType || '';\n\n    // Store raw API data\n    this.raw_api_markers = data.markersList?.markers || [];\n    this.raw_api_decorations = data.markersList?.markersDecoration?.timedMarkerDecorations || [];\n\n    // Parse markers array using the updated HeatMarker constructor\n    this.markers = observe(\n      this.raw_api_markers.map((marker: RawNode) => new HeatMarker(marker))\n    );\n\n    // Extract metadata\n    const heatmapMetadata = data.markersList?.markersMetadata?.heatmapMetadata;\n    this.max_height_dp = heatmapMetadata?.maxHeightDp || 40;\n    this.min_height_dp = heatmapMetadata?.minHeightDp || 4;\n    this.show_hide_animation_duration_millis =\n      heatmapMetadata?.showHideAnimationDurationMillis || 200;\n\n    // Parse timed marker decorations\n    // Assuming TimedMarkerDecoration constructor handles raw API decoration objects correctly\n    this.timed_marker_decorations = observe(\n      this.raw_api_decorations.map(\n        (decoration: RawNode) => new TimedMarkerDecoration(decoration)\n      )\n    );\n  }\n\n  /**\n  * Checks if this MacroMarkersListEntity represents heatmap data.\n  * Only heatmap markers can be converted to Heatmap objects.\n  */\n  isHeatmap(): boolean {\n    return this.marker_type === 'MARKER_TYPE_HEATMAP';\n  }\n\n  /**\n  * Converts this MacroMarkersListEntity to a Heatmap object\n  * for compatibility with existing code. Only works for heatmap markers.\n  * @returns Heatmap object if this entity contains heatmap data, null otherwise\n  */\n  toHeatmap(): Heatmap | null {\n    if (!this.isHeatmap()) {\n      return null;\n    }\n\n    const wrappedHeatMarkers = this.raw_api_markers.map((marker) => ({ HeatMarker: marker }));\n    const wrappedDecorations = this.raw_api_decorations.map((decoration) => ({ TimedMarkerDecoration: decoration }));\n\n    const heatmapRawPayload = {\n      maxHeightDp: this.max_height_dp,\n      minHeightDp: this.min_height_dp,\n      showHideAnimationDurationMillis: this.show_hide_animation_duration_millis,\n      heatMarkers: wrappedHeatMarkers,\n      heatMarkersDecorations: wrappedDecorations\n    };\n\n    return Parser.parseItem({ Heatmap: heatmapRawPayload }, Heatmap);\n  }\n}\n", "import Button from '../Button.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MenuNavigationItem extends Button {\n  static type = 'MenuNavigationItem';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport MenuNavigationItem from './MenuNavigationItem.js';\nimport MenuServiceItem from './MenuServiceItem.js';\n\nexport default class MenuPopup extends YTNode {\n  static type = 'MenuPopup';\n\n  items: ObservedArray<MenuNavigationItem | MenuServiceItem>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items, [ MenuNavigationItem, MenuServiceItem ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class Notification extends YTNode {\n  static type = 'Notification';\n\n  thumbnails: Thumbnail[];\n  video_thumbnails: Thumbnail[];\n  short_message: Text;\n  sent_time: Text;\n  notification_id: string;\n  endpoint: NavigationEndpoint;\n  record_click_endpoint: NavigationEndpoint;\n  menu: YTNode;\n  read: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_thumbnails = Thumbnail.fromResponse(data.videoThumbnail);\n    this.short_message = new Text(data.shortMessage);\n    this.sent_time = new Text(data.sentTimeText);\n    this.notification_id = data.notificationId;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.record_click_endpoint = new NavigationEndpoint(data.recordClickEndpoint);\n    this.menu = Parser.parseItem(data.contextualMenu);\n    this.read = data.read;\n  }\n}", "import { type ObservedArray, YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport ContinuationItem from '../ContinuationItem.js';\nimport Message from '../Message.js';\nimport Notification from '../Notification.js';\nimport Text from '../misc/Text.js';\n\nexport default class MultiPageMenuNotificationSection extends YTNode {\n  static type = 'MultiPageMenuNotificationSection';\n\n  public notification_section_title?: Text;\n  public items: ObservedArray<Notification | Message | ContinuationItem>;\n\n  constructor(data: RawNode) {\n    super();\n    \n    if ('notificationSectionTitle' in data) {\n      this.notification_section_title = new Text(data.notificationSectionTitle);\n    }\n    \n    this.items = Parser.parseArray(data.items, [ Notification, Message, ContinuationItem ]);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MusicMenuItemDivider extends YTNode {\n  static type = 'MusicMenuItemDivider';\n\n  constructor(_data: RawNode) {\n    super();\n    // XXX: Should check if this ever has any data.\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport Text from '../misc/Text.js';\n\nexport default class MusicMultiSelectMenuItem extends YTNode {\n  static type = 'MusicMultiSelectMenuItem';\n\n  title: string;\n  form_item_entity_key: string;\n  selected_icon_type?: string;\n  endpoint?: NavigationEndpoint;\n  selected: boolean;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = new Text(data.title).toString();\n    this.form_item_entity_key = data.formItemEntityKey;\n\n    if (Reflect.has(data, 'selectedIcon')) {\n      this.selected_icon_type = data.selectedIcon.iconType;\n    }\n\n    // @TODO: Check if there any other endpoints we can parse.\n    if (Reflect.has(data, 'selectedCommand')) {\n      this.endpoint = new NavigationEndpoint(data.selectedCommand);\n    }\n\n    this.selected = !!this.endpoint;\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Text from '../misc/Text.js';\nimport MusicMenuItemDivider from './MusicMenuItemDivider.js';\nimport MusicMultiSelectMenuItem from './MusicMultiSelectMenuItem.js';\n\nexport default class MusicMultiSelectMenu extends YTNode {\n  static type = 'MusicMultiSelectMenu';\n\n  title?: Text;\n  options: ObservedArray<MusicMultiSelectMenuItem | MusicMenuItemDivider>;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'title') && Reflect.has(data.title, 'musicMenuTitleRenderer')) {\n      this.title = new Text(data.title.musicMenuTitleRenderer?.primaryText);\n    }\n\n    this.options = Parser.parseArray(data.options, [ MusicMultiSelectMenuItem, MusicMenuItemDivider ]);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\n\nexport default class SimpleMenuHeader extends YTNode {\n  static type = 'SimpleMenuHeader';\n\n  title: Text;\n  buttons: ObservedArray<Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.buttons = Parser.parseArray(data.buttons, Button);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MerchandiseItem extends YTNode {\n  static type = 'MerchandiseItem';\n\n  title: string;\n  description: string;\n  thumbnails: Thumbnail[];\n  price: string;\n  vendor_name: string;\n  button_text: string;\n  button_accessibility_text: string;\n  from_vendor_text: string;\n  additional_fees_text: string;\n  region_format: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.description = data.description;\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.price = data.price;\n    this.vendor_name = data.vendorName;\n    this.button_text = data.buttonText;\n    this.button_accessibility_text = data.buttonAccessibilityText;\n    this.from_vendor_text = data.fromVendorText;\n    this.additional_fees_text = data.additionalFeesText;\n    this.region_format = data.regionFormat;\n    this.endpoint = new NavigationEndpoint(data.buttonCommand);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MetadataRow extends YTNode {\n  static type = 'MetadataRow';\n\n  title: Text;\n  contents: Text[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contents = data.contents.map((content: RawNode) => new Text(content));\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class MetadataRowContainer extends YTNode {\n  static type = 'MetadataRowContainer';\n\n  rows: ObservedArray<YTNode>;\n  collapsed_item_count: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.rows = Parser.parseArray(data.rows);\n    this.collapsed_item_count = data.collapsedItemCount;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MetadataRowHeader extends YTNode {\n  static type = 'MetadataRowHeader';\n\n  content: Text;\n  has_divider_line: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = new Text(data.content);\n    this.has_divider_line = data.hasDividerLine;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MetadataScreen extends YTNode {\n  static type = 'MetadataScreen';\n\n  section_list: YTNode;\n\n  constructor (data: RawNode) {\n    super();\n    this.section_list = Parser.parseItem(data);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MicroformatData extends YTNode {\n  static type = 'MicroformatData';\n\n  url_canonical: string;\n  title: string;\n  description: string;\n  thumbnail: Thumbnail[];\n  site_name: string;\n  app_name: string;\n  android_package: string;\n  ios_app_store_id: string;\n  ios_app_arguments: string;\n  og_type: string;\n  url_applinks_web: string;\n  url_applinks_ios: string;\n  url_applinks_android: string;\n  url_twitter_ios: string;\n  url_twitter_android: string;\n  twitter_card_type: string;\n  twitter_site_handle: string;\n  schema_dot_org_type: string;\n  noindex: string;\n  is_unlisted: boolean;\n  is_family_safe: boolean;\n  tags: string[];\n  available_countries: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.url_canonical = data.urlCanonical;\n    this.title = data.title;\n    this.description = data.description;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.site_name = data.siteName;\n    this.app_name = data.appName;\n    this.android_package = data.androidPackage;\n    this.ios_app_store_id = data.iosAppStoreId;\n    this.ios_app_arguments = data.iosAppArguments;\n    this.og_type = data.ogType;\n    this.url_applinks_web = data.urlApplinksWeb;\n    this.url_applinks_ios = data.urlApplinksIos;\n    this.url_applinks_android = data.urlApplinksAndroid;\n    this.url_twitter_ios = data.urlTwitterIos;\n    this.url_twitter_android = data.urlTwitterAndroid;\n    this.twitter_card_type = data.twitterCardType;\n    this.twitter_site_handle = data.twitterSiteHandle;\n    this.schema_dot_org_type = data.schemaDotOrgType;\n    this.noindex = data.noindex;\n    this.is_unlisted = data.unlisted;\n    this.is_family_safe = data.familySafe;\n    this.tags = data.tags;\n    this.available_countries = data.availableCountries;\n    // XXX: linkAlternatives?\n  }\n}", "import type { RawNode } from '../index.js';\nimport Playlist from './Playlist.js';\n\nexport default class Mix extends Playlist {\n  static type = 'Mix';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\n\nexport default class ModalWithTitleAndButton extends YTNode {\n  static type = 'ModalWithTitleAndButton';\n\n  title: Text;\n  content: Text;\n  button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.content = new Text(data.content);\n    this.button = Parser.parseItem(data.button, Button);\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Movie extends YTNode {\n  static type = 'Movie';\n\n  id: string;\n  title: Text;\n  description_snippet?: Text;\n  top_metadata_items: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  endpoint: NavigationEndpoint;\n  badges: ObservedArray<YTNode>;\n  use_vertical_poster: boolean;\n  show_action_menu: boolean;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    const overlay_time_status = data.thumbnailOverlays\n      .find((overlay: RawNode) => overlay.thumbnailOverlayTimeStatusRenderer)\n      ?.thumbnailOverlayTimeStatusRenderer.text || 'N/A';\n\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'descriptionSnippet')) {\n      this.description_snippet = new Text(data.descriptionSnippet);\n    }\n\n    this.top_metadata_items = new Text(data.topMetadataItems);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.longBylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);\n\n    this.duration = {\n      text: data.lengthText ? new Text(data.lengthText).toString() : new Text(overlay_time_status).toString(),\n      seconds: timeToSeconds(data.lengthText ? new Text(data.lengthText).toString() : new Text(overlay_time_status).toString())\n    };\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.badges = Parser.parseArray(data.badges);\n    this.use_vertical_poster = data.useVerticalPoster;\n    this.show_action_menu = data.showActionMenu;\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MovingThumbnail extends YTNode {\n  static type = 'MovingThumbnail';\n\n  constructor(data: RawNode) {\n    super();\n    return data.movingThumbnailDetails?.thumbnails.map((thumbnail: RawNode) => new Thumbnail(thumbnail)).sort((a: any, b: any) => b.width - a.width);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicCardShelfHeaderBasic extends YTNode {\n  static type = 'MusicCardShelfHeaderBasic';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class MusicInlineBadge extends YTNode {\n  static type = 'MusicInlineBadge';\n\n  public icon_type: string;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.icon_type = data.icon.iconType;\n    \n    if ('accessibilityData' in data\n      && 'accessibilityData' in data.accessibilityData) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class MusicPlayButton extends YTNode {\n  static type = 'MusicPlayButton';\n\n  public endpoint: NavigationEndpoint;\n  public play_icon_type: string;\n  public pause_icon_type: string;\n  public icon_color: string;\n  public accessibility_play_data?: AccessibilitySupportedDatas;\n  public accessibility_pause_data?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.playNavigationEndpoint);\n    this.play_icon_type = data.playIcon.iconType;\n    this.pause_icon_type = data.pauseIcon.iconType;\n\n    if ('accessibilityPlayData' in data\n      && 'accessibilityData' in data.accessibilityPlayData) {\n      this.accessibility_play_data = {\n        accessibility_data: new AccessibilityData(data.accessibilityPlayData.accessibilityData)\n      };\n    }\n\n    if ('accessibilityPauseData' in data\n      && 'accessibilityData' in data.accessibilityPauseData) {\n      this.accessibility_pause_data = {\n        accessibility_data: new AccessibilityData(data.accessibilityPauseData.accessibilityData)\n      };\n    }\n\n    this.icon_color = data.iconColor;\n  }\n  \n  get play_label(): string | undefined {\n    return this.accessibility_play_data?.accessibility_data?.label;\n  }\n  \n  get pause_label(): string | undefined {\n    return this.accessibility_pause_data?.accessibility_data?.label;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport MusicPlayButton from './MusicPlayButton.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicItemThumbnailOverlay extends YTNode {\n  static type = 'MusicItemThumbnailOverlay';\n\n  content: MusicPlayButton | null;\n  content_position: string;\n  display_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, MusicPlayButton);\n    this.content_position = data.contentPosition;\n    this.display_style = data.displayStyle;\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicThumbnail extends YTNode {\n  static type = 'MusicThumbnail';\n\n  contents: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport MusicCardShelfHeaderBasic from './MusicCardShelfHeaderBasic.js';\nimport MusicInlineBadge from './MusicInlineBadge.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class MusicCardShelf extends YTNode {\n  static type = 'MusicCardShelf';\n\n  thumbnail: MusicThumbnail | null;\n  title: Text;\n  subtitle: Text;\n  buttons: ObservedArray<Button>;\n  menu: Menu | null;\n  on_tap: NavigationEndpoint;\n  header: MusicCardShelfHeaderBasic | null;\n  end_icon_type?: string;\n  subtitle_badges: ObservedArray<MusicInlineBadge>;\n  thumbnail_overlay: MusicItemThumbnailOverlay | null;\n  contents?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.buttons = Parser.parseArray(data.buttons, Button);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.on_tap = new NavigationEndpoint(data.onTap);\n    this.header = Parser.parseItem(data.header, MusicCardShelfHeaderBasic);\n\n    if (Reflect.has(data, 'endIcon') && Reflect.has(data.endIcon, 'iconType')) {\n      this.end_icon_type = data.endIcon.iconType;\n    }\n\n    this.subtitle_badges = Parser.parseArray(data.subtitleBadges, MusicInlineBadge);\n    this.thumbnail_overlay = Parser.parseItem(data.thumbnailOverlay, MusicItemThumbnailOverlay);\n\n    if (Reflect.has(data, 'contents')) {\n      this.contents = Parser.parseArray(data.contents);\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport IconLink from './IconLink.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicCarouselShelfBasicHeader extends YTNode {\n  static type = 'MusicCarouselShelfBasicHeader';\n\n  title: Text;\n  strapline?: Text;\n  thumbnail?: MusicThumbnail | null;\n  more_content?: Button | null;\n  end_icons?: ObservedArray<IconLink>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'strapline')) {\n      this.strapline = new Text(data.strapline);\n    }\n\n    if (Reflect.has(data, 'thumbnail')) {\n      this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    }\n\n    if (Reflect.has(data, 'moreContentButton')) {\n      this.more_content = Parser.parseItem(data.moreContentButton, Button);\n    }\n\n    if (Reflect.has(data, 'endIcons')) {\n      this.end_icons = Parser.parseArray(data.endIcons, IconLink);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nimport Menu from './menus/Menu.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class MusicMultiRowListItem extends YTNode {\n  static type = 'MusicMultiRowListItem';\n\n  thumbnail: MusicThumbnail | null;\n  overlay: MusicItemThumbnailOverlay | null;\n  on_tap: NavigationEndpoint;\n  menu: Menu | null;\n  subtitle: Text;\n  title: Text;\n  second_title?: Text;\n  description?: Text;\n  display_style?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    this.overlay = Parser.parseItem(data.overlay, MusicItemThumbnailOverlay);\n    this.on_tap = new NavigationEndpoint(data.onTap);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.subtitle = new Text(data.subtitle);\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'secondTitle')) {\n      this.second_title = new Text(data.secondTitle);\n    }\n\n    if (Reflect.has(data, 'description')) {\n      this.description = new Text(data.description);\n    }\n\n    if (Reflect.has(data, 'displayStyle')) {\n      this.display_style = data.displayStyle;\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicNavigationButton extends YTNode {\n  static type = 'MusicNavigationButton';\n\n  button_text: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.button_text = new Text(data.buttonText).toString();\n    this.endpoint = new NavigationEndpoint(data.clickCommand);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicResponsiveListItemFixedColumn extends YTNode {\n  static type = 'musicResponsiveListItemFlexColumnRenderer';\n\n  title: Text;\n  display_priority: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.text);\n    this.display_priority = data.displayPriority;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicResponsiveListItemFlexColumn extends YTNode {\n  static type = 'MusicResponsiveListItemFlexColumn';\n\n  title: Text;\n  display_priority: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.text);\n    this.display_priority = data.displayPriority;\n  }\n}", "// TODO: Clean up and refactor this.\n\nimport { YTNode } from '../helpers.js';\nimport { isTextRun, timeToSeconds } from '../../utils/Utils.js';\nimport type { ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport type TextRun from './misc/TextRun.js';\n\nimport { Parser } from '../index.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport MusicResponsiveListItemFixedColumn from './MusicResponsiveListItemFixedColumn.js';\nimport MusicResponsiveListItemFlexColumn from './MusicResponsiveListItemFlexColumn.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\ninterface PlaylistItemData {\n  video_id: string;\n  playlist_set_video_id: string;\n}\n\nexport default class MusicResponsiveListItem extends YTNode {\n  static type = 'MusicResponsiveListItem';\n\n  flex_columns: ObservedArray<MusicResponsiveListItemFlexColumn>;\n  fixed_columns: ObservedArray<MusicResponsiveListItemFixedColumn>;\n\n  endpoint?: NavigationEndpoint;\n  item_type: 'album' | 'playlist' | 'artist' | 'library_artist' | 'non_music_track' | 'video' | 'song' | 'endpoint' | 'unknown' | 'podcast_show' | undefined;\n  index?: Text;\n  thumbnail?: MusicThumbnail | null;\n  badges?: ObservedArray<YTNode>;\n  menu?: Menu | null;\n  overlay?: MusicItemThumbnailOverlay | null;\n\n  id?: string;\n  title?: string;\n  duration?: {\n    text: string;\n    seconds: number;\n  };\n\n  album?: {\n    id?: string,\n    name: string,\n    endpoint?: NavigationEndpoint\n  };\n\n  artists?: {\n    name: string,\n    channel_id?: string,\n    endpoint?: NavigationEndpoint\n  }[];\n\n  views?: string;\n  authors?: {\n    name: string,\n    channel_id?: string\n    endpoint?: NavigationEndpoint\n  }[];\n\n  name?: string;\n  subtitle?: Text;\n  subscribers?: string;\n  song_count?: string;\n\n  // TODO: these might be replaceable with Author class\n  author?: {\n    name: string,\n    channel_id?: string\n    endpoint?: NavigationEndpoint\n  };\n  item_count?: string;\n  year?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.flex_columns = Parser.parseArray(data.flexColumns, MusicResponsiveListItemFlexColumn);\n    this.fixed_columns = Parser.parseArray(data.fixedColumns, MusicResponsiveListItemFixedColumn);\n\n    const playlist_item_data: PlaylistItemData = {\n      video_id: data?.playlistItemData?.videoId || null,\n      playlist_set_video_id: data?.playlistItemData?.playlistSetVideoId || null\n    };\n\n    if (Reflect.has(data, 'navigationEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n\n    let page_type = this.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType;\n\n    if (!page_type) {\n      const is_non_music_track = this.flex_columns.find(\n        (col) => col.title.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === 'MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE'\n      );\n\n      if (is_non_music_track) {\n        page_type = 'MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE';\n      }\n    }\n\n    switch (page_type) {\n      case 'MUSIC_PAGE_TYPE_ALBUM':\n        this.item_type = 'album';\n        this.#parseAlbum();\n        break;\n      case 'MUSIC_PAGE_TYPE_PLAYLIST':\n        this.item_type = 'playlist';\n        this.#parsePlaylist();\n        break;\n      case 'MUSIC_PAGE_TYPE_ARTIST':\n      case 'MUSIC_PAGE_TYPE_USER_CHANNEL':\n        this.item_type = 'artist';\n        this.#parseArtist();\n        break;\n      case 'MUSIC_PAGE_TYPE_LIBRARY_ARTIST':\n        this.item_type = 'library_artist';\n        this.#parseLibraryArtist();\n        break;\n      case 'MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE':\n        this.item_type = 'non_music_track';\n        this.#parseNonMusicTrack(playlist_item_data);\n        break;\n      case 'MUSIC_PAGE_TYPE_PODCAST_SHOW_DETAIL_PAGE':\n        this.item_type = 'podcast_show';\n        this.#parsePodcastShow();\n        break;\n      default:\n        if (this.flex_columns[1]) {\n          this.#parseVideoOrSong(playlist_item_data);\n        } else {\n          this.#parseOther();\n        }\n    }\n\n    if (Reflect.has(data, 'index')) {\n      this.index = new Text(data.index);\n    }\n\n    if (Reflect.has(data, 'thumbnail')) {\n      this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    }\n\n    if (Reflect.has(data, 'badges')) {\n      this.badges = Parser.parseArray(data.badges);\n    }\n\n    if (Reflect.has(data, 'menu')) {\n      this.menu = Parser.parseItem(data.menu, Menu);\n    }\n\n    if (Reflect.has(data, 'overlay')) {\n      this.overlay = Parser.parseItem(data.overlay, MusicItemThumbnailOverlay);\n    }\n  }\n\n  #parseOther() {\n    this.title = this.flex_columns[0].title.toString();\n\n    if (this.endpoint) {\n      this.item_type = 'endpoint';\n    } else {\n      this.item_type = 'unknown';\n    }\n  }\n\n  #parseVideoOrSong(playlist_item_data: PlaylistItemData) {\n    const music_video_type = (this.flex_columns.at(0)?.title.runs?.at(0) as TextRun)?.endpoint?.payload?.watchEndpointMusicSupportedConfigs?.watchEndpointMusicConfig?.musicVideoType;\n    switch (music_video_type) {\n      case 'MUSIC_VIDEO_TYPE_UGC':\n      case 'MUSIC_VIDEO_TYPE_OMV':\n        this.item_type = 'video';\n        this.#parseVideo(playlist_item_data);\n        break;\n      case 'MUSIC_VIDEO_TYPE_ATV':\n        this.item_type = 'song';\n        this.#parseSong(playlist_item_data);\n        break;\n      default:\n        this.#parseOther();\n    }\n  }\n\n  #parseSong(playlist_item_data: PlaylistItemData) {\n    this.id = playlist_item_data.video_id || this.endpoint?.payload?.videoId;\n    this.title = this.flex_columns[0].title.toString();\n\n    const duration_text = this.flex_columns.at(1)?.title.runs?.find(\n      (run) => (/^\\d+$/).test(run.text.replace(/:/g, '')))?.text || this.fixed_columns[0]?.title?.toString();\n\n    if (duration_text) {\n      this.duration = {\n        text: duration_text,\n        seconds: timeToSeconds(duration_text)\n      };\n    }\n\n    const album_run =\n      this.flex_columns.at(1)?.title.runs?.find(\n        (run) =>\n          (isTextRun(run) && run.endpoint) &&\n          run.endpoint.payload.browseId.startsWith('MPR')\n      ) ||\n      this.flex_columns.at(2)?.title.runs?.find(\n        (run) =>\n          (isTextRun(run) && run.endpoint) &&\n          run.endpoint.payload.browseId.startsWith('MPR')\n      );\n\n    if (album_run && isTextRun(album_run)) {\n      this.album = {\n        id: album_run.endpoint?.payload?.browseId,\n        name: album_run.text,\n        endpoint: album_run.endpoint\n      };\n    }\n\n    const artist_runs = this.flex_columns.at(1)?.title.runs?.filter(\n      (run) => (isTextRun(run) && run.endpoint) && run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (artist_runs) {\n      this.artists = artist_runs.map((run) => ({\n        name: run.text,\n        channel_id: isTextRun(run) ? run.endpoint?.payload?.browseId : undefined,\n        endpoint: isTextRun(run) ? run.endpoint : undefined\n      }));\n    }\n  }\n\n  #parseVideo(playlist_item_data: PlaylistItemData) {\n    this.id = playlist_item_data.video_id;\n    this.title = this.flex_columns[0].title.toString();\n    this.views = this.flex_columns.at(1)?.title.runs?.find((run) => run.text.match(/(.*?) views/))?.toString();\n\n    const author_runs = this.flex_columns.at(1)?.title.runs?.filter(\n      (run) =>\n        (isTextRun(run) && run.endpoint) &&\n        run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (author_runs) {\n      this.authors = author_runs.map((run) => {\n        return {\n          name: run.text,\n          channel_id: isTextRun(run) ? run.endpoint?.payload?.browseId : undefined,\n          endpoint: isTextRun(run) ? run.endpoint : undefined\n        };\n      });\n    }\n\n    const duration_text = this.flex_columns[1].title.runs?.find(\n      (run) => (/^\\d+$/).test(run.text.replace(/:/g, '')))?.text || this.fixed_columns[0]?.title.runs?.find((run) => (/^\\d+$/).test(run.text.replace(/:/g, '')))?.text;\n\n    if (duration_text) {\n      this.duration = {\n        text: duration_text,\n        seconds: timeToSeconds(duration_text)\n      };\n    }\n  }\n\n  #parseArtist() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.name = this.flex_columns[0].title.toString();\n    this.subtitle = this.flex_columns.at(1)?.title;\n    this.subscribers = this.subtitle?.runs?.find((run) => (/^(\\d*\\.)?\\d+[M|K]? subscribers?$/i).test(run.text))?.text || '';\n  }\n\n  #parseLibraryArtist() {\n    this.name = this.flex_columns[0].title.toString();\n    this.subtitle = this.flex_columns.at(1)?.title;\n    this.song_count = this.subtitle?.runs?.find((run) => (/^\\d+(,\\d+)? songs?$/i).test(run.text))?.text || '';\n  }\n\n  #parseNonMusicTrack(playlist_item_data: PlaylistItemData) {\n    this.id = playlist_item_data.video_id || this.endpoint?.payload?.videoId;\n    this.title = this.flex_columns[0].title.toString();\n  }\n\n  #parsePodcastShow() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.title = this.flex_columns[0].title.toString();\n  }\n\n  #parseAlbum() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.title = this.flex_columns[0].title.toString();\n\n    const author_run = this.flex_columns.at(1)?.title.runs?.find(\n      (run) =>\n        (isTextRun(run) && run.endpoint) &&\n        run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (author_run && isTextRun(author_run)) {\n      this.author = {\n        name: author_run.text,\n        channel_id: author_run.endpoint?.payload?.browseId,\n        endpoint: author_run.endpoint\n      };\n    }\n\n    this.year = this.flex_columns.at(1)?.title.runs?.find(\n      (run) => (/^[12][0-9]{3}$/).test(run.text)\n    )?.text;\n  }\n\n  #parsePlaylist() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.title = this.flex_columns[0].title.toString();\n\n    const item_count_run = this.flex_columns.at(1)?.title\n      .runs?.find((run) => run.text.match(/\\d+ (song|songs)/));\n\n    this.item_count = item_count_run ? item_count_run.text : undefined;\n\n    const author_run = this.flex_columns.at(1)?.title.runs?.find(\n      (run) =>\n        (isTextRun(run) && run.endpoint) &&\n        run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (author_run && isTextRun(author_run)) {\n      this.author = {\n        name: author_run.text,\n        channel_id: author_run.endpoint?.payload?.browseId,\n        endpoint: author_run.endpoint\n      };\n    }\n  }\n\n  get thumbnails() {\n    return this.thumbnail?.contents || [];\n  }\n}", "// TODO: Refactor this.\n\nimport { YTNode, type SuperParsedResult } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport type TextRun from './misc/TextRun.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MusicTwoRowItem extends YTNode {\n  static type = 'MusicTwoRowItem';\n\n  title: Text;\n  endpoint: NavigationEndpoint;\n  id: string | undefined;\n  subtitle: Text;\n  badges: SuperParsedResult<YTNode> | null;\n  item_type: string;\n  subscribers?: string;\n  item_count?: string | null;\n  year?: string;\n  views?: string;\n\n  artists?: {\n    name: string;\n    channel_id: string | undefined;\n    endpoint: NavigationEndpoint | undefined;\n  }[];\n\n  author?: {\n    name: string;\n    channel_id: string | undefined;\n    endpoint: NavigationEndpoint | undefined;\n  };\n\n  thumbnail: Thumbnail[];\n  thumbnail_overlay: MusicItemThumbnailOverlay | null;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    this.id =\n      this.endpoint?.payload?.browseId ||\n      this.endpoint?.payload?.videoId;\n\n    this.subtitle = new Text(data.subtitle);\n    this.badges = Parser.parse(data.subtitleBadges);\n\n    const page_type = this.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType;\n\n    switch (page_type) {\n      case 'MUSIC_PAGE_TYPE_ARTIST':\n        this.item_type = 'artist';\n        break;\n      case 'MUSIC_PAGE_TYPE_PLAYLIST':\n        this.item_type = 'playlist';\n        break;\n      case 'MUSIC_PAGE_TYPE_ALBUM':\n        this.item_type = 'album';\n        break;\n      default:\n        if (this.endpoint?.metadata?.api_url === '/next') {\n          this.item_type = 'endpoint';\n        } else if (this.subtitle.runs?.[0]) {\n          if (this.subtitle.runs[0].text !== 'Song') {\n            this.item_type = 'video';\n          } else {\n            this.item_type = 'song';\n          }\n        } else if (this.endpoint) {\n          this.item_type = 'endpoint';\n        } else {\n          this.item_type = 'unknown';\n        }\n        break;\n    }\n\n    if (this.item_type == 'artist') {\n      this.subscribers = this.subtitle.runs?.find((run) => (/^(\\d*\\.)?\\d+[M|K]? subscribers?$/i).test(run.text))?.text || '';\n    } else if (this.item_type == 'playlist') {\n      const item_count_run = this.subtitle.runs?.find((run) => run.text.match(/\\d+ songs|song/));\n      this.item_count = item_count_run ? (item_count_run as TextRun).text : null;\n    } else if (this.item_type == 'album') {\n      const artists = this.subtitle.runs?.filter((run: any) => run.endpoint?.payload?.browseId.startsWith('UC'));\n      if (artists) {\n        this.artists = artists.map((artist: any) => ({\n          name: artist.text,\n          channel_id: artist.endpoint?.payload?.browseId,\n          endpoint: artist.endpoint\n        }));\n      }\n      this.year = this.subtitle.runs?.slice(-1)[0].text;\n      if (isNaN(Number(this.year)))\n        delete this.year;\n    } else if (this.item_type == 'video') {\n      this.views = this?.subtitle.runs?.find((run) => run?.text.match(/(.*?) views/))?.text || 'N/A';\n\n      const author = this.subtitle.runs?.find((run: any) => run.endpoint?.payload?.browseId?.startsWith('UC'));\n      if (author) {\n        this.author = {\n          name: (author as TextRun)?.text,\n          channel_id: (author as TextRun)?.endpoint?.payload?.browseId,\n          endpoint: (author as TextRun)?.endpoint\n        };\n      }\n    } else if (this.item_type == 'song') {\n      const artists = this.subtitle.runs?.filter((run: any) => run.endpoint?.payload?.browseId.startsWith('UC'));\n      if (artists) {\n        this.artists = artists.map((artist: any) => ({\n          name: (artist as TextRun)?.text,\n          channel_id: (artist as TextRun)?.endpoint?.payload?.browseId,\n          endpoint: (artist as TextRun)?.endpoint\n        }));\n      }\n    }\n\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnailRenderer.musicThumbnailRenderer.thumbnail);\n    this.thumbnail_overlay = Parser.parseItem(data.thumbnailOverlay, MusicItemThumbnailOverlay);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nimport MusicCarouselShelfBasicHeader from './MusicCarouselShelfBasicHeader.js';\nimport MusicMultiRowListItem from './MusicMultiRowListItem.js';\nimport MusicNavigationButton from './MusicNavigationButton.js';\nimport MusicResponsiveListItem from './MusicResponsiveListItem.js';\nimport MusicTwoRowItem from './MusicTwoRowItem.js';\n\nexport default class MusicCarouselShelf extends YTNode {\n  static type = 'MusicCarouselShelf';\n\n  header: MusicCarouselShelfBasicHeader | null;\n  contents: ObservedArray<MusicTwoRowItem | MusicResponsiveListItem | MusicMultiRowListItem | MusicNavigationButton>;\n  num_items_per_column?: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, MusicCarouselShelfBasicHeader);\n    this.contents = Parser.parseArray(data.contents, [ MusicTwoRowItem, MusicResponsiveListItem, MusicMultiRowListItem, MusicNavigationButton ]);\n\n    if (Reflect.has(data, 'numItemsPerColumn')) {\n      this.num_items_per_column = parseInt(data.numItemsPerColumn);\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicDescriptionShelf extends YTNode {\n  static type = 'MusicDescriptionShelf';\n\n  description: Text;\n  max_collapsed_lines?: string;\n  max_expanded_lines?: string;\n  footer: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.description = new Text(data.description);\n\n    if (Reflect.has(data, 'maxCollapsedLines')) {\n      this.max_collapsed_lines = data.maxCollapsedLines;\n    }\n\n    if (Reflect.has(data, 'maxExpandedLines')) {\n      this.max_expanded_lines = data.maxExpandedLines;\n    }\n\n    this.footer = new Text(data.footer);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport type NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport type TextRun from './misc/TextRun.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MusicDetailHeader extends YTNode {\n  static type = 'MusicDetailHeader';\n\n  title: Text;\n  description: Text;\n  subtitle: Text;\n  second_subtitle: Text;\n  year: string;\n  song_count: string;\n  total_duration: string;\n  thumbnails: Thumbnail[];\n  badges: ObservedArray<YTNode>;\n  author?: {\n    name: string;\n    channel_id: string | undefined;\n    endpoint: NavigationEndpoint | undefined;\n  };\n  menu: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.subtitle = new Text(data.subtitle);\n    this.second_subtitle = new Text(data.secondSubtitle);\n    this.year = this.subtitle.runs?.find((run) => (/^[12][0-9]{3}$/).test(run.text))?.text || '';\n    this.song_count = this.second_subtitle.runs?.[0]?.text || '';\n    this.total_duration = this.second_subtitle.runs?.[2]?.text || '';\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail.croppedSquareThumbnailRenderer.thumbnail);\n    this.badges = Parser.parseArray(data.subtitleBadges);\n\n    const author = this.subtitle.runs?.find((run) => (run as TextRun)?.endpoint?.payload?.browseId.startsWith('UC'));\n\n    if (author) {\n      this.author = {\n        name: (author as TextRun).text,\n        channel_id: (author as TextRun).endpoint?.payload?.browseId,\n        endpoint: (author as TextRun).endpoint\n      };\n    }\n\n    this.menu = Parser.parseItem(data.menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicDownloadStateBadge extends YTNode {\n  static type = 'MusicDownloadStateBadge';\n\n  playlist_id: string;\n  supported_download_states: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.playlist_id = data.playlistId;\n    this.supported_download_states = data.supportedDownloadStates;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicEditablePlaylistDetailHeader extends YTNode {\n  static type = 'MusicEditablePlaylistDetailHeader';\n\n  header: YTNode;\n  edit_header: YTNode;\n  playlist_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.edit_header = Parser.parseItem(data.editHeader);\n    this.playlist_id = data.playlistId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Element from './Element.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicElementHeader extends YTNode {\n  static type = 'MusicElementHeader';\n\n  element: Element | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.element = Reflect.has(data, 'elementRenderer') ? Parser.parseItem(data, Element) : null;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicHeader extends YTNode {\n  static type = 'MusicHeader';\n\n  header?: YTNode;\n  title?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'header')) {\n      this.header = Parser.parseItem(data.header);\n    }\n\n    if (Reflect.has(data, 'title')) {\n      this.title = new Text(data.title);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nimport Button from './Button.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport ToggleButton from './ToggleButton.js';\n\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicImmersiveHeader extends YTNode {\n  static type = 'MusicImmersiveHeader';\n\n  public title: Text;\n  public menu: Menu | null;\n  public more_button: ToggleButton | null;\n  public play_button: Button | null;\n  public share_endpoint?: NavigationEndpoint;\n  public start_radio_button: Button | null;\n  public subscription_button: SubscribeButton | null;\n  public description: Text;\n  public thumbnail: MusicThumbnail | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.more_button = Parser.parseItem(data.moreButton, ToggleButton);\n    this.play_button = Parser.parseItem(data.playButton, Button);\n\n    if ('shareEndpoint' in data)\n      this.share_endpoint = new NavigationEndpoint(data.shareEndpoint);\n    \n    this.start_radio_button = Parser.parseItem(data.startRadioButton, Button);\n    this.subscription_button = Parser.parseItem(data.subscriptionButton, SubscribeButton);\n    this.description = new Text(data.description);\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nclass ActionButton {\n  static type = 'ActionButton';\n\n  icon_name: string;\n  endpoint: NavigationEndpoint;\n  a11y_text: string;\n  style: string;\n\n  constructor(data: RawNode) {\n    this.icon_name = data.iconName;\n    this.endpoint = new NavigationEndpoint(data.onTap);\n    this.a11y_text = data.a11yText;\n    this.style = data.style;\n  }\n}\n\nclass Panel {\n  static type = 'Panel';\n\n  image: Thumbnail[];\n\n  content_mode: string;\n  crop_options: string;\n  image_aspect_ratio: string;\n  caption: string;\n  action_buttons: ActionButton[];\n\n  constructor (data: RawNode) {\n    this.image = Thumbnail.fromResponse(data.image.image);\n    this.content_mode = data.image.contentMode;\n    this.crop_options = data.image.cropOptions;\n    this.image_aspect_ratio = data.imageAspectRatio;\n    this.caption = data.caption;\n    this.action_buttons = data.actionButtons.map((el: RawNode) => new ActionButton(el));\n  }\n}\n\nexport default class MusicLargeCardItemCarousel extends YTNode {\n  static type = 'MusicLargeCardItemCarousel';\n\n  panels: Panel[];\n  header;\n\n  constructor(data: RawNode) {\n    super();\n    // TODO: check this\n    this.header = data.shelf.header;\n    this.panels = data.shelf.panels.map((el: RawNode) => new Panel(el));\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Dropdown from './Dropdown.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicPlaylistEditHeader extends YTNode {\n  static type = 'MusicPlaylistEditHeader';\n\n  title: Text;\n  edit_title: Text;\n  edit_description: Text;\n  privacy: string;\n  playlist_id: string;\n  endpoint: NavigationEndpoint;\n  privacy_dropdown: Dropdown | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.edit_title = new Text(data.editTitle);\n    this.edit_description = new Text(data.editDescription);\n    this.privacy = data.privacy;\n    this.playlist_id = data.playlistId;\n    this.endpoint = new NavigationEndpoint(data.collaborationSettingsCommand);\n    this.privacy_dropdown = Parser.parseItem(data.privacyDropdown, Dropdown);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MusicResponsiveListItem from './MusicResponsiveListItem.js';\nimport ContinuationItem from './ContinuationItem.js';\n\nexport default class MusicPlaylistShelf extends YTNode {\n  static type = 'MusicPlaylistShelf';\n\n  public playlist_id: string;\n  public contents: ObservedArray<MusicResponsiveListItem | ContinuationItem>;\n  public collapsed_item_count: number;\n  public continuation: string | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.playlist_id = data.playlistId;\n    this.contents = Parser.parseArray(data.contents, [ MusicResponsiveListItem, ContinuationItem ]);\n    this.collapsed_item_count = data.collapsedItemCount;\n    this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null;\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport type TextRun from './misc/TextRun.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlaylistPanelVideo extends YTNode {\n  static type = 'PlaylistPanelVideo';\n\n  title: Text;\n  thumbnail: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  selected: boolean;\n  video_id: string;\n\n  duration: {\n    text: string;\n    seconds: number\n  };\n\n  author: string;\n\n  album?: {\n    id?: string;\n    name: string;\n    year?: string;\n    endpoint?: NavigationEndpoint;\n  };\n\n  artists?: {\n    name: string;\n    channel_id?: string;\n    endpoint?: NavigationEndpoint;\n  }[];\n\n  badges: ObservedArray<YTNode>;\n  menu: YTNode;\n  set_video_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = new Text(data.title);\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.selected = data.selected;\n    this.video_id = data.videoId;\n\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: timeToSeconds(new Text(data.lengthText).toString())\n    };\n\n    const album = new Text(data.longBylineText).runs?.find((run: any) => run.endpoint?.payload?.browseId?.startsWith('MPR'));\n    const artists = new Text(data.longBylineText).runs?.filter((run: any) => run.endpoint?.payload?.browseId?.startsWith('UC'));\n\n    this.author = new Text(data.shortBylineText).toString();\n\n    if (album) {\n      this.album = {\n        id: (album as TextRun).endpoint?.payload?.browseId,\n        name: (album as TextRun).text,\n        year: new Text(data.longBylineText).runs?.slice(-1)[0].text,\n        endpoint: (album as TextRun).endpoint\n      };\n    }\n\n    if (artists) {\n      this.artists = artists.map((artist) => ({\n        name: (artist as TextRun).text,\n        channel_id: (artist as TextRun).endpoint?.payload?.browseId,\n        endpoint: (artist as TextRun).endpoint\n      }));\n    }\n\n    this.badges = Parser.parseArray(data.badges);\n    this.menu = Parser.parseItem(data.menu);\n    this.set_video_id = data.playlistSetVideoId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode, observe } from '../helpers.js';\nimport PlaylistPanelVideo from './PlaylistPanelVideo.js';\n\nexport default class PlaylistPanelVideoWrapper extends YTNode {\n  static type = 'PlaylistPanelVideoWrapper';\n\n  primary: PlaylistPanelVideo | null;\n  counterpart?: ObservedArray<PlaylistPanelVideo>;\n\n  constructor(data: RawNode) {\n    super();\n    this.primary = Parser.parseItem(data.primaryRenderer, PlaylistPanelVideo);\n\n    if (Reflect.has(data, 'counterpart')) {\n      this.counterpart = observe(data.counterpart.map((item: RawNode) => Parser.parseItem(item.counterpartRenderer, PlaylistPanelVideo)) || []);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AutomixPreviewVideo from './AutomixPreviewVideo.js';\nimport PlaylistPanelVideo from './PlaylistPanelVideo.js';\nimport PlaylistPanelVideoWrapper from './PlaylistPanelVideoWrapper.js';\nimport Text from './misc/Text.js';\n\nexport default class PlaylistPanel extends YTNode {\n  static type = 'PlaylistPanel';\n\n  title: string;\n  title_text: Text;\n  contents: ObservedArray<PlaylistPanelVideoWrapper | PlaylistPanelVideo | AutomixPreviewVideo>;\n  playlist_id: string;\n  is_infinite: boolean;\n  continuation: string;\n  is_editable: boolean;\n  preview_description: string;\n  num_items_to_show: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.title_text = new Text(data.titleText);\n    this.contents = Parser.parseArray(data.contents, [ PlaylistPanelVideoWrapper, PlaylistPanelVideo, AutomixPreviewVideo ]);\n    this.playlist_id = data.playlistId;\n    this.is_infinite = data.isInfinite;\n    this.continuation = data.continuations?.[0]?.nextRadioContinuationData?.continuation || data.continuations?.[0]?.nextContinuationData?.continuation;\n    this.is_editable = data.isEditable;\n    this.preview_description = data.previewDescription;\n    this.num_items_to_show = data.numItemsToShow;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport PlaylistPanel from './PlaylistPanel.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicQueue extends YTNode {\n  static type = 'MusicQueue';\n\n  content: PlaylistPanel | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, PlaylistPanel);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport MusicDescriptionShelf from './MusicDescriptionShelf.js';\nimport MusicInlineBadge from './MusicInlineBadge.js';\nimport MusicPlayButton from './MusicPlayButton.js';\nimport ToggleButton from './ToggleButton.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport DownloadButton from './DownloadButton.js';\n\nimport type { ObservedArray } from '../helpers.js';\n\nexport default class MusicResponsiveHeader extends YTNode {\n  static type = 'MusicResponsiveHeader';\n\n  thumbnail: MusicThumbnail | null;\n  buttons: ObservedArray<DownloadButton | ToggleButton | MusicPlayButton | Button | Menu>;\n  title: Text;\n  subtitle: Text;\n  strapline_text_one: Text;\n  strapline_thumbnail: MusicThumbnail | null;\n  second_subtitle: Text;\n  subtitle_badge?: ObservedArray<MusicInlineBadge>;\n  description?: MusicDescriptionShelf | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    this.buttons = Parser.parseArray(data.buttons, [ DownloadButton, ToggleButton, MusicPlayButton, Button, Menu ]);\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.strapline_text_one = new Text(data.straplineTextOne);\n    this.strapline_thumbnail = Parser.parseItem(data.straplineThumbnail, MusicThumbnail);\n    this.second_subtitle = new Text(data.secondSubtitle);\n\n    if (Reflect.has(data, 'subtitleBadge')) {\n      this.subtitle_badge = Parser.parseArray(data.subtitleBadge, MusicInlineBadge);\n    }\n\n    if (Reflect.has(data, 'description')) {\n      this.description = Parser.parseItem(data.description, MusicDescriptionShelf);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport MusicResponsiveListItem from './MusicResponsiveListItem.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicShelf extends YTNode {\n  static type = 'MusicShelf';\n\n  title: Text;\n  contents: ObservedArray<MusicResponsiveListItem>;\n  endpoint?: NavigationEndpoint;\n  continuation?: string;\n  bottom_text?: Text;\n  bottom_button?: Button | null;\n  subheaders?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contents = Parser.parseArray(data.contents, MusicResponsiveListItem);\n\n    if (Reflect.has(data, 'bottomEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.bottomEndpoint);\n    }\n\n    if (Reflect.has(data, 'continuations')) {\n      this.continuation =\n        data.continuations?.[0].nextContinuationData?.continuation ||\n        data.continuations?.[0].reloadContinuationData?.continuation;\n    }\n\n    if (Reflect.has(data, 'bottomText')) {\n      this.bottom_text = new Text(data.bottomText);\n    }\n\n    if (Reflect.has(data, 'bottomButton')) {\n      this.bottom_button = Parser.parseItem(data.bottomButton, Button);\n    }\n\n    if (Reflect.has(data, 'subheaders')) {\n      this.subheaders = Parser.parseArray(data.subheaders);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class MusicSideAlignedItem extends YTNode {\n  static type = 'MusicSideAlignedItem';\n\n  start_items?: ObservedArray<YTNode>;\n  end_items?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'startItems')) {\n      this.start_items = Parser.parseArray(data.startItems);\n    }\n\n    if (Reflect.has(data, 'endItems')) {\n      this.end_items = Parser.parseArray(data.endItems);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MusicMultiSelectMenu from './menus/MusicMultiSelectMenu.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicSortFilterButton extends YTNode {\n  static type = 'MusicSortFilterButton';\n\n  title: string;\n  icon_type?: string;\n  menu: MusicMultiSelectMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = new Text(data.title).toString();\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.menu = Parser.parseItem(data.menu, MusicMultiSelectMenu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Thumbnail } from '../misc.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicTastebuilderShelfThumbnail extends YTNode {\n  static type = 'MusicTastebuilderShelfThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { Parser } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport MusicTastebuilderShelfThumbnail from './MusicTastebuilderShelfThumbnail.js';\n\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicTasteBuilderShelf extends YTNode {\n  static type = 'MusicTasteBuilderShelf';\n\n  thumbnail: MusicTastebuilderShelfThumbnail | null;\n  primary_text: Text;\n  secondary_text: Text;\n  action_button: Button | null;\n  is_visible: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicTastebuilderShelfThumbnail);\n    this.primary_text = new Text(data.primaryText);\n    this.secondary_text = new Text(data.secondaryText);\n    this.action_button = Parser.parseItem(data.actionButton, Button);\n    this.is_visible = data.isVisible;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MusicVisualHeader extends YTNode {\n  static type = 'MusicVisualHeader';\n\n  title: Text;\n  thumbnail: Thumbnail[];\n  menu: Menu | null;\n  foreground_thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.thumbnail = data.thumbnail ? Thumbnail.fromResponse(data.thumbnail.musicThumbnailRenderer?.thumbnail) : [];\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.foreground_thumbnail = data.foregroundThumbnail ? Thumbnail.fromResponse(data.foregroundThumbnail.musicThumbnailRenderer?.thumbnail) : [];\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport Text from '../misc/Text.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class MobileTopbar extends YTNode {\n  static type = 'MobileTopbar';\n\n  public placeholder_text: Text;\n  public buttons: ObservedArray<YTNode>;\n  public logo_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.placeholder_text = new Text(data.placeholderText);\n    this.buttons = Parser.parseArray(data.buttons);\n\n    if (Reflect.has(data, 'logo') && Reflect.has(data.logo, 'iconType'))\n      this.logo_type = data.logo.iconType;\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class MultiPageMenuSection extends YTNode {\n  static type = 'MultiPageMenuSection';\n\n  public items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class PivotBar extends YTNode {\n  static type = 'PivotBar';\n\n  public items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { type RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from '../misc/AccessibilityData.js';\n\nexport default class PivotBarItem extends YTNode {\n  static type = 'PivotBarItem';\n\n  public pivot_identifier: string;\n  public endpoint: NavigationEndpoint;\n  public title: Text;\n  public accessibility_label?: string;\n  public icon_type?: string;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.pivot_identifier = data.pivotIdentifier;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.title = new Text(data.title);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n    \n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))\n      this.icon_type = data.icon.iconType;\n  }\n  \n  get label() {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class TopbarMenuButton extends YTNode {\n  static type = 'TopbarMenuButton';\n\n  public icon_type?: string;\n  public menu_renderer: YTNode | null;\n  public target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))\n      this.icon_type = data.icon.iconType;\n    this.menu_renderer = Parser.parseItem(data.menuRenderer);\n    this.target_id = data.targetId;\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nexport default class NotificationAction extends YTNode {\n  static type = 'NotificationAction';\n\n  public response_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.response_text = new Text(data.responseText);\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class OpenOnePickAddVideoModalCommand extends YTNode {\n  static type = 'OpenOnePickAddVideoModalCommand';\n\n  list_id: string;\n  modal_title: string;\n  select_button_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.list_id = data.listId;\n    this.modal_title = data.modalTitle;\n    this.select_button_label = data.selectButtonLabel;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ContentMetadataView from './ContentMetadataView.js';\nimport ContentPreviewImageView from './ContentPreviewImageView.js';\nimport DecoratedAvatarView from './DecoratedAvatarView.js';\nimport DynamicTextView from './DynamicTextView.js';\nimport FlexibleActionsView from './FlexibleActionsView.js';\nimport DescriptionPreviewView from './DescriptionPreviewView.js';\nimport AttributionView from './AttributionView.js';\nimport ImageBannerView from './ImageBannerView.js';\n\nexport default class PageHeaderView extends YTNode {\n  static type = 'PageHeaderView';\n\n  title: DynamicTextView | null;\n  image: ContentPreviewImageView | DecoratedAvatarView | null;\n  animated_image: ContentPreviewImageView | null;\n  hero_image: ContentPreviewImageView | null;\n  metadata: ContentMetadataView | null;\n  actions: FlexibleActionsView | null;\n  description: DescriptionPreviewView | null;\n  attributation: AttributionView | null;\n  banner: ImageBannerView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = Parser.parseItem(data.title, DynamicTextView);\n    this.image = Parser.parseItem(data.image, [ ContentPreviewImageView, DecoratedAvatarView ]);\n    this.animated_image = Parser.parseItem(data.animatedImage, ContentPreviewImageView);\n    this.hero_image = Parser.parseItem(data.heroImage, ContentPreviewImageView);\n    this.metadata = Parser.parseItem(data.metadata, ContentMetadataView);\n    this.actions = Parser.parseItem(data.actions, FlexibleActionsView);\n    this.description = Parser.parseItem(data.description, DescriptionPreviewView);\n    this.attributation = Parser.parseItem(data.attributation, AttributionView);\n    this.banner = Parser.parseItem(data.banner, ImageBannerView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport PageHeaderView from './PageHeaderView.js';\n\nexport default class PageHeader extends YTNode {\n  static type = 'PageHeader';\n\n  page_title: string;\n  content: PageHeaderView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.page_title = data.pageTitle;\n    this.content = Parser.parseItem(data.content, PageHeaderView);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PageIntroduction extends YTNode {\n  static type = 'PageIntroduction';\n\n  header_text: string;\n  body_text: string;\n  page_title: string;\n  header_icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_text = new Text(data.headerText).toString();\n    this.body_text = new Text(data.bodyText).toString();\n    this.page_title = new Text(data.pageTitle).toString();\n    this.header_icon_type = data.headerIcon.iconType;\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class PivotButton extends YTNode {\n  static type = 'PivotButton';\n\n  thumbnail: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  content_description: Text;\n  target_id: string;\n  sound_attribution_title: Text;\n  waveform_animation_style: string;\n  background_animation_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.onClickCommand);\n    this.content_description = new Text(data.contentDescription);\n    this.target_id = data.targetId;\n    this.sound_attribution_title = new Text(data.soundAttributionTitle);\n    this.waveform_animation_style = data.waveformAnimationStyle;\n    this.background_animation_style = data.backgroundAnimationStyle;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class PlayerAnnotationsExpanded extends YTNode {\n  static type = 'PlayerAnnotationsExpanded';\n\n  featured_channel?: {\n    start_time_ms: number;\n    end_time_ms: number;\n    watermark: Thumbnail[];\n    channel_name: string;\n    endpoint: NavigationEndpoint;\n    subscribe_button: YTNode | null;\n  };\n\n  allow_swipe_dismiss: boolean;\n  annotation_id: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'featuredChannel')) {\n      this.featured_channel = {\n        start_time_ms: data.featuredChannel.startTimeMs,\n        end_time_ms: data.featuredChannel.endTimeMs,\n        watermark: Thumbnail.fromResponse(data.featuredChannel.watermark),\n        channel_name: data.featuredChannel.channelName,\n        endpoint: new NavigationEndpoint(data.featuredChannel.navigationEndpoint),\n        subscribe_button: Parser.parseItem(data.featuredChannel.subscribeButton)\n      };\n    }\n\n    this.allow_swipe_dismiss = data.allowSwipeDismiss;\n    this.annotation_id = data.annotationId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport { type RawNode } from '../index.js';\n\nexport default class PlayerCaptchaView extends YTNode {\n  static type = 'PlayerCaptchaView';\n\n  public captcha_loading_message?: Text;\n  public challenge_reason?: Text;\n  public captcha_successful_message?: Text;\n  public captcha_cookie_set_failure_message?: Text;\n  public captcha_failed_message?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if ('captchaLoadingMessage' in data) {\n      this.captcha_loading_message = Text.fromAttributed(data.captchaLoadingMessage);\n    }\n\n    if ('challengeReason' in data) {\n      this.challenge_reason = Text.fromAttributed(data.challengeReason);\n    }\n\n    if ('captchaSuccessfulMessage' in data) {\n      this.captcha_successful_message = Text.fromAttributed(data.captchaSuccessfulMessage);\n    }\n\n    if ('captchaCookieSetFailureMessage' in data) {\n      this.captcha_cookie_set_failure_message = Text.fromAttributed(data.captchaCookieSetFailureMessage);\n    }\n\n    if ('captchaFailedMessage' in data) {\n      this.captcha_failed_message = Text.fromAttributed(data.captchaFailedMessage);\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport interface CaptionTrackData {\n  base_url: string;\n  name: Text;\n  vss_id: string;\n  language_code: string;\n  kind?: 'asr' | 'frc';\n  is_translatable: boolean;\n}\n\nexport default class PlayerCaptionsTracklist extends YTNode {\n  static type = 'PlayerCaptionsTracklist';\n\n  caption_tracks?: CaptionTrackData[];\n\n  audio_tracks?: {\n    audio_track_id: string;\n    captions_initial_state: string;\n    default_caption_track_index?: number;\n    has_default_track: boolean;\n    visibility: string;\n    caption_track_indices: number[];\n  }[];\n\n  default_audio_track_index?: number;\n\n  translation_languages?: {\n    language_code: string;\n    language_name: Text;\n  }[];\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'captionTracks')) {\n      this.caption_tracks = data.captionTracks.map((ct: any) => ({\n        base_url: ct.baseUrl,\n        name: new Text(ct.name),\n        vss_id: ct.vssId,\n        language_code: ct.languageCode,\n        kind: ct.kind,\n        is_translatable: ct.isTranslatable\n      }));\n    }\n\n    if (Reflect.has(data, 'audioTracks')) {\n      this.audio_tracks = data.audioTracks.map((at: any) => ({\n        audio_track_id: at.audioTrackId,\n        captions_initial_state: at.captionsInitialState,\n        default_caption_track_index: at.defaultCaptionTrackIndex,\n        has_default_track: at.hasDefaultTrack,\n        visibility: at.visibility,\n        caption_track_indices: at.captionTrackIndices\n      }));\n    }\n\n    if (Reflect.has(data, 'defaultAudioTrackIndex')) {\n      this.default_audio_track_index = data.defaultAudioTrackIndex;\n    }\n\n    if (Reflect.has(data, 'translationLanguages')) {\n      this.translation_languages = data.translationLanguages.map((tl: any) => ({\n        language_code: tl.languageCode,\n        language_name: new Text(tl.languageName)\n      }));\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class PlayerOverflow extends YTNode {\n  static type = 'PlayerOverflow';\n\n  endpoint: NavigationEndpoint;\n  enable_listen_first: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.enable_listen_first = data.enableListenFirst;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport PlayerOverflow from './PlayerOverflow.js';\n\nexport default class PlayerControlsOverlay extends YTNode {\n  static type = 'PlayerControlsOverlay';\n\n  overflow: PlayerOverflow | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.overflow = Parser.parseItem(data.overflow, PlayerOverflow);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlayerErrorMessage extends YTNode {\n  static type = 'PlayerErrorMessage';\n\n  subreason: Text;\n  reason: Text;\n  proceed_button: Button | null;\n  thumbnails: Thumbnail[];\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.subreason = new Text(data.subreason);\n    this.reason = new Text(data.reason);\n    this.proceed_button = Parser.parseItem(data.proceedButton, Button);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlayerLegacyDesktopYpcOffer extends YTNode {\n  static type = 'PlayerLegacyDesktopYpcOffer';\n\n  title: string;\n  thumbnail: string;\n  offer_description: string;\n  offer_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.itemTitle;\n    this.thumbnail = data.itemThumbnail;\n    this.offer_description = data.offerDescription;\n    this.offer_id = data.offerId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { IRawResponse, RawNode } from '../index.js';\n\nexport default class YpcTrailer extends YTNode {\n  static type = 'YpcTrailer';\n\n  video_message: string;\n  player_response: IRawResponse;\n\n  constructor(data: RawNode) {\n    super();\n    this.video_message = data.fullVideoMessage;\n    this.player_response = data.unserializedPlayerResponse;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport YpcTrailer from './YpcTrailer.js';\n\nexport default class PlayerLegacyDesktopYpcTrailer extends YTNode {\n  static type = 'PlayerLegacyDesktopYpcTrailer';\n\n  video_id: string;\n  title: string;\n  thumbnail: string;\n  offer_headline: string;\n  offer_description: string;\n  offer_id: string;\n  offer_button_text: string;\n  video_message: string;\n  trailer: YpcTrailer | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.video_id = data.trailerVideoId;\n    this.title = data.itemTitle;\n    this.thumbnail = data.itemThumbnail;\n    this.offer_headline = data.offerHeadline;\n    this.offer_description = data.offerDescription;\n    this.offer_id = data.offerId;\n    this.offer_button_text = data.offerButtonText;\n    this.video_message = data.fullVideoMessage;\n    this.trailer = Parser.parseItem(data.ypcTrailer, YpcTrailer);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport interface LiveStoryboardData {\n  type: 'live',\n  template_url: string,\n  thumbnail_width: number,\n  thumbnail_height: number,\n  columns: number,\n  rows: number\n}\n\nexport default class PlayerLiveStoryboardSpec extends YTNode {\n  static type = 'PlayerLiveStoryboardSpec';\n\n  board: LiveStoryboardData;\n\n  constructor(data: RawNode) {\n    super();\n\n    const [ template_url, thumbnail_width, thumbnail_height, columns, rows ] = data.spec.split('#');\n\n    this.board = {\n      type: 'live',\n      template_url,\n      thumbnail_width: parseInt(thumbnail_width, 10),\n      thumbnail_height: parseInt(thumbnail_height, 10),\n      columns: parseInt(columns, 10),\n      rows: parseInt(rows, 10)\n    };\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlayerMicroformat extends YTNode {\n  static type = 'PlayerMicroformat';\n\n  title: Text;\n  description: Text;\n  thumbnails;\n\n  embed?: {\n    iframe_url: string;\n    flash_url: string;\n    flash_secure_url: string;\n    // TODO: check these\n    width: any;\n    height: any;\n  };\n\n  length_seconds: number;\n\n  channel: {\n    id: string;\n    name: string;\n    url: string;\n  };\n\n  is_family_safe: boolean;\n  is_unlisted: boolean;\n  has_ypc_metadata: boolean;\n  view_count: number;\n  category: string;\n  publish_date: string;\n  upload_date: string;\n  available_countries: string[];\n  start_timestamp: Date | null;\n  end_timestamp: Date | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n\n    if (Reflect.has(data, 'embed')) {\n      this.embed = {\n        iframe_url: data.embed.iframeUrl,\n        flash_url: data.embed.flashUrl,\n        flash_secure_url: data.embed.flashSecureUrl,\n        width: data.embed.width,\n        height: data.embed.height\n      };\n    }\n\n    this.length_seconds = parseInt(data.lengthSeconds);\n\n    this.channel = {\n      id: data.externalChannelId,\n      name: data.ownerChannelName,\n      url: data.ownerProfileUrl\n    };\n\n    this.is_family_safe = !!data.isFamilySafe;\n    this.is_unlisted = !!data.isUnlisted;\n    this.has_ypc_metadata = !!data.hasYpcMetadata;\n    this.view_count = parseInt(data.viewCount);\n    this.category = data.category;\n    this.publish_date = data.publishDate;\n    this.upload_date = data.uploadDate;\n    this.available_countries = data.availableCountries;\n    this.start_timestamp = data.liveBroadcastDetails?.startTimestamp ? new Date(data.liveBroadcastDetails.startTimestamp) : null;\n    this.end_timestamp = data.liveBroadcastDetails?.endTimestamp ? new Date(data.liveBroadcastDetails.endTimestamp) : null;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlayerOverlayAutoplay extends YTNode {\n  static type = 'PlayerOverlayAutoplay';\n\n  title: Text;\n  video_id: string;\n  video_title: Text;\n  short_view_count: Text;\n\n  // @TODO: Find out what these are.\n  prefer_immediate_redirect;\n  count_down_secs_for_fullscreen;\n\n  published: Text;\n  background: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n  cancel_button: Button | null;\n  next_button: Button | null;\n  close_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.video_id = data.videoId;\n    this.video_title = new Text(data.videoTitle);\n    this.short_view_count = new Text(data.shortViewCountText);\n    this.prefer_immediate_redirect = data.preferImmediateRedirect;\n    this.count_down_secs_for_fullscreen = data.countDownSecsForFullscreen;\n    this.published = new Text(data.publishedTimeText);\n    this.background = Thumbnail.fromResponse(data.background);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.byline);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n    this.close_button = Parser.parseItem(data.closeButton, Button);\n  }\n}", "import { Text } from '../misc.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class PlayerOverlayVideoDetails extends YTNode {\n  static type = 'PlayerOverlayVideoDetails';\n\n  public title: Text;\n  public subtitle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport EndScreenPlaylist from './EndScreenPlaylist.js';\nimport EndScreenVideo from './EndScreenVideo.js';\nimport Text from './misc/Text.js';\n\nexport default class WatchNextEndScreen extends YTNode {\n  static type = 'WatchNextEndScreen';\n\n  results: ObservedArray<EndScreenVideo | EndScreenPlaylist>;\n  title: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.results = Parser.parseArray(data.results, [ EndScreenVideo, EndScreenPlaylist ]);\n    this.title = new Text(data.title).toString();\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport DecoratedPlayerBar from './DecoratedPlayerBar.js';\nimport PlayerOverlayAutoplay from './PlayerOverlayAutoplay.js';\nimport PlayerOverlayVideoDetails from './PlayerOverlayVideoDetails.js';\nimport WatchNextEndScreen from './WatchNextEndScreen.js';\nimport Menu from './menus/Menu.js';\n\nexport default class PlayerOverlay extends YTNode {\n  static type = 'PlayerOverlay';\n\n  public end_screen: WatchNextEndScreen | null;\n  public autoplay: PlayerOverlayAutoplay | null;\n  public share_button: Button | null;\n  public add_to_menu: Menu | null;\n  public fullscreen_engagement: YTNode | null;\n  public actions: ObservedArray<YTNode>;\n  public browser_media_session: YTNode | null;\n  public decorated_player_bar: DecoratedPlayerBar | null;\n  public video_details: PlayerOverlayVideoDetails | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.end_screen = Parser.parseItem(data.endScreen, WatchNextEndScreen);\n    this.autoplay = Parser.parseItem(data.autoplay, PlayerOverlayAutoplay);\n    this.share_button = Parser.parseItem(data.shareButton, Button);\n    this.add_to_menu = Parser.parseItem(data.addToMenu, Menu);\n    this.fullscreen_engagement = Parser.parseItem(data.fullscreenEngagement);\n    this.actions = Parser.parseArray(data.actions);\n    this.browser_media_session = Parser.parseItem(data.browserMediaSession);\n    this.decorated_player_bar = Parser.parseItem(data.decoratedPlayerBarRenderer, DecoratedPlayerBar);\n    this.video_details = Parser.parseItem(data.videoDetails, PlayerOverlayVideoDetails);\n  }\n}", "import Text from './misc/Text.js';\nimport Author from './misc/Author.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class PlaylistHeader extends YTNode {\n  static type = 'PlaylistHeader';\n\n  id: string;\n  title: Text;\n  subtitle: Text | null;\n  stats: Text[];\n  brief_stats: Text[];\n  author: Author | null;\n  description: Text;\n  num_videos: Text;\n  view_count: Text;\n  can_share: boolean;\n  can_delete: boolean;\n  is_editable: boolean;\n  privacy: string;\n  save_button: YTNode;\n  shuffle_play_button: YTNode;\n  menu: YTNode;\n  banner: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n    this.subtitle = data.subtitle ? new Text(data.subtitle) : null;\n    this.stats = data.stats.map((stat: RawNode) => new Text(stat));\n    this.brief_stats = data.briefStats.map((stat: RawNode) => new Text(stat));\n    this.author = data.ownerText || data.ownerEndpoint ? new Author({ ...data.ownerText, navigationEndpoint: data.ownerEndpoint }, data.ownerBadges, null) : null;\n    this.description = new Text(data.descriptionText);\n    this.num_videos = new Text(data.numVideosText);\n    this.view_count = new Text(data.viewCountText);\n    this.can_share = data.shareData.canShare;\n    this.can_delete = data.editableDetails.canDelete;\n    this.is_editable = data.isEditable;\n    this.privacy = data.privacy;\n    this.save_button = Parser.parseItem(data.saveButton);\n    this.shuffle_play_button = Parser.parseItem(data.shufflePlayButton);\n    this.menu = Parser.parseItem(data.moreActionsMenu);\n    this.banner = Parser.parseItem(data.playlistHeaderBanner);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlaylistInfoCardContent extends YTNode {\n  static type = 'PlaylistInfoCardContent';\n\n  title: Text;\n  thumbnails: Thumbnail[];\n  video_count: Text;\n  channel_name: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.playlistTitle);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_count = new Text(data.playlistVideoCount);\n    this.channel_name = new Text(data.channelName);\n    this.endpoint = new NavigationEndpoint(data.action);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlaylistMetadata extends YTNode {\n  static type = 'PlaylistMetadata';\n\n  title: string;\n  description: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.description = data.description || null;\n    // XXX: Appindexing should be in microformat.\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class PlaylistSidebar extends YTNode {\n  static type = 'PlaylistSidebar';\n\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: alias for consistency\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class PlaylistSidebarPrimaryInfo extends YTNode {\n  static type = 'PlaylistSidebarPrimaryInfo';\n\n  public stats: Text[];\n  public thumbnail_renderer: YTNode;\n  public title: Text;\n  public menu: YTNode;\n  public endpoint: NavigationEndpoint;\n  public description: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.stats = data.stats.map((stat: RawNode) => new Text(stat));\n    this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer);\n    this.title = new Text(data.title);\n    this.menu = Parser.parseItem(data.menu);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.description = new Text(data.description);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class PlaylistSidebarSecondaryInfo extends YTNode {\n  static type = 'PlaylistSidebarSecondaryInfo';\n\n  owner: YTNode;\n  button: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.owner = Parser.parseItem(data.videoOwner);\n    this.button = Parser.parseItem(data.button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class PlaylistThumbnailOverlay extends YTNode {\n  static type = 'PlaylistThumbnailOverlay';\n\n  public icon_type?: string;\n  public text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'icon'))\n      this.icon_type = data.icon.iconType;\n    this.text = new Text(data.text);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ThumbnailOverlayTimeStatus from './ThumbnailOverlayTimeStatus.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlaylistVideo extends YTNode {\n  static type = 'PlaylistVideo';\n\n  id: string;\n  index: Text;\n  title: Text;\n  author: Author;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  set_video_id: string | undefined;\n  endpoint: NavigationEndpoint;\n  is_playable: boolean;\n  menu: Menu | null;\n  upcoming?: Date;\n  video_info: Text;\n  accessibility_label?: string;\n  style?: string;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.index = new Text(data.index);\n    this.title = new Text(data.title);\n    this.author = new Author(data.shortBylineText);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.set_video_id = data?.setVideoId;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.is_playable = data.isPlayable;\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.video_info = new Text(data.videoInfo);\n    this.accessibility_label = data.title.accessibility.accessibilityData.label;\n\n    if (Reflect.has(data, 'style')) {\n      this.style = data.style;\n    }\n\n    const upcoming = data.upcomingEventData && Number(`${data.upcomingEventData.startTime}000`);\n    if (upcoming) {\n      this.upcoming = new Date(upcoming);\n    }\n\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: parseInt(data.lengthSeconds)\n    };\n  }\n\n  get is_live(): boolean {\n    return this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === 'LIVE';\n  }\n\n  get is_upcoming(): boolean {\n    return this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === 'UPCOMING';\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class PlaylistVideoList extends YTNode {\n  static type = 'PlaylistVideoList';\n\n  id: string;\n  is_editable: boolean;\n  can_reorder: boolean;\n  videos: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.is_editable = data.isEditable;\n    this.can_reorder = data.canReorder;\n    this.videos = Parser.parseArray(data.contents);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Poll extends YTNode {\n  static type = 'Poll';\n\n  choices: {\n    text: Text;\n    select_endpoint: NavigationEndpoint | null;\n    deselect_endpoint: NavigationEndpoint | null;\n    vote_ratio_if_selected: number | null;\n    vote_percentage_if_selected: Text;\n    vote_ratio_if_not_selected: number | null;\n    vote_percentage_if_not_selected: Text;\n    image: Thumbnail[] | null;\n  }[];\n\n  poll_type?: string;\n  total_votes?: Text;\n  live_chat_poll_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.choices = data.choices.map((choice: RawNode) => ({\n      text: new Text(choice.text),\n      select_endpoint: choice.selectServiceEndpoint ? new NavigationEndpoint(choice.selectServiceEndpoint) : null,\n      deselect_endpoint: choice.deselectServiceEndpoint ? new NavigationEndpoint(choice.deselectServiceEndpoint) : null,\n      vote_ratio_if_selected: choice?.voteRatioIfSelected || null,\n      vote_percentage_if_selected: new Text(choice.votePercentageIfSelected),\n      vote_ratio_if_not_selected: choice?.voteRatioIfSelected || null,\n      vote_percentage_if_not_selected: new Text(choice.votePercentageIfSelected),\n      image: choice.image ? Thumbnail.fromResponse(choice.image) : null\n    }));\n\n    if (Reflect.has(data, 'type'))\n      this.poll_type = data.type;\n\n    if (Reflect.has(data, 'totalVotes'))\n      this.total_votes = new Text(data.totalVotes);\n\n    if (Reflect.has(data, 'liveChatPollId'))\n      this.live_chat_poll_id = data.liveChatPollId;\n  }\n}", "import type { RawNode } from '../index.js';\nimport BackstagePost from './BackstagePost.js';\n\nexport default class Post extends BackstagePost {\n  static type = 'Post';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport BackstageImage from './BackstageImage.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class PostMultiImage extends YTNode {\n  static type = 'PostMultiImage';\n\n  images: ObservedArray<BackstageImage>;\n\n  constructor(data: RawNode) {\n    super();\n    this.images = Parser.parseArray(data.images, BackstageImage);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class PremiereTrailerBadge extends YTNode {\n  static type = 'PremiereTrailerBadge';\n\n  public label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class ProductListHeader extends YTNode {\n  static type = 'ProductListHeader';\n\n  title: Text;\n  suppress_padding_disclaimer: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.suppress_padding_disclaimer = !!data.suppressPaddingDisclaimer;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport { Text, Thumbnail } from '../misc.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ProductListItem extends YTNode {\n  static type = 'ProductListItem';\n\n  title: Text;\n  accessibility_title: string;\n  thumbnail: Thumbnail[];\n  price: string;\n  endpoint: NavigationEndpoint;\n  merchant_name: string;\n  stay_in_app: boolean;\n  view_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.accessibility_title = data.accessibilityTitle;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.price = data.price;\n    this.endpoint = new NavigationEndpoint(data.onClickCommand);\n    this.merchant_name = data.merchantName;\n    this.stay_in_app = !!data.stayInApp;\n    this.view_button = Parser.parseItem(data.viewButton, Button);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class ProfileColumn extends YTNode {\n  static type = 'ProfileColumn';\n\n  public items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class ProfileColumnStats extends YTNode {\n  static type = 'ProfileColumnStats';\n\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ProfileColumnStatsEntry extends YTNode {\n  static type = 'ProfileColumnStatsEntry';\n\n  label: Text;\n  value: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.value = new Text(data.value);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ProfileColumnUserInfo extends YTNode {\n  static type = 'ProfileColumnUserInfo';\n\n  title: Text;\n  thumbnails: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class Quiz extends YTNode {\n  static type = 'Quiz';\n\n  choices: {\n    text: Text;\n    is_correct: boolean;\n  }[];\n\n  total_votes: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.choices = data.choices.map((choice: RawNode) => ({\n      text: new Text(choice.text),\n      is_correct: choice.isCorrect\n    }));\n\n    this.total_votes = new Text(data.totalVotes);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class RecognitionShelf extends YTNode {\n  static type = 'RecognitionShelf';\n\n  title: Text;\n  subtitle: Text;\n  avatars: Thumbnail[];\n  button: Button | null;\n  surface: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.avatars = data.avatars.map((avatar: RawNode) => new Thumbnail(avatar));\n    this.button = Parser.parseItem(data.button, Button);\n    this.surface = data.surface;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class ReelItem extends YTNode {\n  static type = 'ReelItem';\n\n  public id: string;\n  public title: Text;\n  public thumbnails: Thumbnail[];\n  public views: Text;\n  public endpoint: NavigationEndpoint;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.headline);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.views = new Text(data.viewCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label() {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class ReelPlayerHeader extends YTNode {\n  static type = 'ReelPlayerHeader';\n\n  reel_title_text: Text;\n  timestamp_text: Text;\n  channel_title_text: Text;\n  channel_thumbnail: Thumbnail[];\n  author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    this.reel_title_text = new Text(data.reelTitleText);\n    this.timestamp_text = new Text(data.timestampText);\n    this.channel_title_text = new Text(data.channelTitleText);\n    this.channel_thumbnail = Thumbnail.fromResponse(data.channelThumbnail);\n    this.author = new Author(data.channelNavigationEndpoint, undefined);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Button from './Button.js';\nimport Menu from './menus/Menu.js';\nimport InfoPanelContainer from './InfoPanelContainer.js';\nimport LikeButton from './LikeButton.js';\nimport ReelPlayerHeader from './ReelPlayerHeader.js';\nimport PivotButton from './PivotButton.js';\nimport SubscribeButton from './SubscribeButton.js';\n\nexport default class ReelPlayerOverlay extends YTNode {\n  static type = 'ReelPlayerOverlay';\n\n  like_button: LikeButton | null;\n  reel_player_header_supported_renderers: ReelPlayerHeader | null;\n  menu: Menu | null;\n  next_item_button: Button | null;\n  prev_item_button: Button | null;\n  subscribe_button_renderer: Button | SubscribeButton | null;\n  style: string;\n  view_comments_button: Button | null;\n  share_button: Button | null;\n  pivot_button: PivotButton | null;\n  info_panel: InfoPanelContainer | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButton, LikeButton);\n    this.reel_player_header_supported_renderers = Parser.parseItem(data.reelPlayerHeaderSupportedRenderers, ReelPlayerHeader);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.next_item_button = Parser.parseItem(data.nextItemButton, Button);\n    this.prev_item_button = Parser.parseItem(data.prevItemButton, Button);\n    this.subscribe_button_renderer = Parser.parseItem(data.subscribeButtonRenderer, [ Button, SubscribeButton ]);\n    this.style = data.style;\n    this.view_comments_button = Parser.parseItem(data.viewCommentsButton, Button);\n    this.share_button = Parser.parseItem(data.shareButton, Button);\n    this.pivot_button = Parser.parseItem(data.pivotButton, PivotButton);\n    this.info_panel = Parser.parseItem(data.infoPanel, InfoPanelContainer);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class RelatedChipCloud extends YTNode {\n  static type = 'RelatedChipCloud';\n\n  content: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class RichGrid extends YTNode {\n  static type = 'RichGrid';\n\n  header: YTNode;\n  contents: ObservedArray<YTNode>;\n  target_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    // (Daniel Wykerd) XXX: we don't parse the masthead since it is usually an advertisement\n    // (Daniel Wykerd) XXX: reflowOptions aren't parsed, I think its only used internally for layout\n    this.header = Parser.parseItem(data.header);\n    this.contents = Parser.parseArray(data.contents);\n\n    if (Reflect.has(data, 'targetId'))\n      this.target_id = data.targetId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class RichItem extends YTNode {\n  static type = 'RichItem';\n\n  content: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class RichListHeader extends YTNode {\n  static type = 'RichListHeader';\n\n  title: Text;\n  subtitle: Text;\n  title_style?: string;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n\n    if (Reflect.has(data, 'titleStyle')) {\n      this.title_style = data.titleStyle.style;\n    }\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class RichMetadata extends YTNode {\n  static type = 'RichMetadata';\n\n  thumbnail: Thumbnail[];\n  title: Text;\n  subtitle: Text;\n  call_to_action: Text;\n  icon_type?: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.call_to_action = new Text(data.callToAction);\n\n    if (Reflect.has(data, 'callToActionIcon')) {\n      this.icon_type = data.callToActionIcon.iconType;\n    }\n\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class RichMetadataRow extends YTNode {\n  static type = 'RichMetadataRow';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class RichSection extends YTNode {\n  static type = 'RichSection';\n\n  public content: YTNode;\n  public full_bleed: boolean;\n  public target_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content);\n    this.full_bleed = !!data.fullBleed;\n\n    if ('targetId' in data) {\n      this.target_id = data.targetId;\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class RichShelf extends YTNode {\n  static type = 'RichShelf';\n\n  public title: Text;\n  public contents: ObservedArray<YTNode>;\n  public endpoint?: NavigationEndpoint;\n  public subtitle?: Text;\n  public is_expanded: boolean;\n  public is_bottom_divider_hidden: boolean;\n  public is_top_divider_hidden: boolean;\n  public layout_sizing?: 'RICH_GRID_LAYOUT_SIZING_UNSPECIFIED'\n    | 'RICH_GRID_LAYOUT_SIZING_STANDARD'\n    | 'RICH_GRID_LAYOUT_SIZING_COMPACT'\n    | 'RICH_GRID_LAYOUT_SIZING_EXTRA_COMPACT'\n    | 'RICH_GRID_LAYOUT_SIZING_TINY';\n  public icon_type?: string;\n  public menu: YTNode | null;\n  public next_button: YTNode | null;\n  public previous_button: YTNode | null;\n  \n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contents = Parser.parseArray(data.contents);\n\n    this.is_expanded = !!data.is_expanded;\n    this.is_bottom_divider_hidden = !!data.isBottomDividerHidden;\n    this.is_top_divider_hidden = !!data.isTopDividerHidden;\n\n    if ('endpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.endpoint);\n    }\n\n    if ('subtitle' in data) {\n      this.subtitle = new Text(data.subtitle);\n    }\n\n    if ('layoutSizing' in data) {\n      this.layout_sizing = data.layoutSizing;\n    }\n    \n    if ('icon' in data) {\n      this.icon_type = data.icon.iconType;\n    }\n    \n    this.menu = Parser.parseItem(data.menu);\n    this.next_button = Parser.parseItem(data.nextButton);\n    this.previous_button = Parser.parseItem(data.previousButton);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class SearchFilter extends YTNode {\n  static type = 'SearchFilter';\n\n  label: Text;\n  endpoint: NavigationEndpoint;\n  tooltip: string;\n  status?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.endpoint = new NavigationEndpoint(data.endpoint || data.navigationEndpoint);\n    this.tooltip = data.tooltip;\n\n    if (Reflect.has(data, 'status')) {\n      this.status = data.status;\n    }\n  }\n\n  get disabled(): boolean {\n    return this.status === 'FILTER_STATUS_DISABLED';\n  }\n\n  get selected(): boolean {\n    return this.status === 'FILTER_STATUS_SELECTED';\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Text from './misc/Text.js';\nimport SearchFilter from './SearchFilter.js';\n\nexport default class SearchFilterGroup extends YTNode {\n  static type = 'SearchFilterGroup';\n\n  title: Text;\n  filters: ObservedArray<SearchFilter>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.filters = Parser.parseArray(data.filters, SearchFilter);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport SearchFilterGroup from './SearchFilterGroup.js';\nimport Text from './misc/Text.js';\n\nexport default class SearchFilterOptionsDialog extends YTNode {\n  static type = 'SearchFilterOptionsDialog';\n\n  title: Text;\n  groups: ObservedArray<SearchFilterGroup>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.groups = Parser.parseArray(data.groups, SearchFilterGroup);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport ChipCloud from './ChipCloud.js';\n\nexport default class SearchHeader extends YTNode {\n  static type = 'SearchHeader';\n\n  chip_bar: ChipCloud | null;\n  search_filter_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.chip_bar = Parser.parseItem(data.chipBar, ChipCloud);\n    this.search_filter_button = Parser.parseItem(data.searchFilterButton, Button);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Text from './misc/Text.js';\nimport SearchFilterGroup from './SearchFilterGroup.js';\nimport ToggleButton from './ToggleButton.js';\n\nexport default class SearchSubMenu extends YTNode {\n  static type = 'SearchSubMenu';\n\n  title?: Text;\n  groups?: ObservedArray<SearchFilterGroup>;\n  button?: ToggleButton | null;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'title'))\n      this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'groups'))\n      this.groups = Parser.parseArray(data.groups, SearchFilterGroup);\n\n    if (Reflect.has(data, 'button'))\n      this.button = Parser.parseItem(data.button, ToggleButton);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class SearchSuggestionsSection extends YTNode {\n  static type = 'SearchSuggestionsSection';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class UniversalWatchCard extends YTNode {\n  static type = 'UniversalWatchCard';\n\n  header: YTNode;\n  call_to_action: YTNode;\n  sections: ObservedArray<YTNode>;\n  collapsed_label?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.call_to_action = Parser.parseItem(data.callToAction);\n    this.sections = Parser.parseArray(data.sections);\n    if (Reflect.has(data, 'collapsedLabel')) {\n      this.collapsed_label = new Text(data.collapsedLabel);\n    }\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport UniversalWatchCard from './UniversalWatchCard.js';\n\nexport default class SecondarySearchContainer extends YTNode {\n  static type = 'SecondarySearchContainer';\n\n  public target_id?: string;\n  public contents: ObservedArray<UniversalWatchCard>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ UniversalWatchCard ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class SectionHeaderView extends YTNode {\n  static type = 'SectionHeaderView';\n  \n  public headline: Text;\n  \n  constructor(data: RawNode) {\n    super();\n    this.headline = Text.fromAttributed(data.headline);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport ToggleButton from './ToggleButton.js';\n\nexport default class SegmentedLikeDislikeButton extends YTNode {\n  static type = 'SegmentedLikeDislikeButton';\n\n  like_button: ToggleButton | Button | null;\n  dislike_button: ToggleButton | Button | null;\n\n  constructor (data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButton, [ ToggleButton, Button ]);\n    this.dislike_button = Parser.parseItem(data.dislikeButton, [ ToggleButton, Button ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingBoolean extends YTNode {\n  static type = 'SettingBoolean';\n\n  title?: Text;\n  summary?: Text;\n  enable_endpoint?: NavigationEndpoint;\n  disable_endpoint?: NavigationEndpoint;\n  item_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'title')) {\n      this.title = new Text(data.title);\n    }\n\n    if (Reflect.has(data, 'summary')) {\n      this.summary = new Text(data.summary);\n    }\n\n    if (Reflect.has(data, 'enableServiceEndpoint')) {\n      this.enable_endpoint = new NavigationEndpoint(data.enableServiceEndpoint);\n    }\n\n    if (Reflect.has(data, 'disableServiceEndpoint')) {\n      this.disable_endpoint = new NavigationEndpoint(data.disableServiceEndpoint);\n    }\n\n    this.item_id = data.itemId;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SettingsCheckbox extends YTNode {\n  static type = 'SettingsCheckbox';\n\n  title: Text;\n  help_text: Text;\n  enabled: boolean;\n  disabled: boolean;\n  id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.help_text = new Text(data.helpText);\n    this.enabled = data.enabled;\n    this.disabled = data.disabled;\n    this.id = data.id;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingsSwitch extends YTNode {\n  static type = 'SettingsSwitch';\n\n  title: Text;\n  subtitle: Text;\n  enabled: boolean;\n  enable_endpoint: NavigationEndpoint;\n  disable_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.enabled = data.enabled;\n    this.enable_endpoint = new NavigationEndpoint(data.enableServiceEndpoint);\n    this.disable_endpoint = new NavigationEndpoint(data.disableServiceEndpoint);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChannelOptions from './ChannelOptions.js';\nimport CopyLink from './CopyLink.js';\nimport Dropdown from './Dropdown.js';\nimport SettingsCheckbox from './SettingsCheckbox.js';\nimport SettingsSwitch from './SettingsSwitch.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingsOptions extends YTNode {\n  static type = 'SettingsOptions';\n\n  title: Text;\n  text?: string;\n  options?: ObservedArray<SettingsSwitch | Dropdown | CopyLink | SettingsCheckbox | ChannelOptions>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'text')) {\n      this.text = new Text(data.text).toString();\n    }\n\n    if (Reflect.has(data, 'options')) {\n      this.options = Parser.parseArray(data.options, [\n        SettingsSwitch, Dropdown, CopyLink,\n        SettingsCheckbox, ChannelOptions\n      ]);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport CompactLink from './CompactLink.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingsSidebar extends YTNode {\n  static type = 'SettingsSidebar';\n\n  title: Text;\n  items: ObservedArray<CompactLink>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.items = Parser.parseArray(data.items, CompactLink);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport BackstagePost from './BackstagePost.js';\nimport Button from './Button.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Post from './Post.js';\n\nexport default class SharedPost extends YTNode {\n  static type = 'SharedPost';\n\n  public thumbnail: Thumbnail[];\n  public content: Text;\n  public published: Text;\n  public menu: Menu | null;\n  public original_post: BackstagePost | Post | null;\n  public id: string;\n  public endpoint: NavigationEndpoint;\n  public expand_button: Button | null;\n  public author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.content = new Text(data.content);\n    this.published = new Text(data.publishedTimeText);\n    this.menu = Parser.parseItem(data.actionMenu, Menu);\n    this.original_post = Parser.parseItem(data.originalPost, [ BackstagePost, Post ]);\n    this.id = data.postId;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.expand_button = Parser.parseItem(data.expandButton, Button);\n    this.author = new Author(data.displayName, undefined);\n  }\n}", "import { type RawNode, Parser } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class SharePanelHeader extends YTNode {\n  static type = 'SharePanelHeader';\n\n  public title: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = Parser.parseItem(data.title);\n  }\n}", "import type { RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nexport default class SharePanelTitleV15 extends YTNode {\n  static type = 'SharePanelTitleV15';\n\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ShareTarget extends YTNode {\n  static type = 'ShareTarget';\n\n  public endpoint?: NavigationEndpoint;\n  public service_name: string;\n  public target_id: string;\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'serviceEndpoint'))\n      this.endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    else if (Reflect.has(data, 'navigationEndpoint'))\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    this.service_name = data.serviceName;\n    this.target_id = data.targetId;\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport Button from './Button.js';\n\nexport default class Shelf extends YTNode {\n  static type = 'Shelf';\n\n  title: Text;\n  endpoint?: NavigationEndpoint;\n  content: YTNode | null;\n  icon_type?: string;\n  menu?: YTNode | null;\n  play_all_button?: Button | null;\n  subtitle?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'endpoint')) {\n      this.endpoint = new NavigationEndpoint(data.endpoint);\n    }\n\n    this.content = Parser.parseItem(data.content);\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'menu')) {\n      this.menu = Parser.parseItem(data.menu);\n    }\n\n    if (Reflect.has(data, 'playAllButton')) {\n      this.play_all_button = Parser.parseItem(data.playAllButton, Button);\n    }\n\n    if (Reflect.has(data, 'subtitle')) {\n      this.subtitle = new Text(data.subtitle);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser } from '../index.js';\nimport type { RawNode } from '../types/index.js';\nimport BadgeView from './BadgeView.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ShortsLockupView extends YTNode {\n  static type = 'ShortsLockupView';\n\n  entity_id: string;\n  accessibility_text: string;\n  thumbnail: Thumbnail[];\n  on_tap_endpoint: NavigationEndpoint;\n  menu_on_tap: NavigationEndpoint;\n  index_in_collection: number;\n  menu_on_tap_a11y_label: string;\n  overlay_metadata: {\n    primary_text?: Text;\n    secondary_text?: Text;\n  };\n  inline_player_data?: NavigationEndpoint;\n  badge?: BadgeView | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.entity_id = data.entityId;\n    this.accessibility_text = data.accessibilityText;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n    this.menu_on_tap = new NavigationEndpoint(data.menuOnTap);\n    this.index_in_collection = data.indexInCollection;\n    this.menu_on_tap_a11y_label = data.menuOnTapA11yLabel;\n\n    this.overlay_metadata = {\n      primary_text: data.overlayMetadata.primaryText ? Text.fromAttributed(data.overlayMetadata.primaryText) : undefined,\n      secondary_text: data.overlayMetadata.secondaryText ? Text.fromAttributed(data.overlayMetadata.secondaryText) : undefined\n    };\n\n    if (data.inlinePlayerData?.onVisible) {\n      this.inline_player_data = new NavigationEndpoint(data.inlinePlayerData.onVisible);\n    }\n\n    if (data.badge) {\n      this.badge = Parser.parseItem(data.badge, BadgeView);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ShowingResultsFor extends YTNode {\n  static type = 'ShowingResultsFor';\n\n  corrected_query: Text;\n  original_query: Text;\n  corrected_query_endpoint: NavigationEndpoint;\n  original_query_endpoint: NavigationEndpoint;\n  search_instead_for: Text;\n  showing_results_for: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.corrected_query = new Text(data.correctedQuery);\n    this.original_query = new Text(data.originalQuery);\n    this.corrected_query_endpoint = new NavigationEndpoint(data.correctedQueryEndpoint);\n    this.original_query_endpoint = new NavigationEndpoint(data.originalQueryEndpoint);\n    this.search_instead_for = new Text(data.searchInsteadFor);\n    this.showing_results_for = new Text(data.showingResultsFor);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class SimpleCardContent extends YTNode {\n  static type = 'SimpleCardContent';\n\n  image: Thumbnail[];\n  title: Text;\n  display_domain: Text;\n  show_link_icon: boolean;\n  call_to_action: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.title = new Text(data.title);\n    this.display_domain = new Text(data.displayDomain);\n    this.show_link_icon = data.showLinkIcon;\n    this.call_to_action = new Text(data.callToAction);\n    this.endpoint = new NavigationEndpoint(data.command);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class SimpleCardTeaser extends YTNode {\n  static type = 'SimpleCardTeaser';\n\n  message: Text;\n  prominent: boolean; // @TODO: or string?\n\n  constructor(data: RawNode) {\n    super();\n    this.message = new Text(data.message);\n    this.prominent = data.prominent;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SimpleTextSection extends YTNode {\n  static type = 'SimpleTextSection';\n\n  lines: Text[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.lines = data.lines.map((line: RawNode) => new Text(line));\n    this.style = data.layoutStyle;\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SingleActionEmergencySupport extends YTNode {\n  static type = 'SingleActionEmergencySupport';\n\n  action_text: Text;\n  nav_text: Text;\n  details: Text;\n  icon_type: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.action_text = new Text(data.actionText);\n    this.nav_text = new Text(data.navigationText);\n    this.details = new Text(data.detailsText);\n    this.icon_type = data.icon.iconType;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SectionList from './SectionList.js';\nimport MusicQueue from './MusicQueue.js';\nimport RichGrid from './RichGrid.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class Tab extends YTNode {\n  static type = 'Tab';\n\n  title: string;\n  selected: boolean;\n  endpoint: NavigationEndpoint;\n  content: SectionList | MusicQueue | RichGrid | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title || 'N/A';\n    this.selected = !!data.selected;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.content = Parser.parseItem(data.content, [ SectionList, MusicQueue, RichGrid ]);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Tab from './Tab.js';\n\nexport default class SingleColumnBrowseResults extends YTNode {\n  static type = 'SingleColumnBrowseResults';\n\n  tabs: ObservedArray<Tab>;\n\n  constructor(data: RawNode) {\n    super();\n    this.tabs = Parser.parseArray(data.tabs, Tab);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class SingleColumnMusicWatchNextResults extends YTNode {\n  static type = 'SingleColumnMusicWatchNextResults';\n\n  contents;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SingleHeroImage extends YTNode {\n  static type = 'SingleHeroImage';\n\n  thumbnails: Thumbnail[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class SlimOwner extends YTNode {\n  static type = 'SlimOwner';\n\n  thumbnail: Thumbnail[];\n  title: Text;\n  endpoint: NavigationEndpoint;\n  subscribe_button: SubscribeButton | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, SubscribeButton);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class SlimVideoMetadata extends YTNode {\n  static type = 'SlimVideoMetadata';\n\n  title: Text;\n  collapsed_subtitle: Text;\n  expanded_subtitle: Text;\n  owner: YTNode;\n  description: Text;\n  video_id: string;\n  date: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.collapsed_subtitle = new Text(data.collapsedSubtitle);\n    this.expanded_subtitle = new Text(data.expandedSubtitle);\n    this.owner = Parser.parseItem(data.owner);\n    this.description = new Text(data.description);\n    this.video_id = data.videoId;\n    this.date = new Text(data.dateText);\n  }\n}", "import type { RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nexport default class StartAt extends YTNode {\n  static type = 'StartAt';\n\n  public start_at_option_label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_at_option_label = new Text(data.startAtOptionLabel);\n  }\n}", "import { YTNode, type SuperParsedResult } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class Tabbed extends YTNode {\n  static type = 'Tabbed';\n\n  contents: SuperParsedResult<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport Tab from './Tab.js';\n\nexport default class TabbedSearchResults extends YTNode {\n  static type = 'TabbedSearchResults';\n\n  tabs: ObservedArray<Tab>;\n\n  constructor(data: RawNode) {\n    super();\n    this.tabs = Parser.parseArray(data.tabs, Tab);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class TextHeader extends YTNode {\n  static type = 'TextHeader';\n\n  title: Text;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.style = data.style;\n  }\n}", "import { type RawNode, Parser } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport ShareTarget from './ShareTarget.js';\n\nexport default class ThirdPartyShareTargetSection extends YTNode {\n  static type = 'ThirdPartyShareTargetSection';\n\n  public share_targets: ObservedArray<ShareTarget>;\n\n  constructor(data: RawNode) {\n    super();\n    this.share_targets = Parser.parseArray(data.shareTargets, ShareTarget);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ThumbnailLandscapePortrait extends YTNode {\n  static type = 'ThumbnailLandscapePortrait';\n\n  landscape: Thumbnail[];\n  portrait: Thumbnail[];\n\n  constructor (data: RawNode) {\n    super();\n    this.landscape = Thumbnail.fromResponse(data.landscape);\n    this.portrait = Thumbnail.fromResponse(data.portrait);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayEndorsement extends YTNode {\n  static type = 'ThumbnailOverlayEndorsement';\n\n  text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayHoverText extends YTNode {\n  static type = 'ThumbnailOverlayHoverText';\n\n  text: Text;\n  icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.icon_type = data.icon.iconType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayInlineUnplayable extends YTNode {\n  static type = 'ThumbnailOverlayInlineUnplayable';\n\n  text: string;\n  icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n    this.icon_type = data.icon.iconType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayLoadingPreview extends YTNode {\n  static type = 'ThumbnailOverlayLoadingPreview';\n\n  text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayNowPlaying extends YTNode {\n  static type = 'ThumbnailOverlayNowPlaying';\n\n  text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayPinking extends YTNode {\n  static type = 'ThumbnailOverlayPinking';\n\n  hack: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.hack = data.hack;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayPlaybackStatus extends YTNode {\n  static type = 'ThumbnailOverlayPlaybackStatus';\n\n  texts: Text[];\n\n  constructor(data: RawNode) {\n    super();\n    this.texts = data.texts.map((text: RawNode) => new Text(text));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayResumePlayback extends YTNode {\n  static type = 'ThumbnailOverlayResumePlayback';\n\n  percent_duration_watched: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.percent_duration_watched = data.percentDurationWatched;\n  }\n}\n", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlaySidePanel extends YTNode {\n  static type = 'ThumbnailOverlaySidePanel';\n\n  text: Text;\n  icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.icon_type = data.icon.iconType;\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayToggleButton extends YTNode {\n  static type = 'ThumbnailOverlayToggleButton';\n\n  is_toggled?: boolean;\n\n  icon_type: {\n    toggled: string;\n    untoggled: string;\n  };\n\n  tooltip: {\n    toggled: string;\n    untoggled: string;\n  };\n\n  toggled_endpoint?: NavigationEndpoint;\n  untoggled_endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'isToggled')) {\n      this.is_toggled = data.isToggled;\n    }\n\n    this.icon_type = {\n      toggled: data.toggledIcon.iconType,\n      untoggled: data.untoggledIcon.iconType\n    };\n\n    this.tooltip = {\n      toggled: data.toggledTooltip,\n      untoggled: data.untoggledTooltip\n    };\n\n    if (data.toggledServiceEndpoint)\n      this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);\n\n    if (data.untoggledServiceEndpoint)\n      this.untoggled_endpoint = new NavigationEndpoint(data.untoggledServiceEndpoint);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class TitleAndButtonListHeader extends YTNode {\n  static type = 'TitleAndButtonListHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ToggleMenuServiceItem extends YTNode {\n  static type = 'ToggleMenuServiceItem';\n\n  text: Text;\n  toggled_text: Text;\n  icon_type: string;\n  toggled_icon_type: string;\n  default_endpoint: NavigationEndpoint;\n  toggled_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.defaultText);\n    this.toggled_text = new Text(data.toggledText);\n    this.icon_type = data.defaultIcon.iconType;\n    this.toggled_icon_type = data.toggledIcon.iconType;\n    this.default_endpoint = new NavigationEndpoint(data.defaultServiceEndpoint);\n    this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class Tooltip extends YTNode {\n  static type = 'Tooltip';\n\n  promo_config: {\n    promo_id: string;\n    impression_endpoints: NavigationEndpoint[];\n    accept: NavigationEndpoint;\n    dismiss: NavigationEndpoint;\n  };\n\n  target_id: string;\n  details: Text;\n  suggested_position: string;\n  dismiss_stratedy: string;\n  dwell_time_ms: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.promo_config = {\n      promo_id: data.promoConfig.promoId,\n      impression_endpoints: data.promoConfig.impressionEndpoints\n        .map((endpoint: RawNode) => new NavigationEndpoint(endpoint)),\n      accept: new NavigationEndpoint(data.promoConfig.acceptCommand),\n      dismiss: new NavigationEndpoint(data.promoConfig.dismissCommand)\n    };\n\n    this.target_id = data.targetId;\n    this.details = new Text(data.detailsText);\n    this.suggested_position = data.suggestedPosition.type;\n    this.dismiss_stratedy = data.dismissStrategy.type;\n    this.dwell_time_ms = parseInt(data.dwellTimeMs);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class TopicChannelDetails extends YTNode {\n  static type = 'TopicChannelDetails';\n\n  title: Text;\n  avatar: Thumbnail[];\n  subtitle: Text;\n  subscribe_button: SubscribeButton | null;\n  endpoint: NavigationEndpoint;\n\n  constructor (data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.avatar = Thumbnail.fromResponse(data.thumbnail ?? data.avatar);\n    this.subtitle = new Text(data.subtitle);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, SubscribeButton);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport SectionList from './SectionList.js';\nimport BrowseFeedActions from './BrowseFeedActions.js';\nimport ProfileColumn from './ProfileColumn.js';\nimport Tab from './Tab.js';\nimport ExpandableTab from './ExpandableTab.js';\n\nexport default class TwoColumnBrowseResults extends YTNode {\n  static type = 'TwoColumnBrowseResults';\n\n  public tabs: ObservedArray<Tab | ExpandableTab>;\n  public secondary_contents: SectionList | BrowseFeedActions | ProfileColumn | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.tabs = Parser.parseArray(data.tabs, [ Tab, ExpandableTab ]);\n    this.secondary_contents = Parser.parseItem(data.secondaryContents, [ SectionList, BrowseFeedActions, ProfileColumn ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport SecondarySearchContainer from './SecondarySearchContainer.js';\nimport RichGrid from './RichGrid.js';\nimport SectionList from './SectionList.js';\n\nexport default class TwoColumnSearchResults extends YTNode {\n  static type = 'TwoColumnSearchResults';\n\n  public header: YTNode | null;\n  public primary_contents: RichGrid | SectionList | null;\n  public secondary_contents: SecondarySearchContainer | null;\n  public target_id?: string;\n  \n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.primary_contents = Parser.parseItem(data.primaryContents, [ RichGrid, SectionList ]);\n    this.secondary_contents = Parser.parseItem(data.secondaryContents, [ SecondarySearchContainer ]);\n    \n    if ('targetId' in data) {\n      this.target_id = data.targetId;\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\ntype AutoplaySet = {\n  autoplay_video: NavigationEndpoint,\n  next_button_video?: NavigationEndpoint\n};\n\nexport default class TwoColumnWatchNextResults extends YTNode {\n  static type = 'TwoColumnWatchNextResults';\n\n  results: ObservedArray<YTNode>;\n  secondary_results: ObservedArray<YTNode>;\n  conversation_bar: YTNode;\n  playlist?: {\n    id: string,\n    title: string,\n    author: Text | Author,\n    contents: ObservedArray<YTNode>,\n    current_index: number,\n    is_infinite: boolean,\n    menu: Menu | null\n  };\n  autoplay?: {\n    sets: AutoplaySet[],\n    modified_sets?: AutoplaySet[],\n    count_down_secs?: number\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.results = Parser.parseArray(data.results?.results.contents);\n    this.secondary_results = Parser.parseArray(data.secondaryResults?.secondaryResults.results);\n    this.conversation_bar = Parser.parseItem(data?.conversationBar);\n\n    const playlistData = data.playlist?.playlist;\n\n    if (playlistData) {\n      this.playlist = {\n        id: playlistData.playlistId,\n        title: playlistData.title,\n        author: playlistData.shortBylineText?.simpleText ?\n          new Text(playlistData.shortBylineText) :\n          new Author(playlistData.longBylineText),\n        contents: Parser.parseArray(playlistData.contents),\n        current_index: playlistData.currentIndex,\n        is_infinite: !!playlistData.isInfinite,\n        menu: Parser.parseItem(playlistData.menu, Menu)\n      };\n    }\n\n    const autoplayData = data.autoplay?.autoplay;\n    if (autoplayData) {\n      this.autoplay = {\n        sets: autoplayData.sets.map((set: RawNode) => this.#parseAutoplaySet(set))\n      };\n      if (autoplayData.modifiedSets) {\n        this.autoplay.modified_sets = autoplayData.modifiedSets.map((set: any) => this.#parseAutoplaySet(set));\n      }\n      if (autoplayData.countDownSecs) {\n        this.autoplay.count_down_secs = autoplayData.countDownSecs;\n      }\n    }\n  }\n\n  #parseAutoplaySet(data: RawNode): AutoplaySet {\n    const result = {\n      autoplay_video: new NavigationEndpoint(data.autoplayVideo)\n    } as AutoplaySet;\n\n    if (data.nextButtonVideo) {\n      result.next_button_video = new NavigationEndpoint(data.nextButtonVideo);\n    }\n\n    return result;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nimport StartAt from './StartAt.js';\nimport CopyLink from './CopyLink.js';\nimport SharePanelHeader from './SharePanelHeader.js';\nimport ThirdPartyShareTargetSection from './ThirdPartyShareTargetSection.js';\n\nexport type ThirdPartyNetworkSection = {\n  share_target_container: ThirdPartyShareTargetSection | null,\n  copy_link_container: CopyLink | null,\n  start_at_container: StartAt | null\n};\n\nexport default class UnifiedSharePanel extends YTNode {\n  static type = 'UnifiedSharePanel';\n\n  public third_party_network_section?: ThirdPartyNetworkSection;\n  public header: SharePanelHeader | null;\n  public share_panel_version: number;\n  public show_loading_spinner?: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    if (data.contents) {\n      const contents = data.contents.find((content: RawNode) => content.thirdPartyNetworkSection);\n\n      if (contents) {\n        this.third_party_network_section = {\n          share_target_container: Parser.parseItem(contents.thirdPartyNetworkSection.shareTargetContainer, ThirdPartyShareTargetSection),\n          copy_link_container: Parser.parseItem(contents.thirdPartyNetworkSection.copyLinkContainer, CopyLink),\n          start_at_container: Parser.parseItem(contents.thirdPartyNetworkSection.startAtContainer, StartAt)\n        };\n      }\n    }\n\n    this.header = Parser.parseItem(data.header, SharePanelHeader);\n    this.share_panel_version = data.sharePanelVersion;\n    \n    if (Reflect.has(data, 'showLoadingSpinner'))\n      this.show_loading_spinner = data.showLoadingSpinner;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\n\nexport default class UpsellDialog extends YTNode {\n  static type = 'UpsellDialog';\n\n  message_title: Text;\n  message_text: Text;\n  action_button: Button | null;\n  dismiss_button: Button | null;\n  is_visible: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.message_title = new Text(data.dialogMessageTitle);\n    this.message_text = new Text(data.dialogMessageText);\n    this.action_button = Parser.parseItem(data.actionButton, Button);\n    this.dismiss_button = Parser.parseItem(data.dismissButton, Button);\n    this.is_visible = data.isVisible;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class VerticalList extends YTNode {\n  static type = 'VerticalList';\n\n  items: ObservedArray<YTNode>;\n  collapsed_item_count: string; // Number?\n  collapsed_state_button_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.collapsed_item_count = data.collapsedItemCount;\n    this.collapsed_state_button_text = new Text(data.collapsedStateButtonText);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class VerticalWatchCardList extends YTNode {\n  static type = 'VerticalWatchCardList';\n\n  items: ObservedArray<YTNode>;\n  view_all_text: Text;\n  view_all_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.view_all_text = new Text(data.viewAllText);\n    this.view_all_endpoint = new NavigationEndpoint(data.viewAllEndpoint);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class VideoInfoCardContent extends YTNode {\n  static type = 'VideoInfoCardContent';\n\n  title: Text;\n  channel_name: Text;\n  view_count: Text;\n  video_thumbnails: Thumbnail[];\n  duration: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.videoTitle);\n    this.channel_name = new Text(data.channelName);\n    this.view_count = new Text(data.viewCountText);\n    this.video_thumbnails = Thumbnail.fromResponse(data.videoThumbnail);\n    this.duration = new Text(data.lengthString);\n    this.endpoint = new NavigationEndpoint(data.action);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport CarouselItemView from './CarouselItemView.js';\nimport CarouselTitleView from './CarouselTitleView.js';\n\nexport default class VideoMetadataCarouselView extends YTNode {\n  static type = 'VideoMetadataCarouselView';\n\n  carousel_titles: ObservedArray<CarouselTitleView> | null;\n  carousel_items: ObservedArray<CarouselItemView> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.carousel_titles = Parser.parse(data.carouselTitles, true, CarouselTitleView);\n    this.carousel_items = Parser.parse(data.carouselItems, true, CarouselItemView);\n  }\n}", "import type { RawNode } from '../../index.js';\nimport Text from './Text.js';\n\nexport default class SubscriptionButton {\n  static type = 'SubscriptionButton';\n\n  public text: Text;\n  public subscribed: boolean;\n  public subscription_type?: 'FREE' | 'PAID' | 'UNAVAILABLE';\n\n  constructor(data: RawNode) {\n    this.text = new Text(data.text);\n    this.subscribed = data.isSubscribed;\n    if ('subscriptionType' in data)\n      this.subscription_type = data.subscriptionType;\n  }\n}", "import Text from './misc/Text.js';\nimport Author from './misc/Author.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport SubscriptionButton from './misc/SubscriptionButton.js';\n\nexport default class VideoOwner extends YTNode {\n  static type = 'VideoOwner';\n\n  public subscription_button?: SubscriptionButton;\n  public subscriber_count: Text;\n  public author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    if ('subscriptionButton' in data)\n      this.subscription_button = new SubscriptionButton(data.subscriptionButton);\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.author = new Author({\n      ...data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.badges, data.thumbnail);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nimport Text from './misc/Text.js';\nimport Menu from './menus/Menu.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport VideoViewCount from './VideoViewCount.js';\n\nexport default class VideoPrimaryInfo extends YTNode {\n  static type = 'VideoPrimaryInfo';\n\n  public title: Text;\n  public super_title_link?: Text;\n  public station_name?: Text;\n  public view_count: VideoViewCount | null;\n  public badges: ObservedArray<MetadataBadge>;\n  public published: Text;\n  public relative_date: Text;\n  public menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if ('superTitleLink' in data)\n      this.super_title_link = new Text(data.superTitleLink);\n\n    if ('stationName' in data)\n      this.station_name = new Text(data.stationName);\n    \n    this.view_count = Parser.parseItem(data.viewCount, VideoViewCount);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n    this.published = new Text(data.dateText);\n    this.relative_date = new Text(data.relativeDateText);\n    this.menu = Parser.parseItem(data.videoActions, Menu);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport VideoOwner from './VideoOwner.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport MetadataRowContainer from './MetadataRowContainer.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class VideoSecondaryInfo extends YTNode {\n  static type = 'VideoSecondaryInfo';\n\n  public owner: VideoOwner | null;\n  public description: Text;\n  public description_placeholder?: Text;\n  public subscribe_button: SubscribeButton | Button | null;\n  public metadata: MetadataRowContainer | null;\n  public show_more_text: Text;\n  public show_less_text: Text;\n  public default_expanded: string;\n  public description_collapsed_lines: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.owner = Parser.parseItem(data.owner, VideoOwner);\n    this.description = new Text(data.description);\n\n    if ('attributedDescription' in data)\n      this.description = Text.fromAttributed(data.attributedDescription);\n    \n    if ('descriptionPlaceholder' in data)\n      this.description_placeholder = new Text(data.descriptionPlaceholder);\n\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, [ SubscribeButton, Button ]);\n    this.metadata = Parser.parseItem(data.metadataRowContainer, MetadataRowContainer);\n    this.show_more_text = new Text(data.showMoreText);\n    this.show_less_text = new Text(data.showLessText);\n    this.default_expanded = data.defaultExpanded;\n    this.description_collapsed_lines = data.descriptionCollapsedLines;\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class WatchCardCompactVideo extends YTNode {\n  static type = 'WatchCardCompactVideo';\n\n  title: Text;\n  subtitle: Text;\n  duration: {\n    text: string;\n    seconds: number;\n  };\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: timeToSeconds(data.lengthText.simpleText)\n    };\n\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class WatchCardHeroVideo extends YTNode {\n  static type = 'WatchCardHeroVideo';\n\n  endpoint: NavigationEndpoint;\n  call_to_action_button: YTNode;\n  hero_image: YTNode;\n  label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.call_to_action_button = Parser.parseItem(data.callToActionButton);\n    this.hero_image = Parser.parseItem(data.heroImage);\n    this.label = data.lengthText?.accessibility.accessibilityData.label || '';\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class WatchCardRichHeader extends YTNode {\n  static type = 'WatchCardRichHeader';\n\n  title: Text;\n  title_endpoint: NavigationEndpoint;\n  subtitle: Text;\n  author: Author;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.title_endpoint = new NavigationEndpoint(data.titleNavigationEndpoint);\n    this.subtitle = new Text(data.subtitle);\n    this.author = new Author(data, data.titleBadge ? [ data.titleBadge ] : null, data.avatar);\n    this.author.name = this.title.toString();\n    this.style = data.style;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class WatchCardSectionSequence extends YTNode {\n  static type = 'WatchCardSectionSequence';\n\n  lists: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.lists = Parser.parseArray(data.lists);\n  }\n}", "import type { RawNode } from '../index.js';\nimport TwoColumnBrowseResults from './TwoColumnBrowseResults.js';\n\nexport default class WatchNextTabbedResults extends TwoColumnBrowseResults {\n  static type = 'WatchNextTabbedResults';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport SectionList from '../SectionList.js';\n\nexport default class AnchoredSection extends YTNode {\n  static type = 'AnchoredSection';\n\n  title: string;\n  content: SectionList | null;\n  endpoint: NavigationEndpoint;\n  category_assets: {\n    asset_key: string;\n    background_color: string;\n  };\n  category_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.content = Parser.parseItem(data.content, SectionList);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    this.category_assets = {\n      asset_key: data.categoryAssets?.assetKey,\n      background_color: data.categoryAssets?.backgroundColor\n    };\n\n    this.category_type = data.categoryType;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport ToggleButton from '../ToggleButton.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport type Actions from '../../../core/Actions.js';\nimport { InnertubeError } from '../../../utils/Utils.js';\nimport { type ApiResponse } from '../../../core/Actions.js';\n\nexport default class KidsBlocklistPickerItem extends YTNode {\n  static type = 'KidsBlocklistPickerItem';\n\n  #actions?: Actions;\n\n  child_display_name: Text;\n  child_account_description: Text;\n  avatar: Thumbnail[];\n  block_button: ToggleButton | null;\n  blocked_entity_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.child_display_name = new Text(data.childDisplayName);\n    this.child_account_description = new Text(data.childAccountDescription);\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.block_button = Parser.parseItem(data.blockButton, [ ToggleButton ]);\n    this.blocked_entity_key = data.blockedEntityKey;\n  }\n\n  async blockChannel(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('An active caller must be provide to perform this operation.');\n\n    const button = this.block_button;\n\n    if (!button)\n      throw new InnertubeError('Block button was not found.', { child_display_name: this.child_display_name });\n\n    if (button.is_toggled)\n      throw new InnertubeError('This channel is already blocked.', { child_display_name: this.child_display_name });\n\n    const response = await button.endpoint.call(this.#actions, { parse: false });\n    return response;\n  }\n\n  setActions(actions: Actions | undefined) {\n    this.#actions = actions;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport Button from '../Button.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport KidsBlocklistPickerItem from './KidsBlocklistPickerItem.js';\n\nexport default class KidsBlocklistPicker extends YTNode {\n  static type = 'KidsBlocklistPicker';\n\n  title: Text;\n  child_rows: KidsBlocklistPickerItem[] | null;\n  done_button: Button | null;\n  successful_toast_action_message: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.child_rows = Parser.parse(data.childRows, true, [ KidsBlocklistPickerItem ]);\n    this.done_button = Parser.parseItem(data.doneButton, [ Button ]);\n    this.successful_toast_action_message = new Text(data.successfulToastActionMessage);\n  }\n}", "import Text from '../misc/Text.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class KidsCategoryTab extends YTNode {\n  static type = 'KidsCategoryTab';\n\n  title: Text;\n  category_assets: {\n    asset_key: string;\n    background_color: string;\n  };\n  category_type: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.category_assets = {\n      asset_key: data.categoryAssets?.assetKey,\n      background_color: data.categoryAssets?.backgroundColor\n    };\n    this.category_type = data.categoryType;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport KidsCategoryTab from './KidsCategoryTab.js';\nimport { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class KidsCategoriesHeader extends YTNode {\n  static type = 'kidsCategoriesHeader';\n\n  category_tabs: ObservedArray<KidsCategoryTab>;\n  privacy_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.category_tabs = Parser.parseArray(data.categoryTabs, KidsCategoryTab);\n    this.privacy_button = Parser.parseItem(data.privacyButtonRenderer, Button);\n  }\n}", "import { Parser } from '../../index.js';\nimport AnchoredSection from './AnchoredSection.js';\nimport { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class KidsHomeScreen extends YTNode {\n  static type = 'kidsHomeScreen';\n\n  anchors: ObservedArray<AnchoredSection>;\n\n  constructor(data: RawNode) {\n    super();\n    this.anchors = Parser.parseArray(data.anchors, AnchoredSection);\n  }\n}", "/* eslint-disable no-cond-assign */\n// noinspection JSAssignmentUsedAsCondition\n\nimport { YTNode } from './helpers.js';\nimport * as Parser from './parser.js';\nimport { InnertubeError } from '../utils/Utils.js';\n\nimport Author from './classes/misc/Author.js';\nimport Text from './classes/misc/Text.js';\nimport Thumbnail from './classes/misc/Thumbnail.js';\nimport NavigationEndpoint from './classes/NavigationEndpoint.js';\n\nimport type { YTNodeConstructor } from './helpers.js';\n\nexport type MiscInferenceType = {\n  type: 'misc',\n  misc_type: 'NavigationEndpoint',\n  optional: boolean,\n  endpoint: NavigationEndpoint\n} | {\n  type: 'misc',\n  misc_type: 'Text',\n  optional: boolean,\n  text: string,\n  endpoint?: NavigationEndpoint\n} | {\n  type: 'misc',\n  misc_type: 'Thumbnail',\n  optional: boolean,\n} | {\n  type: 'misc',\n  misc_type: 'Author',\n  optional: boolean,\n  params: [string, string?],\n}\n\nexport interface ObjectInferenceType {\n  type: 'object',\n  keys: KeyInfo,\n  optional: boolean,\n}\n\nexport interface RendererInferenceType {\n  type: 'renderer',\n  renderers: string[],\n  optional: boolean\n}\n\nexport interface PrimitiveInferenceType {\n  type: 'primitive',\n  typeof: ('string' | 'number' | 'boolean' | 'bigint' | 'symbol' | 'undefined' | 'function' | 'never' | 'unknown')[],\n  optional: boolean,\n}\n\nexport type ArrayInferenceType = {\n  type: 'array',\n  array_type: 'primitive',\n  items: PrimitiveInferenceType,\n  optional: boolean,\n} | {\n  type: 'array',\n  array_type: 'object',\n  items: ObjectInferenceType,\n  optional: boolean,\n} | {\n  type: 'array',\n  array_type: 'renderer',\n  renderers: string[],\n  optional: boolean,\n};\n\nexport type InferenceType = RendererInferenceType | MiscInferenceType | ObjectInferenceType | PrimitiveInferenceType | ArrayInferenceType;\n\nexport type KeyInfo = (readonly [string, InferenceType])[];\n\nconst IGNORED_KEYS = new Set([\n  'trackingParams', 'accessibility', 'accessibilityData'\n]);\n\nconst RENDERER_EXAMPLES: Record<string, unknown> = {};\n\nexport function camelToSnake(str: string) {\n  return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Infer the type of key given its value\n * @param key - The key to infer the type of\n * @param value - The value of the key\n * @returns The inferred type\n */\nexport function inferType(key: string, value: unknown): InferenceType {\n  let return_value: string | Record<string, any> | false | MiscInferenceType | ArrayInferenceType = false;\n  if (typeof value === 'object' && value != null) {\n    if (return_value = isRenderer(value)) {\n      RENDERER_EXAMPLES[return_value] = Reflect.get(value, Reflect.ownKeys(value)[0]);\n      return {\n        type: 'renderer',\n        renderers: [ return_value ],\n        optional: false\n      };\n    }\n    if (return_value = isRendererList(value)) {\n      for (const [ key, value ] of Object.entries(return_value)) {\n        RENDERER_EXAMPLES[key] = value;\n      }\n      return {\n        type: 'array',\n        array_type: 'renderer',\n        renderers: Object.keys(return_value),\n        optional: false\n      };\n    }\n    if (return_value = isMiscType(key, value)) {\n      return return_value as MiscInferenceType;\n    }\n    if (return_value = isArrayType(value)) {\n      return return_value as ArrayInferenceType;\n    }\n  }\n  const primitive_type = typeof value;\n  if (primitive_type === 'object')\n    return {\n      type: 'object',\n      keys: Object.entries(value as object).map(([ key, value ]) => [ key, inferType(key, value) ]),\n      optional: false\n    };\n  return {\n    type: 'primitive',\n    typeof: [ primitive_type ],\n    optional: false\n  };\n}\n\n/**\n * Checks if the given value is an array of renderers\n * @param value - The value to check\n * @returns If it is a renderer list, return an object with keys being the classnames, and values being an example of that class.\n * Otherwise, return false.\n */\nexport function isRendererList(value: unknown) {\n  const arr = Array.isArray(value);\n  if (arr && value.length === 0)\n    return false;\n\n  const is_list = arr && value.every((item) => isRenderer(item));\n  return (\n    is_list ?\n      Object.fromEntries(value.map((item) => {\n        const key = Reflect.ownKeys(item)[0].toString();\n        return [ Parser.sanitizeClassName(key), item[key] ];\n      })) :\n      false\n  );\n}\n\n/**\n * Check if the given value is a misc type.\n * @param key - The key of the value\n * @param value - The value to check\n * @returns If it is a misc type, return the InferenceType. Otherwise, return false.\n */\nexport function isMiscType(key: string, value: unknown): MiscInferenceType | false {\n  if (typeof value === 'object' && value !== null) {\n    // NavigationEndpoint\n    if (key.endsWith('Endpoint') || key.endsWith('Command') || key === 'endpoint') {\n      return {\n        type: 'misc',\n        endpoint: new NavigationEndpoint(value),\n        optional: false,\n        misc_type: 'NavigationEndpoint'\n      };\n    }\n    // Text\n    if (Reflect.has(value, 'simpleText') || Reflect.has(value, 'runs')) {\n      const textNode = new Text(value);\n      return {\n        type: 'misc',\n        misc_type: 'Text',\n        optional: false,\n        endpoint: textNode.endpoint,\n        text: textNode.toString()\n      };\n    }\n    // Thumbnail\n    if (Reflect.has(value, 'thumbnails') && Array.isArray(Reflect.get(value, 'thumbnails'))) {\n      return {\n        type: 'misc',\n        misc_type: 'Thumbnail',\n        optional: false\n      };\n    }\n  }\n  return false;\n}\n\n/**\n * Check if the given value is a renderer\n * @param value - The value to check\n * @returns If it is a renderer, return the class name. Otherwise, return false.\n */\nexport function isRenderer(value: unknown) {\n  const is_object = typeof value === 'object';\n  if (!is_object) return false;\n  const keys = Reflect.ownKeys(value as object);\n\n  if (keys.length === 1) {\n    const first_key = keys[0].toString();\n\n    if (first_key.endsWith('Renderer') || first_key.endsWith('Model')) {\n      return Parser.sanitizeClassName(first_key);\n    }\n  }\n  return false;\n}\n\n/**\n * Checks if the given value is an array\n * @param value - The value to check\n * @returns If it is an array, return the InferenceType. Otherwise, return false.\n */\nexport function isArrayType(value: unknown): false | ArrayInferenceType {\n  if (!Array.isArray(value))\n    return false;\n\n  // If the array is empty, we can't infer anything\n  if (value.length === 0)\n    return {\n      type: 'array',\n      array_type: 'primitive',\n      items: {\n        type: 'primitive',\n        typeof: [ 'never' ],\n        optional: false\n      },\n      optional: false\n    };\n  // We'll infer the primitive type of the array entries\n  const array_entry_types = value.map((item) => typeof item);\n  // We only support arrays that have the same primitive type throughout\n  const all_same_type = array_entry_types.every((type) => type === array_entry_types[0]);\n  if (!all_same_type)\n    return {\n      type: 'array',\n      array_type: 'primitive',\n      items: {\n        type: 'primitive',\n        typeof: [ 'unknown' ],\n        optional: false\n      },\n      optional: false\n    };\n\n  const type = array_entry_types[0];\n  if (type !== 'object')\n    return {\n      type: 'array',\n      array_type: 'primitive',\n      items: {\n        type: 'primitive',\n        typeof: [ type ],\n        optional: false\n      },\n      optional: false\n    };\n\n  let key_type: KeyInfo = [];\n  for (let i = 0; i < value.length; i++) {\n    const current_keys = Object.entries(value[i] as object).map(([ key, value ]) => [ key, inferType(key, value) ] as const);\n    if (i === 0) {\n      key_type = current_keys;\n      continue;\n    }\n    key_type = mergeKeyInfo(key_type, current_keys).resolved_key_info;\n  }\n\n  return {\n    type: 'array',\n    array_type: 'object',\n    items: {\n      type: 'object',\n      keys: key_type,\n      optional: false\n    },\n    optional: false\n  };\n}\n\nfunction introspectKeysFirstPass(classdata: unknown): KeyInfo {\n  if (typeof classdata !== 'object' || classdata === null) {\n    throw new InnertubeError('Generator: Cannot introspect non-object', {\n      classdata\n    });\n  }\n\n  const keys = Reflect.ownKeys(classdata)\n    .filter((key) => !isIgnoredKey(key))\n    .filter((key): key is string => typeof key === 'string');\n\n  return keys.map((key) => {\n    const value = Reflect.get(classdata, key) as unknown;\n    const inferred_type = inferType(key, value);\n    return [ key, inferred_type ] as const;\n  });\n}\n\nfunction introspectKeysSecondPass(key_info: KeyInfo) {\n  // The second pass will detect Author\n  const channel_nav = key_info.filter(([ , value ]) => {\n    if (value.type !== 'misc') return false;\n    if (!(value.misc_type === 'NavigationEndpoint' || value.misc_type === 'Text')) return false;\n    return value.endpoint?.metadata.page_type === 'WEB_PAGE_TYPE_CHANNEL';\n  });\n\n  // Whichever one has the longest text is the most probable match\n  const most_probable_match = channel_nav.sort(([ , a ], [ , b ]) => {\n    if (a.type !== 'misc' || b.type !== 'misc') return 0;\n    if (a.misc_type !== 'Text' || b.misc_type !== 'Text') return 0;\n    return b.text.length - a.text.length;\n  });\n\n  const excluded_keys = new Set<string>();\n\n  const canonical_channel_nave = most_probable_match[0];\n\n  let author: MiscInferenceType | undefined;\n  // We've found an author\n  if (canonical_channel_nave) {\n    excluded_keys.add(canonical_channel_nave[0]);\n    // Now to locate its metadata\n    // We'll first get all the keys in the classdata\n    const keys = key_info.map(([ key ]) => key);\n    // Check for anything ending in 'Badges' equals 'badges'\n    const badges = keys.filter((key) => key.endsWith('Badges') || key === 'badges');\n    // The likely candidate is the one with some prefix (owner, author)\n    const likely_badges = badges.filter((key) => key.startsWith('owner') || key.startsWith('author'));\n    // If we have a likely candidate, we'll use that\n    const canonical_badges = likely_badges[0] ?? badges[0];\n    // Now we have the author and its badges\n    // Verify that its actually badges\n    const badge_key_info = key_info.find(([ key ]) => key === canonical_badges);\n    const is_badges = badge_key_info ?\n      badge_key_info[1].type === 'array' && badge_key_info[1].array_type === 'renderer' && Reflect.has(badge_key_info[1].renderers, 'MetadataBadge') :\n      false;\n\n    if (is_badges && canonical_badges) excluded_keys.add(canonical_badges);\n    // TODO: next we check for the author's thumbnail\n    author = {\n      type: 'misc',\n      misc_type: 'Author',\n      optional: false,\n      params: [\n        canonical_channel_nave[0],\n        is_badges ? canonical_badges : undefined\n      ]\n    };\n  }\n\n  if (author) {\n    key_info.push([ 'author', author ]);\n  }\n\n  return key_info.filter(([ key ]) => !excluded_keys.has(key));\n}\n\nfunction introspect2(classdata: unknown) {\n  const key_info = introspectKeysFirstPass(classdata);\n  return introspectKeysSecondPass(key_info);\n}\n\n/**\n * Introspect an example of a class in order to determine its key info and dependencies\n * @param classdata - The example of the class\n * @returns The key info and any unimplemented dependencies\n */\nexport function introspect(classdata: unknown) {\n  const key_info = introspect2(classdata);\n  const dependencies = new Map<string, any>();\n  for (const [ , value ] of key_info) {\n    if (value.type === 'renderer' || (value.type === 'array' && value.array_type === 'renderer'))\n      for (const renderer of value.renderers) {\n        const example = RENDERER_EXAMPLES[renderer];\n        if (example)\n          dependencies.set(renderer, example);\n      }\n  }\n  const unimplemented_dependencies = Array.from(dependencies).filter(([ classname ]) => !Parser.hasParser(classname));\n\n  return {\n    key_info,\n    unimplemented_dependencies\n  };\n}\n\n/**\n * Is this key ignored by the parser?\n * @param key - The key to check\n * @returns Whether or not the key is ignored\n */\nexport function isIgnoredKey(key: string | symbol) {\n  return typeof key === 'string' && IGNORED_KEYS.has(key);\n}\n\n/**\n * Given a classname and its resolved key info, create a new class\n * @param classname - The name of the class\n * @param key_info - The resolved key info\n * @param logger - The logger to log errors to\n * @returns Class based on the key info extending YTNode\n */\nexport function createRuntimeClass(classname: string, key_info: KeyInfo, logger: Parser.ParserErrorHandler): YTNodeConstructor {\n  logger({\n    error_type: 'class_not_found',\n    classname,\n    key_info\n  });\n\n  const node = class extends YTNode {\n    static type = classname;\n    static #key_info = new Map<string, InferenceType>();\n    static set key_info(key_info: KeyInfo) {\n      this.#key_info = new Map(key_info);\n    }\n    static get key_info() {\n      return [ ...this.#key_info.entries() ];\n    }\n    constructor(data: unknown) {\n      super();\n      const {\n        key_info,\n        unimplemented_dependencies\n      } = introspect(data);\n\n      const {\n        resolved_key_info,\n        changed_keys\n      } = mergeKeyInfo(node.key_info, key_info);\n\n      const did_change = changed_keys.length > 0;\n\n      if (did_change) {\n        node.key_info = resolved_key_info;\n        logger({\n          error_type: 'class_changed',\n          classname,\n          key_info: node.key_info,\n          changed_keys\n        });\n      }\n\n      for (const [ name, data ] of unimplemented_dependencies)\n        generateRuntimeClass(name, data, logger);\n\n      for (const [ key, value ] of key_info) {\n        let snake_key = camelToSnake(key);\n        if (value.type === 'misc' && value.misc_type === 'NavigationEndpoint')\n          snake_key = 'endpoint';\n        Reflect.set(this, snake_key, parse(key, value, data));\n      }\n    }\n  };\n  node.key_info = key_info;\n  Object.defineProperty(node, 'name', { value: classname, writable: false });\n  return node;\n}\n\n/**\n * Given example data for a class, introspect, implement dependencies, and create a new class\n * @param classname - The name of the class\n * @param classdata - The example of the class\n * @param logger - The logger to log errors to\n * @returns Class based on the example classdata extending YTNode\n */\nexport function generateRuntimeClass(classname: string, classdata: unknown, logger: Parser.ParserErrorHandler) {\n  const {\n    key_info,\n    unimplemented_dependencies\n  } = introspect(classdata);\n\n  const JITNode = createRuntimeClass(classname, key_info, logger);\n  Parser.addRuntimeParser(classname, JITNode);\n\n  for (const [ name, data ] of unimplemented_dependencies)\n    generateRuntimeClass(name, data, logger);\n\n  return JITNode;\n}\n\n/**\n * Generate a typescript class based on the key info\n * @param classname - The name of the class\n * @param key_info - The key info, as returned by {@link introspect}\n * @returns Typescript class file\n */\nexport function generateTypescriptClass(classname: string, key_info: KeyInfo) {\n  const props: string[] = [];\n  const constructor_lines = [\n    'super();'\n  ];\n  for (const [ key, value ] of key_info) {\n    let snake_key = camelToSnake(key);\n    if (value.type === 'misc' && value.misc_type === 'NavigationEndpoint')\n      snake_key = 'endpoint';\n    props.push(`${snake_key}${value.optional ? '?' : ''}: ${toTypeDeclaration(value)};`);\n    constructor_lines.push(`this.${snake_key} = ${toParser(key, value)};`);\n  }\n  return `class ${classname} extends YTNode {\\n  static type = '${classname}';\\n\\n  ${props.join('\\n  ')}\\n\\n  constructor(data: RawNode) {\\n    ${constructor_lines.join('\\n    ')}\\n  }\\n}\\n`;\n}\n\nfunction toTypeDeclarationObject(indentation: number, keys: KeyInfo) {\n  return `{\\n${keys.map(([ key, value ]) => `${' '.repeat((indentation + 2) * 2)}${camelToSnake(key)}${value.optional ? '?' : ''}: ${toTypeDeclaration(value, indentation + 1)}`).join(',\\n')}\\n${' '.repeat((indentation + 1) * 2)}}`;\n}\n\n/**\n * For a given inference type, get the typescript type declaration\n * @param inference_type - The inference type to get the declaration for\n * @param indentation - The indentation level (used for objects)\n * @returns Typescript type declaration\n */\nexport function toTypeDeclaration(inference_type: InferenceType, indentation = 0): string {\n  switch (inference_type.type) {\n    case 'renderer': {\n      return `${inference_type.renderers.map((type) => `YTNodes.${type}`).join(' | ')} | null`;\n    }\n    case 'array': {\n      switch (inference_type.array_type) {\n        case 'renderer':\n          return `ObservedArray<${inference_type.renderers.map((type) => `YTNodes.${type}`).join(' | ')}> | null`;\n\n        case 'primitive':\n        {\n          const items_list = inference_type.items.typeof;\n          if (inference_type.items.optional && !items_list.includes('undefined'))\n            items_list.push('undefined');\n          const items =\n            items_list.length === 1 ?\n              `${items_list[0]}` : `(${items_list.join(' | ')})`;\n          return `${items}[]`;\n        }\n\n        case 'object':\n          return `${toTypeDeclarationObject(indentation, inference_type.items.keys)}[]`;\n\n        default:\n          throw new Error('Unreachable code reached! Switch missing case!');\n      }\n    }\n    case 'object': {\n      return toTypeDeclarationObject(indentation, inference_type.keys);\n    }\n    case 'misc': {\n      switch (inference_type.misc_type) {\n        case 'Thumbnail':\n          return 'Thumbnail[]';\n        default:\n          return inference_type.misc_type;\n      }\n    }\n    case 'primitive': {\n      return inference_type.typeof.join(' | ');\n    }\n  }\n}\n\nfunction toParserObject(indentation: number, keys: KeyInfo, key_path: string[], key: string) {\n  const new_keypath = [ ...key_path, key ];\n  return `{\\n${keys.map(([ key, value ]) => `${' '.repeat((indentation + 2) * 2)}${camelToSnake(key)}: ${toParser(key, value, new_keypath, indentation + 1)}`).join(',\\n')}\\n${' '.repeat((indentation + 1) * 2)}}`;\n}\n\n/**\n * Generate statements to parse a given inference type\n * @param key - The key to parse\n * @param inference_type - The inference type to parse\n * @param key_path - The path to the key (excluding the key itself)\n * @param indentation - The indentation level (used for objects)\n * @returns Statement to parse the given key\n */\nexport function toParser(key: string, inference_type: InferenceType, key_path: string[] = [ 'data' ], indentation = 1) {\n  let parser = 'undefined';\n  switch (inference_type.type) {\n    case 'renderer':\n      {\n        parser = `Parser.parseItem(${key_path.join('.')}.${key}, ${toParserValidTypes(inference_type.renderers)})`;\n      }\n      break;\n    case 'array':\n      {\n        switch (inference_type.array_type) {\n          case 'renderer':\n            parser = `Parser.parse(${key_path.join('.')}.${key}, true, ${toParserValidTypes(inference_type.renderers)})`;\n            break;\n\n          case 'object':\n            parser = `${key_path.join('.')}.${key}.map((item: any) => (${toParserObject(indentation, inference_type.items.keys, [], 'item')}))`;\n            break;\n\n          case 'primitive':\n            parser = `${key_path.join('.')}.${key}`;\n            break;\n\n          default:\n            throw new Error('Unreachable code reached! Switch missing case!');\n        }\n      }\n      break;\n    case 'object':\n      {\n        parser = toParserObject(indentation, inference_type.keys, key_path, key);\n      }\n      break;\n    case 'misc':\n      switch (inference_type.misc_type) {\n        case 'Thumbnail':\n          parser = `Thumbnail.fromResponse(${key_path.join('.')}.${key})`;\n          break;\n        case 'Author':\n        {\n          const author_parser = `new Author(${key_path.join('.')}.${inference_type.params[0]}, ${inference_type.params[1] ? `${key_path.join('.')}.${inference_type.params[1]}` : 'undefined'})`;\n          if (inference_type.optional)\n            return `Reflect.has(${key_path.join('.')}, '${inference_type.params[0]}') ? ${author_parser} : undefined`;\n          return author_parser;\n        }\n        default:\n          parser = `new ${inference_type.misc_type}(${key_path.join('.')}.${key})`;\n          break;\n      }\n      if (parser === 'undefined')\n        throw new Error('Unreachable code reached! Switch missing case!');\n      break;\n    case 'primitive':\n      parser = `${key_path.join('.')}.${key}`;\n      break;\n  }\n  if (inference_type.optional)\n    return `Reflect.has(${key_path.join('.')}, '${key}') ? ${parser} : undefined`;\n  return parser;\n}\n\nfunction toParserValidTypes(types: string[]) {\n  if (types.length === 1) {\n    return `YTNodes.${types[0]}`;\n  }\n\n  return `[ ${types.map((type) => `YTNodes.${type}`).join(', ')} ]`;\n}\n\nfunction accessDataFromKeyPath(root: any, key_path: string[]) {\n  let data = root;\n  for (const key of key_path)\n    data = data[key];\n  return data;\n}\n\nfunction hasDataFromKeyPath(root: any, key_path: string[]) {\n  let data = root;\n  for (const key of key_path)\n    if (!Reflect.has(data, key))\n      return false;\n    else\n      data = data[key];\n  return true;\n}\n\nfunction parseObject(key: string, data: unknown, key_path: string[], keys: KeyInfo, should_optional: boolean) {\n  const obj: any = {};\n  const new_key_path = [ ...key_path, key ];\n  for (const [ key, value ] of keys) {\n    obj[key] = should_optional ? parse(key, value, data, new_key_path) : undefined;\n  }\n  return obj;\n}\n\n/**\n * Parse a value from a given key path using the given inference type\n * @param key - The key to parse\n * @param inference_type - The inference type to parse\n * @param data - The data to parse from\n * @param key_path - The path to the key (excluding the key itself)\n * @returns The parsed value\n */\nexport function parse(key: string, inference_type: InferenceType, data: unknown, key_path: string[] = [ 'data' ]) {\n  const should_optional = !inference_type.optional || hasDataFromKeyPath({ data }, [ ...key_path, key ]);\n  switch (inference_type.type) {\n    case 'renderer': {\n      return should_optional ? Parser.parseItem(accessDataFromKeyPath({ data }, [ ...key_path, key ]), inference_type.renderers.map((type) => Parser.getParserByName(type))) : undefined;\n    }\n    case 'array': {\n      switch (inference_type.array_type) {\n        case 'renderer':\n          return should_optional ? Parser.parse(accessDataFromKeyPath({ data }, [ ...key_path, key ]), true, inference_type.renderers.map((type) => Parser.getParserByName(type))) : undefined;\n        case 'object':\n          return should_optional ? accessDataFromKeyPath({ data }, [ ...key_path, key ]).map((_: any, idx: number) => {\n            return parseObject(`${idx}`, data, [ ...key_path, key ], inference_type.items.keys, should_optional);\n          }) : undefined;\n        case 'primitive':\n          return should_optional ? accessDataFromKeyPath({ data }, [ ...key_path, key ]) : undefined;\n        default:\n          throw new Error('Unreachable code reached! Switch missing case!');\n      }\n    }\n    case 'object': {\n      return parseObject(key, data, key_path, inference_type.keys, should_optional);\n    }\n    case 'misc':\n      switch (inference_type.misc_type) {\n        case 'NavigationEndpoint':\n          return should_optional ? new NavigationEndpoint(accessDataFromKeyPath({ data }, [ ...key_path, key ])) : undefined;\n        case 'Text':\n          return should_optional ? new Text(accessDataFromKeyPath({ data }, [ ...key_path, key ])) : undefined;\n        case 'Thumbnail':\n          return should_optional ? Thumbnail.fromResponse(accessDataFromKeyPath({ data }, [ ...key_path, key ])) : undefined;\n        case 'Author': {\n          const author_should_optional = !inference_type.optional || hasDataFromKeyPath({ data }, [ ...key_path, inference_type.params[0] ]);\n          return author_should_optional ? new Author(\n            accessDataFromKeyPath({ data }, [ ...key_path, inference_type.params[0] ]),\n            inference_type.params[1] ?\n              accessDataFromKeyPath({ data }, [ ...key_path, inference_type.params[1] ]) : undefined\n          ) : undefined;\n        }\n        default:\n          throw new Error('Unreachable code reached! Switch missing case!');\n      }\n    case 'primitive':\n      return accessDataFromKeyPath({ data }, [ ...key_path, key ]);\n  }\n}\n\n/**\n * Merges two sets of key info, resolving any conflicts\n * @param key_info - The current key info\n * @param new_key_info - The new key info\n * @returns The merged key info\n */\nexport function mergeKeyInfo(key_info: KeyInfo, new_key_info: KeyInfo) {\n  const changed_keys = new Map<string, InferenceType>();\n  const current_keys = new Set(key_info.map(([ key ]) => key));\n  const new_keys = new Set(new_key_info.map(([ key ]) => key));\n\n  const added_keys = new_key_info.filter(([ key ]) => !current_keys.has(key));\n  const removed_keys = key_info.filter(([ key ]) => !new_keys.has(key));\n\n  const common_keys = key_info.filter(([ key ]) => new_keys.has(key));\n\n  const new_key_map = new Map(new_key_info);\n\n  for (const [ key, type ] of common_keys) {\n    const new_type = new_key_map.get(key);\n    if (!new_type) continue;\n    if (type.type !== new_type.type) {\n      // We've got a type mismatch, this is unknown, we do not resolve unions\n      changed_keys.set(key, {\n        type: 'primitive',\n        typeof: [ 'unknown' ],\n        optional: true\n      });\n      continue;\n    }\n    // We've got the same type, so we can now resolve the changes\n    switch (type.type) {\n      case 'object':\n        {\n          if (new_type.type !== 'object') continue;\n          const { resolved_key_info } = mergeKeyInfo(type.keys, new_type.keys);\n          const resolved_key: InferenceType = {\n            type: 'object',\n            keys: resolved_key_info,\n            optional: type.optional || new_type.optional\n          };\n          const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n          if (did_change) changed_keys.set(key, resolved_key);\n        }\n        break;\n      case 'renderer':\n        {\n          if (new_type.type !== 'renderer') continue;\n          const union_map = {\n            ...type.renderers,\n            ...new_type.renderers\n          };\n          const either_optional = type.optional || new_type.optional;\n          const resolved_key: InferenceType = {\n            type: 'renderer',\n            renderers: union_map,\n            optional: either_optional\n          };\n          const did_change = JSON.stringify({\n            ...resolved_key,\n            renderers: Object.keys(resolved_key.renderers)\n          }) !== JSON.stringify({\n            ...type,\n            renderers: Object.keys(type.renderers)\n          });\n          if (did_change) changed_keys.set(key, resolved_key);\n        }\n        break;\n      case 'array': {\n        if (new_type.type !== 'array') continue;\n        switch (type.array_type) {\n          case 'renderer':\n            {\n              if (new_type.array_type !== 'renderer') {\n              // Type mismatch\n                changed_keys.set(key, {\n                  type: 'array',\n                  array_type: 'primitive',\n                  items: {\n                    type: 'primitive',\n                    typeof: [ 'unknown' ],\n                    optional: true\n                  },\n                  optional: true\n                });\n                continue;\n              }\n              const union_map = {\n                ...type.renderers,\n                ...new_type.renderers\n              };\n              const either_optional = type.optional || new_type.optional;\n              const resolved_key: InferenceType = {\n                type: 'array',\n                array_type: 'renderer',\n                renderers: union_map,\n                optional: either_optional\n              };\n              const did_change = JSON.stringify({\n                ...resolved_key,\n                renderers: Object.keys(resolved_key.renderers)\n              }) !== JSON.stringify({\n                ...type,\n                renderers: Object.keys(type.renderers)\n              });\n              if (did_change) changed_keys.set(key, resolved_key);\n            }\n            break;\n          case 'object':\n            {\n              if (new_type.array_type === 'primitive' && new_type.items.typeof.length == 1 && new_type.items.typeof[0] === 'never') {\n              // It's an empty array. We assume the type is unchanged\n                continue;\n              }\n              if (new_type.array_type !== 'object') {\n              // Type mismatch\n                changed_keys.set(key, {\n                  type: 'array',\n                  array_type: 'primitive',\n                  items: {\n                    type: 'primitive',\n                    typeof: [ 'unknown' ],\n                    optional: true\n                  },\n                  optional: true\n                });\n                continue;\n              }\n              const { resolved_key_info } = mergeKeyInfo(type.items.keys, new_type.items.keys);\n              const resolved_key: InferenceType = {\n                type: 'array',\n                array_type: 'object',\n                items: {\n                  type: 'object',\n                  keys: resolved_key_info,\n                  optional: type.items.optional || new_type.items.optional\n                },\n                optional: type.optional || new_type.optional\n              };\n              const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n              if (did_change) changed_keys.set(key, resolved_key);\n            }\n            break;\n          case 'primitive':\n            {\n              if (type.items.typeof.includes('never') && new_type.array_type === 'object') {\n              // Type is now known from previously unknown\n                changed_keys.set(key, new_type);\n                continue;\n              }\n              if (new_type.array_type !== 'primitive') {\n              // Type mismatch\n                changed_keys.set(key, {\n                  type: 'array',\n                  array_type: 'primitive',\n                  items: {\n                    type: 'primitive',\n                    typeof: [ 'unknown' ],\n                    optional: true\n                  },\n                  optional: true\n                });\n                continue;\n              }\n\n              const key_types = new Set([ ...new_type.items.typeof, ...type.items.typeof ]);\n              if (key_types.size > 1 && key_types.has('never'))\n                key_types.delete('never');\n\n              const resolved_key: InferenceType = {\n                type: 'array',\n                array_type: 'primitive',\n                items: {\n                  type: 'primitive',\n                  typeof: Array.from(key_types),\n                  optional: type.items.optional || new_type.items.optional\n                },\n                optional: type.optional || new_type.optional\n              };\n              const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n              if (did_change) changed_keys.set(key, resolved_key);\n            }\n            break;\n          default:\n            throw new Error('Unreachable code reached! Switch missing case!');\n        }\n        break;\n      }\n      case 'misc':\n        {\n          if (new_type.type !== 'misc') continue;\n          if (type.misc_type !== new_type.misc_type) {\n          // We've got a type mismatch, this is unknown, we do not resolve unions\n            changed_keys.set(key, {\n              type: 'primitive',\n              typeof: [ 'unknown' ],\n              optional: true\n            });\n          }\n          switch (type.misc_type) {\n            case 'Author':\n              {\n                if (new_type.misc_type !== 'Author') break;\n                const had_optional_param = type.params[1] || new_type.params[1];\n                const either_optional = type.optional || new_type.optional;\n                const resolved_key: MiscInferenceType = {\n                  type: 'misc',\n                  misc_type: 'Author',\n                  optional: either_optional,\n                  params: [ new_type.params[0], had_optional_param ]\n                };\n                const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n                if (did_change) changed_keys.set(key, resolved_key);\n              }\n              break;\n          // Other cases can not change\n          }\n        }\n        break;\n      case 'primitive':\n        {\n          if (new_type.type !== 'primitive') continue;\n          const resolved_key: InferenceType = {\n            type: 'primitive',\n            typeof: Array.from(new Set([ ...new_type.typeof, ...type.typeof ])),\n            optional: type.optional || new_type.optional\n          };\n          const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n          if (did_change) changed_keys.set(key, resolved_key);\n        }\n        break;\n    }\n  }\n\n  for (const [ key, type ] of added_keys) {\n    changed_keys.set(key, {\n      ...type,\n      optional: true\n    });\n  }\n\n  for (const [ key, type ] of removed_keys) {\n    changed_keys.set(key, {\n      ...type,\n      optional: true\n    });\n  }\n\n  const unchanged_keys = key_info.filter(([ key ]) => !changed_keys.has(key));\n\n  const resolved_key_info_map = new Map([ ...unchanged_keys, ...changed_keys ]);\n  const resolved_key_info = [ ...resolved_key_info_map.entries() ];\n\n  return {\n    resolved_key_info,\n    changed_keys: [ ...changed_keys.entries() ]\n  };\n}", "import { YTNode, observe } from './helpers.js';\nimport { Thumbnail } from './misc.js';\nimport { NavigationEndpoint, LiveChatItemList, LiveChatHeader, LiveChatParticipantsList, Message } from './nodes.js';\nimport * as Parser from './parser.js';\n\nimport type { RawNode } from './index.js';\nimport type { ObservedArray } from './helpers.js';\n\nexport class ItemSectionContinuation extends YTNode {\n  static readonly type = 'itemSectionContinuation';\n\n  contents: ObservedArray<YTNode>;\n  continuation?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    if (Array.isArray(data.continuations)) {\n      this.continuation = data.continuations?.at(0)?.nextContinuationData?.continuation;\n    }\n  }\n}\n\nexport class NavigateAction extends YTNode {\n  static readonly type = 'navigateAction';\n\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}\n\nexport class ShowMiniplayerCommand extends YTNode {\n  static readonly type = 'showMiniplayerCommand';\n\n  miniplayer_command: NavigationEndpoint;\n  show_premium_branding: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.miniplayer_command = new NavigationEndpoint(data.miniplayerCommand);\n    this.show_premium_branding = data.showPremiumBranding;\n  }\n}\n\nexport { default as AppendContinuationItemsAction } from './classes/actions/AppendContinuationItemsAction.js';\n\nexport class ReloadContinuationItemsCommand extends YTNode {\n  static readonly type = 'reloadContinuationItemsCommand';\n\n  target_id: string;\n  contents: ObservedArray<YTNode> | null;\n  slot?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_id = data.targetId;\n    this.contents = Parser.parse(data.continuationItems, true);\n    this.slot = data?.slot;\n  }\n}\n\nexport class SectionListContinuation extends YTNode {\n  static readonly type = 'sectionListContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data.contents, true);\n    this.continuation =\n      data.continuations?.[0]?.nextContinuationData?.continuation ||\n      data.continuations?.[0]?.reloadContinuationData?.continuation || null;\n  }\n}\n\nexport class MusicPlaylistShelfContinuation extends YTNode {\n  static readonly type = 'musicPlaylistShelfContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data.contents, true);\n    this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;\n  }\n}\n\nexport class MusicShelfContinuation extends YTNode {\n  static readonly type = 'musicShelfContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.continuation =\n      data.continuations?.[0].nextContinuationData?.continuation ||\n      data.continuations?.[0].reloadContinuationData?.continuation || null;\n  }\n}\n\nexport class GridContinuation extends YTNode {\n  static readonly type = 'gridContinuation';\n\n  continuation: string;\n  items: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parse(data.items, true);\n    this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;\n  }\n\n  get contents() {\n    return this.items;\n  }\n}\n\nexport class PlaylistPanelContinuation extends YTNode {\n  static readonly type = 'playlistPanelContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation ||\n      data.continuations?.[0]?.nextRadioContinuationData?.continuation || null;\n  }\n}\n\nexport class Continuation extends YTNode {\n  static readonly type = 'continuation';\n\n  continuation_type: string;\n  timeout_ms?: number;\n  time_until_last_message_ms?: number;\n  token: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.continuation_type = data.type;\n    this.timeout_ms = data.continuation?.timeoutMs;\n    this.time_until_last_message_ms = data.continuation?.timeUntilLastMessageMsec;\n    this.token = data.continuation?.continuation;\n  }\n}\n\nexport class LiveChatContinuation extends YTNode {\n  static readonly type = 'liveChatContinuation';\n\n  actions: ObservedArray<YTNode>;\n  action_panel: YTNode | null;\n  item_list: LiveChatItemList | null;\n  header: LiveChatHeader | null;\n  participants_list: LiveChatParticipantsList | null;\n  popout_message: Message | null;\n  emojis: {\n    emoji_id: string;\n    shortcuts: string[];\n    search_terms: string[];\n    image: Thumbnail[];\n  }[];\n  continuation: Continuation;\n  viewer_name: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions = Parser.parse(data.actions?.map((action: any) => {\n      delete action.clickTrackingParams;\n      return action;\n    }), true) || observe<YTNode>([]);\n\n    this.action_panel = Parser.parseItem(data.actionPanel);\n    this.item_list = Parser.parseItem(data.itemList, LiveChatItemList);\n    this.header = Parser.parseItem(data.header, LiveChatHeader);\n    this.participants_list = Parser.parseItem(data.participantsList, LiveChatParticipantsList);\n    this.popout_message = Parser.parseItem(data.popoutMessage, Message);\n\n    this.emojis = data.emojis?.map((emoji: any) => ({\n      emoji_id: emoji.emojiId,\n      shortcuts: emoji.shortcuts,\n      search_terms: emoji.searchTerms,\n      image: Thumbnail.fromResponse(emoji.image),\n      is_custom_emoji: emoji.isCustomEmoji\n    })) || [];\n\n    let continuation, type;\n\n    if (data.continuations?.[0].timedContinuationData) {\n      type = 'timed';\n      continuation = data.continuations?.[0].timedContinuationData;\n    } else if (data.continuations?.[0].invalidationContinuationData) {\n      type = 'invalidation';\n      continuation = data.continuations?.[0].invalidationContinuationData;\n    } else if (data.continuations?.[0].liveChatReplayContinuationData) {\n      type = 'replay';\n      continuation = data.continuations?.[0].liveChatReplayContinuationData;\n    }\n\n    this.continuation = new Continuation({ continuation, type });\n\n    this.viewer_name = data.viewerName;\n  }\n}\n\nexport class ContinuationCommand extends YTNode {\n  static readonly type = 'ContinuationCommand';\n\n  request: string;\n  token: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.request = data.request;\n    this.token = data.token;\n  }\n}", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: misc/common.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"misc\";\n\nexport interface HttpHeader {\n  name?: string | undefined;\n  value?: string | undefined;\n}\n\nexport interface FormatId {\n  itag?: number | undefined;\n  lastModified?: number | undefined;\n  xtags?: string | undefined;\n}\n\nexport interface InitRange {\n  start?: number | undefined;\n  end?: number | undefined;\n}\n\nexport interface IndexRange {\n  start?: number | undefined;\n  end?: number | undefined;\n}\n\nexport interface KeyValuePair {\n  key?: string | undefined;\n  value?: string | undefined;\n}\n\nexport interface FormatXTags {\n  xtags: KeyValuePair[];\n}\n\nfunction createBaseHttpHeader(): HttpHeader {\n  return { name: undefined, value: undefined };\n}\n\nexport const HttpHeader: MessageFns<HttpHeader> = {\n  encode(message: HttpHeader, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.name !== undefined) {\n      writer.uint32(10).string(message.name);\n    }\n    if (message.value !== undefined) {\n      writer.uint32(18).string(message.value);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): HttpHeader {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseHttpHeader();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.name = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.value = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseFormatId(): FormatId {\n  return { itag: undefined, lastModified: undefined, xtags: undefined };\n}\n\nexport const FormatId: MessageFns<FormatId> = {\n  encode(message: FormatId, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.itag !== undefined) {\n      writer.uint32(8).int32(message.itag);\n    }\n    if (message.lastModified !== undefined) {\n      writer.uint32(16).uint64(message.lastModified);\n    }\n    if (message.xtags !== undefined) {\n      writer.uint32(26).string(message.xtags);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): FormatId {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseFormatId();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.itag = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.lastModified = longToNumber(reader.uint64());\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.xtags = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInitRange(): InitRange {\n  return { start: undefined, end: undefined };\n}\n\nexport const InitRange: MessageFns<InitRange> = {\n  encode(message: InitRange, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.start !== undefined) {\n      writer.uint32(8).int32(message.start);\n    }\n    if (message.end !== undefined) {\n      writer.uint32(16).int32(message.end);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InitRange {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInitRange();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.start = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.end = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseIndexRange(): IndexRange {\n  return { start: undefined, end: undefined };\n}\n\nexport const IndexRange: MessageFns<IndexRange> = {\n  encode(message: IndexRange, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.start !== undefined) {\n      writer.uint32(8).int32(message.start);\n    }\n    if (message.end !== undefined) {\n      writer.uint32(16).int32(message.end);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): IndexRange {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseIndexRange();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.start = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.end = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseKeyValuePair(): KeyValuePair {\n  return { key: undefined, value: undefined };\n}\n\nexport const KeyValuePair: MessageFns<KeyValuePair> = {\n  encode(message: KeyValuePair, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.key !== undefined) {\n      writer.uint32(10).string(message.key);\n    }\n    if (message.value !== undefined) {\n      writer.uint32(18).string(message.value);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): KeyValuePair {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseKeyValuePair();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.key = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.value = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseFormatXTags(): FormatXTags {\n  return { xtags: [] };\n}\n\nexport const FormatXTags: MessageFns<FormatXTags> = {\n  encode(message: FormatXTags, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.xtags) {\n      KeyValuePair.encode(v!, writer.uint32(10).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): FormatXTags {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseFormatXTags();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.xtags.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "import type Player from '../../../core/Player.js';\nimport type { RawNode } from '../../index.js';\nimport { FormatXTags } from '../../../../protos/generated/misc/common.js';\nimport { base64ToU8 } from '../../../utils/Utils.js';\n\nexport type ProjectionType = 'RECTANGULAR' | 'EQUIRECTANGULAR' | 'EQUIRECTANGULAR_THREED_TOP_BOTTOM' | 'MESH';\nexport type SpatialAudioType = 'AMBISONICS_5_1' | 'AMBISONICS_QUAD' | 'FOA_WITH_NON_DIEGETIC';\nexport type StereoLayout = 'LEFT_RIGHT' | 'TOP_BOTTOM';\n\nexport type Range = {\n  start: number;\n  end: number;\n};\n\nexport type ColorInfo = {\n  primaries?: string;\n  transfer_characteristics?: string;\n  matrix_coefficients?: string;\n};\n\nexport type AudioTrack = {\n  audio_is_default: boolean;\n  display_name: string;\n  id: string;\n};\n\nexport type CaptionTrack = {\n  display_name: string;\n  vss_id: string;\n  language_code: string;\n  kind?: 'asr' | 'frc';\n  id: string;\n};\n\nexport default class Format {\n  readonly #this_response_nsig_cache?: Map<string, string>;\n\n  public itag: number;\n  public url?: string;\n  public width?: number;\n  public height?: number;\n  public last_modified: Date;\n  public last_modified_ms: string;\n  public content_length?: number;\n  public quality?: string;\n  public xtags?: string;\n  public drm_families?: string[];\n  public fps?: number;\n  public quality_label?: string;\n  public projection_type?: ProjectionType;\n  public average_bitrate?: number;\n  public bitrate: number;\n  public spatial_audio_type?: SpatialAudioType;\n  public target_duration_dec?: number;\n  public fair_play_key_uri?: string;\n  public stereo_layout?: StereoLayout;\n  public max_dvr_duration_sec?: number;\n  public high_replication?: boolean;\n  public audio_quality?: string;\n  public approx_duration_ms: number;\n  public audio_sample_rate?: number;\n  public audio_channels?: number;\n  public loudness_db?: number;\n  public signature_cipher?: string;\n  public is_drc?: boolean;\n  public is_vb?: boolean;\n  public is_sr?: boolean;\n  public drm_track_type?: string;\n  public distinct_params?: string;\n  public track_absolute_loudness_lkfs?: number;\n  public mime_type: string;\n  public is_type_otf: boolean;\n  public init_range?: Range;\n  public index_range?: Range;\n  public cipher?: string;\n  public audio_track?: AudioTrack;\n  public has_audio: boolean;\n  public has_video: boolean;\n  public has_text: boolean;\n  public language?: string | null;\n  public is_dubbed?: boolean;\n  public is_auto_dubbed?: boolean;\n  public is_descriptive?: boolean;\n  public is_secondary?: boolean;\n  public is_original?: boolean;\n  public color_info?: ColorInfo;\n  public caption_track?: CaptionTrack;\n\n  constructor(data: RawNode, this_response_nsig_cache?: Map<string, string>) {\n    if (this_response_nsig_cache)\n      this.#this_response_nsig_cache = this_response_nsig_cache;\n\n    this.itag = data.itag;\n    this.mime_type = data.mimeType;\n    this.is_type_otf = data.type === 'FORMAT_STREAM_TYPE_OTF';\n    this.bitrate = data.bitrate;\n    this.average_bitrate = data.averageBitrate;\n\n    if (Reflect.has(data, 'width') && Reflect.has(data, 'height')) {\n      this.width = parseInt(data.width);\n      this.height = parseInt(data.height);\n    }\n\n    if (Reflect.has(data, 'projectionType'))\n      this.projection_type = data.projectionType;\n\n    if (Reflect.has(data, 'stereoLayout'))\n      this.stereo_layout = data.stereoLayout?.replace('STEREO_LAYOUT_', '');\n\n    if (Reflect.has(data, 'initRange'))\n      this.init_range = {\n        start: parseInt(data.initRange.start),\n        end: parseInt(data.initRange.end)\n      };\n\n    if (Reflect.has(data, 'indexRange'))\n      this.index_range = {\n        start: parseInt(data.indexRange.start),\n        end: parseInt(data.indexRange.end)\n      };\n\n    this.last_modified = new Date(Math.floor(parseInt(data.lastModified) / 1000));\n    this.last_modified_ms = data.lastModified;\n\n    if (Reflect.has(data, 'contentLength'))\n      this.content_length = parseInt(data.contentLength);\n\n    if (Reflect.has(data, 'quality'))\n      this.quality = data.quality;\n\n    if (Reflect.has(data, 'qualityLabel'))\n      this.quality_label = data.qualityLabel;\n\n    if (Reflect.has(data, 'fps'))\n      this.fps = data.fps;\n\n    if (Reflect.has(data, 'url'))\n      this.url = data.url;\n\n    if (Reflect.has(data, 'cipher'))\n      this.cipher = data.cipher;\n\n    if (Reflect.has(data, 'signatureCipher'))\n      this.signature_cipher = data.signatureCipher;\n\n    if (Reflect.has(data, 'audioQuality'))\n      this.audio_quality = data.audioQuality;\n\n    this.approx_duration_ms = parseInt(data.approxDurationMs);\n\n    if (Reflect.has(data, 'audioSampleRate'))\n      this.audio_sample_rate = parseInt(data.audioSampleRate);\n\n    if (Reflect.has(data, 'audioChannels'))\n      this.audio_channels = data.audioChannels;\n\n    if (Reflect.has(data, 'loudnessDb'))\n      this.loudness_db = data.loudnessDb;\n\n    if (Reflect.has(data, 'spatialAudioType'))\n      this.spatial_audio_type = data.spatialAudioType?.replace('SPATIAL_AUDIO_TYPE_', '');\n\n    if (Reflect.has(data, 'maxDvrDurationSec'))\n      this.max_dvr_duration_sec = data.maxDvrDurationSec;\n\n    if (Reflect.has(data, 'targetDurationSec'))\n      this.target_duration_dec = data.targetDurationSec;\n\n    this.has_audio = !!data.audioBitrate || !!data.audioQuality;\n    this.has_video = !!data.qualityLabel;\n    this.has_text = !!data.captionTrack;\n\n    if (Reflect.has(data, 'xtags'))\n      this.xtags = data.xtags;\n\n    if (Reflect.has(data, 'fairPlayKeyUri'))\n      this.fair_play_key_uri = data.fairPlayKeyUri;\n\n    if (Reflect.has(data, 'drmFamilies'))\n      this.drm_families = data.drmFamilies;\n\n    if (Reflect.has(data, 'drmTrackType'))\n      this.drm_track_type = data.drmTrackType;\n\n    if (Reflect.has(data, 'distinctParams'))\n      this.distinct_params = data.distinctParams;\n\n    if (Reflect.has(data, 'trackAbsoluteLoudnessLkfs'))\n      this.track_absolute_loudness_lkfs = data.trackAbsoluteLoudnessLkfs;\n\n    if (Reflect.has(data, 'highReplication'))\n      this.high_replication = data.highReplication;\n\n    if (Reflect.has(data, 'colorInfo'))\n      this.color_info = {\n        primaries: data.colorInfo.primaries?.replace('COLOR_PRIMARIES_', ''),\n        transfer_characteristics: data.colorInfo.transferCharacteristics?.replace('COLOR_TRANSFER_CHARACTERISTICS_', ''),\n        matrix_coefficients: data.colorInfo.matrixCoefficients?.replace('COLOR_MATRIX_COEFFICIENTS_', '')\n      };\n\n    if (Reflect.has(data, 'audioTrack'))\n      this.audio_track = {\n        audio_is_default: data.audioTrack.audioIsDefault,\n        display_name: data.audioTrack.displayName,\n        id: data.audioTrack.id\n      };\n\n    if (Reflect.has(data, 'captionTrack'))\n      this.caption_track = {\n        display_name: data.captionTrack.displayName,\n        vss_id: data.captionTrack.vssId,\n        language_code: data.captionTrack.languageCode,\n        kind: data.captionTrack.kind,\n        id: data.captionTrack.id\n      };\n\n    const xtags = this.xtags\n      ? FormatXTags.decode(base64ToU8(decodeURIComponent(this.xtags).replace(/-/g, '+').replace(/_/g, '/'))).xtags\n      : [];\n\n    if (this.has_audio || this.has_text) {\n      this.language = xtags.find((tag) => tag.key === 'lang')?.value || null;\n\n      if (this.has_audio) {\n        this.is_drc = !!data.isDrc || xtags.some((tag) => tag.key === 'drc' && tag.value === '1');\n        this.is_vb = !!data.isVb || xtags.some((tag) => tag.key === 'vb' && tag.value === '1');\n\n        const audio_content = xtags.find((tag) => tag.key === 'acont')?.value;\n        this.is_dubbed = audio_content === 'dubbed';\n        this.is_descriptive = audio_content === 'descriptive';\n        this.is_secondary = audio_content === 'secondary';\n        this.is_auto_dubbed = audio_content === 'dubbed-auto';\n        this.is_original = audio_content === 'original' || (!this.is_dubbed && !this.is_descriptive && !this.is_secondary && !this.is_auto_dubbed && !this.is_drc);\n      }\n\n      // Some text tracks don't have xtags while others do\n      if (this.has_text && !this.language && this.caption_track) {\n        this.language = this.caption_track.language_code;\n      }\n    }\n\n    if (this.has_video) {\n      this.is_sr = xtags.some((tag) => tag.key === 'sr' && tag.value === '1');\n    }\n  }\n\n  /**\n   * Deciphers the URL using the provided player instance.\n   * @param player - An optional instance of the Player class used to decipher the URL.\n   * @returns The deciphered URL as a string. If no player is provided, returns the original URL or an empty string.\n   */\n  async decipher(player?: Player): Promise<string> {\n    if (!player)\n      return this.url || '';\n    return player.decipher(this.url, this.signature_cipher, this.cipher, this.#this_response_nsig_cache);\n  }\n}", "import Thumbnail from './Thumbnail.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class VideoDetails {\n  id: string;\n  channel_id: string;\n  title: string;\n  duration: number;\n  keywords: string[];\n  is_owner_viewing: boolean;\n  short_description: string;\n  thumbnail: Thumbnail[];\n  allow_ratings: boolean;\n  view_count: number;\n  author: string;\n  is_private: boolean;\n  is_live: boolean;\n  is_live_content: boolean;\n  is_live_dvr_enabled: boolean;\n  is_upcoming: boolean;\n  is_crawlable: boolean;\n  is_post_live_dvr: boolean;\n  is_low_latency_live_stream: boolean;\n  live_chunk_readahead?: number;\n\n  constructor(data: RawNode) {\n    this.id = data.videoId;\n    this.channel_id = data.channelId;\n    this.title = data.title;\n    this.duration = parseInt(data.lengthSeconds);\n    this.keywords = data.keywords;\n    this.is_owner_viewing = !!data.isOwnerViewing;\n    this.short_description = data.shortDescription;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.allow_ratings = !!data.allowRatings;\n    this.view_count = parseInt(data.viewCount);\n    this.author = data.author;\n    this.is_private = !!data.isPrivate;\n    this.is_live = !!data.isLive;\n    this.is_live_content = !!data.isLiveContent;\n    this.is_live_dvr_enabled = !!data.isLiveDvrEnabled;\n    this.is_low_latency_live_stream = !!data.isLowLatencyLiveStream;\n    this.is_upcoming = !!data.isUpcoming;\n    this.is_post_live_dvr = !!data.isPostLiveDvr;\n    this.is_crawlable = !!data.isCrawlable;\n    this.live_chunk_readahead = data.liveChunkReadahead;\n  }\n}", "export { default as AccountInfo } from './AccountInfo.js';\nexport { default as Channel } from './Channel.js';\nexport * from './Channel.js';\nexport { default as Comments } from './Comments.js';\nexport { default as Guide } from './Guide.js';\nexport { default as History } from './History.js';\nexport { default as HomeFeed } from './HomeFeed.js';\nexport { default as HashtagFeed } from './HashtagFeed.js';\nexport { default as ItemMenu } from './ItemMenu.js';\nexport { default as Library } from './Library.js';\nexport { default as LiveChat } from './LiveChat.js';\nexport { default as NotificationsMenu } from './NotificationsMenu.js';\nexport { default as Playlist } from './Playlist.js';\nexport { default as Search } from './Search.js';\nexport { default as Settings } from './Settings.js';\nexport { default as SmoothedQueue } from './SmoothedQueue.js';\nexport { default as VideoInfo } from './VideoInfo.js';\nexport { default as TranscriptInfo } from './TranscriptInfo.js';", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport AccountSectionList from '../classes/AccountSectionList.js';\n\nimport type { ApiResponse } from '../../core/index.js';\nimport type { IParsedResponse } from '../types/index.js';\nimport type AccountItemSection from '../classes/AccountItemSection.js';\n\nexport default class AccountInfo {\n  readonly #page: IParsedResponse;\n\n  contents: AccountItemSection | null;\n\n  constructor(response: ApiResponse) {\n    this.#page = Parser.parseResponse(response.data);\n\n    if (!this.#page.contents)\n      throw new InnertubeError('Page contents not found');\n\n    const account_section_list = this.#page.contents.array().as(AccountSectionList)[0];\n\n    if (!account_section_list)\n      throw new InnertubeError('Account section list not found');\n\n    this.contents = account_section_list.contents[0];\n  }\n\n  get page(): IParsedResponse {\n    return this.#page;\n  }\n}", "import type { IParsedResponse } from '../../parser/index.js';\nimport { Parser, ReloadContinuationItemsCommand } from '../../parser/index.js';\nimport { concatMemos, InnertubeError } from '../../utils/Utils.js';\n\nimport BackstagePost from '../../parser/classes/BackstagePost.js';\nimport SharedPost from '../../parser/classes/SharedPost.js';\nimport Channel from '../../parser/classes/Channel.js';\nimport CompactVideo from '../../parser/classes/CompactVideo.js';\nimport GridChannel from '../../parser/classes/GridChannel.js';\nimport GridPlaylist from '../../parser/classes/GridPlaylist.js';\nimport GridVideo from '../../parser/classes/GridVideo.js';\nimport LockupView from '../../parser/classes/LockupView.js';\nimport Playlist from '../../parser/classes/Playlist.js';\nimport PlaylistPanelVideo from '../../parser/classes/PlaylistPanelVideo.js';\nimport PlaylistVideo from '../../parser/classes/PlaylistVideo.js';\nimport Post from '../../parser/classes/Post.js';\nimport ReelItem from '../../parser/classes/ReelItem.js';\nimport ShortsLockupView from '../../parser/classes/ShortsLockupView.js';\nimport ReelShelf from '../../parser/classes/ReelShelf.js';\nimport RichShelf from '../../parser/classes/RichShelf.js';\nimport Shelf from '../../parser/classes/Shelf.js';\nimport Tab from '../../parser/classes/Tab.js';\nimport Video from '../../parser/classes/Video.js';\n\nimport AppendContinuationItemsAction from '../../parser/classes/actions/AppendContinuationItemsAction.js';\nimport ContinuationItem from '../../parser/classes/ContinuationItem.js';\nimport TwoColumnBrowseResults from '../../parser/classes/TwoColumnBrowseResults.js';\nimport TwoColumnSearchResults from '../../parser/classes/TwoColumnSearchResults.js';\nimport WatchCardCompactVideo from '../../parser/classes/WatchCardCompactVideo.js';\n\nimport type { Actions, ApiResponse } from '../index.js';\nimport type { Memo, ObservedArray } from '../../parser/helpers.js';\nimport type MusicQueue from '../../parser/classes/MusicQueue.js';\nimport type RichGrid from '../../parser/classes/RichGrid.js';\nimport type SectionList from '../../parser/classes/SectionList.js';\nimport type SecondarySearchContainer from '../../parser/classes/SecondarySearchContainer.js';\nimport type BrowseFeedActions from '../../parser/classes/BrowseFeedActions.js';\nimport type ProfileColumn from '../../parser/classes/ProfileColumn.js';\n\nexport default class Feed<T extends IParsedResponse = IParsedResponse> {\n  readonly #page: T;\n  readonly #actions: Actions;\n  readonly #memo: Memo;\n\n  #continuation?: ObservedArray<ContinuationItem>;\n  \n  constructor(actions: Actions, response: ApiResponse | IParsedResponse, already_parsed = false) {\n    if (this.#isParsed(response) || already_parsed) {\n      this.#page = response as T;\n    } else {\n      this.#page = Parser.parseResponse<T>(response.data);\n    }\n\n    const memo = concatMemos(...[\n      this.#page.contents_memo,\n      this.#page.continuation_contents_memo,\n      this.#page.on_response_received_commands_memo,\n      this.#page.on_response_received_endpoints_memo,\n      this.#page.on_response_received_actions_memo,\n      this.#page.sidebar_memo,\n      this.#page.header_memo\n    ]);\n\n    if (!memo)\n      throw new InnertubeError('No memo found in feed');\n\n    this.#memo = memo;\n    this.#actions = actions;\n  }\n\n  #isParsed(response: IParsedResponse | ApiResponse): response is IParsedResponse {\n    return !('data' in response);\n  }\n\n  /**\n   * Get all videos on a given page via memo\n   */\n  static getVideosFromMemo(memo: Memo) {\n    return memo.getType(\n      Video,\n      GridVideo,\n      ReelItem,\n      ShortsLockupView,\n      CompactVideo,\n      PlaylistVideo,\n      PlaylistPanelVideo,\n      WatchCardCompactVideo\n    );\n  }\n\n  /**\n   * Get all playlists on a given page via memo\n   */\n  static getPlaylistsFromMemo(memo: Memo) {\n    const playlists: ObservedArray<Playlist | GridPlaylist | LockupView> = memo.getType(Playlist, GridPlaylist);\n\n    const lockup_views = memo.getType(LockupView)\n      .filter((lockup) => {\n        return [ 'PLAYLIST', 'ALBUM', 'PODCAST' ].includes(lockup.content_type);\n      });\n\n    if (lockup_views.length > 0) {\n      playlists.push(...lockup_views);\n    }\n\n    return playlists;\n  }\n\n  /**\n   * Get all the videos in the feed\n   */\n  get videos() {\n    return Feed.getVideosFromMemo(this.#memo);\n  }\n\n  /**\n   * Get all the community posts in the feed\n   */\n  get posts() {\n    return this.#memo.getType(BackstagePost, Post, SharedPost);\n  }\n\n  /**\n   * Get all the channels in the feed\n   */\n  get channels() {\n    return this.#memo.getType(Channel, GridChannel);\n  }\n\n  /**\n   * Get all playlists in the feed\n   */\n  get playlists() {\n    return Feed.getPlaylistsFromMemo(this.#memo);\n  }\n\n  get memo() {\n    return this.#memo;\n  }\n\n  /**\n   * Returns contents from the page.\n   */\n  get page_contents(): SectionList | MusicQueue | RichGrid | ReloadContinuationItemsCommand {\n    const tab_content = this.#memo.getType(Tab)?.[0].content;\n    const reload_continuation_items = this.#memo.getType(ReloadContinuationItemsCommand)[0];\n    const append_continuation_items = this.#memo.getType(AppendContinuationItemsAction)[0];\n\n    return tab_content || reload_continuation_items || append_continuation_items;\n  }\n\n  /**\n   * Returns all segments/sections from the page.\n   */\n  get shelves() {\n    return this.#memo.getType(Shelf, RichShelf, ReelShelf);\n  }\n\n  /**\n   * Finds shelf by title.\n   */\n  getShelf(title: string) {\n    return this.shelves.find((shelf) => shelf.title.toString() === title);\n  }\n\n  /**\n   * Returns secondary contents from the page.\n   */\n  get secondary_contents(): SectionList | SecondarySearchContainer | BrowseFeedActions | ProfileColumn | null {\n    if (!this.#page.contents?.is_node)\n      return null;\n\n    const node = this.#page.contents?.item();\n\n    if (!node.is(TwoColumnBrowseResults, TwoColumnSearchResults))\n      return null;\n\n    return node.secondary_contents;\n  }\n\n  get actions(): Actions {\n    return this.#actions;\n  }\n\n  /**\n   * Get the original page data\n   */\n  get page(): T {\n    return this.#page;\n  }\n\n  /**\n   * Checks if the feed has continuation.\n   */\n  get has_continuation(): boolean {\n    return this.#getBodyContinuations().length > 0;\n  }\n\n  /**\n   * Retrieves continuation data as it is.\n   */\n  async getContinuationData(): Promise<T | undefined> {\n    if (this.#continuation) {\n      if (this.#continuation.length === 0)\n        throw new InnertubeError('There are no continuations.');\n\n      return await this.#continuation[0].endpoint.call<T>(this.#actions, { parse: true });\n    }\n\n    this.#continuation = this.#getBodyContinuations();\n\n    if (this.#continuation)\n      return this.getContinuationData();\n  }\n\n  /**\n   * Retrieves next batch of contents and returns a new {@link Feed} object.\n   */\n  async getContinuation(): Promise<Feed<T>> {\n    const continuation_data = await this.getContinuationData();\n    if (!continuation_data)\n      throw new InnertubeError('Could not get continuation data');\n    return new Feed<T>(this.actions, continuation_data, true);\n  }\n\n  #getBodyContinuations(): ObservedArray<ContinuationItem> {\n    if (this.#page.header_memo) {\n      const header_continuations = this.#page.header_memo.getType(ContinuationItem);\n      return this.#memo.getType(ContinuationItem).filter(\n        (continuation) => !header_continuations.includes(continuation)\n      ) as ObservedArray<ContinuationItem>;\n    }\n    return this.#memo.getType(ContinuationItem);\n  }\n}", "import Feed from './Feed.js';\nimport ChipCloudChip from '../../parser/classes/ChipCloudChip.js';\nimport FeedFilterChipBar from '../../parser/classes/FeedFilterChipBar.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport type { ObservedArray } from '../../parser/helpers.js';\nimport type { IParsedResponse } from '../../parser/index.js';\nimport type { ApiResponse, Actions } from '../index.js';\n\nexport default class FilterableFeed<T extends IParsedResponse> extends Feed<T> {\n  #chips?: ObservedArray<ChipCloudChip>;\n\n  constructor(actions: Actions, data: ApiResponse | T, already_parsed = false) {\n    super(actions, data, already_parsed);\n  }\n\n  /**\n   * Returns the filter chips.\n   */\n  get filter_chips(): ObservedArray<ChipCloudChip> {\n    if (this.#chips)\n      return this.#chips || [];\n\n    if (this.memo.getType(FeedFilterChipBar)?.length > 1)\n      throw new InnertubeError('There are too many feed filter chipbars, you\\'ll need to find the correct one yourself in this.page');\n\n    if (this.memo.getType(FeedFilterChipBar)?.length === 0)\n      throw new InnertubeError('There are no feed filter chipbars');\n\n    this.#chips = this.memo.getType(ChipCloudChip);\n\n    return this.#chips || [];\n  }\n\n  /**\n   * Returns available filters.\n   */\n  get filters(): string[] {\n    return this.filter_chips.map((chip) => chip.text.toString()) || [];\n  }\n\n  /**\n   * Applies given filter and returns a new {@link Feed} object.\n   */\n  async getFilteredFeed(filter: string | ChipCloudChip): Promise<Feed<T>> {\n    let target_filter: ChipCloudChip | undefined;\n\n    if (typeof filter === 'string') {\n      if (!this.filters.includes(filter))\n        throw new InnertubeError('Filter not found', { available_filters: this.filters });\n      target_filter = this.filter_chips.find((chip) => chip.text.toString() === filter);\n    } else if (filter.type === 'ChipCloudChip') {\n      target_filter = filter;\n    } else {\n      throw new InnertubeError('Invalid filter');\n    }\n\n    if (!target_filter)\n      throw new InnertubeError('Filter not found');\n\n    if (target_filter.is_selected)\n      return this;\n\n    const response = await target_filter.endpoint?.call(this.actions, { parse: true });\n\n    if (!response)\n      throw new InnertubeError('Failed to get filtered feed');\n\n    return new Feed(this.actions, response, true);\n  }\n}", "export { default as Feed } from './Feed.js';\nexport { default as FilterableFeed } from './FilterableFeed.js';\nexport { default as TabbedFeed } from './TabbedFeed.js';\nexport { default as MediaInfo } from './MediaInfo.js';", "import { Constants, FormatUtils } from '../../utils/index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { getStreamingInfo } from '../../utils/StreamingInfo.js';\n\nimport type {\n  INextResponse,\n  IPlayabilityStatus,\n  IPlaybackTracking,\n  IPlayerConfig,\n  IPlayerResponse,\n  IStreamingData\n} from '../../parser/index.js';\n\nimport { Parser } from '../../parser/index.js';\nimport { TranscriptInfo } from '../../parser/youtube/index.js';\nimport ContinuationItem from '../../parser/classes/ContinuationItem.js';\nimport PlayerMicroformat from '../../parser/classes/PlayerMicroformat.js';\nimport MicroformatData from '../../parser/classes/MicroformatData.js';\n\nimport type { Actions, ApiResponse } from '../index.js';\nimport type { DownloadOptions, FormatFilter, FormatOptions, URLTransformer } from '../../types/index.js';\nimport type Format from '../../parser/classes/misc/Format.js';\nimport type { DashOptions } from '../../types/DashOptions.js';\nimport type { ObservedArray } from '../../parser/helpers.js';\n\nimport type CardCollection from '../../parser/classes/CardCollection.js';\nimport type Endscreen from '../../parser/classes/Endscreen.js';\nimport type PlayerAnnotationsExpanded from '../../parser/classes/PlayerAnnotationsExpanded.js';\nimport type PlayerCaptionsTracklist from '../../parser/classes/PlayerCaptionsTracklist.js';\nimport type PlayerLiveStoryboardSpec from '../../parser/classes/PlayerLiveStoryboardSpec.js';\nimport type PlayerStoryboardSpec from '../../parser/classes/PlayerStoryboardSpec.js';\n\nexport default class MediaInfo {\n  readonly #page: [ IPlayerResponse, INextResponse? ];\n  readonly #actions: Actions;\n  readonly #cpn: string;\n  readonly #playback_tracking?: IPlaybackTracking;\n\n  public basic_info;\n  public annotations?: ObservedArray<PlayerAnnotationsExpanded>;\n  public storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec;\n  public endscreen?: Endscreen;\n  public captions?: PlayerCaptionsTracklist;\n  public cards?: CardCollection;\n  public streaming_data?: IStreamingData;\n  public playability_status?: IPlayabilityStatus;\n  public player_config?: IPlayerConfig;\n\n  constructor(data: [ ApiResponse, ApiResponse? ], actions: Actions, cpn: string) {\n    this.#actions = actions;\n\n    const info = Parser.parseResponse<IPlayerResponse>(data[0].data.playerResponse ? data[0].data.playerResponse : data[0].data);\n    const next = data[1]?.data ? Parser.parseResponse<INextResponse>(data[1].data) : undefined;\n\n    this.#page = [ info, next ];\n    this.#cpn = cpn;\n\n    if (info.playability_status?.status === 'ERROR')\n      throw new InnertubeError('This video is unavailable', info.playability_status);\n\n    if (info.microformat && !info.microformat?.is(PlayerMicroformat, MicroformatData))\n      throw new InnertubeError('Unsupported microformat', info.microformat);\n\n    this.basic_info = { // This type is inferred so no need for an explicit type\n      ...info.video_details,\n      /**\n       * Microformat is a bit redundant, so only\n       * a few things there are interesting to us.\n       */\n      ...{\n        embed: info.microformat?.is(PlayerMicroformat) ? info.microformat?.embed : null,\n        channel: info.microformat?.is(PlayerMicroformat) ? info.microformat?.channel : null,\n        is_unlisted: info.microformat?.is_unlisted,\n        is_family_safe: info.microformat?.is_family_safe,\n        category: info.microformat?.is(PlayerMicroformat) ? info.microformat?.category : null,\n        has_ypc_metadata: info.microformat?.is(PlayerMicroformat) ? info.microformat?.has_ypc_metadata : null,\n        start_timestamp: info.microformat?.is(PlayerMicroformat) ? info.microformat.start_timestamp : null,\n        end_timestamp: info.microformat?.is(PlayerMicroformat) ? info.microformat.end_timestamp : null,\n        view_count: info.microformat?.is(PlayerMicroformat) && isNaN(info.video_details?.view_count as number) ? info.microformat.view_count : info.video_details?.view_count,\n        url_canonical: info.microformat?.is(MicroformatData) ? info.microformat?.url_canonical : null,\n        tags: info.microformat?.is(MicroformatData) ? info.microformat?.tags : null\n      },\n      like_count: undefined as number | undefined,\n      is_liked: undefined as boolean | undefined,\n      is_disliked: undefined as boolean | undefined\n    };\n\n    this.annotations = info.annotations;\n    this.storyboards = info.storyboards;\n    this.endscreen = info.endscreen;\n    this.captions = info.captions;\n    this.cards = info.cards;\n    this.streaming_data = info.streaming_data;\n    this.playability_status = info.playability_status;\n    this.player_config = info.player_config;\n    this.#playback_tracking = info.playback_tracking;\n  }\n\n  /**\n   * Generates a DASH manifest from the streaming data.\n   * @param options\n   * @returns DASH manifest\n   */\n  async toDash(options: {\n    url_transformer?: URLTransformer;\n    format_filter?: FormatFilter;\n    manifest_options?: DashOptions;\n  } = {}): Promise<string> {\n    const player_response = this.#page[0];\n    const manifest_options = options.manifest_options || {};\n\n    if (player_response.video_details && (player_response.video_details.is_live)) {\n      throw new InnertubeError('Generating DASH manifests for live videos is not supported. Please use the DASH and HLS manifests provided by YouTube in `streaming_data.dash_manifest_url` and `streaming_data.hls_manifest_url` instead.');\n    }\n\n    let storyboards;\n    let captions;\n\n    if (manifest_options.include_thumbnails && player_response.storyboards) {\n      storyboards = player_response.storyboards;\n    }\n\n    if (typeof manifest_options.captions_format === 'string' && player_response.captions?.caption_tracks) {\n      captions = player_response.captions.caption_tracks;\n    }\n\n    return FormatUtils.toDash(\n      this.streaming_data,\n      this.page[0].video_details?.is_post_live_dvr,\n      options.url_transformer,\n      options.format_filter,\n      this.#cpn,\n      this.#actions.session.player,\n      this.#actions,\n      storyboards,\n      captions,\n      manifest_options\n    );\n  }\n\n  /**\n   * Get a cleaned up representation of the adaptive_formats\n   */\n  getStreamingInfo(url_transformer?: URLTransformer, format_filter?: FormatFilter) {\n    return getStreamingInfo(\n      this.streaming_data,\n      this.page[0].video_details?.is_post_live_dvr,\n      url_transformer,\n      format_filter,\n      this.cpn,\n      this.#actions.session.player,\n      this.#actions,\n      this.#page[0].storyboards ? this.#page[0].storyboards : undefined\n    );\n  }\n\n  /**\n   * Selects the format that best matches the given options.\n   * @param options - Options\n   */\n  chooseFormat(options: FormatOptions): Format {\n    return FormatUtils.chooseFormat(options, this.streaming_data);\n  }\n\n  /**\n   * Downloads the video.\n   * @param options - Download options.\n   */\n  async download(options: DownloadOptions = {}): Promise<ReadableStream<Uint8Array>> {\n    const player_response = this.#page[0];\n\n    if (player_response.video_details && (player_response.video_details.is_live || player_response.video_details.is_post_live_dvr)) {\n      throw new InnertubeError('Downloading is not supported for live and Post-Live-DVR videos, as they are split up into 5 second segments that are individual files, which require using a tool such as ffmpeg to stitch them together, so they cannot be returned in a single stream.');\n    }\n\n    return FormatUtils.download(options, this.#actions, this.playability_status, this.streaming_data, this.#actions.session.player, this.cpn);\n  }\n\n  /**\n   * Retrieves the video's transcript.\n   */\n  async getTranscript(): Promise<TranscriptInfo> {\n    const next_response = this.page[1];\n\n    if (!next_response)\n      throw new InnertubeError('Cannot get transcript from basic video info.');\n\n    if (!next_response.engagement_panels)\n      throw new InnertubeError('Engagement panels not found. Video likely has no transcript.');\n\n    const transcript_panel = next_response.engagement_panels.find((panel) => {\n      return panel.panel_identifier === 'engagement-panel-searchable-transcript';\n    });\n\n    if (!transcript_panel)\n      throw new InnertubeError('Transcript panel not found. Video likely has no transcript.');\n\n    const transcript_continuation = transcript_panel.content?.as(ContinuationItem);\n\n    if (!transcript_continuation)\n      throw new InnertubeError('Transcript continuation not found.');\n\n    const response = await transcript_continuation.endpoint.call(this.actions);\n\n    return new TranscriptInfo(this.actions, response);\n  }\n\n  async addToWatchHistory(client_name?: string, client_version?: string, replacement = 'https://www.'): Promise<Response> {\n    if (!this.#playback_tracking)\n      throw new InnertubeError('Playback tracking not available');\n\n    const url_params = {\n      cpn: this.#cpn,\n      fmt: 251,\n      rtn: 0,\n      rt: 0\n    };\n\n    const url = this.#playback_tracking.videostats_playback_url.replace('https://s.', replacement);\n\n    return await this.#actions.stats(url, {\n      client_name: client_name || Constants.CLIENTS.WEB.NAME,\n      client_version: client_version || Constants.CLIENTS.WEB.VERSION\n    }, url_params);\n  }\n\n  async updateWatchTime(startTime: number, client_name: string = Constants.CLIENTS.WEB.NAME, client_version: string = Constants.CLIENTS.WEB.VERSION, replacement = 'https://www.'): Promise<Response> {\n    if (!this.#playback_tracking)\n      throw new InnertubeError('Playback tracking not available');\n\n    const url_params = {\n      cpn: this.#cpn,\n      st: startTime.toFixed(3),\n      et: startTime.toFixed(3),\n      cmt: startTime.toFixed(3),\n      final: '1'\n    };\n\n    const url = this.#playback_tracking.videostats_watchtime_url.replace('https://s.', replacement);\n\n    return await this.#actions.stats(url, {\n      client_name,\n      client_version\n    }, url_params);\n  }\n\n  get actions(): Actions {\n    return this.#actions;\n  }\n\n  /**\n   * Content Playback Nonce.\n   */\n  get cpn(): string {\n    return this.#cpn;\n  }\n\n  /**\n   * Parsed InnerTube response.\n   */\n  get page(): [IPlayerResponse, INextResponse?] {\n    return this.#page;\n  }\n}", "import { Feed } from './index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport Tab from '../../parser/classes/Tab.js';\n\nimport type { Actions, ApiResponse } from '../index.js';\nimport type { ObservedArray } from '../../parser/helpers.js';\nimport type { IParsedResponse } from '../../parser/index.js';\n\nexport default class TabbedFeed<T extends IParsedResponse> extends Feed<T> {\n  readonly #actions: Actions;\n  #tabs?: ObservedArray<Tab>;\n\n  constructor(actions: Actions, data: ApiResponse | IParsedResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.#actions = actions;\n    this.#tabs = this.page.contents_memo?.getType(Tab);\n  }\n\n  get tabs(): string[] {\n    return this.#tabs?.map((tab) => tab.title.toString()) ?? [];\n  }\n\n  async getTabByName(title: string): Promise<TabbedFeed<T>> {\n    const tab = this.#tabs?.find((tab) => tab.title.toLowerCase() === title.toLowerCase());\n\n    if (!tab)\n      throw new InnertubeError(`Tab \"${title}\" not found`);\n\n    if (tab.selected)\n      return this;\n\n    const response = await tab.endpoint.call(this.#actions);\n\n    return new TabbedFeed<T>(this.#actions, response, false);\n  }\n\n  async getTabByURL(url: string): Promise<TabbedFeed<T>> {\n    const tab = this.#tabs?.find((tab) => tab.endpoint.metadata.url?.split('/').pop() === url);\n\n    if (!tab)\n      throw new InnertubeError(`Tab \"${url}\" not found`);\n\n    if (tab.selected)\n      return this;\n\n    const response = await tab.endpoint.call(this.#actions);\n\n    return new TabbedFeed<T>(this.#actions, response, false);\n  }\n\n  hasTabWithURL(url: string): boolean {\n    return this.#tabs?.some((tab) => tab.endpoint.metadata.url?.split('/').pop() === url) ?? false;\n  }\n\n  get title(): string | undefined {\n    return this.page.contents_memo?.getType(Tab)?.find((tab) => tab.selected)?.title.toString();\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport FilterableFeed from '../../core/mixins/FilterableFeed.js';\nimport { ChannelError, InnertubeError } from '../../utils/Utils.js';\n\nimport TabbedFeed from '../../core/mixins/TabbedFeed.js';\nimport C4TabbedHeader from '../classes/C4TabbedHeader.js';\nimport CarouselHeader from '../classes/CarouselHeader.js';\nimport ChannelAboutFullMetadata from '../classes/ChannelAboutFullMetadata.js';\nimport AboutChannel from '../classes/AboutChannel.js';\nimport ChannelMetadata from '../classes/ChannelMetadata.js';\nimport InteractiveTabbedHeader from '../classes/InteractiveTabbedHeader.js';\nimport MicroformatData from '../classes/MicroformatData.js';\nimport SubscribeButton from '../classes/SubscribeButton.js';\nimport ExpandableTab from '../classes/ExpandableTab.js';\nimport SectionList from '../classes/SectionList.js';\nimport type Tab from '../classes/Tab.js';\nimport PageHeader from '../classes/PageHeader.js';\nimport TwoColumnBrowseResults from '../classes/TwoColumnBrowseResults.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\nimport FeedFilterChipBar from '../classes/FeedFilterChipBar.js';\nimport ChannelSubMenu from '../classes/ChannelSubMenu.js';\nimport SortFilterSubMenu from '../classes/SortFilterSubMenu.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nimport type {\n  AppendContinuationItemsAction,\n  NavigateAction,\n  ReloadContinuationItemsCommand,\n  ShowMiniplayerCommand\n} from '../index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type OpenPopupAction from '../classes/actions/OpenPopupAction.js';\n\nexport default class Channel extends TabbedFeed<IBrowseResponse> {\n  public header?: C4TabbedHeader | CarouselHeader | InteractiveTabbedHeader | PageHeader;\n  public metadata;\n  public subscribe_button?: SubscribeButton;\n  public current_tab?: Tab | ExpandableTab;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    this.header = this.page.header?.item()?.as(C4TabbedHeader, CarouselHeader, InteractiveTabbedHeader, PageHeader);\n\n    const metadata = this.page.metadata?.item().as(ChannelMetadata);\n    const microformat = this.page.microformat?.as(MicroformatData);\n\n    if (this.page.alerts) {\n      const alert = this.page.alerts[0];\n      if (alert?.alert_type === 'ERROR') {\n        throw new ChannelError(alert.text.toString());\n      }\n    }\n\n    if (!metadata && !this.page.contents)\n      throw new InnertubeError('Invalid channel', this);\n\n    this.metadata = { ...metadata, ...(microformat || {}) };\n\n    this.subscribe_button = this.page.header_memo?.getType(SubscribeButton)[0];\n\n    if (this.page.contents)\n      this.current_tab = this.page.contents.item().as(TwoColumnBrowseResults).tabs.find((tab) => tab.selected);\n  }\n\n  /**\n   * Applies given filter to the list. Use {@link filters} to get available filters.\n   * @param filter - The filter to apply\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<FilteredChannelList> {\n    let target_filter: ChipCloudChip | undefined;\n\n    const filter_chipbar = this.memo.getType(FeedFilterChipBar)[0];\n\n    if (typeof filter === 'string') {\n      target_filter = filter_chipbar?.contents.find((chip) => chip.text === filter);\n      if (!target_filter)\n        throw new InnertubeError(`Filter ${filter} not found`, { available_filters: this.filters });\n    } else {\n      target_filter = filter;\n    }\n\n    if (!target_filter.endpoint)\n      throw new InnertubeError('Invalid filter', filter);\n\n    const page = await target_filter.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    if (!page)\n      throw new InnertubeError('No page returned', { filter: target_filter });\n\n    return new FilteredChannelList(this.actions, page, true);\n  }\n\n  /**\n   * Applies given sort filter to the list. Use {@link sort_filters} to get available filters.\n   * @param sort - The sort filter to apply\n   */\n  async applySort(sort: string): Promise<Channel> {\n    const sort_filter_sub_menu = this.memo.getType(SortFilterSubMenu)[0];\n\n    if (!sort_filter_sub_menu || !sort_filter_sub_menu.sub_menu_items)\n      throw new InnertubeError('No sort filter sub menu found');\n\n    const target_sort = sort_filter_sub_menu.sub_menu_items.find((item) => item.title === sort);\n\n    if (!target_sort)\n      throw new InnertubeError(`Sort filter ${sort} not found`, { available_sort_filters: this.sort_filters });\n\n    if (target_sort.selected)\n      return this;\n\n    const page = await target_sort.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    return new Channel(this.actions, page, true);\n  }\n\n  /**\n   * Applies given content type filter to the list. Use {@link content_type_filters} to get available filters.\n   * @param content_type_filter - The content type filter to apply\n   */\n  async applyContentTypeFilter(content_type_filter: string): Promise<Channel> {\n    const sub_menu = this.current_tab?.content?.as(SectionList).sub_menu?.as(ChannelSubMenu);\n\n    if (!sub_menu)\n      throw new InnertubeError('Sub menu not found');\n\n    const item = sub_menu.content_type_sub_menu_items.find((item) => item.title === content_type_filter);\n\n    if (!item)\n      throw new InnertubeError(`Sub menu item ${content_type_filter} not found`, { available_filters: this.content_type_filters });\n\n    if (item.selected)\n      return this;\n\n    const page = await item.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    return new Channel(this.actions, page, true);\n  }\n\n  get filters(): string[] {\n    return this.memo.getType(FeedFilterChipBar)?.[0]?.contents.filterType(ChipCloudChip).map((chip) => chip.text) || [];\n  }\n\n  get sort_filters(): string[] {\n    const sort_filter_sub_menu = this.memo.getType(SortFilterSubMenu)[0];\n    return sort_filter_sub_menu?.sub_menu_items?.map((item) => item.title) || [];\n  }\n\n  get content_type_filters(): string[] {\n    const sub_menu = this.current_tab?.content?.as(SectionList).sub_menu?.as(ChannelSubMenu);\n    return sub_menu?.content_type_sub_menu_items.map((item) => item.title) || [];\n  }\n\n  async getHome(): Promise<Channel> {\n    const tab = await this.getTabByURL('featured');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getVideos(): Promise<Channel> {\n    const tab = await this.getTabByURL('videos');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getShorts(): Promise<Channel> {\n    const tab = await this.getTabByURL('shorts');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getLiveStreams(): Promise<Channel> {\n    const tab = await this.getTabByURL('streams');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getReleases(): Promise<Channel> {\n    const tab = await this.getTabByURL('releases');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getPodcasts(): Promise<Channel> {\n    const tab = await this.getTabByURL('podcasts');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getCourses(): Promise<Channel> {\n    const tab = await this.getTabByURL('courses');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getPlaylists(): Promise<Channel> {\n    const tab = await this.getTabByURL('playlists');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getCommunity(): Promise<Channel> {\n    const tab = await this.getTabByURL('posts');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  /**\n   * Retrieves the about page.\n   * Note that this does not return a new {@link Channel} object.\n   */\n  async getAbout(): Promise<ChannelAboutFullMetadata | AboutChannel> {\n    if (this.hasTabWithURL('about')) {\n      const tab = await this.getTabByURL('about');\n      return tab.memo.getType(ChannelAboutFullMetadata)[0];\n    }\n\n    const tagline = this.header?.is(C4TabbedHeader) && this.header.tagline;\n\n    if (tagline || this.header?.is(PageHeader) && this.header.content?.description) {\n      if (tagline && tagline.more_endpoint instanceof NavigationEndpoint) {\n        const response = await tagline.more_endpoint.call(this.actions);\n\n        const tab = new TabbedFeed<IBrowseResponse>(this.actions, response, false);\n        return tab.memo.getType(ChannelAboutFullMetadata)[0];\n      }\n\n      const endpoint = this.page.header_memo?.getType(ContinuationItem)[0]?.endpoint;\n\n      if (!endpoint) {\n        throw new InnertubeError('Failed to extract continuation to get channel about');\n      }\n\n      const response = await endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n      if (!response.on_response_received_endpoints_memo) {\n        throw new InnertubeError('Unexpected response while fetching channel about', { response });\n      }\n\n      return response.on_response_received_endpoints_memo.getType(AboutChannel)[0];\n    }\n\n    throw new InnertubeError('About not found');\n  }\n\n  /**\n   * Searches within the channel.\n   */\n  async search(query: string): Promise<Channel> {\n    const tab = this.memo.getType(ExpandableTab)?.[0];\n\n    if (!tab)\n      throw new InnertubeError('Search tab not found', this);\n\n    const page = await tab.endpoint.call<IBrowseResponse>(this.actions, { query, parse: true });\n\n    return new Channel(this.actions, page, true);\n  }\n\n  get has_home(): boolean {\n    return this.hasTabWithURL('featured');\n  }\n\n  get has_videos(): boolean {\n    return this.hasTabWithURL('videos');\n  }\n\n  get has_shorts(): boolean {\n    return this.hasTabWithURL('shorts');\n  }\n\n  get has_live_streams(): boolean {\n    return this.hasTabWithURL('streams');\n  }\n\n  get has_releases(): boolean {\n    return this.hasTabWithURL('releases');\n  }\n\n  get has_podcasts(): boolean {\n    return this.hasTabWithURL('podcasts');\n  }\n\n  get has_courses(): boolean {\n    return this.hasTabWithURL('courses');\n  }\n\n  get has_playlists(): boolean {\n    return this.hasTabWithURL('playlists');\n  }\n\n  get has_community(): boolean {\n    return this.hasTabWithURL('posts');\n  }\n\n  get has_about(): boolean {\n    // Game topic channels still have an about tab, user channels have switched to the popup\n    return this.hasTabWithURL('about') ||\n      !!(this.header?.is(C4TabbedHeader) && this.header.tagline?.more_endpoint) ||\n      !!(this.header?.is(PageHeader) && this.header.content?.description?.more_endpoint);\n  }\n\n  get has_search(): boolean {\n    return this.memo.getType(ExpandableTab)?.length > 0;\n  }\n\n  async getContinuation(): Promise<ChannelListContinuation> {\n    const page = await super.getContinuationData();\n    if (!page)\n      throw new InnertubeError('Could not get continuation data');\n    return new ChannelListContinuation(this.actions, page, true);\n  }\n}\n\nexport class ChannelListContinuation extends Feed<IBrowseResponse> {\n  contents?: AppendContinuationItemsAction | OpenPopupAction | NavigateAction | ShowMiniplayerCommand | ReloadContinuationItemsCommand;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.contents =\n      this.page.on_response_received_actions?.[0] ||\n      this.page.on_response_received_endpoints?.[0];\n  }\n\n  async getContinuation(): Promise<ChannelListContinuation> {\n    const page = await super.getContinuationData();\n    if (!page)\n      throw new InnertubeError('Could not get continuation data');\n    return new ChannelListContinuation(this.actions, page, true);\n  }\n}\n\nexport class FilteredChannelList extends FilterableFeed<IBrowseResponse> {\n  applied_filter?: ChipCloudChip;\n  contents?: AppendContinuationItemsAction | OpenPopupAction | NavigateAction | ShowMiniplayerCommand | ReloadContinuationItemsCommand;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    this.applied_filter = this.memo.getType(ChipCloudChip).find((chip) => chip.is_selected);\n\n    // Removes the filter chipbar from the actions list\n    if (\n      this.page.on_response_received_actions &&\n      this.page.on_response_received_actions.length > 1\n    ) {\n      this.page.on_response_received_actions.shift();\n    }\n\n    this.contents = this.page.on_response_received_actions?.[0];\n  }\n\n  /**\n   * Applies given filter to the list.\n   * @param filter - The filter to apply\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<FilteredChannelList> {\n    const feed = await super.getFilteredFeed(filter);\n    return new FilteredChannelList(this.actions, feed.page, true);\n  }\n\n  async getContinuation(): Promise<FilteredChannelList> {\n    const page = await super.getContinuationData();\n\n    if (!page?.on_response_received_actions_memo)\n      throw new InnertubeError('Unexpected continuation data', page);\n\n    // Keep the filters\n    page.on_response_received_actions_memo.set('FeedFilterChipBar', this.memo.getType(FeedFilterChipBar));\n    page.on_response_received_actions_memo.set('ChipCloudChip', this.memo.getType(ChipCloudChip));\n\n    return new FilteredChannelList(this.actions, page, true);\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { observe } from '../helpers.js';\n\nimport CommentsHeader from '../classes/comments/CommentsHeader.js';\nimport CommentSimplebox from '../classes/comments/CommentSimplebox.js';\nimport CommentThread from '../classes/comments/CommentThread.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport { ReloadContinuationItemsCommand } from '../index.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { INextResponse } from '../types/index.js';\n\nexport default class Comments {\n  readonly #page: INextResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: ContinuationItem;\n\n  public header?: CommentsHeader;\n  public contents: ObservedArray<CommentThread>;\n\n  constructor(actions: Actions, data: any, already_parsed = false) {\n    this.#page = already_parsed ? data : Parser.parseResponse<INextResponse>(data);\n    this.#actions = actions;\n\n    const contents = this.#page.on_response_received_endpoints;\n\n    if (!contents)\n      throw new InnertubeError('Comments page did not have any content.');\n\n    const header_node = contents.at(0)?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand);\n    const body_node = contents.at(1)?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand);\n\n    this.header = header_node?.contents?.firstOfType(CommentsHeader);\n\n    const threads = body_node?.contents?.filterType(CommentThread) || [];\n\n    this.contents = observe(threads.map((thread) => {\n      if (thread.comment)\n        thread.comment.setActions(this.#actions);\n      thread.setActions(this.#actions);\n      return thread;\n    }));\n\n    this.#continuation = body_node?.contents?.firstOfType(ContinuationItem);\n  }\n\n  /**\n   * Applies given sort option to the comments.\n   * @param sort - Sort type.\n   */\n  async applySort(sort: 'TOP_COMMENTS' | 'NEWEST_FIRST'): Promise<Comments> {\n    if (!this.header)\n      throw new InnertubeError('Page header is missing. Cannot apply sort option.');\n\n    let button;\n\n    if (sort === 'TOP_COMMENTS') {\n      button = this.header.sort_menu?.sub_menu_items?.at(0);\n    } else if (sort === 'NEWEST_FIRST') {\n      button = this.header.sort_menu?.sub_menu_items?.at(1);\n    }\n\n    if (!button)\n      throw new InnertubeError('Could not find target button.');\n\n    if (button.selected)\n      return this;\n\n    const response = await button.endpoint.call(this.#actions, { parse: true });\n\n    return new Comments(this.#actions, response, true);\n  }\n\n  /**\n   * Creates a top-level comment.\n   * @param text - Comment text.\n   */\n  async createComment(text: string): Promise<ApiResponse> {\n    if (!this.header)\n      throw new InnertubeError('Page header is missing. Cannot create comment.');\n\n    const button = this.header.create_renderer?.as(CommentSimplebox).submit_button;\n\n    if (!button)\n      throw new InnertubeError('Could not find target button. You are probably not logged in.');\n\n    if (!button.endpoint)\n      throw new InnertubeError('Button does not have an endpoint.');\n\n    return await button.endpoint.call(this.#actions, { commentText: text });\n  }\n\n  /**\n   * Retrieves next batch of comments.\n   */\n  async getContinuation(): Promise<Comments> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found');\n\n    const data = await this.#continuation.endpoint.call(this.#actions, { parse: true });\n\n    // Copy the previous page so we can keep the header.\n    const page = Object.assign({}, this.#page);\n\n    if (!page.on_response_received_endpoints || !data.on_response_received_endpoints)\n      throw new InnertubeError('Invalid reponse format, missing on_response_received_endpoints.');\n\n    // Remove previous items and append the continuation.\n    page.on_response_received_endpoints.pop();\n    page.on_response_received_endpoints.push(data.on_response_received_endpoints[0]);\n\n    return new Comments(this.#actions, page, true);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get page(): INextResponse {\n    return this.#page;\n  }\n}", "import { Parser } from '../index.js';\nimport GuideSection from '../classes/GuideSection.js';\nimport GuideSubscriptionsSection from '../classes/GuideSubscriptionsSection.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { IGuideResponse } from '../types/index.js';\nimport type { IRawResponse } from '../index.js';\n\nexport default class Guide {\n  readonly #page: IGuideResponse;\n  public contents?: ObservedArray<GuideSection | GuideSubscriptionsSection>;\n\n  constructor(data: IRawResponse) {\n    this.#page = Parser.parseResponse<IGuideResponse>(data);\n    if (this.#page.items)\n      this.contents = this.#page.items.array().as(GuideSection, GuideSubscriptionsSection);\n  }\n\n  get page(): IGuideResponse {\n    return this.#page;\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport BrowseFeedActions from '../classes/BrowseFeedActions.js';\nimport Button from '../classes/Button.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport Video from '../classes/Video.js';\nimport LockupView from '../classes/LockupView.js';\n\n// TODO: make feed actions usable\nexport default class History extends Feed<IBrowseResponse> {\n  public sections: ItemSection[];\n  public feed_actions: BrowseFeedActions;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.sections = this.memo.getType(ItemSection);\n    this.feed_actions = this.memo.getType(BrowseFeedActions)[0];\n  }\n\n  /**\n   * Retrieves next batch of contents.\n   */\n  async getContinuation(): Promise<History> {\n    const response = await this.getContinuationData();\n    if (!response)\n      throw new Error('No continuation data found');\n    return new History(this.actions, response, true);\n  }\n\n  /**\n   * Removes a video from watch history.\n   */\n  async removeVideo(video_id: string, pages_to_load: number = 1): Promise<boolean> {\n    let pagesToLoad = pages_to_load;\n\n    while (pagesToLoad > 0) {\n      let feedbackToken;\n\n      for (const section of this.sections) {\n        for (const content of section.contents) {\n          if (content.is(Video)) {\n            if (content.video_id === video_id && content.menu) {\n              feedbackToken = content.menu.top_level_buttons[0].as(Button).endpoint.payload.feedbackToken;\n              break;\n            }\n          } else if (content.is(LockupView)) {\n            if (content.content_id === video_id) {\n              const listItems = content.metadata?.menu_button?.on_tap?.payload.panelLoadingStrategy.inlineContent.sheetViewModel.content.listViewModel.listItems;\n              const listItem = listItems.find((video: { listItemViewModel: { title: { content: string; }; }; }) => video.listItemViewModel?.title.content === 'Remove from watch history');\n              feedbackToken = listItem.listItemViewModel.rendererContext.commandContext.onTap.innertubeCommand.feedbackEndpoint.feedbackToken;\n              break;\n            }\n          }\n        }\n\n        if (feedbackToken) {\n          break;\n        }\n      }\n\n      if (feedbackToken) {\n        const body = { feedbackTokens: [ feedbackToken ] };\n        const response = await this.actions.execute('/feedback', body);\n        const data = response.data;\n\n        if (!data.feedbackResponses[0].isProcessed) {\n          throw new Error('Failed to remove video from watch history');\n        }\n\n        return true;\n      }\n\n      if (--pagesToLoad > 0) {\n        try {\n          Object.assign(this, await this.getContinuation());\n        } catch {\n          throw new Error('Unable to find video in watch history');\n        }\n      } else {\n        throw new Error('Unable to find video in watch history');\n      }\n    }\n\n    return false;\n  }\n}\n", "import FilterableFeed from '../../core/mixins/FilterableFeed.js';\nimport FeedTabbedHeader from '../classes/FeedTabbedHeader.js';\nimport RichGrid from '../classes/RichGrid.js';\n\nimport type { IBrowseResponse } from '../types/index.js';\nimport type { AppendContinuationItemsAction, ReloadContinuationItemsCommand } from '../index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type ChipCloudChip from '../classes/ChipCloudChip.js';\n\nexport default class HomeFeed extends FilterableFeed<IBrowseResponse> {\n  public contents?: RichGrid | AppendContinuationItemsAction | ReloadContinuationItemsCommand;\n  public header?: FeedTabbedHeader;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.header = this.memo.getType(FeedTabbedHeader)[0];\n    this.contents = this.memo.getType(RichGrid)[0] || this.page.on_response_received_actions?.[0];\n  }\n\n  /**\n   * Applies given filter to the feed. Use {@link filters} to get available filters.\n   * @param filter - Filter to apply.\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<HomeFeed> {\n    const feed = await super.getFilteredFeed(filter);\n    return new HomeFeed(this.actions, feed.page, true);\n  }\n\n  /**\n   * Retrieves next batch of contents.\n   */\n  async getContinuation(): Promise<HomeFeed> {\n    const feed = await super.getContinuation();\n\n    // Keep the page header\n    feed.page.header = this.page.header;\n\n    if (this.header)\n      feed.page.header_memo?.set(this.header.type, [ this.header ]);\n\n    return new HomeFeed(this.actions, feed.page, true);\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport FilterableFeed from '../../core/mixins/FilterableFeed.js';\nimport HashtagHeader from '../classes/HashtagHeader.js';\nimport RichGrid from '../classes/RichGrid.js';\nimport PageHeader from '../classes/PageHeader.js';\nimport Tab from '../classes/Tab.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../index.js';\nimport type ChipCloudChip from '../classes/ChipCloudChip.js';\n\nexport default class HashtagFeed extends FilterableFeed<IBrowseResponse> {\n  public header?: HashtagHeader | PageHeader;\n  public contents: RichGrid;\n\n  constructor(actions: Actions, response: IBrowseResponse | ApiResponse) {\n    super(actions, response);\n\n    if (!this.page.contents_memo)\n      throw new InnertubeError('Unexpected response', this.page);\n\n    const tab = this.page.contents_memo.getType(Tab)[0];\n\n    if (!tab.content)\n      throw new InnertubeError('Content tab has no content', tab);\n\n    if (this.page.header) {\n      this.header = this.page.header.item().as(HashtagHeader, PageHeader);\n    }\n\n    this.contents = tab.content.as(RichGrid);\n  }\n\n  /**\n   * Applies given filter and returns a new {@link HashtagFeed} object. Use {@link HashtagFeed.filters} to get available filters.\n   * @param filter - Filter to apply.\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<HashtagFeed> {\n    const response = await super.getFilteredFeed(filter);\n    return new HashtagFeed(this.actions, response.page);\n  }\n}", "import Menu from '../classes/menus/Menu.js';\nimport Button from '../classes/Button.js';\nimport MenuServiceItem from '../classes/menus/MenuServiceItem.js';\n\nimport type { Actions } from '../../core/index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { IParsedResponse } from '../types/index.js';\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nexport default class ItemMenu {\n  readonly #page: IParsedResponse;\n  readonly #actions: Actions;\n  readonly #items: ObservedArray<YTNode>;\n\n  constructor(data: IParsedResponse, actions: Actions) {\n    this.#page = data;\n    this.#actions = actions;\n\n    const menu = data?.live_chat_item_context_menu_supported_renderers;\n\n    if (!menu || !menu.is(Menu))\n      throw new InnertubeError('Response did not have a \"live_chat_item_context_menu_supported_renderers\" property. The call may have failed.');\n\n    this.#items = menu.as(Menu).items;\n  }\n\n  async selectItem(icon_type: string): Promise<IParsedResponse>\n  async selectItem(button: Button): Promise<IParsedResponse>\n  async selectItem(item: string | Button): Promise<IParsedResponse> {\n    let endpoint: NavigationEndpoint | undefined;\n\n    if (item instanceof Button) {\n      if (!item.endpoint)\n        throw new InnertubeError('Item does not have an endpoint.');\n\n      endpoint = item.endpoint;\n    } else {\n      const button = this.#items.find((button) => {\n        if (!button.is(MenuServiceItem)) {\n          return false;\n        }\n        const menuServiceItem = button.as(MenuServiceItem);\n        return menuServiceItem.icon_type === item;\n      });\n\n      if (!button || !button.is(MenuServiceItem))\n        throw new InnertubeError(`Button \"${item}\" not found.`);\n\n      endpoint = button.endpoint;\n    }\n\n    if (!endpoint)\n      throw new InnertubeError('Target button does not have an endpoint.');\n\n    return await endpoint.call(this.#actions, { parse: true });\n  }\n\n  items(): ObservedArray<YTNode> {\n    return this.#items;\n  }\n\n  page(): IParsedResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\n\nimport Feed from '../../core/mixins/Feed.js';\nimport Message from '../classes/Message.js';\nimport PlaylistCustomThumbnail from '../classes/PlaylistCustomThumbnail.js';\nimport PlaylistHeader from '../classes/PlaylistHeader.js';\nimport PlaylistMetadata from '../classes/PlaylistMetadata.js';\nimport PlaylistSidebarPrimaryInfo from '../classes/PlaylistSidebarPrimaryInfo.js';\nimport PlaylistSidebarSecondaryInfo from '../classes/PlaylistSidebarSecondaryInfo.js';\nimport PlaylistVideoList from '../classes/PlaylistVideoList.js';\nimport PlaylistVideoThumbnail from '../classes/PlaylistVideoThumbnail.js';\nimport ReelItem from '../classes/ReelItem.js';\nimport ShortsLockupView from '../classes/ShortsLockupView.js';\nimport VideoOwner from '../classes/VideoOwner.js';\nimport Alert from '../classes/Alert.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport PlaylistVideo from '../classes/PlaylistVideo.js';\nimport SectionList from '../classes/SectionList.js';\nimport { observe, type ObservedArray, type YTNode } from '../helpers.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type Thumbnail from '../classes/misc/Thumbnail.js';\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nexport default class Playlist extends Feed<IBrowseResponse> {\n  public info;\n  public menu: YTNode;\n  public endpoint?: NavigationEndpoint;\n  public messages: ObservedArray<Message>;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    const header = this.memo.getType(PlaylistHeader)[0];\n    const primary_info = this.memo.getType(PlaylistSidebarPrimaryInfo)[0];\n    const secondary_info = this.memo.getType(PlaylistSidebarSecondaryInfo)[0];\n    const video_list = this.memo.getType(PlaylistVideoList)[0];\n    const alert = this.page.alerts?.firstOfType(Alert);\n\n    if (alert && alert.alert_type === 'ERROR')\n      throw new InnertubeError(alert.text.toString(), alert);\n\n    if (!primary_info && !secondary_info && Object.keys(this.page).length === 0)\n      throw new InnertubeError('Got empty continuation response. This is likely the end of the playlist.');\n\n    this.info = {\n      ...this.page.metadata?.item().as(PlaylistMetadata),\n      ...{\n        subtitle: header ? header.subtitle : null,\n        author: secondary_info?.owner?.as(VideoOwner).author ?? header?.author,\n        thumbnails: primary_info?.thumbnail_renderer?.as(PlaylistVideoThumbnail, PlaylistCustomThumbnail).thumbnail as Thumbnail[],\n        total_items: this.#getStat(0, primary_info),\n        views: this.#getStat(1, primary_info),\n        last_updated: this.#getStat(2, primary_info),\n        can_share: header?.can_share,\n        can_delete: header?.can_delete,\n        can_reorder: video_list?.can_reorder,\n        is_editable: video_list?.is_editable,\n        privacy: header?.privacy\n      }\n    };\n\n    this.menu = primary_info?.menu;\n    this.endpoint = primary_info?.endpoint;\n    this.messages = this.memo.getType(Message);\n  }\n\n  get items(): ObservedArray<PlaylistVideo | ReelItem | ShortsLockupView> {\n    return observe(this.videos.as(PlaylistVideo, ReelItem, ShortsLockupView).filter((video) => (video as PlaylistVideo).style !== 'PLAYLIST_VIDEO_RENDERER_STYLE_RECOMMENDED_VIDEO'));\n  }\n\n  get has_continuation() {\n    const section_list = this.memo.getType(SectionList)[0];\n\n    if (!section_list)\n      return super.has_continuation;\n\n    return !!this.memo.getType(ContinuationItem).find((node) => !section_list.contents.includes(node));\n  }\n\n  async getContinuationData(): Promise<IBrowseResponse | undefined> {\n    const section_list = this.memo.getType(SectionList)[0];\n\n    /**\n     * No section list means there can't be additional continuation nodes here,\n     * so no need to check.\n     */\n    if (!section_list)\n      return await super.getContinuationData();\n\n    const playlist_contents_continuation = this.memo.getType(ContinuationItem)\n      .find((node) => !section_list.contents.includes(node));\n\n    if (!playlist_contents_continuation)\n      throw new InnertubeError('There are no continuations.');\n\n    return await playlist_contents_continuation.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n  }\n\n  async getContinuation(): Promise<Playlist> {\n    const page = await this.getContinuationData();\n    if (!page)\n      throw new InnertubeError('Could not get continuation data');\n    return new Playlist(this.actions, page, true);\n  }\n\n  #getStat(index: number, primary_info?: PlaylistSidebarPrimaryInfo): string {\n    if (!primary_info || !primary_info.stats) return 'N/A';\n    return primary_info.stats[index]?.toString() || 'N/A';\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport Feed from '../../core/mixins/Feed.js';\nimport History from './History.js';\nimport Playlist from './Playlist.js';\nimport Menu from '../classes/menus/Menu.js';\nimport Shelf from '../classes/Shelf.js';\nimport Button from '../classes/Button.js';\nimport PageHeader from '../classes/PageHeader.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Library extends Feed<IBrowseResponse> {\n  public header: PageHeader | null;\n  public sections;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse) {\n    super(actions, data);\n\n    if (!this.page.contents_memo)\n      throw new InnertubeError('Page contents not found');\n\n    this.header = this.memo.getType(PageHeader)[0];\n\n    const shelves = this.page.contents_memo.getType(Shelf);\n\n    this.sections = shelves.map((shelf: Shelf) => ({\n      type: shelf.icon_type,\n      title: shelf.title,\n      contents: shelf.content?.key('items').array() || [],\n      getAll: () => this.#getAll(shelf)\n    }));\n  }\n\n  async #getAll(shelf: Shelf): Promise<Playlist | History | Feed<IBrowseResponse>> {\n    if (!shelf.menu?.as(Menu).top_level_buttons)\n\n      throw new InnertubeError(`The ${shelf.title.text} shelf doesn't have more items`);\n\n    const button = shelf.menu.as(Menu).top_level_buttons.firstOfType(Button);\n\n    if (!button)\n      throw new InnertubeError('Did not find target button.');\n\n    const page = await button.as(Button).endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    switch (shelf.icon_type) {\n      case 'LIKE':\n      case 'WATCH_LATER':\n        return new Playlist(this.actions, page, true);\n      case 'WATCH_HISTORY':\n        return new History(this.actions, page, true);\n      case 'CONTENT_CUT':\n        return new Feed(this.actions, page, true);\n      default:\n        throw new InnertubeError('Target shelf not implemented.');\n    }\n  }\n\n  get history() {\n    return this.sections.find((section) => section.type === 'WATCH_HISTORY');\n  }\n\n  get watch_later() {\n    return this.sections.find((section) => section.type === 'WATCH_LATER');\n  }\n\n  get liked_videos() {\n    return this.sections.find((section) => section.type === 'LIKE');\n  }\n\n  get playlists_section() {\n    return this.sections.find((section) => section.type === 'PLAYLISTS');\n  }\n\n  get clips() {\n    return this.sections.find((section) => section.type === 'CONTENT_CUT');\n  }\n}", "import type { YTNode } from '../helpers.js';\n\n/**\n * Flattens the given queue.\n * @param queue - The queue to flatten.\n */\nfunction flattenQueue(queue: YTNode[][]) {\n  const nodes: YTNode[] = [];\n\n  for (const group of queue) {\n    if (Array.isArray(group)) {\n      for (const node of group) {\n        nodes.push(node);\n      }\n    } else {\n      nodes.push(group);\n    }\n  }\n\n  return nodes;\n}\n\nclass DelayQueue {\n  front: number[];\n  back: number[];\n\n  constructor() {\n    this.front = [];\n    this.back = [];\n  }\n\n  public isEmpty(): boolean {\n    return !this.front.length && !this.back.length;\n  }\n\n  public clear(): void {\n    this.front = [];\n    this.back = [];\n  }\n\n  public getValues(): number[] {\n    return this.front.concat(this.back.reverse());\n  }\n}\n\nexport default class SmoothedQueue {\n  #last_update_time: number | null;\n  #estimated_update_interval: number | null;\n  #callback: ((actions: YTNode[]) => void) | null;\n  #action_queue: YTNode[][];\n  #next_update_id: any;\n  \n  readonly #poll_response_delay_queue: DelayQueue;\n\n  constructor() {\n    this.#last_update_time = null;\n    this.#estimated_update_interval = null;\n    this.#callback = null;\n    this.#action_queue = [];\n    this.#next_update_id = null;\n    this.#poll_response_delay_queue = new DelayQueue();\n  }\n\n  public enqueueActionGroup(group: YTNode[]): void {\n    if (this.#last_update_time !== null) {\n      const delay = Date.now() - this.#last_update_time;\n\n      this.#poll_response_delay_queue.back.push(delay);\n\n      if (5 < (this.#poll_response_delay_queue.front.length + this.#poll_response_delay_queue.back.length)) {\n        if (!this.#poll_response_delay_queue.front.length) {\n          this.#poll_response_delay_queue.front = this.#poll_response_delay_queue.back;\n          this.#poll_response_delay_queue.front.reverse();\n          this.#poll_response_delay_queue.back = [];\n        }\n\n        this.#poll_response_delay_queue.front.pop();\n      }\n\n      this.#estimated_update_interval = Math.max(...this.#poll_response_delay_queue.getValues());\n    }\n\n    this.#last_update_time = Date.now();\n\n    this.#action_queue.push(group);\n\n    if (this.#next_update_id === null) {\n      this.#next_update_id = setTimeout(this.emitSmoothedActions.bind(this));\n    }\n  }\n\n  public emitSmoothedActions(): void {\n    this.#next_update_id = null;\n\n    if (this.#action_queue.length) {\n      let delay = 1E4;\n\n      if (this.#estimated_update_interval !== null && this.#last_update_time !== null) {\n        delay = this.#estimated_update_interval - Date.now() + this.#last_update_time;\n      }\n\n      delay = this.#action_queue.length < delay / 80 ? 1 : Math.ceil(this.#action_queue.length / (delay / 80));\n\n      const actions = flattenQueue(this.#action_queue.splice(0, delay));\n\n      if (this.#callback) {\n        this.#callback(actions);\n      }\n\n      if (this.#action_queue !== null) {\n        if (delay == 1) {\n          delay = this.#estimated_update_interval as number / this.#action_queue.length;\n          delay *= Math.random() + 0.5;\n          delay = Math.min(1E3, delay);\n          delay = Math.max(80, delay);\n        } else {\n          delay = 80;\n        }\n\n        this.#next_update_id = setTimeout(this.emitSmoothedActions.bind(this), delay);\n      }\n    }\n  }\n\n  public clear() {\n    if (this.#next_update_id !== null) {\n      clearTimeout(this.#next_update_id);\n      this.#next_update_id = null;\n    }\n    this.#action_queue = [];\n  }\n\n  set callback(cb: ((actions: YTNode[]) => void) | null) {\n    this.#callback = cb;\n  }\n\n  get callback(): ((actions: YTNode[]) => void) | null {\n    return this.#callback;\n  }\n\n  get action_queue(): YTNode[][] {\n    return this.#action_queue;\n  }\n\n  get estimated_update_interval(): number | null {\n    return this.#estimated_update_interval;\n  }\n\n  get last_update_time(): number | null {\n    return this.#last_update_time;\n  }\n\n  get next_update_id(): any {\n    return this.#next_update_id;\n  }\n\n  get poll_response_delay_queue(): DelayQueue {\n    return this.#poll_response_delay_queue;\n  }\n}", "// noinspection ES6MissingAwait\n\nimport { EventEmitter } from '../../utils/index.js';\nimport { InnertubeError, Platform, u8ToBase64 } from '../../utils/Utils.js';\nimport { LiveChatContinuation, Parser } from '../index.js';\nimport SmoothedQueue from './SmoothedQueue.js';\n\nimport RunAttestationCommand from '../classes/commands/RunAttestationCommand.js';\nimport AddChatItemAction from '../classes/livechat/AddChatItemAction.js';\nimport UpdateDateTextAction from '../classes/livechat/UpdateDateTextAction.js';\nimport UpdateDescriptionAction from '../classes/livechat/UpdateDescriptionAction.js';\nimport UpdateTitleAction from '../classes/livechat/UpdateTitleAction.js';\nimport UpdateToggleButtonTextAction from '../classes/livechat/UpdateToggleButtonTextAction.js';\nimport UpdateViewershipAction from '../classes/livechat/UpdateViewershipAction.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport ItemMenu from './ItemMenu.js';\n\nimport { LiveMessageParams } from '../../../protos/generated/misc/params.js';\n\nimport type { ObservedArray, YTNode } from '../helpers.js';\n\nimport type VideoInfo from './VideoInfo.js';\nimport type AddBannerToLiveChatCommand from '../classes/livechat/AddBannerToLiveChatCommand.js';\nimport type RemoveBannerForLiveChatCommand from '../classes/livechat/RemoveBannerForLiveChatCommand.js';\nimport type ShowLiveChatTooltipCommand from '../classes/livechat/ShowLiveChatTooltipCommand.js';\nimport type LiveChatAutoModMessage from '../classes/livechat/items/LiveChatAutoModMessage.js';\nimport type LiveChatMembershipItem from '../classes/livechat/items/LiveChatMembershipItem.js';\nimport type LiveChatPaidMessage from '../classes/livechat/items/LiveChatPaidMessage.js';\nimport type LiveChatPaidSticker from '../classes/livechat/items/LiveChatPaidSticker.js';\nimport type LiveChatTextMessage from '../classes/livechat/items/LiveChatTextMessage.js';\nimport type LiveChatViewerEngagementMessage from '../classes/livechat/items/LiveChatViewerEngagementMessage.js';\nimport type AddLiveChatTickerItemAction from '../classes/livechat/AddLiveChatTickerItemAction.js';\nimport type MarkChatItemAsDeletedAction from '../classes/livechat/MarkChatItemAsDeletedAction.js';\nimport type MarkChatItemsByAuthorAsDeletedAction from '../classes/livechat/MarkChatItemsByAuthorAsDeletedAction.js';\nimport type ReplaceChatItemAction from '../classes/livechat/ReplaceChatItemAction.js';\nimport type ReplayChatItemAction from '../classes/livechat/ReplayChatItemAction.js';\nimport type ShowLiveChatActionPanelAction from '../classes/livechat/ShowLiveChatActionPanelAction.js';\nimport type Button from '../classes/Button.js';\n\nimport type { Actions } from '../../core/index.js';\nimport type { IParsedResponse, IUpdatedMetadataResponse } from '../types/index.js';\n\nexport type ChatAction =\n  AddChatItemAction | AddBannerToLiveChatCommand | AddLiveChatTickerItemAction |\n  MarkChatItemAsDeletedAction | MarkChatItemsByAuthorAsDeletedAction | RemoveBannerForLiveChatCommand |\n  ReplaceChatItemAction | ReplayChatItemAction | ShowLiveChatActionPanelAction | ShowLiveChatTooltipCommand;\n\nexport type ChatItemWithMenu = LiveChatAutoModMessage | LiveChatMembershipItem | LiveChatPaidMessage | LiveChatPaidSticker | LiveChatTextMessage | LiveChatViewerEngagementMessage;\n\nexport type LiveMetadata = {\n  title?: UpdateTitleAction;\n  description?: UpdateDescriptionAction;\n  views?: UpdateViewershipAction;\n  likes?: UpdateToggleButtonTextAction;\n  date?: UpdateDateTextAction;\n}\n\nexport default class LiveChat extends EventEmitter {\n  readonly #actions: Actions;\n  readonly #video_id: string;\n  readonly #channel_id: string;\n  \n  #continuation?: string;\n  #mcontinuation?: string;\n  #retry_count = 0;\n  \n  public smoothed_queue: SmoothedQueue;\n  public initial_info?: LiveChatContinuation;\n  public metadata?: LiveMetadata;\n  public running = false;\n  public is_replay = false;\n\n  constructor(video_info: VideoInfo) {\n    super();\n\n    this.#video_id = video_info.basic_info.id as string;\n    this.#channel_id = video_info.basic_info.channel_id as string;\n    this.#actions = video_info.actions;\n    this.#continuation = video_info.livechat?.continuation;\n    this.is_replay = video_info.livechat?.is_replay || false;\n    this.smoothed_queue = new SmoothedQueue();\n\n    this.smoothed_queue.callback = async (actions: YTNode[]) => {\n      if (!actions.length) {\n        // Wait 2 seconds before requesting an incremental continuation if the action group is empty.\n        await this.#wait(2000);\n      } else if (actions.length < 10) {\n        // If there are less than 10 actions, wait until all of them are emitted.\n        await this.#emitSmoothedActions(actions);\n      } else if (this.is_replay) {\n        /**\n         * NOTE: Live chat replays require data from the video player for actions to be emitted timely\n         * and as we don't have that, this ends up being quite innacurate.\n         */\n        this.#emitSmoothedActions(actions);\n        await this.#wait(2000);\n      } else {\n        // There are more than 10 actions, emit them asynchronously so we can request the next incremental continuation.\n        this.#emitSmoothedActions(actions);\n      }\n\n      if (this.running) {\n        this.#pollLivechat();\n      }\n    };\n  }\n\n  on(type: 'start', listener: (initial_data: LiveChatContinuation) => void): void;\n  on(type: 'chat-update', listener: (action: ChatAction) => void): void;\n  on(type: 'metadata-update', listener: (metadata: LiveMetadata) => void): void;\n  on(type: 'error', listener: (err: Error) => void): void;\n  on(type: 'end', listener: () => void): void;\n  on(type: string, listener: (...args: any[]) => void): void {\n    super.on(type, listener);\n  }\n\n  once(type: 'start', listener: (initial_data: LiveChatContinuation) => void): void;\n  once(type: 'chat-update', listener: (action: ChatAction) => void): void;\n  once(type: 'metadata-update', listener: (metadata: LiveMetadata) => void): void;\n  once(type: 'error', listener: (err: Error) => void): void;\n  once(type: 'end', listener: () => void): void;\n  once(type: string, listener: (...args: any[]) => void): void {\n    super.once(type, listener);\n  }\n\n  start() {\n    if (!this.running) {\n      this.running = true;\n      this.#pollLivechat();\n      this.#pollMetadata();\n    }\n  }\n\n  stop() {\n    this.smoothed_queue.clear();\n    this.running = false;\n  }\n\n  #pollLivechat() {\n    (async () => {\n      try {\n        const response = await this.#actions.execute(\n          this.is_replay ? 'live_chat/get_live_chat_replay' : 'live_chat/get_live_chat',\n          { continuation: this.#continuation, parse: true }\n        );\n\n        const contents = response.continuation_contents;\n\n        if (!contents) {\n          this.emit('error', new InnertubeError('Unexpected live chat incremental continuation response', response));\n          this.emit('end');\n          this.stop();\n        }\n\n        if (!(contents instanceof LiveChatContinuation)) {\n          this.stop();\n          this.emit('end');\n          return;\n        }\n\n        this.#continuation = contents.continuation.token;\n\n        // Header only exists in the first request\n        if (contents.header) {\n          this.initial_info = contents;\n          this.emit('start', contents);\n          if (this.running)\n            this.#pollLivechat();\n        } else {\n          this.smoothed_queue.enqueueActionGroup(contents.actions);\n        }\n\n        this.#retry_count = 0;\n      } catch (err) {\n        this.emit('error', err);\n\n        if (this.#retry_count++ < 10) {\n          await this.#wait(2000);\n          this.#pollLivechat();\n        } else {\n          this.emit('error', new InnertubeError('Reached retry limit for incremental continuation requests', err));\n          this.emit('end');\n          this.stop();\n        }\n      }\n    })();\n  }\n\n  /**\n   * Ensures actions are emitted at the right speed.\n   * This and {@link SmoothedQueue} were based off of YouTube's own implementation.\n   */\n  async #emitSmoothedActions(action_queue: YTNode[]) {\n    const base = 1E4;\n\n    let delay = action_queue.length < base / 80 ? 1 : Math.ceil(action_queue.length / (base / 80));\n\n    const emit_delay_ms =\n      delay == 1 ? (\n        delay = base / action_queue.length,\n        delay *= Math.random() + 0.5,\n        delay = Math.min(1E3, delay),\n        delay = Math.max(80, delay)\n      ) : delay = 80;\n\n    for (const action of action_queue) {\n      await this.#wait(emit_delay_ms);\n      this.emit('chat-update', action);\n    }\n  }\n\n  #pollMetadata() {\n    (async () => {\n      try {\n        const payload: {\n          videoId?: string;\n          continuation?: string;\n        } = { videoId: this.#video_id };\n\n        if (this.#mcontinuation) {\n          payload.continuation = this.#mcontinuation;\n        }\n\n        const response = await this.#actions.execute('/updated_metadata', payload);\n        const data = Parser.parseResponse<IUpdatedMetadataResponse>(response.data);\n\n        this.#mcontinuation = data.continuation?.token;\n\n        this.metadata = {\n          title: data.actions?.array().firstOfType(UpdateTitleAction) || this.metadata?.title,\n          description: data.actions?.array().firstOfType(UpdateDescriptionAction) || this.metadata?.description,\n          views: data.actions?.array().firstOfType(UpdateViewershipAction) || this.metadata?.views,\n          likes: data.actions?.array().firstOfType(UpdateToggleButtonTextAction) || this.metadata?.likes,\n          date: data.actions?.array().firstOfType(UpdateDateTextAction) || this.metadata?.date\n        };\n\n        this.emit('metadata-update', this.metadata);\n\n        await this.#wait(5000);\n\n        if (this.running)\n          this.#pollMetadata();\n      } catch {\n        await this.#wait(2000);\n        if (this.running)\n          this.#pollMetadata();\n      }\n    })();\n  }\n\n  /**\n   * Sends a message.\n   * @param text - Text to send.\n   */\n  async sendMessage(text: string): Promise<ObservedArray<AddChatItemAction | RunAttestationCommand>> {\n    const writer = LiveMessageParams.encode({\n      params: {\n        ids: {\n          videoId: this.#video_id,\n          channelId: this.#channel_id\n        }\n      },\n      number0: 1,\n      number1: 4\n    });\n\n    const params = btoa(encodeURIComponent(u8ToBase64(writer.finish())));\n\n    const response = await this.#actions.execute('/live_chat/send_message', {\n      richMessage: { textSegments: [ { text } ] },\n      clientMessageId: Platform.shim.uuidv4(),\n      client: 'WEB',\n      parse: true,\n      params\n    });\n\n    if (!response.actions)\n      throw new InnertubeError('Unexpected response from send_message', response);\n\n    return response.actions.array().as(AddChatItemAction, RunAttestationCommand);\n  }\n\n  /**\n   * Applies given filter to the live chat.\n   * @param filter - Filter to apply.\n   */\n  applyFilter(filter: 'TOP_CHAT' | 'LIVE_CHAT'): void {\n    if (!this.initial_info)\n      throw new InnertubeError('Cannot apply filter before initial info is retrieved.');\n\n    const menu_items = this.initial_info?.header?.view_selector?.sub_menu_items;\n\n    if (filter === 'TOP_CHAT') {\n      if (menu_items?.at(0)?.selected) return;\n      this.#continuation = menu_items?.at(0)?.continuation;\n    } else {\n      if (menu_items?.at(1)?.selected) return;\n      this.#continuation = menu_items?.at(1)?.continuation;\n    }\n  }\n\n  /**\n   * Retrieves given chat item's menu.\n   */\n  async getItemMenu(item: ChatItemWithMenu): Promise<ItemMenu> {\n    if (!item.hasKey('menu_endpoint') || !item.key('menu_endpoint').isInstanceof(NavigationEndpoint))\n      throw new InnertubeError('This item does not have a menu.', item);\n\n    const response = await item.key('menu_endpoint').instanceof(NavigationEndpoint).call(this.#actions, { parse: true });\n\n    if (!response)\n      throw new InnertubeError('Could not retrieve item menu.', item);\n\n    return new ItemMenu(response, this.#actions);\n  }\n\n  /**\n   * Equivalent to \"clicking\" a button.\n   */\n  async selectButton(button: Button): Promise<IParsedResponse> {\n    return await button.endpoint.call(this.#actions, { parse: true });\n  }\n\n  async #wait(ms: number) {\n    return new Promise<void>((resolve) => setTimeout(() => resolve(), ms));\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport SimpleMenuHeader from '../classes/menus/SimpleMenuHeader.js';\nimport Notification from '../classes/Notification.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IGetNotificationsMenuResponse } from '../types/index.js';\n\nexport default class NotificationsMenu {\n  readonly #page: IGetNotificationsMenuResponse;\n  readonly #actions: Actions;\n\n  public header: SimpleMenuHeader;\n  public contents: Notification[];\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IGetNotificationsMenuResponse>(response.data);\n\n    if (!this.#page.actions_memo)\n      throw new InnertubeError('Page actions not found');\n\n    this.header = this.#page.actions_memo.getType(SimpleMenuHeader)[0];\n    this.contents = this.#page.actions_memo.getType(Notification);\n  }\n\n  async getContinuation(): Promise<NotificationsMenu> {\n    const continuation = this.#page.actions_memo?.getType(ContinuationItem)[0];\n\n    if (!continuation)\n      throw new InnertubeError('Continuation not found');\n\n    const response = await continuation.endpoint.call(this.#actions, { parse: false });\n\n    return new NotificationsMenu(this.#actions, response);\n  }\n\n  get page(): IGetNotificationsMenuResponse {\n    return this.#page;\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport HorizontalCardList from '../classes/HorizontalCardList.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport SearchHeader from '../classes/SearchHeader.js';\nimport SearchRefinementCard from '../classes/SearchRefinementCard.js';\nimport SearchSubMenu from '../classes/SearchSubMenu.js';\nimport SectionList from '../classes/SectionList.js';\nimport UniversalWatchCard from '../classes/UniversalWatchCard.js';\n\nimport { observe } from '../helpers.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { ISearchResponse } from '../types/index.js';\nimport { ReloadContinuationItemsCommand } from '../index.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\n\nexport default class Search extends Feed<ISearchResponse> {\n  public header?: SearchHeader;\n  public results: ObservedArray<YTNode>;\n  public refinements: string[];\n  public estimated_results: number;\n  public sub_menu?: SearchSubMenu;\n  public watch_card?: UniversalWatchCard;\n  public refinement_cards?: HorizontalCardList | null;\n\n  constructor(actions: Actions, data: ApiResponse | ISearchResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    const contents =\n      this.page.contents_memo?.getType(SectionList)[0].contents ||\n      this.page.on_response_received_commands?.[0].as(AppendContinuationItemsAction, ReloadContinuationItemsCommand).contents;\n\n    if (!contents)\n      throw new InnertubeError('No contents found in search response');\n\n    if (this.page.header)\n      this.header = this.page.header.item().as(SearchHeader);\n\n    this.results = observe(contents.filterType(ItemSection).flatMap((section) => section.contents));\n\n    this.refinements = this.page.refinements || [];\n    this.estimated_results = this.page.estimated_results || 0;\n\n    if (this.page.contents_memo) {\n      this.sub_menu = this.page.contents_memo.getType(SearchSubMenu)[0];\n      this.watch_card = this.page.contents_memo.getType(UniversalWatchCard)[0];\n    }\n\n    this.refinement_cards = this.results?.firstOfType(HorizontalCardList);\n  }\n\n  /**\n   * Applies given refinement card and returns a new {@link Search} object. Use {@link refinement_card_queries} to get a list of available refinement cards.\n   */\n  async selectRefinementCard(card: SearchRefinementCard | string): Promise<Search> {\n    let target_card: SearchRefinementCard | undefined;\n\n    if (typeof card === 'string') {\n      if (!this.refinement_cards) throw new InnertubeError('No refinement cards found.');\n      target_card = this.refinement_cards?.cards.find((refinement_card): refinement_card is SearchRefinementCard => {\n        return refinement_card.is(SearchRefinementCard) && refinement_card.query === card;\n      });\n      if (!target_card)\n        throw new InnertubeError(`Refinement card \"${card}\" not found`, { available_cards: this.refinement_card_queries });\n    } else if (card.type === 'SearchRefinementCard') {\n      target_card = card;\n    } else {\n      throw new InnertubeError('Invalid refinement card!');\n    }\n\n    const page = await target_card.endpoint.call<ISearchResponse>(this.actions, { parse: true });\n\n    return new Search(this.actions, page, true);\n  }\n\n  /**\n   * Returns a list of refinement card queries.\n   */\n  get refinement_card_queries(): string[] {\n    return this.refinement_cards?.cards.as(SearchRefinementCard).map((card) => card.query) || [];\n  }\n\n  /**\n   * Retrieves next batch of search results.\n   */\n  async getContinuation(): Promise<Search> {\n    const response = await this.getContinuationData();\n    if (!response)\n      throw new InnertubeError('Could not get continuation data');\n    return new Search(this.actions, response, true);\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport CompactLink from '../classes/CompactLink.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport PageIntroduction from '../classes/PageIntroduction.js';\nimport SectionList from '../classes/SectionList.js';\nimport SettingsOptions from '../classes/SettingsOptions.js';\nimport SettingsSidebar from '../classes/SettingsSidebar.js';\nimport SettingsSwitch from '../classes/SettingsSwitch.js';\nimport CommentsHeader from '../classes/comments/CommentsHeader.js';\nimport ItemSectionHeader from '../classes/ItemSectionHeader.js';\nimport ItemSectionTabbedHeader from '../classes/ItemSectionTabbedHeader.js';\nimport TwoColumnBrowseResults from '../classes/TwoColumnBrowseResults.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Settings {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n\n  public sidebar?: SettingsSidebar;\n  public introduction?: PageIntroduction;\n  public sections;\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    this.sidebar = this.#page.sidebar?.as(SettingsSidebar);\n\n    if (!this.#page.contents)\n      throw new InnertubeError('Page contents not found');\n\n    const tab = this.#page.contents.item().as(TwoColumnBrowseResults).tabs.find((tab) => tab.selected);\n\n    if (!tab)\n      throw new InnertubeError('Target tab not found');\n\n    const contents = tab.content?.as(SectionList).contents.as(ItemSection);\n\n    this.introduction = contents?.shift()?.contents?.firstOfType(PageIntroduction);\n\n    this.sections = contents?.map((el: ItemSection) => ({\n      title: el.header?.is(CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader) ? el.header.title.toString() : null,\n      contents: el.contents\n    }));\n  }\n\n  /**\n   * Selects an item from the sidebar menu. Use {@link sidebar_items} to see available items.\n   */\n  async selectSidebarItem(target_item: string | CompactLink): Promise<Settings> {\n    if (!this.sidebar)\n      throw new InnertubeError('Sidebar not available');\n\n    let item: CompactLink | undefined;\n\n    if (typeof target_item === 'string') {\n      item = this.sidebar.items.find((link) => link.title === target_item);\n      if (!item)\n        throw new InnertubeError(`Item \"${target_item}\" not found`, { available_items: this.sidebar_items });\n    } else if (target_item?.is(CompactLink)) {\n      item = target_item;\n    } else {\n      throw new InnertubeError('Invalid item', { target_item });\n    }\n\n    const response = await item.endpoint.call(this.#actions, { parse: false });\n\n    return new Settings(this.#actions, response);\n  }\n\n  /**\n   * Finds a setting by name and returns it. Use {@link setting_options} to see available options.\n   */\n  getSettingOption(name: string): SettingsSwitch {\n    if (!this.sections)\n      throw new InnertubeError('Sections not available');\n\n    for (const section of this.sections) {\n      if (!section.contents) continue;\n      for (const el of section.contents) {\n        const options = el.as(SettingsOptions).options;\n        if (options) {\n          for (const option of options) {\n            if (\n              option.is(SettingsSwitch) &&\n              option.title?.toString() === name\n            )\n              return option;\n          }\n        }\n      }\n    }\n\n    throw new InnertubeError(`Option \"${name}\" not found`, { available_options: this.setting_options });\n  }\n\n  /**\n   * Returns settings available in the page.\n   */\n  get setting_options(): string[] {\n    if (!this.sections)\n      throw new InnertubeError('Sections not available');\n\n    let options: any[] = [];\n\n    for (const section of this.sections) {\n      if (!section.contents) continue;\n      for (const el of section.contents) {\n        if (el.as(SettingsOptions).options)\n          options = options.concat(el.as(SettingsOptions).options);\n      }\n    }\n\n    return options.map((opt) => opt.title?.toString()).filter((el) => el);\n  }\n\n  /**\n   * Returns options available in the sidebar.\n   */\n  get sidebar_items(): string[] {\n    if (!this.sidebar)\n      throw new InnertubeError('Sidebar not available');\n\n    return this.sidebar.items.map((item) => item.title.toString());\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport { MediaInfo } from '../../core/mixins/index.js';\n\nimport ChipCloud from '../classes/ChipCloud.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\nimport CommentsEntryPointHeader from '../classes/comments/CommentsEntryPointHeader.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport LiveChat from '../classes/LiveChat.js';\nimport MerchandiseShelf from '../classes/MerchandiseShelf.js';\nimport PlayerMicroformat from '../classes/PlayerMicroformat.js';\nimport PlayerOverlay from '../classes/PlayerOverlay.js';\nimport RelatedChipCloud from '../classes/RelatedChipCloud.js';\nimport RichMetadata from '../classes/RichMetadata.js';\nimport RichMetadataRow from '../classes/RichMetadataRow.js';\nimport SegmentedLikeDislikeButton from '../classes/SegmentedLikeDislikeButton.js';\nimport SegmentedLikeDislikeButtonView from '../classes/SegmentedLikeDislikeButtonView.js';\nimport ToggleButton from '../classes/ToggleButton.js';\nimport TwoColumnWatchNextResults from '../classes/TwoColumnWatchNextResults.js';\nimport VideoPrimaryInfo from '../classes/VideoPrimaryInfo.js';\nimport VideoSecondaryInfo from '../classes/VideoSecondaryInfo.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport PlayerLegacyDesktopYpcTrailer from '../classes/PlayerLegacyDesktopYpcTrailer.js';\nimport YpcTrailer from '../classes/YpcTrailer.js';\nimport StructuredDescriptionContent from '../classes/StructuredDescriptionContent.js';\nimport VideoDescriptionMusicSection from '../classes/VideoDescriptionMusicSection.js';\nimport LiveChatWrap from './LiveChat.js';\nimport MacroMarkersListEntity from '../classes/MacroMarkersListEntity.js';\n\nimport type { RawNode } from '../index.js';\nimport { ReloadContinuationItemsCommand } from '../index.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type Heatmap from '../classes/Heatmap.js';\n\nexport default class VideoInfo extends MediaInfo {\n  public primary_info?: VideoPrimaryInfo | null;\n  public secondary_info?: VideoSecondaryInfo | null;\n  public playlist?: TwoColumnWatchNextResults['playlist'];\n  public game_info?;\n  public merchandise?: MerchandiseShelf | null;\n  public related_chip_cloud?: ChipCloud | null;\n  public watch_next_feed?: ObservedArray<YTNode> | null;\n  public player_overlays?: PlayerOverlay | null;\n  public comments_entry_point_header?: CommentsEntryPointHeader | null;\n  public livechat?: LiveChat | null;\n  public autoplay?: TwoColumnWatchNextResults['autoplay'];\n  public heat_map?: Heatmap | null;\n\n  #watch_next_continuation?: ContinuationItem;\n  \n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string) {\n    super(data, actions, cpn);\n\n    const [ info, next ] = this.page;\n\n    if (this.streaming_data) {\n      const default_audio_track = this.streaming_data.adaptive_formats.find((format) => format.audio_track?.audio_is_default);\n      if (default_audio_track) {\n        // The combined formats only exist for the default language, even for videos with multiple audio tracks\n        // So we can copy the language from the default audio track to the combined formats\n        this.streaming_data.formats.forEach((format) => format.language = default_audio_track.language);\n      } else if (this.captions?.caption_tracks && this.captions?.caption_tracks.length > 0) {\n        // For videos with a single audio track and captions, we can use the captions to figure out the language of the audio and combined formats\n        const auto_generated_caption_track = this.captions.caption_tracks.find((caption) => caption.kind === 'asr');\n        const language_code = auto_generated_caption_track?.language_code;\n\n        this.streaming_data.adaptive_formats.forEach((format) => {\n          if (format.has_audio) {\n            format.language = language_code;\n          }\n        });\n        this.streaming_data.formats.forEach((format) => format.language = language_code);\n      }\n    }\n\n    const two_col = next?.contents?.item().as(TwoColumnWatchNextResults);\n\n    const results = two_col?.results;\n    const secondary_results = two_col?.secondary_results;\n\n    if (results && secondary_results) {\n      if (info.microformat?.is(PlayerMicroformat) && info.microformat?.category === 'Gaming') {\n        const row = results.firstOfType(VideoSecondaryInfo)?.metadata?.rows?.firstOfType(RichMetadataRow);\n        if (row?.is(RichMetadataRow)) {\n          this.game_info = {\n            title: row?.contents?.firstOfType(RichMetadata)?.title,\n            release_year: row?.contents?.firstOfType(RichMetadata)?.subtitle\n          };\n        }\n      }\n\n      this.primary_info = results.firstOfType(VideoPrimaryInfo);\n      this.secondary_info = results.firstOfType(VideoSecondaryInfo);\n      this.merchandise = results.firstOfType(MerchandiseShelf);\n      this.related_chip_cloud = secondary_results.firstOfType(RelatedChipCloud)?.content.as(ChipCloud);\n\n      if (two_col?.playlist) {\n        this.playlist = two_col.playlist;\n      }\n\n      this.watch_next_feed = secondary_results.firstOfType(ItemSection)?.contents || secondary_results;\n\n      if (this.watch_next_feed && Array.isArray(this.watch_next_feed) && this.watch_next_feed.at(-1)?.is(ContinuationItem))\n        this.#watch_next_continuation = this.watch_next_feed.pop()?.as(ContinuationItem);\n\n      this.player_overlays = next?.player_overlays?.item().as(PlayerOverlay);\n\n      if (two_col?.autoplay) {\n        this.autoplay = two_col.autoplay;\n      }\n\n      const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n\n      if (segmented_like_dislike_button?.like_button?.is(ToggleButton) && segmented_like_dislike_button?.dislike_button?.is(ToggleButton)) {\n        this.basic_info.like_count = segmented_like_dislike_button?.like_button?.like_count;\n        this.basic_info.is_liked = segmented_like_dislike_button?.like_button?.is_toggled;\n        this.basic_info.is_disliked = segmented_like_dislike_button?.dislike_button?.is_toggled;\n      }\n\n      const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n      if (segmented_like_dislike_button_view) {\n        this.basic_info.like_count = segmented_like_dislike_button_view.like_count;\n\n        if (segmented_like_dislike_button_view.like_button) {\n          const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n          this.basic_info.is_liked = like_status === 'LIKE';\n          this.basic_info.is_disliked = like_status === 'DISLIKE';\n        }\n      }\n\n      const comments_entry_point = results.find((node): node is ItemSection => {\n        return node.is(ItemSection) && node.target_id === 'comments-entry-point';\n      });\n\n      this.comments_entry_point_header = comments_entry_point?.contents?.firstOfType(CommentsEntryPointHeader);\n      this.livechat = next?.contents_memo?.getType(LiveChat)[0];\n\n      const macro_markers_list_for_heatmap = this.page[1]?.contents_memo?.getType(MacroMarkersListEntity);\n      let calculated_heat_map: Heatmap | null = null;\n      if (macro_markers_list_for_heatmap) {\n        const heatmap_markers_entity = macro_markers_list_for_heatmap.find((markers) => \n          markers.isHeatmap()\n        );\n        if (heatmap_markers_entity) {\n          try {\n            calculated_heat_map = heatmap_markers_entity.toHeatmap();\n          } catch { /** NO-OP */ }\n        }\n      }\n      this.heat_map = calculated_heat_map;\n    }\n  }\n\n  /**\n   * Applies given filter to the watch next feed. Use {@link filters} to get available filters.\n   * @param target_filter - Filter to apply.\n   */\n  async selectFilter(target_filter: string | ChipCloudChip | undefined): Promise<VideoInfo> {\n    if (!this.related_chip_cloud)\n      throw new InnertubeError('Chip cloud not found, cannot apply filter');\n\n    let cloud_chip: ChipCloudChip;\n\n    if (typeof target_filter === 'string') {\n      const filter = this.related_chip_cloud?.chips?.find((chip) => chip.text === target_filter);\n\n      if (!filter)\n        throw new InnertubeError('Invalid filter', { available_filters: this.filters });\n\n      cloud_chip = filter;\n    } else if (target_filter?.is(ChipCloudChip)) {\n      cloud_chip = target_filter;\n    } else {\n      throw new InnertubeError('Invalid cloud chip', target_filter);\n    }\n\n    if (cloud_chip.is_selected) return this;\n\n    const response = await cloud_chip.endpoint?.call(this.actions, { parse: true });\n    const data = response?.on_response_received_endpoints?.find((endpoint): endpoint is ReloadContinuationItemsCommand => {\n      return endpoint.is(ReloadContinuationItemsCommand) && endpoint.target_id === 'watch-next-feed';\n    });\n\n    this.watch_next_feed = data?.contents;\n\n    return this;\n  }\n\n  /**\n   * Adds video to the watch history.\n   */\n  async addToWatchHistory(): Promise<Response> {\n    return super.addToWatchHistory();\n  }\n\n  /**\n   * Updates watch time for the video.\n   */\n  async updateWatchTime(startTime: number): Promise<Response> {\n    return super.updateWatchTime(startTime);\n  }\n\n  /**\n   * Retrieves watch next feed continuation.\n   */\n  async getWatchNextContinuation(): Promise<VideoInfo> {\n    if (!this.#watch_next_continuation)\n      throw new InnertubeError('Watch next feed continuation not found');\n\n    const response = await this.#watch_next_continuation?.endpoint.call(this.actions, { parse: true });\n    const data = response?.on_response_received_endpoints?.firstOfType(AppendContinuationItemsAction);\n\n    if (!data)\n      throw new InnertubeError('AppendContinuationItemsAction not found');\n\n    this.watch_next_feed = data?.contents;\n    if (this.watch_next_feed?.at(-1)?.is(ContinuationItem)) {\n      this.#watch_next_continuation = this.watch_next_feed.pop()?.as(ContinuationItem);\n    } else {\n      this.#watch_next_continuation = undefined;\n    }\n\n    return this;\n  }\n\n  /**\n   * Likes the video.\n   */\n  async like(): Promise<ApiResponse> {\n    const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n\n    if (segmented_like_dislike_button_view) {\n      const button = segmented_like_dislike_button_view?.like_button?.toggle_button;\n\n      if (!button || !button.default_button || !segmented_like_dislike_button_view.like_button)\n        throw new InnertubeError('Like button not found', { video_id: this.basic_info.id });\n\n      const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n\n      if (like_status === 'LIKE')\n        throw new InnertubeError('This video is already liked', { video_id: this.basic_info.id });\n\n      if (!button.default_button.on_tap)\n        throw new InnertubeError('onTap command not found', { video_id: this.basic_info.id });\n      \n      const endpoint = new NavigationEndpoint(button.default_button.on_tap.payload.commands.find((cmd: RawNode) => cmd.innertubeCommand));\n\n      return await endpoint.call(this.actions);\n    }\n\n    const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n    const button = segmented_like_dislike_button?.like_button;\n\n    if (!button)\n      throw new InnertubeError('Like button not found', { video_id: this.basic_info.id });\n\n    if (!button.is(ToggleButton))\n      throw new InnertubeError('Like button is not a toggle button. This action is likely disabled for this video.', { video_id: this.basic_info.id });\n\n    if (button.is_toggled)\n      throw new InnertubeError('This video is already liked', { video_id: this.basic_info.id });\n\n    return await button.endpoint.call(this.actions);\n  }\n\n  /**\n   * Dislikes the video.\n   */\n  async dislike(): Promise<ApiResponse> {\n    const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n\n    if (segmented_like_dislike_button_view) {\n      const button = segmented_like_dislike_button_view?.dislike_button?.toggle_button;\n\n      if (!button || !button.default_button || !segmented_like_dislike_button_view.dislike_button || !segmented_like_dislike_button_view.like_button)\n        throw new InnertubeError('Dislike button not found', { video_id: this.basic_info.id });\n\n      const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n\n      if (like_status === 'DISLIKE')\n        throw new InnertubeError('This video is already disliked', { video_id: this.basic_info.id });\n\n      if (!button.default_button.on_tap)\n        throw new InnertubeError('onTap command not found', { video_id: this.basic_info.id });\n      \n      const endpoint = new NavigationEndpoint(button.default_button.on_tap.payload.commands.find((cmd: RawNode) => cmd.innertubeCommand));\n\n      return await endpoint.call(this.actions);\n    }\n\n    const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n    const button = segmented_like_dislike_button?.dislike_button;\n\n    if (!button)\n      throw new InnertubeError('Dislike button not found', { video_id: this.basic_info.id });\n\n    if (!button.is(ToggleButton))\n      throw new InnertubeError('Dislike button is not a toggle button. This action is likely disabled for this video.', { video_id: this.basic_info.id });\n\n    if (button.is_toggled)\n      throw new InnertubeError('This video is already disliked', { video_id: this.basic_info.id });\n\n    return await button.endpoint.call(this.actions);\n  }\n\n  /**\n   * Removes like/dislike.\n   */\n  async removeRating(): Promise<ApiResponse> {\n    let button;\n\n    const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n\n    if (segmented_like_dislike_button_view) {\n      const toggle_button = segmented_like_dislike_button_view?.like_button?.toggle_button;\n\n      if (!toggle_button || !toggle_button.default_button || !segmented_like_dislike_button_view.like_button)\n        throw new InnertubeError('Like button not found', { video_id: this.basic_info.id });\n\n      const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n\n      if (like_status === 'LIKE') {\n        button = segmented_like_dislike_button_view?.like_button?.toggle_button;\n      } else if (like_status === 'DISLIKE') {\n        button = segmented_like_dislike_button_view?.dislike_button?.toggle_button;\n      } else {\n        throw new InnertubeError('This video is not liked/disliked', { video_id: this.basic_info.id });\n      }\n\n      if (!button || !button.toggled_button)\n        throw new InnertubeError('Like/Dislike button not found', { video_id: this.basic_info.id });\n      \n      if (!button.toggled_button.on_tap)\n        throw new InnertubeError('onTap command not found', { video_id: this.basic_info.id });\n      \n      const endpoint = new NavigationEndpoint(button.toggled_button.on_tap.payload.commands.find((cmd: RawNode) => cmd.innertubeCommand));\n\n      return await endpoint.call(this.actions);\n    }\n\n    const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n\n    const like_button = segmented_like_dislike_button?.like_button;\n    const dislike_button = segmented_like_dislike_button?.dislike_button;\n\n    if (!like_button?.is(ToggleButton) || !dislike_button?.is(ToggleButton))\n      throw new InnertubeError('Like/Dislike button is not a toggle button. This action is likely disabled for this video.', { video_id: this.basic_info.id });\n\n    if (like_button?.is_toggled) {\n      button = like_button;\n    } else if (dislike_button?.is_toggled) {\n      button = dislike_button;\n    }\n\n    if (!button)\n      throw new InnertubeError('This video is not liked/disliked', { video_id: this.basic_info.id });\n\n    return await button.toggled_endpoint.call(this.actions);\n  }\n\n  /**\n   * Retrieves Live Chat if available.\n   */\n  getLiveChat(): LiveChatWrap {\n    if (!this.livechat)\n      throw new InnertubeError('Live Chat is not available', { video_id: this.basic_info.id });\n    return new LiveChatWrap(this);\n  }\n\n  /**\n   * Retrieves trailer info if available (typically for non-purchased movies or films).\n   * @returns `VideoInfo` for the trailer, or `null` if none.\n   */\n  getTrailerInfo(): VideoInfo | null {\n    if (this.has_trailer && this.playability_status?.error_screen) {\n      let player_response;\n      if (this.playability_status.error_screen.is(PlayerLegacyDesktopYpcTrailer)) {\n        player_response = this.playability_status.error_screen.trailer?.player_response;\n      } else if (this.playability_status.error_screen.is(YpcTrailer)) {\n        player_response = this.playability_status.error_screen.player_response;\n      }\n\n      if (player_response) {\n        return new VideoInfo([ { data: player_response } as ApiResponse ], this.actions, this.cpn);\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Watch next feed filters.\n   */\n  get filters(): string[] {\n    return this.related_chip_cloud?.chips?.map((chip) => chip.text?.toString()) || [];\n  }\n\n  /**\n   * Checks if continuation is available for the watch next feed.\n   */\n  get wn_has_continuation(): boolean {\n    return !!this.#watch_next_continuation;\n  }\n\n  /**\n   * Gets the endpoint of the autoplay video\n   */\n  get autoplay_video_endpoint(): NavigationEndpoint | null {\n    return this.autoplay?.sets?.[0]?.autoplay_video || null;\n  }\n\n  /**\n   * Checks if trailer is available.\n   */\n  get has_trailer(): boolean {\n    return !!this.playability_status?.error_screen?.is(PlayerLegacyDesktopYpcTrailer, YpcTrailer);\n  }\n\n  /**\n   * Get songs used in the video.\n   */\n  get music_tracks() {\n    // @TODO: Refactor this.\n    const description_content = this.page[1]?.engagement_panels?.filter((panel) => panel.content?.is(StructuredDescriptionContent));\n    if (description_content !== undefined && description_content.length > 0) {\n      const music_section = description_content[0].content?.as(StructuredDescriptionContent)?.items?.filterType(VideoDescriptionMusicSection);\n      if (music_section !== undefined && music_section.length > 0) {\n        return music_section[0].carousel_lockups?.map((lookup) => {\n          let song: string | undefined;\n          let artist: string | undefined;\n          let album: string | undefined;\n          let license: string | undefined;\n          let videoId: string | undefined;\n          let channelId: string | undefined;\n\n          // If the song isn't in the video_lockup, it should be in the info_rows\n          song = lookup.video_lockup?.title?.toString();\n          // If the video id isn't in the video_lockup, it should be in the info_rows\n          videoId = lookup.video_lockup?.endpoint?.payload.videoId;\n          for (let i = 0; i < lookup.info_rows.length; i++) {\n            const info_row = lookup.info_rows[i];\n            if (info_row.info_row_expand_status_key === undefined) {\n              if (song === undefined) {\n                song = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n                if (videoId === undefined) {\n                  const endpoint = info_row.default_metadata?.endpoint || info_row.expanded_metadata?.endpoint;\n                  videoId = endpoint?.payload?.videoId;\n                }\n              } else {\n                album = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n              }\n            } else {\n              if (info_row.info_row_expand_status_key?.indexOf('structured-description-music-section-artists-row-state-id') !== -1) {\n                artist = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n                if (channelId === undefined) {\n                  const endpoint = info_row.default_metadata?.endpoint || info_row.expanded_metadata?.endpoint;\n                  channelId = endpoint?.payload?.browseId;\n                }\n              }\n              if (info_row.info_row_expand_status_key?.indexOf('structured-description-music-section-licenses-row-state-id') !== -1) {\n                license = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n              }\n            }\n          }\n          return { song, artist, album, license, videoId, channelId };\n        });\n      }\n    }\n    return [];\n  }\n}", "import { Parser } from '../index.js';\nimport Transcript from '../classes/Transcript.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IGetTranscriptResponse } from '../index.js';\n\nexport default class TranscriptInfo {\n  readonly #page: IGetTranscriptResponse;\n  readonly #actions: Actions;\n  public transcript: Transcript;\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#page = Parser.parseResponse(response.data);\n    this.#actions = actions;\n\n    if (!this.#page.actions_memo)\n      throw new Error('Page actions not found');\n\n    this.transcript = this.#page.actions_memo.getType(Transcript)[0];\n  }\n\n  /**\n   * Selects a language from the language menu and returns the updated transcript.\n   * @param language - Language to select.\n   */\n  async selectLanguage(language: string): Promise<TranscriptInfo> {\n    const target_menu_item = this.transcript.content?.footer?.language_menu?.sub_menu_items?.find((item) => item.title.toString() === language);\n\n    if (!target_menu_item)\n      throw new Error(`Language not found: ${language}`);\n\n    if (target_menu_item.selected)\n      return this;\n\n    const response = await this.#actions.execute('/get_transcript', {\n      params: target_menu_item.continuation\n    });\n\n    return new TranscriptInfo(this.#actions, response);\n  }\n\n  /**\n   * Returns available languages.\n   */\n  get languages(): string[] {\n    return this.transcript.content?.footer?.language_menu?.sub_menu_items?.map((item) => item.title.toString()) || [];\n  }\n\n  /**\n   * Returns the currently selected language.\n   */\n  get selectedLanguage(): string {\n    return this.transcript.content?.footer?.language_menu?.sub_menu_items?.find((item) => item.selected)?.title.toString() || '';\n  }\n\n  get page() {\n    return this.#page;\n  }\n}", "export { default as Album } from './Album.js';\nexport { default as Artist } from './Artist.js';\nexport { default as Explore } from './Explore.js';\nexport { default as HomeFeed } from './HomeFeed.js';\nexport { default as Library } from './Library.js';\nexport * from './Library.js';\nexport { default as Playlist } from './Playlist.js';\nexport { default as Recap } from './Recap.js';\nexport { default as Search } from './Search.js';\nexport { default as TrackInfo } from './TrackInfo.js';\n", "import { Parser } from '../index.js';\n\nimport MicroformatData from '../classes/MicroformatData.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicDetailHeader from '../classes/MusicDetailHeader.js';\nimport MusicResponsiveHeader from '../classes/MusicResponsiveHeader.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport type MusicThumbnail from '../classes/MusicThumbnail.js';\n\nimport type { ApiResponse } from '../../core/index.js';\nimport { observe, type ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type MusicResponsiveListItem from '../classes/MusicResponsiveListItem.js';\n\nexport default class Album {\n  readonly #page: IBrowseResponse;\n\n  public header?: MusicDetailHeader | MusicResponsiveHeader;\n  public contents: ObservedArray<MusicResponsiveListItem>;\n  public sections: ObservedArray<MusicCarouselShelf>;\n  public background?: MusicThumbnail;\n  public url?: string;\n\n  constructor(response: ApiResponse) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    if (!this.#page.contents_memo)\n      throw new Error('No contents found in the response');\n\n    this.header = this.#page.contents_memo.getType(MusicDetailHeader, MusicResponsiveHeader)?.[0];\n    this.contents = this.#page.contents_memo.getType(MusicShelf)?.[0].contents || observe([]);\n    this.sections = this.#page.contents_memo.getType(MusicCarouselShelf) || observe([]);\n    this.background = this.#page.background;\n    this.url = this.#page.microformat?.as(MicroformatData).url_canonical;\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { Parser } from '../index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { observe } from '../helpers.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport MusicShelf from '../classes/MusicShelf.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicPlaylistShelf from '../classes/MusicPlaylistShelf.js';\nimport MusicImmersiveHeader from '../classes/MusicImmersiveHeader.js';\nimport MusicVisualHeader from '../classes/MusicVisualHeader.js';\nimport MusicHeader from '../classes/MusicHeader.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Artist {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n\n  public header?: MusicImmersiveHeader | MusicVisualHeader | MusicHeader;\n  public sections: ObservedArray<MusicCarouselShelf | MusicShelf>;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    this.header = this.page.header?.item().as(MusicImmersiveHeader, MusicVisualHeader, MusicHeader);\n\n    const music_shelf = this.#page.contents_memo?.getType(MusicShelf) || [];\n    const music_carousel_shelf = this.#page.contents_memo?.getType(MusicCarouselShelf) || [];\n\n    this.sections = observe([ ...music_shelf, ...music_carousel_shelf ]);\n  }\n\n  async getAllSongs(): Promise<MusicPlaylistShelf | undefined> {\n    const music_shelves = this.sections.filter((section) => section.type === 'MusicShelf') as MusicShelf[];\n\n    if (!music_shelves.length)\n      throw new InnertubeError('Could not find any node of type MusicShelf.');\n\n    const shelf = music_shelves.find((shelf) => shelf.title?.text === 'Top songs') as MusicShelf;\n\n    if (!shelf)\n      throw new InnertubeError('Could not find target shelf (Top songs).');\n\n    if (!shelf.endpoint)\n      throw new InnertubeError('Target shelf (Top songs) did not have an endpoint.');\n\n    const page = await shelf.endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n    return page.contents_memo?.getType(MusicPlaylistShelf)?.[0];\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}\n", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport Grid from '../classes/Grid.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicNavigationButton from '../classes/MusicNavigationButton.js';\nimport SectionList from '../classes/SectionList.js';\nimport SingleColumnBrowseResults from '../classes/SingleColumnBrowseResults.js';\n\nimport type { ApiResponse } from '../../core/index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Explore {\n  readonly #page: IBrowseResponse;\n\n  public top_buttons: MusicNavigationButton[];\n  public sections: ObservedArray<MusicCarouselShelf>;\n\n  constructor(response: ApiResponse) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    const tab = this.#page.contents?.item().as(SingleColumnBrowseResults).tabs.find((tab) => tab.selected);\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const section_list = tab.content?.as(SectionList);\n\n    if (!section_list)\n      throw new InnertubeError('Target tab did not have any content.');\n\n    this.top_buttons = section_list.contents.firstOfType(Grid)?.items.as(MusicNavigationButton) || [];\n    this.sections = section_list.contents.filterType(MusicCarouselShelf);\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport { Parser, SectionListContinuation } from '../index.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport SectionList from '../classes/SectionList.js';\nimport SingleColumnBrowseResults from '../classes/SingleColumnBrowseResults.js';\nimport MusicTastebuilderShelf from '../classes/MusicTastebuilderShelf.js';\nimport ChipCloud from '../classes/ChipCloud.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class HomeFeed {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string;\n\n  sections?: ObservedArray<MusicCarouselShelf | MusicTastebuilderShelf>;\n  header?: ChipCloud;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    const tab = this.#page.contents?.item().as(SingleColumnBrowseResults).tabs.find((tab) => tab.selected);\n\n    if (!tab)\n      throw new InnertubeError('Could not find Home tab.');\n\n    if (tab.content === null) {\n      if (!this.#page.continuation_contents)\n        throw new InnertubeError('Continuation did not have any content.');\n\n      this.#continuation = this.#page.continuation_contents.as(SectionListContinuation).continuation;\n      this.sections = this.#page.continuation_contents.as(SectionListContinuation).contents?.as(MusicCarouselShelf);\n\n      return;\n    }\n\n    this.header = tab.content?.as(SectionList).header?.as(ChipCloud);\n    this.#continuation = tab.content?.as(SectionList).continuation;\n    this.sections = tab.content?.as(SectionList).contents.as(MusicCarouselShelf, MusicTastebuilderShelf);\n  }\n\n  /**\n   * Retrieves home feed continuation.\n   */\n  async getContinuation(): Promise<HomeFeed> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    const response = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: this.#continuation\n    });\n\n    return new HomeFeed(response, this.#actions);\n  }\n\n  async applyFilter(target_filter: string | ChipCloudChip): Promise<HomeFeed> {\n    let cloud_chip: ChipCloudChip | undefined;\n\n    if (typeof target_filter === 'string') {\n      cloud_chip = this.header?.chips?.as(ChipCloudChip).find((chip) => chip.text === target_filter);\n      if (!cloud_chip)\n        throw new InnertubeError('Could not find filter with given name.', { available_filters: this.filters });\n    } else if (target_filter?.is(ChipCloudChip)) {\n      cloud_chip = target_filter;\n    }\n\n    if (!cloud_chip)\n      throw new InnertubeError('Invalid filter', { available_filters: this.filters });\n\n    if (cloud_chip?.is_selected) return this;\n\n    if (!cloud_chip.endpoint)\n      throw new InnertubeError('Selected filter does not have an endpoint.');\n\n    const response = await cloud_chip.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new HomeFeed(response, this.#actions);\n  }\n\n  get filters(): string[] {\n    return this.header?.chips?.as(ChipCloudChip).map((chip) => chip.text) || [];\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { Parser, GridContinuation, MusicShelfContinuation, SectionListContinuation } from '../index.js';\n\nimport Grid from '../classes/Grid.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport MusicSideAlignedItem from '../classes/MusicSideAlignedItem.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport SectionList from '../classes/SectionList.js';\n\nimport ChipCloud from '../classes/ChipCloud.js';\nimport MusicMultiSelectMenuItem from '../classes/menus/MusicMultiSelectMenuItem.js';\nimport MusicSortFilterButton from '../classes/MusicSortFilterButton.js';\n\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type MusicMenuItemDivider from '../classes/menus/MusicMenuItemDivider.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type ChipCloudChip from '../classes/ChipCloudChip.js';\n\nexport default class Library {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string | null;\n\n  header?: MusicSideAlignedItem;\n  contents?: ObservedArray<Grid | MusicShelf>;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    const section_list = this.#page.contents_memo?.getType(SectionList)[0];\n\n    this.header = section_list?.header?.as(MusicSideAlignedItem);\n    this.contents = section_list?.contents?.as(Grid, MusicShelf);\n\n    this.#continuation = this.contents?.find((list: Grid | MusicShelf) => list.continuation)?.continuation;\n  }\n\n  /**\n   * Applies given sort option to the library items.\n   */\n  async applySort(sort_by: string | MusicMultiSelectMenuItem): Promise<Library> {\n    let target_item: MusicMultiSelectMenuItem | undefined;\n\n    if (typeof sort_by === 'string') {\n      const button = this.#page.contents_memo?.getType(MusicSortFilterButton)[0];\n\n      const options = button?.menu?.options\n        .filter(\n          (item: MusicMultiSelectMenuItem | MusicMenuItemDivider) => item instanceof MusicMultiSelectMenuItem\n        ) as MusicMultiSelectMenuItem[];\n\n      target_item = options?.find((item) => item.title === sort_by);\n\n      if (!target_item)\n        throw new InnertubeError(`Sort option \"${sort_by}\" not found`, { available_filters: options.map((item) => item.title) });\n    } else {\n      target_item = sort_by;\n    }\n\n    if (!target_item.endpoint)\n      throw new InnertubeError('Invalid sort option');\n\n    if (target_item.selected)\n      return this;\n\n    const cmd = target_item.endpoint.payload?.commands?.find((cmd: any) => cmd.browseSectionListReloadEndpoint)?.browseSectionListReloadEndpoint;\n\n    if (!cmd)\n      throw new InnertubeError('Failed to find sort option command');\n\n    const response = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: cmd.continuation.reloadContinuationData.continuation,\n      parse: true\n    });\n\n    const previously_selected_item = this.#page.contents_memo?.getType(MusicMultiSelectMenuItem)?.find((item) => item.selected);\n    if (previously_selected_item)\n      previously_selected_item.selected = false;\n\n    target_item.selected = true;\n\n    this.contents = response.continuation_contents?.as(SectionListContinuation).contents?.as(Grid, MusicShelf);\n\n    return this;\n  }\n\n  /**\n   * Applies given filter to the library.\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<Library> {\n    let target_chip: ChipCloudChip | undefined;\n\n    const chip_cloud = this.#page.contents_memo?.getType(ChipCloud)[0];\n\n    if (typeof filter === 'string') {\n      target_chip = chip_cloud?.chips.find((chip) => chip.text === filter);\n\n      if (!target_chip)\n        throw new InnertubeError(`Filter \"${filter}\" not found`, { available_filters: this.filters });\n    } else {\n      target_chip = filter;\n    }\n\n    if (!target_chip.endpoint)\n      throw new InnertubeError('Invalid filter', filter);\n\n    const target_cmd = new NavigationEndpoint(target_chip.endpoint.payload?.commands?.[0]);\n    const response = await target_cmd.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Library(response, this.#actions);\n  }\n\n  /**\n   * Retrieves continuation of the library items.\n   */\n  async getContinuation(): Promise<LibraryContinuation> {\n    if (!this.#continuation)\n      throw new InnertubeError('No continuation available');\n\n    const page = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: this.#continuation\n    });\n\n    return new LibraryContinuation(page, this.#actions);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get sort_options(): string[] {\n    const button = this.#page.contents_memo?.getType(MusicSortFilterButton)[0];\n    const options = button?.menu?.options.filter((item: MusicMultiSelectMenuItem | MusicMenuItemDivider) => item instanceof MusicMultiSelectMenuItem) as MusicMultiSelectMenuItem[];\n    return options.map((item) => item.title);\n  }\n\n  get filters(): string[] {\n    return this.#page.contents_memo?.getType(ChipCloud)?.[0].chips.map((chip: ChipCloudChip) => chip.text) || [];\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}\n\nexport class LibraryContinuation {\n  #page;\n  #actions;\n  #continuation;\n\n  contents: GridContinuation | MusicShelfContinuation;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    if (!this.#page.continuation_contents)\n      throw new InnertubeError('No continuation contents found');\n\n    this.contents = this.#page.continuation_contents.as(MusicShelfContinuation, GridContinuation);\n\n    this.#continuation = this.contents.continuation || null;\n  }\n\n  async getContinuation(): Promise<LibraryContinuation> {\n    if (!this.#continuation)\n      throw new InnertubeError('No continuation available');\n\n    const response = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: this.#continuation\n    });\n\n    return new LibraryContinuation(response, this.#actions);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "// noinspection ES6MissingAwait\n\nimport { MusicPlaylistShelfContinuation, Parser, SectionListContinuation } from '../index.js';\n\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicDetailHeader from '../classes/MusicDetailHeader.js';\nimport MusicEditablePlaylistDetailHeader from '../classes/MusicEditablePlaylistDetailHeader.js';\nimport MusicPlaylistShelf from '../classes/MusicPlaylistShelf.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport SectionList from '../classes/SectionList.js';\nimport MusicResponsiveListItem from '../classes/MusicResponsiveListItem.js';\nimport MusicResponsiveHeader from '../classes/MusicResponsiveHeader.js';\n\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { observe, type ObservedArray } from '../helpers.js';\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type MusicThumbnail from '../classes/MusicThumbnail.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\n\nexport default class Playlist {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string | ContinuationItem;\n\n  public header?: MusicResponsiveHeader | MusicDetailHeader | MusicEditablePlaylistDetailHeader;\n  public contents?: ObservedArray<MusicResponsiveListItem | ContinuationItem>;\n  public background?: MusicThumbnail;\n\n  #last_fetched_suggestions: ObservedArray<MusicResponsiveListItem> | null;\n  #suggestions_continuation: string | null;\n  \n  constructor(response: ApiResponse, actions: Actions) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    this.#last_fetched_suggestions = null;\n    this.#suggestions_continuation = null;\n\n    if (this.#page.continuation_contents) {\n      const data = this.#page.continuation_contents?.as(MusicPlaylistShelfContinuation);\n      if (!data.contents)\n        throw new InnertubeError('No contents found in the response');\n      this.contents = data.contents.as(MusicResponsiveListItem, ContinuationItem);\n      const continuation_item = this.contents.firstOfType(ContinuationItem);\n      this.#continuation = data.continuation || continuation_item;\n    } else if (this.#page.contents_memo) {\n      this.header = this.#page.contents_memo.getType(MusicResponsiveHeader, MusicEditablePlaylistDetailHeader, MusicDetailHeader)?.[0];\n      this.contents = this.#page.contents_memo.getType(MusicPlaylistShelf)?.[0]?.contents.as(MusicResponsiveListItem, ContinuationItem) || observe([]);\n      this.background = this.#page.background;\n      const continuation_item = this.contents.firstOfType(ContinuationItem);\n      this.#continuation = this.#page.contents_memo.getType(MusicPlaylistShelf)?.[0]?.continuation || continuation_item;\n    } else if (this.#page.on_response_received_actions) {\n      const append_continuation_action = this.#page.on_response_received_actions.firstOfType(AppendContinuationItemsAction);\n      this.contents = append_continuation_action?.contents?.as(MusicResponsiveListItem, ContinuationItem);\n      this.#continuation = this.contents?.firstOfType(ContinuationItem);\n    }\n  }\n\n  /**\n   * Retrieves playlist items continuation.\n   */\n  async getContinuation(): Promise<Playlist> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    let response: ApiResponse;\n    \n    if (typeof this.#continuation === 'string') {\n      response = await this.#actions.execute('/browse', {\n        client: 'YTMUSIC',\n        continuation: this.#continuation\n      });\n    } else {\n      response = await this.#continuation.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    }\n    \n    return new Playlist(response, this.#actions);\n  }\n\n  /**\n   * Retrieves related playlists\n   */\n  async getRelated(): Promise<MusicCarouselShelf> {\n    const target_section_list = this.#page.contents_memo?.getType(SectionList).find((section_list) => section_list.continuation);\n\n    if (!target_section_list)\n      throw new InnertubeError('Could not find \"Related\" section.');\n\n    let section_continuation = target_section_list.continuation;\n\n    while (section_continuation) {\n      const data = await this.#actions.execute('/browse', {\n        client: 'YTMUSIC',\n        continuation: section_continuation,\n        parse: true\n      });\n\n      const section_list = data.continuation_contents?.as(SectionListContinuation);\n      const sections = section_list?.contents?.as(MusicCarouselShelf, MusicShelf);\n\n      const related = sections?.find((section) => section.is(MusicCarouselShelf))?.as(MusicCarouselShelf);\n\n      if (related)\n        return related;\n\n      section_continuation = section_list?.continuation;\n    }\n\n    throw new InnertubeError('Could not fetch related playlists.');\n  }\n\n  async getSuggestions(refresh = true): Promise<ObservedArray<MusicResponsiveListItem>> {\n    const require_fetch = refresh || !this.#last_fetched_suggestions;\n    const fetch_promise = require_fetch ? this.#fetchSuggestions() : Promise.resolve(null);\n    const fetch_result = await fetch_promise;\n\n    if (fetch_result) {\n      this.#last_fetched_suggestions = fetch_result.items;\n      this.#suggestions_continuation = fetch_result.continuation;\n    }\n\n    return fetch_result?.items || this.#last_fetched_suggestions || observe([]);\n  }\n\n  async #fetchSuggestions(): Promise<{ items: ObservedArray<MusicResponsiveListItem>, continuation: string | null }> {\n    const target_section_list = this.#page.contents_memo?.getType(SectionList).find((section_list) => section_list.continuation);\n    const continuation = this.#suggestions_continuation || target_section_list?.continuation;\n\n    if (continuation) {\n      const page = await this.#actions.execute('/browse', {\n        client: 'YTMUSIC',\n        continuation: continuation,\n        parse: true\n      });\n\n      const section_list = page.continuation_contents?.as(SectionListContinuation);\n      const sections = section_list?.contents?.as(MusicCarouselShelf, MusicShelf);\n\n      const suggestions = sections?.find((section) => section.is(MusicShelf))?.as(MusicShelf);\n\n      return {\n        items: suggestions?.contents || observe([]),\n        continuation: suggestions?.continuation || null\n      };\n    }\n\n    return {\n      items: observe([]),\n      continuation: null\n    };\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n\n  get items(): ObservedArray<MusicResponsiveListItem | ContinuationItem> {\n    return this.contents || observe([]);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport Playlist from './Playlist.js';\nimport HighlightsCarousel from '../classes/HighlightsCarousel.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicElementHeader from '../classes/MusicElementHeader.js';\nimport MusicHeader from '../classes/MusicHeader.js';\nimport SingleColumnBrowseResults from '../classes/SingleColumnBrowseResults.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport Message from '../classes/Message.js';\nimport SectionList from '../classes/SectionList.js';\nimport Tab from '../classes/Tab.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class Recap {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n\n  public header?: HighlightsCarousel | MusicHeader;\n  public sections?: ObservedArray<ItemSection | MusicCarouselShelf | Message>;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    const header = this.#page.header?.item();\n\n    this.header = header?.is(MusicElementHeader) ?\n      this.#page.header?.item().as(MusicElementHeader).element?.model?.as(HighlightsCarousel) :\n      this.#page.header?.item().as(MusicHeader);\n\n    const tab = this.#page.contents?.item().as(SingleColumnBrowseResults).tabs.firstOfType(Tab);\n\n    if (!tab)\n      throw new InnertubeError('Target tab not found');\n\n    this.sections = tab.content?.as(SectionList).contents.as(ItemSection, MusicCarouselShelf, Message);\n  }\n\n  /**\n   * Retrieves recap playlist.\n   */\n  async getPlaylist(): Promise<Playlist> {\n    if (!this.header)\n      throw new InnertubeError('Header not found');\n\n    if (!this.header.is(HighlightsCarousel))\n      throw new InnertubeError('Recap playlist not available, check back later.');\n\n    const endpoint = this.header.panels[0].text_on_tap_endpoint;\n    const response = await endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Playlist(response, this.#actions);\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport { Parser, MusicShelfContinuation } from '../index.js';\n\nimport ChipCloud from '../classes/ChipCloud.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\nimport DidYouMean from '../classes/DidYouMean.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport Message from '../classes/Message.js';\nimport MusicCardShelf from '../classes/MusicCardShelf.js';\nimport MusicHeader from '../classes/MusicHeader.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport SectionList from '../classes/SectionList.js';\nimport ShowingResultsFor from '../classes/ShowingResultsFor.js';\nimport TabbedSearchResults from '../classes/TabbedSearchResults.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { ISearchResponse } from '../types/index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class Search {\n  readonly #page: ISearchResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string;\n\n  public header?: ChipCloud;\n  public contents?: ObservedArray<MusicShelf | MusicCardShelf | ItemSection>;\n\n  constructor(response: ApiResponse, actions: Actions, is_filtered?: boolean) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<ISearchResponse>(response.data);\n\n    if (!this.#page.contents || !this.#page.contents_memo)\n      throw new InnertubeError('Response did not contain any contents.');\n\n    const tab = this.#page.contents.item().as(TabbedSearchResults).tabs.find((tab) => tab.selected);\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const tab_content = tab.content?.as(SectionList);\n\n    if (!tab_content)\n      throw new InnertubeError('Target tab did not have any content.');\n\n    this.header = tab_content.header?.as(ChipCloud);\n    this.contents = tab_content.contents.as(MusicShelf, MusicCardShelf, ItemSection);\n\n    if (is_filtered) {\n      this.#continuation = this.contents.firstOfType(MusicShelf)?.continuation;\n    }\n  }\n\n  /**\n   * Loads more items for the given shelf.\n   */\n  async getMore(shelf: MusicShelf | undefined): Promise<Search> {\n    if (!shelf || !shelf.endpoint)\n      throw new InnertubeError('Cannot retrieve more items for this shelf because it does not have an endpoint.');\n\n    const response = await shelf.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    if (!response)\n      throw new InnertubeError('Endpoint did not return any data');\n\n    return new Search(response, this.#actions, true);\n  }\n\n  /**\n   * Retrieves search continuation. Only available for filtered searches and shelf continuations.\n   */\n  async getContinuation(): Promise<SearchContinuation> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    const response = await this.#actions.execute('/search', {\n      continuation: this.#continuation,\n      client: 'YTMUSIC'\n    });\n\n    return new SearchContinuation(this.#actions, response);\n  }\n\n  /**\n   * Applies given filter to the search.\n   */\n  async applyFilter(target_filter: string | ChipCloudChip): Promise<Search> {\n    let cloud_chip: ChipCloudChip | undefined;\n\n    if (typeof target_filter === 'string') {\n      cloud_chip = this.header?.chips?.as(ChipCloudChip).find((chip) => chip.text === target_filter);\n      if (!cloud_chip)\n        throw new InnertubeError('Could not find filter with given name.', { available_filters: this.filters });\n    } else if (target_filter?.is(ChipCloudChip)) {\n      cloud_chip = target_filter;\n    }\n\n    if (!cloud_chip)\n      throw new InnertubeError('Invalid filter', { available_filters: this.filters });\n\n    if (cloud_chip?.is_selected) return this;\n\n    if (!cloud_chip.endpoint)\n      throw new InnertubeError('Selected filter does not have an endpoint.');\n\n    const response = await cloud_chip.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Search(response, this.#actions, true);\n  }\n\n  get filters(): string[] {\n    return this.header?.chips?.as(ChipCloudChip).map((chip) => chip.text) || [];\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get did_you_mean(): DidYouMean | undefined {\n    return this.#page.contents_memo?.getType(DidYouMean)[0];\n  }\n\n  get showing_results_for(): ShowingResultsFor | undefined {\n    return this.#page.contents_memo?.getType(ShowingResultsFor)[0];\n  }\n\n  get message(): Message | undefined {\n    return this.#page.contents_memo?.getType(Message)[0];\n  }\n\n  get songs(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Songs');\n  }\n\n  get videos(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Videos');\n  }\n\n  get albums(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Albums');\n  }\n\n  get artists(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Artists');\n  }\n\n  get playlists(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Community playlists');\n  }\n\n  get page(): ISearchResponse {\n    return this.#page;\n  }\n}\n\nexport class SearchContinuation {\n  readonly #actions: Actions;\n  readonly #page: ISearchResponse;\n  public header?: MusicHeader;\n  public contents?: MusicShelfContinuation;\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<ISearchResponse>(response.data);\n    this.header = this.#page.header?.item().as(MusicHeader);\n    this.contents = this.#page.continuation_contents?.as(MusicShelfContinuation);\n  }\n\n  async getContinuation(): Promise<SearchContinuation> {\n    if (!this.contents?.continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    const response = await this.#actions.execute('/search', {\n      continuation: this.contents.continuation,\n      client: 'YTMUSIC'\n    });\n\n    return new SearchContinuation(this.#actions, response);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.contents?.continuation;\n  }\n\n  get page(): ISearchResponse {\n    return this.#page;\n  }\n}", "import { Constants } from '../../utils/index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { MediaInfo } from '../../core/mixins/index.js';\n\nimport Tab from '../classes/Tab.js';\nimport AutomixPreviewVideo from '../classes/AutomixPreviewVideo.js';\nimport Message from '../classes/Message.js';\nimport MusicDescriptionShelf from '../classes/MusicDescriptionShelf.js';\nimport PlayerOverlay from '../classes/PlayerOverlay.js';\nimport PlaylistPanel from '../classes/PlaylistPanel.js';\nimport SectionList from '../classes/SectionList.js';\nimport WatchNextTabbedResults from '../classes/WatchNextTabbedResults.js';\n\nimport type RichGrid from '../classes/RichGrid.js';\nimport type MusicQueue from '../classes/MusicQueue.js';\nimport type MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport { PlaylistPanelContinuation } from '../continuations.js';\n\nclass TrackInfo extends MediaInfo {\n  public tabs?: ObservedArray<Tab>;\n  public current_video_endpoint?: NavigationEndpoint;\n  public player_overlays?: PlayerOverlay;\n\n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string) {\n    super(data, actions, cpn);\n\n    const next = this.page[1];\n\n    if (next) {\n      const tabbed_results = next.contents_memo?.getType(WatchNextTabbedResults)?.[0];\n\n      this.tabs = tabbed_results?.tabs.as(Tab);\n      this.current_video_endpoint = next.current_video_endpoint;\n\n      // TODO: update PlayerOverlay, YTMusic's is a little bit different.\n      this.player_overlays = next.player_overlays?.item().as(PlayerOverlay);\n    }\n  }\n\n  /**\n   * Retrieves contents of the given tab.\n   */\n  async getTab(title_or_page_type: string): Promise<ObservedArray<YTNode> | SectionList | MusicQueue | RichGrid | Message> {\n    if (!this.tabs)\n      throw new InnertubeError('Could not find any tab');\n\n    const target_tab =\n      this.tabs.find((tab) => tab.title === title_or_page_type) ||\n      this.tabs.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === title_or_page_type) ||\n      this.tabs?.[0];\n\n    if (!target_tab)\n      throw new InnertubeError(`Tab \"${title_or_page_type}\" not found`, { available_tabs: this.available_tabs });\n\n    if (target_tab.content)\n      return target_tab.content;\n\n    const page = await target_tab.endpoint.call(this.actions, { client: 'YTMUSIC', parse: true });\n\n    if (page.contents?.item().type === 'Message')\n      return page.contents.item().as(Message);\n\n    if (!page.contents)\n      throw new InnertubeError('Page contents was empty', page);\n\n    return page.contents.item().as(SectionList).contents;\n  }\n\n  /**\n   * Retrieves up next.\n   */\n  async getUpNext(automix = true): Promise<PlaylistPanel> {\n    const music_queue = await this.getTab('Up next') as MusicQueue;\n\n    if (!music_queue || !music_queue.content)\n      throw new InnertubeError('Music queue was empty, the video id is probably invalid.', music_queue);\n\n    const playlist_panel = music_queue.content.as(PlaylistPanel);\n\n    if (!playlist_panel.playlist_id && automix) {\n      const automix_preview_video = playlist_panel.contents.firstOfType(AutomixPreviewVideo);\n\n      if (!automix_preview_video)\n        throw new InnertubeError('Automix item not found');\n\n      const page = await automix_preview_video.playlist_video?.endpoint.call(this.actions, {\n        videoId: this.basic_info.id,\n        client: 'YTMUSIC',\n        parse: true\n      });\n\n      if (!page || !page.contents_memo)\n        throw new InnertubeError('Could not fetch automix');\n\n      return page.contents_memo.getType(PlaylistPanel)?.[0];\n    }\n\n    return playlist_panel;\n  }\n\n  /**\n   * Retrieves up next continuation relative to current TrackInfo.\n   */\n  async getUpNextContinuation(playlistPanel: PlaylistPanel | PlaylistPanelContinuation): Promise<PlaylistPanelContinuation> {\n    if (!this.current_video_endpoint)\n      throw new InnertubeError('Current Video Endpoint was not defined.', this.current_video_endpoint);\n    \n    if (playlistPanel instanceof PlaylistPanel && playlistPanel.playlist_id !== this.current_video_endpoint.payload.playlistId) {\n      throw new InnertubeError('PlaylistId from TrackInfo does not match with PlaylistPanel');\n    }\n    \n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { ...this.current_video_endpoint.payload, continuation: playlistPanel.continuation } });\n    const response = await watch_next_endpoint.call(this.actions, { ...this.current_video_endpoint.payload, continuation: playlistPanel.continuation, client: 'YTMUSIC', parse: true });\n\n    const playlistCont = response.continuation_contents?.as(PlaylistPanelContinuation);\n\n    if (!playlistCont)\n      throw new InnertubeError('No PlaylistPanel Continuation available.', response);\n    \n    return playlistCont;\n  }\n\n  /**\n   * Retrieves related content.\n   */\n  async getRelated(): Promise<ObservedArray<MusicCarouselShelf | MusicDescriptionShelf>> {\n    return await this.getTab('MUSIC_PAGE_TYPE_TRACK_RELATED') as ObservedArray<MusicDescriptionShelf>;\n  }\n\n  /**\n   * Retrieves lyrics.\n   */\n  async getLyrics(): Promise<MusicDescriptionShelf | undefined> {\n    const tab = await this.getTab('MUSIC_PAGE_TYPE_TRACK_LYRICS') as ObservedArray<MusicCarouselShelf | MusicDescriptionShelf>;\n    return tab.firstOfType(MusicDescriptionShelf);\n  }\n\n  /**\n   * Adds the song to the watch history.\n   */\n  async addToWatchHistory(): Promise<Response> {\n    return super.addToWatchHistory(Constants.CLIENTS.YTMUSIC.NAME, Constants.CLIENTS.YTMUSIC.VERSION, 'https://music.');\n  }\n  \n  /**\n   * Updates the watch time of the song.\n   */\n  async updateWatchTime(startTime: number): Promise<Response> {\n    return super.updateWatchTime(startTime, Constants.CLIENTS.YTMUSIC.NAME, Constants.CLIENTS.YTMUSIC.VERSION, 'https://music.');\n  }\n\n  get available_tabs(): string[] {\n    return this.tabs ? this.tabs.map((tab) => tab.title) : [];\n  }\n}\n\nexport default TrackInfo;", "export { default as Channel } from './Channel.js';\nexport { default as HomeFeed } from './HomeFeed.js';\nexport { default as Search } from './Search.js';\nexport { default as VideoInfo } from './VideoInfo.js';\n", "import Feed from '../../core/mixins/Feed.js';\nimport C4TabbedHeader from '../classes/C4TabbedHeader.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport { ItemSectionContinuation } from '../index.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nimport type { IBrowseResponse } from '../types/index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class Channel extends Feed<IBrowseResponse> {\n  public header?: C4TabbedHeader;\n  public contents?: ItemSection | ItemSectionContinuation;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.header = this.page.header?.item().as(C4TabbedHeader);\n    this.contents = this.memo.getType(ItemSection)[0] || this.page.continuation_contents?.as(ItemSectionContinuation);\n  }\n\n  /**\n   * Retrieves next batch of content.\n   */\n  async getContinuation(): Promise<Channel> {\n    if (!this.contents)\n      throw new Error('No continuation available.');\n    \n    const continuation_request = new NavigationEndpoint({\n      continuationCommand: {\n        token: this.contents.continuation,\n        request: 'CONTINUATION_REQUEST_TYPE_BROWSE'\n      }\n    });\n    \n    const continuation_response = await continuation_request.call(this.actions, { client: 'YTKIDS' });\n\n    return new Channel(this.actions, continuation_response);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.contents?.continuation;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\n\nimport Feed from '../../core/mixins/Feed.js';\nimport KidsCategoriesHeader from '../classes/ytkids/KidsCategoriesHeader.js';\nimport KidsCategoryTab from '../classes/ytkids/KidsCategoryTab.js';\nimport KidsHomeScreen from '../classes/ytkids/KidsHomeScreen.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class HomeFeed extends Feed<IBrowseResponse> {\n  public header?: KidsCategoriesHeader;\n  public contents?: KidsHomeScreen;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.header = this.page.header?.item().as(KidsCategoriesHeader);\n    this.contents = this.page.contents?.item().as(KidsHomeScreen);\n  }\n\n  /**\n   * Retrieves the contents of the given category tab. Use {@link HomeFeed.categories} to get a list of available categories.\n   * @param tab - The tab to select\n   */\n  async selectCategoryTab(tab: string | KidsCategoryTab): Promise<HomeFeed> {\n    let target_tab: KidsCategoryTab | undefined;\n\n    if (typeof tab === 'string') {\n      target_tab = this.header?.category_tabs.find((t) => t.title.toString() === tab);\n    } else if (tab?.is(KidsCategoryTab)) {\n      target_tab = tab;\n    }\n\n    if (!target_tab)\n      throw new InnertubeError(`Tab \"${tab}\" not found`);\n\n    const page = await target_tab.endpoint.call<IBrowseResponse>(this.actions, { client: 'YTKIDS', parse: true });\n\n    // Copy over the header and header memo\n    page.header = this.page.header;\n    page.header_memo = this.page.header_memo;\n\n    return new HomeFeed(this.actions, page, true);\n  }\n\n  get categories(): string[] {\n    return this.header?.category_tabs.map((tab) => tab.title.toString()) || [];\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { ISearchResponse } from '../types/index.js';\n\nexport default class Search extends Feed<ISearchResponse> {\n  public estimated_results?: number;\n  public contents: ObservedArray<YTNode> | null;\n\n  constructor(actions: Actions, data: ApiResponse | ISearchResponse) {\n    super(actions, data);\n    this.estimated_results = this.page.estimated_results;\n\n    const item_section = this.memo.getType(ItemSection)[0];\n\n    if (!item_section)\n      throw new InnertubeError('No item section found in search response.');\n\n    this.contents = item_section.contents;\n  }\n}", "import { MediaInfo } from '../../core/mixins/index.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport PlayerOverlay from '../classes/PlayerOverlay.js';\nimport SlimVideoMetadata from '../classes/SlimVideoMetadata.js';\nimport TwoColumnWatchNextResults from '../classes/TwoColumnWatchNextResults.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nexport default class VideoInfo extends MediaInfo {\n  public slim_video_metadata?: SlimVideoMetadata;\n  public watch_next_feed?: ObservedArray<YTNode>;\n  public current_video_endpoint?: NavigationEndpoint;\n  public player_overlays?: PlayerOverlay;\n\n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string) {\n    super(data, actions, cpn);\n\n    const next = this.page[1];\n\n    const two_col = next?.contents?.item().as(TwoColumnWatchNextResults);\n\n    const results = two_col?.results;\n    const secondary_results = two_col?.secondary_results;\n\n    if (results && secondary_results) {\n      this.slim_video_metadata = results.firstOfType(ItemSection)?.contents?.firstOfType(SlimVideoMetadata);\n      this.watch_next_feed = secondary_results.firstOfType(ItemSection)?.contents || secondary_results;\n      this.current_video_endpoint = next?.current_video_endpoint;\n      this.player_overlays = next?.player_overlays?.item().as(PlayerOverlay);\n    }\n  }\n}", "export { default as ShortFormVideoInfo } from './ShortFormVideoInfo.js';", "import { Parser, ContinuationCommand } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport MediaInfo from '../../core/mixins/MediaInfo.js';\n\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport type PlayerOverlay from '../classes/PlayerOverlay.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class ShortFormVideoInfo extends MediaInfo {\n  #watch_next_continuation?: ContinuationCommand;\n  watch_next_feed?: NavigationEndpoint[];\n  current_video_endpoint?: NavigationEndpoint;\n  player_overlays?: PlayerOverlay;\n\n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string, reel_watch_sequence_response: ApiResponse) {\n    super(data, actions, cpn);\n    if (reel_watch_sequence_response) {\n      const reel_watch_sequence = Parser.parseResponse(reel_watch_sequence_response.data);\n      if (reel_watch_sequence.entries)\n        this.watch_next_feed = reel_watch_sequence.entries;\n\n      if (reel_watch_sequence.continuation_endpoint)\n        this.#watch_next_continuation = reel_watch_sequence.continuation_endpoint?.as(ContinuationCommand);\n    }\n  }\n\n  async getWatchNextContinuation(): Promise<ShortFormVideoInfo> {\n    if (!this.#watch_next_continuation)\n      throw new InnertubeError('Continuation not found');\n\n    const response = await this.actions.execute('/reel/reel_watch_sequence', {\n      sequenceParams: this.#watch_next_continuation.token,\n      parse: true\n    });\n\n    if (response.entries)\n      this.watch_next_feed = response.entries;\n\n    this.#watch_next_continuation = response.continuation_endpoint?.as(ContinuationCommand);\n\n    return this;\n  }\n\n  /**\n   * Checks if continuation is available for the watch next feed.\n   */\n  get wn_has_continuation(): boolean {\n    return !!this.#watch_next_continuation;\n  }\n}", "import * as Constants from '../../../utils/Constants.js';\nimport type { YTNode } from '../../helpers.js';\nimport { observe, type ObservedArray } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport type NavigationEndpoint from '../NavigationEndpoint.js';\nimport Text from './Text.js';\nimport type TextRun from './TextRun.js';\nimport Thumbnail from './Thumbnail.js';\n\nexport default class Author {\n  id: string;\n  name: string;\n  thumbnails: Thumbnail[];\n  endpoint?: NavigationEndpoint;\n  badges: ObservedArray<YTNode>;\n  is_moderator?: boolean;\n  is_verified?: boolean;\n  is_verified_artist?: boolean;\n  url: string;\n\n  constructor(item: RawNode, badges?: any, thumbs?: any, id?: string) {\n    const nav_text = new Text(item);\n\n    this.id = id || (nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.browseId || nav_text?.endpoint?.payload?.browseId || 'N/A';\n    this.name = nav_text?.text || 'N/A';\n    this.thumbnails = thumbs ? Thumbnail.fromResponse(thumbs) : [];\n    this.endpoint = ((nav_text?.runs?.[0] as TextRun) as TextRun)?.endpoint || nav_text?.endpoint;\n\n    if (badges) {\n      if (Array.isArray(badges)) {\n        this.badges = Parser.parseArray(badges);\n        this.is_moderator = this.badges?.some((badge: any) => badge.icon_type == 'MODERATOR');\n        this.is_verified = this.badges?.some((badge: any) => badge.style == 'BADGE_STYLE_TYPE_VERIFIED');\n        this.is_verified_artist = this.badges?.some((badge: any) => badge.style == 'BADGE_STYLE_TYPE_VERIFIED_ARTIST');\n      } else {\n        this.badges = observe([] as YTNode[]);\n        this.is_verified = !!badges.isVerified;\n        this.is_verified_artist = !!badges.isArtist;\n      }\n    } else {\n      this.badges = observe([] as YTNode[]);\n    }\n\n    // @TODO: Refactor this mess.\n    this.url =\n      (nav_text?.runs?.[0] as TextRun)?.endpoint?.metadata?.api_url === '/browse' &&\n        `${Constants.URLS.YT_BASE}${(nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.canonicalBaseUrl || `/u/${(nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.browseId}`}` ||\n        `${Constants.URLS.YT_BASE}${nav_text?.endpoint?.payload?.canonicalBaseUrl || `/u/${nav_text?.endpoint?.payload?.browseId}`}`;\n  }\n\n  get best_thumbnail(): Thumbnail | undefined {\n    return this.thumbnails[0];\n  }\n}", "/* eslint-disable */\n/* Generated file do not edit */\nexport default {\n  \"desktop\": [\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6.1 Safari/605.1.15\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 OPR/121.0.0.0\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Safari/605.1.15\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 OPR/121.0.0.0\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Safari/605.1.15\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 OPR/122.0.0.0\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\"\n  ],\n  \"mobile\": [\n    \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_7_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1\"\n  ]\n} as { desktop: string[], mobile: string[] };", "export default async function sha1Hash(str: string) {\n  const byteToHex = [\n    '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f',\n    '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f',\n    '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f',\n    '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f',\n    '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f',\n    '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f',\n    '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f',\n    '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f',\n    '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f',\n    '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f',\n    'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af',\n    'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf',\n    'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf',\n    'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df',\n    'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef',\n    'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff'\n  ];\n\n  function hex(arrayBuffer: ArrayBuffer): string {\n    const buff = new Uint8Array(arrayBuffer);\n    const hexOctets = [];\n    for (let i = 0; i < buff.length; ++i)\n      hexOctets.push(byteToHex[buff[i]]);\n    return hexOctets.join('');\n  }\n\n  return hex(await crypto.subtle.digest('SHA-1', new TextEncoder().encode(str)));\n}", "import type { VMPrimative } from '../../types/index.js';\nimport type { BuildScriptResult } from '../../utils/javascript/JsExtractor.js';\n\nexport default function evaluate(_data: BuildScriptResult, _env: Record<string, VMPrimative>) {\n  throw new Error(\n    'To decipher URLs, you must provide your own JavaScript evaluator. ' +\n    'See https://ytjs.dev/guide/getting-started.html#providing-a-custom-javascript-interpreter for more details.'\n  );\n}", "import type {\n  IBrowseResponse,\n  IGetChallengeResponse,\n  IGetNotificationsMenuResponse,\n  INextResponse,\n  IParsedResponse,\n  IPlayerResponse,\n  IRawResponse,\n  IResolveURLResponse,\n  ISearchResponse,\n  IUpdatedMetadataResponse\n} from '../parser/index.js';\nimport { NavigateAction, Parser } from '../parser/index.js';\nimport { InnertubeError } from '../utils/Utils.js';\n\nimport type { Session } from './index.js';\n\nexport interface ApiResponse {\n  success: boolean;\n  status_code: number;\n  data: IRawResponse;\n}\n\nexport type InnertubeEndpoint =\n  '/player'\n  | '/search'\n  | '/browse'\n  | '/next'\n  | '/reel'\n  | '/updated_metadata'\n  | '/notification/get_notification_menu'\n  | '/att/get'\n  | string;\n\nexport type ParsedResponse<T> =\n  T extends '/player' ? IPlayerResponse :\n    T extends '/search' ? ISearchResponse :\n      T extends '/browse' ? IBrowseResponse :\n        T extends '/next' ? INextResponse :\n          T extends '/updated_metadata' ? IUpdatedMetadataResponse :\n            T extends '/navigation/resolve_url' ? IResolveURLResponse :\n              T extends '/notification/get_notification_menu' ? IGetNotificationsMenuResponse :\n                T extends '/att/get' ? IGetChallengeResponse :\n                  IParsedResponse;\n\nexport default class Actions {\n  public session: Session;\n\n  constructor(session: Session) {\n    this.session = session;\n  }\n\n  /**\n   * Makes calls to the playback tracking API.\n   * @param url - The URL to call.\n   * @param client - The client to use.\n   * @param params - Call parameters.\n   */\n  async stats(url: string, client: { client_name: string; client_version: string }, params: {\n    [key: string]: any\n  }): Promise<Response> {\n    const s_url = new URL(url);\n\n    s_url.searchParams.set('ver', '2');\n    s_url.searchParams.set('c', client.client_name.toLowerCase());\n    s_url.searchParams.set('cbrver', client.client_version);\n    s_url.searchParams.set('cver', client.client_version);\n\n    for (const key of Object.keys(params)) {\n      s_url.searchParams.set(key, params[key]);\n    }\n\n    return await this.session.http.fetch(s_url);\n  }\n\n  /**\n   * Executes an API call.\n   * @param endpoint - The endpoint to call.\n   * @param args - Call arguments\n   */\n  async execute<T extends InnertubeEndpoint>(endpoint: T, args: {\n    [key: string]: any;\n    parse: true;\n    protobuf?: false;\n    serialized_data?: any;\n    skip_auth_check?: boolean\n  }): Promise<ParsedResponse<T>>;\n  async execute<T extends InnertubeEndpoint>(endpoint: T, args?: {\n    [key: string]: any;\n    parse?: false;\n    protobuf?: true;\n    serialized_data?: any;\n    skip_auth_check?: boolean\n  }): Promise<ApiResponse>;\n  async execute<T extends InnertubeEndpoint>(endpoint: T, args?: {\n    [key: string]: any;\n    parse?: boolean;\n    protobuf?: boolean;\n    serialized_data?: any;\n    skip_auth_check?: boolean\n  }): Promise<ParsedResponse<T> | ApiResponse> {\n    let data;\n\n    if (args && !args.protobuf) {\n      data = { ...args };\n\n      if (Reflect.has(data, 'browseId') && !args.skip_auth_check) {\n        if (this.#needsLogin(data.browseId) && !this.session.logged_in)\n          throw new InnertubeError('You must be signed in to perform this operation.');\n      }\n\n      if (Reflect.has(data, 'skip_auth_check'))\n        delete data.skip_auth_check;\n\n      if (Reflect.has(data, 'override_endpoint'))\n        delete data.override_endpoint;\n\n      if (Reflect.has(data, 'parse'))\n        delete data.parse;\n\n      if (Reflect.has(data, 'request'))\n        delete data.request;\n\n      if (Reflect.has(data, 'clientActions'))\n        delete data.clientActions;\n\n      if (Reflect.has(data, 'settingItemIdForClient'))\n        delete data.settingItemIdForClient;\n\n      if (Reflect.has(data, 'action')) {\n        data.actions = [ data.action ];\n        delete data.action;\n      }\n\n      if (Reflect.has(data, 'boolValue')) {\n        data.newValue = { boolValue: data.boolValue };\n        delete data.boolValue;\n      }\n\n      if (Reflect.has(data, 'token')) {\n        data.continuation = data.token;\n        delete data.token;\n      }\n\n      if (data?.client === 'YTMUSIC') {\n        data.isAudioOnly = true;\n      }\n    } else if (args) {\n      data = args.serialized_data;\n    }\n\n    const target_endpoint = Reflect.has(args || {}, 'override_endpoint') ? args?.override_endpoint : endpoint;\n\n    const response = await this.session.http.fetch(target_endpoint, {\n      method: 'POST',\n      body: args?.protobuf ? data : JSON.stringify((data || {})),\n      headers: {\n        'Content-Type': args?.protobuf ?\n          'application/x-protobuf' :\n          'application/json'\n      }\n    });\n\n    if (args?.parse) {\n      let parsed_response = Parser.parseResponse<ParsedResponse<T>>(await response.json());\n\n      // Handle redirects\n      if (this.#isBrowse(parsed_response) && parsed_response.on_response_received_actions?.[0]?.type === 'navigateAction') {\n        const navigate_action = parsed_response.on_response_received_actions.firstOfType(NavigateAction);\n        if (navigate_action) {\n          parsed_response = await navigate_action.endpoint.call(this, { parse: true });\n        }\n      }\n\n      return parsed_response;\n    }\n\n    // Mimics the Axios API using Fetch's Response object.\n    return {\n      success: response.ok,\n      status_code: response.status,\n      data: await response.json()\n    };\n  }\n\n  #isBrowse(response: IParsedResponse): response is IBrowseResponse {\n    return 'on_response_received_actions' in response;\n  }\n\n  #needsLogin(id: string) {\n    return [\n      'FElibrary',\n      'FEhistory',\n      'FEsubscriptions',\n      'FEchannels',\n      'FEplaylist_aggregation',\n      'FEmusic_listening_review',\n      'FEmusic_library_landing',\n      'SPaccount_overview',\n      'SPaccount_notifications',\n      'SPaccount_privacy',\n      'SPtime_watched'\n    ].includes(id);\n  }\n}", "import { OAuth2Error, Platform } from '../utils/Utils.js';\nimport { Log, Constants } from '../utils/index.js';\nimport type Session from './Session.js';\n\nconst TAG = 'OAuth2';\n\nexport type OAuth2ClientID = {\n  client_id: string;\n  client_secret: string;\n};\n\nexport type OAuth2Tokens = {\n  access_token: string;\n  expiry_date: string;\n  expires_in?: number;\n  refresh_token: string;\n  scope?: string;\n  token_type?: string;\n  client?: OAuth2ClientID;\n};\n\nexport type DeviceAndUserCode = {\n  device_code: string;\n  expires_in: number;\n  interval: number;\n  user_code: string;\n  verification_url: string;\n  error_code?: string;\n};\n\nexport type OAuth2AuthEventHandler = (data: { credentials: OAuth2Tokens; }) => void;\nexport type OAuth2AuthPendingEventHandler = (data: DeviceAndUserCode) => void;\nexport type OAuth2AuthErrorEventHandler = (err: OAuth2Error) => void;\n\nexport default class OAuth2 {\n  #session: Session;\n\n  public YTTV_URL: URL;\n  public AUTH_SERVER_CODE_URL: URL;\n  public AUTH_SERVER_TOKEN_URL: URL;\n  public AUTH_SERVER_REVOKE_TOKEN_URL: URL;\n\n  public client_id: OAuth2ClientID | undefined;\n  public oauth2_tokens: OAuth2Tokens | undefined;\n\n  constructor(session: Session) {\n    this.#session = session;\n    this.YTTV_URL = new URL('/tv', Constants.URLS.YT_BASE);\n    this.AUTH_SERVER_CODE_URL = new URL('/o/oauth2/device/code', Constants.URLS.YT_BASE);\n    this.AUTH_SERVER_TOKEN_URL = new URL('/o/oauth2/token', Constants.URLS.YT_BASE);\n    this.AUTH_SERVER_REVOKE_TOKEN_URL = new URL('/o/oauth2/revoke', Constants.URLS.YT_BASE);\n  }\n\n  async init(tokens?: OAuth2Tokens): Promise<void> {\n    if (tokens) {\n      this.setTokens(tokens);\n\n      if (this.shouldRefreshToken()) {\n        await this.refreshAccessToken();\n      }\n\n      this.#session.emit('auth', { credentials: this.oauth2_tokens });\n\n      return;\n    }\n\n    const loaded_from_cache = await this.#loadFromCache();\n\n    if (loaded_from_cache) {\n      Log.info(TAG, 'Loaded OAuth2 tokens from cache.', this.oauth2_tokens);\n      return;\n    }\n\n    if (!this.client_id)\n      this.client_id = await this.getClientID();\n\n    // Initialize OAuth2 flow\n    const device_and_user_code = await this.getDeviceAndUserCode();\n\n    this.#session.emit('auth-pending', device_and_user_code);\n\n    this.pollForAccessToken(device_and_user_code);\n  }\n\n  setTokens(tokens: OAuth2Tokens): void {\n    const tokensMod = tokens;\n\n    // Convert access token remaining lifetime to ISO string\n    if (tokensMod.expires_in) {\n      tokensMod.expiry_date = new Date(Date.now() + tokensMod.expires_in * 1000).toISOString();\n      delete tokensMod.expires_in; // We don't need this anymore\n    }\n\n    if (!this.validateTokens(tokensMod))\n      throw new OAuth2Error('Invalid tokens provided.');\n\n    this.oauth2_tokens = tokensMod;\n\n    if (tokensMod.client) {\n      Log.info(TAG, 'Using provided client id and secret.');\n      this.client_id = tokensMod.client;\n    }\n  }\n\n  async cacheCredentials(): Promise<void> {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(JSON.stringify(this.oauth2_tokens));\n    await this.#session.cache?.set('youtubei_oauth_credentials', data.buffer);\n  }\n\n  async #loadFromCache(): Promise<boolean> {\n    const data = await this.#session.cache?.get('youtubei_oauth_credentials');\n    if (!data)\n      return false;\n\n    const decoder = new TextDecoder();\n    const credentials = JSON.parse(decoder.decode(data));\n\n    this.setTokens(credentials);\n\n    this.#session.emit('auth', { credentials });\n\n    return true;\n  }\n\n  async removeCache(): Promise<void> {\n    await this.#session.cache?.remove('youtubei_oauth_credentials');\n  }\n\n  pollForAccessToken(device_and_user_code: DeviceAndUserCode): void {\n    if (!this.client_id)\n      throw new OAuth2Error('Client ID is missing.');\n\n    const { device_code, interval } = device_and_user_code;\n    const { client_id, client_secret } = this.client_id;\n\n    const payload = {\n      client_id,\n      client_secret,\n      code: device_code,\n      grant_type: 'http://oauth.net/grant_type/device/1.0'\n    };\n\n    const connInterval = setInterval(async () => {\n      const response = await this.#http.fetch_function(this.AUTH_SERVER_TOKEN_URL, {\n        body: JSON.stringify(payload),\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        }\n      });\n\n      const response_data = await response.json();\n\n      if (response_data.error) {\n        switch (response_data.error) {\n          case 'access_denied':\n            this.#session.emit('auth-error', new OAuth2Error('Access was denied.', response_data));\n            clearInterval(connInterval);\n            break;\n          case 'expired_token':\n            this.#session.emit('auth-error', new OAuth2Error('The device code has expired.', response_data));\n            clearInterval(connInterval);\n            break;\n          case 'authorization_pending':\n          case 'slow_down':\n            Log.info(TAG, 'Polling for access token...');\n            break;\n          default:\n            this.#session.emit('auth-error', new OAuth2Error('Server returned an unexpected error.', response_data));\n            clearInterval(connInterval);\n            break;\n        }\n        return;\n      }\n\n      this.setTokens(response_data);\n\n      this.#session.emit('auth', { credentials: this.oauth2_tokens });\n\n      clearInterval(connInterval);\n    }, interval * 1000);\n  }\n\n  async revokeCredentials(): Promise<Response | undefined> {\n    if (!this.oauth2_tokens)\n      throw new OAuth2Error('Access token not found');\n\n    await this.removeCache();\n\n    const url = this.AUTH_SERVER_REVOKE_TOKEN_URL;\n    url.searchParams.set('token', this.oauth2_tokens.access_token);\n\n    return this.#session.http.fetch_function(url, { method: 'POST' });\n  }\n\n  async refreshAccessToken(): Promise<void> {\n    if (!this.client_id)\n      this.client_id = await this.getClientID();\n\n    if (!this.oauth2_tokens)\n      throw new OAuth2Error('No tokens available to refresh.');\n\n    const { client_id, client_secret } = this.client_id;\n    const { refresh_token } = this.oauth2_tokens;\n\n    const payload = {\n      client_id,\n      client_secret,\n      refresh_token,\n      grant_type: 'refresh_token'\n    };\n\n    const response = await this.#http.fetch_function(this.AUTH_SERVER_TOKEN_URL, {\n      body: JSON.stringify(payload),\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (!response.ok)\n      throw new OAuth2Error(`Failed to refresh access token: ${response.status}`);\n\n    const response_data = await response.json();\n\n    if (response_data.error_code)\n      throw new OAuth2Error('Authorization server returned an error', response_data);\n\n    this.oauth2_tokens.access_token = response_data.access_token;\n    this.oauth2_tokens.expiry_date = new Date(Date.now() + response_data.expires_in * 1000).toISOString();\n\n    this.#session.emit('update-credentials', { credentials: this.oauth2_tokens });\n  }\n\n  async getDeviceAndUserCode(): Promise<DeviceAndUserCode> {\n    if (!this.client_id)\n      throw new OAuth2Error('Client ID is missing.');\n\n    const { client_id } = this.client_id;\n\n    const payload = {\n      client_id,\n      scope: 'http://gdata.youtube.com https://www.googleapis.com/auth/youtube-paid-content',\n      device_id: Platform.shim.uuidv4(),\n      device_model: 'ytlr::'\n    };\n\n    const response = await this.#http.fetch_function(this.AUTH_SERVER_CODE_URL, {\n      body: JSON.stringify(payload),\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (!response.ok)\n      throw new OAuth2Error(`Failed to get device/user code: ${response.status}`);\n\n    const response_data = await response.json();\n\n    if (response_data.error_code)\n      throw new OAuth2Error('Authorization server returned an error', response_data);\n\n    return response_data;\n  }\n\n  async getClientID(): Promise<OAuth2ClientID> {\n    const yttv_response = await this.#http.fetch_function(this.YTTV_URL, {\n      headers: {\n        'User-Agent': 'Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version',\n        'Referer': 'https://www.youtube.com/tv',\n        'Accept-Language': 'en-US'\n      }\n    });\n\n    if (!yttv_response.ok)\n      throw new OAuth2Error(`Failed to get client ID: ${yttv_response.status}`);\n\n    const yttv_response_data = await yttv_response.text();\n\n    let script_url_body: RegExpExecArray | null;\n\n    if ((script_url_body = Constants.OAUTH.REGEX.TV_SCRIPT.exec(yttv_response_data)) !== null) {\n      Log.info(TAG, `Got YouTubeTV script URL (${script_url_body[1]})`);\n\n      const script_response = await this.#http.fetch(script_url_body[1], { baseURL: Constants.URLS.YT_BASE });\n\n      if (!script_response.ok)\n        throw new OAuth2Error(`TV script request failed with status code ${script_response.status}`);\n\n      const script_response_data = await script_response.text();\n\n      const client_identity = script_response_data\n        .match(Constants.OAUTH.REGEX.CLIENT_IDENTITY);\n\n      if (!client_identity || !client_identity.groups)\n        throw new OAuth2Error('Could not obtain client ID.');\n\n      const { client_id, client_secret } = client_identity.groups;\n\n      Log.info(TAG, `Client identity retrieved (clientId=${client_id}, clientSecret=${client_secret}).`);\n\n      return {\n        client_id,\n        client_secret\n      };\n    }\n\n    throw new OAuth2Error('Could not obtain script URL.');\n  }\n\n  shouldRefreshToken(): boolean {\n    if (!this.oauth2_tokens)\n      return false;\n    return Date.now() > new Date(this.oauth2_tokens.expiry_date).getTime();\n  }\n\n  validateTokens(tokens: OAuth2Tokens): boolean {\n    return !(!tokens.access_token || !tokens.refresh_token || !tokens.expiry_date);\n  }\n\n  get #http() {\n    return this.#session.http;\n  }\n}", "import type { FetchFunction, ICache } from '../types/index.js';\nimport { Constants, BinarySerializer, Log } from '../utils/index.js';\n\nimport {\n  getRandomUserAgent,\n  getStringBetweenStrings,\n  getNsigProcessorFn,\n  Platform,\n  PlayerError\n} from '../utils/Utils.js';\n\nimport { JsExtractor, JsAnalyzer } from '../utils/index.js';\nimport { nsigMatcher, timestampMatcher } from '../utils/javascript/matchers.js';\n\nimport type { ExtractionConfig } from '../utils/javascript/JsAnalyzer.js';\nimport type { BuildScriptResult } from '../utils/javascript/JsExtractor.js';\n\nimport packageInfo from '../../package.json' with { type: 'json' };\n\nconst TAG = 'Player';\n\ninterface SerializablePlayer {\n  playerId: string;\n  signatureTimestamp: number;\n  libraryVersion: string;\n  data?: BuildScriptResult;\n}\n\ninterface PlayerInitializationOptions {\n  cache?: ICache;\n  signature_timestamp: number;\n  data: BuildScriptResult;\n}\n\n/**\n * Represents YouTube's player script. This is required to decipher signatures.\n */\nexport default class Player {\n  public po_token?: string;\n\n  constructor(public player_id: string, public signature_timestamp: number, public data?: BuildScriptResult) { /** no-op */ }\n\n  public static async create(\n    cache: ICache | undefined,\n    fetch: FetchFunction = Platform.shim.fetch,\n    po_token?: string, player_id?: string\n  ): Promise<Player> {\n    if (!player_id) {\n      const url = new URL('/iframe_api', Constants.URLS.YT_BASE);\n      const res = await fetch(url);\n\n      if (!res.ok)\n        throw new PlayerError(`Failed to get player id: ${res.status} (${res.statusText})`);\n\n      const js = await res.text();\n\n      player_id = getStringBetweenStrings(js, 'player\\\\/', '\\\\/');\n    }\n\n    Log.info(TAG, `Using player id (${player_id}). Checking for cached players..`);\n\n    if (!player_id)\n      throw new PlayerError('Failed to get player id');\n\n    // We have the player id, now we can check if we have a cached player.\n    if (cache) {\n      const cached_player = await Player.fromCache(cache, player_id);\n      if (cached_player) {\n        Log.info(TAG, 'Found up-to-date player data in cache.');\n        cached_player.po_token = po_token;\n        return cached_player;\n      }\n    }\n\n    const player_url = new URL(`/s/player/${player_id}/player_es6.vflset/en_US/base.js`, Constants.URLS.YT_BASE);\n\n    Log.info(TAG, `Could not find any cached player. Will download a new player from ${player_url}.`);\n\n    const player_res = await fetch(player_url, {\n      headers: {\n        'user-agent': getRandomUserAgent('desktop')\n      }\n    });\n\n    if (!player_res.ok) {\n      throw new PlayerError(`Failed to get player data: ${player_res.status}`);\n    }\n\n    const player_js = await player_res.text();\n\n    const nsigFunctionName = 'nsigFunction';\n    const timestampVarName = 'signatureTimestampVar';\n\n    const extractions: ExtractionConfig[] = [\n      { friendlyName: nsigFunctionName, match: nsigMatcher },\n      { friendlyName: timestampVarName, match: timestampMatcher, collectDependencies: false }\n    ];\n\n    const jsAnalyzer = new JsAnalyzer(player_js, { extractions });\n    const jsExtractor = new JsExtractor(jsAnalyzer);\n\n    const result = jsExtractor.buildScript({\n      disallowSideEffectInitializers: true,\n      exportRawValues: true,\n      rawValueOnly: [ timestampVarName ]\n    });\n\n    if (result.exportedRawValues && !(timestampVarName in result.exportedRawValues)) {\n      Log.warn(TAG, 'Failed to extract signature timestamp.');\n    }\n\n    if (!result.exported.includes(nsigFunctionName)) {\n      Log.warn(TAG, 'Failed to extract n/sig decipher function.');\n    }\n\n    const signatureTimestamp = result.exportedRawValues?.[timestampVarName];\n\n    const player = await Player.fromSource(player_id, {\n      cache,\n      signature_timestamp: parseInt(signatureTimestamp) || 0,\n      data: result\n    });\n\n    player.po_token = po_token;\n\n    return player;\n  }\n\n  async decipher(url?: string, signature_cipher?: string, cipher?: string, this_response_nsig_cache?: Map<string, string>): Promise<string> {\n    url = url || signature_cipher || cipher;\n\n    if (!url)\n      throw new PlayerError('No valid URL to decipher');\n\n    const args = new URLSearchParams(url);\n    const url_components = new URL(args.get('url') || url);\n\n    const n = url_components.searchParams.get('n');\n    const s = args.get('s');\n    const sp = args.get('sp');\n\n    if (this.data && ((signature_cipher || cipher) || n)) {\n      const eval_args: { sig?: string | null; n?: string | null; sp?: string | null } = {};\n\n      if (signature_cipher || cipher) {\n        eval_args.sig = s;\n        eval_args.sp = sp;\n      }\n\n      if (n) {\n        if (this_response_nsig_cache?.has(n)) {\n          const nsig = this_response_nsig_cache.get(n) as string;\n          url_components.searchParams.set('n', nsig);\n        } else {\n          eval_args.n = n;\n        }\n      }\n\n      if (Object.keys(eval_args).length > 0) {\n        // Shallow copy to avoid mutating the original data.\n        const data = { ...this.data };\n\n        data.output = `${data.output}\\n${getNsigProcessorFn(eval_args.n, eval_args.sp, eval_args.sig)}`;\n\n        const result = await Platform.shim.eval(data, eval_args) as Record<string, unknown>;\n\n        if (typeof result !== 'object' || result === null) {\n          throw new PlayerError('Got invalid result from player script evaluation.');\n        }\n\n        if (typeof eval_args.sig === 'string') {\n          const signatureResult = result.sig;\n\n          Log.info(TAG, `Transformed signature from ${s} to ${signatureResult}.`);\n\n          if (typeof signatureResult !== 'string')\n            throw new PlayerError('Got invalid signature from player script evaluation.');\n\n          if (sp) {\n            url_components.searchParams.set(sp, signatureResult);\n          } else {\n            url_components.searchParams.set('signature', signatureResult);\n          }\n        }\n\n        if (typeof eval_args.n === 'string') {\n          const nResult = result.n;\n          Log.info(TAG, `Transformed n from ${n} to ${nResult}.`);\n\n          if (typeof nResult !== 'string')\n            throw new PlayerError('Failed to decipher nsig');\n\n          if (nResult.startsWith('enhanced_except_')) {\n            Log.warn(TAG, `Decipher script returned an error (n=${n}):`, nResult);\n          } else if (this_response_nsig_cache) {\n            this_response_nsig_cache.set(n as string, nResult);\n          }\n\n          url_components.searchParams.set('n', nResult);\n        }\n      }\n    }\n\n    // @NOTE: SABR requests should include the PoToken (not base64d, but as bytes!) in the payload.\n    if (url_components.searchParams.get('sabr') !== '1' && this.po_token)\n      url_components.searchParams.set('pot', this.po_token);\n\n    const client = url_components.searchParams.get('c');\n\n    switch (client) {\n      case 'WEB':\n        url_components.searchParams.set('cver', Constants.CLIENTS.WEB.VERSION);\n        break;\n      case 'MWEB':\n        url_components.searchParams.set('cver', Constants.CLIENTS.MWEB.VERSION);\n        break;\n      case 'WEB_REMIX':\n        url_components.searchParams.set('cver', Constants.CLIENTS.YTMUSIC.VERSION);\n        break;\n      case 'WEB_KIDS':\n        url_components.searchParams.set('cver', Constants.CLIENTS.WEB_KIDS.VERSION);\n        break;\n      case 'TVHTML5':\n        url_components.searchParams.set('cver', Constants.CLIENTS.TV.VERSION);\n        break;\n      case 'TVHTML5_SIMPLY':\n        url_components.searchParams.set('cver', Constants.CLIENTS.TV_SIMPLY.VERSION);\n        break;\n      case 'TVHTML5_SIMPLY_EMBEDDED_PLAYER':\n        url_components.searchParams.set('cver', Constants.CLIENTS.TV_EMBEDDED.VERSION);\n        break;\n      case 'WEB_EMBEDDED_PLAYER':\n        url_components.searchParams.set('cver', Constants.CLIENTS.WEB_EMBEDDED.VERSION);\n        break;\n    }\n\n    const result = url_components.toString();\n\n    Log.info(TAG, `Deciphered URL: ${result}`);\n\n    return url_components.toString();\n  }\n\n  static async fromCache(cache: ICache, player_id: string): Promise<Player | null> {\n    const buffer = await cache.get(player_id);\n\n    if (!buffer)\n      return null;\n\n    try {\n      const deserializedCache = BinarySerializer.deserialize<SerializablePlayer>(new Uint8Array(buffer));\n\n      if (deserializedCache.libraryVersion !== packageInfo.version) {\n        Log.warn(TAG, `Cached player data is from a different library version (${deserializedCache.libraryVersion}). Ignoring it.`);\n        return null;\n      }\n\n      return new Player(deserializedCache.playerId, deserializedCache.signatureTimestamp, deserializedCache.data);\n    } catch (e) {\n      Log.error(TAG, 'Failed to deserialize player data from cache:', e);\n      return null;\n    }\n  }\n\n  static async fromSource(player_id: string, options: PlayerInitializationOptions): Promise<Player> {\n    const player = new Player(player_id, options.signature_timestamp, options.data);\n    await player.cache(options.cache);\n    return player;\n  }\n\n  async cache(cache?: ICache): Promise<void> {\n    if (!cache || !this.data)\n      return;\n\n    const buffer = BinarySerializer.serialize({\n      playerId: this.player_id,\n      signatureTimestamp: this.signature_timestamp,\n      libraryVersion: packageInfo.version,\n      data: this.data\n    });\n\n    await cache.set(this.player_id, buffer);\n  }\n\n  get url(): string {\n    return new URL(`/s/player/${this.player_id}/player_ias.vflset/en_US/base.js`, Constants.URLS.YT_BASE).toString();\n  }\n\n  static get LIBRARY_VERSION(): number {\n    return 14;\n  }\n}", "import Actions from './Actions.js';\nimport OAuth2 from './OAuth2.js';\nimport Player from './Player.js';\nimport * as Constants from '../utils/Constants.js';\nimport { EventEmitter, HTTPClient, BinarySerializer, Log, ProtoUtils } from '../utils/index.js';\nimport {\n  generateRandomString, getRandomUserAgent,\n  InnertubeError, Platform, SessionError\n} from '../utils/Utils.js';\nimport packageInfo from '../../package.json' with { type: 'json' };\n\nimport type { DeviceCategory } from '../utils/Utils.js';\nimport type { FetchFunction, ICache } from '../types/index.js';\nimport type {\n  OAuth2Tokens,\n  OAuth2AuthErrorEventHandler,\n  OAuth2AuthPendingEventHandler,\n  OAuth2AuthEventHandler\n} from './OAuth2.js';\nimport type { IRawResponse } from '../parser/index.js';\n\nexport enum ClientType {\n  WEB = 'WEB',\n  MWEB = 'MWEB',\n  KIDS = 'WEB_KIDS',\n  MUSIC = 'WEB_REMIX',\n  IOS = 'iOS',\n  ANDROID = 'ANDROID',\n  ANDROID_VR = 'ANDROID_VR',\n  ANDROID_MUSIC = 'ANDROID_MUSIC',\n  ANDROID_CREATOR = 'ANDROID_CREATOR',\n  TV = 'TVHTML5',\n  TV_SIMPLY = 'TVHTML5_SIMPLY',\n  TV_EMBEDDED = 'TVHTML5_SIMPLY_EMBEDDED_PLAYER',\n  WEB_EMBEDDED = 'WEB_EMBEDDED_PLAYER',\n  WEB_CREATOR = 'WEB_CREATOR'\n}\n\nexport type Context = {\n  client: {\n    hl: string;\n    gl: string;\n    remoteHost?: string;\n    screenDensityFloat?: number;\n    screenHeightPoints?: number;\n    screenPixelDensity?: number;\n    screenWidthPoints?: number;\n    visitorData?: string;\n    clientName: string;\n    clientVersion: string;\n    clientScreen?: string,\n    androidSdkVersion?: number;\n    osName: string;\n    osVersion: string;\n    platform: string;\n    clientFormFactor: string;\n    userInterfaceTheme?: string;\n    timeZone: string;\n    userAgent: string;\n    browserName?: string;\n    browserVersion?: string;\n    originalUrl?: string;\n    deviceMake: string;\n    deviceModel: string;\n    deviceExperimentId?: string;\n    rolloutToken?: string;\n    utcOffsetMinutes: number;\n    mainAppWebInfo?: {\n      graftUrl: string;\n      pwaInstallabilityStatus: string;\n      webDisplayMode: string;\n      isWebNativeShareAvailable: boolean;\n    };\n    memoryTotalKbytes?: string;\n    configInfo?: {\n      appInstallData?: string;\n      coldConfigData?: string;\n      coldHashData?: string;\n      hotHashData?: string;\n    },\n    kidsAppInfo?: {\n      categorySettings: {\n        enabledCategories: string[];\n      };\n      contentSettings: {\n        corpusPreference: string;\n        kidsNoSearchMode: string;\n      };\n    };\n  };\n  user: {\n    enableSafetyMode: boolean;\n    lockedSafetyMode: boolean;\n    onBehalfOfUser?: string;\n  };\n  thirdParty?: {\n    embedUrl: string;\n  };\n  request?: {\n    useSsl: boolean;\n    internalExperimentFlags: any[];\n  };\n}\n\ntype ContextData = {\n  hl: string;\n  gl: string;\n  remote_host?: string;\n  visitor_data: string;\n  client_name: string;\n  client_version: string;\n  user_agent: string;\n  os_name: string;\n  os_version: string;\n  device_category: string;\n  time_zone: string;\n  enable_safety_mode: boolean;\n  browser_name?: string;\n  browser_version?: string;\n  app_install_data?: string;\n  device_make: string;\n  device_model: string;\n  on_behalf_of_user?: string;\n  device_experiment_id?: string;\n  rollout_token?: string;\n}\n\nexport type SessionOptions = {\n  /**\n   * Language.\n   */\n  lang?: string;\n  /**\n   * Geolocation.\n   */\n  location?: string;\n  /**\n   * User agent (InnerTube requests only).\n   */\n  user_agent?: string;\n  /**\n   * The account index to use. This is useful if you have multiple accounts logged in.\n   *\n   * **NOTE:** Only works if you are signed in with cookies.\n   */\n  account_index?: number;\n  /**\n   * Specify the Page ID of the YouTube profile/channel to use, if the logged-in account has multiple profiles.\n   */\n  on_behalf_of_user?: string;\n  /**\n   * Specifies whether to retrieve the JS player. Disabling this will make session creation faster.\n   *\n   * **NOTE:** Deciphering formats is not possible without the JS player.\n   */\n  retrieve_player?: boolean;\n  /**\n   * Specifies whether to enable safety mode. This will prevent the session from loading any potentially unsafe content.\n   */\n  enable_safety_mode?: boolean;\n  /**\n   * Specifies whether to retrieve the InnerTube config. Useful for \"onesie\" requests.\n   */\n  retrieve_innertube_config?: boolean;\n  /**\n   * Specifies whether to generate the session data locally or retrieve it from YouTube.\n   * This can be useful if you need more performance.\n   *\n   * **NOTE:** If you are using the cache option and a session has already been generated, this will be ignored.\n   * If you want to force a new session to be generated, you must clear the cache or disable session caching.\n   */\n  generate_session_locally?: boolean;\n  /**\n   * If set to `true`, session creation will fail if it's not possible to retrieve session data from YouTube.\n   * If `false`, a local fallback will be used.\n   */\n  fail_fast?: boolean;\n  /**\n   * Specifies whether the session data should be cached.\n   */\n  enable_session_cache?: boolean;\n  /**\n   * Platform to use for the session.\n   */\n  device_category?: DeviceCategory;\n  /**\n   * InnerTube client type.\n   */\n  client_type?: ClientType;\n  /**\n   * The time zone.\n   */\n  timezone?: string;\n  /**\n   * Used to cache algorithms, session data, and OAuth2 tokens.\n   */\n  cache?: ICache;\n  /**\n   * YouTube cookies.\n   */\n  cookie?: string;\n  /**\n   * Setting this to a valid and persistent visitor data string will allow YouTube to give this session tailored content even when not logged in.\n   * A good way to get a valid one is by either grabbing it from a browser or calling InnerTube's `/visitor_id` endpoint.\n   */\n  visitor_data?: string;\n  /**\n   * Fetch function to use.\n   */\n  fetch?: FetchFunction;\n  /**\n   * Session bound Proof of Origin Token. This is an attestation token generated by BotGuard/DroidGuard. It is used to confirm that the request is coming from a real client.\n   */\n  po_token?: string;\n  /**\n   * Player ID override.\n   * In most cases, this isn't necessary; but when YouTube introduces breaking changes,\n   * forcing an older Player ID can help work around temporary issues.\n   */\n  player_id?: string;\n}\n\nexport type SessionData = {\n  context: Context;\n  api_key: string;\n  api_version: string;\n  config_data?: string;\n}\n\ninterface SerializableSession extends SessionData {\n  library_version: number;\n}\n\nexport type SWSessionData = {\n  context_data: ContextData;\n  api_key: string;\n  api_version: string;\n}\n\nexport type SessionArgs = {\n  lang: string;\n  location: string;\n  time_zone: string;\n  user_agent: string;\n  device_category: DeviceCategory;\n  client_name: ClientType;\n  enable_safety_mode: boolean;\n  visitor_data: string;\n  on_behalf_of_user: string | undefined;\n}\n\nconst TAG = 'Session';\n\n/**\n * Represents an InnerTube session. This holds all the data needed to make requests to YouTube.\n */\nexport default class Session extends EventEmitter {\n  public oauth: OAuth2;\n  public http: HTTPClient;\n  public logged_in: boolean;\n  public actions: Actions;\n  public user_agent?: string;\n\n  constructor(\n    public context: Context,\n    public api_key: string,\n    public api_version: string,\n    public account_index: number,\n    public config_data?: string,\n    public player?: Player,\n    public cookie?: string,\n    fetch?: FetchFunction,\n    public cache?: ICache,\n    public po_token?: string\n  ) {\n    super();\n    this.http = new HTTPClient(this, cookie, fetch);\n    this.actions = new Actions(this);\n    this.oauth = new OAuth2(this);\n    this.logged_in = !!cookie;\n    this.user_agent = context.client.userAgent;\n  }\n\n  on(type: 'auth', listener: OAuth2AuthEventHandler): void;\n  on(type: 'auth-pending', listener: OAuth2AuthPendingEventHandler): void;\n  on(type: 'auth-error', listener: OAuth2AuthErrorEventHandler): void;\n  on(type: 'update-credentials', listener: OAuth2AuthEventHandler): void;\n\n  on(type: string, listener: (...args: any[]) => void): void {\n    super.on(type, listener);\n  }\n\n  once(type: 'auth', listener: OAuth2AuthEventHandler): void;\n  once(type: 'auth-pending', listener: OAuth2AuthPendingEventHandler): void;\n  once(type: 'auth-error', listener: OAuth2AuthErrorEventHandler): void;\n\n  once(type: string, listener: (...args: any[]) => void): void {\n    super.once(type, listener);\n  }\n\n  static async create(options: SessionOptions = {}) {\n    const { context, api_key, api_version, account_index, config_data } = await Session.getSessionData(\n      options.lang,\n      options.location,\n      options.account_index,\n      options.visitor_data,\n      options.user_agent,\n      options.enable_safety_mode,\n      options.generate_session_locally,\n      options.fail_fast,\n      options.device_category,\n      options.client_type,\n      options.timezone,\n      options.fetch,\n      options.on_behalf_of_user,\n      options.cache,\n      options.enable_session_cache,\n      options.po_token,\n      options.retrieve_innertube_config\n    );\n\n    return new Session(\n      context, api_key, api_version, account_index, config_data,\n      options.retrieve_player === false ? undefined : await Player.create(options.cache, options.fetch, options.po_token, options.player_id),\n      options.cookie, options.fetch, options.cache, options.po_token\n    );\n  }\n\n  /**\n   * Retrieves session data from cache.\n   * @param cache - A valid cache implementation.\n   * @param session_args - User provided session arguments.\n   */\n  static async fromCache(cache: ICache, session_args: SessionArgs): Promise<SessionData | null> {\n    const buffer = await cache.get('innertube_session_data');\n\n    if (!buffer)\n      return null;\n\n    try {\n      const session_data = BinarySerializer.deserialize<SerializableSession>(new Uint8Array(buffer));\n\n      if (session_data.library_version !== parseInt(packageInfo.version.split('.', 1)[0])) {\n        Log.warn(TAG, `Cached session data is from a different library version (${session_data.library_version}). Regenerating session data.`);\n        return null;\n      }\n\n      if (session_args.visitor_data) {\n        session_data.context.client.visitorData = session_args.visitor_data;\n      }\n\n      if (session_args.lang)\n        session_data.context.client.hl = session_args.lang;\n\n      if (session_args.location)\n        session_data.context.client.gl = session_args.location;\n\n      if (session_args.on_behalf_of_user)\n        session_data.context.user.onBehalfOfUser = session_args.on_behalf_of_user;\n\n      if (session_args.user_agent)\n        session_data.context.client.userAgent = session_args.user_agent;\n\n      if (session_args.client_name) {\n        const client = Object.values(Constants.CLIENTS).find((c) => c.NAME === session_args.client_name);\n        if (client) {\n          session_data.context.client.clientName = client.NAME;\n          session_data.context.client.clientVersion = client.VERSION;\n        } else Log.warn(TAG, `Unknown client name: ${session_args.client_name}.`);\n      }\n\n      session_data.context.client.timeZone = session_args.time_zone;\n      session_data.context.client.platform = session_args.device_category.toUpperCase();\n      session_data.context.user.enableSafetyMode = session_args.enable_safety_mode;\n\n      return session_data;\n    } catch (error) {\n      Log.error(TAG, 'Failed to deserialize session data from cache.', error);\n      return null;\n    }\n  }\n\n  static async getSessionData(\n    lang = '',\n    location = '',\n    account_index = 0,\n    visitor_data = '',\n    user_agent: string = getRandomUserAgent('desktop'),\n    enable_safety_mode = false,\n    generate_session_locally = false,\n    fail_fast = false,\n    device_category: DeviceCategory = 'desktop',\n    client_name: ClientType = ClientType.WEB,\n    tz: string = Intl.DateTimeFormat().resolvedOptions().timeZone,\n    fetch: FetchFunction = Platform.shim.fetch,\n    on_behalf_of_user?: string,\n    cache?: ICache,\n    enable_session_cache = true,\n    po_token?: string,\n    retrieve_innertube_config = true\n  ) {\n    const session_args = {\n      lang,\n      location,\n      time_zone: tz,\n      user_agent,\n      device_category,\n      client_name,\n      enable_safety_mode,\n      visitor_data,\n      on_behalf_of_user,\n      po_token\n    };\n\n    let session_data: SessionData | undefined;\n\n    if (cache && enable_session_cache) {\n      const cached_session_data = await this.fromCache(cache, session_args);\n      if (cached_session_data) {\n        Log.info(TAG, 'Found session data in cache.');\n        session_data = cached_session_data;\n      }\n    }\n\n    if (!session_data) {\n      Log.info(TAG, 'Generating session data.');\n\n      let api_key: string = Constants.CLIENTS.WEB.API_KEY;\n      let api_version: string = Constants.CLIENTS.WEB.API_VERSION;\n\n      let context_data: ContextData = {\n        hl: lang || 'en',\n        gl: location || 'US',\n        remote_host: '',\n        user_agent: user_agent,\n        visitor_data: visitor_data || ProtoUtils.encodeVisitorData(generateRandomString(11), Math.floor(Date.now() / 1000)),\n        client_name: client_name,\n        client_version: Object.values(Constants.CLIENTS).find((v) => v.NAME === client_name)?.VERSION ?? Constants.CLIENTS.WEB.VERSION,\n        device_category: device_category.toUpperCase(),\n        os_name: 'Windows',\n        os_version: '10.0',\n        time_zone: tz,\n        browser_name: 'Chrome',\n        browser_version: '125.0.0.0',\n        device_make: '',\n        device_model: '',\n        enable_safety_mode: enable_safety_mode\n      };\n\n      if (!generate_session_locally) {\n        try {\n          const sw_session_data = await this.#getSessionData(session_args, fetch);\n          api_key = sw_session_data.api_key;\n          api_version = sw_session_data.api_version;\n          context_data = sw_session_data.context_data;\n        } catch (error) {\n          if (fail_fast)\n            throw error;\n          Log.error(TAG, 'Failed to retrieve session data from server. Session data generated locally will be used instead.', error);\n        }\n      }\n\n      if (on_behalf_of_user) {\n        context_data.on_behalf_of_user = on_behalf_of_user;\n      }\n\n      session_data = {\n        api_key,\n        api_version,\n        context: this.#buildContext(context_data)\n      };\n\n      if (retrieve_innertube_config) {\n        try {\n          Log.info(TAG, 'Retrieving InnerTube config data.');\n\n          const config_headers: Record<string, any> = {\n            'Accept-Language': lang,\n            'Accept': '*/*',\n            'Referer': Constants.URLS.YT_BASE,\n            'X-Goog-Visitor-Id': context_data.visitor_data,\n            'X-Origin': Constants.URLS.YT_BASE,\n            'X-Youtube-Client-Version': context_data.client_version\n          };\n\n          if (Platform.shim.server) {\n            config_headers['User-Agent'] = user_agent;\n            config_headers['Origin'] = Constants.URLS.YT_BASE;\n          }\n\n          const config = await fetch(`${Constants.URLS.API.PRODUCTION_1}v1/config?prettyPrint=false`, {\n            headers: config_headers,\n            method: 'POST',\n            body: JSON.stringify({ context: session_data.context })\n          });\n\n          const configJson = await config.json() as IRawResponse;\n\n          const coldConfigData = configJson.responseContext?.globalConfigGroup?.rawColdConfigGroup?.configData;\n          const coldHashData = configJson.responseContext?.globalConfigGroup?.coldHashData;\n          const hotHashData = configJson.responseContext?.globalConfigGroup?.hotHashData;\n\n          session_data.config_data = configJson.configData;\n          session_data.context.client.configInfo = {\n            ...session_data.context.client.configInfo,\n            coldConfigData,\n            coldHashData,\n            hotHashData\n          };\n        } catch (error) {\n          Log.error(TAG, 'Failed to retrieve config data.', error);\n        }\n      }\n\n      if (enable_session_cache)\n        await this.#storeSession(session_data, cache);\n    }\n\n    Log.debug(TAG, 'Session data:', session_data);\n\n    return { ...session_data, account_index };\n  }\n\n  static async #storeSession(session_data: SessionData, cache?: ICache) {\n    if (!cache) return;\n\n    Log.info(TAG, 'Compressing and caching session data.');\n\n    const buffer = BinarySerializer.serialize({\n      ...session_data,\n      library_version: parseInt(packageInfo.version)\n    });\n\n    await cache.set('innertube_session_data', buffer);\n  }\n\n  static async #getSessionData(options: SessionArgs, fetch: FetchFunction = Platform.shim.fetch): Promise<SWSessionData> {\n    let visitor_id = generateRandomString(11);\n\n    if (options.visitor_data)\n      visitor_id = this.#getVisitorID(options.visitor_data);\n\n    const url = new URL('/sw.js_data', Constants.URLS.YT_BASE);\n\n    const res = await fetch(url, {\n      headers: {\n        'Accept-Language': options.lang || 'en-US',\n        'User-Agent': options.user_agent,\n        'Accept': '*/*',\n        'Referer': `${Constants.URLS.YT_BASE}/sw.js`,\n        'Cookie': `PREF=tz=${options.time_zone.replace('/', '.')};VISITOR_INFO1_LIVE=${visitor_id};`\n      }\n    });\n\n    if (!res.ok)\n      throw new SessionError(`Failed to retrieve session data: ${res.status}`);\n\n    const text = await res.text();\n\n    if (!text.startsWith(')]}\\''))\n      throw new SessionError('Invalid JSPB response');\n\n    const data = JSON.parse(text.replace(/^\\)\\]\\}'/, ''));\n\n    const ytcfg = data[0][2];\n\n    const api_version = Constants.CLIENTS.WEB.API_VERSION;\n\n    const [ [ device_info ], api_key ] = ytcfg;\n\n    const config_info = device_info[61];\n    const app_install_data = config_info[config_info.length - 1];\n\n    const context_info = {\n      hl: options.lang || device_info[0],\n      gl: options.location || device_info[1],\n      remote_host: device_info[3],\n      visitor_data: options.visitor_data || device_info[13],\n      user_agent: options.user_agent,\n      client_name: options.client_name,\n      client_version: options.client_name === 'WEB' ? device_info[16] : Object.values(Constants.CLIENTS).find(\n        (c) => c.NAME === options.client_name\n      )?.VERSION || device_info[16],\n      os_name: device_info[17],\n      os_version: device_info[18],\n      time_zone: device_info[79] || options.time_zone,\n      device_category: options.device_category,\n      browser_name: device_info[86],\n      browser_version: device_info[87],\n      device_make: device_info[11],\n      device_model: device_info[12],\n      app_install_data: app_install_data,\n      device_experiment_id: device_info[103],\n      rollout_token: device_info[107],\n      enable_safety_mode: options.enable_safety_mode\n    };\n\n    return { context_data: context_info, api_key, api_version };\n  }\n\n  static #buildContext(args: ContextData) {\n    const context: Context = {\n      client: {\n        hl: args.hl || 'en',\n        gl: args.gl || 'US',\n        remoteHost: args.remote_host,\n        screenDensityFloat: 1,\n        screenHeightPoints: 1440,\n        screenPixelDensity: 1,\n        screenWidthPoints: 2560,\n        visitorData: args.visitor_data,\n        clientName: args.client_name,\n        clientVersion: args.client_version,\n        osName: args.os_name,\n        osVersion: args.os_version,\n        userAgent: args.user_agent,\n        platform: args.device_category.toUpperCase(),\n        clientFormFactor: 'UNKNOWN_FORM_FACTOR',\n        userInterfaceTheme: 'USER_INTERFACE_THEME_LIGHT',\n        timeZone: args.time_zone,\n        originalUrl: Constants.URLS.YT_BASE,\n        deviceMake: args.device_make,\n        deviceModel: args.device_model,\n        browserName: args.browser_name,\n        browserVersion: args.browser_version,\n        utcOffsetMinutes: -Math.floor((new Date()).getTimezoneOffset()),\n        memoryTotalKbytes: '8000000',\n        rolloutToken: args.rollout_token,\n        deviceExperimentId: args.device_experiment_id,\n        mainAppWebInfo: {\n          graftUrl: Constants.URLS.YT_BASE,\n          pwaInstallabilityStatus: 'PWA_INSTALLABILITY_STATUS_UNKNOWN',\n          webDisplayMode: 'WEB_DISPLAY_MODE_BROWSER',\n          isWebNativeShareAvailable: true\n        }\n      },\n      user: {\n        enableSafetyMode: args.enable_safety_mode,\n        lockedSafetyMode: false\n      },\n      request: {\n        useSsl: true,\n        internalExperimentFlags: []\n      }\n    };\n\n    if (args.app_install_data)\n      context.client.configInfo = { appInstallData: args.app_install_data };\n\n    if (args.on_behalf_of_user)\n      context.user.onBehalfOfUser = args.on_behalf_of_user;\n\n    return context;\n  }\n\n  static #getVisitorID(visitor_data: string) {\n    const decoded_visitor_data = ProtoUtils.decodeVisitorData(visitor_data);\n    return decoded_visitor_data.id;\n  }\n\n  async signIn(credentials?: OAuth2Tokens): Promise<void> {\n    return new Promise(async (resolve, reject) => {\n      const error_handler: OAuth2AuthErrorEventHandler = (err) => reject(err);\n\n      this.once('auth-error', error_handler);\n\n      this.once('auth', () => {\n        this.off('auth-error', error_handler);\n        this.logged_in = true;\n        resolve();\n      });\n\n      try {\n        await this.oauth.init(credentials);\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  /**\n   * Signs out of the current account and revokes the credentials.\n   */\n  async signOut(): Promise<Response | undefined> {\n    if (!this.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const response = await this.oauth.revokeCredentials();\n    this.logged_in = false;\n\n    return response;\n  }\n\n  get client_version(): string {\n    return this.context.client.clientVersion;\n  }\n\n  get client_name(): string {\n    return this.context.client.clientName;\n  }\n\n  get lang(): string {\n    return this.context.client.hl;\n  }\n}\n", "export { default as Kids } from './Kids.js';\nexport { default as Music } from './Music.js';\nexport { default as Studio } from './Studio.js';", "import { Parser } from '../../parser/index.js';\nimport { Channel, HomeFeed, Search, VideoInfo } from '../../parser/ytkids/index.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\nimport KidsBlocklistPickerItem from '../../parser/classes/ytkids/KidsBlocklistPickerItem.js';\nimport { InnertubeError, generateRandomString } from '../../utils/Utils.js';\nimport type { Session, ApiResponse } from '../index.js';\nimport type { GetVideoInfoOptions } from '../../types/index.js';\n\nexport default class Kids {\n  #session: Session;\n\n  constructor(session: Session) {\n    this.#session = session;\n  }\n\n  async search(query: string): Promise<Search> {\n    const search_endpoint = new NavigationEndpoint({ searchEndpoint: { query } });\n    const response = await search_endpoint.call(this.#session.actions, { client: 'YTKIDS' });\n    return new Search(this.#session.actions, response);\n  }\n\n  async getInfo(video_id: string, options?: Omit<GetVideoInfoOptions, 'client'>): Promise<VideoInfo> {\n    const payload = { videoId: video_id };\n    const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });\n\n    const session = this.#session;\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: session.player?.signature_timestamp\n        }\n      },\n      client: 'YTKIDS'\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: session.po_token\n      };\n    }\n    \n    const watch_response = watch_endpoint.call(session.actions, extra_payload);\n\n    const watch_next_response = watch_next_endpoint.call(session.actions, { client: 'YTKIDS' });\n\n    const response = await Promise.all([ watch_response, watch_next_response ]);\n    const cpn = generateRandomString(16);\n\n    return new VideoInfo(response, session.actions, cpn);\n  }\n\n  async getChannel(channel_id: string): Promise<Channel> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: channel_id } });\n    const response = await browse_endpoint.call(this.#session.actions, { client: 'YTKIDS' });\n    return new Channel(this.#session.actions, response);\n  }\n\n  async getHomeFeed(): Promise<HomeFeed> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEkids_home' } });\n    const response = await browse_endpoint.call(this.#session.actions, { client: 'YTKIDS' });\n    return new HomeFeed(this.#session.actions, response);\n  }\n\n  /**\n   * Retrieves the list of supervised accounts that the signed-in user has\n   * access to, and blocks the given channel for each of them.\n   * @param channel_id - The channel id to block.\n   * @returns A list of API responses.\n   */\n  async blockChannel(channel_id: string): Promise<ApiResponse[]> {\n    const session = this.#session;\n\n    if (!session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const kids_blocklist_picker_command = new NavigationEndpoint({\n      getKidsBlocklistPickerCommand: {\n        blockedForKidsContent: {\n          external_channel_id: channel_id\n        }\n      }\n    });\n\n    const response = await kids_blocklist_picker_command.call(session.actions, { client: 'YTKIDS' });\n    const popup = response.data.command.confirmDialogEndpoint;\n    const popup_fragment = { contents: popup.content, engagementPanels: [] };\n    const kid_picker = Parser.parseResponse(popup_fragment);\n    const kids = kid_picker.contents_memo?.getType(KidsBlocklistPickerItem);\n\n    if (!kids)\n      throw new InnertubeError('Could not find any kids profiles or supervised accounts.');\n\n    // Iterate through the kids and block the channel if not already blocked.\n    const responses: ApiResponse[] = [];\n\n    for (const kid of kids) {\n      if (!kid.block_button?.is_toggled) {\n        kid.setActions(session.actions);\n        // Block channel and add to the response list.\n        responses.push(await kid.blockChannel());\n      }\n    }\n\n    return responses;\n  }\n}", "import { generateRandomString, InnertubeError, throwIfMissing, u8ToBase64 } from '../../utils/Utils.js';\n\nimport {\n  Album,\n  Artist,\n  Explore,\n  HomeFeed,\n  Library,\n  Playlist,\n  Recap,\n  Search,\n  TrackInfo\n} from '../../parser/ytmusic/index.js';\n\nimport AutomixPreviewVideo from '../../parser/classes/AutomixPreviewVideo.js';\nimport Message from '../../parser/classes/Message.js';\nimport MusicDescriptionShelf from '../../parser/classes/MusicDescriptionShelf.js';\nimport MusicQueue from '../../parser/classes/MusicQueue.js';\nimport MusicResponsiveListItem from '../../parser/classes/MusicResponsiveListItem.js';\nimport MusicTwoRowItem from '../../parser/classes/MusicTwoRowItem.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\nimport PlaylistPanel from '../../parser/classes/PlaylistPanel.js';\nimport SearchSuggestionsSection from '../../parser/classes/SearchSuggestionsSection.js';\nimport SectionList from '../../parser/classes/SectionList.js';\nimport Tab from '../../parser/classes/Tab.js';\n\nimport { SearchFilter } from '../../../protos/generated/misc/params.js';\n\nimport type { ObservedArray } from '../../parser/helpers.js';\nimport type { GetVideoInfoOptions, MusicSearchFilters } from '../../types/index.js';\nimport type { Actions, Session } from '../index.js';\n\nexport default class Music {\n  #session: Session;\n  readonly #actions: Actions;\n\n  constructor(session: Session) {\n    this.#session = session;\n    this.#actions = session.actions;\n  }\n\n  /**\n   * Retrieves track info. Passing a list item of type MusicTwoRowItem automatically starts a radio.\n   * @param target - Video id or a list item.\n   * @param options - Options for fetching video info.\n   */\n  getInfo(target: string | MusicTwoRowItem | MusicResponsiveListItem | NavigationEndpoint, options?: Omit<GetVideoInfoOptions, 'client'>): Promise<TrackInfo> {\n    if (target instanceof MusicTwoRowItem) {\n      return this.#fetchInfoFromEndpoint(target.endpoint, options);\n    } else if (target instanceof MusicResponsiveListItem) {\n      return this.#fetchInfoFromEndpoint(target.overlay?.content?.endpoint ?? target.endpoint, options);\n    } else if (target instanceof NavigationEndpoint) {\n      return this.#fetchInfoFromEndpoint(target, options);\n    }\n    return this.#fetchInfoFromVideoId(target, options);\n  }\n\n  async #fetchInfoFromVideoId(video_id: string, options?: GetVideoInfoOptions): Promise<TrackInfo> {\n    const payload = { videoId: video_id, racyCheckOk: true, contentCheckOk: true };\n    const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: this.#session.player?.signature_timestamp\n        }\n      },\n      client: 'YTMUSIC'\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (this.#session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: this.#session.po_token\n      };\n    }\n\n    const watch_response = watch_endpoint.call(this.#actions, extra_payload);\n\n    const watch_next_response = watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    const response = await Promise.all([ watch_response, watch_next_response ]);\n    const cpn = generateRandomString(16);\n\n    return new TrackInfo(response, this.#actions, cpn);\n  }\n\n  async #fetchInfoFromEndpoint(endpoint?: NavigationEndpoint, options?: GetVideoInfoOptions): Promise<TrackInfo> {\n    if (!endpoint)\n      throw new Error('This item does not have an endpoint.');\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: this.#session.player?.signature_timestamp\n        }\n      },\n      client: 'YTMUSIC'\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (this.#session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: this.#session.po_token\n      };\n    }\n    \n    const player_response = endpoint.call(this.#actions, extra_payload);\n\n    const next_response = endpoint.call(this.#actions, {\n      client: 'YTMUSIC',\n      enablePersistentPlaylistPanel: true,\n      override_endpoint: '/next'\n    });\n\n    const cpn = generateRandomString(16);\n\n    const response = await Promise.all([ player_response, next_response ]);\n    return new TrackInfo(response, this.#actions, cpn);\n  }\n\n  async search(query: string, filters: MusicSearchFilters = {}): Promise<Search> {\n    throwIfMissing({ query });\n\n    let params: string | undefined;\n\n    if (filters.type && filters.type !== 'all') {\n      const writer = SearchFilter.encode({\n        filters: {\n          musicSearchType: {\n            [filters.type]: true\n          }\n        }\n      });\n      params = encodeURIComponent(u8ToBase64(writer.finish()));\n    }\n\n    const search_endpoint = new NavigationEndpoint({ searchEndpoint: { query, params } });\n    const response = await search_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Search(response, this.#actions, Reflect.has(filters, 'type') && filters.type !== 'all');\n  }\n\n  async getHomeFeed(): Promise<HomeFeed> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_home' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new HomeFeed(response, this.#actions);\n  }\n\n  async getExplore(): Promise<Explore> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_explore' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Explore(response);\n    // TODO: return new Explore(response, this.#actions);\n  }\n\n  async getLibrary(): Promise<Library> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_library_landing' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Library(response, this.#actions);\n  }\n\n  async getArtist(artist_id: string): Promise<Artist> {\n    if (!artist_id || !artist_id.startsWith('UC') && !artist_id.startsWith('FEmusic_library_privately_owned_artist'))\n      throw new InnertubeError('Invalid artist id', artist_id);\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: artist_id } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Artist(response, this.#actions);\n  }\n\n  async getAlbum(album_id: string): Promise<Album> {\n    if (!album_id || !album_id.startsWith('MPR') && !album_id.startsWith('FEmusic_library_privately_owned_release'))\n      throw new InnertubeError('Invalid album id', album_id);\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: album_id } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Album(response);\n  }\n\n  async getPlaylist(playlist_id: string): Promise<Playlist> {\n    if (!playlist_id.startsWith('VL'))\n      playlist_id = `VL${playlist_id}`;\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: playlist_id } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Playlist(response, this.#actions);\n  }\n\n  async getUpNext(video_id: string, automix = true): Promise<PlaylistPanel> {\n    throwIfMissing({ video_id });\n\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });\n    const response = await watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    const tabs = response.contents_memo?.getType(Tab);\n    const tab = tabs?.[0];\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const music_queue = tab.content?.as(MusicQueue);\n\n    if (!music_queue || !music_queue.content)\n      throw new InnertubeError('Music queue was empty, the given id is probably invalid.', music_queue);\n\n    const playlist_panel = music_queue.content.as(PlaylistPanel);\n\n    if (!playlist_panel.playlist_id && automix) {\n      const automix_preview_video = playlist_panel.contents.firstOfType(AutomixPreviewVideo);\n\n      if (!automix_preview_video)\n        throw new InnertubeError('Automix item not found');\n\n      const page = await automix_preview_video.playlist_video?.endpoint.call(this.#actions, {\n        videoId: video_id,\n        client: 'YTMUSIC',\n        parse: true\n      });\n\n      if (!page || !page.contents_memo)\n        throw new InnertubeError('Could not fetch automix');\n\n      return page.contents_memo.getType(PlaylistPanel)[0];\n    }\n\n    return playlist_panel;\n  }\n\n  async getRelated(video_id: string): Promise<SectionList | Message> {\n    throwIfMissing({ video_id });\n\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });\n    const response = await watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    const tabs = response.contents_memo?.getType(Tab);\n\n    const tab = tabs?.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === 'MUSIC_PAGE_TYPE_TRACK_RELATED');\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const page = await tab.endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    if (!page.contents)\n      throw new InnertubeError('Unexpected response', page);\n\n    return page.contents.item().as(SectionList, Message);\n  }\n\n  async getLyrics(video_id: string): Promise<MusicDescriptionShelf | undefined> {\n    throwIfMissing({ video_id });\n\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });\n    const response = await watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    const tabs = response.contents_memo?.getType(Tab);\n\n    const tab = tabs?.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === 'MUSIC_PAGE_TYPE_TRACK_LYRICS');\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const page = await tab.endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    if (!page.contents)\n      throw new InnertubeError('Unexpected response', page);\n\n    if (page.contents.item().type === 'Message')\n      throw new InnertubeError(page.contents.item().as(Message).text.toString(), video_id);\n\n    const section_list = page.contents.item().as(SectionList).contents;\n\n    return section_list.firstOfType(MusicDescriptionShelf);\n  }\n\n  async getRecap(): Promise<Recap> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_listening_review' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Recap(response, this.#actions);\n  }\n\n  async getSearchSuggestions(input: string): Promise<ObservedArray<SearchSuggestionsSection>> {\n    const response = await this.#actions.execute('/music/get_search_suggestions', {\n      input,\n      client: 'YTMUSIC',\n      parse: true\n    });\n\n    if (!response.contents_memo)\n      return [] as unknown as ObservedArray<SearchSuggestionsSection>;\n\n    return response.contents_memo.getType(SearchSuggestionsSection);\n  }\n}", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/capability_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface CapabilityInfo {\n  profile?: string | undefined;\n  supportedCapabilities: InnerTubeCapability[];\n  disabledCapabilities: InnerTubeCapability[];\n  snapshot?: string | undefined;\n}\n\nexport interface InnerTubeCapability {\n  capability?: number | undefined;\n  features?: number | undefined;\n  experimentFlags?: string | undefined;\n}\n\nfunction createBaseCapabilityInfo(): CapabilityInfo {\n  return { profile: undefined, supportedCapabilities: [], disabledCapabilities: [], snapshot: undefined };\n}\n\nexport const CapabilityInfo: MessageFns<CapabilityInfo> = {\n  encode(message: CapabilityInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.profile !== undefined) {\n      writer.uint32(10).string(message.profile);\n    }\n    for (const v of message.supportedCapabilities) {\n      InnerTubeCapability.encode(v!, writer.uint32(18).fork()).join();\n    }\n    for (const v of message.disabledCapabilities) {\n      InnerTubeCapability.encode(v!, writer.uint32(26).fork()).join();\n    }\n    if (message.snapshot !== undefined) {\n      writer.uint32(42).string(message.snapshot);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CapabilityInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCapabilityInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.profile = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.supportedCapabilities.push(InnerTubeCapability.decode(reader, reader.uint32()));\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.disabledCapabilities.push(InnerTubeCapability.decode(reader, reader.uint32()));\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.snapshot = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeCapability(): InnerTubeCapability {\n  return { capability: undefined, features: undefined, experimentFlags: undefined };\n}\n\nexport const InnerTubeCapability: MessageFns<InnerTubeCapability> = {\n  encode(message: InnerTubeCapability, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.capability !== undefined) {\n      writer.uint32(8).uint32(message.capability);\n    }\n    if (message.features !== undefined) {\n      writer.uint32(16).uint32(message.features);\n    }\n    if (message.experimentFlags !== undefined) {\n      writer.uint32(50).string(message.experimentFlags);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeCapability {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeCapability();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.capability = reader.uint32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.features = reader.uint32();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.experimentFlags = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/client_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface ClientInfo {\n  hl?: string | undefined;\n  gl?: string | undefined;\n  remoteHost?: string | undefined;\n  deviceId?: string | undefined;\n  debugDeviceIdOverride?: string | undefined;\n  carrierGeo?: string | undefined;\n  crackedHl?: boolean | undefined;\n  deviceMake?: string | undefined;\n  deviceModel?: string | undefined;\n  visitorData?: string | undefined;\n  userAgent?: string | undefined;\n  clientName?: number | undefined;\n  clientVersion?: string | undefined;\n  osName?: string | undefined;\n  osVersion?: string | undefined;\n  projectId?: string | undefined;\n  acceptLanguage?: string | undefined;\n  acceptRegion?: string | undefined;\n  originalUrl?: string | undefined;\n  rawDeviceId?: string | undefined;\n  configData?: string | undefined;\n  spacecastToken?: string | undefined;\n  internalGeo?: string | undefined;\n  screenWidthPoints?: number | undefined;\n  screenHeightPoints?: number | undefined;\n  screenWidthInches?: number | undefined;\n  screenHeightInches?: number | undefined;\n  screenPixelDensity?: number | undefined;\n  platform?: number | undefined;\n  spacecastClientInfo?: ClientInfo_SpacecastClientInfo | undefined;\n  clientFormFactor?: ClientInfo_ClientFormFactor | undefined;\n  forwardedFor?: string | undefined;\n  mobileDataPlanInfo?:\n    | ClientInfo_MobileDataPlanInfo\n    | undefined;\n  /** e.g. 241757026 */\n  gmscoreVersionCode?: number | undefined;\n  webpSupport?: boolean | undefined;\n  cameraType?: ClientInfo_CameraType | undefined;\n  experimentsToken?: string | undefined;\n  windowWidthPoints?: number | undefined;\n  windowHeightPoints?: number | undefined;\n  configInfo?: ClientInfo_ConfigGroupsClientInfo | undefined;\n  unpluggedLocationInfo?: ClientInfo_UnpluggedLocationInfo | undefined;\n  androidSdkVersion?: number | undefined;\n  screenDensityFloat?: number | undefined;\n  firstTimeSignInExperimentIds?: number | undefined;\n  utcOffsetMinutes?: number | undefined;\n  animatedWebpSupport?: boolean | undefined;\n  kidsAppInfo?: ClientInfo_KidsAppInfo | undefined;\n  musicAppInfo?: ClientInfo_MusicAppInfo | undefined;\n  tvAppInfo?: ClientInfo_TvAppInfo | undefined;\n  internalGeoIp?: string | undefined;\n  unpluggedAppInfo?: ClientInfo_UnpluggedAppInfo | undefined;\n  locationInfo?: ClientInfo_LocationInfo | undefined;\n  contentSizeCategory?: string | undefined;\n  fontScale?: number | undefined;\n  userInterfaceTheme?: ClientInfo_UserInterfaceTheme | undefined;\n  timeZone?: string | undefined;\n  homeGroupInfo?: ClientInfo_HomeGroupInfo | undefined;\n  emlTemplateContext?: Uint8Array | undefined;\n  coldAppBundleConfigData?:\n    | Uint8Array\n    | undefined;\n  /** repeated ExperimentsHeterodyne.ExperimentIds heterodyne_ids = 86; */\n  browserName?: string | undefined;\n  browserVersion?: string | undefined;\n  locationPlayabilityToken?:\n    | string\n    | undefined;\n  /** e.g. \"qcom;taro\" */\n  chipset?: string | undefined;\n  firmwareVersion?: string | undefined;\n  memoryTotalKbytes?: number | undefined;\n  mainAppWebInfo?: ClientInfo_MainAppWebInfo | undefined;\n  notificationPermissionInfo?: ClientInfo_NotificationPermissionInfo | undefined;\n  deviceBrand?:\n    | string\n    | undefined;\n  /**\n   * optional ClientStoreInfo client_store_info = 99;\n   * optional SRSDataPushVersion srs_datapush_build_ids = 100;\n   * optional PlayerDataPushVersion player_datapush_build_ids = 101;\n   */\n  glDeviceInfo?: ClientInfo_GLDeviceInfo | undefined;\n}\n\nexport enum ClientInfo_ClientFormFactor {\n  /** UNKNOWN_FORM_FACTOR - @TODO: Check these. */\n  UNKNOWN_FORM_FACTOR = 0,\n  FORM_FACTOR_VAL1 = 1,\n  FORM_FACTOR_VAL2 = 2,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_CameraType {\n  UNKNOWN_CAMERA_TYPE = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_UserInterfaceTheme {\n  USER_INTERFACE_THEME_DARK = 0,\n  USER_INTERFACE_THEME_LIGHT = 1,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_MainAppWebInfo {\n  graftUrl?: string | undefined;\n  pwaInstallabilityStatus?: ClientInfo_MainAppWebInfo_PwaInstallabilityStatus | undefined;\n  webDisplayMode?: ClientInfo_MainAppWebInfo_WebDisplayMode | undefined;\n  isWebNativeShareAvailable?: boolean | undefined;\n  storeDigitalGoodsApiSupportStatus?: ClientInfo_MainAppWebInfo_StoreDigitalGoodsApiSupportStatus | undefined;\n}\n\nexport enum ClientInfo_MainAppWebInfo_StoreDigitalGoodsApiSupportStatus {\n  STORE_DIGITAL_GOODS_API_SUPPORT_STATUS_VAL0 = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MainAppWebInfo_PwaInstallabilityStatus {\n  PWA_INSTALLABILITY_STATUS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MainAppWebInfo_WebDisplayMode {\n  WEB_DISPLAY_MODE_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_NotificationPermissionInfo {\n  notificationsSetting?: ClientInfo_NotificationPermissionInfo_NotificationsSetting | undefined;\n  lastDeviceOptInChangeTimeAgoSec?: number | undefined;\n}\n\nexport enum ClientInfo_NotificationPermissionInfo_NotificationsSetting {\n  NOTIFICATIONS_SETTING_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_GLDeviceInfo {\n  glRenderer?: string | undefined;\n  glEsVersionMajor?: number | undefined;\n  glEsVersionMinor?: number | undefined;\n}\n\nexport interface ClientInfo_SpacecastClientInfo {\n  appliances?: ClientInfo_SpacecastClientInfo_SpacecastAppliance | undefined;\n  interactionLevel?: ClientInfo_SpacecastClientInfo_SpacecastInteractionLevel | undefined;\n}\n\nexport enum ClientInfo_SpacecastClientInfo_SpacecastInteractionLevel {\n  UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_SpacecastClientInfo_SpacecastAppliance {\n  contentProfileToken?: Uint8Array | undefined;\n  status?: ClientInfo_SpacecastClientInfo_SpacecastAppliance_OperationalStatus | undefined;\n  hostname?: string | undefined;\n  active?: boolean | undefined;\n  deviceId?: string | undefined;\n}\n\nexport enum ClientInfo_SpacecastClientInfo_SpacecastAppliance_OperationalStatus {\n  UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_MobileDataPlanInfo {\n  cpid?: string | undefined;\n  serializedDataPlanStatus?: string | undefined;\n  dataSavingQualityPickerEnabled?: boolean | undefined;\n  mccmnc?: string | undefined;\n}\n\nexport interface ClientInfo_ConfigGroupsClientInfo {\n  coldConfigData?: string | undefined;\n  coldHashData?: string | undefined;\n  hotHashData?: string | undefined;\n  appInstallData?: string | undefined;\n}\n\nexport interface ClientInfo_UnpluggedLocationInfo {\n  latitudeE7?: number | undefined;\n  longitudeE7?: number | undefined;\n  localTimestampMs?: number | undefined;\n  ipAddress?: string | undefined;\n  timezone?: string | undefined;\n  prefer24HourTime?: boolean | undefined;\n  locationRadiusMeters?: number | undefined;\n  isInitialLoad?: boolean | undefined;\n  browserPermissionGranted?: boolean | undefined;\n  clientPermissionState?: number | undefined;\n  locationOverrideToken?: string | undefined;\n}\n\nexport interface ClientInfo_KidsAppInfo {\n  contentSettings?: ClientInfo_KidsAppInfo_KidsContentSettings | undefined;\n  parentCurationMode?: ClientInfo_KidsAppInfo_KidsParentCurationMode | undefined;\n  categorySettings?: ClientInfo_KidsAppInfo_KidsCategorySettings | undefined;\n  userEducationSettings?: ClientInfo_KidsAppInfo_KidsUserEducationSettings | undefined;\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsParentCurationMode {\n  KPCM_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_KidsAppInfo_KidsContentSettings {\n  kidsNoSearchMode?: ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsNoSearchMode | undefined;\n  ageUpMode?: ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsAgeUpMode | undefined;\n  contentDensity?: ClientInfo_KidsAppInfo_KidsContentSettings_KidsContentDensity | undefined;\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsNoSearchMode {\n  YT_KIDS_NO_SEARCH_MODE_OFF = 0,\n  YT_KIDS_NO_SEARCH_MODE_ON = 1,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsAgeUpMode {\n  YT_KIDS_AGE_UP_MODE_OFF = 0,\n  YT_KIDS_AGE_UP_MODE_ON = 1,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsContentSettings_KidsContentDensity {\n  /** YT_KIDS_CONTENT_DENSITY_VAL1 - @TODO: Check these. */\n  YT_KIDS_CONTENT_DENSITY_VAL1 = 0,\n  YT_KIDS_CONTENT_DENSITY_VAL2 = 1,\n  YT_KIDS_CONTENT_DENSITY_VAL3 = 2,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_KidsAppInfo_KidsCategorySettings {\n  enabledCategories?: string | undefined;\n}\n\nexport interface ClientInfo_KidsAppInfo_KidsUserEducationSettings {\n  hasSeenHomeChipBarUserEducation?: boolean | undefined;\n  hasSeenHomePivotBarUserEducation?: boolean | undefined;\n  hasSeenParentMuirUserEducation?: boolean | undefined;\n}\n\nexport interface ClientInfo_MusicAppInfo {\n  playBackMode?: ClientInfo_MusicAppInfo_MusicPlayBackMode | undefined;\n  musicLocationMasterSwitch?: ClientInfo_MusicAppInfo_MusicLocationMasterSwitch | undefined;\n  musicActivityMasterSwitch?: ClientInfo_MusicAppInfo_MusicActivityMasterSwitch | undefined;\n  offlineMixtapeEnabled?: boolean | undefined;\n  autoOfflineEnabled?: boolean | undefined;\n  iosBackgroundRefreshStatus?: ClientInfo_MusicAppInfo_IosBackgroundRefreshStatus | undefined;\n  smartDownloadsSongLimit?: number | undefined;\n  transitionedFromMixtapeToSmartDownloads?: boolean | undefined;\n  pwaInstallabilityStatus?: ClientInfo_MusicAppInfo_PwaInstallabilityStatus | undefined;\n  webDisplayMode?: ClientInfo_MusicAppInfo_WebDisplayMode | undefined;\n  musicTier?: ClientInfo_MusicAppInfo_MusicTier | undefined;\n  storeDigitalGoodsApiSupportStatus?: ClientInfo_MusicAppInfo_StoreDigitalGoodsApiSupportStatus | undefined;\n  smartDownloadsTimeSinceLastOptOutSec?: number | undefined;\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicPlayBackMode {\n  MPBM_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicLocationMasterSwitch {\n  MLMS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicActivityMasterSwitch {\n  MAMS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_IosBackgroundRefreshStatus {\n  UNKNOWN_STATUS = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_PwaInstallabilityStatus {\n  PIS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_WebDisplayMode {\n  WDM_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicTier {\n  UNKNOWN_TIER = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_StoreDigitalGoodsApiSupportStatus {\n  SDGAS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_TvAppInfo {\n  mdxImpactedSessionsServerEvents?: string | undefined;\n  enablePrivacyFilter?: boolean | undefined;\n  zylonLeftNav?: boolean | undefined;\n  certificationScope?: string | undefined;\n  livingRoomPoTokenId?: string | undefined;\n  jsEngineString?: string | undefined;\n  voiceCapability?: ClientInfo_TvAppInfo_VoiceCapability | undefined;\n  systemIntegrator?: string | undefined;\n  androidBuildFingerprint?: string | undefined;\n  cobaltAppVersion?: string | undefined;\n  cobaltStarboardVersion?: string | undefined;\n  useStartPlaybackPreviewCommand?: boolean | undefined;\n  shouldShowPersistentSigninOnHome?: boolean | undefined;\n  androidPlayServicesVersion?: string | undefined;\n}\n\nexport interface ClientInfo_TvAppInfo_VoiceCapability {\n  hasSoftMicSupport?: boolean | undefined;\n  hasHardMicSupport?: boolean | undefined;\n}\n\nexport interface ClientInfo_UnpluggedAppInfo {\n  enableFilterMode?: boolean | undefined;\n  iosNotificationPermission?: boolean | undefined;\n  forceEnableEpg3?: boolean | undefined;\n}\n\nexport interface ClientInfo_LocationInfo {\n  locationInfoStatus?: number | undefined;\n  ulrStatus?: ClientInfo_LocationInfo_UrlStatus | undefined;\n  latitudeE7?: string | undefined;\n  longitudeE7?: string | undefined;\n  horizontalAccuracyMeters?: string | undefined;\n  locationFreshnessMs?: string | undefined;\n  locationPermissionAuthorizationStatus?: number | undefined;\n  locationOverrideToken?: string | undefined;\n  forceLocationPlayabilityTokenRefresh?: boolean | undefined;\n}\n\nexport interface ClientInfo_LocationInfo_UrlStatus {\n  reportingEnabledSetting?: number | undefined;\n  historyEnabledSetting?: number | undefined;\n  isAllowed?: boolean | undefined;\n  isActive?: boolean | undefined;\n}\n\nexport interface ClientInfo_HomeGroupInfo {\n  isPartOfGroup?: boolean | undefined;\n  isGroup?: boolean | undefined;\n}\n\nfunction createBaseClientInfo(): ClientInfo {\n  return {\n    hl: undefined,\n    gl: undefined,\n    remoteHost: undefined,\n    deviceId: undefined,\n    debugDeviceIdOverride: undefined,\n    carrierGeo: undefined,\n    crackedHl: undefined,\n    deviceMake: undefined,\n    deviceModel: undefined,\n    visitorData: undefined,\n    userAgent: undefined,\n    clientName: undefined,\n    clientVersion: undefined,\n    osName: undefined,\n    osVersion: undefined,\n    projectId: undefined,\n    acceptLanguage: undefined,\n    acceptRegion: undefined,\n    originalUrl: undefined,\n    rawDeviceId: undefined,\n    configData: undefined,\n    spacecastToken: undefined,\n    internalGeo: undefined,\n    screenWidthPoints: undefined,\n    screenHeightPoints: undefined,\n    screenWidthInches: undefined,\n    screenHeightInches: undefined,\n    screenPixelDensity: undefined,\n    platform: undefined,\n    spacecastClientInfo: undefined,\n    clientFormFactor: undefined,\n    forwardedFor: undefined,\n    mobileDataPlanInfo: undefined,\n    gmscoreVersionCode: undefined,\n    webpSupport: undefined,\n    cameraType: undefined,\n    experimentsToken: undefined,\n    windowWidthPoints: undefined,\n    windowHeightPoints: undefined,\n    configInfo: undefined,\n    unpluggedLocationInfo: undefined,\n    androidSdkVersion: undefined,\n    screenDensityFloat: undefined,\n    firstTimeSignInExperimentIds: undefined,\n    utcOffsetMinutes: undefined,\n    animatedWebpSupport: undefined,\n    kidsAppInfo: undefined,\n    musicAppInfo: undefined,\n    tvAppInfo: undefined,\n    internalGeoIp: undefined,\n    unpluggedAppInfo: undefined,\n    locationInfo: undefined,\n    contentSizeCategory: undefined,\n    fontScale: undefined,\n    userInterfaceTheme: undefined,\n    timeZone: undefined,\n    homeGroupInfo: undefined,\n    emlTemplateContext: undefined,\n    coldAppBundleConfigData: undefined,\n    browserName: undefined,\n    browserVersion: undefined,\n    locationPlayabilityToken: undefined,\n    chipset: undefined,\n    firmwareVersion: undefined,\n    memoryTotalKbytes: undefined,\n    mainAppWebInfo: undefined,\n    notificationPermissionInfo: undefined,\n    deviceBrand: undefined,\n    glDeviceInfo: undefined,\n  };\n}\n\nexport const ClientInfo: MessageFns<ClientInfo> = {\n  encode(message: ClientInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.hl !== undefined) {\n      writer.uint32(10).string(message.hl);\n    }\n    if (message.gl !== undefined) {\n      writer.uint32(18).string(message.gl);\n    }\n    if (message.remoteHost !== undefined) {\n      writer.uint32(34).string(message.remoteHost);\n    }\n    if (message.deviceId !== undefined) {\n      writer.uint32(50).string(message.deviceId);\n    }\n    if (message.debugDeviceIdOverride !== undefined) {\n      writer.uint32(66).string(message.debugDeviceIdOverride);\n    }\n    if (message.carrierGeo !== undefined) {\n      writer.uint32(82).string(message.carrierGeo);\n    }\n    if (message.crackedHl !== undefined) {\n      writer.uint32(88).bool(message.crackedHl);\n    }\n    if (message.deviceMake !== undefined) {\n      writer.uint32(98).string(message.deviceMake);\n    }\n    if (message.deviceModel !== undefined) {\n      writer.uint32(106).string(message.deviceModel);\n    }\n    if (message.visitorData !== undefined) {\n      writer.uint32(114).string(message.visitorData);\n    }\n    if (message.userAgent !== undefined) {\n      writer.uint32(122).string(message.userAgent);\n    }\n    if (message.clientName !== undefined) {\n      writer.uint32(128).int32(message.clientName);\n    }\n    if (message.clientVersion !== undefined) {\n      writer.uint32(138).string(message.clientVersion);\n    }\n    if (message.osName !== undefined) {\n      writer.uint32(146).string(message.osName);\n    }\n    if (message.osVersion !== undefined) {\n      writer.uint32(154).string(message.osVersion);\n    }\n    if (message.projectId !== undefined) {\n      writer.uint32(162).string(message.projectId);\n    }\n    if (message.acceptLanguage !== undefined) {\n      writer.uint32(170).string(message.acceptLanguage);\n    }\n    if (message.acceptRegion !== undefined) {\n      writer.uint32(178).string(message.acceptRegion);\n    }\n    if (message.originalUrl !== undefined) {\n      writer.uint32(186).string(message.originalUrl);\n    }\n    if (message.rawDeviceId !== undefined) {\n      writer.uint32(202).string(message.rawDeviceId);\n    }\n    if (message.configData !== undefined) {\n      writer.uint32(218).string(message.configData);\n    }\n    if (message.spacecastToken !== undefined) {\n      writer.uint32(250).string(message.spacecastToken);\n    }\n    if (message.internalGeo !== undefined) {\n      writer.uint32(274).string(message.internalGeo);\n    }\n    if (message.screenWidthPoints !== undefined) {\n      writer.uint32(296).int32(message.screenWidthPoints);\n    }\n    if (message.screenHeightPoints !== undefined) {\n      writer.uint32(304).int32(message.screenHeightPoints);\n    }\n    if (message.screenWidthInches !== undefined) {\n      writer.uint32(317).float(message.screenWidthInches);\n    }\n    if (message.screenHeightInches !== undefined) {\n      writer.uint32(325).float(message.screenHeightInches);\n    }\n    if (message.screenPixelDensity !== undefined) {\n      writer.uint32(328).int32(message.screenPixelDensity);\n    }\n    if (message.platform !== undefined) {\n      writer.uint32(336).int32(message.platform);\n    }\n    if (message.spacecastClientInfo !== undefined) {\n      ClientInfo_SpacecastClientInfo.encode(message.spacecastClientInfo, writer.uint32(362).fork()).join();\n    }\n    if (message.clientFormFactor !== undefined) {\n      writer.uint32(368).int32(message.clientFormFactor);\n    }\n    if (message.forwardedFor !== undefined) {\n      writer.uint32(386).string(message.forwardedFor);\n    }\n    if (message.mobileDataPlanInfo !== undefined) {\n      ClientInfo_MobileDataPlanInfo.encode(message.mobileDataPlanInfo, writer.uint32(394).fork()).join();\n    }\n    if (message.gmscoreVersionCode !== undefined) {\n      writer.uint32(400).int32(message.gmscoreVersionCode);\n    }\n    if (message.webpSupport !== undefined) {\n      writer.uint32(408).bool(message.webpSupport);\n    }\n    if (message.cameraType !== undefined) {\n      writer.uint32(416).int32(message.cameraType);\n    }\n    if (message.experimentsToken !== undefined) {\n      writer.uint32(434).string(message.experimentsToken);\n    }\n    if (message.windowWidthPoints !== undefined) {\n      writer.uint32(440).int32(message.windowWidthPoints);\n    }\n    if (message.windowHeightPoints !== undefined) {\n      writer.uint32(448).int32(message.windowHeightPoints);\n    }\n    if (message.configInfo !== undefined) {\n      ClientInfo_ConfigGroupsClientInfo.encode(message.configInfo, writer.uint32(498).fork()).join();\n    }\n    if (message.unpluggedLocationInfo !== undefined) {\n      ClientInfo_UnpluggedLocationInfo.encode(message.unpluggedLocationInfo, writer.uint32(506).fork()).join();\n    }\n    if (message.androidSdkVersion !== undefined) {\n      writer.uint32(512).int32(message.androidSdkVersion);\n    }\n    if (message.screenDensityFloat !== undefined) {\n      writer.uint32(525).float(message.screenDensityFloat);\n    }\n    if (message.firstTimeSignInExperimentIds !== undefined) {\n      writer.uint32(528).int32(message.firstTimeSignInExperimentIds);\n    }\n    if (message.utcOffsetMinutes !== undefined) {\n      writer.uint32(536).int32(message.utcOffsetMinutes);\n    }\n    if (message.animatedWebpSupport !== undefined) {\n      writer.uint32(544).bool(message.animatedWebpSupport);\n    }\n    if (message.kidsAppInfo !== undefined) {\n      ClientInfo_KidsAppInfo.encode(message.kidsAppInfo, writer.uint32(554).fork()).join();\n    }\n    if (message.musicAppInfo !== undefined) {\n      ClientInfo_MusicAppInfo.encode(message.musicAppInfo, writer.uint32(562).fork()).join();\n    }\n    if (message.tvAppInfo !== undefined) {\n      ClientInfo_TvAppInfo.encode(message.tvAppInfo, writer.uint32(570).fork()).join();\n    }\n    if (message.internalGeoIp !== undefined) {\n      writer.uint32(578).string(message.internalGeoIp);\n    }\n    if (message.unpluggedAppInfo !== undefined) {\n      ClientInfo_UnpluggedAppInfo.encode(message.unpluggedAppInfo, writer.uint32(586).fork()).join();\n    }\n    if (message.locationInfo !== undefined) {\n      ClientInfo_LocationInfo.encode(message.locationInfo, writer.uint32(594).fork()).join();\n    }\n    if (message.contentSizeCategory !== undefined) {\n      writer.uint32(610).string(message.contentSizeCategory);\n    }\n    if (message.fontScale !== undefined) {\n      writer.uint32(621).float(message.fontScale);\n    }\n    if (message.userInterfaceTheme !== undefined) {\n      writer.uint32(624).int32(message.userInterfaceTheme);\n    }\n    if (message.timeZone !== undefined) {\n      writer.uint32(642).string(message.timeZone);\n    }\n    if (message.homeGroupInfo !== undefined) {\n      ClientInfo_HomeGroupInfo.encode(message.homeGroupInfo, writer.uint32(650).fork()).join();\n    }\n    if (message.emlTemplateContext !== undefined) {\n      writer.uint32(674).bytes(message.emlTemplateContext);\n    }\n    if (message.coldAppBundleConfigData !== undefined) {\n      writer.uint32(682).bytes(message.coldAppBundleConfigData);\n    }\n    if (message.browserName !== undefined) {\n      writer.uint32(698).string(message.browserName);\n    }\n    if (message.browserVersion !== undefined) {\n      writer.uint32(706).string(message.browserVersion);\n    }\n    if (message.locationPlayabilityToken !== undefined) {\n      writer.uint32(714).string(message.locationPlayabilityToken);\n    }\n    if (message.chipset !== undefined) {\n      writer.uint32(738).string(message.chipset);\n    }\n    if (message.firmwareVersion !== undefined) {\n      writer.uint32(746).string(message.firmwareVersion);\n    }\n    if (message.memoryTotalKbytes !== undefined) {\n      writer.uint32(760).int64(message.memoryTotalKbytes);\n    }\n    if (message.mainAppWebInfo !== undefined) {\n      ClientInfo_MainAppWebInfo.encode(message.mainAppWebInfo, writer.uint32(770).fork()).join();\n    }\n    if (message.notificationPermissionInfo !== undefined) {\n      ClientInfo_NotificationPermissionInfo.encode(message.notificationPermissionInfo, writer.uint32(778).fork())\n        .join();\n    }\n    if (message.deviceBrand !== undefined) {\n      writer.uint32(786).string(message.deviceBrand);\n    }\n    if (message.glDeviceInfo !== undefined) {\n      ClientInfo_GLDeviceInfo.encode(message.glDeviceInfo, writer.uint32(818).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.hl = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.gl = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.remoteHost = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.deviceId = reader.string();\n          continue;\n        }\n        case 8: {\n          if (tag !== 66) {\n            break;\n          }\n\n          message.debugDeviceIdOverride = reader.string();\n          continue;\n        }\n        case 10: {\n          if (tag !== 82) {\n            break;\n          }\n\n          message.carrierGeo = reader.string();\n          continue;\n        }\n        case 11: {\n          if (tag !== 88) {\n            break;\n          }\n\n          message.crackedHl = reader.bool();\n          continue;\n        }\n        case 12: {\n          if (tag !== 98) {\n            break;\n          }\n\n          message.deviceMake = reader.string();\n          continue;\n        }\n        case 13: {\n          if (tag !== 106) {\n            break;\n          }\n\n          message.deviceModel = reader.string();\n          continue;\n        }\n        case 14: {\n          if (tag !== 114) {\n            break;\n          }\n\n          message.visitorData = reader.string();\n          continue;\n        }\n        case 15: {\n          if (tag !== 122) {\n            break;\n          }\n\n          message.userAgent = reader.string();\n          continue;\n        }\n        case 16: {\n          if (tag !== 128) {\n            break;\n          }\n\n          message.clientName = reader.int32();\n          continue;\n        }\n        case 17: {\n          if (tag !== 138) {\n            break;\n          }\n\n          message.clientVersion = reader.string();\n          continue;\n        }\n        case 18: {\n          if (tag !== 146) {\n            break;\n          }\n\n          message.osName = reader.string();\n          continue;\n        }\n        case 19: {\n          if (tag !== 154) {\n            break;\n          }\n\n          message.osVersion = reader.string();\n          continue;\n        }\n        case 20: {\n          if (tag !== 162) {\n            break;\n          }\n\n          message.projectId = reader.string();\n          continue;\n        }\n        case 21: {\n          if (tag !== 170) {\n            break;\n          }\n\n          message.acceptLanguage = reader.string();\n          continue;\n        }\n        case 22: {\n          if (tag !== 178) {\n            break;\n          }\n\n          message.acceptRegion = reader.string();\n          continue;\n        }\n        case 23: {\n          if (tag !== 186) {\n            break;\n          }\n\n          message.originalUrl = reader.string();\n          continue;\n        }\n        case 25: {\n          if (tag !== 202) {\n            break;\n          }\n\n          message.rawDeviceId = reader.string();\n          continue;\n        }\n        case 27: {\n          if (tag !== 218) {\n            break;\n          }\n\n          message.configData = reader.string();\n          continue;\n        }\n        case 31: {\n          if (tag !== 250) {\n            break;\n          }\n\n          message.spacecastToken = reader.string();\n          continue;\n        }\n        case 34: {\n          if (tag !== 274) {\n            break;\n          }\n\n          message.internalGeo = reader.string();\n          continue;\n        }\n        case 37: {\n          if (tag !== 296) {\n            break;\n          }\n\n          message.screenWidthPoints = reader.int32();\n          continue;\n        }\n        case 38: {\n          if (tag !== 304) {\n            break;\n          }\n\n          message.screenHeightPoints = reader.int32();\n          continue;\n        }\n        case 39: {\n          if (tag !== 317) {\n            break;\n          }\n\n          message.screenWidthInches = reader.float();\n          continue;\n        }\n        case 40: {\n          if (tag !== 325) {\n            break;\n          }\n\n          message.screenHeightInches = reader.float();\n          continue;\n        }\n        case 41: {\n          if (tag !== 328) {\n            break;\n          }\n\n          message.screenPixelDensity = reader.int32();\n          continue;\n        }\n        case 42: {\n          if (tag !== 336) {\n            break;\n          }\n\n          message.platform = reader.int32();\n          continue;\n        }\n        case 45: {\n          if (tag !== 362) {\n            break;\n          }\n\n          message.spacecastClientInfo = ClientInfo_SpacecastClientInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 46: {\n          if (tag !== 368) {\n            break;\n          }\n\n          message.clientFormFactor = reader.int32() as any;\n          continue;\n        }\n        case 48: {\n          if (tag !== 386) {\n            break;\n          }\n\n          message.forwardedFor = reader.string();\n          continue;\n        }\n        case 49: {\n          if (tag !== 394) {\n            break;\n          }\n\n          message.mobileDataPlanInfo = ClientInfo_MobileDataPlanInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 50: {\n          if (tag !== 400) {\n            break;\n          }\n\n          message.gmscoreVersionCode = reader.int32();\n          continue;\n        }\n        case 51: {\n          if (tag !== 408) {\n            break;\n          }\n\n          message.webpSupport = reader.bool();\n          continue;\n        }\n        case 52: {\n          if (tag !== 416) {\n            break;\n          }\n\n          message.cameraType = reader.int32() as any;\n          continue;\n        }\n        case 54: {\n          if (tag !== 434) {\n            break;\n          }\n\n          message.experimentsToken = reader.string();\n          continue;\n        }\n        case 55: {\n          if (tag !== 440) {\n            break;\n          }\n\n          message.windowWidthPoints = reader.int32();\n          continue;\n        }\n        case 56: {\n          if (tag !== 448) {\n            break;\n          }\n\n          message.windowHeightPoints = reader.int32();\n          continue;\n        }\n        case 62: {\n          if (tag !== 498) {\n            break;\n          }\n\n          message.configInfo = ClientInfo_ConfigGroupsClientInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 63: {\n          if (tag !== 506) {\n            break;\n          }\n\n          message.unpluggedLocationInfo = ClientInfo_UnpluggedLocationInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 64: {\n          if (tag !== 512) {\n            break;\n          }\n\n          message.androidSdkVersion = reader.int32();\n          continue;\n        }\n        case 65: {\n          if (tag !== 525) {\n            break;\n          }\n\n          message.screenDensityFloat = reader.float();\n          continue;\n        }\n        case 66: {\n          if (tag !== 528) {\n            break;\n          }\n\n          message.firstTimeSignInExperimentIds = reader.int32();\n          continue;\n        }\n        case 67: {\n          if (tag !== 536) {\n            break;\n          }\n\n          message.utcOffsetMinutes = reader.int32();\n          continue;\n        }\n        case 68: {\n          if (tag !== 544) {\n            break;\n          }\n\n          message.animatedWebpSupport = reader.bool();\n          continue;\n        }\n        case 69: {\n          if (tag !== 554) {\n            break;\n          }\n\n          message.kidsAppInfo = ClientInfo_KidsAppInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 70: {\n          if (tag !== 562) {\n            break;\n          }\n\n          message.musicAppInfo = ClientInfo_MusicAppInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 71: {\n          if (tag !== 570) {\n            break;\n          }\n\n          message.tvAppInfo = ClientInfo_TvAppInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 72: {\n          if (tag !== 578) {\n            break;\n          }\n\n          message.internalGeoIp = reader.string();\n          continue;\n        }\n        case 73: {\n          if (tag !== 586) {\n            break;\n          }\n\n          message.unpluggedAppInfo = ClientInfo_UnpluggedAppInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 74: {\n          if (tag !== 594) {\n            break;\n          }\n\n          message.locationInfo = ClientInfo_LocationInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 76: {\n          if (tag !== 610) {\n            break;\n          }\n\n          message.contentSizeCategory = reader.string();\n          continue;\n        }\n        case 77: {\n          if (tag !== 621) {\n            break;\n          }\n\n          message.fontScale = reader.float();\n          continue;\n        }\n        case 78: {\n          if (tag !== 624) {\n            break;\n          }\n\n          message.userInterfaceTheme = reader.int32() as any;\n          continue;\n        }\n        case 80: {\n          if (tag !== 642) {\n            break;\n          }\n\n          message.timeZone = reader.string();\n          continue;\n        }\n        case 81: {\n          if (tag !== 650) {\n            break;\n          }\n\n          message.homeGroupInfo = ClientInfo_HomeGroupInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 84: {\n          if (tag !== 674) {\n            break;\n          }\n\n          message.emlTemplateContext = reader.bytes();\n          continue;\n        }\n        case 85: {\n          if (tag !== 682) {\n            break;\n          }\n\n          message.coldAppBundleConfigData = reader.bytes();\n          continue;\n        }\n        case 87: {\n          if (tag !== 698) {\n            break;\n          }\n\n          message.browserName = reader.string();\n          continue;\n        }\n        case 88: {\n          if (tag !== 706) {\n            break;\n          }\n\n          message.browserVersion = reader.string();\n          continue;\n        }\n        case 89: {\n          if (tag !== 714) {\n            break;\n          }\n\n          message.locationPlayabilityToken = reader.string();\n          continue;\n        }\n        case 92: {\n          if (tag !== 738) {\n            break;\n          }\n\n          message.chipset = reader.string();\n          continue;\n        }\n        case 93: {\n          if (tag !== 746) {\n            break;\n          }\n\n          message.firmwareVersion = reader.string();\n          continue;\n        }\n        case 95: {\n          if (tag !== 760) {\n            break;\n          }\n\n          message.memoryTotalKbytes = longToNumber(reader.int64());\n          continue;\n        }\n        case 96: {\n          if (tag !== 770) {\n            break;\n          }\n\n          message.mainAppWebInfo = ClientInfo_MainAppWebInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 97: {\n          if (tag !== 778) {\n            break;\n          }\n\n          message.notificationPermissionInfo = ClientInfo_NotificationPermissionInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 98: {\n          if (tag !== 786) {\n            break;\n          }\n\n          message.deviceBrand = reader.string();\n          continue;\n        }\n        case 102: {\n          if (tag !== 818) {\n            break;\n          }\n\n          message.glDeviceInfo = ClientInfo_GLDeviceInfo.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_MainAppWebInfo(): ClientInfo_MainAppWebInfo {\n  return {\n    graftUrl: undefined,\n    pwaInstallabilityStatus: undefined,\n    webDisplayMode: undefined,\n    isWebNativeShareAvailable: undefined,\n    storeDigitalGoodsApiSupportStatus: undefined,\n  };\n}\n\nexport const ClientInfo_MainAppWebInfo: MessageFns<ClientInfo_MainAppWebInfo> = {\n  encode(message: ClientInfo_MainAppWebInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.graftUrl !== undefined) {\n      writer.uint32(10).string(message.graftUrl);\n    }\n    if (message.pwaInstallabilityStatus !== undefined) {\n      writer.uint32(16).int32(message.pwaInstallabilityStatus);\n    }\n    if (message.webDisplayMode !== undefined) {\n      writer.uint32(24).int32(message.webDisplayMode);\n    }\n    if (message.isWebNativeShareAvailable !== undefined) {\n      writer.uint32(32).bool(message.isWebNativeShareAvailable);\n    }\n    if (message.storeDigitalGoodsApiSupportStatus !== undefined) {\n      writer.uint32(40).int32(message.storeDigitalGoodsApiSupportStatus);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_MainAppWebInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_MainAppWebInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.graftUrl = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.pwaInstallabilityStatus = reader.int32() as any;\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.webDisplayMode = reader.int32() as any;\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.isWebNativeShareAvailable = reader.bool();\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.storeDigitalGoodsApiSupportStatus = reader.int32() as any;\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_NotificationPermissionInfo(): ClientInfo_NotificationPermissionInfo {\n  return { notificationsSetting: undefined, lastDeviceOptInChangeTimeAgoSec: undefined };\n}\n\nexport const ClientInfo_NotificationPermissionInfo: MessageFns<ClientInfo_NotificationPermissionInfo> = {\n  encode(message: ClientInfo_NotificationPermissionInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.notificationsSetting !== undefined) {\n      writer.uint32(8).int32(message.notificationsSetting);\n    }\n    if (message.lastDeviceOptInChangeTimeAgoSec !== undefined) {\n      writer.uint32(16).int64(message.lastDeviceOptInChangeTimeAgoSec);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_NotificationPermissionInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_NotificationPermissionInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.notificationsSetting = reader.int32() as any;\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.lastDeviceOptInChangeTimeAgoSec = longToNumber(reader.int64());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_GLDeviceInfo(): ClientInfo_GLDeviceInfo {\n  return { glRenderer: undefined, glEsVersionMajor: undefined, glEsVersionMinor: undefined };\n}\n\nexport const ClientInfo_GLDeviceInfo: MessageFns<ClientInfo_GLDeviceInfo> = {\n  encode(message: ClientInfo_GLDeviceInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.glRenderer !== undefined) {\n      writer.uint32(10).string(message.glRenderer);\n    }\n    if (message.glEsVersionMajor !== undefined) {\n      writer.uint32(16).int32(message.glEsVersionMajor);\n    }\n    if (message.glEsVersionMinor !== undefined) {\n      writer.uint32(24).int32(message.glEsVersionMinor);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_GLDeviceInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_GLDeviceInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.glRenderer = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.glEsVersionMajor = reader.int32();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.glEsVersionMinor = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_SpacecastClientInfo(): ClientInfo_SpacecastClientInfo {\n  return { appliances: undefined, interactionLevel: undefined };\n}\n\nexport const ClientInfo_SpacecastClientInfo: MessageFns<ClientInfo_SpacecastClientInfo> = {\n  encode(message: ClientInfo_SpacecastClientInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.appliances !== undefined) {\n      ClientInfo_SpacecastClientInfo_SpacecastAppliance.encode(message.appliances, writer.uint32(10).fork()).join();\n    }\n    if (message.interactionLevel !== undefined) {\n      writer.uint32(16).int32(message.interactionLevel);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_SpacecastClientInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_SpacecastClientInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.appliances = ClientInfo_SpacecastClientInfo_SpacecastAppliance.decode(reader, reader.uint32());\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.interactionLevel = reader.int32() as any;\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance(): ClientInfo_SpacecastClientInfo_SpacecastAppliance {\n  return {\n    contentProfileToken: undefined,\n    status: undefined,\n    hostname: undefined,\n    active: undefined,\n    deviceId: undefined,\n  };\n}\n\nexport const ClientInfo_SpacecastClientInfo_SpacecastAppliance: MessageFns<\n  ClientInfo_SpacecastClientInfo_SpacecastAppliance\n> = {\n  encode(\n    message: ClientInfo_SpacecastClientInfo_SpacecastAppliance,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.contentProfileToken !== undefined) {\n      writer.uint32(10).bytes(message.contentProfileToken);\n    }\n    if (message.status !== undefined) {\n      writer.uint32(16).int32(message.status);\n    }\n    if (message.hostname !== undefined) {\n      writer.uint32(26).string(message.hostname);\n    }\n    if (message.active !== undefined) {\n      writer.uint32(32).bool(message.active);\n    }\n    if (message.deviceId !== undefined) {\n      writer.uint32(42).string(message.deviceId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_SpacecastClientInfo_SpacecastAppliance {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.contentProfileToken = reader.bytes();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.status = reader.int32() as any;\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.hostname = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.active = reader.bool();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.deviceId = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_MobileDataPlanInfo(): ClientInfo_MobileDataPlanInfo {\n  return {\n    cpid: undefined,\n    serializedDataPlanStatus: undefined,\n    dataSavingQualityPickerEnabled: undefined,\n    mccmnc: undefined,\n  };\n}\n\nexport const ClientInfo_MobileDataPlanInfo: MessageFns<ClientInfo_MobileDataPlanInfo> = {\n  encode(message: ClientInfo_MobileDataPlanInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.cpid !== undefined) {\n      writer.uint32(394).string(message.cpid);\n    }\n    if (message.serializedDataPlanStatus !== undefined) {\n      writer.uint32(402).string(message.serializedDataPlanStatus);\n    }\n    if (message.dataSavingQualityPickerEnabled !== undefined) {\n      writer.uint32(416).bool(message.dataSavingQualityPickerEnabled);\n    }\n    if (message.mccmnc !== undefined) {\n      writer.uint32(426).string(message.mccmnc);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_MobileDataPlanInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_MobileDataPlanInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 49: {\n          if (tag !== 394) {\n            break;\n          }\n\n          message.cpid = reader.string();\n          continue;\n        }\n        case 50: {\n          if (tag !== 402) {\n            break;\n          }\n\n          message.serializedDataPlanStatus = reader.string();\n          continue;\n        }\n        case 52: {\n          if (tag !== 416) {\n            break;\n          }\n\n          message.dataSavingQualityPickerEnabled = reader.bool();\n          continue;\n        }\n        case 53: {\n          if (tag !== 426) {\n            break;\n          }\n\n          message.mccmnc = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_ConfigGroupsClientInfo(): ClientInfo_ConfigGroupsClientInfo {\n  return { coldConfigData: undefined, coldHashData: undefined, hotHashData: undefined, appInstallData: undefined };\n}\n\nexport const ClientInfo_ConfigGroupsClientInfo: MessageFns<ClientInfo_ConfigGroupsClientInfo> = {\n  encode(message: ClientInfo_ConfigGroupsClientInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.coldConfigData !== undefined) {\n      writer.uint32(10).string(message.coldConfigData);\n    }\n    if (message.coldHashData !== undefined) {\n      writer.uint32(26).string(message.coldHashData);\n    }\n    if (message.hotHashData !== undefined) {\n      writer.uint32(42).string(message.hotHashData);\n    }\n    if (message.appInstallData !== undefined) {\n      writer.uint32(50).string(message.appInstallData);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_ConfigGroupsClientInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_ConfigGroupsClientInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.coldConfigData = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.coldHashData = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.hotHashData = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.appInstallData = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_UnpluggedLocationInfo(): ClientInfo_UnpluggedLocationInfo {\n  return {\n    latitudeE7: undefined,\n    longitudeE7: undefined,\n    localTimestampMs: undefined,\n    ipAddress: undefined,\n    timezone: undefined,\n    prefer24HourTime: undefined,\n    locationRadiusMeters: undefined,\n    isInitialLoad: undefined,\n    browserPermissionGranted: undefined,\n    clientPermissionState: undefined,\n    locationOverrideToken: undefined,\n  };\n}\n\nexport const ClientInfo_UnpluggedLocationInfo: MessageFns<ClientInfo_UnpluggedLocationInfo> = {\n  encode(message: ClientInfo_UnpluggedLocationInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.latitudeE7 !== undefined) {\n      writer.uint32(8).int32(message.latitudeE7);\n    }\n    if (message.longitudeE7 !== undefined) {\n      writer.uint32(16).int32(message.longitudeE7);\n    }\n    if (message.localTimestampMs !== undefined) {\n      writer.uint32(24).int64(message.localTimestampMs);\n    }\n    if (message.ipAddress !== undefined) {\n      writer.uint32(34).string(message.ipAddress);\n    }\n    if (message.timezone !== undefined) {\n      writer.uint32(42).string(message.timezone);\n    }\n    if (message.prefer24HourTime !== undefined) {\n      writer.uint32(48).bool(message.prefer24HourTime);\n    }\n    if (message.locationRadiusMeters !== undefined) {\n      writer.uint32(56).int32(message.locationRadiusMeters);\n    }\n    if (message.isInitialLoad !== undefined) {\n      writer.uint32(64).bool(message.isInitialLoad);\n    }\n    if (message.browserPermissionGranted !== undefined) {\n      writer.uint32(72).bool(message.browserPermissionGranted);\n    }\n    if (message.clientPermissionState !== undefined) {\n      writer.uint32(80).int32(message.clientPermissionState);\n    }\n    if (message.locationOverrideToken !== undefined) {\n      writer.uint32(90).string(message.locationOverrideToken);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_UnpluggedLocationInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_UnpluggedLocationInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.latitudeE7 = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.longitudeE7 = reader.int32();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.localTimestampMs = longToNumber(reader.int64());\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.ipAddress = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.timezone = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 48) {\n            break;\n          }\n\n          message.prefer24HourTime = reader.bool();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.locationRadiusMeters = reader.int32();\n          continue;\n        }\n        case 8: {\n          if (tag !== 64) {\n            break;\n          }\n\n          message.isInitialLoad = reader.bool();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.browserPermissionGranted = reader.bool();\n          continue;\n        }\n        case 10: {\n          if (tag !== 80) {\n            break;\n          }\n\n          message.clientPermissionState = reader.int32();\n          continue;\n        }\n        case 11: {\n          if (tag !== 90) {\n            break;\n          }\n\n          message.locationOverrideToken = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo(): ClientInfo_KidsAppInfo {\n  return {\n    contentSettings: undefined,\n    parentCurationMode: undefined,\n    categorySettings: undefined,\n    userEducationSettings: undefined,\n  };\n}\n\nexport const ClientInfo_KidsAppInfo: MessageFns<ClientInfo_KidsAppInfo> = {\n  encode(message: ClientInfo_KidsAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.contentSettings !== undefined) {\n      ClientInfo_KidsAppInfo_KidsContentSettings.encode(message.contentSettings, writer.uint32(10).fork()).join();\n    }\n    if (message.parentCurationMode !== undefined) {\n      writer.uint32(16).int32(message.parentCurationMode);\n    }\n    if (message.categorySettings !== undefined) {\n      ClientInfo_KidsAppInfo_KidsCategorySettings.encode(message.categorySettings, writer.uint32(26).fork()).join();\n    }\n    if (message.userEducationSettings !== undefined) {\n      ClientInfo_KidsAppInfo_KidsUserEducationSettings.encode(message.userEducationSettings, writer.uint32(34).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.contentSettings = ClientInfo_KidsAppInfo_KidsContentSettings.decode(reader, reader.uint32());\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.parentCurationMode = reader.int32() as any;\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.categorySettings = ClientInfo_KidsAppInfo_KidsCategorySettings.decode(reader, reader.uint32());\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.userEducationSettings = ClientInfo_KidsAppInfo_KidsUserEducationSettings.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo_KidsContentSettings(): ClientInfo_KidsAppInfo_KidsContentSettings {\n  return { kidsNoSearchMode: undefined, ageUpMode: undefined, contentDensity: undefined };\n}\n\nexport const ClientInfo_KidsAppInfo_KidsContentSettings: MessageFns<ClientInfo_KidsAppInfo_KidsContentSettings> = {\n  encode(message: ClientInfo_KidsAppInfo_KidsContentSettings, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.kidsNoSearchMode !== undefined) {\n      writer.uint32(8).int32(message.kidsNoSearchMode);\n    }\n    if (message.ageUpMode !== undefined) {\n      writer.uint32(16).int32(message.ageUpMode);\n    }\n    if (message.contentDensity !== undefined) {\n      writer.uint32(24).int32(message.contentDensity);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo_KidsContentSettings {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo_KidsContentSettings();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.kidsNoSearchMode = reader.int32() as any;\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.ageUpMode = reader.int32() as any;\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.contentDensity = reader.int32() as any;\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo_KidsCategorySettings(): ClientInfo_KidsAppInfo_KidsCategorySettings {\n  return { enabledCategories: undefined };\n}\n\nexport const ClientInfo_KidsAppInfo_KidsCategorySettings: MessageFns<ClientInfo_KidsAppInfo_KidsCategorySettings> = {\n  encode(\n    message: ClientInfo_KidsAppInfo_KidsCategorySettings,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.enabledCategories !== undefined) {\n      writer.uint32(10).string(message.enabledCategories);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo_KidsCategorySettings {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo_KidsCategorySettings();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.enabledCategories = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings(): ClientInfo_KidsAppInfo_KidsUserEducationSettings {\n  return {\n    hasSeenHomeChipBarUserEducation: undefined,\n    hasSeenHomePivotBarUserEducation: undefined,\n    hasSeenParentMuirUserEducation: undefined,\n  };\n}\n\nexport const ClientInfo_KidsAppInfo_KidsUserEducationSettings: MessageFns<\n  ClientInfo_KidsAppInfo_KidsUserEducationSettings\n> = {\n  encode(\n    message: ClientInfo_KidsAppInfo_KidsUserEducationSettings,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.hasSeenHomeChipBarUserEducation !== undefined) {\n      writer.uint32(8).bool(message.hasSeenHomeChipBarUserEducation);\n    }\n    if (message.hasSeenHomePivotBarUserEducation !== undefined) {\n      writer.uint32(16).bool(message.hasSeenHomePivotBarUserEducation);\n    }\n    if (message.hasSeenParentMuirUserEducation !== undefined) {\n      writer.uint32(24).bool(message.hasSeenParentMuirUserEducation);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo_KidsUserEducationSettings {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.hasSeenHomeChipBarUserEducation = reader.bool();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.hasSeenHomePivotBarUserEducation = reader.bool();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.hasSeenParentMuirUserEducation = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_MusicAppInfo(): ClientInfo_MusicAppInfo {\n  return {\n    playBackMode: undefined,\n    musicLocationMasterSwitch: undefined,\n    musicActivityMasterSwitch: undefined,\n    offlineMixtapeEnabled: undefined,\n    autoOfflineEnabled: undefined,\n    iosBackgroundRefreshStatus: undefined,\n    smartDownloadsSongLimit: undefined,\n    transitionedFromMixtapeToSmartDownloads: undefined,\n    pwaInstallabilityStatus: undefined,\n    webDisplayMode: undefined,\n    musicTier: undefined,\n    storeDigitalGoodsApiSupportStatus: undefined,\n    smartDownloadsTimeSinceLastOptOutSec: undefined,\n  };\n}\n\nexport const ClientInfo_MusicAppInfo: MessageFns<ClientInfo_MusicAppInfo> = {\n  encode(message: ClientInfo_MusicAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.playBackMode !== undefined) {\n      writer.uint32(8).int32(message.playBackMode);\n    }\n    if (message.musicLocationMasterSwitch !== undefined) {\n      writer.uint32(16).int32(message.musicLocationMasterSwitch);\n    }\n    if (message.musicActivityMasterSwitch !== undefined) {\n      writer.uint32(24).int32(message.musicActivityMasterSwitch);\n    }\n    if (message.offlineMixtapeEnabled !== undefined) {\n      writer.uint32(32).bool(message.offlineMixtapeEnabled);\n    }\n    if (message.autoOfflineEnabled !== undefined) {\n      writer.uint32(40).bool(message.autoOfflineEnabled);\n    }\n    if (message.iosBackgroundRefreshStatus !== undefined) {\n      writer.uint32(48).int32(message.iosBackgroundRefreshStatus);\n    }\n    if (message.smartDownloadsSongLimit !== undefined) {\n      writer.uint32(56).int32(message.smartDownloadsSongLimit);\n    }\n    if (message.transitionedFromMixtapeToSmartDownloads !== undefined) {\n      writer.uint32(64).bool(message.transitionedFromMixtapeToSmartDownloads);\n    }\n    if (message.pwaInstallabilityStatus !== undefined) {\n      writer.uint32(72).int32(message.pwaInstallabilityStatus);\n    }\n    if (message.webDisplayMode !== undefined) {\n      writer.uint32(80).int32(message.webDisplayMode);\n    }\n    if (message.musicTier !== undefined) {\n      writer.uint32(88).int32(message.musicTier);\n    }\n    if (message.storeDigitalGoodsApiSupportStatus !== undefined) {\n      writer.uint32(96).int32(message.storeDigitalGoodsApiSupportStatus);\n    }\n    if (message.smartDownloadsTimeSinceLastOptOutSec !== undefined) {\n      writer.uint32(104).int64(message.smartDownloadsTimeSinceLastOptOutSec);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_MusicAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_MusicAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.playBackMode = reader.int32() as any;\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.musicLocationMasterSwitch = reader.int32() as any;\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.musicActivityMasterSwitch = reader.int32() as any;\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.offlineMixtapeEnabled = reader.bool();\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.autoOfflineEnabled = reader.bool();\n          continue;\n        }\n        case 6: {\n          if (tag !== 48) {\n            break;\n          }\n\n          message.iosBackgroundRefreshStatus = reader.int32() as any;\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.smartDownloadsSongLimit = reader.int32();\n          continue;\n        }\n        case 8: {\n          if (tag !== 64) {\n            break;\n          }\n\n          message.transitionedFromMixtapeToSmartDownloads = reader.bool();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.pwaInstallabilityStatus = reader.int32() as any;\n          continue;\n        }\n        case 10: {\n          if (tag !== 80) {\n            break;\n          }\n\n          message.webDisplayMode = reader.int32() as any;\n          continue;\n        }\n        case 11: {\n          if (tag !== 88) {\n            break;\n          }\n\n          message.musicTier = reader.int32() as any;\n          continue;\n        }\n        case 12: {\n          if (tag !== 96) {\n            break;\n          }\n\n          message.storeDigitalGoodsApiSupportStatus = reader.int32() as any;\n          continue;\n        }\n        case 13: {\n          if (tag !== 104) {\n            break;\n          }\n\n          message.smartDownloadsTimeSinceLastOptOutSec = longToNumber(reader.int64());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_TvAppInfo(): ClientInfo_TvAppInfo {\n  return {\n    mdxImpactedSessionsServerEvents: undefined,\n    enablePrivacyFilter: undefined,\n    zylonLeftNav: undefined,\n    certificationScope: undefined,\n    livingRoomPoTokenId: undefined,\n    jsEngineString: undefined,\n    voiceCapability: undefined,\n    systemIntegrator: undefined,\n    androidBuildFingerprint: undefined,\n    cobaltAppVersion: undefined,\n    cobaltStarboardVersion: undefined,\n    useStartPlaybackPreviewCommand: undefined,\n    shouldShowPersistentSigninOnHome: undefined,\n    androidPlayServicesVersion: undefined,\n  };\n}\n\nexport const ClientInfo_TvAppInfo: MessageFns<ClientInfo_TvAppInfo> = {\n  encode(message: ClientInfo_TvAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.mdxImpactedSessionsServerEvents !== undefined) {\n      writer.uint32(26).string(message.mdxImpactedSessionsServerEvents);\n    }\n    if (message.enablePrivacyFilter !== undefined) {\n      writer.uint32(48).bool(message.enablePrivacyFilter);\n    }\n    if (message.zylonLeftNav !== undefined) {\n      writer.uint32(56).bool(message.zylonLeftNav);\n    }\n    if (message.certificationScope !== undefined) {\n      writer.uint32(74).string(message.certificationScope);\n    }\n    if (message.livingRoomPoTokenId !== undefined) {\n      writer.uint32(82).string(message.livingRoomPoTokenId);\n    }\n    if (message.jsEngineString !== undefined) {\n      writer.uint32(98).string(message.jsEngineString);\n    }\n    if (message.voiceCapability !== undefined) {\n      ClientInfo_TvAppInfo_VoiceCapability.encode(message.voiceCapability, writer.uint32(106).fork()).join();\n    }\n    if (message.systemIntegrator !== undefined) {\n      writer.uint32(114).string(message.systemIntegrator);\n    }\n    if (message.androidBuildFingerprint !== undefined) {\n      writer.uint32(146).string(message.androidBuildFingerprint);\n    }\n    if (message.cobaltAppVersion !== undefined) {\n      writer.uint32(154).string(message.cobaltAppVersion);\n    }\n    if (message.cobaltStarboardVersion !== undefined) {\n      writer.uint32(162).string(message.cobaltStarboardVersion);\n    }\n    if (message.useStartPlaybackPreviewCommand !== undefined) {\n      writer.uint32(176).bool(message.useStartPlaybackPreviewCommand);\n    }\n    if (message.shouldShowPersistentSigninOnHome !== undefined) {\n      writer.uint32(184).bool(message.shouldShowPersistentSigninOnHome);\n    }\n    if (message.androidPlayServicesVersion !== undefined) {\n      writer.uint32(194).string(message.androidPlayServicesVersion);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_TvAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_TvAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.mdxImpactedSessionsServerEvents = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 48) {\n            break;\n          }\n\n          message.enablePrivacyFilter = reader.bool();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.zylonLeftNav = reader.bool();\n          continue;\n        }\n        case 9: {\n          if (tag !== 74) {\n            break;\n          }\n\n          message.certificationScope = reader.string();\n          continue;\n        }\n        case 10: {\n          if (tag !== 82) {\n            break;\n          }\n\n          message.livingRoomPoTokenId = reader.string();\n          continue;\n        }\n        case 12: {\n          if (tag !== 98) {\n            break;\n          }\n\n          message.jsEngineString = reader.string();\n          continue;\n        }\n        case 13: {\n          if (tag !== 106) {\n            break;\n          }\n\n          message.voiceCapability = ClientInfo_TvAppInfo_VoiceCapability.decode(reader, reader.uint32());\n          continue;\n        }\n        case 14: {\n          if (tag !== 114) {\n            break;\n          }\n\n          message.systemIntegrator = reader.string();\n          continue;\n        }\n        case 18: {\n          if (tag !== 146) {\n            break;\n          }\n\n          message.androidBuildFingerprint = reader.string();\n          continue;\n        }\n        case 19: {\n          if (tag !== 154) {\n            break;\n          }\n\n          message.cobaltAppVersion = reader.string();\n          continue;\n        }\n        case 20: {\n          if (tag !== 162) {\n            break;\n          }\n\n          message.cobaltStarboardVersion = reader.string();\n          continue;\n        }\n        case 22: {\n          if (tag !== 176) {\n            break;\n          }\n\n          message.useStartPlaybackPreviewCommand = reader.bool();\n          continue;\n        }\n        case 23: {\n          if (tag !== 184) {\n            break;\n          }\n\n          message.shouldShowPersistentSigninOnHome = reader.bool();\n          continue;\n        }\n        case 24: {\n          if (tag !== 194) {\n            break;\n          }\n\n          message.androidPlayServicesVersion = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_TvAppInfo_VoiceCapability(): ClientInfo_TvAppInfo_VoiceCapability {\n  return { hasSoftMicSupport: undefined, hasHardMicSupport: undefined };\n}\n\nexport const ClientInfo_TvAppInfo_VoiceCapability: MessageFns<ClientInfo_TvAppInfo_VoiceCapability> = {\n  encode(message: ClientInfo_TvAppInfo_VoiceCapability, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.hasSoftMicSupport !== undefined) {\n      writer.uint32(8).bool(message.hasSoftMicSupport);\n    }\n    if (message.hasHardMicSupport !== undefined) {\n      writer.uint32(16).bool(message.hasHardMicSupport);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_TvAppInfo_VoiceCapability {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_TvAppInfo_VoiceCapability();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.hasSoftMicSupport = reader.bool();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.hasHardMicSupport = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_UnpluggedAppInfo(): ClientInfo_UnpluggedAppInfo {\n  return { enableFilterMode: undefined, iosNotificationPermission: undefined, forceEnableEpg3: undefined };\n}\n\nexport const ClientInfo_UnpluggedAppInfo: MessageFns<ClientInfo_UnpluggedAppInfo> = {\n  encode(message: ClientInfo_UnpluggedAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.enableFilterMode !== undefined) {\n      writer.uint32(16).bool(message.enableFilterMode);\n    }\n    if (message.iosNotificationPermission !== undefined) {\n      writer.uint32(24).bool(message.iosNotificationPermission);\n    }\n    if (message.forceEnableEpg3 !== undefined) {\n      writer.uint32(56).bool(message.forceEnableEpg3);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_UnpluggedAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_UnpluggedAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.enableFilterMode = reader.bool();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.iosNotificationPermission = reader.bool();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.forceEnableEpg3 = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_LocationInfo(): ClientInfo_LocationInfo {\n  return {\n    locationInfoStatus: undefined,\n    ulrStatus: undefined,\n    latitudeE7: undefined,\n    longitudeE7: undefined,\n    horizontalAccuracyMeters: undefined,\n    locationFreshnessMs: undefined,\n    locationPermissionAuthorizationStatus: undefined,\n    locationOverrideToken: undefined,\n    forceLocationPlayabilityTokenRefresh: undefined,\n  };\n}\n\nexport const ClientInfo_LocationInfo: MessageFns<ClientInfo_LocationInfo> = {\n  encode(message: ClientInfo_LocationInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.locationInfoStatus !== undefined) {\n      writer.uint32(8).int32(message.locationInfoStatus);\n    }\n    if (message.ulrStatus !== undefined) {\n      ClientInfo_LocationInfo_UrlStatus.encode(message.ulrStatus, writer.uint32(18).fork()).join();\n    }\n    if (message.latitudeE7 !== undefined) {\n      writer.uint32(26).string(message.latitudeE7);\n    }\n    if (message.longitudeE7 !== undefined) {\n      writer.uint32(34).string(message.longitudeE7);\n    }\n    if (message.horizontalAccuracyMeters !== undefined) {\n      writer.uint32(42).string(message.horizontalAccuracyMeters);\n    }\n    if (message.locationFreshnessMs !== undefined) {\n      writer.uint32(50).string(message.locationFreshnessMs);\n    }\n    if (message.locationPermissionAuthorizationStatus !== undefined) {\n      writer.uint32(56).int32(message.locationPermissionAuthorizationStatus);\n    }\n    if (message.locationOverrideToken !== undefined) {\n      writer.uint32(66).string(message.locationOverrideToken);\n    }\n    if (message.forceLocationPlayabilityTokenRefresh !== undefined) {\n      writer.uint32(72).bool(message.forceLocationPlayabilityTokenRefresh);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_LocationInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_LocationInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.locationInfoStatus = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ulrStatus = ClientInfo_LocationInfo_UrlStatus.decode(reader, reader.uint32());\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.latitudeE7 = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.longitudeE7 = reader.string();\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.horizontalAccuracyMeters = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.locationFreshnessMs = reader.string();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.locationPermissionAuthorizationStatus = reader.int32();\n          continue;\n        }\n        case 8: {\n          if (tag !== 66) {\n            break;\n          }\n\n          message.locationOverrideToken = reader.string();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.forceLocationPlayabilityTokenRefresh = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_LocationInfo_UrlStatus(): ClientInfo_LocationInfo_UrlStatus {\n  return {\n    reportingEnabledSetting: undefined,\n    historyEnabledSetting: undefined,\n    isAllowed: undefined,\n    isActive: undefined,\n  };\n}\n\nexport const ClientInfo_LocationInfo_UrlStatus: MessageFns<ClientInfo_LocationInfo_UrlStatus> = {\n  encode(message: ClientInfo_LocationInfo_UrlStatus, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.reportingEnabledSetting !== undefined) {\n      writer.uint32(8).int32(message.reportingEnabledSetting);\n    }\n    if (message.historyEnabledSetting !== undefined) {\n      writer.uint32(16).int32(message.historyEnabledSetting);\n    }\n    if (message.isAllowed !== undefined) {\n      writer.uint32(24).bool(message.isAllowed);\n    }\n    if (message.isActive !== undefined) {\n      writer.uint32(32).bool(message.isActive);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_LocationInfo_UrlStatus {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_LocationInfo_UrlStatus();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.reportingEnabledSetting = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.historyEnabledSetting = reader.int32();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.isAllowed = reader.bool();\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.isActive = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_HomeGroupInfo(): ClientInfo_HomeGroupInfo {\n  return { isPartOfGroup: undefined, isGroup: undefined };\n}\n\nexport const ClientInfo_HomeGroupInfo: MessageFns<ClientInfo_HomeGroupInfo> = {\n  encode(message: ClientInfo_HomeGroupInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.isPartOfGroup !== undefined) {\n      writer.uint32(8).bool(message.isPartOfGroup);\n    }\n    if (message.isGroup !== undefined) {\n      writer.uint32(24).bool(message.isGroup);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_HomeGroupInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_HomeGroupInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.isPartOfGroup = reader.bool();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.isGroup = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/attestation_response_data.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface AttestationResponseData {\n  challenge?: string | undefined;\n  webResponse?: string | undefined;\n  androidResponse?: string | undefined;\n  iosResponse?: Uint8Array | undefined;\n  error?: number | undefined;\n  adblockReporting?: AttestationResponseData_AdblockReporting | undefined;\n}\n\nexport interface AttestationResponseData_AdblockReporting {\n  reportingStatus?: number | undefined;\n  broadSpectrumDetectionResult?: number | undefined;\n}\n\nfunction createBaseAttestationResponseData(): AttestationResponseData {\n  return {\n    challenge: undefined,\n    webResponse: undefined,\n    androidResponse: undefined,\n    iosResponse: undefined,\n    error: undefined,\n    adblockReporting: undefined,\n  };\n}\n\nexport const AttestationResponseData: MessageFns<AttestationResponseData> = {\n  encode(message: AttestationResponseData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.challenge !== undefined) {\n      writer.uint32(10).string(message.challenge);\n    }\n    if (message.webResponse !== undefined) {\n      writer.uint32(18).string(message.webResponse);\n    }\n    if (message.androidResponse !== undefined) {\n      writer.uint32(26).string(message.androidResponse);\n    }\n    if (message.iosResponse !== undefined) {\n      writer.uint32(34).bytes(message.iosResponse);\n    }\n    if (message.error !== undefined) {\n      writer.uint32(40).int32(message.error);\n    }\n    if (message.adblockReporting !== undefined) {\n      AttestationResponseData_AdblockReporting.encode(message.adblockReporting, writer.uint32(50).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): AttestationResponseData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseAttestationResponseData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.challenge = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.webResponse = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.androidResponse = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.iosResponse = reader.bytes();\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.error = reader.int32();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.adblockReporting = AttestationResponseData_AdblockReporting.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseAttestationResponseData_AdblockReporting(): AttestationResponseData_AdblockReporting {\n  return { reportingStatus: undefined, broadSpectrumDetectionResult: undefined };\n}\n\nexport const AttestationResponseData_AdblockReporting: MessageFns<AttestationResponseData_AdblockReporting> = {\n  encode(message: AttestationResponseData_AdblockReporting, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.reportingStatus !== undefined) {\n      writer.uint32(8).uint64(message.reportingStatus);\n    }\n    if (message.broadSpectrumDetectionResult !== undefined) {\n      writer.uint32(16).uint64(message.broadSpectrumDetectionResult);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): AttestationResponseData_AdblockReporting {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseAttestationResponseData_AdblockReporting();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.reportingStatus = longToNumber(reader.uint64());\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.broadSpectrumDetectionResult = longToNumber(reader.uint64());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/request_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { KeyValuePair } from \"../../../misc/common.js\";\nimport { AttestationResponseData } from \"./attestation_response_data.js\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface RequestInfo {\n  thirdPartyDigest?: string | undefined;\n  useSsl?: boolean | undefined;\n  returnErrorDetail?:\n    | boolean\n    | undefined;\n  /** \"If-None-Match\" HTTP header? */\n  ifNoneMatch?: string | undefined;\n  returnLogEntry?: boolean | undefined;\n  isPrefetch?: boolean | undefined;\n  internalExperimentFlags: KeyValuePair[];\n  returnDebugData?: boolean | undefined;\n  innertubez?: string | undefined;\n  traceProto?: boolean | undefined;\n  returnLogEntryJson?: boolean | undefined;\n  sherlogUsername?:\n    | string\n    | undefined;\n  /** repeated ConsistencyTokenJar consistency_token_jars = 26; */\n  reauthRequestInfo?: RequestInfo_ReauthRequestInfo | undefined;\n  sessionInfo?: RequestInfo_SessionInfo | undefined;\n  returnLogEntryProto?:\n    | boolean\n    | undefined;\n  /** External pre-request context as a string */\n  externalPrequestContext?:\n    | string\n    | undefined;\n  /**\n   * repeated InnerTubeTokenJar innertube_token_jar = 33;\n   * Would a botguard/droidguard response here allow playback?\n   */\n  attestationResponseData?: AttestationResponseData | undefined;\n  eats?: Uint8Array | undefined;\n  requestQos?: RequestInfo_RequestQoS | undefined;\n}\n\nexport enum RequestInfo_Criticality {\n  CRITICALITY_UNSPECIFIED = 0,\n  CRITICALITY_CRITICAL = 1,\n  CRITICALITY_NON_CRITICAL = 2,\n  UNRECOGNIZED = -1,\n}\n\n/** Quality of Service? */\nexport interface RequestInfo_RequestQoS {\n  criticality?: RequestInfo_Criticality | undefined;\n}\n\nexport interface RequestInfo_SessionInfo {\n  token?: string | undefined;\n}\n\nexport interface RequestInfo_ReauthRequestInfo {\n  encodedReauthProofToken?: string | undefined;\n}\n\nfunction createBaseRequestInfo(): RequestInfo {\n  return {\n    thirdPartyDigest: undefined,\n    useSsl: undefined,\n    returnErrorDetail: undefined,\n    ifNoneMatch: undefined,\n    returnLogEntry: undefined,\n    isPrefetch: undefined,\n    internalExperimentFlags: [],\n    returnDebugData: undefined,\n    innertubez: undefined,\n    traceProto: undefined,\n    returnLogEntryJson: undefined,\n    sherlogUsername: undefined,\n    reauthRequestInfo: undefined,\n    sessionInfo: undefined,\n    returnLogEntryProto: undefined,\n    externalPrequestContext: undefined,\n    attestationResponseData: undefined,\n    eats: undefined,\n    requestQos: undefined,\n  };\n}\n\nexport const RequestInfo: MessageFns<RequestInfo> = {\n  encode(message: RequestInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.thirdPartyDigest !== undefined) {\n      writer.uint32(50).string(message.thirdPartyDigest);\n    }\n    if (message.useSsl !== undefined) {\n      writer.uint32(56).bool(message.useSsl);\n    }\n    if (message.returnErrorDetail !== undefined) {\n      writer.uint32(72).bool(message.returnErrorDetail);\n    }\n    if (message.ifNoneMatch !== undefined) {\n      writer.uint32(98).string(message.ifNoneMatch);\n    }\n    if (message.returnLogEntry !== undefined) {\n      writer.uint32(104).bool(message.returnLogEntry);\n    }\n    if (message.isPrefetch !== undefined) {\n      writer.uint32(112).bool(message.isPrefetch);\n    }\n    for (const v of message.internalExperimentFlags) {\n      KeyValuePair.encode(v!, writer.uint32(122).fork()).join();\n    }\n    if (message.returnDebugData !== undefined) {\n      writer.uint32(128).bool(message.returnDebugData);\n    }\n    if (message.innertubez !== undefined) {\n      writer.uint32(146).string(message.innertubez);\n    }\n    if (message.traceProto !== undefined) {\n      writer.uint32(184).bool(message.traceProto);\n    }\n    if (message.returnLogEntryJson !== undefined) {\n      writer.uint32(192).bool(message.returnLogEntryJson);\n    }\n    if (message.sherlogUsername !== undefined) {\n      writer.uint32(202).string(message.sherlogUsername);\n    }\n    if (message.reauthRequestInfo !== undefined) {\n      RequestInfo_ReauthRequestInfo.encode(message.reauthRequestInfo, writer.uint32(234).fork()).join();\n    }\n    if (message.sessionInfo !== undefined) {\n      RequestInfo_SessionInfo.encode(message.sessionInfo, writer.uint32(242).fork()).join();\n    }\n    if (message.returnLogEntryProto !== undefined) {\n      writer.uint32(248).bool(message.returnLogEntryProto);\n    }\n    if (message.externalPrequestContext !== undefined) {\n      writer.uint32(258).string(message.externalPrequestContext);\n    }\n    if (message.attestationResponseData !== undefined) {\n      AttestationResponseData.encode(message.attestationResponseData, writer.uint32(274).fork()).join();\n    }\n    if (message.eats !== undefined) {\n      writer.uint32(282).bytes(message.eats);\n    }\n    if (message.requestQos !== undefined) {\n      RequestInfo_RequestQoS.encode(message.requestQos, writer.uint32(290).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.thirdPartyDigest = reader.string();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.useSsl = reader.bool();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.returnErrorDetail = reader.bool();\n          continue;\n        }\n        case 12: {\n          if (tag !== 98) {\n            break;\n          }\n\n          message.ifNoneMatch = reader.string();\n          continue;\n        }\n        case 13: {\n          if (tag !== 104) {\n            break;\n          }\n\n          message.returnLogEntry = reader.bool();\n          continue;\n        }\n        case 14: {\n          if (tag !== 112) {\n            break;\n          }\n\n          message.isPrefetch = reader.bool();\n          continue;\n        }\n        case 15: {\n          if (tag !== 122) {\n            break;\n          }\n\n          message.internalExperimentFlags.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n        }\n        case 16: {\n          if (tag !== 128) {\n            break;\n          }\n\n          message.returnDebugData = reader.bool();\n          continue;\n        }\n        case 18: {\n          if (tag !== 146) {\n            break;\n          }\n\n          message.innertubez = reader.string();\n          continue;\n        }\n        case 23: {\n          if (tag !== 184) {\n            break;\n          }\n\n          message.traceProto = reader.bool();\n          continue;\n        }\n        case 24: {\n          if (tag !== 192) {\n            break;\n          }\n\n          message.returnLogEntryJson = reader.bool();\n          continue;\n        }\n        case 25: {\n          if (tag !== 202) {\n            break;\n          }\n\n          message.sherlogUsername = reader.string();\n          continue;\n        }\n        case 29: {\n          if (tag !== 234) {\n            break;\n          }\n\n          message.reauthRequestInfo = RequestInfo_ReauthRequestInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 30: {\n          if (tag !== 242) {\n            break;\n          }\n\n          message.sessionInfo = RequestInfo_SessionInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 31: {\n          if (tag !== 248) {\n            break;\n          }\n\n          message.returnLogEntryProto = reader.bool();\n          continue;\n        }\n        case 32: {\n          if (tag !== 258) {\n            break;\n          }\n\n          message.externalPrequestContext = reader.string();\n          continue;\n        }\n        case 34: {\n          if (tag !== 274) {\n            break;\n          }\n\n          message.attestationResponseData = AttestationResponseData.decode(reader, reader.uint32());\n          continue;\n        }\n        case 35: {\n          if (tag !== 282) {\n            break;\n          }\n\n          message.eats = reader.bytes();\n          continue;\n        }\n        case 36: {\n          if (tag !== 290) {\n            break;\n          }\n\n          message.requestQos = RequestInfo_RequestQoS.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseRequestInfo_RequestQoS(): RequestInfo_RequestQoS {\n  return { criticality: undefined };\n}\n\nexport const RequestInfo_RequestQoS: MessageFns<RequestInfo_RequestQoS> = {\n  encode(message: RequestInfo_RequestQoS, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.criticality !== undefined) {\n      writer.uint32(8).int32(message.criticality);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo_RequestQoS {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo_RequestQoS();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.criticality = reader.int32() as any;\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseRequestInfo_SessionInfo(): RequestInfo_SessionInfo {\n  return { token: undefined };\n}\n\nexport const RequestInfo_SessionInfo: MessageFns<RequestInfo_SessionInfo> = {\n  encode(message: RequestInfo_SessionInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.token !== undefined) {\n      writer.uint32(10).string(message.token);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo_SessionInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo_SessionInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.token = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseRequestInfo_ReauthRequestInfo(): RequestInfo_ReauthRequestInfo {\n  return { encodedReauthProofToken: undefined };\n}\n\nexport const RequestInfo_ReauthRequestInfo: MessageFns<RequestInfo_ReauthRequestInfo> = {\n  encode(message: RequestInfo_ReauthRequestInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.encodedReauthProofToken !== undefined) {\n      writer.uint32(10).string(message.encodedReauthProofToken);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo_ReauthRequestInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo_ReauthRequestInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.encodedReauthProofToken = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/third_party_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface ThirdPartyInfo {\n  developerKey?: string | undefined;\n  appName?: string | undefined;\n  appPublisher?: string | undefined;\n  embedUrl?: string | undefined;\n  appVersion?: string | undefined;\n  embeddedPlayerContext?: ThirdPartyInfo_EmbeddedPlayerContext | undefined;\n}\n\nexport interface ThirdPartyInfo_EmbeddedPlayerContext {\n  ancestorOrigins?: string | undefined;\n  embeddedPlayerEncryptedContext?: string | undefined;\n  ancestorOriginsSupported?: boolean | undefined;\n}\n\nfunction createBaseThirdPartyInfo(): ThirdPartyInfo {\n  return {\n    developerKey: undefined,\n    appName: undefined,\n    appPublisher: undefined,\n    embedUrl: undefined,\n    appVersion: undefined,\n    embeddedPlayerContext: undefined,\n  };\n}\n\nexport const ThirdPartyInfo: MessageFns<ThirdPartyInfo> = {\n  encode(message: ThirdPartyInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.developerKey !== undefined) {\n      writer.uint32(10).string(message.developerKey);\n    }\n    if (message.appName !== undefined) {\n      writer.uint32(18).string(message.appName);\n    }\n    if (message.appPublisher !== undefined) {\n      writer.uint32(26).string(message.appPublisher);\n    }\n    if (message.embedUrl !== undefined) {\n      writer.uint32(34).string(message.embedUrl);\n    }\n    if (message.appVersion !== undefined) {\n      writer.uint32(50).string(message.appVersion);\n    }\n    if (message.embeddedPlayerContext !== undefined) {\n      ThirdPartyInfo_EmbeddedPlayerContext.encode(message.embeddedPlayerContext, writer.uint32(58).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ThirdPartyInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseThirdPartyInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.developerKey = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.appName = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.appPublisher = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.embedUrl = reader.string();\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.appVersion = reader.string();\n          continue;\n        }\n        case 7: {\n          if (tag !== 58) {\n            break;\n          }\n\n          message.embeddedPlayerContext = ThirdPartyInfo_EmbeddedPlayerContext.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseThirdPartyInfo_EmbeddedPlayerContext(): ThirdPartyInfo_EmbeddedPlayerContext {\n  return { ancestorOrigins: undefined, embeddedPlayerEncryptedContext: undefined, ancestorOriginsSupported: undefined };\n}\n\nexport const ThirdPartyInfo_EmbeddedPlayerContext: MessageFns<ThirdPartyInfo_EmbeddedPlayerContext> = {\n  encode(message: ThirdPartyInfo_EmbeddedPlayerContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ancestorOrigins !== undefined) {\n      writer.uint32(10).string(message.ancestorOrigins);\n    }\n    if (message.embeddedPlayerEncryptedContext !== undefined) {\n      writer.uint32(18).string(message.embeddedPlayerEncryptedContext);\n    }\n    if (message.ancestorOriginsSupported !== undefined) {\n      writer.uint32(24).bool(message.ancestorOriginsSupported);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ThirdPartyInfo_EmbeddedPlayerContext {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseThirdPartyInfo_EmbeddedPlayerContext();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.ancestorOrigins = reader.string();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.embeddedPlayerEncryptedContext = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 24) {\n            break;\n          }\n\n          message.ancestorOriginsSupported = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/user_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface UserInfo {\n  onBehalfOfUser?: string | undefined;\n  enableSafetyMode?: boolean | undefined;\n  credentialTransferTokens: UserInfo_CredentialTransferToken[];\n  delegatePurchases?: UserInfo_DelegatePurchases | undefined;\n  kidsParent?: UserInfo_KidsParent | undefined;\n  isIncognito?: boolean | undefined;\n  lockedSafetyMode?: boolean | undefined;\n  delegationContext?: UserInfo_DelegationContext | undefined;\n  serializedDelegationContext?: string | undefined;\n}\n\nexport interface UserInfo_KidsParent {\n}\n\nexport interface UserInfo_DelegatePurchases {\n}\n\nexport interface UserInfo_DelegationContext {\n}\n\nexport interface UserInfo_CredentialTransferToken {\n}\n\nfunction createBaseUserInfo(): UserInfo {\n  return {\n    onBehalfOfUser: undefined,\n    enableSafetyMode: undefined,\n    credentialTransferTokens: [],\n    delegatePurchases: undefined,\n    kidsParent: undefined,\n    isIncognito: undefined,\n    lockedSafetyMode: undefined,\n    delegationContext: undefined,\n    serializedDelegationContext: undefined,\n  };\n}\n\nexport const UserInfo: MessageFns<UserInfo> = {\n  encode(message: UserInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.onBehalfOfUser !== undefined) {\n      writer.uint32(26).string(message.onBehalfOfUser);\n    }\n    if (message.enableSafetyMode !== undefined) {\n      writer.uint32(56).bool(message.enableSafetyMode);\n    }\n    for (const v of message.credentialTransferTokens) {\n      UserInfo_CredentialTransferToken.encode(v!, writer.uint32(98).fork()).join();\n    }\n    if (message.delegatePurchases !== undefined) {\n      UserInfo_DelegatePurchases.encode(message.delegatePurchases, writer.uint32(106).fork()).join();\n    }\n    if (message.kidsParent !== undefined) {\n      UserInfo_KidsParent.encode(message.kidsParent, writer.uint32(114).fork()).join();\n    }\n    if (message.isIncognito !== undefined) {\n      writer.uint32(120).bool(message.isIncognito);\n    }\n    if (message.lockedSafetyMode !== undefined) {\n      writer.uint32(128).bool(message.lockedSafetyMode);\n    }\n    if (message.delegationContext !== undefined) {\n      UserInfo_DelegationContext.encode(message.delegationContext, writer.uint32(138).fork()).join();\n    }\n    if (message.serializedDelegationContext !== undefined) {\n      writer.uint32(146).string(message.serializedDelegationContext);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.onBehalfOfUser = reader.string();\n          continue;\n        }\n        case 7: {\n          if (tag !== 56) {\n            break;\n          }\n\n          message.enableSafetyMode = reader.bool();\n          continue;\n        }\n        case 12: {\n          if (tag !== 98) {\n            break;\n          }\n\n          message.credentialTransferTokens.push(UserInfo_CredentialTransferToken.decode(reader, reader.uint32()));\n          continue;\n        }\n        case 13: {\n          if (tag !== 106) {\n            break;\n          }\n\n          message.delegatePurchases = UserInfo_DelegatePurchases.decode(reader, reader.uint32());\n          continue;\n        }\n        case 14: {\n          if (tag !== 114) {\n            break;\n          }\n\n          message.kidsParent = UserInfo_KidsParent.decode(reader, reader.uint32());\n          continue;\n        }\n        case 15: {\n          if (tag !== 120) {\n            break;\n          }\n\n          message.isIncognito = reader.bool();\n          continue;\n        }\n        case 16: {\n          if (tag !== 128) {\n            break;\n          }\n\n          message.lockedSafetyMode = reader.bool();\n          continue;\n        }\n        case 17: {\n          if (tag !== 138) {\n            break;\n          }\n\n          message.delegationContext = UserInfo_DelegationContext.decode(reader, reader.uint32());\n          continue;\n        }\n        case 18: {\n          if (tag !== 146) {\n            break;\n          }\n\n          message.serializedDelegationContext = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_KidsParent(): UserInfo_KidsParent {\n  return {};\n}\n\nexport const UserInfo_KidsParent: MessageFns<UserInfo_KidsParent> = {\n  encode(_: UserInfo_KidsParent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_KidsParent {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_KidsParent();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_DelegatePurchases(): UserInfo_DelegatePurchases {\n  return {};\n}\n\nexport const UserInfo_DelegatePurchases: MessageFns<UserInfo_DelegatePurchases> = {\n  encode(_: UserInfo_DelegatePurchases, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_DelegatePurchases {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_DelegatePurchases();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_DelegationContext(): UserInfo_DelegationContext {\n  return {};\n}\n\nexport const UserInfo_DelegationContext: MessageFns<UserInfo_DelegationContext> = {\n  encode(_: UserInfo_DelegationContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_DelegationContext {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_DelegationContext();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_CredentialTransferToken(): UserInfo_CredentialTransferToken {\n  return {};\n}\n\nexport const UserInfo_CredentialTransferToken: MessageFns<UserInfo_CredentialTransferToken> = {\n  encode(_: UserInfo_CredentialTransferToken, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_CredentialTransferToken {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_CredentialTransferToken();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/innertube_context.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { KeyValuePair } from \"../../../misc/common.js\";\nimport { CapabilityInfo } from \"./capability_info.js\";\nimport { ClientInfo } from \"./client_info.js\";\nimport { RequestInfo } from \"./request_info.js\";\nimport { ThirdPartyInfo } from \"./third_party_info.js\";\nimport { UserInfo } from \"./user_info.js\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface InnerTubeContext {\n  client?: ClientInfo | undefined;\n  user?: UserInfo | undefined;\n  capabilities?: CapabilityInfo | undefined;\n  request?: RequestInfo | undefined;\n  clickTracking?: InnerTubeContext_ClickTrackingInfo | undefined;\n  thirdParty?: ThirdPartyInfo | undefined;\n  remoteClient?: ClientInfo | undefined;\n  adSignalsInfo?: InnerTubeContext_AdSignalsInfo | undefined;\n  experimentalData?: InnerTubeContext_ExperimentalData | undefined;\n  clientScreenNonce?: string | undefined;\n  activePlayers: InnerTubeContext_ActivePlayerInfo[];\n}\n\nexport interface InnerTubeContext_ExperimentalData {\n  params: KeyValuePair[];\n}\n\nexport interface InnerTubeContext_ActivePlayerInfo {\n  playerContextParams?: Uint8Array | undefined;\n}\n\nexport interface InnerTubeContext_ClickTrackingInfo {\n  clickTrackingParams?: Uint8Array | undefined;\n}\n\nexport interface InnerTubeContext_AdSignalsInfo {\n  params: KeyValuePair[];\n  bid?: string | undefined;\n  mutsuId?: string | undefined;\n  consentBumpState?: string | undefined;\n  advertisingId?: string | undefined;\n  limitAdTracking?: boolean | undefined;\n  attributionOsSupportedVersion?: string | undefined;\n}\n\nfunction createBaseInnerTubeContext(): InnerTubeContext {\n  return {\n    client: undefined,\n    user: undefined,\n    capabilities: undefined,\n    request: undefined,\n    clickTracking: undefined,\n    thirdParty: undefined,\n    remoteClient: undefined,\n    adSignalsInfo: undefined,\n    experimentalData: undefined,\n    clientScreenNonce: undefined,\n    activePlayers: [],\n  };\n}\n\nexport const InnerTubeContext: MessageFns<InnerTubeContext> = {\n  encode(message: InnerTubeContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.client !== undefined) {\n      ClientInfo.encode(message.client, writer.uint32(10).fork()).join();\n    }\n    if (message.user !== undefined) {\n      UserInfo.encode(message.user, writer.uint32(26).fork()).join();\n    }\n    if (message.capabilities !== undefined) {\n      CapabilityInfo.encode(message.capabilities, writer.uint32(34).fork()).join();\n    }\n    if (message.request !== undefined) {\n      RequestInfo.encode(message.request, writer.uint32(42).fork()).join();\n    }\n    if (message.clickTracking !== undefined) {\n      InnerTubeContext_ClickTrackingInfo.encode(message.clickTracking, writer.uint32(50).fork()).join();\n    }\n    if (message.thirdParty !== undefined) {\n      ThirdPartyInfo.encode(message.thirdParty, writer.uint32(58).fork()).join();\n    }\n    if (message.remoteClient !== undefined) {\n      ClientInfo.encode(message.remoteClient, writer.uint32(66).fork()).join();\n    }\n    if (message.adSignalsInfo !== undefined) {\n      InnerTubeContext_AdSignalsInfo.encode(message.adSignalsInfo, writer.uint32(74).fork()).join();\n    }\n    if (message.experimentalData !== undefined) {\n      InnerTubeContext_ExperimentalData.encode(message.experimentalData, writer.uint32(82).fork()).join();\n    }\n    if (message.clientScreenNonce !== undefined) {\n      writer.uint32(90).string(message.clientScreenNonce);\n    }\n    for (const v of message.activePlayers) {\n      InnerTubeContext_ActivePlayerInfo.encode(v!, writer.uint32(98).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.client = ClientInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.user = UserInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.capabilities = CapabilityInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.request = RequestInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.clickTracking = InnerTubeContext_ClickTrackingInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 7: {\n          if (tag !== 58) {\n            break;\n          }\n\n          message.thirdParty = ThirdPartyInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 8: {\n          if (tag !== 66) {\n            break;\n          }\n\n          message.remoteClient = ClientInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 9: {\n          if (tag !== 74) {\n            break;\n          }\n\n          message.adSignalsInfo = InnerTubeContext_AdSignalsInfo.decode(reader, reader.uint32());\n          continue;\n        }\n        case 10: {\n          if (tag !== 82) {\n            break;\n          }\n\n          message.experimentalData = InnerTubeContext_ExperimentalData.decode(reader, reader.uint32());\n          continue;\n        }\n        case 11: {\n          if (tag !== 90) {\n            break;\n          }\n\n          message.clientScreenNonce = reader.string();\n          continue;\n        }\n        case 12: {\n          if (tag !== 98) {\n            break;\n          }\n\n          message.activePlayers.push(InnerTubeContext_ActivePlayerInfo.decode(reader, reader.uint32()));\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_ExperimentalData(): InnerTubeContext_ExperimentalData {\n  return { params: [] };\n}\n\nexport const InnerTubeContext_ExperimentalData: MessageFns<InnerTubeContext_ExperimentalData> = {\n  encode(message: InnerTubeContext_ExperimentalData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.params) {\n      KeyValuePair.encode(v!, writer.uint32(10).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_ExperimentalData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_ExperimentalData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_ActivePlayerInfo(): InnerTubeContext_ActivePlayerInfo {\n  return { playerContextParams: undefined };\n}\n\nexport const InnerTubeContext_ActivePlayerInfo: MessageFns<InnerTubeContext_ActivePlayerInfo> = {\n  encode(message: InnerTubeContext_ActivePlayerInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.playerContextParams !== undefined) {\n      writer.uint32(10).bytes(message.playerContextParams);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_ActivePlayerInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_ActivePlayerInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.playerContextParams = reader.bytes();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_ClickTrackingInfo(): InnerTubeContext_ClickTrackingInfo {\n  return { clickTrackingParams: undefined };\n}\n\nexport const InnerTubeContext_ClickTrackingInfo: MessageFns<InnerTubeContext_ClickTrackingInfo> = {\n  encode(message: InnerTubeContext_ClickTrackingInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.clickTrackingParams !== undefined) {\n      writer.uint32(18).bytes(message.clickTrackingParams);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_ClickTrackingInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_ClickTrackingInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.clickTrackingParams = reader.bytes();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_AdSignalsInfo(): InnerTubeContext_AdSignalsInfo {\n  return {\n    params: [],\n    bid: undefined,\n    mutsuId: undefined,\n    consentBumpState: undefined,\n    advertisingId: undefined,\n    limitAdTracking: undefined,\n    attributionOsSupportedVersion: undefined,\n  };\n}\n\nexport const InnerTubeContext_AdSignalsInfo: MessageFns<InnerTubeContext_AdSignalsInfo> = {\n  encode(message: InnerTubeContext_AdSignalsInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.params) {\n      KeyValuePair.encode(v!, writer.uint32(10).fork()).join();\n    }\n    if (message.bid !== undefined) {\n      writer.uint32(18).string(message.bid);\n    }\n    if (message.mutsuId !== undefined) {\n      writer.uint32(26).string(message.mutsuId);\n    }\n    if (message.consentBumpState !== undefined) {\n      writer.uint32(34).string(message.consentBumpState);\n    }\n    if (message.advertisingId !== undefined) {\n      writer.uint32(58).string(message.advertisingId);\n    }\n    if (message.limitAdTracking !== undefined) {\n      writer.uint32(72).bool(message.limitAdTracking);\n    }\n    if (message.attributionOsSupportedVersion !== undefined) {\n      writer.uint32(82).string(message.attributionOsSupportedVersion);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_AdSignalsInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_AdSignalsInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.bid = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.mutsuId = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.consentBumpState = reader.string();\n          continue;\n        }\n        case 7: {\n          if (tag !== 58) {\n            break;\n          }\n\n          message.advertisingId = reader.string();\n          continue;\n        }\n        case 9: {\n          if (tag !== 72) {\n            break;\n          }\n\n          message.limitAdTracking = reader.bool();\n          continue;\n        }\n        case 10: {\n          if (tag !== 82) {\n            break;\n          }\n\n          message.attributionOsSupportedVersion = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.7.7\n//   protoc               v6.33.5\n// source: youtube/api/pfiinnertube/metadata_update_request.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { InnerTubeContext } from \"./innertube_context.js\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface MetadataUpdateRequest {\n  context?: InnerTubeContext | undefined;\n  encryptedVideoId?: string | undefined;\n  title?: MetadataUpdateRequest_MdeTitleUpdateRequest | undefined;\n  description?: MetadataUpdateRequest_MdeDescriptionUpdateRequest | undefined;\n  privacy?: MetadataUpdateRequest_MdePrivacyUpdateRequest | undefined;\n  tags?: MetadataUpdateRequest_MdeTagsUpdateRequest | undefined;\n  category?: MetadataUpdateRequest_MdeCategoryUpdateRequest | undefined;\n  license?: MetadataUpdateRequest_MdeLicenseUpdateRequest | undefined;\n  ageRestriction?: MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest | undefined;\n  videoStill?: MetadataUpdateRequest_MdeVideoStillRequestParams | undefined;\n  madeForKids?: MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams | undefined;\n  racy?: MetadataUpdateRequest_MdeRacyRequestParams | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeTitleUpdateRequest {\n  newTitle?: string | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeDescriptionUpdateRequest {\n  newDescription?: string | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdePrivacyUpdateRequest {\n  newPrivacy?: number | undefined;\n  clearPrivacyDraft?: boolean | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeTagsUpdateRequest {\n  newTags: string[];\n}\n\nexport interface MetadataUpdateRequest_MdeCategoryUpdateRequest {\n  newCategoryId?: number | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeLicenseUpdateRequest {\n  newLicenseId?: string | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams {\n  operation?: number | undefined;\n  newMfk?: number | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeRacyRequestParams {\n  operation?: number | undefined;\n  newRacy?: number | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest {\n  newIsAgeRestricted?: boolean | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeVideoStillRequestParams {\n  operation?: number | undefined;\n  newStillId?: number | undefined;\n  image?: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage | undefined;\n  testImage?: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage | undefined;\n  experimentImage: MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData[];\n}\n\nexport interface MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData {\n  image?: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage {\n  rawBytes?: Uint8Array | undefined;\n  dataUri?: string | undefined;\n  frameTimestampUs?: number | undefined;\n  isVertical?: boolean | undefined;\n}\n\nfunction createBaseMetadataUpdateRequest(): MetadataUpdateRequest {\n  return {\n    context: undefined,\n    encryptedVideoId: undefined,\n    title: undefined,\n    description: undefined,\n    privacy: undefined,\n    tags: undefined,\n    category: undefined,\n    license: undefined,\n    ageRestriction: undefined,\n    videoStill: undefined,\n    madeForKids: undefined,\n    racy: undefined,\n  };\n}\n\nexport const MetadataUpdateRequest: MessageFns<MetadataUpdateRequest> = {\n  encode(message: MetadataUpdateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.context !== undefined) {\n      InnerTubeContext.encode(message.context, writer.uint32(10).fork()).join();\n    }\n    if (message.encryptedVideoId !== undefined) {\n      writer.uint32(18).string(message.encryptedVideoId);\n    }\n    if (message.title !== undefined) {\n      MetadataUpdateRequest_MdeTitleUpdateRequest.encode(message.title, writer.uint32(26).fork()).join();\n    }\n    if (message.description !== undefined) {\n      MetadataUpdateRequest_MdeDescriptionUpdateRequest.encode(message.description, writer.uint32(34).fork()).join();\n    }\n    if (message.privacy !== undefined) {\n      MetadataUpdateRequest_MdePrivacyUpdateRequest.encode(message.privacy, writer.uint32(42).fork()).join();\n    }\n    if (message.tags !== undefined) {\n      MetadataUpdateRequest_MdeTagsUpdateRequest.encode(message.tags, writer.uint32(50).fork()).join();\n    }\n    if (message.category !== undefined) {\n      MetadataUpdateRequest_MdeCategoryUpdateRequest.encode(message.category, writer.uint32(58).fork()).join();\n    }\n    if (message.license !== undefined) {\n      MetadataUpdateRequest_MdeLicenseUpdateRequest.encode(message.license, writer.uint32(66).fork()).join();\n    }\n    if (message.ageRestriction !== undefined) {\n      MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest.encode(message.ageRestriction, writer.uint32(90).fork())\n        .join();\n    }\n    if (message.videoStill !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams.encode(message.videoStill, writer.uint32(162).fork()).join();\n    }\n    if (message.madeForKids !== undefined) {\n      MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams.encode(message.madeForKids, writer.uint32(546).fork())\n        .join();\n    }\n    if (message.racy !== undefined) {\n      MetadataUpdateRequest_MdeRacyRequestParams.encode(message.racy, writer.uint32(554).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.context = InnerTubeContext.decode(reader, reader.uint32());\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.encryptedVideoId = reader.string();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.title = MetadataUpdateRequest_MdeTitleUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.description = MetadataUpdateRequest_MdeDescriptionUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 5: {\n          if (tag !== 42) {\n            break;\n          }\n\n          message.privacy = MetadataUpdateRequest_MdePrivacyUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.tags = MetadataUpdateRequest_MdeTagsUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 7: {\n          if (tag !== 58) {\n            break;\n          }\n\n          message.category = MetadataUpdateRequest_MdeCategoryUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 8: {\n          if (tag !== 66) {\n            break;\n          }\n\n          message.license = MetadataUpdateRequest_MdeLicenseUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 11: {\n          if (tag !== 90) {\n            break;\n          }\n\n          message.ageRestriction = MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        }\n        case 20: {\n          if (tag !== 162) {\n            break;\n          }\n\n          message.videoStill = MetadataUpdateRequest_MdeVideoStillRequestParams.decode(reader, reader.uint32());\n          continue;\n        }\n        case 68: {\n          if (tag !== 546) {\n            break;\n          }\n\n          message.madeForKids = MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams.decode(reader, reader.uint32());\n          continue;\n        }\n        case 69: {\n          if (tag !== 554) {\n            break;\n          }\n\n          message.racy = MetadataUpdateRequest_MdeRacyRequestParams.decode(reader, reader.uint32());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeTitleUpdateRequest(): MetadataUpdateRequest_MdeTitleUpdateRequest {\n  return { newTitle: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeTitleUpdateRequest: MessageFns<MetadataUpdateRequest_MdeTitleUpdateRequest> = {\n  encode(\n    message: MetadataUpdateRequest_MdeTitleUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newTitle !== undefined) {\n      writer.uint32(10).string(message.newTitle);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeTitleUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeTitleUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.newTitle = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest(): MetadataUpdateRequest_MdeDescriptionUpdateRequest {\n  return { newDescription: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeDescriptionUpdateRequest: MessageFns<\n  MetadataUpdateRequest_MdeDescriptionUpdateRequest\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeDescriptionUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newDescription !== undefined) {\n      writer.uint32(10).string(message.newDescription);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeDescriptionUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.newDescription = reader.string();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest(): MetadataUpdateRequest_MdePrivacyUpdateRequest {\n  return { newPrivacy: undefined, clearPrivacyDraft: undefined };\n}\n\nexport const MetadataUpdateRequest_MdePrivacyUpdateRequest: MessageFns<MetadataUpdateRequest_MdePrivacyUpdateRequest> =\n  {\n    encode(\n      message: MetadataUpdateRequest_MdePrivacyUpdateRequest,\n      writer: BinaryWriter = new BinaryWriter(),\n    ): BinaryWriter {\n      if (message.newPrivacy !== undefined) {\n        writer.uint32(8).int32(message.newPrivacy);\n      }\n      if (message.clearPrivacyDraft !== undefined) {\n        writer.uint32(16).bool(message.clearPrivacyDraft);\n      }\n      return writer;\n    },\n\n    decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdePrivacyUpdateRequest {\n      const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n      const end = length === undefined ? reader.len : reader.pos + length;\n      const message = createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest();\n      while (reader.pos < end) {\n        const tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            if (tag !== 8) {\n              break;\n            }\n\n            message.newPrivacy = reader.int32();\n            continue;\n          }\n          case 2: {\n            if (tag !== 16) {\n              break;\n            }\n\n            message.clearPrivacyDraft = reader.bool();\n            continue;\n          }\n        }\n        if ((tag & 7) === 4 || tag === 0) {\n          break;\n        }\n        reader.skip(tag & 7);\n      }\n      return message;\n    },\n  };\n\nfunction createBaseMetadataUpdateRequest_MdeTagsUpdateRequest(): MetadataUpdateRequest_MdeTagsUpdateRequest {\n  return { newTags: [] };\n}\n\nexport const MetadataUpdateRequest_MdeTagsUpdateRequest: MessageFns<MetadataUpdateRequest_MdeTagsUpdateRequest> = {\n  encode(message: MetadataUpdateRequest_MdeTagsUpdateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.newTags) {\n      writer.uint32(10).string(v!);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeTagsUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeTagsUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.newTags.push(reader.string());\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest(): MetadataUpdateRequest_MdeCategoryUpdateRequest {\n  return { newCategoryId: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeCategoryUpdateRequest: MessageFns<\n  MetadataUpdateRequest_MdeCategoryUpdateRequest\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeCategoryUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newCategoryId !== undefined) {\n      writer.uint32(8).int32(message.newCategoryId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeCategoryUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.newCategoryId = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest(): MetadataUpdateRequest_MdeLicenseUpdateRequest {\n  return { newLicenseId: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeLicenseUpdateRequest: MessageFns<MetadataUpdateRequest_MdeLicenseUpdateRequest> =\n  {\n    encode(\n      message: MetadataUpdateRequest_MdeLicenseUpdateRequest,\n      writer: BinaryWriter = new BinaryWriter(),\n    ): BinaryWriter {\n      if (message.newLicenseId !== undefined) {\n        writer.uint32(10).string(message.newLicenseId);\n      }\n      return writer;\n    },\n\n    decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeLicenseUpdateRequest {\n      const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n      const end = length === undefined ? reader.len : reader.pos + length;\n      const message = createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest();\n      while (reader.pos < end) {\n        const tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            if (tag !== 10) {\n              break;\n            }\n\n            message.newLicenseId = reader.string();\n            continue;\n          }\n        }\n        if ((tag & 7) === 4 || tag === 0) {\n          break;\n        }\n        reader.skip(tag & 7);\n      }\n      return message;\n    },\n  };\n\nfunction createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams(): MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams {\n  return { operation: undefined, newMfk: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams: MessageFns<\n  MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.operation !== undefined) {\n      writer.uint32(8).int32(message.operation);\n    }\n    if (message.newMfk !== undefined) {\n      writer.uint32(16).int32(message.newMfk);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.operation = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.newMfk = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeRacyRequestParams(): MetadataUpdateRequest_MdeRacyRequestParams {\n  return { operation: undefined, newRacy: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeRacyRequestParams: MessageFns<MetadataUpdateRequest_MdeRacyRequestParams> = {\n  encode(message: MetadataUpdateRequest_MdeRacyRequestParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.operation !== undefined) {\n      writer.uint32(8).int32(message.operation);\n    }\n    if (message.newRacy !== undefined) {\n      writer.uint32(16).int32(message.newRacy);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeRacyRequestParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeRacyRequestParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.operation = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.newRacy = reader.int32();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest(): MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest {\n  return { newIsAgeRestricted: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest: MessageFns<\n  MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newIsAgeRestricted !== undefined) {\n      writer.uint32(8).bool(message.newIsAgeRestricted);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.newIsAgeRestricted = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeVideoStillRequestParams(): MetadataUpdateRequest_MdeVideoStillRequestParams {\n  return { operation: undefined, newStillId: undefined, image: undefined, testImage: undefined, experimentImage: [] };\n}\n\nexport const MetadataUpdateRequest_MdeVideoStillRequestParams: MessageFns<\n  MetadataUpdateRequest_MdeVideoStillRequestParams\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeVideoStillRequestParams,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.operation !== undefined) {\n      writer.uint32(8).int32(message.operation);\n    }\n    if (message.newStillId !== undefined) {\n      writer.uint32(16).int32(message.newStillId);\n    }\n    if (message.image !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(\n        message.image,\n        writer.uint32(26).fork(),\n      ).join();\n    }\n    if (message.testImage !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(\n        message.testImage,\n        writer.uint32(34).fork(),\n      ).join();\n    }\n    for (const v of message.experimentImage) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData.encode(v!, writer.uint32(50).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeVideoStillRequestParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 8) {\n            break;\n          }\n\n          message.operation = reader.int32();\n          continue;\n        }\n        case 2: {\n          if (tag !== 16) {\n            break;\n          }\n\n          message.newStillId = reader.int32();\n          continue;\n        }\n        case 3: {\n          if (tag !== 26) {\n            break;\n          }\n\n          message.image = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n        case 4: {\n          if (tag !== 34) {\n            break;\n          }\n\n          message.testImage = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n        case 6: {\n          if (tag !== 50) {\n            break;\n          }\n\n          message.experimentImage.push(\n            MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData.decode(\n              reader,\n              reader.uint32(),\n            ),\n          );\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData(): MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData {\n  return { image: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData: MessageFns<\n  MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.image !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(\n        message.image,\n        writer.uint32(10).fork(),\n      ).join();\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.image = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage(): MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage {\n  return { rawBytes: undefined, dataUri: undefined, frameTimestampUs: undefined, isVertical: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage: MessageFns<\n  MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.rawBytes !== undefined) {\n      writer.uint32(10).bytes(message.rawBytes);\n    }\n    if (message.dataUri !== undefined) {\n      writer.uint32(18).string(message.dataUri);\n    }\n    if (message.frameTimestampUs !== undefined) {\n      writer.uint32(32).int64(message.frameTimestampUs);\n    }\n    if (message.isVertical !== undefined) {\n      writer.uint32(40).bool(message.isVertical);\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    const end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1: {\n          if (tag !== 10) {\n            break;\n          }\n\n          message.rawBytes = reader.bytes();\n          continue;\n        }\n        case 2: {\n          if (tag !== 18) {\n            break;\n          }\n\n          message.dataUri = reader.string();\n          continue;\n        }\n        case 4: {\n          if (tag !== 32) {\n            break;\n          }\n\n          message.frameTimestampUs = longToNumber(reader.int64());\n          continue;\n        }\n        case 5: {\n          if (tag !== 40) {\n            break;\n          }\n\n          message.isVertical = reader.bool();\n          continue;\n        }\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "import { Constants } from '../../utils/index.js';\nimport { InnertubeError, Platform } from '../../utils/Utils.js';\n\nimport type { UpdateVideoMetadataOptions, UploadedVideoMetadataOptions } from '../../types/Misc.js';\nimport type { ApiResponse, Session } from '../index.js';\n\nimport { MetadataUpdateRequest } from '../../../protos/generated/youtube/api/pfiinnertube/metadata_update_request.js';\n\ninterface UploadResult {\n  status: string;\n  scottyResourceId: string;\n}\n\ninterface InitialUploadData {\n  frontend_upload_id: string;\n  upload_id: string;\n  upload_url: string;\n  scotty_resource_id: string;\n  chunk_granularity: string;\n}\n\nexport default class Studio {\n  #session: Session;\n\n  constructor(session: Session) {\n    this.#session = session;\n  }\n\n  /**\n   * Updates the metadata of a video.\n   * @example\n   * ```ts\n   * const videoId = 'abcdefg';\n   * const thumbnail = fs.readFileSync('./my_awesome_thumbnail.jpg');\n   * \n   * const response = await yt.studio.updateVideoMetadata(videoId, {\n   *   tags: [ 'astronomy', 'NASA', 'APOD' ],\n   *   title: 'Artemis Mission',\n   *   description: 'A nicely written description...',\n   *   category: 27,\n   *   license: 'creative_commons',\n   *   thumbnail,\n   *   // ...\n   * });\n   * ```\n   */\n  async updateVideoMetadata(video_id: string, metadata: UpdateVideoMetadataOptions): Promise<ApiResponse> {\n    const session = this.#session;\n\n    if (!session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const payload: MetadataUpdateRequest = {\n      context: {\n        client: {\n          osName: 'Android',\n          clientName: parseInt(Constants.CLIENT_NAME_IDS.ANDROID),\n          clientVersion: Constants.CLIENTS.ANDROID.VERSION,\n          androidSdkVersion: Constants.CLIENTS.ANDROID.SDK_VERSION,\n          visitorData: session.context.client.visitorData,\n          osVersion: '13',\n          acceptLanguage: session.context.client.hl,\n          acceptRegion: session.context.client.gl,\n          deviceMake: 'Google',\n          deviceModel: 'sdk_gphone64_x86_64',\n          screenHeightPoints: 840,\n          screenWidthPoints: 432,\n          configInfo: {\n            appInstallData: session.context.client.configInfo?.appInstallData\n          },\n          timeZone: session.context.client.timeZone,\n          chipset: 'qcom;taro'\n        },\n        activePlayers: []\n      },\n      encryptedVideoId: video_id\n    };\n\n    if (metadata.title)\n      payload.title = { newTitle: metadata.title };\n\n    if (metadata.description)\n      payload.description = { newDescription: metadata.description };\n\n    if (metadata.license)\n      payload.license = { newLicenseId: metadata.license };\n\n    if (metadata.tags)\n      payload.tags = { newTags: metadata.tags };\n\n    if (metadata.thumbnail) {\n      payload.videoStill = {\n        operation: 3,\n        image: {\n          rawBytes: metadata.thumbnail\n        },\n        experimentImage: []\n      };\n    }\n\n    if (Reflect.has(metadata, 'category'))\n      payload.category = { newCategoryId: metadata.category };\n\n    if (Reflect.has(metadata, 'privacy')) {\n      switch (metadata.privacy) {\n        case 'PUBLIC':\n          payload.privacy = { newPrivacy: 1 };\n          break;\n        case 'UNLISTED':\n          payload.privacy = { newPrivacy: 2 };\n          break;\n        case 'PRIVATE':\n          payload.privacy = { newPrivacy: 3 };\n          break;\n        default:\n          throw new Error('Invalid privacy setting');\n      }\n    }\n\n    if (Reflect.has(metadata, 'made_for_kids')) {\n      payload.madeForKids = {\n        operation: 1,\n        newMfk: metadata.made_for_kids ? 1 : 2\n      };\n    }\n\n    if (Reflect.has(metadata, 'age_restricted')) {\n      payload.racy = {\n        operation: 1,\n        newRacy: metadata.age_restricted ? 1 : 2\n      };\n    }\n\n    const writer = MetadataUpdateRequest.encode(payload);\n\n    return await session.actions.execute('/video_manager/metadata_update', {\n      protobuf: true,\n      serialized_data: writer.finish()\n    });\n  }\n\n  /**\n   * Uploads a video to YouTube.\n   * @example\n   * ```ts\n   * const file = fs.readFileSync('./my_awesome_video.mp4');\n   * const response = await yt.studio.upload(file.buffer, { title: 'Wow!' });\n   * ```\n   */\n  async upload(file: BodyInit, metadata: UploadedVideoMetadataOptions = {}): Promise<ApiResponse> {\n    if (!this.#session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const initial_data = await this.#getInitialUploadData();\n    const upload_result = await this.#uploadVideo(initial_data.upload_url, file);\n\n    if (upload_result.status !== 'STATUS_SUCCESS')\n      throw new InnertubeError('Could not process video.');\n\n    return await this.#setVideoMetadata(initial_data, upload_result, metadata);\n  }\n\n  async #getInitialUploadData(): Promise<InitialUploadData> {\n    const frontend_upload_id = `innertube_android:${Platform.shim.uuidv4()}:0:v=3,api=1,cf=3`;\n\n    const payload = {\n      frontendUploadId: frontend_upload_id,\n      deviceDisplayName: 'Pixel 6 Pro',\n      fileId: `goog-edited-video://generated?videoFileUri=content://media/external/video/media/${Platform.shim.uuidv4()}`,\n      mp4MoovAtomRelocationStatus: 'UNSUPPORTED',\n      transcodeResult: 'DISABLED',\n      connectionType: 'WIFI'\n    };\n\n    const response = await this.#session.http.fetch('/upload/youtubei', {\n      baseURL: Constants.URLS.YT_UPLOAD,\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n        'x-goog-upload-command': 'start',\n        'x-goog-upload-protocol': 'resumable'\n      },\n      body: JSON.stringify(payload)\n    });\n\n    if (!response.ok)\n      throw new InnertubeError('Could not get initial upload data');\n\n    return {\n      frontend_upload_id,\n      upload_id: response.headers.get('x-guploader-uploadid') as string,\n      upload_url: response.headers.get('x-goog-upload-url') as string,\n      scotty_resource_id: response.headers.get('x-goog-upload-header-scotty-resource-id') as string,\n      chunk_granularity: response.headers.get('x-goog-upload-chunk-granularity') as string\n    };\n  }\n\n  async #uploadVideo(upload_url: string, file: BodyInit): Promise<UploadResult> {\n    const response = await this.#session.http.fetch_function(upload_url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n        'x-goog-upload-command': 'upload, finalize',\n        'x-goog-upload-file-name': `file-${Date.now()}`,\n        'x-goog-upload-offset': '0'\n      },\n      body: file\n    });\n\n    if (!response.ok)\n      throw new InnertubeError('Could not upload video');\n\n    return await response.json();\n  }\n\n  async #setVideoMetadata(initial_data: InitialUploadData, upload_result: UploadResult, metadata: UploadedVideoMetadataOptions) {\n    return await this.#session.actions.execute('/upload/createvideo', {\n      resourceId: {\n        scottyResourceId: {\n          id: upload_result.scottyResourceId\n        }\n      },\n      frontendUploadId: initial_data.frontend_upload_id,\n      initialMetadata: {\n        title: {\n          newTitle: metadata.title\n        },\n        description: {\n          newDescription: metadata.description,\n          shouldSegment: true\n        },\n        privacy: {\n          newPrivacy: metadata.privacy || 'PRIVATE'\n        },\n        draftState: {\n          isDraft: !!metadata.is_draft\n        }\n      }\n    });\n  }\n}", "export { default as AccountManager } from './AccountManager.js';\nexport { default as PlaylistManager } from './PlaylistManager.js';\nexport { default as InteractionManager } from './InteractionManager.js';", "import type { Actions } from '../index.js';\n\nimport AccountInfo from '../../parser/youtube/AccountInfo.js';\nimport Settings from '../../parser/youtube/Settings.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\n\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { AccountItem } from '../../parser/nodes.js';\n\nexport default class AccountManager {\n  readonly #actions: Actions;\n\n  constructor(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  /**\n   * Retrieves the list of channels belonging to the signed-in account. Only useful when signed in through cookie. If signed in through OAuth, you will get the active channel only.\n   */\n  async getInfo(all: true): Promise<AccountItem[]>;\n  /**\n   * Retrieves the active channel info for the signed-in account. Throws error if `on_behalf_of_user` was used to create the Innertube instance; use `getInfo(true)` instead.\n   */\n  async getInfo(all?: false): Promise<AccountInfo>;\n  async getInfo(all = false): Promise<AccountInfo | AccountItem[]> {\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    if (!all && !!this.#actions.session.context.user.onBehalfOfUser) {\n      throw new InnertubeError('Boolean argument must be true when \"on_behalf_of_user\" is specified.');\n    }\n\n    if (all) {\n      const get_accounts_list_endpoint = new NavigationEndpoint({ getAccountsListInnertubeEndpoint: {\n        requestType: 'ACCOUNTS_LIST_REQUEST_TYPE_CHANNEL_SWITCHER',\n        callCircumstance: 'SWITCHING_USERS_FULL'\n      } });\n      const response = await get_accounts_list_endpoint.call(this.#actions, { client: 'WEB', parse: true });\n      return response.actions_memo?.getType(AccountItem) || [];\n    }\n\n    const get_accounts_list_endpoint = new NavigationEndpoint({ getAccountsListInnertubeEndpoint: {} });\n    const response = await get_accounts_list_endpoint.call(this.#actions, { client: 'TV' });\n    return new AccountInfo(response);\n  }\n\n  /**\n   * Gets YouTube settings.\n   */\n  async getSettings(): Promise<Settings> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'SPaccount_overview' } });\n    const response = await browse_endpoint.call(this.#actions);\n    return new Settings(this.#actions, response);\n  }\n}", "import { InnertubeError, throwIfMissing } from '../../utils/Utils.js';\nimport Playlist from '../../parser/youtube/Playlist.js';\n\nimport type { Actions } from '../index.js';\nimport type { Feed } from '../mixins/index.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\n\nexport default class PlaylistManager {\n  readonly #actions: Actions;\n\n  constructor(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  /**\n   * Creates a playlist.\n   * @param title - The title of the playlist.\n   * @param video_ids - An array of video IDs to add to the playlist.\n   */\n  async create(title: string, video_ids: string[]): Promise<{ success: boolean; status_code: number; playlist_id?: string; data: any }> {\n    throwIfMissing({ title, video_ids });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const create_playlist_endpoint = new NavigationEndpoint({\n      createPlaylistServiceEndpoint: {\n        title,\n        videoIds: video_ids\n      }\n    });\n\n    const response = await create_playlist_endpoint.call(this.#actions);\n\n    return {\n      success: response.success,\n      status_code: response.status_code,\n      playlist_id: response.data.playlistId,\n      data: response.data\n    };\n  }\n\n  /**\n   * Deletes a given playlist.\n   * @param playlist_id - The playlist ID.\n   */\n  async delete(playlist_id: string): Promise<{ playlist_id: string; success: boolean; status_code: number; data: any }> {\n    throwIfMissing({ playlist_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const delete_playlist_endpoint = new NavigationEndpoint({\n      deletePlaylistServiceEndpoint: {\n        sourcePlaylistId: playlist_id\n      }\n    });\n\n    const response = await delete_playlist_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      success: response.success,\n      status_code: response.status_code,\n      data: response.data\n    };\n  }\n  \n  /**\n   * Adds a given playlist to the library of a user.\n   * @param playlist_id - The playlist ID.\n   */\n  async addToLibrary(playlist_id: string){\n    throwIfMissing({ playlist_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n    \n    const like_playlist_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'LIKE',\n        target: playlist_id\n      }\n    });\n\n    return await like_playlist_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Remove a given playlist to the library of a user.\n   * @param playlist_id - The playlist ID.\n   */\n  async removeFromLibrary(playlist_id: string){\n    throwIfMissing({ playlist_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const remove_like_playlist_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'INDIFFERENT',\n        target: playlist_id\n      }\n    });\n\n    return await remove_like_playlist_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Adds videos to a given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param video_ids - An array of video IDs to add to the playlist.\n   */\n  async addVideos(playlist_id: string, video_ids: string[]): Promise<{ playlist_id: string; action_result: any }> {\n    throwIfMissing({ playlist_id, video_ids });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const playlist_edit_endpoint = new NavigationEndpoint({\n      playlistEditEndpoint: {\n        playlistId: playlist_id,\n        actions: video_ids.map((id) => ({\n          action: 'ACTION_ADD_VIDEO',\n          addedVideoId: id\n        }))\n      }\n    });\n\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions // TODO: implement actions in the parser\n    };\n  }\n\n  /**\n   * Removes videos from a given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param video_ids - An array of video IDs to remove from the playlist.\n   * @param use_set_video_ids - Option to remove videos using set video IDs.\n   */\n  async removeVideos(playlist_id: string, video_ids: string[], use_set_video_ids = false): Promise<{ playlist_id: string; action_result: any }> {\n    throwIfMissing({ playlist_id, video_ids });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const playlist = await this.#getPlaylist(playlist_id);\n\n    if (!playlist.info.is_editable)\n      throw new InnertubeError('This playlist cannot be edited.', playlist_id);\n\n    const payload = { playlistId: playlist_id, actions: [] as Record<string, any>[] };\n\n    const getSetVideoIds = async (pl: Feed): Promise<void> => {\n      const key_id = use_set_video_ids ? 'set_video_id' : 'id';\n      const videos = pl.videos.filter((video) => video_ids.includes(video.key(key_id).string()));\n\n      videos.forEach((video) =>\n        payload.actions.push({\n          action: 'ACTION_REMOVE_VIDEO',\n          setVideoId: video.key('set_video_id').string()\n        })\n      );\n\n      if (payload.actions.length < video_ids.length) {\n        const next = await pl.getContinuation();\n        return getSetVideoIds(next);\n      }\n    };\n\n    await getSetVideoIds(playlist);\n\n    if (!payload.actions.length)\n      throw new InnertubeError('Given video ids were not found in this playlist.', video_ids);\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions // TODO: implement actions in the parser\n    };\n  }\n\n  /**\n   * Moves a video to a new position within a given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param moved_video_id - The video ID to move.\n   * @param predecessor_video_id - The video ID to move the moved video before.\n   */\n  async moveVideo(playlist_id: string, moved_video_id: string, predecessor_video_id: string): Promise<{ playlist_id: string; action_result: any; }> {\n    throwIfMissing({ playlist_id, moved_video_id, predecessor_video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const playlist = await this.#getPlaylist(playlist_id);\n\n    if (!playlist.info.is_editable)\n      throw new InnertubeError('This playlist cannot be edited.', playlist_id);\n\n    const payload = { playlistId: playlist_id, actions: [] as Record<string, any>[] };\n\n    let set_video_id_0: string | undefined, set_video_id_1: string | undefined;\n\n    const getSetVideoIds = async (pl: Feed): Promise<void> => {\n      const video_0 = pl.videos.find((video) => moved_video_id === video.key('id').string());\n      const video_1 = pl.videos.find((video) => predecessor_video_id === video.key('id').string());\n\n      set_video_id_0 = set_video_id_0 || video_0?.key('set_video_id').string();\n      set_video_id_1 = set_video_id_1 || video_1?.key('set_video_id').string();\n\n      if (!set_video_id_0 || !set_video_id_1) {\n        const next = await pl.getContinuation();\n        return getSetVideoIds(next);\n      }\n    };\n\n    await getSetVideoIds(playlist);\n\n    payload.actions.push({\n      action: 'ACTION_MOVE_VIDEO_AFTER',\n      setVideoId: set_video_id_0,\n      movedSetVideoIdPredecessor: set_video_id_1\n    });\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions // TODO: implement actions in the parser\n    };\n  }\n  \n  async #getPlaylist(playlist_id: string): Promise<Playlist> {\n    if (!playlist_id.startsWith('VL')) {\n      playlist_id = `VL${playlist_id}`;\n    }\n    \n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: playlist_id } });\n    const browse_response = await browse_endpoint.call(this.#actions, { parse: true });\n    \n    return new Playlist(this.#actions, browse_response, true);\n  }\n\n  /**\n   * Sets the name for the given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param name - The name / title to use for the playlist.\n   */\n  async setName(playlist_id: string, name: string): Promise<{ playlist_id: string; action_result: any; }> {\n    throwIfMissing({ playlist_id, name });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const payload = { playlist_id, actions: [] as Record<string, any>[] };\n\n    payload.actions.push({\n      action: 'ACTION_SET_PLAYLIST_NAME',\n      playlistName: name\n    });\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions\n    };\n  }\n\n  /**\n   * Sets the description for the given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param description - The description to use for the playlist.\n   */\n  async setDescription(playlist_id: string, description: string): Promise<{ playlist_id: string; action_result: any; }> {\n    throwIfMissing({ playlist_id, description });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const payload = { playlistId: playlist_id, actions: [] as Record<string, any>[] };\n\n    payload.actions.push({\n      action: 'ACTION_SET_PLAYLIST_DESCRIPTION',\n      playlistDescription: description\n    });\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions\n    };\n  }\n}\n", "import * as ProtoUtils from '../../utils/ProtoUtils.js';\nimport { throwIfMissing, u8ToBase64 } from '../../utils/Utils.js';\nimport { CreateCommentParams, NotificationPreferences } from '../../../protos/generated/misc/params.js';\nimport type { Actions, ApiResponse } from '../index.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\n\nexport default class InteractionManager {\n  readonly #actions: Actions;\n\n  constructor(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  /**\n   * Likes a given video.\n   * @param video_id - The video ID\n   */\n  async like(video_id: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const like_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'LIKE',\n        target: video_id\n      }\n    });\n\n    return like_endpoint.call(this.#actions, { client: 'TV' });\n  }\n\n  /**\n   * Dislikes a given video.\n   * @param video_id - The video ID\n   */\n  async dislike(video_id: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const dislike_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'DISLIKE',\n        target: video_id\n      }\n    });\n\n    return dislike_endpoint.call(this.#actions, { client: 'TV' });\n  }\n\n  /**\n   * Removes a like/dislike.\n   * @param video_id - The video ID\n   */\n  async removeRating(video_id: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const remove_like_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'INDIFFERENT',\n        target: video_id\n      }\n    });\n\n    return remove_like_endpoint.call(this.#actions, { client: 'TV' });\n  }\n\n  /**\n   * Subscribes to the given channel.\n   * @param channel_id - The channel ID\n   */\n  async subscribe(channel_id: string): Promise<ApiResponse> {\n    throwIfMissing({ channel_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const subscribe_endpoint = new NavigationEndpoint({\n      subscribeEndpoint: {\n        channelIds: [ channel_id ],\n        params: 'EgIIAhgA'\n      }\n    });\n\n    return subscribe_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Unsubscribes from the given channel.\n   * @param channel_id - The channel ID\n   */\n  async unsubscribe(channel_id: string): Promise<ApiResponse> {\n    throwIfMissing({ channel_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const unsubscribe_endpoint = new NavigationEndpoint({\n      unsubscribeEndpoint: {\n        channelIds: [ channel_id ],\n        params: 'CgIIAhgA'\n      }\n    });\n\n    return unsubscribe_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Posts a comment on a given video.\n   * @param video_id - The video ID\n   * @param text - The comment text\n   */\n  async comment(video_id: string, text: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id, text });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const writer = CreateCommentParams.encode({\n      videoId: video_id,\n      params: {\n        index: 0\n      },\n      number: 7\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const create_comment_endpoint = new NavigationEndpoint({\n      createCommentEndpoint: {\n        commentText: text,\n        createCommentParams: params\n      }\n    });\n\n    return create_comment_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Translates a given text using YouTube's comment translation feature.\n   * @param text - The text to translate\n   * @param target_language - an ISO language code\n   * @param args - optional arguments\n   */\n  async translate(text: string, target_language: string, args: { video_id?: string; comment_id?: string; } = {}) {\n    throwIfMissing({ text, target_language });\n\n    const action = ProtoUtils.encodeCommentActionParams(22, { text, target_language, ...args });\n\n    const perform_comment_action_endpoint = new NavigationEndpoint({ performCommentActionEndpoint: { action } });\n    const response = await perform_comment_action_endpoint.call(this.#actions);\n    const mutation = response.data.frameworkUpdates.entityBatchUpdate.mutations[0].payload.commentEntityPayload;\n\n    return {\n      success: response.success,\n      status_code: response.status_code,\n      translated_content: mutation.translatedContent.content,\n      data: response.data\n    };\n  }\n\n  /**\n   * Changes notification preferences for a given channel.\n   * Only works with channels you are subscribed to.\n   * @param channel_id - The channel ID.\n   * @param type - The notification type.\n   */\n  async setNotificationPreferences(channel_id: string, type: 'PERSONALIZED' | 'ALL' | 'NONE'): Promise<ApiResponse> {\n    throwIfMissing({ channel_id, type });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const pref_types = {\n      PERSONALIZED: 1,\n      ALL: 2,\n      NONE: 3\n    };\n\n    if (!Object.keys(pref_types).includes(type.toUpperCase()))\n      throw new Error(`Invalid notification preference type: ${type}`);\n\n    const writer = NotificationPreferences.encode({\n      channelId: channel_id,\n      prefId: {\n        index: pref_types[type.toUpperCase() as keyof typeof pref_types]\n      },\n      number0: 0, number1: 4\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const modify_channel_notification_preference_endpoint = new NavigationEndpoint({ modifyChannelNotificationPreferenceEndpoint: { params } });\n    return modify_channel_notification_preference_endpoint.call(this.#actions);\n  }\n}", "import Session from './core/Session.js';\n\nimport { Kids, Music, Studio } from './core/clients/index.js';\nimport { AccountManager, InteractionManager, PlaylistManager } from './core/managers/index.js';\nimport { Feed, TabbedFeed } from './core/mixins/index.js';\n\nimport {\n  Channel,\n  Comments,\n  Guide,\n  HashtagFeed,\n  History,\n  HomeFeed,\n  Library,\n  NotificationsMenu,\n  Playlist,\n  Search,\n  VideoInfo\n} from './parser/youtube/index.js';\nimport { ShortFormVideoInfo } from './parser/ytshorts/index.js';\n\nimport { NavigateAction } from './parser/continuations.js';\nimport NavigationEndpoint from './parser/classes/NavigationEndpoint.js';\nimport type Format from './parser/classes/misc/Format.js';\n\nimport * as Constants from './utils/Constants.js';\nimport { generateRandomString, InnertubeError, throwIfMissing, u8ToBase64 } from './utils/Utils.js';\n\nimport type { ApiResponse } from './core/Actions.js';\nimport type {\n  DownloadOptions,\n  EngagementType,\n  FormatOptions,\n  GetVideoInfoOptions,\n  InnerTubeClient,\n  InnerTubeConfig,\n  SearchFilters\n} from './types/index.js';\nimport type { IBrowseResponse, IParsedResponse } from './parser/index.js';\n\nimport {\n  CommunityPostCommentsParam,\n  CommunityPostCommentsParamContainer,\n  CommunityPostParams,\n  GetCommentsSectionParams,\n  Hashtag,\n  ReelSequence,\n  SearchFilter,\n  SearchFilter_Filters_Duration,\n  SearchFilter_Filters_SearchType,\n  SearchFilter_Filters_UploadDate,\n  SearchFilter_Prioritize\n} from '../protos/generated/misc/params.js';\n\n/**\n * Provides access to various services and modules in the YouTube API.\n *\n * @example\n * ```ts\n * import { Innertube, UniversalCache } from 'youtubei.js';\n * const innertube = await Innertube.create({ cache: new UniversalCache(true)});\n * ```\n */\nexport default class Innertube {\n  readonly #session: Session;\n\n  constructor(session: Session) {\n    this.#session = session;\n  }\n\n  static async create(config: InnerTubeConfig = {}): Promise<Innertube> {\n    return new Innertube(await Session.create(config));\n  }\n\n  async getInfo(target: string | NavigationEndpoint, options?: GetVideoInfoOptions): Promise<VideoInfo> {\n    throwIfMissing({ target });\n\n    const payload = {\n      videoId: target instanceof NavigationEndpoint ? target.payload?.videoId : target,\n      playlistId: target instanceof NavigationEndpoint ? target.payload?.playlistId : undefined,\n      playlistIndex: target instanceof NavigationEndpoint ? target.payload?.playlistIndex : undefined,\n      params: target instanceof NavigationEndpoint ? target.payload?.params : undefined,\n      racyCheckOk: true,\n      contentCheckOk: true\n    };\n\n    const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });\n\n    const session = this.#session;\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: session.player?.signature_timestamp\n        }\n      },\n      client: options?.client\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: session.po_token\n      };\n    }\n\n    const watch_response = watch_endpoint.call(session.actions, extra_payload);\n    const watch_next_response = watch_next_endpoint.call(session.actions);\n\n    const response = await Promise.all([ watch_response, watch_next_response ]);\n\n    const cpn = generateRandomString(16);\n\n    return new VideoInfo(response, session.actions, cpn);\n  }\n\n  async getBasicInfo(video_id: string, options?: GetVideoInfoOptions): Promise<VideoInfo> {\n    throwIfMissing({ video_id });\n\n    const watch_endpoint = new NavigationEndpoint({\n      watchEndpoint: {\n        videoId: video_id,\n        racyCheckOk: true,\n        contentCheckOk: true\n      }\n    });\n\n    const session = this.#session;\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: session.player?.signature_timestamp\n        }\n      },\n      client: options?.client  \n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: session.po_token\n      };\n    }\n    \n    const watch_response = await watch_endpoint.call(session.actions, extra_payload);\n\n    const cpn = generateRandomString(16);\n\n    return new VideoInfo([ watch_response ], session.actions, cpn);\n  }\n\n  async getShortsVideoInfo(video_id: string, client?: InnerTubeClient): Promise<ShortFormVideoInfo> {\n    throwIfMissing({ video_id });\n\n    const reel_watch_endpoint = new NavigationEndpoint({\n      reelWatchEndpoint: {\n        disablePlayerResponse: false,\n        params: 'CAUwAg%3D%3D',\n        videoId: video_id\n      }\n    });\n\n    const actions = this.#session.actions;\n\n    const reel_watch_response = reel_watch_endpoint.call(actions, { client });\n\n    const writer = ReelSequence.encode({\n      shortId: video_id,\n      params: {\n        number: 5\n      },\n      feature2: 25,\n      feature3: 0\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const sequence_response = actions.execute('/reel/reel_watch_sequence', { sequenceParams: params });\n\n    const response = await Promise.all([ reel_watch_response, sequence_response ]);\n\n    const cpn = generateRandomString(16);\n\n    return new ShortFormVideoInfo([ response[0] ], actions, cpn, response[1]);\n  }\n\n  async search(query: string, filters: SearchFilters = {}): Promise<Search> {\n    throwIfMissing({ query });\n\n    const search_filter: SearchFilter = {};\n\n    search_filter.filters = {};\n\n    if (filters.prioritize) {\n      search_filter.prioritize = SearchFilter_Prioritize[filters.prioritize.toUpperCase() as keyof typeof SearchFilter_Prioritize];\n    }\n\n    if (filters.upload_date) {\n      search_filter.filters.uploadDate = SearchFilter_Filters_UploadDate[filters.upload_date.toUpperCase() as keyof typeof SearchFilter_Filters_UploadDate];\n    }\n\n    if (filters.type) {\n      search_filter.filters.type = SearchFilter_Filters_SearchType[filters.type.toUpperCase() as keyof typeof SearchFilter_Filters_SearchType];\n    }\n\n    if (filters.duration) {\n      search_filter.filters.duration = SearchFilter_Filters_Duration[filters.duration.toUpperCase() as keyof typeof SearchFilter_Filters_Duration];\n    }\n\n    if (filters.features) {\n      for (const feature of filters.features) {\n        switch (feature) {\n          case '360':\n            search_filter.filters.features360 = true;\n            break;\n          case '3d':\n            search_filter.filters.features3d = true;\n            break;\n          case '4k':\n            search_filter.filters.features4k = true;\n            break;\n          case 'creative_commons':\n            search_filter.filters.featuresCreativeCommons = true;\n            break;\n          case 'hd':\n            search_filter.filters.featuresHd = true;\n            break;\n          case 'hdr':\n            search_filter.filters.featuresHdr = true;\n            break;\n          case 'live':\n            search_filter.filters.featuresLive = true;\n            break;\n          case 'location':\n            search_filter.filters.featuresLocation = true;\n            break;\n          case 'purchased':\n            search_filter.filters.featuresPurchased = true;\n            break;\n          case 'subtitles':\n            search_filter.filters.featuresSubtitles = true;\n            break;\n          case 'vr180':\n            search_filter.filters.featuresVr180 = true;\n            break;\n          default:\n            break;\n        }\n      }\n    }\n\n    const search_endpoint = new NavigationEndpoint({\n      searchEndpoint: {\n        query,\n        params: filters ? encodeURIComponent(u8ToBase64(SearchFilter.encode(search_filter).finish())) : undefined\n      }\n    });\n    const response = await search_endpoint.call(this.#session.actions);\n\n    return new Search(this.actions, response);\n  }\n\n  async getSearchSuggestions(query: string, previous_query?: string): Promise<string[]> {\n    const session = this.#session;\n\n    const url = new URL(`${Constants.URLS.YT_SUGGESTIONS}/complete/search`);\n    url.searchParams.set('client', 'youtube');\n    url.searchParams.set('gs_ri', 'youtube');\n    url.searchParams.set('gs_id', '0');\n    url.searchParams.set('cp', '0');\n    url.searchParams.set('ds', 'yt');\n    url.searchParams.set('sugexp', Constants.CLIENTS.WEB.SUGG_EXP_ID);\n    url.searchParams.set('hl', session.context.client.hl);\n    url.searchParams.set('gl', session.context.client.gl);\n    url.searchParams.set('q', query);\n\n    if (previous_query)\n      url.searchParams.set('pq', previous_query);\n\n    const response = await session.http.fetch_function(url, {\n      headers: {\n        'Cookie': session.cookie || ''\n      }\n    });\n    \n    const text = await response.text();\n\n    const data = JSON.parse(text.replace('window.google.ac.h(', '').slice(0, -1));\n    return data[1].map((suggestion: (string | number)[]) => suggestion[0]);\n  }\n\n  async getComments(video_id: string, sort_by?: 'TOP_COMMENTS' | 'NEWEST_FIRST', comment_id?: string): Promise<Comments> {\n    throwIfMissing({ video_id });\n\n    const SORT_OPTIONS = {\n      TOP_COMMENTS: 0,\n      NEWEST_FIRST: 1\n    };\n\n    const token = GetCommentsSectionParams.encode({\n      ctx: {\n        videoId: video_id\n      },\n      unkParam: 6,\n      params: {\n        opts: {\n          videoId: video_id,\n          sortBy: SORT_OPTIONS[sort_by || 'TOP_COMMENTS'],\n          type: 2,\n          commentId: comment_id || ''\n        },\n        target: 'comments-section'\n      }\n    });\n\n    const continuation = encodeURIComponent(u8ToBase64(token.finish()));\n\n    const continuation_command = new NavigationEndpoint({\n      continuationCommand: {\n        request: 'CONTINUATION_REQUEST_TYPE_WATCH_NEXT',\n        token: continuation\n      }\n    });\n\n    const response = await continuation_command.call(this.#session.actions);\n\n    return new Comments(this.actions, response.data);\n  }\n\n  async getHomeFeed(): Promise<HomeFeed> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEwhat_to_watch' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new HomeFeed(this.actions, response);\n  }\n\n  async getGuide(): Promise<Guide> {\n    const response = await this.actions.execute('/guide');\n    return new Guide(response.data);\n  }\n\n  async getLibrary(): Promise<Library> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FElibrary' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new Library(this.actions, response);\n  }\n\n  async getHistory(): Promise<History> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEhistory' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new History(this.actions, response);\n  }\n\n  async getCourses(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEcourses_destination' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getSubscriptionsFeed(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEsubscriptions' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getChannelsFeed(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEchannels' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getChannel(id: string): Promise<Channel> {\n    throwIfMissing({ id });\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: id } });\n    let response = await browse_endpoint.call<IBrowseResponse>(this.#session.actions, { parse: true });\n\n    if (response.on_response_received_actions?.[0]?.is(NavigateAction)) {\n      response = await response.on_response_received_actions[0].endpoint.call<IBrowseResponse>(this.#session.actions, { parse: true });\n    }\n\n    return new Channel(this.actions, response, true);\n  }\n\n  async getNotifications(): Promise<NotificationsMenu> {\n    const response = await this.actions.execute('/notification/get_notification_menu', { notificationsMenuRequestType: 'NOTIFICATIONS_MENU_REQUEST_TYPE_INBOX' });\n    return new NotificationsMenu(this.actions, response);\n  }\n\n  async getUnseenNotificationsCount(): Promise<number> {\n    const response = await this.actions.execute('/notification/get_unseen_count');\n    // FIXME: properly parse this.\n    return response.data?.unseenCount || response.data?.actions?.[0].updateNotificationsUnseenCountAction?.unseenCount || 0;\n  }\n\n  /**\n   * Retrieves the user's playlists.\n   */\n  async getPlaylists(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEplaylist_aggregation' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getPlaylist(id: string): Promise<Playlist> {\n    throwIfMissing({ id });\n\n    if (!id.startsWith('VL')) {\n      id = `VL${id}`;\n    }\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: id } });\n    const response = await browse_endpoint.call(this.#session.actions);\n\n    return new Playlist(this.actions, response);\n  }\n\n  async getHashtag(hashtag: string): Promise<HashtagFeed> {\n    throwIfMissing({ hashtag });\n\n    const writer = Hashtag.encode({\n      params: {\n        hashtag,\n        type: 1\n      }\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEhashtag', params } });\n    const response = await browse_endpoint.call(this.#session.actions);\n\n    return new HashtagFeed(this.actions, response);\n  }\n\n  /**\n   * An alternative to {@link download}.\n   * Returns deciphered streaming data.\n   *\n   * If you wish to retrieve the video info too, have a look at {@link getBasicInfo} or {@link getInfo}.\n   * @param video_id - The video id.\n   * @param options - Format options.\n   */\n  async getStreamingData(video_id: string, options: FormatOptions = {}): Promise<Format> {\n    const info = await this.getBasicInfo(video_id, options);\n\n    const format = info.chooseFormat(options);\n    format.url = await format.decipher(this.#session.player);\n\n    return format;\n  }\n\n  /**\n   * Downloads a given video. If all you need the direct download link, see {@link getStreamingData}.\n   * If you wish to retrieve the video info too, have a look at {@link getBasicInfo} or {@link getInfo}.\n   * @param video_id - The video id.\n   * @param options - Download options.\n   */\n  async download(video_id: string, options?: DownloadOptions): Promise<ReadableStream<Uint8Array>> {\n    const info = await this.getBasicInfo(video_id, options);\n    return info.download(options);\n  }\n\n  /**\n   * Resolves the given URL.\n   */\n  async resolveURL(url: string): Promise<NavigationEndpoint> {\n    const response = await this.actions.execute('/navigation/resolve_url', { url, parse: true });\n\n    if (!response.endpoint)\n      throw new InnertubeError('Failed to resolve URL. Expected a NavigationEndpoint but got undefined', response);\n\n    return response.endpoint;\n  }\n\n  /**\n   * Gets a post page given a post id and the channel id\n   */\n  async getPost(post_id: string, channel_id: string) : Promise<Feed<IBrowseResponse>> {\n    throwIfMissing({ post_id, channel_id });\n    const writer = CommunityPostParams.encode({\n      f1: {\n        ucid1: channel_id,\n        postId: post_id,\n        ucid2: channel_id\n      }\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'));\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEpost_detail', params: params } });\n\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  /**\n   * Gets the comments of a post.\n   */\n  async getPostComments(post_id: string, channel_id: string, sort_by?: 'TOP_COMMENTS' | 'NEWEST_FIRST'): Promise<Comments> {\n    throwIfMissing({ post_id, channel_id });\n\n    const SORT_OPTIONS = {\n      TOP_COMMENTS: 0,\n      NEWEST_FIRST: 1\n    };\n\n    const writer1 = CommunityPostCommentsParam.encode({\n      title: 'posts',\n      commentDataContainer: {\n        title: 'comments-section',\n        commentData: {\n          sortBy: SORT_OPTIONS[sort_by || 'TOP_COMMENTS'],\n          f0: 2,\n          f1: 0,\n          channelId: channel_id,\n          postId: post_id\n        },\n        f0: 0\n      }\n    });\n\n    const writer2 = CommunityPostCommentsParamContainer.encode({\n      f0: {\n        location: 'FEcomment_post_detail_page_web_top_level',\n        protoData: encodeURIComponent(u8ToBase64(writer1.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'))\n      }\n    });\n\n    const continuation = encodeURIComponent(u8ToBase64(writer2.finish()));\n\n    const continuation_command = new NavigationEndpoint({\n      continuationCommand: {\n        request: 'CONTINUATION_REQUEST_TYPE_BROWSE',\n        token: continuation\n      }\n    });\n\n    const response = await continuation_command.call(this.#session.actions);\n\n    return new Comments(this.actions, response.data);\n  }\n\n  /**\n   * Fetches an attestation challenge.\n   */\n  async getAttestationChallenge(engagement_type: EngagementType, ids?: Record<string, any>[]) {\n    const payload: Record<string, any> = {\n      engagementType: engagement_type\n    };\n    \n    if (ids)\n      payload.ids = ids;\n    \n    return this.actions.execute('/att/get', { parse: true, ...payload });\n  }\n\n  /**\n   * Utility method to call an endpoint without having to use {@link Actions}.\n   */\n  call<T extends IParsedResponse>(endpoint: NavigationEndpoint, args: { [key: string]: any; parse: true }): Promise<T>;\n  call(endpoint: NavigationEndpoint, args?: { [key: string]: any; parse?: false }): Promise<ApiResponse>;\n  call(endpoint: NavigationEndpoint, args?: object): Promise<IParsedResponse | ApiResponse> {\n    return endpoint.call(this.actions, args);\n  }\n\n  /**\n   * An interface for interacting with YouTube Music.\n   */\n  get music() {\n    return new Music(this.#session);\n  }\n\n  /**\n   * An interface for interacting with YouTube Studio.\n   */\n  get studio() {\n    return new Studio(this.#session);\n  }\n\n  /**\n   * An interface for interacting with YouTube Kids.\n   */\n  get kids() {\n    return new Kids(this.#session);\n  }\n\n  /**\n   * An interface for managing and retrieving account information.\n   */\n  get account() {\n    return new AccountManager(this.#session.actions);\n  }\n\n  /**\n   * An interface for managing playlists.\n   */\n  get playlist() {\n    return new PlaylistManager(this.#session.actions);\n  }\n\n  /**\n   * An interface for directly interacting with certain YouTube features.\n   */\n  get interact() {\n    return new InteractionManager(this.#session.actions);\n  }\n\n  /**\n   * An internal class used to dispatch requests.\n   */\n  get actions() {\n    return this.#session.actions;\n  }\n\n  /**\n   * The session used by this instance.\n   */\n  get session() {\n    return this.#session;\n  }\n}\n", "import Innertube from '../Innertube.js';\n\nexport * from '../core/index.js';\nexport * from '../parser/index.js';\nexport type * as Types from '../types/index.js';\nexport * from '../utils/index.js';\n\nexport * from '../Innertube.js';\nexport { default as Innertube } from '../Innertube.js';\n\nexport default Innertube;", "// React Native Platform Support\nimport type { ICache } from '../types/Cache.js';\nimport { Platform } from '../utils/Utils.js';\nimport sha1Hash from './polyfills/web-crypto.js';\nimport evaluate from './jsruntime/default.js';\n\nclass Cache implements ICache {\n  #persistent_directory: string;\n  #persistent: boolean;\n\n  constructor(persistent = false, persistent_directory?: string) {\n    this.#persistent_directory = persistent_directory || '';\n    this.#persistent = persistent;\n  }\n\n  get cache_dir() {\n    return this.#persistent ? this.#persistent_directory : '';\n  }\n\n  #getStorage() {\n    const storage = new ((globalThis as any).mmkvStorage as any)({ id: 'InnertubeCache' });\n    return storage;\n  }\n\n  async get(key: string) {\n    const storage = this.#getStorage();\n    return storage.getBuffer(key)?.buffer;\n  }\n\n  async set(key: string, value: ArrayBuffer) {\n    const storage = this.#getStorage();\n    storage.set(key, new Uint8Array(value));\n  }\n\n  async remove(key: string) {\n    const storage = this.#getStorage();\n    storage.delete(key);\n  }\n}\n\nPlatform.load({\n  runtime: 'react-native',\n  server: false,\n  Cache: Cache,\n  sha1Hash,\n  uuidv4() {\n    if (globalThis.crypto?.randomUUID()) {\n      return globalThis.crypto.randomUUID();\n    }\n\n    // See https://stackoverflow.com/a/2117523\n    return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (cc) => {\n      const c = parseInt(cc);\n      return (\n        c ^\n        (window.crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\n      ).toString(16);\n    });\n  },\n  eval: evaluate,\n  fetch: globalThis.fetch,\n  Request: globalThis.Request,\n  Response: globalThis.Response,\n  Headers: globalThis.Headers,\n  FormData: globalThis.FormData,\n  File: globalThis.File,\n  ReadableStream: globalThis.ReadableStream,\n  CustomEvent: globalThis.CustomEvent\n});\n\nexport * from './lib.js';\nimport Innertube from './lib.js';\nexport default Innertube;\n"],
  "mappings": "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IAAI,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,WAAW,GAAG,IAAI,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,WAAW,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,WAAW,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,WAAW,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,UAAU,GAAG,IAAI,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,YAAY,IAAI,GAAG,GAAG,GAAG,GAAG,UAAU,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,IAAI,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,IAAI,GAAG,KAAK,GAAG,UAAU,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,YAAY,IAAI,GAAG,QAAQ,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,YAAY,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,KAAK,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,YAAY,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,SAAS,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,MAAM,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,IAAI,IAAI,GAAG,WAAY,GAAG,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,YAAY,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,WAAW,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,GAAG,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,YAAY,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,WAAW,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,WAAW,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,UAAU,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,WAAW,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,KAAK,GAAG,IAAI,GAAG,YAAY,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,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AA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR,IAAI,IAAI;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACA,IAAM,YAAY;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACA,IAAM,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,EAAE,GAAG;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AACX;AACA,IAAM,cAAN,MAAM,oBAAmB,YAAY;AAAA,EAMjC,YAAY,OAAO,KAAK,SAAS,QAAQ;AACrC,UAAM,cAAc,cAAc,IAAI,EAAE,QAAQ,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;AAC9E,UAAM,UAAU,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS,MAAM,IAAI,OAAO,MAAM,IAAI,SAAS,QAAQ;AACpG,UAAM,OAAO;AARjB;AACA;AACA;AACA;AACA;AAKI,SAAK,QAAQ,MAAM;AACnB,SAAK,MAAM,IAAI;AACf,SAAK,QAAQ,CAAC,MAAM,OAAO,IAAI,KAAK;AACpC,SAAK,MAAM;AAAA,MACP,OAAO,EAAE,MAAM,MAAM,MAAM,QAAQ,MAAM,OAAO;AAAA,MAChD,KAAK,EAAE,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO;AAAA,IAC9C;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAnBqC;AAArC,IAAM,aAAN;AAqBA,SAAS,WAAW,QAAQ,SAAS,MAAM;AACvC,MAAI,OAAO,OAAO;AAClB,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,UAAU,OAAO,KAAK,IAAI;AAC9B,MAAI,SAAS;AACb,MAAI,iBAAiB;AACrB,MAAI,OAAO,IAAI;AACX,YAAQ,MAAM,6BAA6B,QAAQ,IAAI;AACvD,WAAO,OAAO;AACd,QAAI,SAAS;AACT,aAAO,OAAO,EAAE;AAAA,EACxB,OACK;AACD,QAAI,SAAS,IAAI;AACb,aAAO,YAAY,MAAM;AACzB,WAAK,OAAO,QAAQ,KAAK;AACrB,eAAO,IAAI;AACX,eAAO,YAAY,MAAM;AACzB,eAAO,UAAU,IAAI,KAAK,KAAK,OAAO;AAClC,cAAI,SAAS,IAAI;AACb,gBAAI,CAAC;AACD,qBAAO,OAAO,GAAG;AACrB,6BAAiB;AACjB,mBAAO,YAAY,MAAM;AACzB;AAAA,UACJ;AACA,2BAAiB;AACjB,kBAAQ,QAAQ,KAAO,MAAM,IAAI;AACjC;AACA,iBAAO,YAAY,MAAM;AAAA,QAC7B;AACA,YAAI,WAAW,KAAK,CAAC,gBAAgB;AACjC,iBAAO,OAAO,WAAW,IAAI,KAAK,GAAG;AAAA,QACzC;AAAA,MACJ,YACU,OAAO,QAAQ,KAAK;AAC1B,eAAO,IAAI;AACX,eAAO,YAAY,MAAM;AACzB,eAAO,UAAU,IAAI,KAAK,KAAK,OAAO;AAClC,cAAI,SAAS,IAAI;AACb,gBAAI,CAAC,gBAAgB;AACjB,qBAAO,OAAO,GAAG;AAAA,YACrB;AACA,6BAAiB;AACjB,mBAAO,YAAY,MAAM;AACzB;AAAA,UACJ;AACA,2BAAiB;AACjB,kBAAQ,QAAQ,KAAK,OAAO;AAC5B;AACA,iBAAO,YAAY,MAAM;AAAA,QAC7B;AACA,YAAI,WAAW,KAAK,CAAC,gBAAgB;AACjC,iBAAO,OAAO,WAAW,IAAI,IAAI,GAAG;AAAA,QACxC;AAAA,MACJ,YACU,OAAO,QAAQ,IAAI;AACzB,eAAO,IAAI;AACX,eAAO,YAAY,MAAM;AACzB,eAAO,UAAU,IAAI,KAAK,MAAM,OAAO;AACnC,cAAI,SAAS,IAAI;AACb,gBAAI,CAAC,gBAAgB;AACjB,qBAAO,OAAO,GAAG;AAAA,YACrB;AACA,6BAAiB;AACjB,mBAAO,YAAY,MAAM;AACzB;AAAA,UACJ;AACA,2BAAiB;AACjB,kBAAQ,QAAQ,KAAK,OAAO;AAC5B;AACA,iBAAO,YAAY,MAAM;AAAA,QAC7B;AACA,YAAI,WAAW,KAAK,CAAC,gBAAgB;AACjC,iBAAO,OAAO,WAAW,IAAI,IAAI,GAAG;AAAA,QACxC;AAAA,MACJ,WACS,UAAU,IAAI,IAAI,IAAI;AAC3B,YAAI,UAAU;AACV,iBAAO,OAAO,CAAC;AACnB,eAAO;AACP,eAAO,UAAU,IAAI,IAAI,IAAI;AACzB,cAAI,UAAU,IAAI,IAAI,KAAK;AACvB,mBAAO;AACP,sBAAU;AACV;AAAA,UACJ;AACA,kBAAQ,QAAQ,KAAK,OAAO;AAC5B,iBAAO,YAAY,MAAM;AAAA,QAC7B;AAAA,MACJ,WACS,UAAU,IAAI,IAAI,KAAK;AAC5B,YAAI,UAAU;AACV,iBAAO,OAAO,CAAC;AACnB,eAAO,SAAS;AAChB,eAAO;AAAA,MACX,WACS,SAAS,IAAI;AAClB,eAAO,OAAO,CAAC;AAAA,MACnB;AAAA,IACJ;AACA,QAAI,OAAO,IAAI;AACX,UAAI,SAAS;AACT,eAAO,SAAS,KAAK,UAAU,IAAI,KAAK,KAAK,OAAO;AAChD,cAAI,SAAS,IAAI;AACb,mBAAO,YAAY,MAAM;AACzB,gBAAI,SAAS,MAAM,OAAO,IAAI;AAC1B,oBAAM,IAAI,WAAW,OAAO,iBAAiB,EAAE,OAAO,OAAO,QAAQ,GAAG,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,GAAG,GAAG;AAAA,YAC3H;AACA,6BAAiB;AACjB;AAAA,UACJ;AACA,2BAAiB;AACjB,kBAAQ,KAAK,SAAS,OAAO;AAC7B,iBAAO,YAAY,MAAM;AACzB,YAAE;AAAA,QACN;AACA,YAAI,gBAAgB;AAChB,gBAAM,IAAI,WAAW,OAAO,iBAAiB,EAAE,OAAO,OAAO,QAAQ,GAAG,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,GAAG,GAAG;AAAA,QAC3H;AACA,YAAI,SAAS,KAAK,CAAC,kBAAkB,IAAI,KAAK,SAAS,IAAI;AACvD,iBAAO,aAAa;AACpB,cAAI,OAAO,QAAQ;AACf,mBAAO,WAAW,OAAO,OAAO,MAAM,OAAO,YAAY,OAAO,KAAK;AACzE,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,eAAS,6BAA6B,QAAQ,IAAI;AAClD,aAAO,OAAO;AACd,UAAI,SAAS,IAAI;AACb,YAAI,YAAY,MAAM,MAAM;AACxB,iBAAO,OAAO,CAAC;AACnB,eAAO;AACP,iBAAS,MAAM,6BAA6B,QAAQ,OAAO,WAAW;AACtE,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,MAAM,OAAO;AACnB,MAAI,WAAW;AACf,MAAI,SAAS,OAAO,OAAO,KAAK;AAC5B,eAAW;AACX,WAAO,YAAY,MAAM;AAAA,EAC7B,OACK;AACD,SAAK,OAAO,QAAQ,KAAK;AACrB,aAAO,YAAY,MAAM;AACzB,UAAI,UAAU,IAAI,IAAI;AAClB,eAAO,YAAY,MAAM;AAC7B,YAAM,EAAE,MAAM,IAAI;AAClB,WAAK,UAAU,IAAI,IAAI,QAAQ;AAC3B,eAAO,OAAO,EAAE;AACpB,eAAS,OAAO,OAAO,UAAU,KAAK,KAAK,IAAI,6BAA6B,QAAQ,IAAI;AACxF,aAAO,OAAO;AAAA,IAClB;AAAA,EACJ;AACA,MAAK,OAAO,QAAQ,OAAO,OAAO,UAAU,IAAI,IAAI,MAAO,kBAAkB,IAAI,GAAG;AAChF,WAAO,OAAO,EAAE;AAAA,EACpB;AACA,MAAI,UAAU;AACV,WAAO,WAAW,OAAO,OAAO,MAAM,OAAO,YAAY,OAAO,KAAK;AACrE,WAAO,aAAa,OAAO,OAAO,SAAS,MAAM,GAAG,EAAE,EAAE,WAAW,KAAK,EAAE,CAAC;AAC3E,WAAO;AAAA,EACX;AACA,SAAO,aACH,QAAQ,IAAI,IAAI,IAAI,KACd,QACA,OAAO,KACH,WAAW,OAAO,OAAO,UAAU,OAAO,YAAY,OAAO,KAAK,CAAC,IACnE,CAAC;AACf,MAAI,OAAO,QAAQ;AACf,WAAO,WAAW,OAAO,OAAO,MAAM,OAAO,YAAY,OAAO,KAAK;AACzE,SAAO;AACX;AA9KS;AA+KT,SAAS,6BAA6B,QAAQ,MAAM;AAChD,MAAI,iBAAiB;AACrB,MAAI,QAAQ,OAAO;AACnB,MAAI,MAAM;AACV,SAAO,UAAU,IAAI,KAAK,KAAK,OAAO;AAClC,QAAI,SAAS,IAAI;AACb,YAAM,EAAE,MAAM,IAAI;AAClB,aAAO,YAAY,MAAM;AACzB,UAAI,SAAS,IAAI;AACb,cAAM,IAAI,WAAW,OAAO,iBAAiB,EAAE,OAAO,OAAO,QAAQ,GAAG,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,GAAG,GAAG;AAAA,MAC3H;AACA,uBAAiB;AACjB,aAAO,OAAO,OAAO,UAAU,OAAO,KAAK;AAC3C,cAAQ,OAAO;AACf;AAAA,IACJ;AACA,qBAAiB;AACjB,WAAO,YAAY,MAAM;AAAA,EAC7B;AACA,MAAI,gBAAgB;AAChB,UAAM,IAAI,WAAW,OAAO,iBAAiB,EAAE,OAAO,OAAO,QAAQ,GAAG,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,GAAG,GAAG;AAAA,EAC3H;AACA,SAAO,MAAM,OAAO,OAAO,UAAU,OAAO,OAAO,KAAK;AAC5D;AAvBS;AAyBT,IAAM,mBAAmB;AAAA,EACrB;AAAA,EACA;AAAA,EAAc;AAAA,EAAU;AAAA,EAAU;AAAA,EAClC;AAAA,EAAS;AAAA,EAAQ;AAAA,EACjB;AAAA,EAAyB;AAAA,EACzB;AAAA,EAAM;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAO;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EAC1E;AAAA,EAAM;AAAA,EACN;AAAA,EAAK;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EACtE;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EACpB;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EAAc;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EACzF;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EAAM;AAAA,EAAO;AAAA,EAAK;AAAA,EAAK;AAAA,EACnF;AAAA,EAAO;AAAA,EAAO;AAAA,EACd;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAS;AAAA,EAAY;AAAA,EAAY;AAAA,EAAW;AAAA,EAAM;AAAA,EAAQ;AAAA,EACpF;AAAA,EAAW;AAAA,EAAW;AAAA,EAAO;AAAA,EAAY;AAAA,EAAM;AAAA,EAAU;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EACnF;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAO;AAAA,EAAS;AAAA,EACjC;AAAA,EAAc;AAAA,EAAa;AAAA,EAAW;AAAA,EAAW;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAClF;AAAA,EAAM;AAAA,EAAS;AAAA,EAAS;AAAA,EAAe;AAAA,EAAO;AAAA,EAAO;AAAA,EAAY;AAAA,EAAQ;AAAA,EACzE;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAa;AAAA,EAAmB;AAAA,EAAmC;AAAA,EAAsB;AAAA,EACzG;AAAA,EAAiB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAc;AAAA,EAAW;AAAA,EAAkB;AAAA,EACxE;AAAA,EAAY;AAAA,EAAK;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAW;AAC9D;AACA,IAAM,mBAAmB;AAAA,EACrB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,KAAK;AAAA,EACL,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AACd;AAEA,SAAS,uBAAuB,QAAQ,SAAS;AAC7C,OAAK,OAAO,QAAQ,OAAO,MAAM,OAAO,SAAS,IAAI,aAAa,SAAS;AACvE,WAAO,OAAO,IAAI,iBAAiB,OAAO,SAAS,IAAI,GAAG,CAAC;AAAA,EAC/D;AACA,MAAI,CAAC,WAAW,QAAQ,SAAS,UAAU,GAAG;AAC1C,WAAO,QAAQ,sBAAsB,OAAO,UAAU;AAAA,EAC1D;AACJ;AAPS;AAQT,SAAS,kBAAkB,QAAQ,OAAO,YAAY,YAAY;AAC9D,MAAI,QAAQ,aAAa,MAAM,eAAe,cAAc;AACxD,SAAK,OAAO,SAAS,IAAI,aAAa,WAAW,OAAO,QAAQ,GAAG;AAC/D,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AAPS;AAQT,SAAS,YAAY,QAAQ,SAAS,GAAG;AACrC,MAAI,OAAO,SAAS,MAAM;AACtB,WAAO;AACX,YAAU,QAAQ,OAAO;AACzB,SAAO;AACX;AALS;AAMT,SAAS,WAAW,QAAQ,SAAS,GAAG;AACpC,MAAI,OAAO,SAAS,MAAM;AACtB,WAAO;AACX,YAAU,QAAQ,OAAO;AACzB,SAAO;AACX;AALS;AAMT,SAAS,QAAQ,QAAQ,SAAS,GAAG;AACjC,MAAI,OAAO,SAAS,MAAM;AACtB,WAAO,OAAO,IAAI,iBAAiB,IAAI,GAAG,CAAC;AAC/C,YAAU,QAAQ,OAAO;AAC7B;AAJS;AAKT,SAAS,qBAAqB,QAAQ,MAAM;AACxC,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK,mBAAmB;AACpB,WAAK,OAAO;AACZ,YAAM,EAAE,SAAS,IAAI;AACrB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC7C,cAAM,UAAU,SAAS,CAAC;AAC1B,YAAI;AACA,+BAAqB,QAAQ,OAAO;AAAA,MAC5C;AACA;AAAA,IACJ;AAAA,IACA,KAAK,oBAAoB;AACrB,WAAK,OAAO;AACZ,YAAM,EAAE,WAAW,IAAI;AACvB,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC/C,6BAAqB,QAAQ,WAAW,CAAC,CAAC;AAAA,MAC9C;AACA;AAAA,IACJ;AAAA,IACA,KAAK;AACD,WAAK,OAAO;AACZ,UAAI,KAAK,aAAa;AAClB,eAAO,OAAO,EAAE;AACpB,aAAO,KAAK;AACZ,2BAAqB,QAAQ,KAAK,IAAI;AACtC;AAAA,IACJ,KAAK;AACD,2BAAqB,QAAQ,KAAK,KAAK;AACvC;AAAA,IACJ,KAAK;AACD,WAAK,OAAO;AACZ,2BAAqB,QAAQ,KAAK,QAAQ;AAAA,EAClD;AACJ;AAlCS;AAmCT,SAAS,0BAA0B,QAAQ,SAAS,MAAM,GAAG,kBAAkB;AAC3E,MAAI,UAAU,GAAG;AACb,SAAK,IAAI,WAAW,OAAO;AACvB,aAAO,OAAO,GAAG;AAAA,IACrB;AACA,QAAI,CAAC,qBAAqB,IAAI,eAAe,WAAW;AACpD,aAAO,OAAO,GAAG;AAAA,IACrB;AAAA,EACJ;AACA,OAAK,IAAI,WAAW,SAAS,MAAM,aAAa;AAC5C,WAAO,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,QAAQ,IAAI,QAAQ,IAAI,UAAU,SAAS,MAAM;AACjD,WAAO,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,WAAW,OAAO,MAAM,MAAM,QAAQ;AACtC,WAAO,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,WAAW,OAAO,MAAM,MAAM,QAAQ;AACtC,WAAO,OAAO,IAAI,OAAO;AAAA,EAC7B;AACJ;AArBS;AAsBT,SAAS,qBAAqB,QAAQ,SAAS,GAAG;AAC9C,MAAI,UAAU,GAAG;AACb,SAAK,IAAI,WAAW,OAAO;AACvB,aAAO,OAAO,GAAG;AAAA,IACrB;AACA,SAAK,IAAI,eAAe,WAAW;AAC/B,aAAO,OAAO,GAAG;AAAA,IACrB;AACA,QAAI,MAAM,aAAa;AACnB,aAAO,OAAO,EAAE;AAAA,IACpB;AACA,QAAI,MAAM,aAAa;AACnB,aAAO,OAAO,EAAE;AAAA,IACpB;AAAA,EACJ;AACA,OAAK,IAAI,WAAW,OAAO;AACvB,WAAO,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,WAAW,OAAO,MAAM,MAAM,QAAQ;AACtC,WAAO,OAAO,GAAG;AAAA,EACrB;AACA,MAAI,WAAW,OAAO,MAAM,MAAM,QAAQ;AACtC,WAAO,OAAO,IAAI,OAAO;AAAA,EAC7B;AACJ;AAxBS;AAyBT,SAAS,qBAAqB,QAAQ,SAAS,GAAG;AAC9C,MAAI,MAAM,QAAQ;AACd,QAAI,WAAW,OAAO;AAClB,aAAO,OAAO,GAAG;AACrB,WAAO,gBAAgB;AAAA,EAC3B;AACA,MAAI,MAAM,UAAU,UAAU;AAC1B,WAAO,OAAO,IAAI,OAAO;AAC7B,UAAS,IAAI,WAAW,UACnB,IAAI,WAAW,SAChB,KAAK;AACb;AAXS;AAYT,SAAS,8BAA8B,MAAM;AACzC,SAAO,CAAC,KAAK,WAAW,QAAQ,KAAK,SAAS,SAAS;AAC3D;AAFS;AAGT,SAAS,aAAa,QAAQ,QAAQ,MAAM,sBAAsB;AAC9D,SAAO,QAAQ;AACX,QAAI,OAAO,MAAM,IAAI,GAAG;AACpB,UAAI;AACA,eAAO,OAAO,GAAG;AACrB,aAAO;AAAA,IACX;AACA,QAAI,wBAAwB,OAAO;AAC/B,6BAAuB;AAC3B,aAAS,OAAO,GAAG;AAAA,EACvB;AACA,SAAO;AACX;AAZS;AAaT,SAAS,wBAAwB,QAAQ,QAAQ,MAAM;AACnD,MAAI,MAAM;AACV,SAAO,KAAK;AACR,QAAI,IAAI,MAAM,IAAI;AACd,aAAO,OAAO,KAAK,IAAI;AAC3B,UAAM,IAAI,GAAG;AAAA,EACjB;AACA,SAAO,MAAM,IAAI,IAAI;AACzB;AARS;AAST,SAAS,eAAe,aAAa;AACjC,UAAQ,YAAY,MAAM;AAAA,IACtB,KAAK;AACD,aAAO,YAAY;AAAA,IACvB,KAAK;AACD,aAAO,YAAY,YAAY,MAAM,YAAY;AAAA,IACrD,KAAK;AACD,aAAO,eAAe,YAAY,MAAM,IAAI,MAAM,eAAe,YAAY,QAAQ;AAAA,EAC7F;AACJ;AATS;AAUT,SAAS,kBAAkB,SAAS,GAAG;AACnC,MAAI,WAAW,IAAI,OAAO;AACtB,QAAI,UAAU,KAAK,MAAM;AACrB,aAAO;AACX,QAAI,UAAU,QAAQ,MAAM;AACxB,aAAO;AACX,YAAQ,IAAI,WAAW;AAAA,EAC3B;AACA,UAAQ,IAAI,WAAW,UAAU,IAAI,WAAW;AACpD;AATS;AAUT,SAAS,mBAAmB,QAAQ,SAAS,GAAG;AAC5C,OAAK,IAAI,eAAe,WAAW;AAC/B,QAAI,UAAU;AACV,aAAO,OAAO,GAAG;AACrB,WAAO,SAAS;AAAA,EACpB;AACA,MAAI,CAAC,kBAAkB,SAAS,CAAC;AAC7B,WAAO,OAAO,CAAC;AACvB;AARS;AAST,SAAS,eAAe,QAAQ,KAAK;AACjC,SAAO,OAAO,OAAO,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI;AACtD;AAFS;AAIT,SAAS,eAAe,QAAQ,SAAS,kBAAkB;AACvD,SAAO,SAAS,YAAY,MAAM,CAAC;AAC/B;AACJ,SAAO,aAAa,OAAO,OAAO,MAAM,OAAO,YAAY,OAAO,KAAK;AACvE,SAAO,OAAO,gBAAgB,MAAM,OAAO,eAAe,MACnD,eAAe,kBAAkB,OAAO,UAAU,KAAK,SACxD,uBAAuB,QAAQ,SAAS,GAAG,gBAAgB;AACrE;AAPS;AAQT,SAAS,sBAAsB,QAAQ,SAAS;AAC5C,QAAM,aAAa,4BAA4B,MAAM;AACrD,MAAI,CAAC,kBAAkB,UAAU;AAC7B,WAAO,OAAO,CAAC;AACnB,SAAO,aAAa,OAAO,cAAc,UAAU;AACnD,SAAO,uBAAuB,QAAQ,SAAS,GAAG,UAAU,UAAU,IAAI,CAAC;AAC/E;AANS;AAOT,SAAS,uBAAuB,QAAQ,SAAS,WAAW,kBAAkB;AAC1E,MAAI,QAAQ,OAAO;AACnB,SAAO,OAAO,QAAQ,OAAO,KAAK;AAC9B,QAAI,OAAO,gBAAgB,IAAI;AAC3B,aAAO,cAAc,OAAO,OAAO,MAAM,OAAO,OAAO,KAAK;AAC5D,kBAAY;AACZ,YAAM,OAAO,4BAA4B,MAAM;AAC/C,UAAI,CAAC,iBAAiB,IAAI;AACtB,eAAO,OAAO,CAAC;AACnB,yBAAmB,oBAAoB,UAAU,IAAI,IAAI;AACzD,aAAO,cAAc,OAAO,cAAc,IAAI;AAC9C,cAAQ,OAAO;AAAA,IACnB,OACK;AACD,YAAM,SAAS,6BAA6B,MAAM;AAClD,UAAI,SAAS,GAAG;AACZ,YAAI,CAAC,iBAAiB,MAAM,GAAG;AAC3B,iBAAO,OAAO,IAAI,OAAO,cAAc,MAAM,CAAC;AAAA,QAClD;AACA,eAAO,cAAc;AACrB,eAAO;AACP,eAAO;AAAA,MACX,WACS,CAAC,iBAAiB,OAAO,WAAW,GAAG;AAC5C;AAAA,MACJ;AACA,kBAAY,MAAM;AAAA,IACtB;AAAA,EACJ;AACA,MAAI,OAAO,SAAS,OAAO,KAAK;AAC5B,WAAO,cAAc,OAAO,OAAO,MAAM,OAAO,OAAO,KAAK;AAAA,EAChE;AACA,QAAM,EAAE,OAAO,IAAI,OAAO;AAC1B,MAAI,oBAAoB,UAAU,KAAK,UAAU,IAAI;AACjD,UAAM,QAAQ,eAAe,kBAAkB,OAAO,UAAU;AAChE,QAAI,UAAU;AACV,aAAO,UAAU,YAAY,cAAc;AAC/C,QAAI,CAAC;AACD,aAAO;AACX,QAAI,UAAU,QAAQ;AAClB,WAAK,WAAW,IAAI,WAAW,GAAG;AAC9B,eAAO,QAAQ;AAAA,MACnB;AACA,aAAO;AAAA,IACX;AACA,QAAI,UAAU,GAAG;AACb,UAAI,UAAU,OAAO;AACjB,eAAO;AAAA,MACX;AACA,WAAK,QAAQ,WAAW,OAAO;AAC3B,eAAO;AAAA,MACX;AACA,WAAK,QAAQ,WAAW,OAAO;AAC3B,YAAI,UAAU,WAAW,UAAU,OAAO,GAAG;AACzC,iBAAO,QAAQ;AAAA,QACnB,OACK;AACD,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO,SAAS;AAAA,IACpB;AACA,QAAI,UAAU,WACT,UAAU,OAAO,MACjB,QAAQ,WAAW,OAAO;AAC3B,aAAO,QAAQ;AAAA,IACnB;AACA,QAAI,UAAU,QAAQ;AAClB,aAAO,UAAU,SACX,SAAS,cACT,UAAU,OACN,cACA,QAAQ;AAAA,IACtB;AACA,QAAI,UAAU,QAAQ;AAClB,aAAO,SAAS;AAAA,IACpB;AACA,SAAK,QAAQ,WAAW,OAAO;AAC3B,aAAO,QAAQ,QAAQ;AAAA,IAC3B;AACA,WAAO;AAAA,EACX;AACA,SAAO,UAAU,YAAY,cAAc;AAC/C;AAnFS;AAoFT,SAAS,sBAAsB,QAAQ;AACnC,MAAI,OAAO,YAAY,MAAM;AAC7B,MAAI,SAAS;AACT,WAAO;AACX,QAAM,SAAS,6BAA6B,MAAM;AAClD,MAAI;AACA,WAAO;AACX,MAAI,CAAC,kBAAkB,IAAI;AACvB,WAAO,OAAO,EAAE;AACpB,SAAO;AACX;AAVS;AAWT,SAAS,4BAA4B,QAAQ;AACzC,MAAI,OAAO,OAAO,WAAW,OAAO,QAAQ,CAAC,MAAM,KAAK;AACpD,WAAO,OAAO,CAAC;AAAA,EACnB;AACA,SAAO,cAAc,OAAO,OAAO,WAAY,OAAO,SAAS,CAAE;AACjE,SAAO,UAAU;AACjB,SAAO,kBAAkB,MAAM;AACnC;AAPS;AAQT,SAAS,kBAAkB,QAAQ;AAC/B,MAAI,YAAY;AAChB,QAAM,OAAO,OAAO;AACpB,MAAI,SAAS,KAAK;AACd,UAAM,QAAQ,OAAO,QAAQ;AAC7B,WAAO,UAAU,YAAY,MAAM,CAAC,IAAI,IAAI;AACxC,kBAAa,aAAa,IAAK,MAAM,OAAO,WAAW;AACvD,UAAI,YAAY;AACZ,cAAM,IAAI,WAAW,EAAE,OAAO,OAAO,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,GAAG,OAAO,iBAAiB,GAAG;AAAA,IACpH;AACA,QAAI,OAAO,gBAAgB,KAAK;AAC5B,YAAM,IAAI,WAAW,EAAE,OAAO,OAAO,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,GAAG,OAAO,iBAAiB,CAAC;AAAA,IAC9G;AACA,gBAAY,MAAM;AAClB,WAAO;AAAA,EACX;AACA,OAAK,UAAU,IAAI,IAAI,QAAQ;AAC3B,WAAO,OAAO,CAAC;AACnB,QAAM,QAAQ,OAAO,OAAO,WAAW,OAAO,QAAQ,CAAC;AACvD,OAAK,UAAU,KAAK,IAAI,QAAQ;AAC5B,WAAO,OAAO,CAAC;AACnB,QAAM,QAAQ,OAAO,OAAO,WAAW,OAAO,QAAQ,CAAC;AACvD,OAAK,UAAU,KAAK,IAAI,QAAQ;AAC5B,WAAO,OAAO,CAAC;AACnB,QAAM,QAAQ,OAAO,OAAO,WAAW,OAAO,QAAQ,CAAC;AACvD,OAAK,UAAU,KAAK,IAAI,QAAQ;AAC5B,WAAO,OAAO,CAAC;AACnB,cAAa,MAAM,IAAI,KAAK,KAAO,MAAM,KAAK,KAAK,IAAM,MAAM,KAAK,KAAK,IAAK,MAAM,KAAK;AACzF,SAAO,cAAc,OAAO,OAAO,WAAY,OAAO,SAAS,CAAE;AACjE,SAAO,UAAU;AACjB,SAAO;AACX;AA/BS;AAiCT,IAAM,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACA,SAAS,UAAU,QAAQ,SAAS;AAChC,SAAO,S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",
  "names": ["obj", "Text", "SearchFilter", "info", "formats", "info", "candidates", "WireType", "helpers_exports", "RegexState", "RegexFlags", "next", "ch", "block", "scope", "body", "attributes", "node", "tokenStart", "tokenValue", "tokenRaw", "modifierFlags", "token", "children", "declaredVariable", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "data", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "_data", "_data", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "_actions", "Text", "Text", "Text", "Text", "Text", "_data", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "API_PATH", "_data", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "_data", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "_Panel", "Panel", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "SearchFilter", "Text", "SearchFilter", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "Text", "_actions", "Text", "Text", "Text", "parse", "key", "value", "Text", "type", "key_info", "data", "parse", "resolved_key_info", "_ContinuationCommand", "ContinuationCommand", "TAG", "error", "ContinuationCommand", "mutation", "Channel", "LiveChat", "Playlist", "_page", "_actions", "_continuation", "_page", "_actions", "info", "_actions", "tab", "_Channel", "item", "response", "Channel", "_page", "_actions", "_continuation", "_page", "_page", "_actions", "button", "_Playlist", "Playlist", "Playlist", "_actions", "_continuation", "_LiveChat", "LiveChat", "_page", "_actions", "_page", "_actions", "tab", "info", "button", "LiveChat", "_page", "_actions", "HomeFeed", "Library", "Playlist", "Search", "_page", "_page", "_actions", "shelf", "_page", "tab", "_page", "_actions", "_continuation", "_HomeFeed", "tab", "HomeFeed", "_page", "_actions", "_continuation", "_Library", "cmd", "Library", "_page", "_actions", "_continuation", "_Playlist_instances", "_Playlist", "Playlist", "_page", "_actions", "Playlist", "_page", "_actions", "_continuation", "_Search", "tab", "Search", "Channel", "HomeFeed", "Search", "VideoInfo", "_Channel", "Channel", "_HomeFeed", "HomeFeed", "_Search", "Search", "_VideoInfo", "VideoInfo", "_watch_next_continuation", "ContinuationCommand", "Text", "TAG_", "info", "Text", "_data", "TAG", "_session", "TAG", "result", "TAG", "error", "_session", "Search", "VideoInfo", "Channel", "HomeFeed", "_session", "_actions", "Search", "HomeFeed", "Library", "Playlist", "tab", "longToNumber", "longToNumber", "_session", "_actions", "get_accounts_list_endpoint", "response", "_actions", "Playlist", "_actions", "_session", "Channel", "Playlist", "info"]
}
