{"version":3,"file":"index.cjs","sources":["../../lib/LastFM.ts","../../lib/dataModel/lastFMNatives.ts","../../lib/dataModel/searchFunctions.ts"],"sourcesContent":["import crypto from \"crypto\";\n\nimport {\n  AlbumAddTags,\n  AlbumGetInfo,\n  AlbumGetTags,\n  AlbumGetTopTags,\n  AlbumInfoRes,\n  AlbumRemoveTag,\n  AlbumSearch,\n  AlbumSearchRes,\n  AlbumTagsRes,\n  MBIDAlbum,\n  NamedAlbum,\n} from \"~/dataModel/albumFunctions\";\nimport {\n  ArtistAddTags,\n  ArtistGetCorrection,\n  ArtistGetCorrectionRes,\n  ArtistGetInfo,\n  ArtistGetInfoRes,\n  ArtistGetSimilar,\n  ArtistGetSimilarRes,\n  ArtistGetTags,\n  ArtistGetTagsRes,\n  ArtistGetTopAlbums,\n  ArtistGetTopAlbumsRes,\n  ArtistGetTopTags,\n  ArtistGetTopTagsRes,\n  ArtistGetTopTracks,\n  ArtistGetTopTracksRes,\n  ArtistRemoveTag,\n  ArtistSearch,\n  ArtistSearchRes,\n  MBIDArtist,\n  NamedArtist,\n} from \"~/dataModel/artistFunctions\";\nimport {\n  ChartGetTopArtists,\n  ChartGetTopTags,\n  ChartGetTopTracks,\n  ChartTopTagsRes,\n  ChartTopTracksRes,\n} from \"~/dataModel/chartFunctions\";\nimport {\n  GeoArtistsRequest,\n  GeoTopArtistsRes,\n  GeoTopTracksRes,\n  GeoTracksRequest,\n} from \"~/dataModel/geoFunctions\";\nimport {\n  LibraryArtistsRes,\n  LibraryRequest,\n} from \"~/dataModel/libraryFunctions\";\nimport {\n  ErrorMessage,\n  ErrorResponse,\n  LastFmConstructor,\n  LastFmRequest,\n  PostRequest,\n  ResponseData,\n} from \"~/dataModel/sharedFunctions\";\nimport {\n  TagInfoRequest,\n  TagInfoRes,\n  TagSimilarRequest,\n  TagSimilarRes,\n  TagTopAlbumsRes,\n  TagTopArtistsRes,\n  TagTopRequest,\n  TagTopTagsRequest,\n  TagTopTracksRes,\n  TagWeeklyChartRes,\n  TopTagsRes,\n} from \"~/dataModel/tagFunctions\";\nimport {\n  MBIDTrack,\n  TrackAddTags,\n  TrackGetCorrectionRequest,\n  TrackGetCorrectionRes,\n  TrackGetInfo,\n  TrackGetInfoRes,\n  TrackGetSimilar,\n  TrackGetSimilarRes,\n  TrackGetTags,\n  TrackGetTagsRes,\n  TrackGetTopTags,\n  TrackGetTopTagsRes,\n  TrackLove,\n  TrackRemoveTag,\n  TrackRequest,\n  TrackScrobble,\n  TrackScrobbleRes,\n  TrackSearch,\n  TrackSearchRes,\n  TrackUnlove,\n  TrackUpdateNowPlaying,\n  TrackUpdateNowPlayingRes,\n} from \"~/dataModel/trackFunctions\";\nimport {\n  UserGetFriends,\n  UserGetFriendsRes,\n  UserGetInfo,\n  UserGetInfoRes,\n  UserGetLovedTracks,\n  UserGetLovedTracksRes,\n  UserGetPersonalTags,\n  UserGetPersonalTagsRes,\n  UserGetRecentTracks,\n  UserGetRecentTracksRes,\n  UserGetTopAlbums,\n  UserGetTopAlbumsRes,\n  UserGetTopArtists,\n  UserGetTopArtistsRes,\n  UserGetTopTags,\n  UserGetTopTagsRes,\n  UserGetTopTracks,\n  UserGetTopTracksRes,\n  UserGetWeeklyAlbumChart,\n  UserGetWeeklyAlbumChartRes,\n  UserGetWeeklyArtistChart,\n  UserGetWeeklyArtistChartRes,\n  UserGetWeeklyChartList,\n  UserGetWeeklyChartListRes,\n  UserGetWeeklyTrackChart,\n  UserGetWeeklyTrackChartRes,\n} from \"~/dataModel/userFunctions\";\n\nexport default class LastFm {\n  #debug: boolean;\n\n  #apiKey: string | undefined;\n\n  #apiSecret: string | undefined;\n\n  #username: string | undefined;\n\n  #password: string | undefined;\n\n  #sessionKey: string | undefined;\n\n  constructor(opts: LastFmConstructor | undefined) {\n    this.#debug = opts?.debug ?? false;\n    if (opts?.apiKey) {\n      this.#apiKey = opts.apiKey;\n    }\n    if (opts?.apiSecret) {\n      this.#apiSecret = opts.apiSecret;\n    }\n    if (opts?.username) {\n      this.#username = opts.username;\n    }\n    if (opts?.password) {\n      this.#password = opts.password;\n    }\n    if (opts?.sessionKey) {\n      this.#sessionKey = opts.sessionKey;\n    }\n  }\n\n  static #sendErr(msg: string): Promise<ErrorMessage> {\n    // handles error checking within library\n    const errMsg: ErrorMessage = { error: 6, message: msg, success: false };\n    return new Promise((_, reject) => {\n      reject(errMsg);\n    });\n  }\n\n  static #PostRequestToString(params: LastFmRequest): string {\n    return Object.entries(params)\n      .sort((a, b) => a[0].localeCompare(b[0]))\n      .reduce(\n        (sig: string, [key, value]: [string, string | string[]]) =>\n          key !== \"format\"\n            ? value instanceof Array\n              ? value.reduce(\n                  (newSig: string, item: string, i) => `${newSig}[${i}]${item}`,\n                  sig,\n                )\n              : `${sig}${key}${typeof value !== \"undefined\" ? value : \"\"}`\n            : sig,\n        \"\",\n      );\n  }\n\n  static #createSignature(params: LastFmRequest, secret: string): string {\n    // create signature by hashing\n    const sig: string = this.#PostRequestToString(params) + secret;\n    return crypto.createHash(\"md5\").update(sig, \"utf8\").digest(\"hex\");\n  }\n\n  static #urlBuilder(url: URL, params: LastFmRequest): string {\n    Object.entries(params).forEach(([key, value]: [string, unknown]) => {\n      url.searchParams.append(key, value?.toString() ?? \"\");\n    });\n    return url.toString();\n  }\n\n  async #getData<\n    Response = Record<string, unknown>,\n    Name extends string | number | symbol = string,\n  >(\n    params: LastFmRequest,\n    name: Name,\n  ): Promise<ResponseData<Response> | ErrorResponse> {\n    const queryUrl = new URL(\"http://ws.audioscrobbler.com/2.0/\");\n    const queryParams = {\n      ...params,\n      api_key: this.#apiKey,\n      format: \"json\",\n    };\n    try {\n      const res = await fetch(LastFm.#urlBuilder(queryUrl, queryParams), {\n        method: \"GET\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n        },\n      });\n      if (res.ok) {\n        const json = (await res.json()) as {\n          [P in Name]: ResponseData<Response>;\n        };\n        json[name].success = true;\n        return json[name];\n      }\n      throw new Error(\"Error communicating with last.fm\");\n    } catch (e) {\n      if (typeof e === \"string\") {\n        if (this.#debug) console.log(`Exception: ${e}`);\n        return { success: false, error: new Error(e) };\n      } else if (e instanceof Error) {\n        if (this.#debug) console.log(`Exception: ${e.message}`);\n        return { success: false, error: e };\n      } else {\n        if (this.#debug) console.log(`Unknown exception`);\n        return { success: false, error: new Error(\"Unknown error\") };\n      }\n    }\n  }\n\n  async #postData<Response = Record<string, unknown>>(\n    params: LastFmRequest,\n  ): Promise<ResponseData<Response> | ErrorResponse> {\n    if (!this.#apiKey) throw new Error(\"No api key available\");\n    if (!this.#apiSecret) throw new Error(\"No api secret available\");\n    const qs: Partial<PostRequest> & LastFmRequest = {\n      ...params,\n      api_key: this.#apiKey,\n      format: \"json\",\n    };\n    if (this.#sessionKey) qs.sk = this.#sessionKey;\n    qs.api_sig = LastFm.#createSignature(qs, this.#apiSecret);\n    try {\n      const res = await fetch(\"https://ws.audioscrobbler.com/2.0/\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n        },\n        // TS will not see PostParams as Record<string, string> because it has optional fields\n        body: new URLSearchParams(qs as unknown as Record<string, string>),\n      });\n      if (res.ok) {\n        const json = (await res.json()) as ResponseData<Response>;\n        json.success = true;\n        return json;\n      }\n      throw new Error(\"Error communicating with last.fm\");\n    } catch (e) {\n      if (typeof e === \"string\") {\n        if (this.#debug) console.log(`Exception: ${e}`);\n        return { success: false, error: new Error(e) };\n      } else if (e instanceof Error) {\n        if (this.#debug) console.log(`Exception: ${e.message}`);\n        return { success: false, error: e };\n      } else {\n        if (this.#debug) console.log(`Unknown exception`);\n        return { success: false, error: new Error(\"Unknown error\") };\n      }\n    }\n  }\n\n  async #get<\n    Response = Record<string, unknown>,\n    Name extends string | number | symbol = string,\n  >(qs: LastFmRequest, name: Name) {\n    return this.#getData<Response, Name>(qs, name);\n  }\n\n  #post<Response = { success: boolean }>(qs: LastFmRequest) {\n    return this.#postData<Response>(qs);\n  }\n\n  public async auth_getMobileSession(): Promise<\n    { key: string; success: boolean } | ErrorMessage\n  > {\n    const qs = {\n      method: \"auth.getMobileSession\",\n      username: this.#username,\n      password: this.#password,\n    };\n    try {\n      const res = await this.#postData<{\n        session: { key: string; success: boolean };\n      }>(qs);\n      if (!res.success) throw new Error(\"Error connecting to last.fm\");\n      this.#sessionKey = res.session.key;\n      return res.session;\n    } catch (e: unknown) {\n      return LastFm.#sendErr(e as string);\n    }\n  }\n\n  // album methods\n  album_addTags(qs: AlbumAddTags | undefined) {\n    if (!qs?.artist || !qs.album || !qs.tags) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n\n    return this.#post({ ...qs, method: \"album.addTags\" });\n  }\n\n  album_getInfo(qs: AlbumGetInfo | undefined) {\n    if (\n      (!(qs as NamedAlbum | undefined)?.artist || !(qs as NamedAlbum).album) &&\n      !(qs as MBIDAlbum | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<AlbumInfoRes>(\n      { autocorrect: \"1\", ...qs, method: \"album.getInfo\" },\n      \"album\",\n    );\n  }\n\n  album_getTags(qs: AlbumGetTags | undefined) {\n    if (\n      (!(qs as NamedAlbum | undefined)?.artist || !(qs as NamedAlbum).album) &&\n      !(qs as MBIDAlbum | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<AlbumTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"album.getTags\" },\n      \"tags\",\n    );\n  }\n\n  album_getTopTags(qs: AlbumGetTopTags | undefined) {\n    if (\n      (!(qs as NamedAlbum | undefined)?.artist || !(qs as NamedAlbum).album) &&\n      !(qs as MBIDAlbum | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<AlbumTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"album.getTopTags\" },\n      \"toptags\",\n    );\n  }\n\n  album_removeTag(qs: AlbumRemoveTag | undefined) {\n    if (!qs?.artist || !qs.album || !qs.tag) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#post({ ...qs, method: \"album.removeTag\" });\n  }\n\n  album_search(qs: AlbumSearch | undefined) {\n    if (!qs?.album) {\n      return LastFm.#sendErr(\"Missing album param\");\n    }\n    return this.#get<AlbumSearchRes>(\n      { autocorrect: \"1\", ...qs, method: \"album.search\" },\n      \"results\",\n    );\n  }\n\n  // Artist methods\n  artist_addTags(qs: ArtistAddTags | undefined) {\n    if (!qs?.artist || !qs.tags) {\n      return LastFm.#sendErr(\"Missing required parameters\");\n    }\n    return this.#post({ ...qs, method: \"artist.addTags\" });\n  }\n\n  artist_getCorrection(qs: ArtistGetCorrection | undefined) {\n    if (!qs?.artist) {\n      return LastFm.#sendErr(\"Missing Artist\");\n    }\n    return this.#get<ArtistGetCorrectionRes>(\n      { ...qs, method: \"artist.getCorrection\" },\n      \"corrections\",\n    );\n  }\n\n  artist_getInfo(qs: ArtistGetInfo | undefined) {\n    if (\n      !(qs as NamedArtist | undefined)?.artist &&\n      !(qs as MBIDArtist | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing both artist and mbid\");\n    }\n\n    return this.#get<ArtistGetInfoRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.getInfo\" },\n      \"artist\",\n    );\n  }\n\n  artist_getSimilar(qs: ArtistGetSimilar | undefined) {\n    if (\n      !(qs as NamedArtist | undefined)?.artist &&\n      !(qs as MBIDArtist | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing both artist and mbid\");\n    }\n    return this.#get<ArtistGetSimilarRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.getSimilar\" },\n      \"similarartists\",\n    );\n  }\n\n  artist_getTags(qs: ArtistGetTags | undefined) {\n    if (\n      !qs ||\n      (!(qs as NamedArtist).artist && !(qs as MBIDArtist).mbid) ||\n      !qs.user\n    ) {\n      return LastFm.#sendErr(\"Missing both artist and mbid\");\n    }\n    return this.#get<ArtistGetTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.getTags\" },\n      \"tags\",\n    );\n  }\n\n  artist_getTopAlbums(qs: ArtistGetTopAlbums | undefined) {\n    if (\n      !(qs as NamedArtist | undefined)?.artist &&\n      !(qs as MBIDArtist | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing both artist and mbid\");\n    }\n    return this.#get<ArtistGetTopAlbumsRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.getTopAlbums\" },\n      \"topalbums\",\n    );\n  }\n\n  artist_getTopTags(qs: ArtistGetTopTags | undefined) {\n    if (\n      !(qs as NamedArtist | undefined)?.artist &&\n      !(qs as MBIDArtist | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing both artist and mbid\");\n    }\n    return this.#get<ArtistGetTopTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.getTopTags\" },\n      \"toptags\",\n    );\n  }\n\n  artist_getTopTracks(qs: ArtistGetTopTracks | undefined) {\n    if (\n      !(qs as NamedArtist | undefined)?.artist &&\n      !(qs as MBIDArtist | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing both artist and mbid\");\n    }\n    return this.#get<ArtistGetTopTracksRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.getTopTracks\" },\n      \"toptracks\",\n    );\n  }\n\n  artist_removeTag(qs: ArtistRemoveTag | undefined) {\n    if (!qs?.artist || !qs.tag) {\n      return LastFm.#sendErr(\"Missing required parameters\");\n    }\n    return this.#post({ ...qs, method: \"artist.removeTag\" });\n  }\n\n  artist_search(qs: ArtistSearch | undefined) {\n    if (!qs?.artist) {\n      return LastFm.#sendErr(\"Missing artist to search\");\n    }\n    return this.#get<ArtistSearchRes>(\n      { autocorrect: \"1\", ...qs, method: \"artist.search\" },\n      \"results\",\n    );\n  }\n\n  // Chart Methods\n  chart_getTopArtists(qs: ChartGetTopArtists | undefined) {\n    return this.#get<ChartGetTopArtists>(\n      { autocorrect: \"1\", ...qs, method: \"chart.getTopArtists\" },\n      \"artists\",\n    );\n  }\n\n  chart_getTopTags(qs: ChartGetTopTags | undefined) {\n    return this.#get<ChartTopTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"chart.getTopTags\" },\n      \"tags\",\n    );\n  }\n\n  chart_getTopTracks(qs: ChartGetTopTracks | undefined) {\n    return this.#get<ChartTopTracksRes>(\n      { autocorrect: \"1\", ...qs, method: \"chart.getTopTracks\" },\n      \"tracks\",\n    );\n  }\n\n  // Geo Methods\n  geo_getTopArtists(qs: GeoArtistsRequest | undefined) {\n    if (!qs?.country) {\n      return LastFm.#sendErr(\"Missing country\");\n    }\n    return this.#get<GeoTopArtistsRes>(\n      { autocorrect: \"1\", ...qs, method: \"geo.getTopArtists\" },\n      \"topartists\",\n    );\n  }\n\n  geo_getTopTracks(qs: GeoTracksRequest | undefined) {\n    if (!qs?.country) {\n      return LastFm.#sendErr(\"Missing country\");\n    }\n    return this.#get<GeoTopTracksRes>(\n      { autocorrect: \"1\", ...qs, method: \"geo.getTopTracks\" },\n      \"tracks\",\n    );\n  }\n\n  // Library Methods\n  library_getArtists(qs: LibraryRequest | undefined) {\n    if (!qs?.user) {\n      return LastFm.#sendErr(\"Missing username\");\n    }\n    return this.#get<LibraryArtistsRes>(\n      { autocorrect: \"1\", ...qs, method: \"library.getArtists\" },\n      \"artists\",\n    );\n  }\n\n  // Tag Methods\n  tag_getInfo(qs: TagInfoRequest | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"No tag given\");\n    }\n\n    return this.#get<TagInfoRes>({ ...qs, method: \"tag.getInfo\" }, \"tag\");\n  }\n\n  tag_getSimilar(qs: TagSimilarRequest | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"No tag given\");\n    }\n\n    return this.#get<TagSimilarRes>(\n      { ...qs, method: \"tag.getSimilar\" },\n      \"similartags\",\n    );\n  }\n\n  tag_getTopAlbums(qs: TagTopRequest | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"No tag given\");\n    }\n\n    return this.#get<TagTopAlbumsRes>(\n      { ...qs, method: \"tag.getTopAlbums\" },\n      \"albums\",\n    );\n  }\n\n  tag_getTopArtists(qs: TagTopRequest | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"No tag given\");\n    }\n\n    return this.#get<TagTopArtistsRes>(\n      { ...qs, method: \"tag.getTopArtists\" },\n      \"topartists\",\n    );\n  }\n\n  tag_getTopTags(qs: TagTopTagsRequest) {\n    return this.#get<TopTagsRes>(\n      { ...qs, method: \"tag.getTopTags\" },\n      \"toptags\",\n    );\n  }\n\n  tag_getTopTracks(qs: TagTopRequest | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"No tag given\");\n    }\n\n    return this.#get<TagTopTracksRes>(\n      { ...qs, method: \"tag.getTopTracks\" },\n      \"tracks\",\n    );\n  }\n\n  tag_getWeeklyChartList(qs: TagTopRequest | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"No tag given\");\n    }\n\n    return this.#get<TagWeeklyChartRes>(\n      { ...qs, method: \"tag.getWeeklyChartList\" },\n      \"weeklychartlist\",\n    );\n  }\n\n  // Track methods\n  track_addTags(qs: TrackAddTags | undefined) {\n    if (!qs?.artist || !qs.track || !qs.tags) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n\n    return this.#post({ ...qs, method: \"track.addTags\" });\n  }\n\n  track_getCorrection(qs: TrackGetCorrectionRequest | undefined) {\n    if (!qs?.track || !qs.artist) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<TrackGetCorrectionRes>(\n      { ...qs, method: \"track.getCorrection\" },\n      \"corrections\",\n    );\n  }\n\n  track_getInfo(qs: TrackGetInfo | undefined) {\n    if (\n      (!(qs as TrackRequest | undefined)?.track ||\n        !(qs as TrackRequest).artist) &&\n      !(qs as MBIDTrack | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<TrackGetInfoRes>(\n      { autocorrect: \"1\", ...qs, method: \"track.getInfo\" },\n      \"track\",\n    );\n  }\n\n  track_getSimilar(qs: TrackGetSimilar) {\n    if (\n      (!(qs as TrackRequest | undefined)?.track ||\n        !(qs as TrackRequest).artist) &&\n      !(qs as MBIDTrack | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<TrackGetSimilarRes>(\n      { autocorrect: \"1\", ...qs, method: \"track.getSimilar\" },\n      \"similartracks\",\n    );\n  }\n\n  track_getTags(qs: TrackGetTags) {\n    if (\n      (!(qs as TrackRequest | undefined)?.track ||\n        !(qs as TrackRequest).artist) &&\n      !(qs as MBIDTrack | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<TrackGetTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"track.getTags\" },\n      \"tags\",\n    );\n  }\n\n  track_getTopTags(qs: TrackGetTopTags) {\n    if (\n      (!(qs as TrackRequest | undefined)?.track ||\n        !(qs as TrackRequest).artist) &&\n      !(qs as MBIDTrack | undefined)?.mbid\n    ) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#get<TrackGetTopTagsRes>(\n      { autocorrect: \"1\", ...qs, method: \"track.getTopTags\" },\n      \"toptags\",\n    );\n  }\n\n  track_love(qs: TrackLove | undefined) {\n    if (!qs?.track || !qs.artist) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n    return this.#post({ ...qs, method: \"track.love\" });\n  }\n\n  track_removeTag(qs: TrackRemoveTag | undefined) {\n    if (!qs?.artist || !qs.track || !qs.tag) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n\n    return this.#post({ ...qs, method: \"track.removeTag\" });\n  }\n\n  track_scrobble(qs: TrackScrobble | undefined) {\n    if (!qs?.artist || !qs.track || !qs.timestamp) {\n      return LastFm.#sendErr(\"Missing required params\");\n    }\n\n    return this.#post<TrackScrobbleRes>({ ...qs, method: \"track.scrobble\" });\n  }\n\n  track_search(qs: TrackSearch | undefined) {\n    if (!qs?.track) {\n      return LastFm.#sendErr(\"Missing track for search\");\n    }\n    return this.#get<TrackSearchRes>(\n      { autocorrect: \"1\", ...qs, method: \"track.search\" },\n      \"results\",\n    );\n  }\n\n  track_unlove(qs: TrackUnlove | undefined) {\n    if (!qs?.track || !qs.artist) {\n      return LastFm.#sendErr(\"Missing track or artist\");\n    }\n\n    return this.#post({ ...qs, method: \"track.unlove\" });\n  }\n\n  track_updateNowPlaying(qs: TrackUpdateNowPlaying | undefined) {\n    if (!qs?.track || !qs.artist) {\n      return LastFm.#sendErr(\"Missing track or artist\");\n    }\n\n    return this.#post<TrackUpdateNowPlayingRes>({\n      ...qs,\n      method: \"track.updateNowPlaying\",\n    });\n  }\n\n  // User Methods\n  user_getFriends(qs: UserGetFriends | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetFriendsRes>(\n      { ...qs, method: \"user.getFriends\" },\n      \"friends\",\n    );\n  }\n\n  user_getInfo(qs: UserGetInfo | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetInfoRes>({ ...qs, method: \"user.getInfo\" }, \"user\");\n  }\n\n  user_getLovedTracks(qs: UserGetLovedTracks | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetLovedTracksRes>(\n      { ...qs, method: \"user.getLovedTracks\" },\n      \"lovedtracks\",\n    );\n  }\n\n  user_getPersonalTags(qs: UserGetPersonalTags | undefined) {\n    if (!qs?.tag) {\n      return LastFm.#sendErr(\"Missing tag\");\n    }\n    if (qs.tag && !qs.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n\n      qs.user = this.#username;\n    }\n\n    return this.#get<UserGetPersonalTagsRes>(\n      { ...qs, method: \"user.getPersonalTags\" },\n      \"taggings\",\n    );\n  }\n\n  user_getRecentTracks(qs: UserGetRecentTracks | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetRecentTracksRes>(\n      { ...qs, method: \"user.getRecentTracks\" },\n      \"recenttracks\",\n    );\n  }\n\n  user_getTopAlbums(qs: UserGetTopAlbums | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetTopAlbumsRes>(\n      { ...qs, method: \"user.getTopAlbums\" },\n      \"topalbums\",\n    );\n  }\n\n  user_getTopArtists(qs: UserGetTopArtists | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetTopArtistsRes>(\n      { ...qs, method: \"user.getTopArtists\" },\n      \"topartists\",\n    );\n  }\n\n  user_getTopTags(qs: UserGetTopTags | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetTopTagsRes>(\n      { ...qs, method: \"user.getTopTags\" },\n      \"toptags\",\n    );\n  }\n\n  user_getTopTracks(qs: UserGetTopTracks | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetTopTracksRes>(\n      { ...qs, method: \"user.getTopTracks\" },\n      \"toptracks\",\n    );\n  }\n\n  user_getWeeklyAlbumChart(qs: UserGetWeeklyAlbumChart | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetWeeklyAlbumChartRes>(\n      { ...qs, method: \"user.getWeeklyAlbumChart\" },\n      \"weeklyalbumchart\",\n    );\n  }\n\n  user_getWeeklyArtistChart(qs: UserGetWeeklyArtistChart | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetWeeklyArtistChartRes>(\n      { ...qs, method: \"user.getWeeklyArtistChart\" },\n      \"weeklyartistchart\",\n    );\n  }\n\n  user_getWeeklyChartList(qs: UserGetWeeklyChartList | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetWeeklyChartListRes>(\n      { ...qs, method: \"user.getWeeklyChartList\" },\n      \"weeklychartlist\",\n    );\n  }\n\n  user_getWeeklyTrackChart(qs: UserGetWeeklyTrackChart | undefined) {\n    if (!qs?.user) {\n      if (!this.#username) {\n        return LastFm.#sendErr(\"Missing user\");\n      }\n      if (!qs) {\n        qs = { user: this.#username };\n      } else {\n        qs.user = this.#username;\n      }\n    }\n\n    return this.#get<UserGetWeeklyTrackChartRes>(\n      { ...qs, method: \"user.getWeeklyTrackChart\" },\n      \"weeklytrackchart\",\n    );\n  }\n}\n","export interface LastFmSearch {\n  \"opensearch:Query\": {\n    \"#text\": string;\n    role: string;\n    searchTerms?: string;\n    startPage: string;\n  };\n  \"opensearch:totalResults\": string;\n  \"opensearch:startIndex\": string;\n  \"opensearch:itemsPerPage\": string;\n  \"@attr\": {\n    for?: string;\n  };\n}\n\nexport enum LastFmImageSize {\n  SMALL = \"small\",\n  MEDIUM = \"medium\",\n  LARGE = \"large\",\n  EXTRALARGE = \"extralarge\",\n  MEGA = \"mega\",\n}\n\nexport interface LastFmImage {\n  \"#text\": string;\n  size: LastFmImageSize;\n}\nexport interface LastFmStats {\n  listeners: string;\n  playcount: string;\n}\n\nexport interface BasicLastFmArtist {\n  name: string;\n  mbid: string;\n  url: string;\n  image?: LastFmImage[];\n}\nexport interface LastFmLinks {\n  link: {\n    \"#text\": string;\n    rel: string;\n    href: string;\n  };\n}\nexport interface LastFmArtists {\n  artist: BasicLastFmArtist[];\n}\n\nexport interface LastFmBio {\n  links: LastFmLinks;\n  published: string;\n  summary: string;\n  content: string;\n}\nexport interface LastFmArtist extends BasicLastFmArtist {\n  streamable: LastFmBoolean;\n  ontour: string;\n  stats: LastFmStats;\n  similar: LastFmArtists;\n  tags: LastFmTags;\n  bio?: LastFmBio;\n}\nexport interface LibraryArtist extends BasicLastFmArtist {\n  tagcount: string;\n  playcount: string;\n  streamable: LastFmBoolean;\n}\nexport interface BasicLastFmTrack {\n  name: string;\n  url: string;\n  artist: LastFmArtist;\n  mbid: string;\n}\nexport interface LastFmTrack extends BasicLastFmTrack {\n  duration: string;\n  \"@attr\": {\n    rank: string;\n  };\n  streamable: {\n    \"#text\": string;\n    fulltrack: LastFmBoolean;\n  };\n}\n\nexport interface BasicLastFmAlbum {\n  name: string;\n  artist: string;\n  mbid: string;\n  url?: string;\n  image?: LastFmImage[];\n}\n\nexport interface LastFmAlbum extends BasicLastFmAlbum, LastFmStats {\n  tracks?: LastFmTracks;\n  wiki?: LastFmWiki;\n}\n\nexport interface LastFmTag {\n  name: string;\n  url: string;\n  count?: number;\n}\n\nexport interface LastFmAlbums {\n  album: LastFmAlbum[];\n}\n\nexport interface LastFmTracks {\n  track: LastFmTrack[];\n}\nexport interface LastFmTags {\n  tag: LastFmTag[];\n}\nexport interface LastFmWiki {\n  published?: string;\n  summary: string;\n  content: string;\n}\nexport interface LastFmArtistCorrections {\n  artist: BasicLastFmArtist;\n  \"@attr\": {\n    index: string;\n  };\n}\n\nexport interface LastFmRankedArtist extends LastFmStats {\n  name: string;\n  mbid: string;\n  url: string;\n  streamable: LastFmBoolean;\n  image: LastFmImage[];\n  \"@attr\": {\n    rank: string;\n  };\n}\n\nexport interface LastFmRankedTag {\n  name: string;\n  url: string;\n  reach: number;\n  taggings: number;\n  streamable: number;\n  wiki: Record<string, string>;\n  \"@attr\": {\n    rank: string;\n  };\n}\n\nexport interface LastFmRankedTrack\n  extends LastFmStats,\n    Omit<BasicLastFmTrack, \"artist\"> {\n  streamable: {\n    \"#text\": string;\n    fulltrack: LastFmBoolean;\n  };\n  artist: BasicLastFmArtist;\n  \"@attr\": {\n    rank: string;\n  };\n}\n\nexport enum Period {\n  OVERALL = \"overall\",\n  WEEK = \"7day\",\n  MONTH = \"1month\",\n  THREE_MONTH = \"3month\",\n  SIX_MONTH = \"6month\",\n  YEAR = \"12month\",\n}\n\nexport type LastFmBoolean = \"0\" | \"1\";\n","export enum SearchType {\n  ALBUM = \"album\",\n  ARTIST = \"artist\",\n  TRACK = \"track\",\n}\n\nexport type Search<T extends Partial<Record<SearchType, string>>> = T & {\n  limit?: number;\n  page?: number;\n};\n"],"names":["LastFmImageSize","Period","SearchType"],"mappings":";;;;;;AAgIc,MAAO,MAAM,CAAA;AACzB,IAAA,MAAM,CAAU;AAEhB,IAAA,OAAO,CAAqB;AAE5B,IAAA,UAAU,CAAqB;AAE/B,IAAA,SAAS,CAAqB;AAE9B,IAAA,SAAS,CAAqB;AAE9B,IAAA,WAAW,CAAqB;AAEhC,IAAA,WAAA,CAAY,IAAmC,EAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC;QACnC,IAAI,IAAI,EAAE,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,SAAA;QACD,IAAI,IAAI,EAAE,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;AAClC,SAAA;QACD,IAAI,IAAI,EAAE,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,EAAE,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,EAAE,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;AACpC,SAAA;KACF;IAED,OAAO,QAAQ,CAAC,GAAW,EAAA;;AAEzB,QAAA,MAAM,MAAM,GAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAI;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC;AACjB,SAAC,CAAC,CAAC;KACJ;IAED,OAAO,oBAAoB,CAAC,MAAqB,EAAA;AAC/C,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,aAAA,MAAM,CACL,CAAC,GAAW,EAAE,CAAC,GAAG,EAAE,KAAK,CAA8B,KACrD,GAAG,KAAK,QAAQ;cACZ,KAAK,YAAY,KAAK;kBACpB,KAAK,CAAC,MAAM,CACV,CAAC,MAAc,EAAE,IAAY,EAAE,CAAC,KAAK,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,CAAC,IAAI,IAAI,CAAA,CAAE,EAC7D,GAAG,CACJ;AACH,kBAAE,CAAG,EAAA,GAAG,GAAG,GAAG,CAAA,EAAG,OAAO,KAAK,KAAK,WAAW,GAAG,KAAK,GAAG,EAAE,CAAE,CAAA;AAC9D,cAAE,GAAG,EACT,EAAE,CACH,CAAC;KACL;AAED,IAAA,OAAO,gBAAgB,CAAC,MAAqB,EAAE,MAAc,EAAA;;QAE3D,MAAM,GAAG,GAAW,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAC/D,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACnE;AAED,IAAA,OAAO,WAAW,CAAC,GAAQ,EAAE,MAAqB,EAAA;AAChD,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAoB,KAAI;AACjE,YAAA,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;KACvB;AAED,IAAA,MAAM,QAAQ,CAIZ,MAAqB,EACrB,IAAU,EAAA;AAEV,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,GAAG,MAAM;YACT,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;QACF,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;AACjE,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,iDAAiD;AAClE,iBAAA;AACF,aAAA,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE,EAAE;gBACV,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAE7B,CAAC;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1B,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,aAAA;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACrD,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACzB,IAAI,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA,CAAE,CAAC,CAAC;AAChD,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,aAAA;iBAAM,IAAI,CAAC,YAAY,KAAK,EAAE;gBAC7B,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,CAAC,CAAC,OAAO,CAAE,CAAA,CAAC,CAAC;gBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACrC,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iBAAA,CAAmB,CAAC,CAAC;AAClD,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;AAC9D,aAAA;AACF,SAAA;KACF;IAED,MAAM,SAAS,CACb,MAAqB,EAAA;QAErB,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACjE,QAAA,MAAM,EAAE,GAAyC;AAC/C,YAAA,GAAG,MAAM;YACT,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;QACF,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;AAC/C,QAAA,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oCAAoC,EAAE;AAC5D,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,iDAAiD;AAClE,iBAAA;;AAED,gBAAA,IAAI,EAAE,IAAI,eAAe,CAAC,EAAuC,CAAC;AACnE,aAAA,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE,EAAE;gBACV,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;AAC1D,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACrD,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACzB,IAAI,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA,CAAE,CAAC,CAAC;AAChD,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,aAAA;iBAAM,IAAI,CAAC,YAAY,KAAK,EAAE;gBAC7B,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,CAAC,CAAC,OAAO,CAAE,CAAA,CAAC,CAAC;gBACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACrC,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iBAAA,CAAmB,CAAC,CAAC;AAClD,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;AAC9D,aAAA;AACF,SAAA;KACF;AAED,IAAA,MAAM,IAAI,CAGR,EAAiB,EAAE,IAAU,EAAA;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAiB,EAAE,EAAE,IAAI,CAAC,CAAC;KAChD;AAED,IAAA,KAAK,CAAkC,EAAiB,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAW,EAAE,CAAC,CAAC;KACrC;AAEM,IAAA,MAAM,qBAAqB,GAAA;AAGhC,QAAA,MAAM,EAAE,GAAG;AACT,YAAA,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;QACF,IAAI;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAE7B,EAAE,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,OAAO;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;YACnC,OAAO,GAAG,CAAC,OAAO,CAAC;AACpB,SAAA;AAAC,QAAA,OAAO,CAAU,EAAE;AACnB,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAW,CAAC,CAAC;AACrC,SAAA;KACF;;AAGD,IAAA,aAAa,CAAC,EAA4B,EAAA;AACxC,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AACxC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;KACvD;AAED,IAAA,aAAa,CAAC,EAA4B,EAAA;QACxC,IACE,CAAC,CAAE,EAA6B,EAAE,MAAM,IAAI,CAAE,EAAiB,CAAC,KAAK;YACrE,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EACpD,OAAO,CACR,CAAC;KACH;AAED,IAAA,aAAa,CAAC,EAA4B,EAAA;QACxC,IACE,CAAC,CAAE,EAA6B,EAAE,MAAM,IAAI,CAAE,EAAiB,CAAC,KAAK;YACrE,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EACpD,MAAM,CACP,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAA+B,EAAA;QAC9C,IACE,CAAC,CAAE,EAA6B,EAAE,MAAM,IAAI,CAAE,EAAiB,CAAC,KAAK;YACrE,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACvD,SAAS,CACV,CAAC;KACH;AAED,IAAA,eAAe,CAAC,EAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AACvC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACzD;AAED,IAAA,YAAY,CAAC,EAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;AACd,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAC/C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EACnD,SAAS,CACV,CAAC;KACH;;AAGD,IAAA,cAAc,CAAC,EAA6B,EAAA;QAC1C,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAC3B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;AACvD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;KACxD;AAED,IAAA,oBAAoB,CAAC,EAAmC,EAAA;AACtD,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE;AACf,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC1C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,EACzC,aAAa,CACd,CAAC;KACH;AAED,IAAA,cAAc,CAAC,EAA6B,EAAA;QAC1C,IACE,CAAE,EAA8B,EAAE,MAAM;YACxC,CAAE,EAA6B,EAAE,IAAI,EACrC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACrD,QAAQ,CACT,CAAC;KACH;AAED,IAAA,iBAAiB,CAAC,EAAgC,EAAA;QAChD,IACE,CAAE,EAA8B,EAAE,MAAM;YACxC,CAAE,EAA6B,EAAE,IAAI,EACrC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACxD,gBAAgB,CACjB,CAAC;KACH;AAED,IAAA,cAAc,CAAC,EAA6B,EAAA;AAC1C,QAAA,IACE,CAAC,EAAE;aACF,CAAE,EAAkB,CAAC,MAAM,IAAI,CAAE,EAAiB,CAAC,IAAI,CAAC;YACzD,CAAC,EAAE,CAAC,IAAI,EACR;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACrD,MAAM,CACP,CAAC;KACH;AAED,IAAA,mBAAmB,CAAC,EAAkC,EAAA;QACpD,IACE,CAAE,EAA8B,EAAE,MAAM;YACxC,CAAE,EAA6B,EAAE,IAAI,EACrC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAC1D,WAAW,CACZ,CAAC;KACH;AAED,IAAA,iBAAiB,CAAC,EAAgC,EAAA;QAChD,IACE,CAAE,EAA8B,EAAE,MAAM;YACxC,CAAE,EAA6B,EAAE,IAAI,EACrC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACxD,SAAS,CACV,CAAC;KACH;AAED,IAAA,mBAAmB,CAAC,EAAkC,EAAA;QACpD,IACE,CAAE,EAA8B,EAAE,MAAM;YACxC,CAAE,EAA6B,EAAE,IAAI,EACrC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAC1D,WAAW,CACZ,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAA+B,EAAA;QAC9C,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AAC1B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;AACvD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;KAC1D;AAED,IAAA,aAAa,CAAC,EAA4B,EAAA;AACxC,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE;AACf,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AACpD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EACpD,SAAS,CACV,CAAC;KACH;;AAGD,IAAA,mBAAmB,CAAC,EAAkC,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAC1D,SAAS,CACV,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAA+B,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACvD,MAAM,CACP,CAAC;KACH;AAED,IAAA,kBAAkB,CAAC,EAAiC,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,EACzD,QAAQ,CACT,CAAC;KACH;;AAGD,IAAA,iBAAiB,CAAC,EAAiC,EAAA;AACjD,QAAA,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE;AAChB,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACxD,YAAY,CACb,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE;AAChB,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACvD,QAAQ,CACT,CAAC;KACH;;AAGD,IAAA,kBAAkB,CAAC,EAA8B,EAAA;AAC/C,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAC5C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,EACzD,SAAS,CACV,CAAC;KACH;;AAGD,IAAA,WAAW,CAAC,EAA8B,EAAA;AACxC,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CAAa,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;KACvE;AAED,IAAA,cAAc,CAAC,EAAiC,EAAA;AAC9C,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACnC,aAAa,CACd,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACrC,QAAQ,CACT,CAAC;KACH;AAED,IAAA,iBAAiB,CAAC,EAA6B,EAAA;AAC7C,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACtC,YAAY,CACb,CAAC;KACH;AAED,IAAA,cAAc,CAAC,EAAqB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACnC,SAAS,CACV,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACrC,QAAQ,CACT,CAAC;KACH;AAED,IAAA,sBAAsB,CAAC,EAA6B,EAAA;AAClD,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,EAC3C,iBAAiB,CAClB,CAAC;KACH;;AAGD,IAAA,aAAa,CAAC,EAA4B,EAAA;AACxC,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AACxC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;KACvD;AAED,IAAA,mBAAmB,CAAC,EAAyC,EAAA;QAC3D,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,EACxC,aAAa,CACd,CAAC;KACH;AAED,IAAA,aAAa,CAAC,EAA4B,EAAA;AACxC,QAAA,IACE,CAAC,CAAE,EAA+B,EAAE,KAAK;YACvC,CAAE,EAAmB,CAAC,MAAM;YAC9B,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EACpD,OAAO,CACR,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAAmB,EAAA;AAClC,QAAA,IACE,CAAC,CAAE,EAA+B,EAAE,KAAK;YACvC,CAAE,EAAmB,CAAC,MAAM;YAC9B,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACvD,eAAe,CAChB,CAAC;KACH;AAED,IAAA,aAAa,CAAC,EAAgB,EAAA;AAC5B,QAAA,IACE,CAAC,CAAE,EAA+B,EAAE,KAAK;YACvC,CAAE,EAAmB,CAAC,MAAM;YAC9B,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EACpD,MAAM,CACP,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,EAAmB,EAAA;AAClC,QAAA,IACE,CAAC,CAAE,EAA+B,EAAE,KAAK;YACvC,CAAE,EAAmB,CAAC,MAAM;YAC9B,CAAE,EAA4B,EAAE,IAAI,EACpC;AACA,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EACvD,SAAS,CACV,CAAC;KACH;AAED,IAAA,UAAU,CAAC,EAAyB,EAAA;QAClC,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;KACpD;AAED,IAAA,eAAe,CAAC,EAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AACvC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACzD;AAED,IAAA,cAAc,CAAC,EAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AAC7C,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAmB,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;KAC1E;AAED,IAAA,YAAY,CAAC,EAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;AACd,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AACpD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EACnD,SAAS,CACV,CAAC;KACH;AAED,IAAA,YAAY,CAAC,EAA2B,EAAA;QACtC,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;KACtD;AAED,IAAA,sBAAsB,CAAC,EAAqC,EAAA;QAC1D,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,SAAA;QAED,OAAO,IAAI,CAAC,KAAK,CAA2B;AAC1C,YAAA,GAAG,EAAE;AACL,YAAA,MAAM,EAAE,wBAAwB;AACjC,SAAA,CAAC,CAAC;KACJ;;AAGD,IAAA,eAAe,CAAC,EAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,EACpC,SAAS,CACV,CAAC;KACH;AAED,IAAA,YAAY,CAAC,EAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CAAiB,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;KAC7E;AAED,IAAA,mBAAmB,CAAC,EAAkC,EAAA;AACpD,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,EACxC,aAAa,CACd,CAAC;KACH;AAED,IAAA,oBAAoB,CAAC,EAAmC,EAAA;AACtD,QAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACvC,SAAA;QACD,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;AAED,YAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,EACzC,UAAU,CACX,CAAC;KACH;AAED,IAAA,oBAAoB,CAAC,EAAmC,EAAA;AACtD,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,EACzC,cAAc,CACf,CAAC;KACH;AAED,IAAA,iBAAiB,CAAC,EAAgC,EAAA;AAChD,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACtC,WAAW,CACZ,CAAC;KACH;AAED,IAAA,kBAAkB,CAAC,EAAiC,EAAA;AAClD,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,EACvC,YAAY,CACb,CAAC;KACH;AAED,IAAA,eAAe,CAAC,EAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,EACpC,SAAS,CACV,CAAC;KACH;AAED,IAAA,iBAAiB,CAAC,EAAgC,EAAA;AAChD,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACtC,WAAW,CACZ,CAAC;KACH;AAED,IAAA,wBAAwB,CAAC,EAAuC,EAAA;AAC9D,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAC7C,kBAAkB,CACnB,CAAC;KACH;AAED,IAAA,yBAAyB,CAAC,EAAwC,EAAA;AAChE,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAC9C,mBAAmB,CACpB,CAAC;KACH;AAED,IAAA,uBAAuB,CAAC,EAAsC,EAAA;AAC5D,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAC5C,iBAAiB,CAClB,CAAC;KACH;AAED,IAAA,wBAAwB,CAAC,EAAuC,EAAA;AAC9D,QAAA,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxC,aAAA;YACD,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAC7C,kBAAkB,CACnB,CAAC;KACH;AACF;;ACh8BWA,iCAMX;AAND,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EANWA,uBAAe,KAAfA,uBAAe,GAM1B,EAAA,CAAA,CAAA,CAAA;AA6IWC,wBAOX;AAPD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,MAAA,CAAA,OAAA,CAAA,GAAA,QAAgB,CAAA;AAChB,IAAA,MAAA,CAAA,aAAA,CAAA,GAAA,QAAsB,CAAA;AACtB,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,QAAoB,CAAA;AACpB,IAAA,MAAA,CAAA,MAAA,CAAA,GAAA,SAAgB,CAAA;AAClB,CAAC,EAPWA,cAAM,KAANA,cAAM,GAOjB,EAAA,CAAA,CAAA;;ACzKWC,4BAIX;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAJWA,kBAAU,KAAVA,kBAAU,GAIrB,EAAA,CAAA,CAAA;;;;"}