/**** (c) Valve Corporation. Use is governed by the terms of the Steam Subscriber Agreement http://store.steampowered.com/subscriber_agreement/.
 ****/
(self.webpackChunkstore = self.webpackChunkstore || []).push([
  [8458],
  {
    40594: (e) => {
      e.exports = {
        ProgressBar: "_3szjUMH5QeRwtXAsLRcWt9",
        AnimateProgress: "_3DjdoQj5NoknowwV5t5JPN",
        loadingBarAnim: "_2SA1xV5w3BGirkDWosGYoX",
        Indeterminate: "_3G7KLhFOuTiHW-fGxtWtRs",
        Circular: "_3wMS41OoTPnZyEddTVwzy_",
        Full: "_3t_UEZDy1QxxcYfn3TTvD2",
      };
    },
    61088: (e) => {
      e.exports = {
        "duration-app-launch": "800ms",
        AppCarouselTrailerCtn: "_2DzJ9TSrYmyo1tY_R-1jym",
        AutoplayCheckbox: "ZZgGaqlJvV83f4CYl3O3N",
        TrailerTitle: "_12GNJZ-WL1uvtjwHORvJp0",
        Category: "_3vN1B1GHm6lmILDHiaHqzW",
        Visible: "_1pHj9nMX8Rr6By16P5OJAR",
        AppVideo: "_3sG-J5T8SrzM0Hjkda7sgL",
        Microtrailer: "_24GFDabY2zeyuzhvACpldO",
        PlayFullTrailer: "_115ZF6m0XsEieocbL7zjo-",
        "microtrailer-trans-out": "HMoi7fPFNjxiHeyrfkgmO",
        PlayMicrotrailer: "_2edFDJ0B9YjtlfqugPTxw0",
        "microtrailer-trans-in": "_3D_pgT8sxFP3ieDxVt_1zp",
        NoTrailer: "WtSN6aaEz7vEnRjVrq2hS",
        Trailer: "_1_z8vE2vYRzSyf1HQIcm5O",
        "trailer-trans-in": "_3kp7PkbzSVQPFoobA3Xx7N",
        AppMainCap: "_3cc6kgsSpd-DeLRDHEM_lD",
        AppMainCapFadeIn: "_2tGHq2pbqmrGJVCXoN5f0r",
        PlayButton: "_1y11BvPq_nL5EZFF8GLuD9",
        PlayButtonCapFadeIn: "_3Nk6pNRuMCIddyuE9mWS55",
        AutoplayCheckboxCtn: "_2HvO_RKtxiyyhZsELjYyq5",
        "capsule-trans-out": "hckHU2LXCJNx0X37OqCsx",
      };
    },
    71477: (e) => {
      e.exports = {
        DiscoveryQueueWidgetCtn: "_3Y72HgnTA3W9eV4Z5OBvWt",
        WidgetHeaderCtn: "_2-tz2hqtOXPPtMnVPHNSdx",
        LaunchAction: "xD8XE561L4OLHkp9K3UIV",
        AppCarouselPosition: "_1-LJHJRsteRD-MMTkV3euH",
        Initialized: "_3s4Iu4fpr4clYfkpaXEOXd",
        Spinner: "_3I6-9MDGeV0lFzgJn25TgG",
        AppCarouselCtn: "_1ab2u-OsAo8k_KM9vpvoCE",
        FadeIn: "_1z7iQxGll4hgW0TGB2pP-n",
        WidgetHeaderText: "_1mKVZY4-l46AZiZvctCEmx",
        WidgetHeaderSubText: "O2jA-VCFl9bmblncfI4k2",
        AppCapsuleCtn: "_37pAaTBY_oYZSI6lv8SuU5",
        LibraryImage: "_3D933A3S26z4EtK8t_LETk",
        CapsuleColumn: "_31tM5M2eLC43W6kBYfVmwn",
        AppName: "_3RZNatcCUyIOavmOweW6L9",
        LoginButton: "_3u1HeR7JRPiiuKIT78j2Cc",
        Placeholder: "_3qFL88r7vVtG3lg2enLhfi",
        SaleTopSection: "_3Xj9phC0S8zL6qrQ5T1sUJ",
        StickerArrangement: "_1hvmhK7qgdrqLwH_Duphah",
        SaleSticker: "_19psoPSyaHlg76v5Cd9H-n",
        SaleTextCtn: "cwQNGPoPuJS67rykUgZdU",
        BoldText: "_1LS-qczKUuqKzg56ll_C0A",
      };
    },
    57834: (e) => {
      e.exports = {
        "duration-app-launch": "800ms",
        DiscoveryQueueCarouselCtn: "_2u0N2gUX44_tavazJJb_QP",
        TextLink: "_3ZdNCUMz9KZMkwPZlO8zmi",
        DiscoveryQueueApp: "_1xJSMubUWBlahkrtb4IFTc",
        DiscoveryQueueWrapper: "_2BYaxM7mBfooJbZYzhEv4D",
        revealDiscoveryQueueWrapper: "brzQbY6Z8TH8Ww-rFL4E0",
        DiscoveryQueueItemsCtn: "_3q6eNRFBrPSFSGEn8uRFZ3",
        DiscoveryQueueItemPositioner: "_16tdfw6vxg9Hdy0KfCutXn",
        Selected: "_2aeAhZ2Y99YIR2-zD6l27U",
        InRange: "_1XPIeNMxObbkYolTEj0Bwh",
        Dragging: "_3fTO0TgoWEAo4zdaHOCTh0",
        FarLeft: "vkLp1smRjDnZg7XQcMqjk",
        Left: "_3gBoKuhIxMBjlxU7FZ2L3a",
        Current: "_2CgJDPFhM9rbjsq9n0c9I_",
        Right: "_1AGP_wKeaN9phzlq_2K9H7",
        FarRight: "hBGRzfrW2Obp7QpzYCi2L",
        AppDetailsCtn: "_2Zwt2P5vy4W9Ha5ePOv54U",
        AppDetailsCtnTop: "_3TkhdqIi1gqwMzexQDS8Ab",
        CapsuleLink: "_2m8YEKXvKa2bcFNjqXdJu7",
        AppLibraryHero: "_uGgOnTsOzgIVK9BHMTUV",
        AppHeader: "Vwr5XZLr5tOEaVLYbj1mZ",
        RightColumn: "VVNgZo2T-rubrTvNMPSoh",
        AppName: "_3lk6f1XI_loCIhBevOddHP",
        AppTagsCtn: "xXcRKEuacDG8kYtDXu6OH",
        TagEntry: "xmqBa8sZa4Xhgktfr43Uh",
        AppReviews: "_2alBMAZOarIyf-vIiNazRg",
        RelevantCtn: "_3sfhS6SCV1q8dTaRIpWCHB",
        RelevantColumn: "Ne2AhbYmPfTxwJVmj1FZP",
        RelevantItem: "_2OUHZGUrr0FugrwCwIm6dF",
        RelevantCheck: "_1BOH1zFTOxtlgKkeEANpYO",
        IgnoreLink: "fir3UBZYT6EAmdYWAdr3a",
        AppActionButtonsCtn: "_2IQHDn5ZvlB1ThhSb_lhX",
        AppActionJustButtonsCtn: "duAyQ1rUX78lMmmZY1V0n",
        QueueButton: "_22Bfzcdg2l-RQEn-qKSIol",
        ButtonsRowWrap: "_1plvU4aLu4hq22gYwThZnH",
        IgnoredCtn: "_3G1MYmgXVcweTUK5jtU_Ft",
        Active: "_2D_EZlAEopCvqU0_w21FdH",
        IgnoredInfo: "_2j-elz350f4ndxI9CBUbyW",
        IgnoredTitle: "_18alvCecAAMAsyM_6zCY2T",
        IgnoredDescription: "CmI-HxKbBH8PjoSk7IVPC",
        UndoIgnoreButton: "_2E3PfDDIiiKoy4iDQV7Ewl",
        AppDesc: "_3-6CubUJWYN2tbKvwS2N9n",
        YGlyph: "_3ncywKLa2mgKgbsj-g2wJi",
        SummaryContentCtn: "Tvu6zAI3kbdYjGQGbypuQ",
        SummaryTitle: "_2o4_HDWD3bRMkoJT4RfiMv",
        YourStats: "_3-iD7yn2dCmqp9AL5xuwLX",
        SummaryGrid: "_3vRcTzxpTSFxcxVm9BKrlQ",
        GridItem: "_2w3xjuBZIgZJPO9HAa5Hb0",
        GridTitle: "_7HEa84jCz03LkGTjIZa7c",
        GridNumber: "jM11lU9OD9-2Hlu3Akwtj",
        GridSubTitle: "_2n8wa2hMCjKHhvMsS0v3_k",
        SummaryActionButtonsCtn: "nqmYD9sGBA3BEmNjp6qYF",
        TopBarCtn: "_1ewUwegRciiNydBWSQRCX-",
        LearnMoreLink: "CiFk6OuYAQSbv_DGXoBSX",
        ControlsCtn: "_2Gy72TJcKqY9gqP5-TAmSk",
        Disabled: "_2xsPifNspMLcbkoUSA5Ujl",
        Primary: "_3o2jhEGrGiVndMjUbNpOw-",
        Launch: "_3SOZx68qVakLwDvAYBOPMG",
        Wide: "_1tFfTbcTKjlfSGsMOJvdf_",
        QueueNavArrow: "_2sZ7DAljYV5Xd-nbhtlmyM",
        Enable: "_2CTzbHZ-C-FfnXEtLZPv9q",
        RightArrow: "_30_0NBq3DkV-qL7Eyqva-t",
        LeftArrow: "_36Cln2gIYtwR3sPPcOi9bT",
        ReleventSimilarAppsCtn: "_2akaWEht7jMXdxPJFmf3WN",
        RecommendingCuratorsCtn: "_RZQ6JnUY6lQGmRcgHFNA",
        AppRelevanceCtn: "_367qBdIRU4xAYHt5cqhPVa",
        WhyRelevant: "_29ReJunMtLbnxbnixF6VdE",
        SimilarAppCtn: "_2fNR47HGs7tI_v1HC2-N1h",
        SimilarAppImg: "_1q8mEyt8Rp7JweHMRGm6hq",
        SimilarAppText: "YWLoeGgBPsjUtXywol3_O",
        FriendAvatarsCtn: "_2hxko0SvUWCZ30U4JH4TNn",
        RelevantTextBold: "_1Z_ek2XNBZbkZqyR-QSwlo",
        AppDescription: "_2mksBeuafFs1CMp0t5Z9gX",
        TradingCardCtn: "_13ZcoCKc8H09LSHp4C197Z",
        TradingCardImage: "_2ZB_x5Jq7JGDapJVPsCZTo",
        Bold: "_2P6WAN13LnRVRmRb-VNu_L",
        FriendBlockCtn: "_34aoCP80lDRK3cq6_V0YQ_",
        PersonaStatus: "_1AYnL3n86EbaOCKf18KKV8",
        ProgressCtn: "_1PuKitjqWv0B0oiYlNtQLC",
        ProgressDot: "TlkSt1YkgKK9YnX7QQE4Z",
        ProgressDotActive: "_23RBFZJ1wVhf98uzXlWplC",
        ProgressDotHidden: "_2Fj2kOZWwWE8wXSm0CEN_3",
        DiscoveryQueueName: "D7yeVCEwaFr6qNo_bPGCr",
        SaleRewardsCtn: "u42zSEWdGrvBDimhV4QNI",
        RewardStatusCtn: "_2C1i6xEuF431h_KHPB53zS",
        SaleRewardAppTitle: "_1-pK3SWEOk30eo-q0EKyH7",
      };
    },
    34418: (e) => {
      e.exports = {
        "duration-app-launch": "800ms",
        AppVideoCtn: "_5T6C7ESpj4ynwbH8LS101",
        WishlistBadge: "_1H947zVMI4eix33y6Vyrm0",
        Active: "QO_OlPouxqbJBf7_YhDcB",
        DeckVerifiedLogo: "_32nCthjo6y3PW8ly04ygbU",
        VideoArea: "_1dktHf2Jq2wDCCvlx1tpMJ",
        IgnoredCtn: "_1fmpWkA3raMRNRb2988jsO",
        IgnoredInfo: "_12r_HcaLl4JO7AfMLMEZqE",
        IgnoredTitle: "_2NLzxMudKrBejIZmxYz-Wu",
        IgnoredDescription: "_3ViR4YrtH0a-mK6EiPgOSB",
        UndoIgnoreButton: "_177VX9-0Tj1sNozNrm8bN1",
        UndoButton: "_3HOpXzFuRFY1WwrPL-fxOi",
        Disabled: "_3xyNp4rGNpDJtxvww4ZCOR",
      };
    },
    20019: (e, t, r) => {
      "use strict";
      function n(e) {
        switch (e) {
          case 0:
            return "game";
          case 6:
            return "software";
          case 1:
            return "demo";
          case 4:
            return "dlc";
          case 7:
          case 3:
            return "video";
          case 11:
            return "music";
          case 12:
            return "beta";
          case 2:
            return "mod";
        }
        return "invalid";
      }
      r.d(t, { U: () => n });
    },
    79359: (e, t, r) => {
      "use strict";
      r.d(t, { M: () => o });
      var n = r(90626),
        a = r(6144),
        i = r(73745);
      const s = (e) => null != e;
      function o(e, t) {
        const [r, a] = n.useState(window.localStorage.getItem(e)),
          o = n.useRef(e);
        n.useEffect(() => {
          e != o.current &&
            (a(window.localStorage.getItem(e)), (o.current = e));
        }, [e]);
        const c = e == o.current ? r : window.localStorage.getItem(e);
        let u = t;
        return (
          s(c) &&
            (u = s(t)
              ? "boolean" == typeof t
                ? t.constructor("false" !== c)
                : t.constructor(c)
              : c),
          (0, i.hL)(l.Get().GetLocalStoreChangeCallback(e), a),
          [
            u,
            (t) => {
              const r = s(t) ? String(t) : null;
              window.localStorage.setItem(e, r),
                a(r),
                l.Get().GetLocalStoreChangeCallback(e).Dispatch(r);
            },
          ]
        );
      }
      class l {
        m_mapChangeCallback = new Map();
        GetLocalStoreChangeCallback(e) {
          return (
            this.m_mapChangeCallback.has(e) ||
              this.m_mapChangeCallback.set(e, new a.lu()),
            this.m_mapChangeCallback.get(e)
          );
        }
        static s_Singleton;
        static Get() {
          return l.s_Singleton || (l.s_Singleton = new l()), l.s_Singleton;
        }
      }
    },
    39199: (e, t, r) => {
      "use strict";
      r.d(t, {
        Bk: () => g,
        IH: () => w,
        Jy: () => _,
        Uf: () => b,
        WX: () => h,
        aI: () => f,
        bz: () => y,
      });
      var n = r(34629),
        a = r(90626),
        i = r(14947),
        s = r(56545),
        o = r(8114),
        l = r(75487),
        c = r(6144),
        u = r(73745),
        d = r(41338),
        m = r(78327);
      function p(e, t) {
        const r = t?.nSaleTagID,
          n = t?.strContentHubType,
          a = t?.strContentHubCategory,
          i = t?.nContentHubTagID,
          s = t?.bDiscountsOnly,
          o = t?.bPrioritizeDiscounts,
          l = t?.strOptInName,
          c = t?.nOptInTagID,
          u = t?.nPruneTagID;
        let d = e.toString();
        return (
          r
            ? (d += "_" + r)
            : n &&
              ((d += "_" + n),
              "category" === n && a
                ? (d += "_" + a)
                : "tags" === n && i && (d += "_" + i),
              s ? (d += "_d") : o && (d += "_p"),
              l && c && u && (d += "_" + l)),
          d
        );
      }
      function _(e) {
        const t = e?.nSaleTagID,
          r = e?.strContentHubType,
          n = e?.strContentHubCategory,
          a = e?.nContentHubTagID,
          i = e?.bDiscountsOnly,
          s = e?.bPrioritizeDiscounts,
          l = e?.strOptInName,
          c = e?.nOptInTagID,
          u = e?.nPruneTagID,
          d = e?.bOptInOnly,
          m = new o.S7();
        if (t) {
          const e = new o.hw();
          e.set_sale_tagid(t), m.set_sale_filter(e);
        } else if (r) {
          const e = new o.rd();
          if (
            (e.set_hub_type(r),
            "category" === r
              ? e.set_hub_category(n)
              : "tags" === r && e.set_hub_tagid(a),
            i ? e.set_discount_filter(1) : s && e.set_discount_filter(2),
            l)
          ) {
            const t = new o.Q7();
            t.set_name(l),
              t.set_optin_tagid(c),
              t.set_prune_tagid(u),
              t.set_optin_only(d),
              e.set_optin(t);
          }
          m.set_content_hub_filter(e);
        }
        return m;
      }
      function g(e) {
        return (0, d.bt)(JSON.stringify(e));
      }
      function y(e) {
        return JSON.parse((0, d.he)(e));
      }
      class f {
        m_transport;
        m_mapDiscoveryQueues = new Map();
        m_mapSkippedApps = new Map();
        m_mapSkippedAppCount = new Map();
        m_mapInClientCompleted = new Map();
        m_mapInClientCompletedCallback = new Map();
        m_setExhuasted = new Set();
        m_mapExhuastedCallback = new Map();
        GetTotalSkippedAppsForDiscoveryQueue(e, t) {
          const r = p(e, t);
          return this.m_mapDiscoveryQueues.get(r).skipped;
        }
        GetNumAppsSeenForDiscoveryQueue(e, t) {
          const r = p(e, t);
          return this.m_mapSkippedAppCount.get(r) || 0;
        }
        GetSkippedAppKey(e, t, r) {
          return `${e}_${p(t, r)}`;
        }
        GetInClientCompletedQueues(e, t) {
          const r = p(e, t);
          return this.m_mapInClientCompleted.get(r) || 0;
        }
        GetInClientCompletedQueuesCallback(e, t) {
          const r = p(e, t);
          return (
            this.m_mapInClientCompletedCallback.has(r) ||
              this.m_mapInClientCompletedCallback.set(r, new c.lu()),
            this.m_mapInClientCompletedCallback.get(r)
          );
        }
        GetExhaustedCallback(e, t) {
          const r = p(e, t);
          return (
            this.m_mapExhuastedCallback.has(r) ||
              this.m_mapExhuastedCallback.set(r, new c.lu()),
            this.m_mapExhuastedCallback.get(r)
          );
        }
        BIsExhausted(e, t) {
          const r = p(e, t);
          return this.m_setExhuasted.has(r);
        }
        async LoadDiscoveryQueue(e, t, r) {
          const n = p(e, r),
            a = s.w.Init(l.BL);
          a.Body().set_queue_type(e),
            a.Body().set_country_code(m.TS.COUNTRY || "US"),
            a.Body().set_rebuild_queue(t),
            a.Body().set_rebuild_queue_if_stale(!0),
            (1 !== e && 9 !== e) ||
              a.Body().settings().set_include_coming_soon(!0),
            (Boolean(r?.nSaleTagID) || Boolean(r?.strContentHubType)) &&
              a.Body().set_store_page_filter(_(r));
          const i = await l.nd.GetDiscoveryQueue(this.m_transport, a),
            o = i.GetEResult();
          if (1 == o) {
            const t = i.Body().toObject();
            this.m_mapDiscoveryQueues.set(n, t),
              t.exhausted
                ? this.m_setExhuasted.has(n) ||
                  (this.m_setExhuasted.add(n),
                  this.GetExhaustedCallback(e, r).Dispatch(!0))
                : this.m_setExhuasted.has(n) &&
                  (this.m_setExhuasted.delete(n),
                  this.GetExhaustedCallback(e, r).Dispatch(!1)),
              this.m_mapSkippedAppCount.set(n, t.skipped || 0);
          } else
            console.warn(
              "Error",
              o,
              "failed to get discovery queue type",
              e,
              "key",
              n,
            );
          return o;
        }
        async GetDiscoveryQueueAppsOfType(e, t, r) {
          const n = p(e, r);
          return (
            (!t && this.m_mapDiscoveryQueues.has(n)) ||
              (await this.LoadDiscoveryQueue(e, t, r)),
            {
              appids: this.m_mapDiscoveryQueues.get(n).appids,
              exhausted: this.m_mapDiscoveryQueues.get(n).exhausted,
            }
          );
        }
        async SkipDiscoveryQueueItem(e, t, r) {
          p(t, r);
          const n = this.GetSkippedAppKey(e, t, r);
          if (!this.m_mapSkippedApps.has(n)) {
            const a = p(t, r),
              i = this.m_mapDiscoveryQueues.get(a).appids,
              o = i[i.length - 1] == e;
            this.m_mapSkippedApps.set(n, !0),
              this.m_mapSkippedAppCount.set(
                a,
                (this.m_mapSkippedAppCount.get(a) || 0) + 1,
              );
            const c = s.w.Init(l.fe);
            c.Body().set_appid(e),
              c.Body().set_queue_type(t),
              (Boolean(r?.nSaleTagID) || Boolean(r?.strContentHubType)) &&
                c.Body().set_store_page_filter(_(r));
            const u = (
              await l.nd.SkipDiscoveryQueueItem(this.m_transport, c)
            ).GetEResult();
            1 != u && 29 != u
              ? (console.warn("Error", u, "failed to skip appid ", e),
                this.m_mapSkippedApps.delete(n))
              : o && this.MarkDiscoveryQueueCompleted(t, r);
          }
          return Promise.resolve();
        }
        MarkDiscoveryQueueCompleted(e, t) {
          const r = p(e, t);
          if (this.m_mapInClientCompleted.has(r)) {
            const n = this.m_mapInClientCompleted.get(r) + 1;
            this.m_mapInClientCompleted.set(r, n),
              this.GetInClientCompletedQueuesCallback(e, t).Dispatch(n);
          } else
            this.m_mapInClientCompleted.set(r, 0),
              this.GetInClientCompletedQueuesCallback(e, t).Dispatch(0);
        }
        async LoadSkippedApps(e, t) {
          p(e, t);
          const r = s.w.Init(l.pS);
          r.Body().set_steamid(m.iA.steamid),
            r.Body().set_queue_type(e),
            (Boolean(t?.nSaleTagID) || Boolean(t?.strContentHubType)) &&
              r.Body().set_store_page_filter(_(t));
          const n = await l.nd.GetDiscoveryQueueSkippedApps(
            this.m_transport,
            r,
          );
          return 1 === n.GetEResult()
            ? n.Body().appids() || []
            : (console.warn(
                "Failed to retrieve skipped apps for discovery queue.",
                e,
                t,
                n.GetEResult(),
              ),
              []);
        }
        static s_DiscoveryQueueStore = null;
        static Init(e) {
          f.Get().m_transport = e;
        }
        static BHasTransport() {
          return Boolean(f.Get().m_transport);
        }
        static Get() {
          return (
            this.s_DiscoveryQueueStore ||
              (this.s_DiscoveryQueueStore = new f()),
            this.s_DiscoveryQueueStore
          );
        }
        constructor() {
          (0, i.Gn)(this);
        }
      }
      function b(e, t) {
        const [r, n] = (0, a.useState)(
          f.Get().GetInClientCompletedQueues(e, t),
        );
        return (
          (0, u.hL)(f.Get().GetInClientCompletedQueuesCallback(e, t), n), r
        );
      }
      function w(e, t) {
        const [r, n] = (0, a.useState)(f.Get().BIsExhausted(e, t));
        return (0, u.hL)(f.Get().GetExhaustedCallback(e, t), n), r;
      }
      function h(e, t) {
        const r = a.useMemo(
          () => (0, m.Tc)("discovery_queue_name", "application_config"),
          [],
        );
        return "string" == typeof r && r.length > 0 ? r : "";
      }
      (0, n.Cg)([i.sH], f.prototype, "m_mapDiscoveryQueues", void 0);
    },
    3734: (e, t, r) => {
      "use strict";
      r.d(t, { E2: () => p, PG: () => g });
      var n = r(90626),
        a = r(20194),
        i = r(56545),
        s = r(94601),
        o = r(72839),
        l = r(82097),
        c = r(44332),
        u = r(23809);
      const d = n.createContext({}),
        m = () => n.useContext(d);
      function p(e) {
        let { defaultOptions: t, children: r } = e,
          a = n.useMemo(() => ({ defaultOptions: t || {} }), [t]);
        return n.createElement(d.Provider, { value: a }, r);
      }
      const _ = "StoreQueryStore";
      function g(e, t, r, l) {
        let d = m();
        const p = (0, u.KV)();
        d || (0, c.w)(!1, "useStoreQuery called outside of a <StoreQueryRoot>");
        let g = d.defaultOptions;
        const f = n.useMemo(() => {
          let e = [];
          return (
            l?.content_descriptors_excluded
              ? (e = l.content_descriptors_excluded)
              : g?.content_descriptors_excluded &&
                (e = g.content_descriptors_excluded),
            { ...t, filters: { content_descriptors_excluded: e, ...t.filters } }
          );
        }, [t, l, g]);
        let b;
        void 0 !== l?.override_country_code
          ? (b = l.override_country_code)
          : void 0 !== g?.override_country_code &&
            (b = g.override_country_code);
        let w = { staleTime: 36e5 };
        l?.reactQuery && (w = { ...w, ...l.reactQuery });
        const h = [_, f, r, l];
        return (0, a.I)({
          queryKey: h,
          queryFn: () =>
            (async function (e, t, r, n, a) {
              const l = i.w.Init(s.iU);
              (0, o.rV)(l), n && (0, o.Bn)(l, n);
              a && l.Body().set_override_country_code(a);
              l.Body().set_query(s.nu.fromObject(r)),
                l.Body().set_query_name(t);
              const c = await s.Fs.Query(e, l);
              if (1 != c.GetEResult())
                throw `Error executing StoreQuery "${t}", EResult: ${c.GetEResult()}`;
              return new y(c, n);
            })(p, e, f, r, b),
          ...w,
        });
      }
      class y {
        m_Items;
        m_rgItemIDs;
        m_metadata;
        constructor(e, t) {
          this.ReadResults(e, t);
        }
        GetItems() {
          return this.m_Items;
        }
        GetItemIDs() {
          return this.m_rgItemIDs;
        }
        GetMetadata() {
          return this.m_metadata;
        }
        ReadResults(e, t) {
          this.m_Items ||
            ((0, c.w)(
              0 == e.Body().metadata().start(),
              "Empty item list - expected to start at 0",
            ),
            (this.m_Items = []));
          const r = e.Body().ids() || [];
          if (
            ((this.m_rgItemIDs = r.map((e) => e.toObject())),
            e.Body().store_items())
          )
            for (const r of e.Body().store_items())
              this.m_Items.push(l.A.Get().ReadItem(r, t));
          this.m_metadata = e.Body().metadata().toObject();
        }
      }
    },
    32885: (e, t, r) => {
      "use strict";
      r.d(t, { v: () => H });
      var n = r(90626),
        a = r(20194),
        i = r(45699),
        s = r(76217),
        o = r(1035),
        l = r(34181),
        c = r(17720),
        u = r(4796),
        d = r(67165),
        m = r(30894),
        p = r(82097),
        _ = r(26101),
        g = r(12155),
        y = r(52038),
        f = r(61859),
        b = r(60778),
        w = r(56545),
        h = r(80613),
        S = r(89068);
      const v = h.Message;
      class C extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            C.prototype.recommendationid || S.Sg(C.M()),
            v.initialize(this, e, 0, -1, void 0, null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            C.sm_m ||
              (C.sm_m = {
                proto: C,
                fields: {
                  recommendationid: {
                    n: 1,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  review_text: {
                    n: 2,
                    br: S.qM.readString,
                    bw: S.gp.writeString,
                  },
                  voted_up: { n: 3, br: S.qM.readBool, bw: S.gp.writeBool },
                  is_public: { n: 4, br: S.qM.readBool, bw: S.gp.writeBool },
                  language: { n: 5, br: S.qM.readString, bw: S.gp.writeString },
                  is_in_early_access: {
                    n: 6,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  received_compensation: {
                    n: 7,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  comments_disabled: {
                    n: 8,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  hide_in_steam_china: {
                    n: 9,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                },
              }),
            C.sm_m
          );
        }
        static MBF() {
          return C.sm_mbf || (C.sm_mbf = S.w0(C.M())), C.sm_mbf;
        }
        toObject(e = !1) {
          return C.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(C.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(C.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new C();
          return C.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(C.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return C.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(C.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return C.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_Update_Request";
        }
      }
      class E extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(), v.initialize(this, e, 0, -1, void 0, null);
        }
        toObject(e = !1) {
          return E.toObject(e, this);
        }
        static toObject(e, t) {
          return e ? { $jspbMessageInstance: t } : {};
        }
        static fromObject(e) {
          return new E();
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new E();
          return E.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return e;
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return E.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {}
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return E.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_Update_Response";
        }
      }
      class B extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            B.prototype.reaction_type || S.Sg(B.M()),
            v.initialize(this, e, 0, -1, void 0, null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            B.sm_m ||
              (B.sm_m = {
                proto: B,
                fields: {
                  reaction_type: {
                    n: 1,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  count: { n: 2, br: S.qM.readUint32, bw: S.gp.writeUint32 },
                },
              }),
            B.sm_m
          );
        }
        static MBF() {
          return B.sm_mbf || (B.sm_mbf = S.w0(B.M())), B.sm_mbf;
        }
        toObject(e = !1) {
          return B.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(B.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(B.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new B();
          return B.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(B.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return B.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(B.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return B.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_Recommendation_LoyaltyReaction";
        }
      }
      class I extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            I.prototype.recommendationid || S.Sg(I.M()),
            v.initialize(this, e, 0, -1, [27, 40], null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            I.sm_m ||
              (I.sm_m = {
                proto: I,
                fields: {
                  recommendationid: {
                    n: 1,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  steamid: {
                    n: 2,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  appid: { n: 3, br: S.qM.readUint32, bw: S.gp.writeUint32 },
                  review: { n: 4, br: S.qM.readString, bw: S.gp.writeString },
                  time_created: {
                    n: 5,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  time_updated: {
                    n: 6,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  votes_up: { n: 7, br: S.qM.readUint32, bw: S.gp.writeUint32 },
                  votes_down: {
                    n: 8,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  vote_score: { n: 9, br: S.qM.readFloat, bw: S.gp.writeFloat },
                  language: {
                    n: 10,
                    br: S.qM.readString,
                    bw: S.gp.writeString,
                  },
                  comment_count: {
                    n: 11,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  voted_up: { n: 12, br: S.qM.readBool, bw: S.gp.writeBool },
                  is_public: { n: 13, br: S.qM.readBool, bw: S.gp.writeBool },
                  moderator_hidden: {
                    n: 14,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  flagged_by_developer: {
                    n: 15,
                    br: S.qM.readEnum,
                    bw: S.gp.writeEnum,
                  },
                  report_score: {
                    n: 16,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  steamid_moderator: {
                    n: 17,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  steamid_developer: {
                    n: 18,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  steamid_dev_responder: {
                    n: 19,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  developer_response: {
                    n: 20,
                    br: S.qM.readString,
                    bw: S.gp.writeString,
                  },
                  time_developer_responded: {
                    n: 21,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  developer_flag_cleared: {
                    n: 22,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  written_during_early_access: {
                    n: 23,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  votes_funny: {
                    n: 24,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  received_compensation: {
                    n: 25,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  unverified_purchase: {
                    n: 26,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  review_qualities: {
                    n: 27,
                    r: !0,
                    q: !0,
                    br: S.qM.readEnum,
                    pbr: S.qM.readPackedEnum,
                    bw: S.gp.writeRepeatedEnum,
                  },
                  weighted_vote_score: {
                    n: 28,
                    br: S.qM.readFloat,
                    bw: S.gp.writeFloat,
                  },
                  moderation_note: {
                    n: 29,
                    br: S.qM.readString,
                    bw: S.gp.writeString,
                  },
                  payment_method: {
                    n: 30,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                  playtime_2weeks: {
                    n: 31,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                  playtime_forever: {
                    n: 32,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                  last_playtime: {
                    n: 33,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                  comments_disabled: {
                    n: 34,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  playtime_at_review: {
                    n: 35,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                  approved_for_china: {
                    n: 36,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  ban_check_result: {
                    n: 37,
                    br: S.qM.readEnum,
                    bw: S.gp.writeEnum,
                  },
                  refunded: { n: 38, br: S.qM.readBool, bw: S.gp.writeBool },
                  account_score_spend: {
                    n: 39,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                  reactions: { n: 40, c: B, r: !0, q: !0 },
                  ipaddress: {
                    n: 41,
                    br: S.qM.readString,
                    bw: S.gp.writeString,
                  },
                  hidden_in_steam_china: {
                    n: 42,
                    br: S.qM.readBool,
                    bw: S.gp.writeBool,
                  },
                  steam_china_location: {
                    n: 43,
                    br: S.qM.readString,
                    bw: S.gp.writeString,
                  },
                  category_ascii_pct: {
                    n: 44,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  category_meme_pct: {
                    n: 45,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  category_offtopic_pct: {
                    n: 46,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  category_uninformative_pct: {
                    n: 47,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  category_votefarming_pct: {
                    n: 48,
                    br: S.qM.readUint32,
                    bw: S.gp.writeUint32,
                  },
                  deck_playtime_at_review: {
                    n: 49,
                    br: S.qM.readInt32,
                    bw: S.gp.writeInt32,
                  },
                },
              }),
            I.sm_m
          );
        }
        static MBF() {
          return I.sm_mbf || (I.sm_mbf = S.w0(I.M())), I.sm_mbf;
        }
        toObject(e = !1) {
          return I.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(I.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(I.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new I();
          return I.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(I.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return I.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(I.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return I.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "RecommendationDetails";
        }
      }
      class A extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            A.prototype.appid || S.Sg(A.M()),
            v.initialize(this, e, 0, -1, void 0, null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            A.sm_m ||
              (A.sm_m = {
                proto: A,
                fields: {
                  appid: { n: 1, br: S.qM.readUint32, bw: S.gp.writeUint32 },
                },
              }),
            A.sm_m
          );
        }
        static MBF() {
          return A.sm_mbf || (A.sm_mbf = S.w0(A.M())), A.sm_mbf;
        }
        toObject(e = !1) {
          return A.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(A.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(A.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new A();
          return A.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(A.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return A.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(A.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return A.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_GetFriendsRecommendedApp_Request";
        }
      }
      class T extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            T.prototype.accountids_recommended || S.Sg(T.M()),
            v.initialize(this, e, 0, -1, [1, 3], null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            T.sm_m ||
              (T.sm_m = {
                proto: T,
                fields: {
                  accountids_recommended: {
                    n: 1,
                    r: !0,
                    q: !0,
                    br: S.qM.readUint32,
                    pbr: S.qM.readPackedUint32,
                    bw: S.gp.writeRepeatedUint32,
                  },
                  accountids_not_recommended: {
                    n: 3,
                    r: !0,
                    q: !0,
                    br: S.qM.readUint32,
                    pbr: S.qM.readPackedUint32,
                    bw: S.gp.writeRepeatedUint32,
                  },
                },
              }),
            T.sm_m
          );
        }
        static MBF() {
          return T.sm_mbf || (T.sm_mbf = S.w0(T.M())), T.sm_mbf;
        }
        toObject(e = !1) {
          return T.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(T.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(T.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new T();
          return T.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(T.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return T.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(T.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return T.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_GetFriendsRecommendedApp_Response";
        }
      }
      class D extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            D.prototype.requests || S.Sg(D.M()),
            v.initialize(this, e, 0, -1, [1], null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            D.sm_m ||
              (D.sm_m = {
                proto: D,
                fields: { requests: { n: 1, c: R, r: !0, q: !0 } },
              }),
            D.sm_m
          );
        }
        static MBF() {
          return D.sm_mbf || (D.sm_mbf = S.w0(D.M())), D.sm_mbf;
        }
        toObject(e = !1) {
          return D.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(D.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(D.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new D();
          return D.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(D.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return D.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(D.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return D.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_GetIndividualRecommendations_Request";
        }
      }
      class R extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            R.prototype.steamid || S.Sg(R.M()),
            v.initialize(this, e, 0, -1, void 0, null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            R.sm_m ||
              (R.sm_m = {
                proto: R,
                fields: {
                  steamid: {
                    n: 1,
                    br: S.qM.readUint64String,
                    bw: S.gp.writeUint64String,
                  },
                  appid: { n: 2, br: S.qM.readUint32, bw: S.gp.writeUint32 },
                },
              }),
            R.sm_m
          );
        }
        static MBF() {
          return R.sm_mbf || (R.sm_mbf = S.w0(R.M())), R.sm_mbf;
        }
        toObject(e = !1) {
          return R.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(R.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(R.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new R();
          return R.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(R.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return R.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(R.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return R.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_GetIndividualRecommendations_Request_RecommendationRequest";
        }
      }
      class M extends v {
        static ImplementsStaticInterface() {}
        constructor(e = null) {
          super(),
            M.prototype.recommendations || S.Sg(M.M()),
            v.initialize(this, e, 0, -1, [1], null);
        }
        static sm_m;
        static sm_mbf;
        static M() {
          return (
            M.sm_m ||
              (M.sm_m = {
                proto: M,
                fields: { recommendations: { n: 1, c: I, r: !0, q: !0 } },
              }),
            M.sm_m
          );
        }
        static MBF() {
          return M.sm_mbf || (M.sm_mbf = S.w0(M.M())), M.sm_mbf;
        }
        toObject(e = !1) {
          return M.toObject(e, this);
        }
        static toObject(e, t) {
          return S.BT(M.M(), e, t);
        }
        static fromObject(e) {
          return S.Uq(M.M(), e);
        }
        static deserializeBinary(e) {
          let t = new h.BinaryReader(e),
            r = new M();
          return M.deserializeBinaryFromReader(r, t);
        }
        static deserializeBinaryFromReader(e, t) {
          return S.zj(M.MBF(), e, t);
        }
        serializeBinary() {
          var e = new h.BinaryWriter();
          return M.serializeBinaryToWriter(this, e), e.getResultBuffer();
        }
        static serializeBinaryToWriter(e, t) {
          S.i0(M.M(), e, t);
        }
        serializeBase64String() {
          var e = new h.BinaryWriter();
          return M.serializeBinaryToWriter(this, e), e.getResultBase64String();
        }
        getClassName() {
          return "CUserReviews_GetIndividualRecommendations_Response";
        }
      }
      var N;
      !(function (e) {
        (e.Update = function (e, t) {
          return e.SendMsg("UserReviews.Update#1", (0, w.I8)(C, t), E, {
            ePrivilege: 3,
          });
        }),
          (e.GetFriendsRecommendedApp = function (e, t) {
            return e.SendMsg(
              "UserReviews.GetFriendsRecommendedApp#1",
              (0, w.I8)(A, t),
              T,
              { bConstMethod: !0, ePrivilege: 1 },
            );
          }),
          (e.GetIndividualRecommendations = function (e, t) {
            return e.SendMsg(
              "UserReviews.GetIndividualRecommendations#1",
              (0, w.I8)(D, t),
              M,
              { bConstMethod: !0, ePrivilege: 1, eWebAPIKeyRequirement: 2 },
            );
          });
      })(N || (N = {}));
      var G = r(41735),
        k = r.n(G),
        P = r(23809),
        q = r(3734),
        F = r(78327);
      class L {
        static async LoadFriendsRecommendedApp(e, t) {
          const r = w.w.Init(A);
          r.Body().set_appid(t);
          const n = await N.GetFriendsRecommendedApp(e, r),
            a = n.GetEResult();
          if (1 == a) return n.Body().toObject();
          throw `Error ${a} failed to call GetFriendsRecommendedApp ${t}`;
        }
        static async LoadStoreRelevanceData(e) {
          let t = { appid: e },
            r = { arrSimilarPlayedApps: [], bRecommendedByIR: !1 };
          const n = (
            await k().get(
              `${F.TS.STORE_BASE_URL}explore/ajaxgetstorerelevancedata`,
              { params: t, withCredentials: !0, timeout: 1e4 },
            )
          ).data;
          return (
            n &&
              1 == n.success &&
              (n.results.similar_played_apps &&
                (r.arrSimilarPlayedApps = n.results.similar_played_apps.map(
                  (e) => ({
                    appid: e.appid,
                    playtimeForever: e.playtime_forever,
                  }),
                )),
              n.results.recommended_by_ir && (r.bRecommendedByIR = !0)),
            r
          );
        }
      }
      var U = r(22797),
        Q = r(57834),
        W = r.n(Q),
        z = r(14336),
        x = r(26505);
      const O = new b.wd("AppRelevance").Debug;
      function H(e) {
        const {
            appID: t,
            bShowAvatars: r,
            storeItem: i,
            bHideDescription: s,
            bShowCuratorInfo: o,
            bShowCreatorInfo: l,
          } = e,
          d = (0, x.Nd)(t),
          _ = (function (e) {
            const t = (0, P.KV)();
            return (0, a.I)({
              queryKey: ["AppRelevanceStore", "FriendsRecommended", e],
              queryFn: () => L.LoadFriendsRecommendedApp(t, e),
              enabled: F.iA.logged_in,
            });
          })(t),
          g = (function (e) {
            return (0, a.I)({
              queryKey: ["AppRelevanceStore", "StoreRelevance", e],
              queryFn: () => L.LoadStoreRelevanceData(e),
              enabled: F.iA.logged_in,
            });
          })(t),
          b = (function () {
            const { data: e } = (0, q.PG)("App Relevance Store Top Sellers", {
              sort: 11,
              start: 0,
              count: 100,
            });
            return e;
          })(),
          w = (0, a.I)({
            queryKey: ["SimilarPlayedAppsLoad", t],
            queryFn: () =>
              p.A.Get().QueueMultipleAppRequests(
                g.data.arrSimilarPlayedApps?.map((e) => e.appid),
                { include_basic_info: !0, include_assets: !0 },
              ),
            enabled: g.isSuccess,
          }),
          h = (function (e, t) {
            const r = (0, n.useMemo)(
              () => m.Fm.Get().GetRecommendingCuratorsForApp(e) || [],
              [e],
            );
            return (0, a.I)({
              queryKey: ["RecommendingCurators", e],
              queryFn: () =>
                Promise.all(
                  r?.map((e) => u.ac.LoadClanInfoForClanAccountID(e)),
                ),
              enabled: !!t && r && r.length > 0,
            });
          })(t, o),
          S = (0, n.useMemo)(() => {
            let e = [];
            return (
              i &&
                ((e = e.concat(
                  i
                    .GetAllFranchiseCreatorClans()
                    .map((e) => ({ nAccountID: e, type: "franchise" })),
                )),
                (e = e.concat(
                  i
                    .GetAllDeveloperCreatorClans()
                    .map((e) => ({ nAccountID: e, type: "developer" })),
                )),
                (e = e.concat(
                  i
                    .GetAllPublisherCreatorClans()
                    .map((e) => ({ nAccountID: e, type: "publisher" })),
                )),
                (e = e.filter((e) =>
                  m.Fm.Get().BIsFollowingCurator(e.nAccountID),
                ))),
              e
            );
          }, [i]),
          v = (0, a.I)({
            queryKey: ["FollowedCreators", t],
            queryFn: () =>
              u.ac
                .LoadClanInfoForClanAccountID(S[0].nAccountID)
                .then((e) => ({ clanInfo: e, type: S[0].type })),
            enabled: !!l && S && S.length > 0,
          }),
          C = (0, a.I)({
            queryKey: ["PlayerSummaries", t, r],
            queryFn: async () => {
              let e = [],
                t = [],
                n = [];
              const a = r ? 10 : 1;
              for (
                let t = 0;
                t < _.data.accountids_recommended?.length && t < a;
                t++
              ) {
                const r = c.b.InitFromAccountID(
                  _.data.accountids_recommended[t],
                );
                e.push(r.ConvertTo64BitString());
              }
              for (let e = 0; e < d.data.in_wishlist?.length && e < a; e++) {
                const r = new c.b(d.data.in_wishlist[e].steamid);
                t.push(r.ConvertTo64BitString());
              }
              for (let e = 0; e < d.data.owns?.length && e < a; e++) {
                const t = new c.b(d.data.owns[e].steamid);
                n.push(t.ConvertTo64BitString());
              }
              return {
                rgRecommendedFriends: e,
                rgWishlistFriends: t,
                rgOwnedFriends: n,
              };
            },
            enabled: _.isSuccess && d.isSuccess,
          });
        if (
          !b ||
          w.isLoading ||
          g.isLoading ||
          _.isLoading ||
          d.isLoading ||
          h.isLoading ||
          v.isLoading ||
          C.isLoading
        )
          return n.createElement(U.t, { size: "medium", position: "center" });
        let E = [];
        g.isSuccess &&
          g.data.arrSimilarPlayedApps &&
          g.data.arrSimilarPlayedApps.forEach((e) => {
            const r = p.A.Get().GetApp(e.appid);
            r
              ? E.push(
                  n.createElement(Z, {
                    key: e.appid,
                    lifetimePlaytime: e.playtimeForever,
                    storeItem: r,
                  }),
                )
              : console.error("Failed to load store data ", t);
          });
        const B = b.GetItemIDs().findIndex((e) => e.appid === t),
          I = g.data?.bRecommendedByIR,
          A = E.length > 0,
          T = d.data?.owns?.length,
          D = d.data?.in_wishlist?.length,
          R = _.data?.accountids_recommended?.length;
        let M = 0;
        return (
          T > 0 && M++,
          D > 0 && M++,
          R > 0 && M++,
          I && M++,
          B >= 0 && M++,
          E.length > 0 && M++,
          o && h?.data?.length > 0 && M++,
          l && Boolean(v.data) && M++,
          O(
            "FriendsOwned: ",
            T,
            " FriendsWishlisted: ",
            D,
            "cRecommended: ",
            R,
          ),
          n.createElement(
            n.Fragment,
            null,
            M > 0 &&
              n.createElement(
                n.Fragment,
                null,
                n.createElement(
                  "div",
                  { className: W().WhyRelevant },
                  (0, f.we)("#DiscoveryQueue_WhyRelevant"),
                ),
                n.createElement(
                  "div",
                  { className: W().RelevantCtn },
                  A &&
                    n.createElement(
                      $,
                      { header: (0, f.we)("#DiscoveryQueue_SimilarGames") },
                      n.createElement(
                        "div",
                        { className: W().ReleventSimilarAppsCtn },
                        E,
                      ),
                    ),
                  o &&
                    h?.data?.length > 0 &&
                    n.createElement(
                      $,
                      {
                        header: (0, f.we)(
                          "#ContentHub_Recommendation_Curators",
                        ),
                      },
                      n.createElement(
                        "div",
                        {
                          className: (0, y.A)(
                            W().ReleventSimilarAppsCtn,
                            W().RecommendingCuratorsCtn,
                          ),
                        },
                        h.data
                          .filter(Boolean)
                          .map((e) =>
                            n.createElement(j, {
                              key: "curator_" + e.clanAccountID,
                              curator: e,
                            }),
                          ),
                      ),
                    ),
                  l &&
                    Boolean(v.data) &&
                    n.createElement(V, { creatorInfo: v.data }),
                  B >= 0 &&
                    n.createElement($, {
                      header: (0, f.um)(
                        "#DiscoveryQueue_TopSellers",
                        (B + 1).toLocaleString(),
                        n.createElement("span", {
                          className: W().RelevantTextBold,
                        }),
                      ),
                    }),
                  I &&
                    !A &&
                    n.createElement($, {
                      header: (0, f.we)("#DiscoveryQueue_RecommendedByIR"),
                    }),
                  n.createElement(Y, {
                    bShowAvatars: r,
                    count: _.data?.accountids_recommended?.length,
                    locToken: "#DiscoveryQueue_FriendsRecommended",
                    arrSteamIDs: C.data?.rgRecommendedFriends,
                  }),
                  n.createElement(Y, {
                    bShowAvatars: r,
                    count: d.data?.owns?.length,
                    locToken: "#DiscoveryQueue_FriendsOwned",
                    arrSteamIDs: C.data?.rgOwnedFriends,
                  }),
                  n.createElement(Y, {
                    bShowAvatars: r,
                    count: d.data?.in_wishlist?.length,
                    locToken: "#DiscoveryQueue_FriendsWishlisted",
                    arrSteamIDs: C.data?.rgWishlistFriends,
                  }),
                ),
              ),
            (!s || 0 == M) &&
              n.createElement(
                "div",
                { className: (0, y.A)(W().AppDescription, M && W().Divider) },
                i.GetShortDescription(),
              ),
          )
        );
      }
      function V(e) {
        const { creatorInfo: t } = e;
        if (!t) return null;
        let r;
        switch (t.type) {
          case "publisher":
            r = "#ContentHub_Recommendation_FollowedPublisher";
            break;
          case "developer":
            r = "#ContentHub_Recommendation_FollowedDeveloper";
            break;
          case "franchise":
            r = "#ContentHub_Recommendation_FollowedFranchise";
        }
        return r
          ? n.createElement($, {
              header: (0, f.PP)(
                r,
                n.createElement(
                  "span",
                  { className: W().RelevantTextBold },
                  t.clanInfo?.group_name,
                ),
              ),
            })
          : null;
      }
      function j(e) {
        const { curator: t } = e,
          r = (0, d.FV)(t?.clanAccountID);
        return t && r
          ? n.createElement(
              i.Ii,
              { href: r.GetCreatorHomeURL(null) },
              n.createElement("img", { src: t.avatar_medium_url }),
            )
          : null;
      }
      function Z(e) {
        const { lifetimePlaytime: t, storeItem: r } = e;
        return n.createElement(
          "div",
          { className: W().SimilarAppCtn },
          n.createElement(
            _.Qf,
            {
              item: { type: "game", id: r.GetAppID() },
              bHidePrice: !0,
              hoverProps: {
                direction: "overlay",
                nBodyAlignment: 1,
                style: { minWidth: "320px", zIndex: 5e3 },
              },
            },
            n.createElement("img", {
              className: W().SimilarAppImg,
              src: r.GetAssets().GetSmallCapsuleURL(),
            }),
          ),
        );
      }
      function Y(e) {
        const { arrSteamIDs: t, count: r, locToken: a, bShowAvatars: i } = e;
        return r
          ? 1 != r || i
            ? n.createElement(
                $,
                {
                  header: (0, f.um)(
                    a,
                    r,
                    n.createElement("span", {
                      className: W().RelevantTextBold,
                    }),
                  ),
                },
                i &&
                  t.length > 0 &&
                  n.createElement(
                    "div",
                    { className: W().FriendAvatarsCtn },
                    1 == r
                      ? n.createElement(X, { steamid: t[0] })
                      : n.createElement(J, { arrSteamIDs: t }),
                  ),
              )
            : n.createElement($, {
                header: (0, f.PP)(
                  a + "_Single",
                  n.createElement(K, { steamid: t[0] }),
                ),
              })
          : null;
      }
      function K(e) {
        const { steamid: t } = e,
          { data: r } = (0, z.js)(t);
        return r && r.m_bInitialized
          ? n.createElement(
              "span",
              {
                "data-miniprofile": "s" + r.m_steamid.ConvertTo64BitString(),
                className: W().RelevantTextBold,
              },
              r.m_strPlayerName,
            )
          : null;
      }
      function J(e) {
        const { arrSteamIDs: t } = e,
          r = (0, z.DW)(t);
        return n.createElement(
          n.Fragment,
          null,
          r.map(
            ({ data: e }) =>
              e &&
              n.createElement(o.i8, {
                key: e.m_steamid.ConvertTo64BitString(),
                "data-miniprofile": "s" + e.m_steamid.ConvertTo64BitString(),
                persona: e,
                size: "Small",
                statusPosition: "right",
              }),
          ),
        );
      }
      function X(e) {
        const { steamid: t } = e,
          { data: r } = (0, z.js)(t);
        return r
          ? n.createElement(
              s.Z,
              { className: W().FriendBlockCtn, "data-miniprofile": "s" + t },
              n.createElement(o.i8, {
                persona: r,
                size: "Small",
                statusPosition: "right",
              }),
              n.createElement(l.D, {
                className: W().PersonaStatus,
                persona: r,
                eFriendRelationship: 3,
                bIsSelf: !1,
                strNickname: null,
                bParenthesizeNicknames: !1,
                bCompactView: !1,
                bNoMask: !0,
              }),
            )
          : null;
      }
      function $(e) {
        const { children: t, header: r } = e;
        return n.createElement(
          "div",
          { className: W().RelevantItem },
          n.createElement(
            "div",
            { className: W().RelevantCheck },
            n.createElement(g.Jlk, null),
          ),
          n.createElement(
            "div",
            { className: W().RelevantColumn },
            n.createElement("div", { className: W().ReleventText }, r),
            t,
          ),
        );
      }
    },
    57315: (e, t, r) => {
      "use strict";
      r.d(t, { _: () => i });
      var n = r(55963),
        a = r(61336);
      function i(e, t) {
        const r = (0, n.VZ)(e, t);
        return (0, a.NT)(r);
      }
    },
    71922: (e, t, r) => {
      "use strict";
      r.d(t, { E: () => E, g: () => C });
      var n = r(65946),
        a = r(90626),
        i = r(76217),
        s = r(30894),
        o = r(82097),
        l = r(55263),
        c = r(3734),
        u = r(1401),
        d = r(26749),
        m = r(60383),
        p = r(4434),
        _ = r(52038),
        g = r(61859),
        y = r(78327),
        f = r(39199),
        b = r(71477),
        w = r.n(b),
        h = r(4869),
        S = r(93973),
        v = r(62490);
      function C(e) {
        return (0, d.G)()
          ? a.createElement(E, null, a.createElement(B, { ...e }))
          : null;
      }
      function E(e) {
        const [t, r] = (0, s.L2)();
        let i = (0, n.q3)(() => r.ExcludedContentDescriptor),
          o = a.useMemo(() => ({ content_descriptors_excluded: i }), [i]);
        return t
          ? null
          : a.createElement(c.E2, { defaultOptions: o }, e.children);
      }
      function B(e) {
        const {
          eStoreDiscoveryQueueType: t,
          storePageFilter: r,
          strQueueDescriptionOverride: n,
          bPreferDemoStorePage: l,
        } = e;
        let [d, b] = (0, a.useState)([]);
        const [S, v] = (0, a.useState)(!1),
          [C, E] = (0, a.useState)(!1),
          B = (0, y.Qn)(),
          [T, D] = (0, a.useState)(!B),
          R = a.useRef(),
          M = a.useRef(0),
          N = a.useRef(performance.now()),
          [G, k] = (0, a.useState)([]),
          P = (0, p.m)("DiscoveryQueueWidget"),
          q = (0, f.IH)(t, r),
          F = (function (e) {
            let { data: t } = (0, c.PG)(
              "DiscoveryQueueWidget",
              {
                sort: 11,
                start: 0,
                count: 12,
                filters: { type_filters: { include_games: !0 } },
              },
              void 0,
              { reactQuery: { enabled: e, staleTime: 1 / 0 } },
            );
            return t ? t.GetItemIDs().map((e) => e.appid) : void 0;
          })(!y.iA.logged_in);
        a.useEffect(() => {
          C ||
            (async () => {
              let e = !1;
              if (y.iA.logged_in) {
                const { appids: n, exhausted: a } = await f.aI
                  .Get()
                  .GetDiscoveryQueueAppsOfType(t, !0, r);
                P?.token?.reason || b([...n]), (e = a);
              } else b(F);
              if (d?.length) {
                let e = u.LB;
                (e.include_screenshots = !0),
                  await o.A.Get().QueueMultipleAppRequests(d, e),
                  s.Fm.Get().HintLoad();
                const t = d.map((e) =>
                  a.createElement(I, { key: "Capsule_" + e, appID: e }),
                );
                t.push(
                  a.createElement(I, { key: "Capsule2_" + d[0], appID: d[0] }),
                ),
                  P?.token?.reason || (k(t), E(!0));
              }
              e && !P?.token?.reason && E(!0);
            })();
        }, [t, d, C, r, P?.token?.reason, F]),
          a.useEffect(() => {
            if (!C || !T || S) return void cancelAnimationFrame(M.current);
            const e = () => {
              if (!R.current) return;
              const t =
                ((performance.now() - N.current) / 40) %
                (R.current.offsetWidth - 320);
              (R.current.style.transform = `translateX( -${t}px )`),
                (M.current = requestAnimationFrame(e));
            };
            return (
              (M.current = requestAnimationFrame(e)),
              () => cancelAnimationFrame(M.current)
            );
          }, [R, C, T, S, M]);
        const L = a.useCallback(
          (e) => {
            B || D(e);
          },
          [B],
        );
        if (C && (!G || 0 === G.length)) return null;
        const U = () => {
            y.iA.logged_in
              ? q || v(!0)
              : (window.location.href = `${y.TS.STORE_BASE_URL}login?redir=${encodeURIComponent(document.location.href)}`);
          },
          Q = n ?? (0, g.we)("#DiscoveryQueue_WidgetHeader");
        return a.createElement(
          m.J,
          { trigger: "repeated", onVisibilityChange: L },
          a.createElement(A, null),
          a.createElement(
            i.Z,
            {
              focusable: !0,
              onGamepadFocus: () => D(!0),
              onMouseEnter: () => B && D(!0),
              onGamepadBlur: () => D(!1),
              onMouseLeave: () => B && D(!1),
              onOKButton: U,
              onOKActionDescription: (0, g.we)("#DiscoveryQueue_OpenWizard"),
              onClick: U,
              className: (0, _.A)(
                w().DiscoveryQueueWidgetCtn,
                C && w().Initialized,
              ),
            },
            !q &&
              a.createElement(
                a.Fragment,
                null,
                a.createElement(
                  "div",
                  {
                    className: (0, _.A)(w().WidgetHeaderCtn, "WidgetHeaderCtn"),
                  },
                  a.createElement(
                    "div",
                    { className: w().WidgetHeaderText },
                    (0, g.we)("#DiscoveryQueue_WidgetHeader_Yours"),
                  ),
                  a.createElement(
                    "div",
                    { className: w().WidgetHeaderSubText },
                    y.iA.logged_in
                      ? Q
                      : (0, g.we)("#DiscoveryQueue_WidgetHeader_LoggedOut"),
                  ),
                  !y.iA.logged_in &&
                    a.createElement(
                      "div",
                      { className: w().LoginButton },
                      (0, g.we)("#DiscoveryQueue_Error_Login_Title"),
                    ),
                ),
                a.createElement(
                  "div",
                  { className: w().AppCarouselPosition },
                  !C && a.createElement(h.y$y, { className: w().Spinner }),
                  C &&
                    a.createElement(
                      "div",
                      {
                        ref: R,
                        className: (0, _.A)(
                          w().AppCarouselCtn,
                          "vt-scrollable",
                        ),
                      },
                      G,
                    ),
                ),
              ),
            C &&
              S &&
              a.createElement(u.jM, {
                ...e,
                bWizardVisible: S,
                fnCloseModal: (e) => {
                  v(!1), e?.stopPropagation();
                },
                eStoreDiscoveryQueueType: t,
                bPreferDemoStorePage: l,
              }),
          ),
        );
      }
      function I(e) {
        const { appID: t } = e,
          [r] = (0, l.t7)(t, u.LB);
        if (!r) return null;
        let n = r.GetAssets().GetMainCapsuleURL();
        return (
          r.GetOnlyAllAgesSafeScreenshots()?.length &&
            (n = r.GetOnlyAllAgesSafeScreenshots()[0]),
          a.createElement(
            "div",
            {
              className: w().AppCapsuleCtn,
              style: {
                backgroundImage: `radial-gradient(135% 125% at 100% 0%, rgba(0, 0, 0, 0) 22.5%, rgba(0, 0, 0, 1) 92.5%), url('${n}')`,
              },
            },
            a.createElement(
              "div",
              { className: (0, _.A)(w().CapsuleColumn, w().LibraryImage) },
              a.createElement("img", {
                src: r.GetAssets().GetLibraryCapsuleURL(),
              }),
            ),
            a.createElement(
              "div",
              { className: w().CapsuleColumn },
              a.createElement("div", { className: w().AppName }, r.GetName()),
            ),
          )
        );
      }
      function A() {
        const e = (0, S.Qt)(2, y.TS.LANGUAGE, !0);
        if (!e.data?.definition || !e.data?.reward_items.length) return null;
        const t = e?.data.reward_items;
        (0, v.fW)(t);
        const r = t.slice(0, 3);
        let n = null;
        return (
          y.iA.logged_in &&
            (n = a.createElement(
              a.Fragment,
              null,
              " - ",
              a.createElement(
                "a",
                { href: y.TS.COMMUNITY_BASE_URL + "my/itemcollection" },
                (0, g.we)("#DiscoveryQueue_SaleStatus_Link"),
              ),
            )),
          a.createElement(
            "div",
            { className: w().SaleTopSection },
            a.createElement(T, { rgRewardItems: r }),
            a.createElement(
              "div",
              { className: w().SaleTextCtn },
              a.createElement(
                "div",
                { className: w().BoldText },
                (0, g.we)("#DiscoveryQueue_Widget_SaleDesc"),
              ),
              a.createElement(
                "div",
                null,
                (0, g.we)(
                  "#DiscoveryQueue_Widget_SaleTitle",
                  (0, g._l)(e.data.definition.rtime_end_time, !1, !1, !1, !1),
                ),
                n,
              ),
            ),
          )
        );
      }
      function T(e) {
        const { rgRewardItems: t } = e,
          r = t.map((e) => {
            const t = `${y.TS.MEDIA_CDN_COMMUNITY_URL}images/items/${e.appid}/${e.community_definition.item_image_small}`;
            return a.createElement(
              "div",
              {
                key: e.community_definition.item_name.toString(),
                className: w().SaleSticker,
              },
              a.createElement("img", { src: t }),
            );
          });
        return a.createElement("div", { className: w().StickerArrangement }, r);
      }
    },
    1401: (e, t, r) => {
      "use strict";
      r.d(t, { jM: () => te, LB: () => $, lS: () => X });
      var n = r(90626),
        a = r(13871),
        i = r(45699),
        s = r(76217),
        o = r(37788),
        l = r(97907),
        c = r(30894),
        u = r(82097),
        d = r(62093),
        m = r(51706),
        p = r(12155),
        _ = r(32630),
        g = r(4434),
        y = r(52038),
        f = r(61859),
        b = r(60778),
        w = r(44691),
        h = r(78327),
        S = r(30143),
        v = r(39199),
        C = r(57834),
        E = r.n(C),
        B = r(20019),
        I = r(62792),
        A = r(55263),
        T = r(80782),
        D = r(26101),
        R = r(94095),
        M = r(44986),
        N = r(60014),
        G = r(20713),
        k = r(84364),
        P = r(32885),
        q = r(32754),
        F = r(57315),
        L = r(43188);
      new b.wd("DiscoveryQueueApp").Debug;
      function U(e) {
        const {
            appID: t,
            nItemHeight: r,
            nItemWidth: i,
            selected: o,
            fnFocused: l,
            eStoreDiscoveryQueueType: c,
            storePageFilter: u,
            bPreferDemoStorePage: d,
            elVideo: m,
            elDetails: p,
          } = e,
          [_] = (0, A.t7)(t, L.Gy),
          g = (0, h.Qn)(),
          b = (0, a.R7)(),
          w = b?.ownerWindow || window,
          S = Q(_, c, u, d),
          v = (0, N.ru)(X),
          { bIsIgnored: C, fnUpdateIgnored: B } = (0, L.TK)(t, v),
          { bIsWishlisted: I, fnUpdateWishlist: T } = (0, L.u4)(t, v),
          D = n.useRef();
        if (
          (n.useEffect(() => {
            o && D.current && D.current.focus({ preventScroll: !0 });
          }, [o]),
          !_)
        )
          return console.warn("Error: missing store item for appid ", t), null;
        const R = { width: i || void 0, height: r || void 0 };
        return n.createElement(
          s.Z,
          {
            ref: D,
            style: R,
            className: (0, y.A)(E().DiscoveryQueueApp, o && E().Selected),
            onOptionsActionDescription: I
              ? (0, f.we)("#DiscoveryQueue_RemoveFromWishlist")
              : (0, f.we)("#DiscoveryQueue_AddToWishlist"),
            onOptionsButton: T,
            onOKActionDescription: (0, f.we)("#DiscoveryQueue_ViewStorePage"),
            onOKButton: () => {
              w.location.href = S;
            },
            onSecondaryActionDescription: C
              ? (0, f.we)("#DiscoveryQueue_Undo")
              : (0, f.we)("#DiscoveryQueue_IgnoreLink"),
            onSecondaryButton: B,
            fnScrollIntoViewHandler: () => (l(), !0),
          },
          n.createElement(
            "div",
            { className: (0, y.A)(E().IgnoredCtn, C && E().Active) },
            n.createElement(
              "div",
              { className: (0, y.A)(E().IgnoredInfo, C && E().Active) },
              n.createElement(
                "div",
                { className: E().IgnoredTitle },
                (0, f.we)("#DiscoveryQueue_Ignored"),
              ),
              n.createElement(
                "div",
                { className: E().IgnoredDescription },
                (0, f.we)("#DiscoveryQueue_IgnoredConfirmation"),
              ),
              n.createElement(
                s.Z,
                {
                  className: (0, y.A)(E().QueueButton, E().UndoIgnoreButton),
                  onClick: B,
                },
                g &&
                  n.createElement(M.$m, {
                    button: G.g4.X,
                    type: M.wt.Light,
                    size: M.xY.Medium,
                  }),
                (0, f.we)("#DiscoveryQueue_Undo"),
              ),
            ),
          ),
          m,
          p,
        );
      }
      function Q(e, t, r, a) {
        const i = (0, N.n9)();
        return n.useMemo(() => {
          if (!e) return;
          const n = (0, v.Bk)(r),
            s = t >= 0 ? "?inqueue=" + t + (r ? "_" + n : "") : "";
          return (0, F._)(e.GetStorePageURL(a) + s, i);
        }, [a, t, i, e, r]);
      }
      function W(e) {
        const {
            appID: t,
            bShowMinimizedDisplay: r,
            eStoreDiscoveryQueueType: a,
            storePageFilter: i,
            bPreferDemoStorePage: o,
          } = e,
          [l] = (0, A.t7)(t, L.Gy),
          { bIsIgnored: c, fnUpdateIgnored: u } = (0, L.TK)(t, X),
          { bIsWishlisted: d, fnUpdateWishlist: m } = (0, L.u4)(t, X),
          _ = Q(l, a, i, o),
          g = (0, h.Qn)(),
          b = g,
          w = (0, T.LG)(l?.GetTagIDs());
        if (!l) return;
        const S = l.GetAssets().GetLibraryCapsuleURL(),
          v = l.GetAssets().GetHeaderURL();
        return n.createElement(
          s.Z,
          { className: E().AppDetailsCtn },
          n.createElement(
            "div",
            { className: E().AppDetailsCtnTop },
            S &&
              n.createElement(
                "a",
                { className: (0, y.A)(E().CapsuleLink), href: _ },
                n.createElement("img", {
                  className: E().AppLibraryHero,
                  src: S,
                }),
                v &&
                  n.createElement("img", { className: E().AppHeader, src: v }),
              ),
            n.createElement(
              "div",
              { className: E().RightColumn },
              n.createElement(
                "a",
                { className: (0, y.A)(E().AppName), href: _ },
                l.GetName(),
              ),
              n.createElement(R.wc, {
                bSingleLineMode: !0,
                info: { id: t, type: (0, B.U)(l.GetAppType()) },
              }),
            ),
            n.createElement(z, { rgTagNames: w }),
            n.createElement(
              "div",
              { className: E().AppReviews },
              n.createElement(D.Jz, {
                bShowTooltip: !0,
                bTruncateTotalReviews: r,
                appInfo: { id: t, type: (0, B.U)(l.GetAppType()) },
              }),
            ),
            n.createElement(
              "div",
              { className: E().AppRelevanceCtn },
              n.createElement(P.v, {
                bShowAvatars: !r,
                storeItem: l,
                appID: t,
              }),
            ),
          ),
          !g &&
            n.createElement(
              "div",
              { className: E().AppActionButtonsCtn },
              n.createElement(
                "div",
                { className: E().AppActionJustButtonsCtn },
                n.createElement(
                  "div",
                  { className: E().ButtonsRowWrap },
                  l.BHasDemo() &&
                    n.createElement(k.j, {
                      info: {
                        id: l.GetAppID(),
                        type: (0, I._4)(l.GetStoreItemType(), l.GetAppType()),
                      },
                      className: (0, y.A)(
                        E().QueueButton,
                        E().Primary,
                        E().Launch,
                      ),
                    }),
                  n.createElement(
                    "a",
                    {
                      className: (0, y.A)(E().QueueButton, E().Primary),
                      href: _,
                    },
                    b &&
                      n.createElement(M.$m, {
                        button: G.g4.Y,
                        type: M.wt.Light,
                        size: M.xY.Medium,
                        additionalClassName: E().YGlyph,
                      }),
                    " ",
                    (0, f.we)("#DiscoveryQueue_ViewStorePage"),
                  ),
                  n.createElement(
                    q.he,
                    {
                      toolTipContent: d
                        ? (0, f.we)("#RemoveFromWishlist_ttip")
                        : (0, f.we)("#AddToWishlist_ttip"),
                    },
                    n.createElement(
                      s.Z,
                      {
                        focusable: !0,
                        className: (0, y.A)(E().QueueButton, d && E().Active),
                        onClick: m,
                      },
                      b &&
                        n.createElement(M.$m, {
                          button: G.g4.Y,
                          type: M.wt.Light,
                          size: M.xY.Medium,
                          additionalClassName: E().YGlyph,
                        }),
                      d
                        ? n.createElement(p.qnF, null)
                        : n.createElement(p.T4m, null),
                    ),
                  ),
                  n.createElement(
                    q.he,
                    {
                      toolTipContent: (0, f.we)(
                        "#SaleTrailerCarousel_IgnoreLink_ttip",
                      ),
                    },
                    n.createElement(
                      s.Z,
                      {
                        focusable: !0,
                        className: (0, y.A)(E().QueueButton, c && E().Active),
                        onClick: u,
                      },
                      n.createElement(p.NtH, null),
                    ),
                  ),
                ),
              ),
            ),
        );
      }
      function z(e) {
        const { rgTagNames: t } = e,
          r = (0, L.W3)(t);
        return n.createElement(
          "div",
          { className: E().AppTagsCtn },
          r.map((e) =>
            n.createElement(
              "div",
              { key: e.name, className: E().TagEntry },
              e.name,
            ),
          ),
        );
      }
      var x = r(19719),
        O = r(10224),
        H = r(93973),
        V = r(40594);
      const j = ({ nPercent: e, size: t = 120, strokeWidth: r = 20 }) => {
        const a = (t - r) / 2,
          i = 2 * Math.PI * a,
          s = i - (e / 100) * i,
          o = 100 == e;
        return n.createElement(
          "div",
          { className: (0, y.A)({ [V.Circular]: !0, [V.Full]: o }) },
          n.createElement(
            "svg",
            { width: t, height: t, style: { transform: "rotate(-90deg)" } },
            n.createElement("circle", {
              cx: t / 2,
              cy: t / 2,
              r: a,
              stroke: "#0c131d",
              strokeWidth: r,
              fill: "none",
            }),
            n.createElement("circle", {
              cx: t / 2,
              cy: t / 2,
              r: a,
              stroke: "#1a9fff",
              strokeWidth: r,
              fill: "none",
              strokeDasharray: i,
              strokeDashoffset: s,
              style: { transition: "stroke-dashoffset 0.3s ease-in-out" },
            }),
          ),
        );
      };
      var Z = r(22797);
      const Y = new b.wd("DiscoveryQueueWizard").Debug,
        K = 1,
        J = 1400,
        X = "discoveryqueue2022",
        $ = {
          include_assets: !0,
          include_trailers: !0,
          include_basic_info: !0,
          include_tag_count: 20,
          include_release: !0,
          include_platforms: !0,
        };
      async function ee(e, t, r, n) {
        let a = [],
          i = !1;
        try {
          const { appids: s, exhausted: o } = await v.aI
            .Get()
            .GetDiscoveryQueueAppsOfType(e, t, n);
          (a = [...s]),
            (i = o),
            r && -1 === a.findIndex((e) => e === r) && a.unshift(r),
            await u.A.Get().QueueMultipleAppRequests(a, { ...L.Gy, ...$ });
        } catch (e) {
          console.error("Failed getting discovery queue apps", e);
        }
        return { appids: a, exhausted: i };
      }
      function te(e) {
        const {
            eStoreDiscoveryQueueType: t,
            bWizardVisible: r,
            fnCloseModal: o,
            includeAppID: u,
            storePageFilter: b,
            bPreferDemoStorePage: S,
          } = e,
          [C, B] = n.useState(0),
          [I, A] = n.useState(void 0),
          [T, D] = n.useState(0),
          R = (0, a.R7)(),
          M = R?.ownerWindow || window,
          G = (0, N.ru)(X),
          [k, P] = n.useState(0),
          q = (0, d.b)();
        (0, w.E)("ArrowLeft", () => W(!1)),
          (0, w.E)("Left", () => W(!1)),
          (0, w.E)("ArrowRight", () => W(!0)),
          (0, w.E)("Right", () => W(!0)),
          (0, w.E)("Escape", () => o?.()),
          (0, w.E)("Esc", () => o?.());
        const L = n.useMemo(() => Boolean(M.innerWidth < J), [M]),
          { fnGetDiscoveryQueue: U, rgAppIDs: Q } = (function (e, t, r) {
            const [a, i] = n.useState([]),
              s = (0, g.m)("DiscoveryQueueWizard"),
              o = async (n) => {
                let { appids: o } = await ee(e, !n, n && r, t);
                if (n && !o.length) {
                  let { appids: r } = await ee(e, !0, void 0, t);
                  o = r;
                }
                if (!s?.token?.reason) {
                  const e = [...(a ?? []), ...o, K];
                  i(e);
                }
                Y("Loaded new discovery queue apps: ", o);
              };
            return { fnGetDiscoveryQueue: o, rgAppIDs: a };
          })(t, b, u);
        n.useEffect(() => {
          U(!0), c.Fm.Get().HintLoad();
        }, []),
          n.useEffect(() => {
            const e = Q[C];
            e != I && (e && e != K && q.AddImpression(e, G), A(e));
          }, [q, C, I, Q, G]);
        const W = (e) => {
          const t = x.OQ(C + (e ? 1 : -1), 0, Q.length - 1);
          t != C &&
            (B(t), Y("New selected index: ", t, " Prev selected index: ", C));
        };
        n.useEffect(() => {
          Q?.length &&
            Q[C] !== K &&
            (P((e) => e + 1),
            v.aI
              .Get()
              .SkipDiscoveryQueueItem(Q[C], t, b)
              .then(() => P((e) => e - 1)));
        }, [t, C, Q, b]),
          n.useEffect(() => {
            Q.length != T &&
              (D(Q.length), Q.length > T && Q[C] == K && B(C + 1));
          }, [T, C, Q]);
        const [z] = n.useState(new Map()),
          H = (0, v.WX)(t, b),
          V = !(0, O.c)() && C > 0,
          j = !(0, O.c)() && C < Q.length - 1,
          {
            refContainer: Z,
            bIsDragging: $,
            nDragOffset: te,
            nDragSelectedOffsetIndex: ne,
            handleTouchStart: ae,
            handleTouchMove: ie,
            handleTouchEnd: se,
          } = (function (e, t) {
            const r = n.useRef(null),
              [a, i] = n.useState(0),
              [s, o] = n.useState(!1),
              [l, c] = n.useState(0),
              u = n.useRef(0),
              d = 50,
              m = (e) => {
                o(!0), (u.current = e.touches[0].clientX), i(0), c(0);
              },
              p = (e) => {
                if (!s) return;
                const t = e.touches[0].clientX - u.current;
                i(t), c(a > d ? 1 : a < -d ? -1 : 0);
              },
              _ = () => {
                s &&
                  (o(!1),
                  a > d
                    ? e((e) => Math.max(e - 1, 0))
                    : a < -d && e((e) => Math.min(e + 1, t - 1)),
                  i(0),
                  c(0));
              };
            return {
              refContainer: r,
              bIsDragging: s,
              nDragOffset: a,
              nDragSelectedOffsetIndex: l,
              handleTouchStart: m,
              handleTouchMove: p,
              handleTouchEnd: _,
            };
          })((e) => B(e), Q.length),
          le = (e) => x.W(C + e, Q) && (x.LA(e, -1, 1) || $),
          ce = (0, F._)(h.TS.STORE_BASE_URL + "explore?dq=widget");
        return n.createElement(
          m.EN,
          { active: r },
          n.createElement(
            _.A,
            { feature: X },
            n.createElement(
              s.Z,
              {
                focusable: !1,
                className: E().DiscoveryQueueCarouselCtn,
                navEntryPreferPosition: l.iU.LAST,
                onCancelButton: () => o?.(),
                onCancelActionDescription: (0, f.we)("#Button_Close"),
              },
              n.createElement(
                "div",
                {
                  className: E().DiscoveryQueueWrapper,
                  onClick: (e) => {
                    e.target == e.currentTarget && (o?.(), e.stopPropagation());
                  },
                },
                n.createElement(
                  s.Z,
                  { "flow-children": "row", className: E().DiscoveryQueueName },
                  H,
                ),
                n.createElement(
                  s.Z,
                  { "flow-children": "row", className: E().TopBarCtn },
                  n.createElement(
                    s.Z,
                    { className: E().LearnMore },
                    (0, f.oW)(
                      "#DiscoveryQueue_LearnMore_Default",
                      n.createElement(i.Ii, {
                        className: E().LearnMoreLink,
                        href: ce,
                      }),
                    ),
                  ),
                  n.createElement(
                    s.Z,
                    { className: E().ControlsCtn },
                    n.createElement(
                      s.Z,
                      {
                        focusable: !0,
                        className: E().QueueButton,
                        onClick: o,
                        onActivate: () => o && o(),
                      },
                      n.createElement(p.X, null),
                    ),
                  ),
                ),
                n.createElement(
                  s.Z,
                  {
                    onClick: () => W(!1),
                    className: (0, y.A)(
                      E().QueueNavArrow,
                      E().LeftArrow,
                      V && E().Enable,
                    ),
                  },
                  n.createElement(p.l8x, { angle: 180 }),
                ),
                n.createElement(
                  s.Z,
                  {
                    onClick: () => W(!0),
                    className: (0, y.A)(
                      E().QueueNavArrow,
                      E().RightArrow,
                      j && E().Enable,
                    ),
                  },
                  n.createElement(p.l8x, { angle: 0 }),
                ),
                n.createElement(
                  s.Z,
                  {
                    ref: Z,
                    className: E().DiscoveryQueueItemsCtn,
                    focusable: !1,
                    onTouchStart: ae,
                    onTouchMove: ie,
                    onTouchEnd: se,
                  },
                  [-2, -1, 0, 1, 2].map((e) =>
                    n.createElement(
                      "div",
                      {
                        key: C + e,
                        className: (0, y.A)({
                          [E().DiscoveryQueueItemPositioner]: !0,
                          [E().Dragging]: $,
                          [E().InRange]: le(e),
                          [E().FarLeft]: -2 == e,
                          [E().Left]: -1 == e,
                          [E().Current]: 0 == e,
                          [E().Right]: 1 == e,
                          [E().FarRight]: 2 == e,
                          [E().Selected]: e + ne == 0,
                        }),
                        style: { "--dragOffsetX": `${te}px` },
                      },
                      le(e) &&
                        n.createElement(re, {
                          eStoreDiscoveryQueueType: t,
                          storePageFilter: b,
                          rgAppIDs: Q,
                          index: C + e,
                          bShowMinimizedDisplay: L,
                          selectedIndex: C,
                          bPreferDemoStorePage: S,
                          snr: G,
                          mapViewedAppCount: z,
                          fnCloseModal: o,
                          fnLoadNextQueue: () => U(!1),
                          fnAdvance: W,
                          bSkipAppRequestPending: Boolean(0 != k),
                        }),
                    ),
                  ),
                ),
                n.createElement(oe, { selectedIndex: C, rgAppIDs: Q }),
              ),
            ),
          ),
        );
      }
      function re(e) {
        const {
            eStoreDiscoveryQueueType: t,
            storePageFilter: r,
            rgAppIDs: a,
            index: i,
            bShowMinimizedDisplay: s,
            selectedIndex: o,
            bPreferDemoStorePage: l,
            snr: c,
            mapViewedAppCount: u,
            fnCloseModal: d,
            fnLoadNextQueue: m,
            fnAdvance: p,
            bSkipAppRequestPending: _,
          } = e,
          [g, y] = n.useState(!1),
          f = () => {
            o != i && p(i > o);
          },
          b = o === i,
          w = n.useRef(b);
        if (
          (n.useEffect(() => {
            const e = w.current;
            if (((w.current = b), e && !b)) {
              y(!0);
              const e = setTimeout(() => y(!1), 500);
              return () => {
                clearTimeout(e);
              };
            }
          }, [b]),
          a[i] == K)
        ) {
          let s = 0;
          for (let e = i - 1; e >= 0; e--) a[e] == K && (s += 1);
          let l = 0;
          for (let e = i - 1; e >= 0 && a[e] !== K; e--) l++;
          return (
            u.has(s) ||
              u.set(s, v.aI.Get().GetTotalSkippedAppsForDiscoveryQueue(t, r)),
            n.createElement(ne, {
              ...e,
              key: o,
              selected: b,
              lastCard: o == a.length - 1,
              fnLoadNextQueue: m,
              fnCloseModal: d,
              summaryCardIndex: s,
              eStoreDiscoveryQueueType: t,
              viewedAppCount: (u.get(s) || 0) + l,
              fnFocused: f,
              fnAdvance: () => p(!0),
              bSkipAppRequestPending: _,
            })
          );
        }
        const h = b || w.current || g;
        return n.createElement(U, {
          eStoreDiscoveryQueueType: t,
          storePageFilter: r,
          selected: b,
          appID: a[i],
          bPreferDemoStorePage: l,
          fnFocused: f,
          elVideo: n.createElement(L.y3, {
            appID: a[i],
            focused: h,
            snrCode: c,
          }),
          elDetails: n.createElement(W, {
            appID: a[i],
            bShowMinimizedDisplay: s,
            eStoreDiscoveryQueueType: t,
            storePageFilter: r,
            bPreferDemoStorePage: l,
          }),
        });
      }
      function ne(e) {
        const {
            eStoreDiscoveryQueueType: t,
            fnCloseModal: r,
            summaryCardIndex: a,
            lastCard: i,
            selected: l,
            fnLoadNextQueue: u,
            storePageFilter: d,
            fnDisplaySummaryReward: m,
            viewedAppCount: p,
            fnFocused: _,
            fnAdvance: b,
            bSkipAppRequestPending: w,
          } = e,
          [S, C] = n.useState([]),
          [B, I] = n.useState(!1),
          A = (0, h.Qn)(),
          T = (0, H.Qt)(2, h.TS.LANGUAGE, !1);
        n.useEffect(() => {
          l &&
            !S.length &&
            !B &&
            (I(!0),
            c.Fm.Get()
              .HintLoad()
              .then(() => {
                v.aI
                  .Get()
                  .LoadSkippedApps(t, d)
                  .then((e) => {
                    C(e), I(!1);
                  });
              }));
        }, [B, t, S.length, l, d]);
        const D = n.useMemo(
            () =>
              S?.reduce(
                (e, t) => (c.Fm.Get().BIsGameWishlisted(t) ? e + 1 : e),
                0,
              ) || 0,
            [S],
          ),
          R = n.useMemo(
            () =>
              S?.reduce(
                (e, t) => (c.Fm.Get().BIsGameIgnored(t) ? e + 1 : e),
                0,
              ) || 0,
            [S],
          ),
          [M, G] = n.useState(!1),
          k = (0, N.n9)(),
          P = (0, v.IH)(t, d),
          q = (0, g.m)("DiscoveryQueueSummary"),
          L = async () => {
            i ? M || (G(!0), await u(), q?.token?.reason || G(!1)) : b();
          },
          U = n.useRef();
        return (
          n.useEffect(() => {
            l && U.current && U.current.focus({ preventScroll: !0 });
          }, [l]),
          n.createElement(
            o.YZ,
            {
              ref: U,
              className: (0, y.A)(
                E().SummaryCtn,
                E().DiscoveryQueueApp,
                l && E().Selected,
              ),
              onOptionsActionDescription: (0, f.we)(
                "#DiscoveryQueue_ViewWishlist",
              ),
              onOptionsButton: () => {
                window.location.href = (0, F._)(
                  h.TS.STORE_BASE_URL + "wishlist",
                  k,
                );
              },
              onOKActionDescription: (0, f.we)("#Button_Continue"),
              onOKButton: () => {
                L();
              },
              onCancelActionDescription: (0, f.we)("#ActionButtonLabelDone"),
              onCancelButton: () => r && r(),
              fnScrollIntoViewHandler: () => (_(), !0),
            },
            n.createElement(
              "div",
              { className: E().SummaryContentCtn },
              n.createElement(
                "div",
                { className: E().SummaryTitle },
                (0, f.we)("#DiscoveryQueue_SummaryTitle"),
              ),
              !P &&
                l &&
                T.data?.definition &&
                n.createElement(ie, {
                  bSkipAppRequestPending: w,
                  summaryCardIdx: a,
                }),
              n.createElement(
                "div",
                { className: E().YourStats },
                (0, f.we)("#DiscoveryQueue_YourStats"),
              ),
              n.createElement(
                s.Z,
                { "flow-children": "row", className: E().SummaryGrid },
                n.createElement(
                  "div",
                  { className: E().GridItem },
                  n.createElement(
                    "div",
                    { className: E().GridTitle },
                    (0, f.we)("#DiscoveryQueue_ViewedCaps"),
                  ),
                  n.createElement(
                    "div",
                    { className: E().GridNumber },
                    p.toLocaleString(),
                  ),
                  n.createElement(
                    "div",
                    { className: E().GridSubTitle },
                    (0, f.we)("#DiscoveryQueue_Titles"),
                  ),
                ),
                n.createElement(
                  "div",
                  { className: E().GridItem },
                  n.createElement(
                    "div",
                    { className: E().GridTitle },
                    (0, f.we)("#DiscoveryQueue_WishlistedCaps"),
                  ),
                  n.createElement(
                    "div",
                    { className: E().GridNumber },
                    D.toLocaleString(),
                  ),
                  n.createElement(
                    "a",
                    {
                      className: (0, y.A)(E().GridSubTitle, E().TextLink),
                      href: (0, F._)(h.TS.STORE_BASE_URL + "wishlist", k),
                    },
                    (0, f.we)("#DiscoveryQueue_ViewWishlist"),
                  ),
                ),
                n.createElement(
                  "div",
                  { className: E().GridItem },
                  n.createElement(
                    "div",
                    { className: E().GridTitle },
                    (0, f.we)("#DiscoveryQueue_IgnoredCaps"),
                  ),
                  n.createElement(
                    "div",
                    { className: E().GridNumber },
                    R.toLocaleString(),
                  ),
                  n.createElement(
                    "a",
                    {
                      className: (0, y.A)(E().GridSubTitle, E().TextLink),
                      href: (0, F._)(
                        h.TS.STORE_BASE_URL + "account/notinterested",
                        k,
                      ),
                    },
                    (0, f.we)("#DiscoveryQueue_ViewIgnored"),
                  ),
                ),
              ),
              !A &&
                n.createElement(
                  s.Z,
                  { className: E().SummaryActionButtonsCtn },
                  n.createElement(
                    s.Z,
                    {
                      className: (0, y.A)(E().QueueButton, E().Wide),
                      onClick: r,
                    },
                    (0, f.we)("#ActionButtonLabelDone"),
                  ),
                  !P &&
                    n.createElement(
                      s.Z,
                      {
                        className: (0, y.A)(
                          M && E().Disabled,
                          E().QueueButton,
                          E().Primary,
                          E().Wide,
                        ),
                        onClick: L,
                      },
                      M ? (0, f.we)("#Loading") : (0, f.we)("#Button_Continue"),
                    ),
                ),
            ),
            Boolean(!P) &&
              n.createElement(n.Fragment, null, Boolean(m) && m(a + 1)),
          )
        );
      }
      function ae() {
        return n.createElement(
          s.Z,
          { className: E().SaleRewardsCtn },
          n.createElement(Z.t, { size: "large", position: "center" }),
        );
      }
      function ie(e) {
        const { bSkipAppRequestPending: t, summaryCardIdx: r } = e;
        return t
          ? n.createElement(ae, null)
          : n.createElement(se, { summaryCardIdx: r });
      }
      function se(e) {
        const { summaryCardIdx: t } = e,
          r = (0, H.os)(2, h.TS.LANGUAGE, !1, t.toString()),
          [a] = (0, A.t7)(r?.data?.current_def?.appid, {});
        if (!r?.data?.current_def || !a?.GetName().length)
          return n.createElement(ae, null);
        const i = r.data.num_items_earned,
          o = r.data.current_def.num_items_per_def,
          l = o - i,
          c = (i / o) * 100;
        return n.createElement(
          s.Z,
          { className: E().SaleRewardsCtn },
          n.createElement(j, { nPercent: c, size: 70, strokeWidth: 12 }),
          n.createElement(
            s.Z,
            { className: E().RewardStatusCtn },
            n.createElement(
              "div",
              { className: E().SaleRewardAppTitle },
              (0, f.we)(
                "#DiscoveryQueue_SaleStatus_Title" + (l ? "" : "_Complete"),
                i.toLocaleString(),
                a.GetName(),
              ),
            ),
            l > 0 &&
              n.createElement(
                "div",
                { className: E().SaleRewardAppTitle },
                (0, f.we)(
                  "#DiscoveryQueue_SaleStatus_Desc",
                  l.toLocaleString(),
                  a.GetName(),
                ),
              ),
            n.createElement(
              "a",
              { href: h.TS.COMMUNITY_BASE_URL + "my/itemcollection" },
              (0, f.we)("#DiscoveryQueue_SaleStatus_Link"),
            ),
          ),
        );
      }
      const oe = n.memo(function (e) {
        const { selectedIndex: t, rgAppIDs: r } = e;
        let a = 0;
        for (let e = 0; e < t; e++) r[e] == K && (a = e + 1);
        let i = 0;
        for (let e = t; e < r.length; e++) {
          if (r[e] == K) {
            i = e;
            break;
          }
          e == r.length - 1 && (i = r.length);
        }
        const o = [];
        for (let e = a; e < i; ++e)
          o.push(
            n.createElement("img", {
              key: "dot_" + e,
              className: (0, y.A)({
                [E().ProgressDot]: !0,
                [E().ProgressDotActive]: e <= t,
                [E().ProgressDotHidden]: r[t] === K,
              }),
              src: S.A,
            }),
          );
        return n.createElement(
          s.Z,
          { "flow-children": "row", className: E().ProgressCtn },
          o,
        );
      });
    },
    26749: (e, t, r) => {
      "use strict";
      r.d(t, { G: () => l });
      var n = r(90626),
        a = r(23809),
        i = r(39199),
        s = r(30894),
        o = r(30470);
      function l() {
        const [e, t] = (0, n.useState)(!o.iA.logged_in),
          [r] = (0, s.L2)(),
          l = (0, a.KV)();
        return (
          (0, n.useEffect)(() => {
            e || (i.aI.Init(l), t(!0));
          }, [e, l]),
          e && !r
        );
      }
    },
    43188: (e, t, r) => {
      "use strict";
      r.d(t, {
        y3: () => q,
        Gy: () => P,
        W3: () => Q,
        TK: () => F,
        u4: () => U,
      });
      var n = r(90626),
        a = r(34418),
        i = r.n(a),
        s = r(52038),
        o = r(61859),
        l = r(76217),
        c = r(65946),
        u = r(91822),
        d = r(61088),
        m = r.n(d),
        p = r(12155),
        _ = r(2627),
        g = r(33737),
        y = r(79359),
        f = r(78327),
        b = r(60778),
        w = r(72224),
        h = r(14947);
      const S = new b.wd("TrailerAppVideo"),
        v = "bGameHighlightAutoplayDisabled",
        C = "discovery-queue-volume";
      function E(e) {
        const {
            storeItem: t,
            bCurrentlyActive: r,
            autoPlayCookieName: a,
            bPlayWithBroadcastPlayer: i,
            showScreenshotInsteadOfMainCap: o,
            autoplayCheckboxPosition: c,
          } = e,
          [u, d] = n.useState(!1),
          [p, g] = n.useState(!1),
          [y, f] = n.useState(!1),
          [b, w] = n.useState(!1),
          [h, S] = n.useState(0),
          C = n.useRef(),
          E = n.useRef(),
          [I, A] = n.useState(),
          D = n.useRef();
        n.useEffect(() => {
          r && p && (u || i) && f(!0);
        }, [u, p, r, i]),
          n.useEffect(() => {
            if (r) {
              const e = (0, _.VY)(a ?? v),
                t = !(!e || "true" !== e.toLowerCase());
              d(!t), g(!0);
            }
            return () => g(!1);
          }, [a, r]);
        const M = (function (e, t, r, a, i) {
            return n.useCallback(() => {
              0 == e
                ? t(!0)
                : 1 == e && r.current
                  ? r.current.paused
                    ? r.current.play()
                    : r.current.pause()
                  : 2 == e && a.current
                    ? a.current.paused
                      ? a.current.play()
                      : a.current.pause()
                    : 2 == e && i && i.TogglePlayPause();
            }, [i, e, a, r, t]);
          })(h, f, C, E, I),
          N =
            o && t.BHasAgeSafeScreenshots()
              ? t.GetOnlyAllAgesSafeScreenshots()[0]
              : t.GetAssets().GetMainCapsuleURL(),
          G = (function (e) {
            let t = null;
            e?.GetAllTrailers().GetHighlightTrailers().length > 0
              ? (t = e.GetAllTrailers().GetHighlightTrailers()[0])
              : e?.GetAllTrailers().GetOtherTrailers().length > 0 &&
                (t = e.GetAllTrailers().GetOtherTrailers()[0]);
            return t;
          })(t);
        return n.createElement(
          l.Z,
          {
            className: m().AppCarouselTrailerCtn,
            onMouseEnter: () => w(!0),
            onMouseLeave: () => w(!1),
          },
          n.createElement("img", {
            ref: D,
            className: (0, s.A)(m().AppMainCap, 0 != h && m().Hidden),
            src: N,
            onClick: M,
          }),
          !i &&
            n.createElement(T, {
              storeItem: t,
              bAutoplayVideos: u,
              autoplayCheckboxPosition: c,
              fnSetAutoPlayVideos: (e) => {
                (0, _.lc)(a ?? v, String(!e), 3650), d(e), f(e);
              },
            }),
          n.createElement(R, {
            name: t.GetName(),
            trailerCategory: G?.GetTrailerCategory(),
            trailerDisplay: h,
            mouseOver: b,
          }),
          n.createElement(B, {
            eTrailerDisplay: h,
            setTrailerDisplay: S,
            featuredTrailer: G,
            refMicroTrailer: C,
            refMainTrailer: E,
            loadedAndActive: p && r,
            setVideoShouldStart: f,
            bMouseOverVideo: b,
            storeItem: t,
            broadcastVideo: I,
            fnSetBroadcastVideo: A,
            fnTogglePlayPause: M,
            bAutoplayVideos: u,
            bVideoShouldStart: y,
          }),
        );
      }
      function B(e) {
        const {
            storeItem: t,
            featuredTrailer: r,
            bPlayWithBroadcastPlayer: a,
            bSkipMicroTrailer: i,
            nFadeRatio: s,
            fnPlayPause: o,
            refTogglePlayPause: c,
            bRequestPause: u,
            fnComplete: d,
            bLoopVideo: _,
            nDefaultVolume: g,
            eTrailerDisplay: b,
            setTrailerDisplay: v,
            refMainTrailer: E,
            refMicroTrailer: B,
            loadedAndActive: T,
            setVideoShouldStart: R,
            broadcastVideo: M,
            fnSetBroadcastVideo: N,
            fnTogglePlayPause: G,
            bAutoplayVideos: k,
            bVideoShouldStart: P,
          } = e,
          [q, F] = n.useState(!1),
          [L, U] = n.useState(!1),
          [Q, W] = n.useState(!1),
          [z, x] = (0, y.M)(C),
          [O, H] = n.useState(!1),
          [V, j] = n.useState(!1),
          [Z, Y] = n.useState(!1);
        n.useEffect(() => {
          if (E.current) {
            const e = g ?? 0.8;
            (E.current.volume = (z ?? e) * (s ?? 1)),
              (E.current.muted = null == z || z <= 0 || O);
          }
        }, [z, s, O, g, E]);
        const K = t?.GetMicroTrailer(),
          J = !!K || !!r;
        n.useEffect(() => {
          let e = !1;
          T && Q && J && (e = 0 === b || (1 === b && !V) || (2 === b && !Z)),
            F(e),
            o?.(k && e);
        }, [o, b, Z, V, T, k, Q, J]),
          D(B, j),
          D(E, Y),
          n.useEffect(() => {
            P ||
              (v(0),
              F(!1),
              W(!1),
              B.current && (B.current.pause(), (B.current.currentTime = 0)),
              E.current && (E.current.pause(), (E.current.currentTime = 0)));
          }, [P, E, B, v]),
          n.useEffect(() => {
            E.current && (E.current.onended = d);
          }, [d, E]);
        const X = n.useRef(!1);
        n.useEffect(() => {
          if (T && 0 === b)
            if ((W(!0), P))
              if (E.current) {
                S.Debug("Starting microtrailer"), v(1);
                const e = () =>
                  (function (e, t, r, n) {
                    if (e.current) return;
                    (e.current = !0),
                      S.Debug("Starting main trailer"),
                      t(2),
                      r(!1),
                      I(n, "main trailer", (e) => {
                        e && r(!0);
                      });
                  })(X, v, H, E.current);
                i || !B.current
                  ? e()
                  : (j(!0),
                    (B.current.onended = e),
                    I(B.current, "microtrailer", () => j(!1)));
              } else
                M &&
                  (S.Debug("Starting broadcast player"), v(2), H(!1), M.Play());
            else S.Debug("Showing image");
        }, [T, b, i, P, d, M, v, E, B]),
          (function (e, t) {
            n.useEffect(() => {
              if (!t.current || !t.current.onended) return;
              if (!e) return;
              let r = t.current.onended,
                n = setTimeout(() => {
                  r();
                }, 6e3);
              return () => clearTimeout(n);
            }, [e, t]);
          })(V, B),
          n.useEffect(() => {
            T || R(!1);
          }, [T, R]),
          n.useEffect(() => {
            const e = (0, h.fm)(() => {
              U(M?.GetUserInputNeeded()), Y(!M?.IsPaused());
            });
            return () => e();
          }, [M]);
        if (
          ((function (e, t, r, a, i, s, o) {
            const [l, c] = n.useState(!1);
            n.useEffect(() => {
              e && !l
                ? 1 == t && r && a
                  ? (r.pause(), c(!0))
                  : 2 == t && i && s
                    ? (i.pause(), c(!0))
                    : 2 == t && o && !o.IsPaused() && (o.Pause(), c(!0))
                : !e &&
                  l &&
                  (1 == t && r
                    ? r.play()
                    : 2 == t && i
                      ? i.play()
                      : 2 == t && o && o.IsPaused() && o.Play(),
                  c(!1));
            }, [o, t, e, l, a, s, r, i]);
          })(u, b, B.current, V, E.current, Z, M),
          n.useEffect(() => {
            c && (c.current = G);
          }, [G, c]),
          !t || !t.BIsVisible())
        )
          return null;
        const $ = (_ ?? !0) && !d;
        return (
          (r || a) &&
          n.createElement(
            n.Fragment,
            null,
            q &&
              !L &&
              n.createElement(
                l.Z,
                { focusable: !0, onClick: G, className: m().PlayButton },
                n.createElement(p.IOc, null),
              ),
            K &&
              n.createElement(
                "video",
                {
                  className: A(!0, b),
                  ref: B,
                  preload: "auto",
                  playsInline: !0,
                  muted: !0,
                  onClick: G,
                },
                n.createElement("source", {
                  src: K.strWebMURL,
                  type: "video/webm",
                }),
                Boolean(!f.TS.IN_CLIENT) &&
                  n.createElement("source", {
                    src: K.strMP4URL,
                    type: "video/mp4",
                  }),
              ),
            r &&
              !a &&
              n.createElement(
                "video",
                {
                  className: A(!1, b),
                  ref: E,
                  onVolumeChange: (e) => {
                    if (s && s < 1) return;
                    if (O) return;
                    const t = e.target,
                      r = t.muted ? 0 : t.volume;
                    (void 0 === z || Math.abs(z - r) > Number.EPSILON) &&
                      (S.Debug("Saving volume to storage", r), x(r));
                  },
                  muted: !(z > 0),
                  preload: "auto",
                  playsInline: !0,
                  loop: $,
                  controls: !0,
                },
                n.createElement("source", {
                  src: r.GetTrailer480p().strWebMURL,
                  type: "video/webm",
                }),
                Boolean(!f.TS.IN_CLIENT) &&
                  n.createElement("source", {
                    src: r.GetTrailer480p().strMP4URL,
                    type: "video/mp4",
                  }),
              ),
            a &&
              n.createElement(w.default, {
                classes: A(!1, b),
                nAppIDVOD: t.GetAppID(),
                watchLocation: 15,
                fnOnVideoEnd: d,
                fnVideoClick: G,
                fnSetBroadcastVideo: N,
                bStartWithSubtitles: !0,
                bStartMuted: !0,
              }),
          )
        );
      }
      function I(e, t, r) {
        e.play().catch((n) => {
          const a = "NotAllowedError" === n.name;
          r(a),
            "NotAllowedError" === n.name
              ? (S.Debug(`Failed to play ${t}, trying again muted`),
                (e.muted = !0),
                e.play().catch((e) => {
                  S.Warning(`Failed to play ${t}: `, e);
                }))
              : S.Warning(`Failed to play ${t}: `, n);
        });
      }
      function A(e, t) {
        return (0, s.A)({
          [m().AppVideo]: !0,
          [m().PlayFullTrailer]: 2 == t,
          [m().PlayMicrotrailer]: 1 == t,
          [m().NoTrailer]: 0 == t,
          [m().Microtrailer]: e,
          [m().Trailer]: !e,
        });
      }
      function T(e) {
        const {
            storeItem: t,
            bAutoplayVideos: r,
            fnSetAutoPlayVideos: a,
            autoplayCheckboxPosition: i,
          } = e,
          s = { [i || "top"]: 0 };
        return n.createElement(
          "div",
          {
            onClick: (e) => {
              e.preventDefault(), e.stopPropagation();
            },
            className: m().AutoplayCheckboxCtn,
          },
          n.createElement(g.Yh, {
            controlled: !0,
            checked: r,
            key: t.GetAppID(),
            className: m().AutoplayCheckbox,
            style: s,
            label: (0, o.we)("#StoreTrailer_AutoPlayVideos"),
            onChange: a,
          }),
        );
      }
      function D(e, t) {
        n.useEffect(() => {
          const r = e.current;
          if (!r) return;
          const n = () => t(!0),
            a = () => t(!1);
          return (
            r.addEventListener("play", n),
            r.addEventListener("pause", a),
            () => {
              r.removeEventListener("play", n),
                r.removeEventListener("pause", a);
            }
          );
        }, [t, e]);
      }
      function R(e) {
        const {
            name: t,
            trailerCategory: r,
            trailerDisplay: a,
            mouseOver: i,
          } = e,
          [l, c] = n.useState(!1);
        if (
          (n.useEffect(() => {
            0 != a && c(!0);
          }, [a]),
          n.useEffect(() => {
            if (i) return void c(!0);
            if (!l) return;
            const e = setTimeout(() => c(!1), 3e3);
            return () => clearTimeout(e);
          }, [l, i]),
          null == r || 0 == a)
        )
          return;
        const u =
          1 == a
            ? (0, o.we)("#StoreTrailer_Title_TrailerPreview")
            : (function (e) {
                switch (e) {
                  case 1:
                    return (0, o.we)("#StoreTrailer_Title_Category_Gameplay");
                  case 2:
                    return (0, o.we)("#StoreTrailer_Title_Category_Teaser");
                  case 3:
                    return (0, o.we)("#StoreTrailer_Title_Category_Cinematic");
                  case 4:
                    return (0, o.we)("#StoreTrailer_Title_Category_Update");
                  case 5:
                    return (0, o.we)("#StoreTrailer_Title_Category_Accolades");
                  case 6:
                    return (0, o.we)("#StoreTrailer_Title_Category_Interview");
                }
                return (0, o.we)("#StoreTrailer_Title_Category_Unknown");
              })(r);
        return n.createElement(
          "div",
          { className: (0, s.A)(m().TrailerTitle, l && m().Visible) },
          (0, o.PP)(
            "#StoreTrailer_Title_Combiner",
            n.createElement("span", { className: m().Category }, u),
            t,
          ),
        );
      }
      var M = r(30894),
        N = r(55263),
        G = r(44986),
        k = r(20713);
      const P = {
        include_assets: !0,
        include_trailers: !0,
        include_basic_info: !0,
        include_platforms: !0,
      };
      function q(e) {
        const {
            appID: t,
            focused: r,
            snrCode: a,
            skipMicroTrailer: c,
            playWithBroadcastPlayer: d,
            autoPlayCookieName: m,
            showScreenshotInsteadOfMainCap: p,
            fadeRatio: _,
            fnPlayPause: g,
            refTogglePlayPause: y,
            bRequestPause: f,
            fnComplete: b,
            loopVideo: w,
            defaultVolume: h,
          } = e,
          [S] = (0, N.t7)(t, P),
          { bIsIgnored: v } = F(t, a),
          { bIsWishlisted: C } = U(t, a),
          B = (0, u.er)();
        return n.createElement(
          l.Z,
          { className: (0, s.A)(i().AppVideoCtn, "AppVideoCtn") },
          n.createElement(
            "div",
            { className: (0, s.A)(i().WishlistBadge, C && i().Active) },
            (0, o.we)("#Sale_OnWishlist"),
          ),
          B &&
            n.createElement(u.$o, {
              className: i().DeckVerifiedLogo,
              category: S.GetPlatforms().steam_deck_compat_category,
            }),
          n.createElement(
            "div",
            { className: i().VideoArea },
            n.createElement(L, { appID: t, snrCode: a }),
            n.createElement(E, {
              key: t,
              storeItem: S,
              bCurrentlyActive: r && !v,
              autoplayCheckboxPosition: "top",
              autoPlayCookieName: m,
              bSkipMicroTrailer: c,
              bPlayWithBroadcastPlayer: d,
              nFadeRatio: _,
              showScreenshotInsteadOfMainCap: p,
              fnPlayPause: g,
              refTogglePlayPause: y,
              bRequestPause: f,
              fnComplete: b,
              bLoopVideo: w,
              nDefaultVolume: h,
            }),
          ),
        );
      }
      function F(e, t) {
        const r = (0, c.q3)(() => M.Fm.Get().BIsGameIgnored(e)),
          a = n.useCallback(() => {
            M.Fm.Get().UpdateAppIgnore(e, !r, t);
          }, [e, t, r]);
        return { bIsIgnored: r, fnUpdateIgnored: a };
      }
      function L(e) {
        const { appID: t, snrCode: r } = e,
          a = (0, f.Qn)(),
          { bIsIgnored: c, fnUpdateIgnored: u } = F(t, r);
        return n.createElement(
          "div",
          { className: (0, s.A)(i().IgnoredCtn, c && i().Active) },
          n.createElement(
            "div",
            { className: (0, s.A)(i().IgnoredInfo, c && i().Active) },
            n.createElement(
              "div",
              { className: i().IgnoredTitle },
              (0, o.we)("#SaleTrailerCarousel_Ignored"),
            ),
            n.createElement(
              "div",
              { className: i().IgnoredDescription },
              (0, o.we)("#SaleTrailerCarousel_IgnoredConfirmation"),
            ),
            n.createElement(
              l.Z,
              {
                className: (0, s.A)(i().UndoButton, i().UndoIgnoreButton),
                onClick: u,
              },
              a &&
                n.createElement(G.$m, {
                  button: k.g4.X,
                  type: G.wt.Light,
                  size: G.xY.Medium,
                }),
              (0, o.we)("#SaleTrailerCarousel_Undo"),
            ),
          ),
        );
      }
      function U(e, t) {
        const r = (0, c.q3)(() => M.Fm.Get().BIsGameWishlisted(e)),
          a = n.useCallback(() => {
            M.Fm.Get().UpdateGameWishlist(e, !r, t);
          }, [e, r, t]);
        return { bIsWishlisted: r, fnUpdateWishlist: a };
      }
      function Q(e) {
        const t = M.Fm.Get().GetRecommendedTags(),
          r = n.useMemo(() => new Map(t.map((e, t) => [e, t])), [t]),
          a = n.useMemo(() => new Map(e.map((e, t) => [e.tagid, t])), [e]);
        return n.useMemo(
          () =>
            [...e].sort((e, t) =>
              r.has(e.tagid) && !r.has(t.tagid)
                ? -1
                : !r.has(e.tagid) && r.has(t.tagid)
                  ? 1
                  : r.has(e.tagid)
                    ? r.get(e.tagid) - r.get(t.tagid)
                    : a.get(e.tagid) - a.get(t.tagid),
            ),
          [a, r, e],
        );
      }
    },
  },
]);
