diff --git a/DEPS b/DEPS
index 0c58d9b..8c0819c1 100644
--- a/DEPS
+++ b/DEPS
@@ -299,7 +299,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '4d064e82ce8eec8cfa4cde527309f37f903d6b3c',
+  'skia_revision': '99a797d497fe983e63f3fbfe064c270973298b45',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -307,7 +307,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'a4c7abcbc1eb5b811e7a35af19d826ef02487540',
+  'angle_revision': 'b6cc575478e27c62500f43192aa602737b2f6257',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -382,7 +382,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '5bdad08bf79193843208481da846da1aad38ecc5',
+  'devtools_frontend_revision': '798cf20faa5996e26d4e1d36f63f6cb0c021d173',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -760,12 +760,12 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    'c7649873caea2477a507967c57a57e9c96468dbf',
+    '885a039347998fb1c765b87509e85b3e2dde5321',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
   'src/docs/website': {
-    'url': Var('chromium_git') + '/website.git' + '@' + '481e8c3d3e28f964c9734f088985d2d57a874820',
+    'url': Var('chromium_git') + '/website.git' + '@' + 'df9abe350ddeacb7098bc38b5963ab32174041f9',
   },
 
   'src/ios/third_party/earl_grey2/src': {
@@ -859,7 +859,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'WwVlbVpZkFq-BahAijh4n7dENiyJCFy2syurnzEoVIYC',
+          'version': 'cPPsE0z3IXqpoXpbmzdyh6l0XhBzJgxhRfe9v2Y6IVEC',
         },
       ],
       'dep_type': 'cipd',
@@ -870,7 +870,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'ljpZwNcs7J2KLcv_4Ah5503Y_jOyfc_esw6yLRkq2H0C',
+          'version': 'pkkhKnZ2nc-CB0XQKKmIg_8KCtEQbEZyKS9owHXDiEkC',
         },
       ],
       'dep_type': 'cipd',
@@ -881,7 +881,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': '9WQ3liJmtdg7kYpCLqbuZwzdtrsMUEMa-gsVA-3Y9fsC',
+          'version': 'fA_z7VzvkQLDJpkND9CW9YmdJupcQ8Hz6xKpUxeDVakC',
         },
       ],
       'dep_type': 'cipd',
@@ -1188,7 +1188,7 @@
 
   # For Linux and Chromium OS.
   'src/third_party/cros_system_api': {
-      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '4bc2fbeca65a8412580d1ffa7f272e12c71b4ffc',
+      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '5412d7e8d1e5c8492f60d9e886088b000fadc89f',
       'condition': 'checkout_linux',
   },
 
@@ -1208,7 +1208,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'c0a085a80c4447f72eba0db9b61ed59e7e23c9af',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'b648d0eaa0ab60d049f8742673eb8a33aff29384',
     'condition': 'checkout_src_internal',
   },
 
@@ -1660,7 +1660,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + 'db956674bbdfbaab5acdd3fdb4117c2fef5527e9',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + 'ccc269d772564303bb3037e5b7f2a1ff630e7d9a',
+    Var('chromium_git') + '/openscreen' + '@' + 'cf5b8ca7bc6f754146708a99e4beb150584e9411',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + 'bf21ccb1007bb531b45d9978919a56ea5059c245',
@@ -1677,7 +1677,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '656582b37c3b7214e3b20aba8fd74d41b35a7160',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '0374f0872ca2a125943edd23e8d27bb606fe47de',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1862,7 +1862,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '6c8361e98f1daba65902f5e2fc1297893ac14b67',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'cd489a06abfb3b94373017fd2194a09d0c71fbe9',
+    Var('webrtc_git') + '/src.git' + '@' + 'fd4ddd1fb19b5e9678664cd0054d19a841e10220',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1910,7 +1910,7 @@
       'packages': [
         {
           'package': 'skia/tools/goldctl/mac-amd64',
-          'version': '5oIslrG0Eg5aFGRjCcXNnvLNWTm78MIIEJJIf9bYVf4C',
+          'version': 'ULgZ7ykXJY3h8y05E5fFUSAkNcgHMBgYeZqwRHYNmjAC',
         },
       ],
       'dep_type': 'cipd',
@@ -1932,7 +1932,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@2b7eec326a34513e85ac3b6bb4686f1cdf566183',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6fd469560dc257381fae48a8d9842b04384a8581',
     'condition': 'checkout_src_internal',
   },
 
@@ -1973,7 +1973,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'Uc-IRz5aqexSLVM4hdvXuk6Osp4RnBLl7DBb9qnUwMgC',
+        'version': 'eFH_Q7aC4E14c04k_scKynvj45oXY0FwbYKdkVUw8jQC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/WATCHLISTS b/WATCHLISTS
index 7c97c9ab..69d57880 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1188,6 +1188,9 @@
                   'extensions/renderer/resources/guest_view|'\
                   'extensions/test/data/(app|web)_view',
     },
+    'hashprefix_realtime': {
+      'filepath': 'components/safe_browsing/core/browser/hashprefix_realtime/'
+    },
     'hats': {
       'filepath': 'chrome/browser/ash/hats/',
     },
@@ -2714,6 +2717,7 @@
     'gpu_passthrough_cmd_decoder': ['geofflang+watch@chromium.org'],
     'guest_view': ['mcnee@chromium.org',
                    'wjmaclean@chromium.org'],
+    'hashprefix_realtime': ['thefrog+watch@chromium.org'],
     'hats': ['cros-telemetry+hats@google.com'],
     'headless': ['headless-reviews@chromium.org'],
     'heap_mojo': ['chikamune+watch@chromium.org'],
diff --git a/android_webview/common/aw_switches.cc b/android_webview/common/aw_switches.cc
index 39ae5ba..62317fad 100644
--- a/android_webview/common/aw_switches.cc
+++ b/android_webview/common/aw_switches.cc
@@ -80,4 +80,10 @@
 // Enables WebView to check for app recovery mitigations.
 const char kWebViewEnableAppRecovery[] = "webview-enable-app-recovery";
 
+// Enables downloading TrustTokenKeyCommitmentsComponent by the component
+// updater downloading service in nonembedded WebView. See
+// https://crbug.com/1170468.
+const char kWebViewEnableTrustTokensComponent[] =
+    "webview-enable-trust-tokens-component";
+
 }  // namespace switches
diff --git a/android_webview/common/aw_switches.h b/android_webview/common/aw_switches.h
index a54ef93..b0ac9a9a 100644
--- a/android_webview/common/aw_switches.h
+++ b/android_webview/common/aw_switches.h
@@ -24,6 +24,7 @@
 extern const char kWebViewFencedFrames[];
 extern const char kWebViewDisableAppRecovery[];
 extern const char kWebViewEnableAppRecovery[];
+extern const char kWebViewEnableTrustTokensComponent[];
 
 }  // namespace switches
 
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index 51f2ac2e..97f26ab 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -369,6 +369,10 @@
             Flag.baseFeature("WebViewEnableDnsPrefetchAndPreconnect"),
             Flag.baseFeature(BlinkFeatures.KEYBOARD_FOCUSABLE_SCROLLERS,
                     "When enabled, can focus on a scroller element using the keyboard."),
+            Flag.commandLine(AwSwitches.WEBVIEW_ENABLE_TRUST_TOKENS_COMPONENT,
+                    "Enables downloading TrustTokenKeyCommitmentsComponent by the component"
+                            + " updater downloading service in nonembedded WebView."
+                            + " See https://crbug.com/1170468."),
             // Add new commandline switches and features above. The final entry should have a
             // trailing comma for cleaner diffs.
     };
diff --git a/android_webview/nonembedded/component_updater/registration.cc b/android_webview/nonembedded/component_updater/registration.cc
index 791586f..6f71e28 100644
--- a/android_webview/nonembedded/component_updater/registration.cc
+++ b/android_webview/nonembedded/component_updater/registration.cc
@@ -11,14 +11,12 @@
 #include "android_webview/nonembedded/component_updater/installer_policies/aw_package_names_allowlist_component_installer_policy.h"
 #include "base/barrier_closure.h"
 #include "base/command_line.h"
-#include "base/files/file_path.h"
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_service.h"
-#include "components/component_updater/installer_policies/client_side_phishing_component_installer_policy.h"
 #include "components/component_updater/installer_policies/origin_trials_component_installer.h"
 #include "components/component_updater/installer_policies/trust_token_key_commitments_component_installer_policy.h"
 #include "components/update_client/update_client.h"
@@ -26,8 +24,9 @@
 namespace android_webview {
 
 namespace {
-// Update when changing the components WebView registers.
-constexpr int kNumWebViewComponents = 4;
+// Number of components that are always downloaded on the default path (not
+// guarded by any flags). Update when changing the components WebView registers.
+constexpr int kNumWebViewComponents = 2;
 
 void RegisterComponentInstallerPolicyShim(
     std::unique_ptr<component_updater::ComponentInstallerPolicy> policy,
@@ -46,37 +45,34 @@
     base::RepeatingCallback<bool(
         const component_updater::ComponentRegistration&)> register_callback,
     base::OnceClosure on_finished) {
+  int num_webview_components = kNumWebViewComponents;
+
+  bool trust_tokens_component_enabled =
+      base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kWebViewEnableTrustTokensComponent);
+  if (trust_tokens_component_enabled) {
+    num_webview_components++;
+  }
+
   base::RepeatingClosure barrier_closure =
-      base::BarrierClosure(kNumWebViewComponents, std::move(on_finished));
+      base::BarrierClosure(num_webview_components, std::move(on_finished));
 
   RegisterComponentInstallerPolicyShim(
       std::make_unique<
           component_updater::OriginTrialsComponentInstallerPolicy>(),
       register_callback, barrier_closure);
 
-  RegisterComponentInstallerPolicyShim(
-      std::make_unique<
-          component_updater::TrustTokenKeyCommitmentsComponentInstallerPolicy>(
-          /* on_commitments_ready= */ base::BindRepeating(
-              [](const std::string& raw_commitments) { NOTREACHED(); })),
-      register_callback, barrier_closure);
-
-  RegisterComponentInstallerPolicyShim(
-      std::make_unique<
-          component_updater::ClientSidePhishingComponentInstallerPolicy>(
-          // Files shouldn't be parsed or loaded in this process, thus
-          // ClientSidePhishingComponentInstallerPolicy::ComponentReady will
-          // never be called in this process and the `ReadFilesCallback`
-          // shouldn't be called either.
-          base::BindRepeating(
-              [](const base::FilePath& /* install_path */) { NOTREACHED(); }),
-          base::BindRepeating([]() {
-            // Always download the "default" binary, because variations aren't
-            // initialized in this process and values can't be dynamically
-            // changed using finch. See https://crbug.com/1115700#c36.
-            return update_client::InstallerAttributes{{"tag", "default"}};
-          })),
-      register_callback, barrier_closure);
+  // TODO(https://crbug.com/1170468): decide if this component is still needed.
+  // Note: We're using a command-line switch because finch features isn't
+  // supported in nonembedded WebView.
+  if (trust_tokens_component_enabled) {
+    RegisterComponentInstallerPolicyShim(
+        std::make_unique<component_updater::
+                             TrustTokenKeyCommitmentsComponentInstallerPolicy>(
+            /* on_commitments_ready= */ base::BindRepeating(
+                [](const std::string& raw_commitments) { NOTREACHED(); })),
+        register_callback, barrier_closure);
+  }
 
   RegisterWebViewAppsPackageNamesAllowlistComponent(register_callback,
                                                     barrier_closure);
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index a3063e72..332576f2 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -2831,8 +2831,6 @@
     "capture_mode/capture_mode_camera_unittests.cc",
     "capture_mode/capture_mode_demo_tools_unittests.cc",
     "capture_mode/capture_mode_feature_pod_controller_unittest.cc",
-    "capture_mode/capture_mode_test_util.cc",
-    "capture_mode/capture_mode_test_util.h",
     "capture_mode/capture_mode_unittests.cc",
     "capture_mode/gif_recording_unittests.cc",
     "child_accounts/parent_access_controller_impl_unittest.cc",
@@ -3696,6 +3694,8 @@
     "capture_mode/capture_mode_session_test_api.h",
     "capture_mode/capture_mode_settings_test_api.cc",
     "capture_mode/capture_mode_settings_test_api.h",
+    "capture_mode/capture_mode_test_util.cc",
+    "capture_mode/capture_mode_test_util.h",
     "capture_mode/fake_camera_device.cc",
     "capture_mode/fake_camera_device.h",
     "capture_mode/fake_folder_selection_dialog_factory.cc",
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc
index 8213862..e95a50cd 100644
--- a/ash/accelerators/accelerator_controller_impl.cc
+++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -276,8 +276,17 @@
 
 void AcceleratorControllerImpl::TestApi::RegisterAccelerators(
     base::span<const AcceleratorData> accelerators) {
+  // Initializing accelerators will register them.
   controller_->accelerator_configuration()->Initialize(accelerators);
-  controller_->RegisterAccelerators(accelerators);
+  // If customization is not available, register the accelerators manually.
+  if (!::features::IsShortcutCustomizationEnabled()) {
+    controller_->RegisterAccelerators(accelerators);
+  }
+}
+
+void AcceleratorControllerImpl::TestApi::ObserveAcceleratorUpdates() {
+  DCHECK(::features::IsShortcutCustomizationEnabled());
+  controller_->accelerator_configuration()->AddObserver(controller_);
 }
 
 bool AcceleratorControllerImpl::TestApi::IsActionForAcceleratorEnabled(
@@ -332,6 +341,10 @@
 
   Init();
 
+  if (::features::IsShortcutCustomizationEnabled()) {
+    accelerator_configuration_->AddObserver(this);
+  }
+
   // Let AcceleratorHistory be a PreTargetHandler on aura::Env to ensure that it
   // receives KeyEvents and MouseEvents. In some cases Shell PreTargetHandlers
   // will handle Events before AcceleratorHistory gets to see them. This
@@ -346,6 +359,9 @@
   if (::features::IsImprovedKeyboardShortcutsEnabled()) {
     InputMethodManager::Get()->RemoveObserver(this);
   }
+  if (::features::IsShortcutCustomizationEnabled()) {
+    accelerator_configuration_->RemoveObserver(this);
+  }
   aura::Env::GetInstance()->RemovePreTargetHandler(accelerator_history_.get());
 }
 
@@ -364,6 +380,15 @@
   accelerator_manager_->SetUsePositionalLookup(use_positional_lookup);
 }
 
+void AcceleratorControllerImpl::OnAcceleratorsUpdated() {
+  DCHECK(::features::IsShortcutCustomizationEnabled());
+
+  // Accelerators have been updated, unregister all accelerators and re-register
+  // them.
+  UnregisterAll(this);
+  RegisterAccelerators(accelerator_configuration_->GetAllAccelerators());
+}
+
 void AcceleratorControllerImpl::Register(
     const std::vector<ui::Accelerator>& accelerators,
     ui::AcceleratorTarget* target) {
diff --git a/ash/accelerators/accelerator_controller_impl.h b/ash/accelerators/accelerator_controller_impl.h
index 8be9849d..ff1cb6b 100644
--- a/ash/accelerators/accelerator_controller_impl.h
+++ b/ash/accelerators/accelerator_controller_impl.h
@@ -42,7 +42,8 @@
 class ASH_EXPORT AcceleratorControllerImpl
     : public ui::AcceleratorTarget,
       public AcceleratorController,
-      public input_method::InputMethodManager::Observer {
+      public input_method::InputMethodManager::Observer,
+      public AshAcceleratorConfiguration::Observer {
  public:
   // TestApi is used for tests to get internal implementation details.
   class TestApi {
@@ -61,6 +62,9 @@
     // Registers the specified accelerators.
     void RegisterAccelerators(base::span<const AcceleratorData> accelerators);
 
+    // Start observing changes made to the ash accelerator list.
+    void ObserveAcceleratorUpdates();
+
     // Returns whether the action for this accelerator is enabled.
     bool IsActionForAcceleratorEnabled(const ui::Accelerator& accelerator);
 
@@ -111,6 +115,9 @@
                           Profile* profile,
                           bool show_message) override;
 
+  // AshAcceleratorConfiguration::Observer overrides:
+  void OnAcceleratorsUpdated() override;
+
   // Registers global keyboard accelerators for the specified target. If
   // multiple targets are registered for any given accelerator, a target
   // registered later has higher priority.
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc
index a1f9772..adff1c0 100644
--- a/ash/accelerators/accelerator_controller_unittest.cc
+++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -1429,19 +1429,32 @@
 
 TEST_F(AcceleratorControllerTest, ToggleMultitaskMenu) {
   base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      chromeos::wm::features::kWindowLayoutMenu);
-  std::unique_ptr<aura::Window> window = CreateAppWindow();
+  // Accelerators behind a flag should also be accompanied by the
+  // `kShortcutCustomization` to support dynamic accelerator registration.
+  scoped_feature_list.InitWithFeatures(
+      {chromeos::wm::features::kWindowLayoutMenu,
+       ::features::kShortcutCustomization},
+      {});
+  // Enabling `kShortcutCustomization` will start letting
+  // `AcceleratorControllerImpl` to observe changes to the accelerator list.
+  // This includes accelerators added by enabling flags.
+  test_api_->ObserveAcceleratorUpdates();
 
+  // Typically updating flags will restart chrome and re-initialize accelerator
+  // targeting.
+  Shell::Get()->ash_accelerator_configuration()->Initialize();
+
+  std::unique_ptr<aura::Window> window = CreateAppWindow();
+  ui::Accelerator accelerator(ui::VKEY_Z, ui::EF_COMMAND_DOWN);
   // Pressing accelerator once should show the multitask menu.
-  controller_->PerformActionIfEnabled(TOGGLE_MULTITASK_MENU, {});
+  EXPECT_TRUE(ProcessInController(accelerator));
   auto* frame_view = NonClientFrameViewAsh::Get(window.get());
   auto* size_button = static_cast<chromeos::FrameSizeButton*>(
       frame_view->GetHeaderView()->caption_button_container()->size_button());
   ASSERT_TRUE(size_button->IsMultitaskMenuShown());
 
   // Pressing accelerator a second time should close the menu.
-  controller_->PerformActionIfEnabled(TOGGLE_MULTITASK_MENU, {});
+  EXPECT_TRUE(ProcessInController(accelerator));
   ASSERT_FALSE(size_button->IsMultitaskMenuShown());
 }
 
diff --git a/ash/accelerators/ash_accelerator_configuration.cc b/ash/accelerators/ash_accelerator_configuration.cc
index 758f3ca..3f769489 100644
--- a/ash/accelerators/ash_accelerator_configuration.cc
+++ b/ash/accelerators/ash_accelerator_configuration.cc
@@ -172,6 +172,14 @@
                                    std::move(deprecated_accelerators));
 }
 
+void AshAcceleratorConfiguration::AddObserver(Observer* observer) {
+  observer_list_.AddObserver(observer);
+}
+
+void AshAcceleratorConfiguration::RemoveObserver(Observer* observer) {
+  observer_list_.RemoveObserver(observer);
+}
+
 // This function must only be called after Initialize().
 void AshAcceleratorConfiguration::InitializeDeprecatedAccelerators(
     base::span<const DeprecatedAcceleratorData> deprecated_data,
@@ -201,6 +209,7 @@
     accelerators_.push_back(accelerator);
   }
   UpdateAccelerators(id_to_accelerators_);
+  NotfiyAcceleratorsUpdated();
 }
 
 const DeprecatedAcceleratorData*
@@ -213,4 +222,14 @@
   return it->second;
 }
 
+void AshAcceleratorConfiguration::NotfiyAcceleratorsUpdated() {
+  if (!::features::IsShortcutCustomizationEnabled()) {
+    return;
+  }
+
+  for (auto& observer : observer_list_) {
+    observer.OnAcceleratorsUpdated();
+  }
+}
+
 }  // namespace ash
diff --git a/ash/accelerators/ash_accelerator_configuration.h b/ash/accelerators/ash_accelerator_configuration.h
index f093f8ef..ffd66ec 100644
--- a/ash/accelerators/ash_accelerator_configuration.h
+++ b/ash/accelerators/ash_accelerator_configuration.h
@@ -15,6 +15,8 @@
 #include "ash/public/mojom/accelerator_info.mojom.h"
 #include "base/containers/flat_set.h"
 #include "base/containers/span.h"
+#include "base/observer_list.h"
+#include "base/observer_list_types.h"
 #include "mojo/public/cpp/bindings/clone_traits.h"
 #include "ui/base/accelerators/accelerator_map.h"
 
@@ -25,6 +27,15 @@
 // accelerators.
 class ASH_EXPORT AshAcceleratorConfiguration : public AcceleratorConfiguration {
  public:
+  // Observer to notify clients of when accelerators are updated.
+  // Clients can receive a list of accelerators via
+  // `AshAcceleratorConfiguration::GetAllAccelerators()`.
+  class Observer : public base::CheckedObserver {
+   public:
+    ~Observer() override = default;
+    virtual void OnAcceleratorsUpdated() = 0;
+  };
+
   AshAcceleratorConfiguration();
   AshAcceleratorConfiguration(const AshAcceleratorConfiguration&) = delete;
   AshAcceleratorConfiguration& operator=(const AshAcceleratorConfiguration&) =
@@ -60,6 +71,9 @@
       base::span<const DeprecatedAcceleratorData> deprecated_datas,
       base::span<const AcceleratorData> deprecated_accelerators);
 
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+
   AcceleratorAction* FindAcceleratorAction(const ui::Accelerator& accelerator) {
     return accelerator_to_id_.Find(accelerator);
   }
@@ -99,6 +113,8 @@
 
   void AddAccelerators(base::span<const AcceleratorData> accelerators);
 
+  void NotfiyAcceleratorsUpdated();
+
   std::vector<ui::Accelerator> accelerators_;
 
   base::flat_set<ui::Accelerator> deprecated_accelerators_;
@@ -113,6 +129,9 @@
   // A map from accelerators to the AcceleratorAction values, which are used in
   // the implementation.
   AcceleratorActionMap accelerator_to_id_;
+
+  // List of all observer clients.
+  base::ObserverList<Observer> observer_list_;
 };
 
 }  // namespace ash
diff --git a/ash/accelerators/ash_accelerator_configuration_unittest.cc b/ash/accelerators/ash_accelerator_configuration_unittest.cc
index f9a2b96d..99929874 100644
--- a/ash/accelerators/ash_accelerator_configuration_unittest.cc
+++ b/ash/accelerators/ash_accelerator_configuration_unittest.cc
@@ -21,6 +21,28 @@
 
 namespace {
 
+class UpdatedAcceleratorsObserver
+    : public ash::AshAcceleratorConfiguration::Observer {
+ public:
+  UpdatedAcceleratorsObserver() = default;
+  UpdatedAcceleratorsObserver(const UpdatedAcceleratorsObserver&) = delete;
+  UpdatedAcceleratorsObserver& operator=(const UpdatedAcceleratorsObserver&) =
+      delete;
+  ~UpdatedAcceleratorsObserver() override = default;
+
+  // ash::AshAcceleratorConfiguration::Observer:
+  void OnAcceleratorsUpdated() override {
+    ++num_times_accelerator_updated_called_;
+  }
+
+  int num_times_accelerator_updated_called() {
+    return num_times_accelerator_updated_called_;
+  }
+
+ private:
+  int num_times_accelerator_updated_called_ = 0;
+};
+
 bool CompareAccelerators(const ash::AcceleratorData& expected_data,
                          const ui::Accelerator& actual_accelerator) {
   ui::Accelerator expected_accel(expected_data.keycode,
@@ -53,12 +75,19 @@
 class AshAcceleratorConfigurationTest : public testing::Test {
  public:
   AshAcceleratorConfigurationTest() {
+    scoped_feature_list_.InitAndEnableFeature(
+        ::features::kShortcutCustomization);
     config_ = std::make_unique<AshAcceleratorConfiguration>();
+    config_->AddObserver(&observer_);
   }
 
-  ~AshAcceleratorConfigurationTest() override = default;
+  ~AshAcceleratorConfigurationTest() override {
+    config_->RemoveObserver(&observer_);
+  }
 
  protected:
+  base::test::ScopedFeatureList scoped_feature_list_;
+  UpdatedAcceleratorsObserver observer_;
   std::unique_ptr<AshAcceleratorConfiguration> config_;
 };
 
@@ -185,4 +214,37 @@
   }
 }
 
+TEST_F(AshAcceleratorConfigurationTest, VerifyObserversAreNotified) {
+  EXPECT_EQ(0, observer_.num_times_accelerator_updated_called());
+
+  const AcceleratorData test_data[] = {
+      {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN,
+       SWITCH_TO_LAST_USED_IME},
+      {/*trigger_on_press=*/true, ui::VKEY_SPACE,
+       ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME},
+      {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN,
+       CYCLE_FORWARD_MRU},
+      {/*trigger_on_press=*/true, ui::VKEY_TAB,
+       ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU},
+  };
+
+  config_->Initialize(test_data);
+  const std::vector<ui::Accelerator>& accelerators =
+      config_->GetAllAccelerators();
+  ExpectAllAcceleratorsEqual(test_data, accelerators);
+  EXPECT_EQ(1, observer_.num_times_accelerator_updated_called());
+
+  // Now update accelerators with a different set of accelerators.
+  const AcceleratorData test_data_updated[] = {
+      {/*trigger_on_press=*/true, ui::VKEY_J, ui::EF_CONTROL_DOWN,
+       TOGGLE_FULLSCREEN},
+  };
+
+  config_->Initialize(test_data_updated);
+  const std::vector<ui::Accelerator>& accelerators_updated =
+      config_->GetAllAccelerators();
+  ExpectAllAcceleratorsEqual(test_data_updated, accelerators_updated);
+  EXPECT_EQ(2, observer_.num_times_accelerator_updated_called());
+}
+
 }  // namespace ash
diff --git a/ash/components/arc/BUILD.gn b/ash/components/arc/BUILD.gn
index 486f70a..46e7253 100644
--- a/ash/components/arc/BUILD.gn
+++ b/ash/components/arc/BUILD.gn
@@ -452,6 +452,7 @@
     "//base",
     "//base/test:test_support",
     "//chromeos",
+    "//chromeos/ash/components/audio",
     "//chromeos/ash/components/cryptohome",
     "//chromeos/ash/components/dbus/arc",
     "//chromeos/ash/components/dbus/concierge",
diff --git a/ash/components/arc/DEPS b/ash/components/arc/DEPS
index 5270dde..6e6b3f3 100644
--- a/ash/components/arc/DEPS
+++ b/ash/components/arc/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+chromeos/components/payments",
   "+chromeos/version",
   # TODO(b/129295708): Remove after move is complete.
   "+components/arc",
diff --git a/ash/components/arc/audio/arc_audio_bridge_unittest.cc b/ash/components/arc/audio/arc_audio_bridge_unittest.cc
index 99cefcee..3fac14d 100644
--- a/ash/components/arc/audio/arc_audio_bridge_unittest.cc
+++ b/ash/components/arc/audio/arc_audio_bridge_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "ash/components/arc/session/arc_service_manager.h"
 #include "ash/components/arc/test/test_browser_context.h"
+#include "chromeos/ash/components/audio/cras_audio_handler.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -20,7 +21,6 @@
   ~ArcAudioBridgeTest() override = default;
 
   void SetUp() override {
-    ash::CrasAudioHandler::InitializeForTesting();
     bridge_ = ArcAudioBridge::GetForBrowserContextForTesting(&context_);
   }
   void TearDown() override { ash::CrasAudioHandler::Shutdown(); }
@@ -28,6 +28,7 @@
   ArcAudioBridge* bridge() { return bridge_; }
 
  private:
+  ash::ScopedCrasAudioHandlerForTesting cras_audio_handler_;
   content::BrowserTaskEnvironment task_environment_;
   ArcServiceManager arc_service_manager_;
   TestBrowserContext context_;
diff --git a/ash/components/arc/mojom/BUILD.gn b/ash/components/arc/mojom/BUILD.gn
index 2f0ce0c..544b137 100644
--- a/ash/components/arc/mojom/BUILD.gn
+++ b/ash/components/arc/mojom/BUILD.gn
@@ -76,6 +76,7 @@
     "//ash/components/arc/mojom:media",
     "//ash/components/arc/mojom:notifications",
     "//ash/components/arc/mojom:oemcrypto",
+    "//chromeos/components/payments/mojom",
     "//chromeos/components/sensors/mojom:mojom",
     "//components/digital_goods/mojom",
     "//components/payments/mojom:mojom",
diff --git a/ash/components/arc/mojom/payment_app.mojom b/ash/components/arc/mojom/payment_app.mojom
index 2ce4e79..94c6925 100644
--- a/ash/components/arc/mojom/payment_app.mojom
+++ b/ash/components/arc/mojom/payment_app.mojom
@@ -6,119 +6,7 @@
 
 module arc.mojom;
 
-// After the browser calls IsPaymentImplemented(), ARC sends back this result
-// if there are no errors.
-struct IsPaymentImplementedValidResult {
-  // The list of activities with intent filter for
-  // org.chromium.intent.action.PAY action and "https://play.google.com/billing"
-  // in either "org.chromium.default_payment_method_name" or
-  // "org.chromium.payment_method_names" metadata. Other payment methods are
-  // ignored for now.
-  // Example activity name: "com.example.app.PaymentActivity".
-  array<string> activity_names;
-
-  // The list of services with intent filter for
-  // org.chromium.intent.action.IS_READY_TO_PAY. Example service name:
-  // "com.example.app.IsReadyToPayService".
-  array<string> service_names;
-};
-
-// After the browser calls IsPaymentImplemented(), ARC sends back this result.
-union IsPaymentImplementedResult {
-  IsPaymentImplementedValidResult valid;
-  string error;
-};
-
-// The common payment parameters for the browser to pass to ARC in both
-// PaymentAppInstance.IsReadyToPayService() and
-// PaymentAppInstance.InvokePaymentApp() Mojo methods. ARC will forward this
-// data to either WebPaymentIntentHelper.createIsReadyToPayIntent() or
-// WebPaymentIntentHelper.createPayIntent(), depending on which method of
-// PaymentApp Mojo IPC service was invoked.
-//
-// WebPaymentIntentHelper in ARC should be used only with the
-// "https://play.google.com/billing" payment method identifier at this time.
-struct PaymentParameters {
-  // The TWA package name, e.g., "com.example.app". This is the "String
-  // packageName" parameter to createIsReadyToPayIntent() and createPayIntent()
-  // methods.
-  string package_name;
-
-  // The name of the IS_READY_TO_PAY service to query or PAY activity to invoke,
-  // depending on whether this struct is passed into IsReadyToPay() or
-  // InvokePaymentApp() method. For example,
-  // "com.example.app.IsReadyToPayService" or "com.example.app.PaymentActivity".
-  // This is the "String serviceName" parameter to createIsReadyToPayIntent() or
-  // "String activityName" parameter to createPayIntent().
-  string activity_or_service_name;
-
-  // The JSON serialization of the JavaScript object "data" in the
-  // PaymentRequest API. For example:
-  //
-  //  {"productId": "test_product_id"}
-  //
-  // This string is serialized in Blink and is parsed in the TWA. The browser
-  // does not parse this string. This string goes into the value of the
-  // "methodDataMap" parameter of createIsReadyToPayIntent() and
-  // createPayIntent() methods, i.e.:
-  //
-  //  methodDataMap.put("https://play.google.com/billing",
-  //                    new PaymentMethodData("https://play.google.com/billing",
-  //                                          stringified_method_data));
-  string stringified_method_data;
-
-  // (Host, optional port) tuple that cannot be an opaque origin. For example:
-  // "shop.com". This is the "String schemelessOrigin" parameter to
-  // createIsReadyToPayIntent() and createPayIntent() methods.
-  string top_level_origin;
-
-  // (Host, optional port) tuple that cannot be an opaque origin. For
-  // example: "payment-service-provider.com". This is the "String
-  // schemelessIframeOrigin" parameter to createIsReadyToPayIntent() and
-  // createPayIntent() methods.
-  string payment_request_origin;
-
-  // The free-form identifier for this pending transaction as set either by the
-  // merchant website in PaymentRequest() constructor in JavaScript, or (more
-  // commonly) a browser-generated GUID string. This is the "String id"
-  // parameter to createPayIntent() method. The createIsReadyToPayIntent() does
-  // not currently need this parameter.
-  [MinVersion=2]
-  string? payment_request_id;
-
-  // Opaque, browser-generated identifier for this payment request. Used to
-  // identify a particular request across calls.
-  [MinVersion=3]
-  string? request_token;
-};
-
-// After the browser calls IsReadyToPay(), ARC sends back this result.
-union IsReadyToPayResult {
-  bool response;
-  string error;
-};
-
-// After the browser calls InvokePaymentApp(), ARC sends back this result, if
-// there are no errors.
-struct InvokePaymentAppValidResult {
-  // Whether the intent return status is Activity.RESULT_OK.
-  bool is_activity_result_ok;
-
-  // The JSON serialization of a JavaScript object that's the response to
-  // PaymentRequest API. For example:
-  //
-  //  {"receiptIdentifier": "test_receipt_identifier"}
-  //
-  // This string is serialized in TWA and is parsed in Blink. The browser does
-  // not parse this string.
-  string stringified_details;
-};
-
-// After the browser calls InvokePaymentApp(), ARC sends back this result.
-union InvokePaymentAppResult {
-  InvokePaymentAppValidResult valid;
-  string error;
-};
+import "chromeos/components/payments/mojom/payment_app_types.mojom";
 
 // The service that runs in ARC and allows the browser to invoke the TWA payment
 // app that is installed in ARC, if it implements payment intents as described
@@ -149,15 +37,15 @@
   // services, because this method may be invoked when off the record, e.g.,
   // incognito mode or guest mode.
   IsPaymentImplemented@0(string package_name)
-      => (IsPaymentImplementedResult response);
+      => (chromeos.payments.mojom.IsPaymentImplementedResult response);
 
   // Forwards the request to IsReadyToPayServiceHelper.query(), which queries
   // the payment app. The payment app should return true if payments can be
   // made. This should not be invoked when off the record, e.g., incognito mode
   // or guest mode.
   [MinVersion=1]
-  IsReadyToPay@1(PaymentParameters parameters)
-      => (IsReadyToPayResult response);
+  IsReadyToPay@1(chromeos.payments.mojom.PaymentParameters parameters)
+      => (chromeos.payments.mojom.IsReadyToPayResult response);
 
   // Forwards the request to WebPaymentIntentHelper.createPayIntent() and fires
   // the resulting intent. This invokes the payment flow.
@@ -168,8 +56,8 @@
   // The total amount for createPayIntent() should always be "0" with currency
   // "ZZZ".
   [MinVersion=2]
-  InvokePaymentApp@2(PaymentParameters parameters)
-      => (InvokePaymentAppResult response);
+  InvokePaymentApp@2(chromeos.payments.mojom.PaymentParameters parameters)
+      => (chromeos.payments.mojom.InvokePaymentAppResult response);
 
   // Requests to abort a previous payment flow (identified by |request_token|)
   // which was opened with InvokePaymentApp().
diff --git a/ash/components/arc/pay/arc_payment_app_bridge.cc b/ash/components/arc/pay/arc_payment_app_bridge.cc
index e4d38839..0e0a0a4 100644
--- a/ash/components/arc/pay/arc_payment_app_bridge.cc
+++ b/ash/components/arc/pay/arc_payment_app_bridge.cc
@@ -65,21 +65,24 @@
   mojom::PaymentAppInstance* payment_app = ARC_GET_INSTANCE_FOR_METHOD(
       arc_bridge_service_->payment_app(), IsPaymentImplemented);
   if (!payment_app) {
-    std::move(callback).Run(mojom::IsPaymentImplementedResult::NewError(
-        kUnableToConnectErrorMessage));
+    std::move(callback).Run(
+        chromeos::payments::mojom::IsPaymentImplementedResult::NewError(
+            kUnableToConnectErrorMessage));
     return;
   }
 
   payment_app->IsPaymentImplemented(package_name, std::move(callback));
 }
 
-void ArcPaymentAppBridge::IsReadyToPay(mojom::PaymentParametersPtr parameters,
-                                       IsReadyToPayCallback callback) {
+void ArcPaymentAppBridge::IsReadyToPay(
+    chromeos::payments::mojom::PaymentParametersPtr parameters,
+    IsReadyToPayCallback callback) {
   mojom::PaymentAppInstance* payment_app = ARC_GET_INSTANCE_FOR_METHOD(
       arc_bridge_service_->payment_app(), IsReadyToPay);
   if (!payment_app) {
     std::move(callback).Run(
-        mojom::IsReadyToPayResult::NewError(kUnableToConnectErrorMessage));
+        chromeos::payments::mojom::IsReadyToPayResult::NewError(
+            kUnableToConnectErrorMessage));
     return;
   }
 
@@ -87,13 +90,14 @@
 }
 
 void ArcPaymentAppBridge::InvokePaymentApp(
-    mojom::PaymentParametersPtr parameters,
+    chromeos::payments::mojom::PaymentParametersPtr parameters,
     InvokePaymentAppCallback callback) {
   mojom::PaymentAppInstance* payment_app = ARC_GET_INSTANCE_FOR_METHOD(
       arc_bridge_service_->payment_app(), InvokePaymentApp);
   if (!payment_app) {
     std::move(callback).Run(
-        mojom::InvokePaymentAppResult::NewError(kUnableToConnectErrorMessage));
+        chromeos::payments::mojom::InvokePaymentAppResult::NewError(
+            kUnableToConnectErrorMessage));
     return;
   }
 
diff --git a/ash/components/arc/pay/arc_payment_app_bridge.h b/ash/components/arc/pay/arc_payment_app_bridge.h
index c4ed4f4..0dfb5d52 100644
--- a/ash/components/arc/pay/arc_payment_app_bridge.h
+++ b/ash/components/arc/pay/arc_payment_app_bridge.h
@@ -9,6 +9,7 @@
 
 #include "ash/components/arc/mojom/payment_app.mojom.h"
 #include "base/functional/callback_forward.h"
+#include "chromeos/components/payments/mojom/payment_app_types.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
@@ -22,12 +23,12 @@
 // Invokes the TWA payment app.
 class ArcPaymentAppBridge : public KeyedService {
  public:
-  using IsPaymentImplementedCallback =
-      base::OnceCallback<void(mojom::IsPaymentImplementedResultPtr)>;
-  using IsReadyToPayCallback =
-      base::OnceCallback<void(mojom::IsReadyToPayResultPtr)>;
-  using InvokePaymentAppCallback =
-      base::OnceCallback<void(mojom::InvokePaymentAppResultPtr)>;
+  using IsPaymentImplementedCallback = base::OnceCallback<void(
+      chromeos::payments::mojom::IsPaymentImplementedResultPtr)>;
+  using IsReadyToPayCallback = base::OnceCallback<void(
+      chromeos::payments::mojom::IsReadyToPayResultPtr)>;
+  using InvokePaymentAppCallback = base::OnceCallback<void(
+      chromeos::payments::mojom::InvokePaymentAppResultPtr)>;
   using AbortPaymentAppCallback = base::OnceCallback<void(bool)>;
 
   // Returns the instance owned by the given BrowserContext, or nullptr if the
@@ -54,12 +55,13 @@
 
   // Queries the TWA payment app whether it is able to perform a payment. Should
   // not be invoked when off the record, e.g., incognito mode or guest mode.
-  void IsReadyToPay(mojom::PaymentParametersPtr parameters,
+  void IsReadyToPay(chromeos::payments::mojom::PaymentParametersPtr parameters,
                     IsReadyToPayCallback callback);
 
   // Invokes the TWA payment app flow.
-  void InvokePaymentApp(mojom::PaymentParametersPtr parameters,
-                        InvokePaymentAppCallback callback);
+  void InvokePaymentApp(
+      chromeos::payments::mojom::PaymentParametersPtr parameters,
+      InvokePaymentAppCallback callback);
 
   // Aborts an existing TWA payment app flow.
   void AbortPaymentApp(const std::string& request_token,
diff --git a/ash/components/arc/pay/arc_payment_app_bridge_unittest.cc b/ash/components/arc/pay/arc_payment_app_bridge_unittest.cc
index 99821bc..8050e946 100644
--- a/ash/components/arc/pay/arc_payment_app_bridge_unittest.cc
+++ b/ash/components/arc/pay/arc_payment_app_bridge_unittest.cc
@@ -10,6 +10,7 @@
 #include "ash/components/arc/session/arc_service_manager.h"
 #include "ash/components/arc/test/arc_payment_app_bridge_test_support.h"
 #include "ash/components/arc/test/test_browser_context.h"
+#include "chromeos/components/payments/mojom/payment_app_types.mojom.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -28,24 +29,26 @@
       delete;
 
   void OnPaymentImplementedResponse(
-      mojom::IsPaymentImplementedResultPtr response) {
+      chromeos::payments::mojom::IsPaymentImplementedResultPtr response) {
     is_implemented_ = std::move(response);
   }
 
-  void OnIsReadyToPayResponse(mojom::IsReadyToPayResultPtr response) {
+  void OnIsReadyToPayResponse(
+      chromeos::payments::mojom::IsReadyToPayResultPtr response) {
     is_ready_to_pay_ = std::move(response);
   }
 
-  void OnInvokePaymentAppResponse(mojom::InvokePaymentAppResultPtr response) {
+  void OnInvokePaymentAppResponse(
+      chromeos::payments::mojom::InvokePaymentAppResultPtr response) {
     invoke_app_ = std::move(response);
   }
 
   void OnAbortPaymentAppResponse(bool response) { abort_app_ = response; }
 
   ArcPaymentAppBridgeTestSupport support_;
-  mojom::IsPaymentImplementedResultPtr is_implemented_;
-  mojom::IsReadyToPayResultPtr is_ready_to_pay_;
-  mojom::InvokePaymentAppResultPtr invoke_app_;
+  chromeos::payments::mojom::IsPaymentImplementedResultPtr is_implemented_;
+  chromeos::payments::mojom::IsReadyToPayResultPtr is_ready_to_pay_;
+  chromeos::payments::mojom::InvokePaymentAppResultPtr invoke_app_;
   absl::optional<bool> abort_app_;
 };
 
@@ -73,15 +76,17 @@
 
   EXPECT_CALL(*support_.instance(),
               IsPaymentImplemented(testing::_, testing::_))
-      .WillOnce(testing::Invoke(
-          [](const std::string& package_name,
-             ArcPaymentAppBridge::IsPaymentImplementedCallback callback) {
-            auto valid = mojom::IsPaymentImplementedValidResult::New();
-            valid->activity_names.push_back("com.example.Activity");
-            valid->service_names.push_back("com.example.Service");
-            std::move(callback).Run(
-                mojom::IsPaymentImplementedResult::NewValid(std::move(valid)));
-          }));
+      .WillOnce(testing::Invoke([](const std::string& package_name,
+                                   ArcPaymentAppBridge::
+                                       IsPaymentImplementedCallback callback) {
+        auto valid =
+            chromeos::payments::mojom::IsPaymentImplementedValidResult::New();
+        valid->activity_names.push_back("com.example.Activity");
+        valid->service_names.push_back("com.example.Service");
+        std::move(callback).Run(
+            chromeos::payments::mojom::IsPaymentImplementedResult::NewValid(
+                std::move(valid)));
+      }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->IsPaymentImplemented(
@@ -107,8 +112,10 @@
       .WillOnce(testing::Invoke(
           [](const std::string& package_name,
              ArcPaymentAppBridge::IsPaymentImplementedCallback callback) {
-            std::move(callback).Run(mojom::IsPaymentImplementedResult::NewValid(
-                mojom::IsPaymentImplementedValidResult::New()));
+            std::move(callback).Run(
+                chromeos::payments::mojom::IsPaymentImplementedResult::NewValid(
+                    chromeos::payments::mojom::IsPaymentImplementedValidResult::
+                        New()));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
@@ -134,7 +141,8 @@
           [](const std::string& package_name,
              ArcPaymentAppBridge::IsPaymentImplementedCallback callback) {
             std::move(callback).Run(
-                mojom::IsPaymentImplementedResult::NewError("Error message."));
+                chromeos::payments::mojom::IsPaymentImplementedResult::NewError(
+                    "Error message."));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
@@ -157,7 +165,7 @@
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->IsReadyToPay(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnIsReadyToPayResponse,
                          base::Unretained(this)));
 
@@ -172,15 +180,16 @@
 
   EXPECT_CALL(*support_.instance(), IsReadyToPay(testing::_, testing::_))
       .WillOnce(testing::Invoke(
-          [](mojom::PaymentParametersPtr parameters,
+          [](chromeos::payments::mojom::PaymentParametersPtr parameters,
              ArcPaymentAppBridge::IsReadyToPayCallback callback) {
             std::move(callback).Run(
-                mojom::IsReadyToPayResult::NewResponse(true));
+                chromeos::payments::mojom::IsReadyToPayResult::NewResponse(
+                    true));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->IsReadyToPay(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnIsReadyToPayResponse,
                          base::Unretained(this)));
 
@@ -195,15 +204,16 @@
 
   EXPECT_CALL(*support_.instance(), IsReadyToPay(testing::_, testing::_))
       .WillOnce(testing::Invoke(
-          [](mojom::PaymentParametersPtr parameters,
+          [](chromeos::payments::mojom::PaymentParametersPtr parameters,
              ArcPaymentAppBridge::IsReadyToPayCallback callback) {
             std::move(callback).Run(
-                mojom::IsReadyToPayResult::NewResponse(false));
+                chromeos::payments::mojom::IsReadyToPayResult::NewResponse(
+                    false));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->IsReadyToPay(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnIsReadyToPayResponse,
                          base::Unretained(this)));
 
@@ -221,7 +231,7 @@
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->InvokePaymentApp(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnInvokePaymentAppResponse,
                          base::Unretained(this)));
 
@@ -236,18 +246,20 @@
 
   EXPECT_CALL(*support_.instance(), InvokePaymentApp(testing::_, testing::_))
       .WillOnce(testing::Invoke(
-          [](mojom::PaymentParametersPtr parameters,
+          [](chromeos::payments::mojom::PaymentParametersPtr parameters,
              ArcPaymentAppBridge::InvokePaymentAppCallback callback) {
-            auto valid = mojom::InvokePaymentAppValidResult::New();
+            auto valid =
+                chromeos::payments::mojom::InvokePaymentAppValidResult::New();
             valid->is_activity_result_ok = true;
             valid->stringified_details = "{}";
             std::move(callback).Run(
-                mojom::InvokePaymentAppResult::NewValid(std::move(valid)));
+                chromeos::payments::mojom::InvokePaymentAppResult::NewValid(
+                    std::move(valid)));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->InvokePaymentApp(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnInvokePaymentAppResponse,
                          base::Unretained(this)));
 
@@ -264,18 +276,20 @@
 
   EXPECT_CALL(*support_.instance(), InvokePaymentApp(testing::_, testing::_))
       .WillOnce(testing::Invoke(
-          [](mojom::PaymentParametersPtr parameters,
+          [](chromeos::payments::mojom::PaymentParametersPtr parameters,
              ArcPaymentAppBridge::InvokePaymentAppCallback callback) {
-            auto valid = mojom::InvokePaymentAppValidResult::New();
+            auto valid =
+                chromeos::payments::mojom::InvokePaymentAppValidResult::New();
             // User cancelled payment.
             valid->is_activity_result_ok = false;
             std::move(callback).Run(
-                mojom::InvokePaymentAppResult::NewValid(std::move(valid)));
+                chromeos::payments::mojom::InvokePaymentAppResult::NewValid(
+                    std::move(valid)));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->InvokePaymentApp(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnInvokePaymentAppResponse,
                          base::Unretained(this)));
 
@@ -291,15 +305,16 @@
 
   EXPECT_CALL(*support_.instance(), InvokePaymentApp(testing::_, testing::_))
       .WillOnce(testing::Invoke(
-          [](mojom::PaymentParametersPtr parameters,
+          [](chromeos::payments::mojom::PaymentParametersPtr parameters,
              ArcPaymentAppBridge::InvokePaymentAppCallback callback) {
             std::move(callback).Run(
-                mojom::InvokePaymentAppResult::NewError("Error message."));
+                chromeos::payments::mojom::InvokePaymentAppResult::NewError(
+                    "Error message."));
           }));
 
   ArcPaymentAppBridge::GetForBrowserContextForTesting(support_.context())
       ->InvokePaymentApp(
-          mojom::PaymentParameters::New(),
+          chromeos::payments::mojom::PaymentParameters::New(),
           base::BindOnce(&ArcPaymentAppBridgeTest::OnInvokePaymentAppResponse,
                          base::Unretained(this)));
 
diff --git a/ash/components/arc/test/arc_payment_app_bridge_test_support.h b/ash/components/arc/test/arc_payment_app_bridge_test_support.h
index 964e25c..d18c61e 100644
--- a/ash/components/arc/test/arc_payment_app_bridge_test_support.h
+++ b/ash/components/arc/test/arc_payment_app_bridge_test_support.h
@@ -12,6 +12,7 @@
 #include "ash/components/arc/pay/arc_payment_app_bridge.h"
 #include "ash/components/arc/session/arc_service_manager.h"
 #include "ash/components/arc/test/test_browser_context.h"
+#include "chromeos/components/payments/mojom/payment_app_types.mojom.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
@@ -39,10 +40,10 @@
         void(const std::string& package_name,
              ArcPaymentAppBridge::IsPaymentImplementedCallback callback));
     MOCK_METHOD2(IsReadyToPay,
-                 void(mojom::PaymentParametersPtr,
+                 void(chromeos::payments::mojom::PaymentParametersPtr,
                       ArcPaymentAppBridge::IsReadyToPayCallback));
     MOCK_METHOD2(InvokePaymentApp,
-                 void(mojom::PaymentParametersPtr,
+                 void(chromeos::payments::mojom::PaymentParametersPtr,
                       ArcPaymentAppBridge::InvokePaymentAppCallback));
     MOCK_METHOD2(AbortPaymentApp,
                  void(const std::string&,
diff --git a/ash/frame/non_client_frame_view_ash.cc b/ash/frame/non_client_frame_view_ash.cc
index 8b399758..e5d9f09 100644
--- a/ash/frame/non_client_frame_view_ash.cc
+++ b/ash/frame/non_client_frame_view_ash.cc
@@ -205,10 +205,6 @@
   header_view_->UpdateCaptionButtons();
 }
 
-chromeos::HeaderView* NonClientFrameViewAsh::GetHeaderView() {
-  return header_view_;
-}
-
 gfx::Rect NonClientFrameViewAsh::GetClientBoundsForWindowBounds(
     const gfx::Rect& window_bounds) const {
   gfx::Rect client_bounds(window_bounds);
@@ -309,11 +305,6 @@
   return header_view_->caption_button_container();
 }
 
-void NonClientFrameViewAsh::PaintAsActiveChanged() {
-  header_view_->GetFrameHeader()->SetPaintAsActive(ShouldPaintAsActive());
-  frame_->non_client_view()->Layout();
-}
-
 void NonClientFrameViewAsh::UpdateDefaultFrameColors() {
   aura::Window* frame_window = frame_->GetNativeWindow();
   if (!frame_window->GetProperty(kTrackDefaultFrameColors))
diff --git a/ash/frame/non_client_frame_view_ash.h b/ash/frame/non_client_frame_view_ash.h
index 1b2427f..9b2adbe 100644
--- a/ash/frame/non_client_frame_view_ash.h
+++ b/ash/frame/non_client_frame_view_ash.h
@@ -71,9 +71,6 @@
   // will have some transparency added when the frame is drawn.
   void SetFrameColors(SkColor active_frame_color, SkColor inactive_frame_color);
 
-  // Get the view of the header.
-  chromeos::HeaderView* GetHeaderView();
-
   // Calculate the client bounds for given window bounds.
   gfx::Rect GetClientBoundsForWindowBounds(
       const gfx::Rect& window_bounds) const;
@@ -123,9 +120,6 @@
   chromeos::FrameCaptionButtonContainerView*
   GetFrameCaptionButtonContainerViewForTest();
 
-  // Called when |frame_|'s "paint as active" state has changed.
-  void PaintAsActiveChanged();
-
   // Updates the windows default frame colors if necessary.
   void UpdateDefaultFrameColors() override;
 
@@ -136,11 +130,6 @@
 
   std::unique_ptr<FrameContextMenuController> frame_context_menu_controller_;
 
-  base::CallbackListSubscription paint_as_active_subscription_ =
-      frame_->RegisterPaintAsActiveChangedCallback(
-          base::BindRepeating(&NonClientFrameViewAsh::PaintAsActiveChanged,
-                              base::Unretained(this)));
-
   base::RepeatingCallback<void()> toggle_resize_lock_menu_callback_;
 
   base::WeakPtrFactory<NonClientFrameViewAsh> weak_factory_{this};
diff --git a/ash/system/message_center/ash_notification_view_pixeltest.cc b/ash/system/message_center/ash_notification_view_pixeltest.cc
index 334d7bc..b398be9 100644
--- a/ash/system/message_center/ash_notification_view_pixeltest.cc
+++ b/ash/system/message_center/ash_notification_view_pixeltest.cc
@@ -2,13 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ash/capture_mode/capture_mode_controller.h"
+#include "ash/capture_mode/capture_mode_test_util.h"
+#include "ash/capture_mode/capture_mode_util.h"
+#include "ash/system/message_center/message_popup_animation_waiter.h"
 #include "ash/system/notification_center/notification_center_test_api.h"
+#include "ash/system/unified/unified_system_tray.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/ash_test_util.h"
 #include "ash/test/pixel/ash_pixel_differ.h"
 #include "ash/test/pixel/ash_pixel_test_init_params.h"
 #include "base/strings/utf_string_conversions.h"
 #include "ui/base/models/image_model.h"
+#include "ui/message_center/views/message_popup_view.h"
 #include "ui/message_center/views/message_view.h"
 
 namespace ash {
@@ -30,11 +36,7 @@
 }  // namespace
 
 // Pixel tests for Chrome OS Notification views.
-class AshNotificationViewTitlePixelTest
-    : public AshTestBase,
-      public testing::WithParamInterface<
-          std::pair<const char* /*notification title string*/,
-                    const char* /*screenshot name*/>> {
+class AshNotificationViewPixelTestBase : public AshTestBase {
  public:
   // AshTestBase:
   absl::optional<pixel_test::InitParams> CreatePixelTestInitParams()
@@ -58,6 +60,12 @@
   std::unique_ptr<NotificationCenterTestApi> test_api_;
 };
 
+class AshNotificationViewTitlePixelTest
+    : public AshNotificationViewPixelTestBase,
+      public testing::WithParamInterface<
+          std::pair<const char* /*notification title string*/,
+                    const char* /*screenshot name*/>> {};
+
 INSTANTIATE_TEST_SUITE_P(
     TitleTest,
     AshNotificationViewTitlePixelTest,
@@ -93,4 +101,52 @@
       screenshot, /*revision_number=*/1, notification_view));
 }
 
+class ScreenCaptureNotificationPixelTest
+    : public AshNotificationViewPixelTestBase {
+ public:
+  // AshNotificationViewPixelTestBase:
+  void SetUp() override {
+    AshNotificationViewPixelTestBase::SetUp();
+
+    // Create windows so that the screenshot has more contents.
+    window1_ = CreateAppWindow(/*bounds_in_screen=*/gfx::Rect(200, 200));
+    window2_ =
+        CreateAppWindow(/*bounds_in_screen=*/gfx::Rect(220, 220, 100, 100));
+    DecorateWindow(window1_.get(), u"Window1", SK_ColorDKGRAY);
+    DecorateWindow(window2_.get(), u"Window2", SK_ColorBLUE);
+  }
+
+  void TearDown() override {
+    window2_.reset();
+    window1_.reset();
+    AshNotificationViewPixelTestBase::TearDown();
+  }
+
+ private:
+  std::unique_ptr<aura::Window> window1_;
+  std::unique_ptr<aura::Window> window2_;
+};
+
+// Verifies the notification popup of a full screenshot.
+TEST_F(ScreenCaptureNotificationPixelTest, VerifyPopup) {
+  // Take a full screenshot then wait for the file path to the saved image.
+  ash::CaptureModeController* controller = StartCaptureSession(
+      CaptureModeSource::kFullscreen, CaptureModeType::kImage);
+  controller->PerformCapture();
+  const base::FilePath image_file_path = WaitForCaptureFileToBeSaved();
+
+  // Wait until the notification popup shows.
+  MessagePopupAnimationWaiter(
+      GetPrimaryUnifiedSystemTray()->GetMessagePopupCollection())
+      .Wait();
+
+  // Get the notification view.
+  const std::string notification_id =
+      capture_mode_util::GetScreenCaptureNotificationIdForPath(image_file_path);
+
+  EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen(
+      "screen_capture_popup_notification", /*revision_number=*/0,
+      test_api()->GetPopupViewForId(notification_id)));
+}
+
 }  // namespace ash
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc b/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
index b10cb66..63753a2 100644
--- a/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
@@ -55,17 +55,28 @@
       apps_accessing_microphone_.insert(apps_accessing_microphone_.begin(),
                                         app_name.value());
     }
+    ++active_input_stream_count_;
+    SetActiveInputStreamsCount();
   }
 
   void CloseAppAccessingMicrophone(const std::u16string& app_name) {
     auto it = std::find(apps_accessing_microphone_.begin(),
                         apps_accessing_microphone_.end(), app_name);
-    if (it != apps_accessing_microphone_.end()) {
-      apps_accessing_microphone_.erase(it);
-    }
+    ASSERT_NE(apps_accessing_microphone_.end(), it);
+    apps_accessing_microphone_.erase(it);
+
+    ASSERT_GT(active_input_stream_count_, 0);
+    --active_input_stream_count_;
+    SetActiveInputStreamsCount();
   }
 
  private:
+  void SetActiveInputStreamsCount() {
+    FakeCrasAudioClient::Get()->SetActiveInputStreamsWithPermission(
+        {{"CRAS_CLIENT_TYPE_CHROME", active_input_stream_count_}});
+  }
+
+  int active_input_stream_count_ = 0;
   std::vector<std::u16string> apps_accessing_microphone_;
 };
 
@@ -165,11 +176,6 @@
         false, CrasAudioHandler::InputMuteChangeMethod::kOther);
   }
 
-  void SetNumberOfActiveInputStreams(int number_of_active_input_streams) {
-    FakeCrasAudioClient::Get()->SetActiveInputStreamsWithPermission(
-        {{"CRAS_CLIENT_TYPE_CHROME", number_of_active_input_streams}});
-  }
-
   void WaitUntilNotificationRemoved() {
     task_environment()->FastForwardBy(PrivacyHubNotification::kMinShowTime);
   }
@@ -253,24 +259,6 @@
   EXPECT_FALSE(GetNotification());
 }
 
-TEST_F(PrivacyHubMicrophoneControllerTest, LaunchAppNotUsingMicrophone) {
-  // No notification initially.
-  EXPECT_FALSE(GetNotification());
-
-  // No notification when we unmute.
-  UnMuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-
-  // Launch an app that's not using the mic, should be no notification.
-  LaunchApp(absl::nullopt);
-  SetNumberOfActiveInputStreams(0);
-  EXPECT_FALSE(GetNotification());
-
-  // Mute the mic, still no notification because no app is using the mic.
-  MuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-}
-
 TEST_F(PrivacyHubMicrophoneControllerTest, LaunchAppUsingMicrophone) {
   // No notification initially.
   EXPECT_FALSE(GetNotification());
@@ -286,7 +274,6 @@
   // Launch an app that's using the mic. The microphone mute notification should
   // show as a popup.
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
   // Notification should not be pinned.
@@ -306,7 +293,6 @@
   // Launch an app that's using the mic, no notification because the microphone
   // is not muted.
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
   EXPECT_FALSE(GetNotification());
 
   // Mute the mic, a notification should be shown and also popup.
@@ -320,7 +306,6 @@
   // Launch an app while microphone is muted.
   MuteMicrophone();
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   ASSERT_TRUE(GetNotification());
   ASSERT_TRUE(GetPopupNotification());
@@ -331,7 +316,6 @@
 
   // Add an app, and verify the notification popup gets shown.
   LaunchApp(u"rose");
-  SetNumberOfActiveInputStreams(2);
 
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
@@ -342,7 +326,6 @@
   MuteMicrophone();
   LaunchApp(u"junior");
   LaunchApp(u"rose");
-  SetNumberOfActiveInputStreams(2);
 
   ASSERT_TRUE(GetNotification());
   ASSERT_TRUE(GetPopupNotification());
@@ -351,16 +334,15 @@
   MarkPopupAsShown();
   ASSERT_FALSE(GetPopupNotification());
 
-  // Remove an active stream, and verify that the notification popup is not
+  // Close an active app, and verify that the notification popup is not
   // reshown.
-  SetNumberOfActiveInputStreams(1);
+  CloseApp(u"rose");
 
   EXPECT_TRUE(GetNotification());
   EXPECT_FALSE(GetPopupNotification());
 
-  // The notification should be removed if all input streams are removed.
-  LaunchApp(absl::nullopt);
-  SetNumberOfActiveInputStreams(0);
+  // The notification should be removed if all apps are closed.
+  CloseApp(u"junior");
   WaitUntilNotificationRemoved();
 
   EXPECT_FALSE(GetNotification());
@@ -369,7 +351,6 @@
 TEST_F(PrivacyHubMicrophoneControllerTest, SwMuteNotificationActionButton) {
   MuteMicrophone();
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   // The mute notification should have an action button.
   message_center::Notification* notification = GetNotification();
@@ -396,7 +377,6 @@
 TEST_F(PrivacyHubMicrophoneControllerTest, SwMuteNotificationActionBody) {
   MuteMicrophone();
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   // The mute notification should have an action button.
   message_center::Notification* notification = GetNotification();
@@ -425,7 +405,6 @@
   SetMicrophoneMuteSwitchState(/*muted=*/true);
 
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   // The mute notification should have a "Learn more" button.
   message_center::Notification* notification = GetNotification();
@@ -447,7 +426,6 @@
 TEST_F(PrivacyHubMicrophoneControllerTest, HwMuteNotificationActionBody) {
   SetMicrophoneMuteSwitchState(/*muted=*/true);
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   message_center::Notification* notification = GetNotification();
   ASSERT_TRUE(notification);
@@ -465,7 +443,6 @@
   // Mute microphone, and activate an audio input stream.
   MuteMicrophone();
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   // The mute notification should have an action button.
   message_center::Notification* notification = GetNotification();
@@ -496,7 +473,6 @@
   MuteMicrophone();
 
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
 
   // Verify the notification popup is shown.
   ASSERT_TRUE(GetNotification());
@@ -518,12 +494,11 @@
        RemovingAllInputStreamsWhileHwSwitchToggled) {
   SetMicrophoneMuteSwitchState(/*muted=*/true);
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(2);
 
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
 
-  SetNumberOfActiveInputStreams(0);
+  CloseApp(u"junior");
   WaitUntilNotificationRemoved();
 
   EXPECT_FALSE(GetNotification());
@@ -533,7 +508,6 @@
        ToggleMicrophoneMuteSwitchWhileInputStreamActive) {
   // Launch an app using microphone, and toggle mute switch.
   LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
   SetMicrophoneMuteSwitchState(/*muted=*/true);
 
   // Notification should be shown and also popup.
@@ -542,7 +516,6 @@
 
   // Add another audio input stream, and verify the notification popup shows.
   LaunchApp(u"junior1");
-  SetNumberOfActiveInputStreams(2);
 
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
@@ -550,7 +523,7 @@
   // Mark notification as read, and then remove an audio input stream.
   MarkPopupAsShown();
   ASSERT_FALSE(GetPopupNotification());
-  SetNumberOfActiveInputStreams(1);
+  CloseApp(u"junior1");
 
   // Verify that notification popup is not reshown.
   EXPECT_TRUE(GetNotification());
@@ -558,7 +531,6 @@
 
   // Adding another stream shows a popup again.
   LaunchApp(u"rose");
-  SetNumberOfActiveInputStreams(2);
 
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
@@ -572,14 +544,9 @@
   MuteMicrophone();
   EXPECT_FALSE(GetNotification());
 
-  // Launch an app that's not using the mic, should be no notification.
-  LaunchApp(absl::nullopt);
-  EXPECT_FALSE(GetNotification());
-
   // Launch an app that's using the mic, but the name of the app can not be
   // determined.
   LaunchApp(absl::nullopt);
-  SetNumberOfActiveInputStreams(1);
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
   EXPECT_EQ(l10n_util::GetStringUTF16(
@@ -592,7 +559,6 @@
 
   // Launch an app that's using the mic, the name of the app can be determined.
   LaunchApp(u"app1");
-  SetNumberOfActiveInputStreams(2);
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
   // The notification body should contain name of the app.
@@ -604,7 +570,6 @@
   // Launch another app that's using the mic, the name of the app can be
   // determined.
   LaunchApp(u"app2");
-  SetNumberOfActiveInputStreams(3);
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
   // The notification body should contain the two available app names in the
@@ -617,7 +582,6 @@
   // Launch yet another app that's using the mic, the name of the app can be
   // determined.
   LaunchApp(u"app3");
-  SetNumberOfActiveInputStreams(4);
   EXPECT_TRUE(GetNotification());
   EXPECT_TRUE(GetPopupNotification());
   // As more that two apps are attempting to use the microphone, we fall back to
@@ -651,7 +615,6 @@
   // with the application name in the notification body.
   const std::u16string app1 = u"app1";
   LaunchApp(app1);
-  SetNumberOfActiveInputStreams(1);
   message_center::Notification* notification_ptr = GetNotification();
   ASSERT_TRUE(notification_ptr);
   EXPECT_EQ(
@@ -664,7 +627,6 @@
   // notification body.
   const std::u16string app2 = u"app2";
   LaunchApp(app2);
-  SetNumberOfActiveInputStreams(2);
   notification_ptr = GetNotification();
   ASSERT_TRUE(notification_ptr);
   EXPECT_EQ(l10n_util::GetStringFUTF16(
@@ -675,7 +637,6 @@
   // Close one of the applications. The notification message should be updated
   // to only contain the name of the other application.
   CloseApp(app1);
-  SetNumberOfActiveInputStreams(1);
   notification_ptr = GetNotification();
   ASSERT_TRUE(notification_ptr);
   EXPECT_EQ(
@@ -689,7 +650,6 @@
 
   // Launch the closed app (app1) again.
   LaunchApp(app1);
-  SetNumberOfActiveInputStreams(2);
   notification_ptr = GetNotification();
   ASSERT_TRUE(notification_ptr);
   EXPECT_EQ(l10n_util::GetStringFUTF16(
@@ -700,7 +660,6 @@
   // Closing one of the applications should remove the name of that application
   // from the hw switch notification message.
   CloseApp(app2);
-  SetNumberOfActiveInputStreams(1);
   notification_ptr = GetNotification();
   ASSERT_TRUE(notification_ptr);
   EXPECT_EQ(
diff --git a/ash/test/ash_test_util.cc b/ash/test/ash_test_util.cc
index 9a6ad92..aee34ab 100644
--- a/ash/test/ash_test_util.cc
+++ b/ash/test/ash_test_util.cc
@@ -12,7 +12,7 @@
 #include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "ui/aura/window.h"
+#include "ui/aura/client/aura_constants.h"
 #include "ui/gfx/image/image.h"
 #include "ui/snapshot/snapshot_aura.h"
 
@@ -87,4 +87,23 @@
   return win1_iter < win2_iter;
 }
 
+void DecorateWindow(aura::Window* window,
+                    const std::u16string& title,
+                    SkColor color) {
+  auto* widget = views::Widget::GetWidgetForNativeWindow(window);
+  DCHECK(widget);
+  widget->client_view()->AddChildView(
+      views::Builder<views::View>()
+          .SetBackground(views::CreateRoundedRectBackground(color, 4.f))
+          .Build());
+
+  // Add a title and an app icon so that the header is fully stocked.
+  window->SetTitle(title);
+  SkBitmap bitmap;
+  bitmap.allocN32Pixels(1, 1);
+  bitmap.eraseColor(SK_ColorCYAN);
+  window->SetProperty(aura::client::kAppIconKey,
+                      gfx::ImageSkia::CreateFrom1xBitmap(bitmap));
+}
+
 }  // namespace ash
diff --git a/ash/test/ash_test_util.h b/ash/test/ash_test_util.h
index e9d17fff..4602b4d 100644
--- a/ash/test/ash_test_util.h
+++ b/ash/test/ash_test_util.h
@@ -50,6 +50,11 @@
 // Returns true if `win1` is stacked (not directly) below `win2`.
 bool IsStackedBelow(aura::Window* win1, aura::Window* win2);
 
+// Configures `window` with the specified title and color.
+void DecorateWindow(aura::Window* window,
+                    const std::u16string& title,
+                    SkColor color);
+
 }  // namespace ash
 
 #endif
diff --git a/ash/wm/wm_pixel_diff_test.cc b/ash/wm/wm_pixel_diff_test.cc
index 058bb09..14562a5 100644
--- a/ash/wm/wm_pixel_diff_test.cc
+++ b/ash/wm/wm_pixel_diff_test.cc
@@ -6,6 +6,7 @@
 
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
+#include "ash/test/ash_test_util.h"
 #include "ash/test/pixel/ash_pixel_differ.h"
 #include "ash/wm/desks/desk.h"
 #include "ash/wm/desks/desks_controller.h"
@@ -15,38 +16,10 @@
 #include "ash/wm/window_cycle/window_cycle_controller.h"
 #include "ash/wm/window_cycle/window_cycle_list.h"
 #include "ash/wm/window_cycle/window_cycle_view.h"
-#include "ui/aura/client/aura_constants.h"
-#include "ui/views/background.h"
-#include "ui/views/view.h"
 #include "ui/views/widget/widget.h"
 
 namespace ash {
 
-namespace {
-
-// Helper to modify our windows in this pixel test so they are more visible
-// when debugging.
-void DecorateWindow(aura::Window* window,
-                    const std::u16string& title,
-                    SkColor color) {
-  auto* widget = views::Widget::GetWidgetForNativeWindow(window);
-  DCHECK(widget);
-  widget->client_view()->AddChildView(
-      views::Builder<views::View>()
-          .SetBackground(views::CreateRoundedRectBackground(color, 4.f))
-          .Build());
-
-  // Add a title and an app icon so that the header is fully stocked.
-  window->SetTitle(title);
-  SkBitmap bitmap;
-  bitmap.allocN32Pixels(1, 1);
-  bitmap.eraseColor(SK_ColorCYAN);
-  window->SetProperty(aura::client::kAppIconKey,
-                      gfx::ImageSkia::CreateFrom1xBitmap(bitmap));
-}
-
-}  // namespace
-
 // TODO(b/261084863): For now, add some basic tests. Further investigation is
 // needed to determine the location of the test files, whether the tests should
 // cover more user journeys and whether we should parameterize for RTL,
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 06fd397..3a64b319 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -338,8 +338,6 @@
     "files/file_error_or.h",
     "files/file_path.cc",
     "files/file_path.h",
-    "files/file_path_watcher.cc",
-    "files/file_path_watcher.h",
     "files/file_proxy.cc",
     "files/file_proxy.h",
     "files/file_tracing.cc",
@@ -416,8 +414,6 @@
     "memory/discardable_memory_allocator.cc",
     "memory/discardable_memory_allocator.h",
     "memory/discardable_memory_internal.h",
-    "memory/discardable_shared_memory.cc",
-    "memory/discardable_shared_memory.h",
     "memory/free_deleter.h",
     "memory/memory_pressure_listener.cc",
     "memory/memory_pressure_listener.h",
@@ -582,18 +578,10 @@
     "process/current_process_test.h",
     "process/environment_internal.cc",
     "process/environment_internal.h",
-    "process/kill.cc",
-    "process/kill.h",
-    "process/launch.cc",
-    "process/launch.h",
-    "process/memory.cc",
-    "process/memory.h",
     "process/process.h",
     "process/process_handle.cc",
     "process/process_handle.h",
     "process/process_info.h",
-    "process/process_iterator.cc",
-    "process/process_iterator.h",
     "process/process_metrics.cc",
     "process/process_metrics.h",
     "process/process_metrics_iocounters.h",
@@ -702,8 +690,6 @@
     "substring_set_matcher/substring_set_matcher.h",
     "supports_user_data.cc",
     "supports_user_data.h",
-    "sync_socket.cc",
-    "sync_socket.h",
     "synchronization/atomic_flag.cc",
     "synchronization/atomic_flag.h",
     "synchronization/condition_variable.h",
@@ -1005,7 +991,6 @@
   if (is_posix) {
     sources += [
       "debug/debugger_posix.cc",
-      "debug/stack_trace_posix.cc",
       "file_descriptor_posix.cc",
       "file_descriptor_posix.h",
       "files/dir_reader_posix.h",
@@ -1025,14 +1010,10 @@
       "posix/global_descriptors.h",
       "posix/safe_strerror.cc",
       "posix/safe_strerror.h",
-      "process/kill_posix.cc",
       "process/process_handle_posix.cc",
-      "process/process_metrics_posix.cc",
-      "process/process_posix.cc",
       "profiler/module_cache_posix.cc",
       "strings/string_util_posix.h",
       "strings/sys_string_conversions_posix.cc",
-      "sync_socket_posix.cc",
       "synchronization/condition_variable_posix.cc",
       "synchronization/lock_impl_posix.cc",
       "synchronization/waitable_event_posix.cc",
@@ -1222,7 +1203,6 @@
 
   # Android.
   if (is_android) {
-    sources -= [ "debug/stack_trace_posix.cc" ]
     sources += [
       "android/android_hardware_buffer_compat.cc",
       "android/android_hardware_buffer_compat.h",
@@ -1490,12 +1470,10 @@
       "process/process_handle_fuchsia.cc",
       "process/process_iterator_fuchsia.cc",
       "process/process_metrics_fuchsia.cc",
-      "process/process_metrics_posix.cc",
       "profiler/module_cache_posix.cc",
       "rand_util_fuchsia.cc",
       "strings/string_util_posix.h",
       "strings/sys_string_conversions_posix.cc",
-      "sync_socket_posix.cc",
       "synchronization/condition_variable_posix.cc",
       "synchronization/lock_impl_posix.cc",
       "synchronization/waitable_event_posix.cc",
@@ -1595,7 +1573,6 @@
       "debug/crash_logging.cc",
       "debug/crash_logging.h",
       "debug/stack_trace.cc",
-      "debug/stack_trace_posix.cc",
       "files/file_enumerator.cc",
       "files/file_proxy.cc",
       "files/file_util.cc",
@@ -1611,8 +1588,6 @@
       "memory/discardable_memory.h",
       "memory/discardable_memory_allocator.cc",
       "memory/discardable_memory_allocator.h",
-      "memory/discardable_shared_memory.cc",
-      "memory/discardable_shared_memory.h",
       "memory/madv_free_discardable_memory_allocator_posix.cc",
       "memory/madv_free_discardable_memory_allocator_posix.h",
       "memory/madv_free_discardable_memory_posix.cc",
@@ -1620,20 +1595,8 @@
       "native_library.cc",
       "native_library_posix.cc",
       "path_service.cc",
-      "process/kill.cc",
-      "process/kill.h",
-      "process/kill_posix.cc",
-      "process/launch.cc",
-      "process/launch.h",
-      "process/memory.cc",
-      "process/memory.h",
-      "process/process_iterator.cc",
-      "process/process_iterator.h",
       "process/process_metrics.cc",
-      "process/process_metrics_posix.cc",
-      "process/process_posix.cc",
       "profiler/module_cache_posix.cc",
-      "sync_socket_posix.cc",
       "system/sys_info.cc",
       "task/thread_pool/initialization_util.cc",
       "task/thread_pool/initialization_util.h",
@@ -1696,6 +1659,13 @@
       ]
     }
 
+    if ((is_posix && !is_ios) || is_fuchsia) {
+      sources += [
+        "process/process_metrics_posix.cc",
+        "sync_socket_posix.cc",
+      ]
+    }
+
     if (is_posix && !is_apple) {
       sources += [
         "posix/can_lower_nice_to.cc",
@@ -1710,6 +1680,32 @@
       ]
     }
 
+    if (is_posix && !is_android) {
+      sources += [ "debug/stack_trace_posix.cc" ]
+    }
+
+    if (is_posix && !is_ios) {
+      sources += [
+        "process/kill_posix.cc",
+        "process/process_posix.cc",
+      ]
+    }
+
+    if (!is_ios) {
+      sources += [
+        "memory/discardable_shared_memory.cc",
+        "memory/discardable_shared_memory.h",
+        "process/kill.cc",
+        "process/kill.h",
+        "process/launch.cc",
+        "process/launch.h",
+        "process/memory.cc",
+        "process/memory.h",
+        "process/process_iterator.cc",
+        "process/process_iterator.h",
+      ]
+    }
+
     if (is_linux || is_chromeos) {
       sources += [
         "base_paths_posix.cc",
@@ -2145,26 +2141,6 @@
 
   # iOS
   if (is_ios) {
-    sources -= [
-      "files/file_path_watcher.cc",
-      "files/file_path_watcher.h",
-      "memory/discardable_shared_memory.cc",
-      "memory/discardable_shared_memory.h",
-      "process/kill.cc",
-      "process/kill.h",
-      "process/kill_posix.cc",
-      "process/launch.cc",
-      "process/launch.h",
-      "process/memory.cc",
-      "process/memory.h",
-      "process/process_iterator.cc",
-      "process/process_iterator.h",
-      "process/process_metrics_posix.cc",
-      "process/process_posix.cc",
-      "sync_socket.h",
-      "sync_socket_posix.cc",
-      "synchronization/waitable_event_watcher.h",
-    ]
     sources += [
       "base_paths_mac.h",
       "base_paths_mac.mm",
@@ -2272,6 +2248,16 @@
     frameworks += [ "UIKit.framework" ]
   }
 
+  if (!is_ios) {
+    sources += [
+      "files/file_path_watcher.cc",
+      "files/file_path_watcher.h",
+      "sync_socket.cc",
+      "sync_socket.h",
+      "synchronization/waitable_event_watcher.h",
+    ]
+  }
+
   if (dep_libevent) {
     deps += [ "//third_party/libevent" ]
   }
diff --git a/base/allocator/partition_alloc_support.cc b/base/allocator/partition_alloc_support.cc
index 148a776db..0b00a8b 100644
--- a/base/allocator/partition_alloc_support.cc
+++ b/base/allocator/partition_alloc_support.cc
@@ -775,10 +775,24 @@
 
 PartitionAllocSupport::PartitionAllocSupport() = default;
 
+void PartitionAllocSupport::ReconfigureForTests() {
+  ReconfigureEarlyish("");
+  base::AutoLock scoped_lock(lock_);
+  called_for_tests_ = true;
+}
+
 void PartitionAllocSupport::ReconfigureEarlyish(
     const std::string& process_type) {
   {
     base::AutoLock scoped_lock(lock_);
+
+    // In tests, ReconfigureEarlyish() is called by ReconfigureForTest(), which
+    // is earlier than ContentMain().
+    if (called_for_tests_) {
+      DCHECK(called_earlyish_);
+      return;
+    }
+
     // TODO(bartekn): Switch to DCHECK once confirmed there are no issues.
     CHECK(!called_earlyish_)
         << "ReconfigureEarlyish was already called for process '"
@@ -829,8 +843,11 @@
 }
 
 void PartitionAllocSupport::ReconfigureAfterFeatureListInit(
-    const std::string& process_type) {
-  base::allocator::InstallDanglingRawPtrChecks();
+    const std::string& process_type,
+    bool configure_dangling_pointer_detector) {
+  if (configure_dangling_pointer_detector) {
+    base::allocator::InstallDanglingRawPtrChecks();
+  }
   base::allocator::InstallUnretainedDanglingRawPtrChecks();
   {
     base::AutoLock scoped_lock(lock_);
diff --git a/base/allocator/partition_alloc_support.h b/base/allocator/partition_alloc_support.h
index ead3d47d..129dccb 100644
--- a/base/allocator/partition_alloc_support.h
+++ b/base/allocator/partition_alloc_support.h
@@ -66,9 +66,12 @@
   // re-configuration steps exactly once.
   //
   // *AfterTaskRunnerInit() may be called more than once.
+  void ReconfigureForTests();
   void ReconfigureEarlyish(const std::string& process_type);
   void ReconfigureAfterZygoteFork(const std::string& process_type);
-  void ReconfigureAfterFeatureListInit(const std::string& process_type);
+  void ReconfigureAfterFeatureListInit(
+      const std::string& process_type,
+      bool configure_dangling_pointer_detector = true);
   void ReconfigureAfterTaskRunnerInit(const std::string& process_type);
 
   // |has_main_frame| tells us if the renderer contains a main frame.
@@ -84,6 +87,7 @@
   PartitionAllocSupport();
 
   base::Lock lock_;
+  bool called_for_tests_ GUARDED_BY(lock_) = false;
   bool called_earlyish_ GUARDED_BY(lock_) = false;
   bool called_after_zygote_fork_ GUARDED_BY(lock_) = false;
   bool called_after_feature_list_init_ GUARDED_BY(lock_) = false;
diff --git a/base/power_monitor/power_monitor_device_source.h b/base/power_monitor/power_monitor_device_source.h
index 38ee5af..3e4c5eb0 100644
--- a/base/power_monitor/power_monitor_device_source.h
+++ b/base/power_monitor/power_monitor_device_source.h
@@ -84,9 +84,9 @@
                                          LPARAM lparam);
 
     // Instance of the module containing the window procedure.
-    HMODULE instance_;
+    HMODULE instance_ = nullptr;
     // A hidden message-only window.
-    HWND message_hwnd_;
+    HWND message_hwnd_ = nullptr;
     // A handle, returned when we register for power setting notification
     HPOWERNOTIFY power_notify_handle_ = nullptr;
   };
diff --git a/base/power_monitor/power_monitor_device_source_win.cc b/base/power_monitor/power_monitor_device_source_win.cc
index 3925a37..4e7b656 100644
--- a/base/power_monitor/power_monitor_device_source_win.cc
+++ b/base/power_monitor/power_monitor_device_source_win.cc
@@ -32,9 +32,8 @@
       power_event = PowerMonitorSource::POWER_STATE_EVENT;
       break;
     case PBT_APMRESUMEAUTOMATIC:  // Resume from suspend.
-      //case PBT_APMRESUMESUSPEND:  // User-initiated resume from suspend.
-      // We don't notify for this latter event
-      // because if it occurs it is always sent as a
+      // We don't notify for PBT_APMRESUMESUSPEND
+      // because, if it occurs, it is always sent as a
       // second event after PBT_APMRESUMEAUTOMATIC.
       power_event = PowerMonitorSource::RESUME_EVENT;
       break;
@@ -56,28 +55,6 @@
   ProcessPowerEventHelper(power_event);
 }
 
-HPOWERNOTIFY RegisterSuspendResumeNotification(HANDLE hRecipient, DWORD Flags) {
-  const auto register_suspend_resume_notification_ptr =
-      reinterpret_cast<decltype(&::RegisterSuspendResumeNotification)>(
-          ::GetProcAddress(::GetModuleHandle(L"user32.dll"),
-                           "RegisterSuspendResumeNotification"));
-  if (!register_suspend_resume_notification_ptr)
-    return nullptr;
-
-  return register_suspend_resume_notification_ptr(hRecipient, Flags);
-}
-
-BOOL UnregisterSuspendResumeNotification(HPOWERNOTIFY Handle) {
-  const auto unregister_suspend_resume_notification_ptr =
-      reinterpret_cast<decltype(&::UnregisterSuspendResumeNotification)>(
-          ::GetProcAddress(::GetModuleHandle(L"user32.dll"),
-                           "UnregisterSuspendResumeNotification"));
-  if (!unregister_suspend_resume_notification_ptr)
-    return FALSE;
-
-  return unregister_suspend_resume_notification_ptr(Handle);
-}
-
 }  // namespace
 
 void PowerMonitorDeviceSource::PlatformInit() {
@@ -102,7 +79,7 @@
 // battery power.  Returns true if running on battery.
 bool PowerMonitorDeviceSource::IsOnBatteryPower() {
   SYSTEM_POWER_STATUS status;
-  if (!GetSystemPowerStatus(&status)) {
+  if (!::GetSystemPowerStatus(&status)) {
     DPLOG(ERROR) << "GetSystemPowerStatus failed";
     return false;
   }
@@ -115,8 +92,7 @@
   return PowerThermalObserver::kSpeedLimitMax;
 }
 
-PowerMonitorDeviceSource::PowerMessageWindow::PowerMessageWindow()
-    : instance_(NULL), message_hwnd_(NULL) {
+PowerMonitorDeviceSource::PowerMessageWindow::PowerMessageWindow() {
   if (!CurrentUIThread::IsSet()) {
     // Creating this window in (e.g.) a renderer inhibits shutdown on Windows.
     // See http://crbug.com/230122. TODO(vandebo): http://crbug.com/236031
@@ -129,21 +105,18 @@
       kWindowClassName,
       &base::win::WrappedWindowProc<
           PowerMonitorDeviceSource::PowerMessageWindow::WndProcThunk>,
-      0, 0, 0, NULL, NULL, NULL, NULL, NULL,
-      &window_class);
+      0, 0, 0, nullptr, nullptr, nullptr, nullptr, nullptr, &window_class);
   instance_ = window_class.hInstance;
-  ATOM clazz = RegisterClassEx(&window_class);
+  ATOM clazz = ::RegisterClassEx(&window_class);
   DCHECK(clazz);
 
   message_hwnd_ =
-      CreateWindowEx(WS_EX_NOACTIVATE, kWindowClassName, NULL, WS_POPUP, 0, 0,
-                     0, 0, NULL, NULL, instance_, NULL);
+      ::CreateWindowEx(WS_EX_NOACTIVATE, kWindowClassName, nullptr, WS_POPUP, 0,
+                       0, 0, 0, nullptr, nullptr, instance_, nullptr);
   if (message_hwnd_) {
-    // On machines with modern standby and Win8+, calling
-    // RegisterSuspendResumeNotification is required in order to get the
-    // PBT_APMSUSPEND message. The notification is no longer automatically
-    // fired.
-    power_notify_handle_ = base::RegisterSuspendResumeNotification(
+    // On machines with modern standby calling RegisterSuspendResumeNotification
+    // is required in order to get the PBT_APMSUSPEND message.
+    power_notify_handle_ = ::RegisterSuspendResumeNotification(
         message_hwnd_, DEVICE_NOTIFY_WINDOW_HANDLE);
   }
 }
@@ -151,10 +124,10 @@
 PowerMonitorDeviceSource::PowerMessageWindow::~PowerMessageWindow() {
   if (message_hwnd_) {
     if (power_notify_handle_)
-      base::UnregisterSuspendResumeNotification(power_notify_handle_);
+      ::UnregisterSuspendResumeNotification(power_notify_handle_);
 
-    DestroyWindow(message_hwnd_);
-    UnregisterClass(kWindowClassName, instance_);
+    ::DestroyWindow(message_hwnd_);
+    ::UnregisterClass(kWindowClassName, instance_);
   }
 }
 
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
index 287c6ab..94c72345 100644
--- a/base/test/test_suite.cc
+++ b/base/test/test_suite.cc
@@ -8,11 +8,13 @@
 
 #include <memory>
 
+#include "base/allocator/partition_allocator/partition_alloc_buildflags.h"
 #include "base/allocator/partition_allocator/tagging.h"
 #include "base/at_exit.h"
 #include "base/base_paths.h"
 #include "base/base_switches.h"
 #include "base/command_line.h"
+#include "base/debug/asan_service.h"
 #include "base/debug/debugger.h"
 #include "base/debug/profiler.h"
 #include "base/debug/stack_trace.h"
@@ -84,6 +86,10 @@
 #include "base/debug/handle_hooks_win.h"
 #endif  // BUILDFLAG(IS_WIN)
 
+#if BUILDFLAG(USE_PARTITION_ALLOC)
+#include "base/allocator/partition_alloc_support.h"
+#endif  // BUILDFLAG(USE_PARTITION_ALLOC)
+
 namespace base {
 
 namespace {
@@ -169,6 +175,17 @@
       new_command_line.AppendSwitchNative(iter.first, iter.second);
 
     *CommandLine::ForCurrentProcess() = new_command_line;
+
+    // TODO(https://crbug.com/1400059): Enable dangling pointer detector.
+    // TODO(https://crbug.com/1400058): Enable BackupRefPtr in unittests on
+    // Windows and Android too.
+    // TODO(https://crbug.com/1413674): Enable PartitionAlloc in unittests with
+    // ASAN.
+#if BUILDFLAG(USE_PARTITION_ALLOC) && !BUILDFLAG(IS_WIN) && \
+    !BUILDFLAG(IS_ANDROID) && !defined(ADDRESS_SANITIZER)
+    allocator::PartitionAllocSupport::Get()->ReconfigureAfterFeatureListInit(
+        "", /*configure_dangling_pointer_detector=*/false);
+#endif
   }
 
   void OnTestEnd(const testing::TestInfo& test_info) override {
@@ -572,6 +589,22 @@
 void TestSuite::Initialize() {
   DCHECK(!is_initialized_);
 
+  // The AsanService causes ASAN errors to emit additional information. It is
+  // helpful on its own. It is also required by ASAN BackupRefPtr when
+  // reconfiguring PartitionAlloc below.
+#if defined(ADDRESS_SANITIZER)
+  base::debug::AsanService::GetInstance()->Initialize();
+#endif
+
+  // TODO(https://crbug.com/1400058): Enable BackupRefPtr in unittests on
+  // Windows and Android too. Same for ASAN.
+  // TODO(https://crbug.com/1413674): Enable PartitionAlloc in unittests with
+  // ASAN.
+#if BUILDFLAG(USE_PARTITION_ALLOC) && !BUILDFLAG(IS_WIN) && \
+    !BUILDFLAG(IS_ANDROID) && !defined(ADDRESS_SANITIZER)
+  allocator::PartitionAllocSupport::Get()->ReconfigureForTests();
+#endif  // BUILDFLAG(IS_WIN)
+
   test::ScopedRunLoopTimeout::SetAddGTestFailureOnTimeout();
 
   const CommandLine* command_line = CommandLine::ForCurrentProcess();
diff --git a/base/time/time_mac.mm b/base/time/time_mac.mm
index 54595e58..51c8b1e3 100644
--- a/base/time/time_mac.mm
+++ b/base/time/time_mac.mm
@@ -24,6 +24,7 @@
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_IOS)
+#include <errno.h>
 #include <time.h>
 #include "base/ios/ios_util.h"
 #endif
@@ -90,29 +91,17 @@
 // unspecified starting point.
 int64_t ComputeCurrentTicks() {
 #if BUILDFLAG(IS_IOS)
-  // iOS 10 supports clock_gettime(CLOCK_MONOTONIC, ...), which is
-  // around 15 times faster than sysctl() call. Use it if possible;
-  // otherwise, fall back to sysctl().
-  if (__builtin_available(iOS 10, *)) {
-    struct timespec tp;
-    if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0) {
-      return (int64_t)tp.tv_sec * 1000000 + tp.tv_nsec / 1000;
-    }
-  }
+  struct timespec tp;
+  // clock_gettime() returns 0 on success and -1 on failure. Failure can only
+  // happen because of bad arguments (unsupported clock type or timespec pointer
+  // out of accessible address space). Here it is known that neither can happen
+  // since the timespec parameter is stack allocated right above and
+  // `CLOCK_MONOTONIC` is supported on all versions of iOS that Chrome is
+  // supported on.
+  int res = clock_gettime(CLOCK_MONOTONIC, &tp);
+  DCHECK_EQ(res, 0) << "Failed clock_gettime, errno: " << errno;
 
-  // On iOS mach_absolute_time stops while the device is sleeping. Instead use
-  // now - KERN_BOOTTIME to get a time difference that is not impacted by clock
-  // changes. KERN_BOOTTIME will be updated by the system whenever the system
-  // clock change.
-  struct timeval boottime;
-  int mib[2] = {CTL_KERN, KERN_BOOTTIME};
-  size_t size = sizeof(boottime);
-  int kr = sysctl(mib, std::size(mib), &boottime, &size, nullptr, 0);
-  DCHECK_EQ(KERN_SUCCESS, kr);
-  base::TimeDelta time_difference = base::subtle::TimeNowIgnoringOverride() -
-                                    (base::Time::FromTimeT(boottime.tv_sec) +
-                                     base::Microseconds(boottime.tv_usec));
-  return time_difference.InMicroseconds();
+  return (int64_t)tp.tv_sec * 1000000 + tp.tv_nsec / 1000;
 #else
   // mach_absolute_time is it when it comes to ticks on the Mac.  Other calls
   // with less precision (such as TickCount) just call through to
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index 66e1611..7452dd3 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-11.20230208.1.1
+11.20230208.2.1
diff --git a/build/fuchsia/test/run_executable_test.py b/build/fuchsia/test/run_executable_test.py
index 494e39a..7c6772b 100755
--- a/build/fuchsia/test/run_executable_test.py
+++ b/build/fuchsia/test/run_executable_test.py
@@ -38,11 +38,11 @@
 
 
 def _copy_coverage_files(test_runner: FfxTestRunner, dest: str) -> None:
-    """Copy debug data file from the device to the host."""
+    """Copy debug data file from the device to the host if it exists."""
 
     coverage_dir = test_runner.get_debug_data_directory()
     if not coverage_dir:
-        logging.error(
+        logging.info(
             'Failed to parse coverage data directory from test summary '
             'output files. Not copying coverage files from the device.')
         return
@@ -76,13 +76,13 @@
             test_args: List[str],
             test_name: str,
             target_id: Optional[str],
-            code_coverage_dir: Optional[str],
+            code_coverage_dir: str,
             logs_dir: Optional[str] = None) -> None:
         super().__init__(out_dir, test_args, [test_name], target_id)
         if not self._test_args:
             self._test_args = []
         self._test_name = test_name
-        self._code_coverage_dir = code_coverage_dir
+        self._code_coverage_dir = os.path.basename(code_coverage_dir)
         self._custom_artifact_directory = None
         self._isolated_script_test_output = None
         self._isolated_script_test_perf_output = None
@@ -192,9 +192,7 @@
                 test_runner,
                 os.path.basename(self._isolated_script_test_perf_output),
                 self._isolated_script_test_perf_output)
-        if self._code_coverage_dir:
-            _copy_coverage_files(test_runner,
-                                 os.path.basename(self._code_coverage_dir))
+        _copy_coverage_files(test_runner, self._code_coverage_dir)
 
     def run_test(self) -> subprocess.Popen:
         test_args = self._get_args()
@@ -226,8 +224,6 @@
                                   test_args: List[str]):
     """Helper for creating an ExecutableTestRunner."""
 
-    if not runner_args.code_coverage:
-        runner_args.code_coverage_dir = None
     return ExecutableTestRunner(runner_args.out_dir, test_args,
                                 runner_args.test_type, runner_args.target_id,
                                 runner_args.code_coverage_dir,
@@ -238,15 +234,12 @@
     """Register common arguments for ExecutableTestRunner."""
 
     test_args = parser.add_argument_group('test', 'arguments for test running')
-    test_args.add_argument('--code-coverage',
-                           default=False,
-                           action='store_true',
-                           help='Gather code coverage information.')
     test_args.add_argument('--code-coverage-dir',
                            default=os.getcwd(),
                            help='Directory to place code coverage '
-                           'information. Only relevant when --code-coverage '
-                           'is set to true. Defaults to current directory.')
+                           'information. Only relevant when the target was '
+                           'built with |fuchsia_code_coverage| set to true. '
+                           'Defaults to current directory.')
     test_args.add_argument('--test-name',
                            dest='test_type',
                            help='Name of the test package (e.g. '
diff --git a/build/fuchsia/test/run_test.py b/build/fuchsia/test/run_test.py
index 701628df..680fc6b 100755
--- a/build/fuchsia/test/run_test.py
+++ b/build/fuchsia/test/run_test.py
@@ -84,8 +84,6 @@
                 stack.enter_context(tempfile.TemporaryDirectory()))
             stack.enter_context(
                 ScopedFfxConfig('repository.server.listen', '"[::]:0"'))
-        # crbug.com/1408189: overnet.cso causes flakes in overnet.
-        stack.enter_context(ScopedFfxConfig('overnet.cso', 'disabled'))
         log_manager = stack.enter_context(LogManager(runner_args.logs_dir))
         if runner_args.device:
             update(runner_args.system_image_dir, runner_args.os_check,
diff --git a/chrome/VERSION b/chrome/VERSION
index a59e6b3d..7e659fa5 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=112
 MINOR=0
-BUILD=5584
+BUILD=5585
 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index d141470..e7877ab 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -2417,13 +2417,6 @@
     enable_multidex = is_java_debug
   }
 
-  chrome_public_apk_or_module_tmpl("chrome_modern_public_base_bundle_module") {
-    target_type = "android_app_bundle_module"
-    is_base_module = true
-    add_view_trace_events = true
-    bundle_target = ":chrome_modern_public_bundle"
-  }
-
   android_library("monochrome_java") {
     deps = [
       ":base_module_java",
@@ -3017,18 +3010,6 @@
     "--disable-fre",
   ]
 
-  instrumentation_test_runner("chrome_modern_public_bundle_smoke_test") {
-    apk_under_test = ":chrome_modern_public_bundle_apks"
-    android_test_apk = ":chrome_bundle_smoke_test_apk"
-    never_incremental = true
-    modules = [ "test_dummy" ]
-    if (!is_java_debug) {
-      proguard_mapping_path =
-          "$root_build_dir/apks/ChromeModernPublic.aab.mapping"
-    }
-    extra_args = _bundle_smoke_test_extra_args
-  }
-
   instrumentation_test_runner("monochrome_public_bundle_smoke_test") {
     if (android_64bit_target_cpu && skip_secondary_abi_for_cq) {
       apk_under_test = "//chrome/android:monochrome_64_public_bundle_apks"
@@ -3134,33 +3115,6 @@
     ]
   }
 
-  chrome_bundle("chrome_modern_public_bundle") {
-    base_module_target = ":chrome_modern_public_base_bundle_module"
-    bundle_name = "ChromeModernPublic"
-    compress_shared_libraries = true
-    if (android_64bit_target_cpu) {
-      is_64_bit_browser = true
-    }
-    add_view_trace_events = true
-    manifest_package = chrome_public_manifest_package
-    min_sdk_version = default_min_sdk_version
-    module_descs = chrome_modern_module_descs
-  }
-
-  if (is_official_build) {
-    # Used for binary size monitoring.
-    create_app_bundle_minimal_apks("chrome_modern_public_minimal_apks") {
-      deps = [ ":chrome_modern_public_bundle" ]
-      bundle_path = "$root_build_dir/apks/ChromeModernPublic.aab"
-    }
-
-    android_resource_sizes_test(
-        "resource_sizes_chrome_modern_public_minimal_apks") {
-      file_path = "$root_build_dir/apks/ChromeModernPublic.minimal.apks"
-      data_deps = [ ":chrome_modern_public_minimal_apks" ]
-    }
-  }
-
   template("monochrome_or_trichrome_public_bundle_tmpl") {
     _base_module_target_name = "${invoker.target_name}__base_bundle_module"
     _is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni
index ebf2b169..1feb46c2 100644
--- a/chrome/android/chrome_java_resources.gni
+++ b/chrome/android/chrome_java_resources.gni
@@ -379,6 +379,8 @@
   "java/res/drawable/ic_error.xml",
   "java/res/drawable/ic_find_in_page.xml",
   "java/res/drawable/ic_forward_arrow_black_24dp.xml",
+  "java/res/drawable/ic_fullscreen_enter.xml",
+  "java/res/drawable/ic_fullscreen_exit.xml",
   "java/res/drawable/ic_google_services_48dp.xml",
   "java/res/drawable/ic_image_descriptions.xml",
   "java/res/drawable/ic_incognito.xml",
@@ -491,6 +493,7 @@
   "java/res/layout/custom_tabs_bottombar_item.xml",
   "java/res/layout/custom_tabs_control_container.xml",
   "java/res/layout/custom_tabs_handle_view.xml",
+  "java/res/layout/custom_tabs_sidepanel_maximize.xml",
   "java/res/layout/custom_tabs_toolbar.xml",
   "java/res/layout/custom_tabs_toolbar_button.xml",
   "java/res/layout/custom_tabs_topbar.xml",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 2ab3393..3a387408 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -184,7 +184,6 @@
   "java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java",
   "java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java",
   "java/src/org/chromium/chrome/browser/bookmarks/BookmarkModelObserver.java",
-  "java/src/org/chromium/chrome/browser/bookmarks/BookmarkOpener.java",
   "java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java",
   "java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java",
   "java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index 07bb6e52..8eed1e9 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -75,7 +75,6 @@
   "javatests/src/org/chromium/chrome/browser/background_sync/PeriodicBackgroundSyncTest.java",
   "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java",
   "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java",
-  "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java",
   "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoDismissTest.java",
   "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java",
   "javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowTest.java",
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartToolbarTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartToolbarTest.java
index 4043387..09858d9 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartToolbarTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartToolbarTest.java
@@ -31,7 +31,6 @@
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
@@ -134,7 +133,6 @@
     @SmallTest
     @Feature({"RenderTest"})
     @CommandLineFlags.Add({INSTANT_START_TEST_BASE_PARAMS})
-    @DisabledTest(message = "https://crbug.com/1314462")
     public void renderSingleAsHomepage_NoTab_scrollToolbarToTop() throws IOException {
         StartSurfaceTestUtils.startMainActivityFromLauncher(mActivityTestRule);
         ChromeTabbedActivity cta = mActivityTestRule.getActivity();
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceBackButtonTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceBackButtonTest.java
index 727ff34e..257a0025 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceBackButtonTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceBackButtonTest.java
@@ -320,7 +320,6 @@
     @Feature({"StartSurface"})
     // clang-format off
     @CommandLineFlags.Add({START_SURFACE_TEST_SINGLE_ENABLED_PARAMS})
-    @DisabledTest(message = "https://crbug.com/1246457")
     @DisableFeatures({ChromeFeatureList.BACK_GESTURE_REFACTOR})
     public void testSwipeBackOnStartSurfaceHomePage() throws ExecutionException {
         // clang-format on
diff --git a/chrome/android/java/res/drawable/ic_fullscreen_enter.xml b/chrome/android/java/res/drawable/ic_fullscreen_enter.xml
new file mode 100644
index 0000000..1b1470d0
--- /dev/null
+++ b/chrome/android/java/res/drawable/ic_fullscreen_enter.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2023 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:width="24dp"
+    android:height="24dp">
+    <group>
+        <clip-path
+            android:pathData="M0 0H24V24H0V0Z" />
+        <group>
+            <clip-path
+                android:pathData="M0 0H24V24H0V0Z" />
+            <path
+                android:pathData="M5 19V14H7V17H10V19H5ZM5 10V5H10V7H7V10H5ZM14 19V17H17V14H19V19H14ZM17 10V7H14V5H19V10H17Z"
+                android:fillColor="@macro/default_icon_color" />
+        </group>
+    </group>
+</vector>
diff --git a/chrome/android/java/res/drawable/ic_fullscreen_exit.xml b/chrome/android/java/res/drawable/ic_fullscreen_exit.xml
new file mode 100644
index 0000000..a91f885
--- /dev/null
+++ b/chrome/android/java/res/drawable/ic_fullscreen_exit.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2023 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:width="24dp"
+    android:height="24dp">
+    <group>
+        <clip-path
+            android:pathData="M0 0H24V24H0V0Z" />
+        <path
+            android:pathData="M5 8H8V5H10V10H5V8ZM8 16H5V14H10V19H8V16ZM14 19H16V16H19V14H14V19ZM16 5V8H19V10H14V5H16Z"
+            android:fillType="evenOdd"
+            android:fillColor="@macro/default_icon_color" />
+    </group>
+</vector>
diff --git a/chrome/android/java/res/layout/custom_tabs_sidepanel_maximize.xml b/chrome/android/java/res/layout/custom_tabs_sidepanel_maximize.xml
new file mode 100644
index 0000000..22f6598
--- /dev/null
+++ b/chrome/android/java/res/layout/custom_tabs_sidepanel_maximize.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2023 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<ImageButton
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/ToolbarButton"
+    android:scaleType="center"
+    android:contentDescription="@string/close_tab" />
diff --git a/chrome/android/java/res/layout/custom_tabs_toolbar.xml b/chrome/android/java/res/layout/custom_tabs_toolbar.xml
index 3a738ee..48396bf 100644
--- a/chrome/android/java/res/layout/custom_tabs_toolbar.xml
+++ b/chrome/android/java/res/layout/custom_tabs_toolbar.xml
@@ -73,6 +73,16 @@
                 style="@style/TextAppearance.TextSmall.Primary" />
         </view>
     </FrameLayout>
+    <ViewStub
+        android:id="@+id/maximize_button_stub"
+        android:inflatedId="@+id/custom_tabs_sidepanel_maximize"
+        android:layout_width="@dimen/location_bar_icon_width"
+        android:layout_height="wrap_content"
+        android:layout="@layout/custom_tabs_sidepanel_maximize"
+        android:layout_gravity="center_vertical|end"
+        android:gravity="center_vertical"
+        android:visibility="gone"
+        app:tint="@color/default_icon_color_tint_list" />
     <LinearLayout
         android:id="@+id/action_buttons"
         android:layout_width="wrap_content"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java
index 068172b..e377188 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java
@@ -15,7 +15,6 @@
 import org.chromium.chrome.browser.autofill.PersonalDataManager;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
 import org.chromium.chrome.browser.autofill.PhoneNumberUtil;
-import org.chromium.chrome.browser.autofill.Source;
 import org.chromium.chrome.browser.autofill.prefeditor.EditorBase;
 import org.chromium.chrome.browser.autofill.prefeditor.EditorModel;
 import org.chromium.chrome.browser.autofill.settings.AutofillProfileBridge.AddressField;
@@ -131,12 +130,11 @@
 
         if (mAutofillProfileBridge == null) mAutofillProfileBridge = new AutofillProfileBridge();
 
+        // If |toEdit| is null, we're creating a new autofill profile with the country code of the
+        // default locale on this device.
         final String editTitle;
         final AutofillAddress address;
-        final boolean isProfileNew = toEdit == null;
-        if (isProfileNew) {
-            // When creating a new autofill profile, we use the country code of the default locale
-            // on the device.
+        if (toEdit == null) {
             address = new AutofillAddress(
                     mContext, new AutofillProfile(), CompletenessCheckType.NORMAL);
             editTitle = mContext.getString(R.string.autofill_create_profile);
@@ -169,8 +167,7 @@
                 mEditor.removeAllFields();
                 mPhoneFormatter.setCountryCode(eventData.first);
                 mPhoneValidator.setCountryCode(eventData.first);
-                addAddressFieldsToEditor(
-                        eventData.first, Locale.getDefault().getLanguage(), isProfileNew);
+                addAddressFieldsToEditor(eventData.first, Locale.getDefault().getLanguage());
                 // Notify EditorDialog that the fields in the model have changed. EditorDialog
                 // should re-read the model and update the UI accordingly.
                 mHandler.post(eventData.second);
@@ -279,8 +276,7 @@
 
         // This should be called when all required fields are put in mAddressField.
         setAddressFieldValuesFromCache();
-        addAddressFieldsToEditor(
-                mCountryField.getValue().toString(), mProfile.getLanguageCode(), isProfileNew);
+        addAddressFieldsToEditor(mCountryField.getValue().toString(), mProfile.getLanguageCode());
         mEditorDialog.show(mEditor);
     }
 
@@ -388,20 +384,12 @@
      * For example, "US" will not add dependent locality to the editor. A "JP" address will start
      * with a person's full name or with a prefecture name, depending on whether the language code
      * is "ja-Latn" or "ja".
-     *
-     * @param countryCode The country for which fields are to be added.
-     * @param languageCode The language in which localized strings (e.g. label) are presented.
-     * @param isProfileNew Whether the profile new or not is required for setting validation:
-     *                     it is softer for existing profiles with originally invalid values.
      */
-    private void addAddressFieldsToEditor(
-            String countryCode, String languageCode, boolean isProfileNew) {
-        mAddressUiComponents = mAutofillProfileBridge.getAddressUiComponents(
-                countryCode, languageCode, AddressValidationType.ACCOUNT);
+    private void addAddressFieldsToEditor(String countryCode, String languageCode) {
+        mAddressUiComponents =
+                mAutofillProfileBridge.getAddressUiComponents(countryCode, languageCode);
         // In terms of order, country must be the first field.
         mEditor.addField(mCountryField);
-
-        boolean isStoredInAccount = mProfile.getSource() == Source.ACCOUNT;
         for (int i = 0; i < mAddressUiComponents.size(); i++) {
             AddressUiComponent component = mAddressUiComponents.get(i);
 
@@ -418,18 +406,6 @@
             field.setIsFullLine(component.isFullLine || component.id == AddressField.LOCALITY
                     || component.id == AddressField.DEPENDENT_LOCALITY);
 
-            // For account-stored profiles, we enforce that required fields are non-empty. This
-            // applies to all fields for a new profile, and previously non-empty fields for an
-            // existing profile.
-            String fieldContents = AutofillAddress.getProfileField(mProfile, component.id);
-            if (isStoredInAccount && component.isRequired
-                    && (isProfileNew || !TextUtils.isEmpty(fieldContents))) {
-                String message =
-                        mContext.getString(R.string.autofill_edit_address_required_field_error)
-                                .replace("$1", component.label);
-                field.setRequiredErrorMessage(message);
-            }
-
             mEditor.addField(field);
         }
         // Phone number (and email/nickname if applicable) are the last fields of the address.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfileBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfileBridge.java
index eedfba0..10447929 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfileBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfileBridge.java
@@ -166,21 +166,20 @@
      * @param languageCode The language code associated with the saved autofill profile that ui
      *                     components are being retrieved for; can be null if ui components are
      *                     being retrieved for a new profile.
-     * @param validation The target usage validation rules.
      * @return A list of address UI components. The ordering in the list specifies the order these
      *         components should appear in the UI.
      */
     public List<AddressUiComponent> getAddressUiComponents(
-            String countryCode, String languageCode, @AddressValidationType int validationType) {
+            String countryCode, String languageCode) {
         List<Integer> componentIds = new ArrayList<>();
         List<String> componentNames = new ArrayList<>();
         List<Integer> componentRequired = new ArrayList<>();
         List<Integer> componentLengths = new ArrayList<>();
         List<AddressUiComponent> uiComponents = new ArrayList<>();
 
-        mCurrentBestLanguageCode = AutofillProfileBridgeJni.get().getAddressUiComponents(
-                countryCode, languageCode, validationType, componentIds, componentNames,
-                componentRequired, componentLengths);
+        mCurrentBestLanguageCode =
+                AutofillProfileBridgeJni.get().getAddressUiComponents(countryCode, languageCode,
+                        componentIds, componentNames, componentRequired, componentLengths);
 
         for (int i = 0; i < componentIds.size(); i++) {
             uiComponents.add(new AddressUiComponent(componentIds.get(i), componentNames.get(i),
@@ -238,8 +237,7 @@
         void getSupportedCountries(List<String> countryCodes, List<String> countryNames);
         void getRequiredFields(String countryCode, List<Integer> requiredFields);
         String getAddressUiComponents(String countryCode, String languageCode,
-                @AddressValidationType int validationType, List<Integer> componentIds,
-                List<String> componentNames, List<Integer> componentRequired,
-                List<Integer> componentLengths);
+                List<Integer> componentIds, List<String> componentNames,
+                List<Integer> componentRequired, List<Integer> componentLengths);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
index ea3cc98f..de88b47 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
@@ -28,6 +28,11 @@
 import org.chromium.chrome.browser.commerce.ShoppingServiceFactory;
 import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksReader;
 import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.renderer_host.ChromeNavigationUIData;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabLaunchType;
+import org.chromium.chrome.browser.tabmodel.AsyncTabCreationParams;
+import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
 import org.chromium.chrome.browser.ui.native_page.BasicNativePage;
 import org.chromium.components.bookmarks.BookmarkId;
@@ -40,6 +45,7 @@
 import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar.SearchDelegate;
 import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate;
 import org.chromium.components.favicon.LargeIconBridge;
+import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.url.GURL;
 
 import java.util.List;
@@ -59,6 +65,7 @@
     private static boolean sPreventLoadingForTesting;
 
     private Context mContext;
+    private ComponentName mOpenBookmarkComponentName;
     private ViewGroup mMainView;
     private BookmarkModel mBookmarkModel;
     private BookmarkUndoController mUndoController;
@@ -95,7 +102,6 @@
     private BookmarkItemsAdapter mAdapter;
     private BookmarkDragStateDelegate mDragStateDelegate;
     private AdapterDataObserver mAdapterDataObserver;
-    private final BookmarkOpener mBookmarkOpener;
 
     private final ObservableSupplierImpl<Boolean> mBackPressStateSupplier =
             new ObservableSupplierImpl<>();
@@ -207,6 +213,7 @@
     public BookmarkManager(Context context, ComponentName openBookmarkComponentName,
             boolean isDialogUi, boolean isIncognito, SnackbarManager snackbarManager) {
         mContext = context;
+        mOpenBookmarkComponentName = openBookmarkComponentName;
         mIsDialogUi = isDialogUi;
         mIsIncognito = isIncognito;
 
@@ -290,8 +297,6 @@
                         FAVICON_MAX_CACHE_SIZE_BYTES);
         mLargeIconBridge.createCache(maxSize);
 
-        mBookmarkOpener = new BookmarkOpener(mBookmarkModel, mContext, openBookmarkComponentName);
-
         RecordUserAction.record("MobileBookmarkManagerOpen");
         if (!isDialogUi) {
             RecordUserAction.record("MobileBookmarkManagerPageOpen");
@@ -563,7 +568,10 @@
 
     @Override
     public void openBookmark(BookmarkId bookmark) {
-        if (!mBookmarkOpener.openBookmarkInCurrentTab(bookmark, mIsIncognito)) return;
+        if (!BookmarkUtils.openBookmark(
+                    mContext, mOpenBookmarkComponentName, mBookmarkModel, bookmark, mIsIncognito)) {
+            return;
+        }
 
         // Close bookmark UI. Keep the reading list page open.
         if (bookmark != null && bookmark.getType() != BookmarkType.READING_LIST) {
@@ -573,8 +581,21 @@
 
     @Override
     public void openBookmarksInNewTabs(List<BookmarkId> bookmarks, boolean incognito) {
-        if (mBookmarkOpener.openBookmarksInNewTabs(bookmarks, incognito)) {
-            BookmarkUtils.finishActivityOnPhone(mContext);
+        TabDelegate tabDelegate = new TabDelegate(incognito);
+        for (BookmarkId id : bookmarks) {
+            if (id == null) continue;
+            GURL url = mBookmarkModel.getBookmarkById(id).getUrl();
+            LoadUrlParams params = new LoadUrlParams(url);
+            ChromeNavigationUIData navData = new ChromeNavigationUIData();
+            navData.setBookmarkId(id.getType() == BookmarkType.NORMAL ? id.getId() : -1);
+            params.setNavigationUIDataSupplier(navData::createUnownedNativeCopy);
+            AsyncTabCreationParams asyncParams =
+                    new AsyncTabCreationParams(params, mOpenBookmarkComponentName);
+            tabDelegate.createNewTab(
+                    asyncParams, TabLaunchType.FROM_LONGPRESS_BACKGROUND, Tab.INVALID_TAB_ID);
+            if (id.getType() == BookmarkType.READING_LIST) {
+                mBookmarkModel.setReadStatusForReadingList(url, true);
+            }
         }
     }
 
@@ -670,8 +691,4 @@
     public static void preventLoadingForTesting(boolean preventLoading) {
         sPreventLoadingForTesting = preventLoading;
     }
-
-    public BookmarkOpener getBookmarkOpenerForTesting() {
-        return mBookmarkOpener;
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkOpener.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkOpener.java
deleted file mode 100644
index 3c39b1a..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkOpener.java
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.bookmarks;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.provider.Browser;
-import android.text.format.DateUtils;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import org.chromium.base.IntentUtils;
-import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.metrics.RecordUserAction;
-import org.chromium.chrome.browser.ActivityUtils;
-import org.chromium.chrome.browser.IntentHandler;
-import org.chromium.chrome.browser.document.ChromeLauncherActivity;
-import org.chromium.chrome.browser.tab.TabLaunchType;
-import org.chromium.components.bookmarks.BookmarkId;
-import org.chromium.components.bookmarks.BookmarkItem;
-import org.chromium.components.bookmarks.BookmarkType;
-import org.chromium.ui.base.PageTransition;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/** Consolidates logic about opening bookmarks. */
-public class BookmarkOpener {
-    private final BookmarkModel mModel;
-    private final Context mContext;
-    private final ComponentName mComponentName;
-
-    /**
-     * @param model The bookmark model, used to query for bookmark urls and type.
-     * @param context The android context, used to build the intent to open bookmarks.
-     * @param componentName The name of the parent component, can be null on tablets.
-     */
-    public BookmarkOpener(
-            BookmarkModel model, Context context, @Nullable ComponentName componentName) {
-        mModel = model;
-        mContext = context;
-        mComponentName = componentName;
-    }
-
-    /**
-     * Open the given id in the current tab.
-     *
-     * @param bookmarkIds The bookmark id to open.
-     * @param incognito Whether the bookmark should be opened in incognito mode.
-     * @return Whether the bookmark id was successfully opened.
-     */
-    public boolean openBookmarkInCurrentTab(BookmarkId id, boolean incognito) {
-        if (id == null) return false;
-        BookmarkItem item = mModel.getBookmarkById(id);
-        if (item == null) return false;
-        maybeMarkReadingListItemAsRead(item);
-        recordMetricsForOpenBookmarkInCurrentTab(item);
-
-        Intent intent = createBasicOpenIntent(item, incognito);
-        IntentHandler.startActivityForTrustedIntent(intent);
-        return true;
-    }
-
-    /**
-     * Open the given bookmarkIds in new tabs.
-     *
-     * @param bookmarkIds The bookmark ids to open.
-     * @param incognito Whether the bookmarks should be opened in incognito mode.
-     * @return Whether the bookmark ids were successfully opened.
-     */
-    public boolean openBookmarksInNewTabs(List<BookmarkId> bookmarkIds, boolean incognito) {
-        if (bookmarkIds == null || bookmarkIds.size() == 0) return false;
-
-        BookmarkItem firstItem = null;
-        ArrayList<String> additionalUrls = new ArrayList<>();
-        List<BookmarkItem> items = new ArrayList<>();
-        for (BookmarkId id : bookmarkIds) {
-            // Might need to check if this is a folder.
-            if (id == null) continue;
-            BookmarkItem item = mModel.getBookmarkById(id);
-            if (item == null) continue;
-            maybeMarkReadingListItemAsRead(item);
-
-            if (firstItem == null) {
-                firstItem = item;
-            } else {
-                additionalUrls.add(item.getUrl().getSpec());
-            }
-
-            // Collected for metrics to avoid additional JNI calls.
-            items.add(item);
-        }
-        recordMetricsForOpenBookmarksInNewTabs(items);
-
-        Intent intent = createBasicOpenIntent(firstItem, incognito);
-        intent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true);
-        intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, incognito);
-        intent.putExtra(IntentHandler.EXTRA_ADDITIONAL_URLS, additionalUrls);
-        IntentHandler.startActivityForTrustedIntent(intent);
-        return true;
-    }
-
-    private Intent createBasicOpenIntent(@NonNull BookmarkItem item, boolean incognito) {
-        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(item.getUrl().getSpec()));
-        intent.putExtra(
-                Browser.EXTRA_APPLICATION_ID, mContext.getApplicationContext().getPackageName());
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK);
-        intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_BOOKMARK_ID, item.getId().toString());
-        intent.putExtra(IntentHandler.EXTRA_INCOGNITO_MODE, incognito);
-
-        if (mComponentName != null) {
-            ActivityUtils.setNonAliasedComponentForMainBrowsingActivity(intent, mComponentName);
-        } else {
-            // If the bookmark manager is shown in a tab on a phone (rather than in a separate
-            // activity) the component name may be null. Send the intent through
-            // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012.
-            intent.setClass(mContext.getApplicationContext(), ChromeLauncherActivity.class);
-        }
-
-        // Reading list has special back button behavior which brings the reading list back up
-        // as the first back action when viewing an item. This is driven by the FROM_READING_LIST
-        // TabLaunchType.
-        if (item.getId().getType() == BookmarkType.READING_LIST) {
-            IntentHandler.setTabLaunchType(intent, TabLaunchType.FROM_READING_LIST);
-            intent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true);
-            intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, incognito);
-        }
-
-        IntentUtils.addTrustedIntentExtras(intent);
-        return intent;
-    }
-
-    private void maybeMarkReadingListItemAsRead(@NonNull BookmarkItem item) {
-        if (item.getId().getType() == BookmarkType.READING_LIST) {
-            mModel.setReadStatusForReadingList(item.getUrl(), true);
-        }
-    }
-
-    // Metrics
-
-    private void recordMetricsForOpenBookmarkInCurrentTab(@NonNull BookmarkItem item) {
-        RecordUserAction.record("MobileBookmarkManagerEntryOpened");
-        recordTypeOpened(item, "Bookmarks.OpenBookmarkType");
-        recordTimeSinceAdded(item, "Bookmarks.OpenBookmarkTimeInterval2.");
-    }
-
-    private void recordMetricsForOpenBookmarksInNewTabs(List<BookmarkItem> items) {
-        RecordUserAction.record("MobileBookmarkManagerMultipleEntriesOpened");
-
-        for (BookmarkItem item : items) {
-            recordTypeOpened(item, "Bookmarks.MultipleOpened.OpenBookmarkType");
-            recordTimeSinceAdded(item, "Bookmarks.MultipleOpened.OpenBookmarkTimeInterval2.");
-        }
-    }
-
-    private String bookmarkTypeToHistogramSuffix(@BookmarkType int type) {
-        switch (type) {
-            case BookmarkType.NORMAL:
-                return "Normal";
-            case BookmarkType.PARTNER:
-                return "Partner";
-            case BookmarkType.READING_LIST:
-                return "ReadingList";
-        }
-        assert false : "Unknown BookmarkType";
-        return "";
-    }
-
-    private void recordTypeOpened(BookmarkItem item, String histogram) {
-        RecordHistogram.recordEnumeratedHistogram(
-                histogram, item.getId().getType(), BookmarkType.LAST + 1);
-    }
-
-    private void recordTimeSinceAdded(BookmarkItem item, String histogramPrefix) {
-        RecordHistogram.recordCustomTimesHistogram(
-                histogramPrefix + bookmarkTypeToHistogramSuffix(item.getId().getType()),
-                System.currentTimeMillis() - item.getDateAdded(), 1, DateUtils.DAY_IN_MILLIS * 30,
-                50);
-    }
-}
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
index cd9a8d5..382b1917 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
@@ -5,33 +5,45 @@
 package org.chromium.chrome.browser.bookmarks;
 
 import android.app.Activity;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.LocaleList;
+import android.provider.Browser;
 import android.text.TextUtils;
+import android.text.format.DateUtils;
 
 import androidx.annotation.ColorRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
+import androidx.browser.customtabs.CustomTabsIntent;
 
 import org.chromium.base.BuildInfo;
 import org.chromium.base.Callback;
 import org.chromium.base.ContextUtils;
+import org.chromium.base.IntentUtils;
 import org.chromium.base.Log;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ActivityUtils;
 import org.chromium.chrome.browser.IntentHandler;
+import org.chromium.chrome.browser.IntentHandler.IncognitoCCTCallerId;
+import org.chromium.chrome.browser.LaunchIntentDispatcher;
 import org.chromium.chrome.browser.app.bookmarks.BookmarkActivity;
 import org.chromium.chrome.browser.app.bookmarks.BookmarkAddEditFolderActivity;
 import org.chromium.chrome.browser.app.bookmarks.BookmarkEditActivity;
 import org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity;
+import org.chromium.chrome.browser.browserservices.intents.BrowserServicesIntentDataProvider.CustomTabsUiType;
 import org.chromium.chrome.browser.commerce.ShoppingServiceFactory;
+import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
+import org.chromium.chrome.browser.customtabs.IncognitoCustomTabIntentDataProvider;
+import org.chromium.chrome.browser.document.ChromeLauncherActivity;
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
 import org.chromium.chrome.browser.incognito.IncognitoUtils;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
@@ -39,6 +51,7 @@
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.read_later.ReadingListUtils;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController;
@@ -53,6 +66,7 @@
 import org.chromium.components.profile_metrics.BrowserProfileType;
 import org.chromium.ui.UiUtils;
 import org.chromium.ui.base.DeviceFormFactor;
+import org.chromium.ui.base.PageTransition;
 import org.chromium.url.GURL;
 
 import java.text.DateFormat;
@@ -389,16 +403,17 @@
             RecordUserAction.record("MobileBookmarkManagerReopenBookmarksInSameSession");
         }
 
-        Intent intent = null;
-        Uri uri = Uri.parse(url);
+        // Tablet.
         if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(context)) {
-            intent = new Intent(Intent.ACTION_VIEW, uri);
-        } else {
-            intent = new Intent(context, BookmarkActivity.class);
-            intent.setData(uri);
+            openUrl(context, url, folderId, activity == null ? null : activity.getComponentName(),
+                    /*launchType=*/null, isIncognito);
+            return;
         }
 
+        // Phone.
+        Intent intent = new Intent(context, BookmarkActivity.class);
         intent.putExtra(IntentHandler.EXTRA_INCOGNITO_MODE, isIncognito);
+        intent.setData(Uri.parse(url));
         if (activity != null) {
             // Start from an existing activity.
             intent.putExtra(IntentHandler.EXTRA_PARENT_COMPONENT, activity.getComponentName());
@@ -488,6 +503,55 @@
     }
 
     /**
+     * Opens a bookmark and reports UMA.
+     * @param context The current context used to launch the intent.
+     * @param openBookmarkComponentName The component to use when opening a bookmark.
+     * @param model Bookmarks model to manage the bookmark.
+     * @param bookmarkId ID of the bookmark to be opened.
+     * @param isIncognito Whether the bookmark manager is opened in incognito mode.
+     * @return Whether the bookmark was successfully opened.
+     */
+    public static boolean openBookmark(Context context, ComponentName openBookmarkComponentName,
+            BookmarkModel model, @Nullable BookmarkId bookmarkId, boolean isIncognito) {
+        if (model.getBookmarkById(bookmarkId) == null) return false;
+
+        RecordUserAction.record("MobileBookmarkManagerEntryOpened");
+        RecordHistogram.recordEnumeratedHistogram(
+                "Bookmarks.OpenBookmarkType", bookmarkId.getType(), BookmarkType.LAST + 1);
+
+        BookmarkItem bookmarkItem = model.getBookmarkById(bookmarkId);
+        assert bookmarkItem != null;
+        RecordHistogram.recordCustomTimesHistogram("Bookmarks.OpenBookmarkTimeInterval2."
+                        + bookmarkTypeToHistogramSuffix(bookmarkId.getType()),
+                System.currentTimeMillis() - bookmarkItem.getDateAdded(), 1,
+                DateUtils.DAY_IN_MILLIS * 30, 50);
+
+        if (bookmarkItem.getId().getType() == BookmarkType.READING_LIST
+                && !bookmarkItem.isFolder()) {
+            openReadingListItem(context, bookmarkItem.getUrl().getSpec(), bookmarkItem.getId(),
+                    openBookmarkComponentName, isIncognito);
+            model.setReadStatusForReadingList(bookmarkItem.getUrl(), true);
+        } else {
+            openUrl(context, bookmarkItem.getUrl().getSpec(), bookmarkId, openBookmarkComponentName,
+                    /*launchType=*/null, isIncognito);
+        }
+        return true;
+    }
+
+    private static String bookmarkTypeToHistogramSuffix(@BookmarkType int type) {
+        switch (type) {
+            case BookmarkType.NORMAL:
+                return "Normal";
+            case BookmarkType.PARTNER:
+                return "Partner";
+            case BookmarkType.READING_LIST:
+                return "ReadingList";
+        }
+        assert false : "Unknown BookmarkType";
+        return "";
+    }
+
+    /**
      * @param context {@link Context} used to retrieve the drawable.
      * @param type The bookmark type of the folder.
      * @return A {@link Drawable} to use for displaying bookmark folders.
@@ -521,6 +585,81 @@
     }
 
     /**
+     * Opens a url.
+     *
+     * @param url Url to open.
+     * @param id The bookmarkId to open, can be null.
+     * @param componentName Name of the component opening the URL. If null, {@link
+     *          ChromeLauncherActivity} is used.
+     * @param launchType If not null, url is opened in a new tab with the specified {@link
+     *         TabLaunchType}.
+     */
+    private static void openUrl(Context context, String url, @Nullable BookmarkId id,
+            ComponentName componentName, @Nullable @TabLaunchType Integer launchType,
+            boolean isOffTheRecord) {
+        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+        intent.putExtra(
+                Browser.EXTRA_APPLICATION_ID, context.getApplicationContext().getPackageName());
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK);
+        if (id != null) {
+            intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_BOOKMARK_ID, id.toString());
+        }
+
+        if (launchType != null) {
+            IntentHandler.setTabLaunchType(intent, launchType);
+            if (isOffTheRecord) {
+                intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true);
+            } else {
+                intent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true);
+            }
+        } else {
+            intent.putExtra(IntentHandler.EXTRA_INCOGNITO_MODE, isOffTheRecord);
+        }
+
+        if (componentName != null) {
+            ActivityUtils.setNonAliasedComponentForMainBrowsingActivity(intent, componentName);
+        } else {
+            // If the bookmark manager is shown in a tab on a phone (rather than in a separate
+            // activity) the component name may be null. Send the intent through
+            // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012.
+            intent.setClass(context.getApplicationContext(), ChromeLauncherActivity.class);
+        }
+
+        IntentHandler.startActivityForTrustedIntent(intent);
+    }
+
+    private static void openReadingListItem(Context context, String url, BookmarkId id,
+            ComponentName componentName, boolean isOffTheRecord) {
+        openUrl(context, url, id, componentName, TabLaunchType.FROM_READING_LIST, isOffTheRecord);
+    }
+
+    private static void openReadingListInCustomTab(
+            Context context, String url, boolean isOffTheRecord) {
+        CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
+        builder.setShowTitle(true);
+        builder.setShareState(CustomTabsIntent.SHARE_STATE_ON);
+        CustomTabsIntent customTabIntent = builder.build();
+        customTabIntent.intent.setData(Uri.parse(url));
+
+        Intent intent = LaunchIntentDispatcher.createCustomTabActivityIntent(
+                context, customTabIntent.intent);
+        intent.setPackage(context.getPackageName());
+        intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
+        intent.putExtra(CustomTabIntentDataProvider.EXTRA_UI_TYPE, CustomTabsUiType.READ_LATER);
+
+        // Extras for incognito CCT.
+        if (isOffTheRecord) {
+            IncognitoCustomTabIntentDataProvider.addIncognitoExtrasForChromeFeatures(
+                    intent, IncognitoCCTCallerId.READ_LATER);
+        }
+
+        IntentUtils.addTrustedIntentExtras(intent);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        IntentHandler.startActivityForTrustedIntent(intent);
+    }
+
+    /**
      * Closes the {@link BookmarkActivity} on Phone. Does nothing on tablet.
      */
     public static void finishActivityOnPhone(Context context) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
index d0e297c..6a6dac00 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
@@ -297,7 +297,8 @@
                 CustomTabsConnection.getInstance(), intentDataProvider.getSession(),
                 mActivityLifecycleDispatcher, mFullscreenManager,
                 DeviceFormFactor.isWindowOnTablet(mWindowAndroid),
-                intentDataProvider.canInteractWithBackground());
+                intentDataProvider.canInteractWithBackground(),
+                intentDataProvider.showSideSheetMaximizeButton());
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
index 15735d86..de8bd377 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -241,6 +241,10 @@
     public static final String EXTRA_ENABLE_BACKGROUND_INTERACTION =
             "androix.browser.customtabs.extra.ENABLE_BACKGROUND_INTERACTION";
 
+    /** Extra that enables the maximization button on the side sheet Custom Tab toolbar. */
+    public static final String EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION =
+            "androix.browser.customtabs.extra.EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION";
+
     /**
      * Extra that, if set in combination with
      * {@link CustomTabsIntent#EXTRA_INITIAL_ACTIVITY_HEIGHT_PX}, defines the resize behavior of
@@ -889,6 +893,9 @@
         if (isUsingDynamicFeatures) {
             featureUsage.log(CustomTabsFeature.EXTRA_INTENT_FEATURE_OVERRIDES);
         }
+        if (showSideSheetMaximizeButton()) {
+            featureUsage.log(CustomTabsFeature.EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION);
+        }
     }
 
     @Override
@@ -1241,4 +1248,10 @@
 
     @Override
     public boolean canInteractWithBackground() { return mInteractWithBackground; }
+
+    @Override
+    public boolean showSideSheetMaximizeButton() {
+        return IntentUtils.safeGetBooleanExtra(
+                mIntent, EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION, false);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsFeatureUsage.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsFeatureUsage.java
index 786609d5..56b9ba8b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsFeatureUsage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsFeatureUsage.java
@@ -49,7 +49,9 @@
             CustomTabsFeature.EXTRA_INTENT_FEATURE_OVERRIDES,
             CustomTabsFeature.CTF_PARTIAL_SIDE_SHEET,
             CustomTabsFeature.EXTRA_ACTIVITY_SIDE_SHEET_BREAKPOINT_DP,
-            CustomTabsFeature.EXTRA_INITIAL_ACTIVITY_WIDTH_PX, CustomTabsFeature.COUNT})
+            CustomTabsFeature.EXTRA_INITIAL_ACTIVITY_WIDTH_PX,
+            CustomTabsFeature.EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION,
+            CustomTabsFeature.COUNT})
     @Retention(RetentionPolicy.SOURCE)
     public @interface CustomTabsFeature {
         /** Special enum for the start of a session. */
@@ -100,9 +102,10 @@
         int CTF_PARTIAL_SIDE_SHEET = 44;
         int EXTRA_ACTIVITY_SIDE_SHEET_BREAKPOINT_DP = 45;
         int EXTRA_INITIAL_ACTIVITY_WIDTH_PX = 46;
+        int EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION = 47;
 
         /** Total count of entries. */
-        int COUNT = 47;
+        int COUNT = 48;
     }
 
     // Whether flag-enabled or not.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/CustomTabHeightStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/CustomTabHeightStrategy.java
index e016231a..160213a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/CustomTabHeightStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/CustomTabHeightStrategy.java
@@ -32,7 +32,7 @@
             @Px int initialWidth, int breakPointDp, boolean isPartialCustomTabFixedHeight,
             CustomTabsConnection connection, @Nullable CustomTabsSessionToken session,
             ActivityLifecycleDispatcher lifecycleDispatcher, FullscreenManager fullscreenManager,
-            boolean isTablet, boolean interactWithBackground) {
+            boolean isTablet, boolean interactWithBackground, boolean showMaximizeButton) {
         if (initialHeight <= 0
                 && (!ChromeFeatureList.sCctResizableSideSheet.isEnabled() || initialWidth <= 0)) {
             return new CustomTabHeightStrategy();
@@ -43,13 +43,14 @@
                     breakPointDp, isPartialCustomTabFixedHeight,
                     (height, width)
                             -> connection.onResized(session, height, width),
-                    lifecycleDispatcher, fullscreenManager, isTablet, interactWithBackground);
+                    lifecycleDispatcher, fullscreenManager, isTablet, interactWithBackground,
+                    showMaximizeButton);
         } else {
             return new PartialCustomTabHeightStrategy(activity, initialHeight,
                     isPartialCustomTabFixedHeight,
                     (height, width)
                             -> connection.onResized(session, height, width),
-                    lifecycleDispatcher, fullscreenManager, isTablet, interactWithBackground,
+                    lifecycleDispatcher, fullscreenManager, isTablet, interactWithBackground, false,
                     new PartialCustomTabHandleStrategyFactory());
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabBaseStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabBaseStrategy.java
index eb445f6..243a6a5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabBaseStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabBaseStrategy.java
@@ -186,6 +186,8 @@
 
     protected abstract boolean shouldHaveNoShadowOffset();
 
+    protected abstract boolean isMaximized();
+
     protected boolean canInteractWithBackground() {
         return mInteractWithBackground;
     }
@@ -282,12 +284,13 @@
     }
 
     @VisibleForTesting
-    void setMockViewForTesting(View toolbar, View toolbarCoordinator) {
+    void setMockViewForTesting(ViewGroup coordinatorLayout, View toolbar, View toolbarCoordinator) {
         mPositionUpdater = this::updatePosition;
         mToolbarView = toolbar;
         mToolbarCoordinator = toolbarCoordinator;
 
         onPostInflationStartup();
+        mCoordinatorLayout = coordinatorLayout;
     }
 
     @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManager.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManager.java
index 279f2602..b4ad648e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManager.java
@@ -8,6 +8,7 @@
 import android.content.res.Configuration;
 import android.os.Handler;
 import android.view.View;
+import android.view.ViewGroup;
 
 import androidx.annotation.Px;
 import androidx.annotation.VisibleForTesting;
@@ -37,11 +38,13 @@
     private final FullscreenManager mFullscreenManager;
     private final boolean mIsTablet;
     private final boolean mInteractWithBackground;
+    private final boolean mShowMaximizeButton;
     private final PartialCustomTabVersionCompat mVersionCompat;
 
     // Simple factory interface creating a new SizeStrategy. Facilitates testing.
     interface SizeStrategyCreator {
-        PartialCustomTabBaseStrategy createForType(@PartialCustomTabType int type);
+        PartialCustomTabBaseStrategy createForType(
+                @PartialCustomTabType int type, boolean startMaximized);
     }
 
     private PartialCustomTabBaseStrategy mStrategy;
@@ -56,7 +59,8 @@
     public PartialCustomTabDisplayManager(Activity activity, @Px int initialHeight,
             @Px int initialWidth, int breakPointDp, boolean isFixedHeight,
             OnResizedCallback onResizedCallback, ActivityLifecycleDispatcher lifecycleDispatcher,
-            FullscreenManager fullscreenManager, boolean isTablet, boolean interactWithBackground) {
+            FullscreenManager fullscreenManager, boolean isTablet, boolean interactWithBackground,
+            boolean showMaximizeButton) {
         mActivity = activity;
         mUnclampedInitialHeight = initialHeight;
         mUnclampedInitialWidth = initialWidth;
@@ -66,6 +70,7 @@
         mFullscreenManager = fullscreenManager;
         mIsTablet = isTablet;
         mInteractWithBackground = interactWithBackground;
+        mShowMaximizeButton = showMaximizeButton;
 
         mActivityLifecycleDispatcher = lifecycleDispatcher;
         lifecycleDispatcher.register(this);
@@ -73,7 +78,7 @@
         mVersionCompat = PartialCustomTabVersionCompat.create(mActivity, this::updatePosition);
         mHandleStrategyFactory = new PartialCustomTabHandleStrategyFactory();
         mCurrentPartialCustomTabType = calculatePartialCustomTabType();
-        mStrategy = mSizeStrategyCreator.createForType(mCurrentPartialCustomTabType);
+        mStrategy = mSizeStrategyCreator.createForType(mCurrentPartialCustomTabType, false);
     }
 
     @PartialCustomTabType
@@ -89,10 +94,14 @@
     public void onConfigurationChanged(Configuration newConfig) {
         int type = calculatePartialCustomTabType();
         if (type != mCurrentPartialCustomTabType) {
+            boolean startMaximized = false;
+            if (mStrategy != null) {
+                startMaximized = mStrategy.isMaximized();
+                mStrategy.destroy();
+            }
+            mStrategy = mSizeStrategyCreator.createForType(type, startMaximized);
+            mCurrentPartialCustomTabType = type;
             new Handler().postDelayed(() -> {
-                if (mStrategy != null) mStrategy.destroy();
-                mStrategy = mSizeStrategyCreator.createForType(type);
-                mCurrentPartialCustomTabType = type;
                 mStrategy.onToolbarInitialized(
                         mToolbarCoordinatorView, mCustomTabToolbar, mToolbarCornerRadius);
                 mStrategy.onPostInflationStartup();
@@ -199,18 +208,19 @@
         return PartialCustomTabType.FULL_SIZE; // unreachable
     }
 
-    private PartialCustomTabBaseStrategy createSizeStrategy(@PartialCustomTabType int type) {
+    private PartialCustomTabBaseStrategy createSizeStrategy(
+            @PartialCustomTabType int type, boolean maximized) {
         switch (type) {
             case PartialCustomTabType.BOTTOM_SHEET: {
                 return new PartialCustomTabHeightStrategy(mActivity, mUnclampedInitialHeight,
                         mIsFixedHeight, mOnResizedCallback, mActivityLifecycleDispatcher,
-                        mFullscreenManager, mIsTablet, mInteractWithBackground,
+                        mFullscreenManager, mIsTablet, mInteractWithBackground, maximized,
                         mHandleStrategyFactory);
             }
             case PartialCustomTabType.SIDE_SHEET: {
                 return new PartialCustomTabSideSheetStrategy(mActivity, mUnclampedInitialWidth,
                         mOnResizedCallback, mFullscreenManager, mIsTablet, mInteractWithBackground,
-                        mHandleStrategyFactory);
+                        mShowMaximizeButton, maximized, mHandleStrategyFactory);
             }
             default: {
                 assert false : "Partial Custom Tab type not supported: " + type;
@@ -233,13 +243,13 @@
     }
 
     @VisibleForTesting
-    void setMocksForTesting(View toolbar, CustomTabToolbar customTabToolbar,
-            PartialCustomTabHandleStrategyFactory handleStrategyFactory,
+    void setMocksForTesting(ViewGroup coordinatorLayout, CustomTabToolbar toolbar,
+            View toolbarCoordinator, PartialCustomTabHandleStrategyFactory handleStrategyFactory,
             SizeStrategyCreator sizeStrategyCreator) {
-        mToolbarCoordinatorView = toolbar;
-        mCustomTabToolbar = customTabToolbar;
+        mToolbarCoordinatorView = toolbarCoordinator;
+        mCustomTabToolbar = toolbar;
         mHandleStrategyFactory = handleStrategyFactory;
         mSizeStrategyCreator = sizeStrategyCreator;
-        mStrategy.setMockViewForTesting(toolbar, customTabToolbar);
+        mStrategy.setMockViewForTesting(coordinatorLayout, toolbar, toolbarCoordinator);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategy.java
index 8038843..f2837315 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategy.java
@@ -128,7 +128,7 @@
     public PartialCustomTabHeightStrategy(Activity activity, @Px int initialHeight,
             boolean isFixedHeight, OnResizedCallback onResizedCallback,
             ActivityLifecycleDispatcher lifecycleDispatcher, FullscreenManager fullscreenManager,
-            boolean isTablet, boolean interactWithBackground,
+            boolean isTablet, boolean interactWithBackground, boolean startMaximized,
             PartialCustomTabHandleStrategyFactory handleStrategyFactory) {
         super(activity, onResizedCallback, fullscreenManager, isTablet, interactWithBackground,
                 handleStrategyFactory);
@@ -136,6 +136,7 @@
         int animTime = mActivity.getResources().getInteger(android.R.integer.config_mediumAnimTime);
         mTabAnimator = new TabAnimator(this, animTime, this::onMoveEnd);
         lifecycleDispatcher.register(this);
+        if (startMaximized) mStatus = HeightStatus.TOP;
 
         mSpinnerFadeoutAnimatorListener = new AnimatorListener() {
             @Override
@@ -680,6 +681,11 @@
         return mStatusbarHeight;
     }
 
+    @Override
+    protected boolean isMaximized() {
+        return mStatus == HeightStatus.TOP;
+    }
+
     @VisibleForTesting
     @Px
     int getFullyExpandedYWithAdjustment() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategy.java
index 72e480ec..0f5ebe5c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategy.java
@@ -9,6 +9,7 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.app.Activity;
 import android.graphics.drawable.GradientDrawable;
 import android.os.Handler;
@@ -20,6 +21,7 @@
 import android.view.animation.AccelerateInterpolator;
 
 import androidx.annotation.Px;
+import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.MathUtils;
 import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbar;
@@ -34,20 +36,36 @@
 public class PartialCustomTabSideSheetStrategy extends PartialCustomTabBaseStrategy {
     private static final float MINIMAL_WIDTH_RATIO = 0.33f;
     private final @Px int mUnclampedInitialWidth;
+    private final boolean mShowMaximizeButton;
 
-    private ValueAnimator mCloseAnimator;
+    private ValueAnimator mAnimator;
+    private Runnable mPostAnimationRunnable;
+    private boolean mIsMaximized;
 
     public PartialCustomTabSideSheetStrategy(Activity activity, @Px int initialWidth,
             CustomTabHeightStrategy.OnResizedCallback onResizedCallback,
             FullscreenManager fullscreenManager, boolean isTablet, boolean interactWithBackground,
+            boolean showMaximizeButton, boolean startMaximized,
             PartialCustomTabHandleStrategyFactory handleStrategyFactory) {
         super(activity, onResizedCallback, fullscreenManager, isTablet, interactWithBackground,
                 handleStrategyFactory);
 
         mUnclampedInitialWidth = initialWidth;
+        mShowMaximizeButton = showMaximizeButton;
         mPositionUpdater = this::updatePosition;
+        mIsMaximized = startMaximized;
 
-        setupCloseAnimation();
+        setupAnimator();
+    }
+
+    @Override
+    public void onPostInflationStartup() {
+        super.onPostInflationStartup();
+
+        if (mIsMaximized) {
+            mIsMaximized = false;
+            toggleMaximize();
+        }
     }
 
     @Override
@@ -71,10 +89,23 @@
         window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
         WindowManager.LayoutParams attrs = window.getAttributes();
 
-        int start = attrs.y;
-        int end = mHeight;
-        mCloseAnimator.setIntValues(start, end);
-        mCloseAnimator.start();
+        startAnimation(attrs.y, mHeight, (animator) -> {}, this::onCloseAnimationEnd);
+    }
+
+    private void onCloseAnimationEnd() {
+        assert mFinishRunnable != null;
+
+        mFinishRunnable.run();
+        mFinishRunnable = null;
+    }
+
+    private void configureLayoutBeyondScreen(boolean enable) {
+        Window window = mActivity.getWindow();
+        if (enable) {
+            window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
+        } else {
+            window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
+        }
     }
 
     @Override
@@ -84,10 +115,66 @@
 
         PartialCustomTabHandleStrategy handleStrategy = mHandleStrategyFactory.create(
                 getStrategyType(), mActivity, this::isFullHeight, () -> 0, null);
+        if (mShowMaximizeButton) toolbar.createSideSheetMaximizeButton(this::toggleMaximize);
         toolbar.setHandleStrategy(handleStrategy);
         updateDragBarVisibility(/*dragHandlebarVisibility*/ View.GONE);
     }
 
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    boolean toggleMaximize() {
+        mIsMaximized = !mIsMaximized;
+        if (mIsMaximized) {
+            setTopMargins(0, 0);
+        } else {
+            updateShadowOffset();
+        }
+        configureLayoutBeyondScreen(true);
+
+        // For smooth animation, make the window full-width and then translate it
+        // rather than resizing the window itself during the animation.
+        setWindowWidth(mVersionCompat.getDisplayWidth());
+        int start = mActivity.getWindow().getAttributes().x;
+        int end = mIsMaximized ? 0 : mVersionCompat.getDisplayWidth() - mUnclampedInitialWidth;
+        startAnimation(start, end, this::onMaximizeProgress, this::onMaximizeEnd);
+        return mIsMaximized;
+    }
+
+    private void setWindowWidth(int width) {
+        var attrs = mActivity.getWindow().getAttributes();
+        attrs.width = width;
+        mActivity.getWindow().setAttributes(attrs);
+    }
+
+    private void onMaximizeProgress(ValueAnimator animator) {
+        var attrs = mActivity.getWindow().getAttributes();
+        attrs.x = (int) animator.getAnimatedValue();
+        mActivity.getWindow().setAttributes(attrs);
+    }
+
+    private void onMaximizeEnd() {
+        if (isMaximized()) {
+            configureLayoutBeyondScreen(false);
+            notifyResized();
+        } else {
+            // System UI dimensions are not settled yet. Post the task.
+            new Handler().post(() -> {
+                configureLayoutBeyondScreen(false);
+                initializeSize();
+                notifyResized();
+            });
+        }
+    }
+
+    private void notifyResized() {
+        var attrs = mActivity.getWindow().getAttributes();
+        mOnResizedCallback.onResized(attrs.height, attrs.width);
+    }
+
+    @Override
+    protected boolean isMaximized() {
+        return mIsMaximized;
+    }
+
     @Override
     protected int getHandleHeight() {
         // TODO(crbug.com/1408288) by default the side-sheet will have no round corners so this will
@@ -126,7 +213,8 @@
 
     @Override
     protected boolean shouldHaveNoShadowOffset() {
-        return false;
+        // We remove shadow in maximized mode.
+        return isMaximized();
     }
 
     @Override
@@ -141,23 +229,29 @@
         mVersionCompat.setImeStateCallback(null);
     }
 
-    private void setupCloseAnimation() {
-        mCloseAnimator = new ValueAnimator();
-        mCloseAnimator.addListener(new AnimatorListenerAdapter() {
+    private void setupAnimator() {
+        mAnimator = new ValueAnimator();
+        mAnimator.addListener(new AnimatorListenerAdapter() {
             @Override
             public void onAnimationStart(Animator animation) {}
             @Override
             public void onAnimationEnd(Animator animation) {
-                assert mFinishRunnable != null;
-
-                mFinishRunnable.run();
-                mFinishRunnable = null;
+                mPostAnimationRunnable.run();
             }
         });
 
         int animTime = mActivity.getResources().getInteger(android.R.integer.config_mediumAnimTime);
-        mCloseAnimator.setDuration(animTime);
-        mCloseAnimator.setInterpolator(new AccelerateInterpolator());
+        mAnimator.setDuration(animTime);
+        mAnimator.setInterpolator(new AccelerateInterpolator());
+    }
+
+    private void startAnimation(
+            int start, int end, AnimatorUpdateListener updateListener, Runnable endRunnable) {
+        mAnimator.removeAllUpdateListeners();
+        mAnimator.addUpdateListener(updateListener);
+        mPostAnimationRunnable = endRunnable;
+        mAnimator.setIntValues(start, end);
+        mAnimator.start();
     }
 
     private void initializeSize() {
@@ -177,8 +271,8 @@
         attrs.width = width;
 
         attrs.y = mStatusbarHeight;
-        attrs.x = mVersionCompat.getDisplayWidth();
-        attrs.gravity = Gravity.TOP;
+        attrs.x = mVersionCompat.getDisplayWidth() - attrs.width;
+        attrs.gravity = Gravity.TOP | Gravity.START;
         mActivity.getWindow().setAttributes(attrs);
     }
 
@@ -210,4 +304,10 @@
         return MathUtils.clamp(unclampedWidth, mVersionCompat.getDisplayWidth(),
                 (int) (mVersionCompat.getDisplayWidth() * MINIMAL_WIDTH_RATIO));
     }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+        if (mShowMaximizeButton) ((CustomTabToolbar) mToolbarView).removeSideSheetMaximizeButton();
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
index 0a88e3d..26d3aa17 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
@@ -32,6 +32,7 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewStub;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 import android.widget.ImageView;
@@ -90,6 +91,7 @@
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.common.ContentUrlConstants;
+import org.chromium.ui.UiUtils;
 import org.chromium.ui.base.Clipboard;
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.interpolators.BakedBezierInterpolator;
@@ -160,6 +162,14 @@
     private HandleStrategy mHandleStrategy;
     private @CloseButtonPosition int mCloseButtonPosition;
 
+    /** Callback used to notify the maximize button on side sheet PCCT click event. */
+    public interface MaximizeButtonCallback {
+        /**
+         * @return {@code true} if the PCCT gets maximized. {@code false} if restored.
+         */
+        boolean onClick();
+    }
+
     /**
      * Constructor for getting this class inflated from an xml layout file.
      */
@@ -219,6 +229,8 @@
 
         // Add the view at the beginning of the child list.
         mCustomActionButtons.addView(button, 0);
+
+        updateMaximizeButtonPosition();
     }
 
     @Override
@@ -227,6 +239,7 @@
                 mCustomActionButtons.getChildCount() - 1 - index);
         assert button != null;
         updateCustomActionButtonVisuals(button, drawable, description);
+        updateMaximizeButtonPosition();
     }
 
     /**
@@ -254,6 +267,63 @@
         return mLocationBar;
     }
 
+    /**
+     * Create maximize button for side sheet CCT.
+     * @param onMaximizeClicked Callback to invoke when maximize button gets clicked.
+     */
+    public void createSideSheetMaximizeButton(MaximizeButtonCallback callback) {
+        if (!ChromeFeatureList.sCctResizableSideSheet.isEnabled()) return;
+        var maximizeButton = (ImageButton) findViewById(R.id.custom_tabs_sidepanel_maximize);
+        boolean buttonExists = maximizeButton != null;
+        if (buttonExists) {
+            maximizeButton.setVisibility(View.VISIBLE);
+        } else {
+            ViewStub maximizeButtonStub = findViewById(R.id.maximize_button_stub);
+            maximizeButtonStub.inflate();
+            maximizeButton = (ImageButton) findViewById(R.id.custom_tabs_sidepanel_maximize);
+            setMaximizeButtonDrawable(R.drawable.ic_fullscreen_enter);
+        }
+        maximizeButton.setOnClickListener((v) -> {
+            boolean maximized = callback.onClick();
+            setMaximizeButtonDrawable(
+                    maximized ? R.drawable.ic_fullscreen_exit : R.drawable.ic_fullscreen_enter);
+        });
+    }
+
+    private void setMaximizeButtonDrawable(@DrawableRes int drawableId) {
+        var maximizeButton = (ImageButton) findViewById(R.id.custom_tabs_sidepanel_maximize);
+        var d = UiUtils.getTintedDrawable(getContext(), drawableId, mTint);
+        updateCustomActionButtonVisuals(maximizeButton, d, null);
+        maximizeButton.setImageDrawable(d);
+    }
+
+    /**
+     * Remove maximize button from side sheet CCT toolbar.
+     */
+    public void removeSideSheetMaximizeButton() {
+        if (!ChromeFeatureList.sCctResizableSideSheet.isEnabled()) return;
+        var maximizeButton = (ImageButton) findViewById(R.id.custom_tabs_sidepanel_maximize);
+        maximizeButton.setOnClickListener(null);
+        maximizeButton.setVisibility(View.GONE);
+    }
+
+    private void updateMaximizeButtonPosition() {
+        ImageButton maximizeButton =
+                (ImageButton) findViewById(R.id.custom_tabs_sidepanel_maximize);
+        if (maximizeButton != null) {
+            FrameLayout.LayoutParams lp =
+                    (FrameLayout.LayoutParams) maximizeButton.getLayoutParams();
+            View buttonAtEnd =
+                    mCloseButtonPosition == CLOSE_BUTTON_POSITION_END ? mCloseButton : mMenuButton;
+            int margin = buttonAtEnd.getVisibility() == View.GONE
+                    ? 0
+                    : getResources().getDimensionPixelSize(R.dimen.toolbar_button_width);
+            if (mCustomActionButtons != null) margin += mCustomActionButtons.getWidth();
+            lp.setMarginEnd(margin);
+            maximizeButton.setLayoutParams(lp);
+        }
+    }
+
     private void updateCustomActionButtonVisuals(
             ImageButton button, Drawable drawable, String description) {
         Resources resources = getResources();
@@ -362,6 +432,9 @@
         for (int i = 0; i < numCustomActionButtons; i++) {
             updateButtonTint((ImageButton) mCustomActionButtons.getChildAt(i));
         }
+        ImageButton maximizeButton =
+                (ImageButton) findViewById(R.id.custom_tabs_sidepanel_maximize);
+        if (maximizeButton != null) updateButtonTint(maximizeButton);
         updateButtonTint(mLocationBar.getSecurityButton());
     }
 
@@ -586,6 +659,8 @@
         maybeSwapCloseAndMenuButtons();
         updateToolbarLayoutMargin();
         maybeAdjustButtonSpacingForCloseButtonPosition();
+
+        updateMaximizeButtonPosition();
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
 
@@ -641,6 +716,7 @@
                 (ViewGroup.MarginLayoutParams) mCustomActionButtons.getLayoutParams();
         p.setMarginEnd(0);
         mCustomActionButtons.setLayoutParams(p);
+        updateMaximizeButtonPosition();
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
index 1f500ab..d8a6855 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
@@ -20,7 +20,6 @@
 import org.chromium.chrome.browser.autofill.PhoneNumberUtil;
 import org.chromium.chrome.browser.autofill.prefeditor.EditorBase;
 import org.chromium.chrome.browser.autofill.prefeditor.EditorModel;
-import org.chromium.chrome.browser.autofill.settings.AddressValidationType;
 import org.chromium.chrome.browser.autofill.settings.AutofillProfileBridge;
 import org.chromium.chrome.browser.autofill.settings.AutofillProfileBridge.AddressField;
 import org.chromium.chrome.browser.autofill.settings.AutofillProfileBridge.AddressUiComponent;
@@ -527,8 +526,8 @@
      * the profile that's being edited.
      */
     private void addAddressFieldsToEditor(String countryCode, String languageCode) {
-        mAddressUiComponents = mAutofillProfileBridge.getAddressUiComponents(
-                countryCode, languageCode, AddressValidationType.PAYMENT_REQUEST);
+        mAddressUiComponents =
+                mAutofillProfileBridge.getAddressUiComponents(countryCode, languageCode);
         // In terms of order, country must be the first field.
         mCountryField.setCustomErrorMessage(getAddressError(AddressField.COUNTRY));
         mEditor.addField(mCountryField);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
index 19780131..0ea3736 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
@@ -657,6 +657,9 @@
             i++;
         }
 
+        String maniefstId =
+                TextUtils.isEmpty(info.manifestId()) ? info.manifestStartUrl() : info.manifestId();
+
         String[][] shortcuts = new String[info.shortcutItems().size()][];
         byte[][] shortcutIconData = new byte[info.shortcutItems().size()][];
         for (int j = 0; j < info.shortcutItems().size(); j++) {
@@ -690,14 +693,14 @@
         }
 
         WebApkUpdateManagerJni.get().storeWebApkUpdateRequestToFile(updateRequestPath,
-                info.manifestStartUrl(), info.scopeUrl(), info.name(), info.shortName(),
-                info.manifestId(), info.appKey(), primaryIconUrl, primaryIconData,
-                info.isIconAdaptive(), splashIconUrl, splashIconData, info.isSplashIconMaskable(),
-                iconUrls, iconHashes, info.displayMode(), info.orientation(), info.toolbarColor(),
-                info.backgroundColor(), shareTargetAction, shareTargetParamTitle,
-                shareTargetParamText, shareTargetIsMethodPost, shareTargetIsEncTypeMultipart,
-                shareTargetParamFileNames, shareTargetParamAccepts, shortcuts, shortcutIconData,
-                info.manifestUrl(), info.webApkPackageName(), versionCode, isManifestStale,
+                info.manifestStartUrl(), info.scopeUrl(), info.name(), info.shortName(), maniefstId,
+                info.appKey(), primaryIconUrl, primaryIconData, info.isIconAdaptive(),
+                splashIconUrl, splashIconData, info.isSplashIconMaskable(), iconUrls, iconHashes,
+                info.displayMode(), info.orientation(), info.toolbarColor(), info.backgroundColor(),
+                shareTargetAction, shareTargetParamTitle, shareTargetParamText,
+                shareTargetIsMethodPost, shareTargetIsEncTypeMultipart, shareTargetParamFileNames,
+                shareTargetParamAccepts, shortcuts, shortcutIconData, info.manifestUrl(),
+                info.webApkPackageName(), versionCode, isManifestStale,
                 isAppIdentityUpdateSupported, updateReasonsArray, callback);
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java
index 5865c33..ae4c6022 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java
@@ -359,6 +359,8 @@
     @SmallTest
     @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE})
     public void testReadingListOpenInRegularTab() throws Exception {
+        setFieldTrialParamForReadLater("use_cct", "false");
+
         addReadingListBookmark(TEST_PAGE_TITLE_GOOGLE, mTestUrlA);
 
         BookmarkPromoHeader.forcePromoStateForTests(SyncPromoState.NO_PROMO);
@@ -380,18 +382,17 @@
             Criteria.checkThat(activityTab.isIncognito(), Matchers.is(false));
         });
         pressBack();
-        BookmarkActivity bookmarkActivity = BookmarkTestUtil.waitForBookmarkActivity();
-
         onView(withText("Reading list")).check(matches(isDisplayed()));
     }
 
     @Test
     @SmallTest
     @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE})
+    @DisabledTest(message = "crbug.com/1369307")
     public void testReadingListOpenInIncognitoTab() throws Exception {
-        addReadingListBookmark(TEST_PAGE_TITLE_GOOGLE, mTestUrlA);
+        setFieldTrialParamForReadLater("use_cct", "false");
 
-        mActivityTestRule.loadUrlInNewTab(UrlConstants.NTP_NON_NATIVE_URL, /*incognito=*/true);
+        addReadingListBookmark(TEST_PAGE_TITLE_GOOGLE, mTestUrlA);
 
         BookmarkPromoHeader.forcePromoStateForTests(SyncPromoState.NO_PROMO);
         openBookmarkManager();
@@ -412,8 +413,6 @@
             Criteria.checkThat(activityTab.isIncognito(), Matchers.is(true));
         });
         pressBack();
-        BookmarkActivity bookmarkActivity = BookmarkTestUtil.waitForBookmarkActivity();
-
         onView(withText("Reading list")).check(matches(isDisplayed()));
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java
index e28d3cf0..08044d6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragmentTest.java
@@ -27,7 +27,6 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.autofill.AutofillTestHelper;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
-import org.chromium.chrome.browser.autofill.Source;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.settings.SettingsActivity;
 import org.chromium.chrome.browser.settings.SettingsActivityTestRule;
@@ -222,79 +221,6 @@
     @Test
     @MediumTest
     @Feature({"Preferences"})
-    @Features.EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_SUPPORT_FOR_HONORIFIC_PREFIXES})
-    public void testEditAccountProfile() throws Exception {
-        mHelper.setProfile(new AutofillProfile("", "https://example.com", true, Source.ACCOUNT,
-                "" /* honorific prefix */, "Account Updated #0", "Google", "111 Fourth St",
-                "California", "Los Angeles", "", "90291", "", "US", "650-253-0000",
-                "fourth@gmail.com", "en-US"));
-
-        AutofillProfilesFragment autofillProfileFragment = sSettingsActivityTestRule.getFragment();
-
-        // Check the preferences on the initial screen.
-        Assert.assertEquals(7 /* One toggle + one add button + 5 profiles. */,
-                autofillProfileFragment.getPreferenceScreen().getPreferenceCount());
-        AutofillProfileEditorPreference johnProfile =
-                autofillProfileFragment.findPreference("Account Updated #0");
-        Assert.assertNotNull(johnProfile);
-
-        // Invalid input.
-        updatePreferencesAndWait(autofillProfileFragment, johnProfile,
-                new String[] {"Dr.", "Account Updated #1", "Google",
-                        "" /* Street address is required. */, "Los Angeles", "CA", "90291",
-                        "650-253-0000", "edit@profile.com"},
-                R.id.editor_dialog_done_button, true);
-
-        // Fix invalid input.
-        updatePreferencesAndWait(autofillProfileFragment, johnProfile,
-                new String[] {"Dr.", "Account Updated #2", "Google",
-                        "222 Fourth St" /* Enter street address. */, "Los Angeles", "CA", "90291",
-                        "650-253-0000", "edit@profile.com"},
-                R.id.editor_dialog_done_button, false);
-        // Check if the preferences are updated correctly.
-        Assert.assertEquals(7 /* One toggle + one add button + five profiles. */,
-                autofillProfileFragment.getPreferenceScreen().getPreferenceCount());
-        AutofillProfileEditorPreference editedProfile =
-                autofillProfileFragment.findPreference("Account Updated #2");
-        Assert.assertNotNull(editedProfile);
-    }
-
-    @Test
-    @MediumTest
-    @Feature({"Preferences"})
-    @Features.EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_SUPPORT_FOR_HONORIFIC_PREFIXES})
-    public void testEditInvalidAccountProfile() throws Exception {
-        mHelper.setProfile(new AutofillProfile("", "https://example.com", true, Source.ACCOUNT,
-                "" /* honorific prefix */, "Account Updated #0", "Google",
-                "" /** Street address is required in US but already missing. */, "California",
-                "Los Angeles", "", "90291", "", "US", "650-253-0000", "fourth@gmail.com", "en-US"));
-
-        AutofillProfilesFragment autofillProfileFragment = sSettingsActivityTestRule.getFragment();
-
-        // Check the preferences on the initial screen.
-        Assert.assertEquals(7 /* One toggle + one add button + 5 profiles. */,
-                autofillProfileFragment.getPreferenceScreen().getPreferenceCount());
-        AutofillProfileEditorPreference johnProfile =
-                autofillProfileFragment.findPreference("Account Updated #0");
-        Assert.assertNotNull(johnProfile);
-
-        // Edit profile.
-        updatePreferencesAndWait(autofillProfileFragment, johnProfile,
-                new String[] {"Dr.", "Account Updated #1", "Google",
-                        "" /* Dont fix missing Street address. */, "Los Angeles", "CA", "90291",
-                        "650-253-0000", "edit@profile.com"},
-                R.id.editor_dialog_done_button, false);
-        // Check if the preferences are updated correctly.
-        Assert.assertEquals(7 /* One toggle + one add button + five profiles. */,
-                autofillProfileFragment.getPreferenceScreen().getPreferenceCount());
-        AutofillProfileEditorPreference editedProfile =
-                autofillProfileFragment.findPreference("Account Updated #1");
-        Assert.assertNotNull(editedProfile);
-    }
-
-    @Test
-    @MediumTest
-    @Feature({"Preferences"})
     public void testOpenProfileWithCompleteState() throws Exception {
         AutofillProfilesFragment autofillProfileFragment = sSettingsActivityTestRule.getFragment();
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java
deleted file mode 100644
index 3c7d2a8..0000000
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.bookmarks;
-
-import static androidx.test.espresso.Espresso.onView;
-import static androidx.test.espresso.action.ViewActions.click;
-import static androidx.test.espresso.matcher.ViewMatchers.withText;
-
-import android.support.test.InstrumentationRegistry;
-
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.test.filters.MediumTest;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.test.util.ApplicationTestUtils;
-import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.DoNotBatch;
-import org.chromium.base.test.util.UserActionTester;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.app.bookmarks.BookmarkActivity;
-import org.chromium.chrome.browser.flags.ChromeSwitches;
-import org.chromium.chrome.browser.tabmodel.TabModelSelector;
-import org.chromium.chrome.browser.ui.signin.SyncPromoController.SyncPromoState;
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
-import org.chromium.chrome.test.util.ActivityTestUtils;
-import org.chromium.chrome.test.util.BookmarkTestUtil;
-import org.chromium.chrome.test.util.MenuUtils;
-import org.chromium.components.bookmarks.BookmarkId;
-import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils;
-import org.chromium.components.embedder_support.util.UrlConstants;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.url.GURL;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/** Tests for the bookmark opener. */
-@RunWith(ChromeJUnit4ClassRunner.class)
-@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
-@DoNotBatch(reason = "Tabs can't be closed reliably between tests.")
-public class BookmarkOpenerTest {
-    @Rule
-    public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
-
-    private BookmarkOpener mBookmarkOpener;
-
-    private BookmarkModel mBookmarkModel;
-    private BookmarkActivity mBookmarkActivity;
-    private BookmarkManager mManager;
-    private RecyclerView mItemsContainer;
-
-    private TabModelSelector mTabModelSelector;
-    private UserActionTester mActionTester;
-
-    @Before
-    public void setUp() {
-        mActivityTestRule.startMainActivityOnBlankPage();
-        mActionTester = new UserActionTester();
-        mTabModelSelector = mActivityTestRule.getActivity().getTabModelSelectorSupplier().get();
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            mBookmarkModel = mActivityTestRule.getActivity().getBookmarkModelForTesting();
-        });
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        if (mBookmarkActivity != null) ApplicationTestUtils.finishActivity(mBookmarkActivity);
-        if (mActionTester != null) mActionTester.tearDown();
-    }
-
-    private void openBookmarkManager() {
-        BookmarkPromoHeader.forcePromoStateForTests(SyncPromoState.NO_PROMO);
-
-        if (mActivityTestRule.getActivity().isTablet()) {
-            mActivityTestRule.loadUrl(UrlConstants.BOOKMARKS_URL);
-            mItemsContainer = mActivityTestRule.getActivity().findViewById(
-                    R.id.selectable_list_recycler_view);
-            mItemsContainer.setItemAnimator(null); // Disable animation to reduce flakiness.
-            mManager = ((BookmarkPage) mActivityTestRule.getActivity()
-                                .getActivityTab()
-                                .getNativePage())
-                               .getManagerForTesting();
-        } else {
-            // Phone
-            mBookmarkActivity = ActivityTestUtils.waitForActivity(
-                    InstrumentationRegistry.getInstrumentation(), BookmarkActivity.class,
-                    new MenuUtils.MenuActivityTrigger(InstrumentationRegistry.getInstrumentation(),
-                            mActivityTestRule.getActivity(), R.id.all_bookmarks_menu_id));
-            mItemsContainer = mBookmarkActivity.findViewById(R.id.selectable_list_recycler_view);
-            mItemsContainer.setItemAnimator(null); // Disable animation to reduce flakiness.
-            mManager = mBookmarkActivity.getManagerForTesting();
-        }
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            mManager.getDragStateDelegate().setA11yStateForTesting(false);
-            mBookmarkOpener = mManager.getBookmarkOpenerForTesting();
-        });
-    }
-
-    void openRootFolder() {
-        TestThreadUtils.runOnUiThreadBlocking(
-                () -> mManager.openFolder(mBookmarkModel.getRootFolderId()));
-        RecyclerViewTestUtils.waitForStableRecyclerView(mItemsContainer);
-    }
-
-    void openMobileBookmarks() {
-        openRootFolder();
-
-        onView(withText("Mobile bookmarks")).perform(click());
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-    }
-
-    void openReadingList() {
-        openRootFolder();
-
-        onView(withText("Reading list")).perform(click());
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-    }
-
-    @Test
-    @MediumTest
-    public void testOpenBookmarkInCurrentTab() {
-        GURL url = new GURL(UrlConstants.ABOUT_URL);
-        BookmarkId id = addMobileBookmark("test", url);
-        openBookmarkManager();
-        openMobileBookmarks();
-
-        TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> mBookmarkOpener.openBookmarkInCurrentTab(id, /*incognito=*/false));
-        CriteriaHelper.pollUiThread(
-                () -> mActivityTestRule.getActivity().getActivityTab().getUrl().equals(url));
-        Assert.assertEquals(1, mActivityTestRule.tabsCount(/*incognito=*/false));
-
-        Assert.assertTrue(mActionTester.getActions().contains("MobileBookmarkManagerEntryOpened"));
-        Assert.assertEquals(
-                1, RecordHistogram.getHistogramTotalCountForTesting("Bookmarks.OpenBookmarkType"));
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramTotalCountForTesting(
-                        "Bookmarks.OpenBookmarkTimeInterval2.Normal"));
-    }
-
-    @Test
-    @MediumTest
-    public void testOpenBookmarkInCurrentTab_ReadingList() {
-        GURL url = new GURL("https://google.com"); // Chrome URLs not allowed for reading list
-        BookmarkId id = addReadingListBookmark("test", url);
-        openBookmarkManager();
-        openReadingList();
-
-        TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> mBookmarkOpener.openBookmarkInCurrentTab(id, /*incognito=*/false));
-        CriteriaHelper.pollUiThread(
-                () -> mActivityTestRule.getActivity().getActivityTab().getUrl().equals(url));
-        Assert.assertEquals("Reading List will always open in a new tab", 2,
-                mActivityTestRule.tabsCount(/*incognito=*/false));
-
-        Assert.assertTrue(mActionTester.getActions().contains("MobileBookmarkManagerEntryOpened"));
-        Assert.assertEquals(
-                1, RecordHistogram.getHistogramTotalCountForTesting("Bookmarks.OpenBookmarkType"));
-        Assert.assertEquals(1,
-                RecordHistogram.getHistogramTotalCountForTesting(
-                        "Bookmarks.OpenBookmarkTimeInterval2.ReadingList"));
-    }
-
-    @Test
-    @MediumTest
-    public void testOpenBookmarkInCurrentTab_Incognito() {
-        GURL url = new GURL(UrlConstants.ABOUT_URL);
-        BookmarkId id = addMobileBookmark("test", url);
-
-        mActivityTestRule.loadUrlInNewTab(UrlConstants.NTP_NON_NATIVE_URL, /*incognito=*/true);
-
-        openBookmarkManager();
-        openMobileBookmarks();
-
-        TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> mBookmarkOpener.openBookmarkInCurrentTab(id, /*incognito=*/true));
-        CriteriaHelper.pollUiThread(
-                () -> mActivityTestRule.getActivity().getActivityTab().getUrl().equals(url));
-        Assert.assertEquals(1, mActivityTestRule.tabsCount(/*incognito=*/true));
-    }
-
-    @Test
-    @MediumTest
-    public void testOpenBookmarksInNewTabs() {
-        GURL url = new GURL(UrlConstants.ABOUT_URL);
-
-        List<BookmarkId> ids = new ArrayList<>();
-        ids.add(addMobileBookmark("test", url));
-        ids.add(addMobileBookmark("test1", new GURL(UrlConstants.NTP_NON_NATIVE_URL)));
-        ids.add(addMobileBookmark("test2", new GURL(UrlConstants.NTP_NON_NATIVE_URL)));
-        openBookmarkManager();
-        openMobileBookmarks();
-
-        TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> mBookmarkOpener.openBookmarksInNewTabs(ids, /*incognito=*/false));
-        CriteriaHelper.pollUiThread(
-                () -> mActivityTestRule.getActivity().getActivityTab().getUrl().equals(url));
-        Assert.assertEquals(4, mActivityTestRule.tabsCount(/*incognito=*/false));
-
-        Assert.assertTrue(
-                mActionTester.getActions().contains("MobileBookmarkManagerMultipleEntriesOpened"));
-        Assert.assertEquals(3,
-                RecordHistogram.getHistogramTotalCountForTesting(
-                        "Bookmarks.MultipleOpened.OpenBookmarkType"));
-        Assert.assertEquals(3,
-                RecordHistogram.getHistogramTotalCountForTesting(
-                        "Bookmarks.MultipleOpened.OpenBookmarkTimeInterval2.Normal"));
-    }
-
-    @Test
-    @MediumTest
-    public void testOpenBookmarksInNewTabs_Incognito() {
-        GURL url = new GURL(UrlConstants.ABOUT_URL);
-
-        List<BookmarkId> ids = new ArrayList<>();
-        ids.add(addMobileBookmark("test", url));
-        ids.add(addMobileBookmark("test1", new GURL(UrlConstants.NTP_NON_NATIVE_URL)));
-        ids.add(addMobileBookmark("test2", new GURL(UrlConstants.NTP_NON_NATIVE_URL)));
-
-        mActivityTestRule.loadUrlInNewTab(UrlConstants.NTP_NON_NATIVE_URL, /*incognito=*/true);
-
-        openBookmarkManager();
-        openMobileBookmarks();
-
-        TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> mBookmarkOpener.openBookmarksInNewTabs(ids, /*incognito=*/true));
-        CriteriaHelper.pollUiThread(
-                () -> mActivityTestRule.getActivity().getActivityTab().getUrl().equals(url));
-        Assert.assertEquals(4, mActivityTestRule.tabsCount(/*incognito=*/true));
-    }
-
-    private BookmarkId addMobileBookmark(final String title, GURL url) {
-        BookmarkTestUtil.readPartnerBookmarks(mActivityTestRule);
-        BookmarkTestUtil.waitForBookmarkModelLoaded();
-        return TestThreadUtils.runOnUiThreadBlockingNoException(
-                ()
-                        -> mBookmarkModel.addBookmark(
-                                mBookmarkModel.getMobileFolderId(), 0, title, url));
-    }
-
-    private BookmarkId addReadingListBookmark(final String title, final GURL url) {
-        BookmarkTestUtil.readPartnerBookmarks(mActivityTestRule);
-        BookmarkTestUtil.waitForBookmarkModelLoaded();
-        BookmarkId bookmarkId = TestThreadUtils.runOnUiThreadBlockingNoException(
-                () -> mBookmarkModel.addToReadingList(title, url));
-        CriteriaHelper.pollUiThread(() -> mBookmarkModel.getReadingListItem(url) != null);
-        return bookmarkId;
-    }
-}
\ No newline at end of file
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java
index 7c7d8d2d3..270fb48a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteTest.java
@@ -302,6 +302,7 @@
     @Features.EnableFeatures({ChromeFeatureList.PAGE_INFO_ABOUT_THIS_SITE_EN,
             ChromeFeatureList.PAGE_INFO_ABOUT_THIS_SITE_NON_EN,
             ChromeFeatureList.PAGE_INFO_ABOUT_THIS_SITE_MORE_INFO})
+    @Features.DisableFeatures(ChromeFeatureList.PAGE_INFO_ABOUT_THIS_SITE_IMPROVED_BOTTOMSHEET)
     public void
     testAboutThisSiteOpensEphemeralTab() throws Exception {
         mockResponse(createDescription());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
index 21b4987..975dceeb 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
@@ -73,6 +73,7 @@
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.sync.UserSelectableType;
 import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.ui.test.util.BlankUiTestActivity;
@@ -80,6 +81,7 @@
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Render tests for sync consent fragment.
@@ -90,6 +92,15 @@
     private static final int RENDER_REVISION = 1;
     private static final String RENDER_DESCRIPTION = "Change button style";
     private static final String NEW_ACCOUNT_NAME = "new.account@gmail.com";
+    // TODO(https://crbug.com/1414078): Use ALL_SELECTABLE_TYPES defined in {@link SyncServiceImpl}
+    // here.
+    private static final Set<Integer> ALL_CLANK_SYNCABLE_DATA_TYPES = Set.of(
+            UserSelectableType.AUTOFILL, UserSelectableType.BOOKMARKS, UserSelectableType.PASSWORDS,
+            UserSelectableType.PREFERENCES, UserSelectableType.TABS, UserSelectableType.HISTORY,
+            UserSelectableType.READING_LIST);
+    private static final Set<Integer> HISTORY_SYNC_DATA_TYPES =
+            Set.of(UserSelectableType.HISTORY, UserSelectableType.TABS);
+
     /**
      * This class is used to test {@link SyncConsentFirstRunFragment}.
      */
@@ -507,7 +518,7 @@
                 });
         onView(withText(accountInfo.getEmail())).check(matches(isDisplayed()));
         onView(withId(R.id.signin_details_description)).perform(ViewUtils.clickOnClickableSpan(0));
-        // Wait for sign in process to finish.
+        // Wait for sync opt-in process to finish.
         CriteriaHelper.pollUiThread(() -> {
             return IdentityServicesProvider.get()
                     .getSigninManager(Profile.getLastUsedRegularProfile())
@@ -517,6 +528,8 @@
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             assertTrue(SyncService.get().isSyncRequested());
             assertFalse(SyncService.get().isFirstSetupComplete());
+            assertEquals(ALL_CLANK_SYNCABLE_DATA_TYPES, SyncService.get().getSelectedTypes());
+            assertTrue(SyncService.get().hasKeepEverythingSynced());
         });
         // Close the SettingsActivity.
         onView(withId(R.id.cancel_button)).perform(click());
@@ -536,7 +549,7 @@
                 });
         onView(withId(R.id.sync_consent_details_description))
                 .perform(ViewUtils.clickOnClickableSpan(0));
-        // Wait for sign in process to finish.
+        // Wait for sync opt-in process to finish.
         CriteriaHelper.pollUiThread(() -> {
             return IdentityServicesProvider.get()
                     .getSigninManager(Profile.getLastUsedRegularProfile())
@@ -546,6 +559,8 @@
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             assertTrue(SyncService.get().isSyncRequested());
             assertFalse(SyncService.get().isFirstSetupComplete());
+            assertEquals(HISTORY_SYNC_DATA_TYPES, SyncService.get().getSelectedTypes());
+            assertFalse(SyncService.get().hasKeepEverythingSynced());
         });
         // Close the SettingsActivity.
         onView(withId(R.id.cancel_button)).perform(click());
@@ -644,6 +659,10 @@
         onView(withId(R.id.positive_button)).check(matches(withText(R.string.signin_add_account)));
         onView(withId(R.id.negative_button)).check(matches(withText(R.string.cancel)));
         settingsHistogram.assertExpected();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            assertEquals(ALL_CLANK_SYNCABLE_DATA_TYPES, SyncService.get().getSelectedTypes());
+            assertTrue(SyncService.get().hasKeepEverythingSynced());
+        });
     }
 
     @Test
@@ -728,6 +747,33 @@
     }
 
     @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
+    public void testTangibleSyncConsentFragmentOnlyEnablesSpecificDataTypes() {
+        CoreAccountInfo accountInfo =
+                mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+        mSyncConsentActivity = ActivityTestUtils.waitForActivity(
+                InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
+                    SyncConsentActivityLauncherImpl.get().launchActivityForTangibleSyncFlow(
+                            mChromeActivityTestRule.getActivity(), SigninAccessPoint.SETTINGS,
+                            accountInfo.getEmail());
+                });
+        onView(withId(R.id.positive_button)).perform(click());
+        // Wait for sync opt-in process to finish.
+        CriteriaHelper.pollUiThread(() -> {
+            return IdentityServicesProvider.get()
+                    .getSigninManager(Profile.getLastUsedRegularProfile())
+                    .getIdentityManager()
+                    .hasPrimaryAccount(ConsentLevel.SYNC);
+        });
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            assertEquals(HISTORY_SYNC_DATA_TYPES, SyncService.get().getSelectedTypes());
+            assertFalse(SyncService.get().hasKeepEverythingSynced());
+        });
+    }
+
+    @Test
     @LargeTest
     @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
     public void testSyncConsentFragmentAddAccountFlowCancelled() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
index fc4052f..641a1de 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
@@ -798,4 +798,24 @@
                 mTestServer, mTab, WEBAPK_MANIFEST_URL);
         Assert.assertFalse(checkUpdateNeeded(creationData, /* acceptDialogIfAppears= */ false));
     }
+
+    @Test
+    @MediumTest
+    @Feature({"WebApk"})
+    public void testEmptyUniqueIdStaleManifestUpdate() throws Exception {
+        CreationData creationData = defaultCreationData();
+        creationData.manifestId = null;
+        // Set a small shellVersion to force a stale manifest update.
+        creationData.shellVersion = -1;
+
+        mActivityTestRule.loadUrl(mTestServer.getURL("/"));
+
+        waitForUpdate(creationData);
+        assertUpdateReasonsEqual(WebApkUpdateReason.OLD_SHELL_APK);
+
+        assertNotNull(mUpdateRequestPath);
+        WebApkProto.WebApk proto = parseRequestProto(mUpdateRequestPath);
+        assertEquals(proto.getAppKey(), mTestServer.getURL(WEBAPK_MANIFEST_URL));
+        assertEquals(proto.getManifest().getId(), mTestServer.getURL(WEBAPK_START_URL));
+    }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManagerTest.java
index 62ae09d..7745fe2 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabDisplayManagerTest.java
@@ -6,8 +6,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-
-import android.content.res.Configuration;
+import static org.junit.Assert.assertTrue;
 
 import androidx.annotation.Px;
 
@@ -51,16 +50,18 @@
         PartialCustomTabDisplayManager displayManager = new PartialCustomTabDisplayManager(
                 mPCCTTestRule.mActivity, heightPx, widthPx, breakPointDp, false,
                 mPCCTTestRule.mOnResizedCallback, mPCCTTestRule.mActivityLifecycleDispatcher,
-                mPCCTTestRule.mFullscreenManager, false, true);
+                mPCCTTestRule.mFullscreenManager, false, true, /*showMaximizeButton=*/true);
         var sizeStrategyCreator = displayManager.getSizeStrategyCreatorForTesting();
-        SizeStrategyCreator testSizeStrategyCreator = (type) -> {
-            var strategy = sizeStrategyCreator.createForType(type);
+        SizeStrategyCreator testSizeStrategyCreator = (type, maximized) -> {
+            var strategy = sizeStrategyCreator.createForType(type, maximized);
             strategy.setFullscreenSupplierForTesting(() -> mFullscreen);
+            strategy.setMockViewForTesting(mPCCTTestRule.mCoordinatorLayout,
+                    mPCCTTestRule.mToolbarView, mPCCTTestRule.mToolbarCoordinator);
             return strategy;
         };
-        displayManager.setMocksForTesting(mPCCTTestRule.mToolbarView,
-                mPCCTTestRule.mCustomTabToolbar, mPCCTTestRule.mHandleStrategyFactory,
-                testSizeStrategyCreator);
+        displayManager.setMocksForTesting(mPCCTTestRule.mCoordinatorLayout,
+                mPCCTTestRule.mToolbarView, mPCCTTestRule.mToolbarCoordinator,
+                mPCCTTestRule.mHandleStrategyFactory, testSizeStrategyCreator);
         return displayManager;
     }
 
@@ -131,7 +132,6 @@
 
         assertEquals("Bottom-Sheet should be the active strategy",
                 PartialCustomTabType.BOTTOM_SHEET, displayManager.getActiveStrategyType());
-        mPCCTTestRule.mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
         mPCCTTestRule.configLandscapeMode();
         displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
 
@@ -148,7 +148,6 @@
 
         assertEquals("Side-Sheet should be the active strategy", PartialCustomTabType.SIDE_SHEET,
                 displayManager.getActiveStrategyType());
-        mPCCTTestRule.mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT;
         mPCCTTestRule.configPortraitMode();
         displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
 
@@ -165,7 +164,6 @@
 
         assertEquals("Bottom-Sheet should be the active strategy",
                 PartialCustomTabType.BOTTOM_SHEET, displayManager.getActiveStrategyType());
-        mPCCTTestRule.mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT;
         displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
         assertEquals("Bottom-Sheet should be the active strategy",
                 PartialCustomTabType.BOTTOM_SHEET, displayManager.getActiveStrategyType());
@@ -176,7 +174,6 @@
         mPCCTTestRule.configLandscapeMode();
         PartialCustomTabDisplayManager displayManager = createPcctDisplayManager();
 
-        mPCCTTestRule.mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
         displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
         var attrs = mPCCTTestRule.getWindowAttributes();
         int height = attrs.height;
@@ -185,13 +182,20 @@
         mFullscreen = true;
         displayManager.getSizeStrategyForTesting().onEnterFullscreen(null, null);
 
-        mPCCTTestRule.mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT;
+        mPCCTTestRule.configPortraitMode();
         displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
+        PartialCustomTabTestRule.waitForAnimationToFinish();
+
+        assertEquals("Bottom-Sheet should be the active strategy",
+                PartialCustomTabType.BOTTOM_SHEET, displayManager.getActiveStrategyType());
         // Bottom-sheet strategy is now in action. Verify its top margin is removed
         // for the correct fullscreen UI.
         assertEquals("Top margin should be zero in fullscreen", 0,
                 displayManager.getSizeStrategyForTesting().getTopMarginForTesting());
 
+        mPCCTTestRule.configLandscapeMode();
+        displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
+
         mFullscreen = false;
         displayManager.getSizeStrategyForTesting().onExitFullscreen(null);
         PartialCustomTabTestRule.waitForAnimationToFinish();
@@ -201,4 +205,41 @@
         assertEquals("Height should be restored.", height, attrs.height);
         assertEquals("Width should be restored.", width, attrs.width);
     }
+
+    @Test
+    public void rotateInMaximizeMode() {
+        mPCCTTestRule.configLandscapeMode();
+        PartialCustomTabDisplayManager displayManager = createPcctDisplayManager();
+
+        var attrs = mPCCTTestRule.getWindowAttributes();
+        int height = attrs.height;
+        int width = attrs.width;
+
+        var sideSheetStrategy =
+                (PartialCustomTabSideSheetStrategy) displayManager.getSizeStrategyForTesting();
+        sideSheetStrategy.toggleMaximize();
+        assertTrue("Should be in maximized state.", sideSheetStrategy.isMaximized());
+
+        mPCCTTestRule.configPortraitMode();
+        displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
+        PartialCustomTabTestRule.waitForAnimationToFinish();
+
+        // Strategy is now set to bottom sheet. Verify it starts in expanded state.
+        var bottomSheetStrategy =
+                (PartialCustomTabHeightStrategy) displayManager.getSizeStrategyForTesting();
+        assertTrue("Bottom sheet must start in expanded state.", bottomSheetStrategy.isMaximized());
+
+        mPCCTTestRule.configLandscapeMode();
+        displayManager.onConfigurationChanged(mPCCTTestRule.mConfiguration);
+
+        sideSheetStrategy =
+                (PartialCustomTabSideSheetStrategy) displayManager.getSizeStrategyForTesting();
+        sideSheetStrategy.toggleMaximize();
+        PartialCustomTabTestRule.waitForAnimationToFinish();
+
+        attrs = mPCCTTestRule.getWindowAttributes();
+        assertFalse("Should not be in maximized state.", sideSheetStrategy.isMaximized());
+        assertEquals("Height should be restored.", height, attrs.height);
+        assertEquals("Width should be restored.", width, attrs.width);
+    }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategyTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategyTest.java
index 7f682ee..7ce8afa7 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategyTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabHeightStrategyTest.java
@@ -84,7 +84,7 @@
         PartialCustomTabHeightStrategy pcct = new PartialCustomTabHeightStrategy(
                 mPCCTTestRule.mActivity, 500, false, mPCCTTestRule.mOnResizedCallback,
                 mPCCTTestRule.mActivityLifecycleDispatcher, mPCCTTestRule.mFullscreenManager, false,
-                false, mPCCTTestRule.mHandleStrategyFactory);
+                false, /*startMaximized=*/false, mPCCTTestRule.mHandleStrategyFactory);
         pcct.setMockViewForTesting(mPCCTTestRule.mNavbar, mPCCTTestRule.mSpinnerView,
                 mPCCTTestRule.mSpinner, mPCCTTestRule.mToolbarView,
                 mPCCTTestRule.mToolbarCoordinator, mPCCTTestRule.mHandleStrategyFactory);
@@ -99,7 +99,7 @@
         PartialCustomTabHeightStrategy pcct = new PartialCustomTabHeightStrategy(
                 mPCCTTestRule.mActivity, heightPx, isFixedHeight, mPCCTTestRule.mOnResizedCallback,
                 mPCCTTestRule.mActivityLifecycleDispatcher, mPCCTTestRule.mFullscreenManager, false,
-                true, mPCCTTestRule.mHandleStrategyFactory);
+                true, /*startMaxmized=*/false, mPCCTTestRule.mHandleStrategyFactory);
         pcct.setMockViewForTesting(mPCCTTestRule.mNavbar, mPCCTTestRule.mSpinnerView,
                 mPCCTTestRule.mSpinner, mPCCTTestRule.mToolbarView,
                 mPCCTTestRule.mToolbarCoordinator, mPCCTTestRule.mHandleStrategyFactory);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategyTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategyTest.java
index 22b3e5b..eb6860b9 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategyTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabSideSheetStrategyTest.java
@@ -17,6 +17,7 @@
 import static org.chromium.chrome.browser.customtabs.features.partialcustomtab.PartialCustomTabTestRule.DEVICE_HEIGHT_LANDSCAPE;
 import static org.chromium.chrome.browser.customtabs.features.partialcustomtab.PartialCustomTabTestRule.DEVICE_WIDTH;
 import static org.chromium.chrome.browser.customtabs.features.partialcustomtab.PartialCustomTabTestRule.DEVICE_WIDTH_LANDSCAPE;
+import static org.chromium.chrome.browser.customtabs.features.partialcustomtab.PartialCustomTabTestRule.FULL_HEIGHT;
 
 import android.os.Build;
 import android.view.View;
@@ -54,11 +55,12 @@
     public final PartialCustomTabTestRule mPCCTTestRule = new PartialCustomTabTestRule();
 
     private PartialCustomTabSideSheetStrategy createPcctSideSheetStrategy(@Px int widthPx) {
-        PartialCustomTabSideSheetStrategy pcct =
-                new PartialCustomTabSideSheetStrategy(mPCCTTestRule.mActivity, widthPx,
-                        mPCCTTestRule.mOnResizedCallback, mPCCTTestRule.mFullscreenManager, false,
-                        true, mPCCTTestRule.mHandleStrategyFactory);
-        pcct.setMockViewForTesting(mPCCTTestRule.mToolbarView, mPCCTTestRule.mToolbarCoordinator);
+        PartialCustomTabSideSheetStrategy pcct = new PartialCustomTabSideSheetStrategy(
+                mPCCTTestRule.mActivity, widthPx, mPCCTTestRule.mOnResizedCallback,
+                mPCCTTestRule.mFullscreenManager, false, true, /*showMaximizedButton=*/true,
+                /*startMaximized=*/false, mPCCTTestRule.mHandleStrategyFactory);
+        pcct.setMockViewForTesting(mPCCTTestRule.mCoordinatorLayout, mPCCTTestRule.mToolbarView,
+                mPCCTTestRule.mToolbarCoordinator);
         return pcct;
     }
 
@@ -216,6 +218,25 @@
         verify(mPCCTTestRule.mOnResizedCallback).onResized(eq(height), eq(width));
     }
 
+    @Test
+    public void enterAndExitMaximizeMode() {
+        var strategy = createPcctSideSheetStrategy(2000);
+        assertFalse(getWindowAttributes().isFullscreen());
+        int height = getWindowAttributes().height;
+        int width = getWindowAttributes().width;
+
+        strategy.toggleMaximize();
+        PartialCustomTabTestRule.waitForAnimationToFinish();
+        verify(mPCCTTestRule.mOnResizedCallback).onResized(eq(FULL_HEIGHT), eq(DEVICE_WIDTH));
+        clearInvocations(mPCCTTestRule.mOnResizedCallback);
+
+        strategy.toggleMaximize();
+        PartialCustomTabTestRule.waitForAnimationToFinish();
+        assertEquals(height, getWindowAttributes().height);
+        assertEquals(width, getWindowAttributes().width);
+        verify(mPCCTTestRule.mOnResizedCallback).onResized(eq(height), eq(width));
+    }
+
     private void assertTabIsAtFullLandscapeHeight() {
         assertEquals(
                 "Should only have one attribute result", 1, mPCCTTestRule.mAttributeResults.size());
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabTestRule.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabTestRule.java
index 7e01b08..093383d7 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabTestRule.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabTestRule.java
@@ -112,7 +112,7 @@
     @Mock
     CircularProgressDrawable mSpinner;
     @Mock
-    View mToolbarView;
+    CustomTabToolbar mToolbarView;
     @Mock
     View mToolbarCoordinator;
     @Mock
@@ -122,8 +122,6 @@
     @Mock
     GradientDrawable mDragBarBackground;
     @Mock
-    CustomTabToolbar mCustomTabToolbar;
-    @Mock
     ColorDrawable mColorDrawable;
     @Mock
     PartialCustomTabHandleStrategyFactory mHandleStrategyFactory;
@@ -178,8 +176,6 @@
         when(mToolbarView.getBackground()).thenReturn(mColorDrawable);
         when(mToolbarView.getLayoutParams()).thenReturn(mLayoutParams);
         when(mColorDrawable.getColor()).thenReturn(2);
-        when(mCustomTabToolbar.getLayoutParams()).thenReturn(mLayoutParams);
-        when(mCustomTabToolbar.getBackground()).thenReturn(mColorDrawable);
         when(mDragBar.getBackground()).thenReturn(mDragBarBackground);
         when(mHandleStrategyFactory.create(anyInt(), any(Context.class), any(BooleanSupplier.class),
                      any(Supplier.class),
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java
index c6bda16e..b8660fc 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java
@@ -4,6 +4,8 @@
 
 package org.chromium.chrome.browser.customtabs.features.toolbar;
 
+import static androidx.browser.customtabs.CustomTabsIntent.CLOSE_BUTTON_POSITION_END;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -26,6 +28,8 @@
 import android.view.ActionMode;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
 import android.widget.TextView;
 
 import org.junit.After;
@@ -362,6 +366,29 @@
                 ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL, mUrlBar.getText().toString());
     }
 
+    @Test
+    @Features.EnableFeatures({ChromeFeatureList.CCT_RESIZABLE_SIDE_SHEET})
+    public void testMaximizeButton() {
+        mToolbar.createSideSheetMaximizeButton(() -> true);
+        var maximizeButton =
+                (ImageButton) mToolbar.findViewById(R.id.custom_tabs_sidepanel_maximize);
+        assertEquals(
+                "Maximize button should be visible", View.VISIBLE, maximizeButton.getVisibility());
+
+        // Check margin from the right end.
+        var lp = (FrameLayout.LayoutParams) maximizeButton.getLayoutParams();
+        assertEquals(0, lp.rightMargin);
+        mToolbar.setCloseButtonPosition(CLOSE_BUTTON_POSITION_END);
+        mToolbar.onMenuButtonDisabled();
+        int closeButtonWidth =
+                mToolbar.getResources().getDimensionPixelSize(R.dimen.toolbar_button_width);
+        assertEquals("Maximize button should be next to close button.", closeButtonWidth,
+                lp.rightMargin);
+
+        mToolbar.removeSideSheetMaximizeButton();
+        assertEquals("Maximize button should be hidden", View.GONE, maximizeButton.getVisibility());
+    }
+
     private void assertUrlAndTitleVisible(boolean titleVisible, boolean urlVisible) {
         int expectedTitleVisibility = titleVisible ? View.VISIBLE : View.GONE;
         int expectedUrlVisibility = urlVisible ? View.VISIBLE : View.GONE;
diff --git a/chrome/browser/android/browserservices/intents/java/src/org/chromium/chrome/browser/browserservices/intents/BrowserServicesIntentDataProvider.java b/chrome/browser/android/browserservices/intents/java/src/org/chromium/chrome/browser/browserservices/intents/BrowserServicesIntentDataProvider.java
index b0daee86..76c2b2ab0 100644
--- a/chrome/browser/android/browserservices/intents/java/src/org/chromium/chrome/browser/browserservices/intents/BrowserServicesIntentDataProvider.java
+++ b/chrome/browser/android/browserservices/intents/java/src/org/chromium/chrome/browser/browserservices/intents/BrowserServicesIntentDataProvider.java
@@ -545,4 +545,11 @@
      * background application
      */
     public boolean canInteractWithBackground() { return false; }
+
+    /**
+     * Return false since by default side panel does not show maximize button.
+     */
+    public boolean showSideSheetMaximizeButton() {
+        return false;
+    }
 }
diff --git a/chrome/browser/android/preferences/autofill/autofill_profile_bridge.cc b/chrome/browser/android/preferences/autofill/autofill_profile_bridge.cc
index 20418bb5..504a9ec 100644
--- a/chrome/browser/android/preferences/autofill/autofill_profile_bridge.cc
+++ b/chrome/browser/android/preferences/autofill/autofill_profile_bridge.cc
@@ -7,7 +7,6 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "base/android/scoped_java_ref.h"
 #include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/android/chrome_jni_headers/AutofillProfileBridge_jni.h"
@@ -96,7 +95,6 @@
     JNIEnv* env,
     const JavaParamRef<jstring>& j_country_code,
     const JavaParamRef<jstring>& j_language_code,
-    jint j_validation_type,
     const JavaParamRef<jobject>& j_id_list,
     const JavaParamRef<jobject>& j_name_list,
     const JavaParamRef<jobject>& j_required_list,
@@ -118,32 +116,18 @@
   }
 
   std::string country_code = ConvertJavaStringToUTF8(env, j_country_code);
-  AutofillCountry country(country_code);
-  std::vector<ExtendedAddressUiComponent> ui_components =
-      ConvertAddressUiComponents(
-          BuildComponents(country_code, localization, language_code,
-                          &best_language_tag),
-          country);
-  ExtendAddressComponents(ui_components, country, localization,
+  std::vector<AddressUiComponent> ui_components = BuildComponents(
+      country_code, localization, language_code, &best_language_tag);
+  ExtendAddressComponents(ui_components, country_code, localization,
                           /*include_literals=*/false);
 
-  AddressValidationType validation_type =
-      static_cast<AddressValidationType>(j_validation_type);
   for (const auto& ui_component : ui_components) {
-    component_ids.push_back(ui_component.field);
     component_labels.push_back(ui_component.name);
+    component_required.push_back(
+        IsFieldRequired(ui_component.field, country_code));
     component_length.push_back(ui_component.length_hint ==
                                AddressUiComponent::HINT_LONG);
-
-    switch (validation_type) {
-      case AddressValidationType::kPaymentRequest:
-        component_required.push_back(
-            IsFieldRequired(ui_component.field, country_code));
-        break;
-      case AddressValidationType::kAccount:
-        component_required.push_back(
-            country.IsAddressFieldRequired(ui_component.field));
-    }
+    component_ids.push_back(ui_component.field);
   }
 
   Java_AutofillProfileBridge_intArrayToList(
diff --git a/chrome/browser/android/preferences/autofill/autofill_profile_bridge.h b/chrome/browser/android/preferences/autofill/autofill_profile_bridge.h
index 8cc5c8b..88f014b 100644
--- a/chrome/browser/android/preferences/autofill/autofill_profile_bridge.h
+++ b/chrome/browser/android/preferences/autofill/autofill_profile_bridge.h
@@ -11,16 +11,6 @@
 
 namespace autofill {
 
-// Specifies which rules are to be used for address validation.
-// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.autofill.settings
-enum class AddressValidationType {
-  // Validation rules used for the PaymentRequest API (e.g. for billing
-  // addresses).
-  kPaymentRequest = 0,
-  // Validation rules used for addresses stored in the user account.
-  kAccount = 1
-};
-
 // Opens the autofill settings page for profiles.
 void ShowAutofillProfileSettings(content::WebContents* web_contents);
 
diff --git a/chrome/browser/ash/crosapi/audio_service_ash_unittest.cc b/chrome/browser/ash/crosapi/audio_service_ash_unittest.cc
index c7981592..90de8689 100644
--- a/chrome/browser/ash/crosapi/audio_service_ash_unittest.cc
+++ b/chrome/browser/ash/crosapi/audio_service_ash_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/ash/components/audio/cras_audio_handler.h"
-#include "chromeos/ash/components/dbus/audio/fake_cras_audio_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl.cc
index 80d7849..71edae4 100644
--- a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl.cc
+++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl.cc
@@ -34,11 +34,10 @@
 // http://google3/logs/proto/wireless/android/smartsetup/smart_setup_extension.proto;l=876;rcl=458110957
 constexpr uint8_t kEndpointInfoVerificationStyle = 0;
 
-// Device Type for Smart Setup, e.g. phone, tablet.
-// 0 = "Unknown", since there isn't yet a Chromebook option.
-// Values come from this enum:
-// http://google3/logs/proto/wireless/android/smartsetup/smart_setup_extension.proto;l=961;rcl=458110957
-constexpr uint8_t kEndpointInfoDeviceType = 0;
+// Device Type for Smart Setup, e.g. phone, tablet.  8 = "Chrome"
+// Values come from the DiscoveryEvent DeviceType enum:
+// http://google3/logs/proto/wireless/android/smartsetup/smart_setup_extension.proto;l=985;rcl=507029311
+constexpr uint8_t kEndpointInfoDeviceType = 8;
 
 // Boolean field indicating to Smart Setup whether the client is Quick Start.
 constexpr uint8_t kEndpointInfoIsQuickStart = 1;
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc
index b34773c..2da150a 100644
--- a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc
+++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc
@@ -27,6 +27,8 @@
 namespace {
 
 constexpr size_t kMaxEndpointInfoDisplayNameLength = 18;
+constexpr uint8_t kEndpointInfoVerificationStyle = 0u;
+constexpr uint8_t kEndpointInfoDeviceType = 8u;
 
 // 10 random bytes to use as the RandomSessionId. The corresponding display name
 // code is (0x135e % 1000) = 958.
@@ -485,12 +487,12 @@
 
   ASSERT_GT(endpoint_info.size(), i);
   uint8_t verification_style = endpoint_info[i];
-  EXPECT_EQ(0u, verification_style);
+  EXPECT_EQ(kEndpointInfoVerificationStyle, verification_style);
   i++;
 
   ASSERT_GT(endpoint_info.size(), i);
   uint8_t device_type = endpoint_info[i];
-  EXPECT_EQ(0u, device_type);
+  EXPECT_EQ(kEndpointInfoDeviceType, device_type);
   i++;
 
   // Parse the fixed-length RandomSessionId.
diff --git a/chrome/browser/ash/login/wizard_context.h b/chrome/browser/ash/login/wizard_context.h
index 2f24743..beed95c 100644
--- a/chrome/browser/ash/login/wizard_context.h
+++ b/chrome/browser/ash/login/wizard_context.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_WIZARD_CONTEXT_H_
 
 #include <memory>
+#include <string>
 
 #include "base/values.h"
 #include "chrome/browser/ash/login/oobe_screen.h"
@@ -125,6 +126,12 @@
   // ash::OOBE_SCREEN_UNKNOWN.
   OobeScreenId screen_after_managed_tos;
 
+  // This ID maps onto the instance_id used in
+  // ash::multidevice::RemoteDevice. If a user connects their phone during Quick
+  // Start, Quick Start saves this ID. After Quick Start, the multidevice screen
+  // will show UI enhancements if this quick_start_phone_instance_id is present.
+  std::string quick_start_phone_instance_id;
+
   // If this is a first login after update from CloudReady to a new version.
   // During such an update show users license agreement and data collection
   // consent.
diff --git a/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc b/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
index 345e57b..38d93df7 100644
--- a/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
+++ b/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
@@ -896,7 +896,6 @@
     // Use FakeUpdateEngineClient.
     update_engine_client_ = ash::UpdateEngineClient::InitializeFakeForTest();
 
-    ash::CrasAudioHandler::InitializeForTesting();
     ash::UserDataAuthClient::InitializeFake();
     chromeos::PowerManagerClient::InitializeFake();
     ash::AttestationClient::InitializeFake();
@@ -1222,6 +1221,8 @@
   apps::ScopedOmitPluginVmAppsForTesting
       scoped_omit_plugin_vm_apps_for_testing_;
 
+  ash::ScopedCrasAudioHandlerForTesting cras_audio_handler_;
+
   // This property is required to instantiate the session manager, a singleton
   // which is used by the device status collector.
   session_manager::SessionManager session_manager_;
diff --git a/chrome/browser/ash/preferences_browsertest.cc b/chrome/browser/ash/preferences_browsertest.cc
index 946b145..149d97f 100644
--- a/chrome/browser/ash/preferences_browsertest.cc
+++ b/chrome/browser/ash/preferences_browsertest.cc
@@ -195,7 +195,7 @@
 
   // Check that changing prefs of the active user doesn't affect prefs of the
   // inactive user.
-  base::Value prefs_backup =
+  base::Value::Dict prefs_backup =
       prefs1->GetPreferenceValues(PrefService::INCLUDE_DEFAULTS);
   SetPrefs(prefs2, false);
   CheckSettingsCorrespondToPrefs(prefs2);
diff --git a/chrome/browser/autofill/android/BUILD.gn b/chrome/browser/autofill/android/BUILD.gn
index ad5043c3..f83cc93e 100644
--- a/chrome/browser/autofill/android/BUILD.gn
+++ b/chrome/browser/autofill/android/BUILD.gn
@@ -6,7 +6,6 @@
 
 java_cpp_enum("autofill_generated_enums") {
   sources = [
-    "//chrome/browser/android/preferences/autofill/autofill_profile_bridge.h",
     "//components/autofill/core/browser/data_model/autofill_profile.h",
     "//components/autofill/core/browser/data_model/autofill_structured_address_component.h",
   ]
diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java
index b1b21c1a2..efb18936 100644
--- a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java
+++ b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java
@@ -346,7 +346,6 @@
             return mOrigin;
         }
 
-        @CalledByNative("AutofillProfile")
         public @Source int getSource() {
             return mSource;
         }
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 41bc0c1..d0a835c 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -367,73 +367,68 @@
 }
 
 // static
-AutofillProfile PersonalDataManagerAndroid::CreateNativeProfileFromJava(
+void PersonalDataManagerAndroid::PopulateNativeProfileFromJava(
     const JavaParamRef<jobject>& jprofile,
-    JNIEnv* env) {
-  AutofillProfile profile(static_cast<AutofillProfile::Source>(
-      Java_AutofillProfile_getSource(env, jprofile)));
-
+    JNIEnv* env,
+    AutofillProfile* profile) {
   // Only set the guid if it is an existing profile (java guid not empty).
   // Otherwise, keep the generated one.
   std::string guid =
       ConvertJavaStringToUTF8(Java_AutofillProfile_getGUID(env, jprofile));
   if (!guid.empty())
-    profile.set_guid(guid);
+    profile->set_guid(guid);
 
-  profile.set_origin(
+  profile->set_origin(
       ConvertJavaStringToUTF8(Java_AutofillProfile_getOrigin(env, jprofile)));
   MaybeSetInfoWithVerificationStatus(
-      &profile, NAME_FULL, Java_AutofillProfile_getFullName(env, jprofile),
+      profile, NAME_FULL, Java_AutofillProfile_getFullName(env, jprofile),
       Java_AutofillProfile_getFullNameStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, NAME_HONORIFIC_PREFIX,
+      profile, NAME_HONORIFIC_PREFIX,
       Java_AutofillProfile_getHonorificPrefix(env, jprofile),
       Java_AutofillProfile_getHonorificPrefixStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, COMPANY_NAME,
-      Java_AutofillProfile_getCompanyName(env, jprofile),
+      profile, COMPANY_NAME, Java_AutofillProfile_getCompanyName(env, jprofile),
       Java_AutofillProfile_getCompanyNameStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_STREET_ADDRESS,
+      profile, ADDRESS_HOME_STREET_ADDRESS,
       Java_AutofillProfile_getStreetAddress(env, jprofile),
       Java_AutofillProfile_getStreetAddressStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_STATE,
+      profile, ADDRESS_HOME_STATE,
       Java_AutofillProfile_getRegion(env, jprofile),
       Java_AutofillProfile_getRegionStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_CITY,
+      profile, ADDRESS_HOME_CITY,
       Java_AutofillProfile_getLocality(env, jprofile),
       Java_AutofillProfile_getLocalityStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_DEPENDENT_LOCALITY,
+      profile, ADDRESS_HOME_DEPENDENT_LOCALITY,
       Java_AutofillProfile_getDependentLocality(env, jprofile),
       Java_AutofillProfile_getDependentLocalityStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_ZIP,
+      profile, ADDRESS_HOME_ZIP,
       Java_AutofillProfile_getPostalCode(env, jprofile),
       Java_AutofillProfile_getPostalCodeStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_SORTING_CODE,
+      profile, ADDRESS_HOME_SORTING_CODE,
       Java_AutofillProfile_getSortingCode(env, jprofile),
       Java_AutofillProfile_getSortingCodeStatus(env, jprofile));
   MaybeSetInfoWithVerificationStatus(
-      &profile, ADDRESS_HOME_COUNTRY,
+      profile, ADDRESS_HOME_COUNTRY,
       Java_AutofillProfile_getCountryCode(env, jprofile),
       Java_AutofillProfile_getCountryCodeStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, PHONE_HOME_WHOLE_NUMBER,
+      profile, PHONE_HOME_WHOLE_NUMBER,
       Java_AutofillProfile_getPhoneNumber(env, jprofile),
       Java_AutofillProfile_getPhoneNumberStatus(env, jprofile));
   MaybeSetRawInfoWithVerificationStatus(
-      &profile, EMAIL_ADDRESS,
+      profile, EMAIL_ADDRESS,
       Java_AutofillProfile_getEmailAddress(env, jprofile),
       Java_AutofillProfile_getEmailAddressStatus(env, jprofile));
-  profile.set_language_code(ConvertJavaStringToUTF8(
+  profile->set_language_code(ConvertJavaStringToUTF8(
       Java_AutofillProfile_getLanguageCode(env, jprofile)));
-  profile.FinalizeAfterImport();
-
-  return profile;
+  profile->FinalizeAfterImport();
 }
 
 jboolean PersonalDataManagerAndroid::IsDataLoaded(
@@ -475,7 +470,8 @@
   std::string guid = ConvertJavaStringToUTF8(
       env, Java_AutofillProfile_getGUID(env, jprofile).obj());
 
-  AutofillProfile profile = CreateNativeProfileFromJava(jprofile, env);
+  AutofillProfile profile;
+  PopulateNativeProfileFromJava(jprofile, env, &profile);
 
   if (guid.empty()) {
     personal_data_manager_->AddProfile(profile);
@@ -491,7 +487,8 @@
     JNIEnv* env,
     const JavaParamRef<jobject>& unused_obj,
     const JavaParamRef<jobject>& jprofile) {
-  AutofillProfile profile = CreateNativeProfileFromJava(jprofile, env);
+  AutofillProfile profile;
+  PopulateNativeProfileFromJava(jprofile, env, &profile);
 
   AutofillProfile* target_profile =
       personal_data_manager_->GetProfileByGUID(ConvertJavaStringToUTF8(
@@ -563,7 +560,8 @@
       ADDRESS_HOME_ZIP,   ADDRESS_HOME_SORTING_CODE,
   };
 
-  AutofillProfile profile = CreateNativeProfileFromJava(jprofile, env);
+  AutofillProfile profile;
+  PopulateNativeProfileFromJava(jprofile, env, &profile);
 
   return ConvertUTF16ToJavaString(
       env, profile.ConstructInferredLabel(
@@ -842,7 +840,8 @@
     const JavaParamRef<jobject>& jprofile,
     jint jtimeout_seconds,
     const JavaParamRef<jobject>& jdelegate) {
-  AutofillProfile profile = CreateNativeProfileFromJava(jprofile, env);
+  AutofillProfile profile;
+  PopulateNativeProfileFromJava(jprofile, env, &profile);
 
   // Start the normalization.
   AddressNormalizer* normalizer = AddressNormalizerFactory::GetInstance();
@@ -977,7 +976,8 @@
   if (!include_country_in_label)
     --kLabelFields_size;
 
-  AutofillProfile profile = CreateNativeProfileFromJava(jprofile, env);
+  AutofillProfile profile;
+  PopulateNativeProfileFromJava(jprofile, env, &profile);
 
   return ConvertUTF16ToJavaString(
       env, profile.ConstructInferredLabel(
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.h b/chrome/browser/autofill/android/personal_data_manager_android.h
index ecb9f2cd..8b73296 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.h
+++ b/chrome/browser/autofill/android/personal_data_manager_android.h
@@ -36,9 +36,10 @@
   static base::android::ScopedJavaLocalRef<jobject> CreateJavaProfileFromNative(
       JNIEnv* env,
       const AutofillProfile& profile);
-  static AutofillProfile CreateNativeProfileFromJava(
+  static void PopulateNativeProfileFromJava(
       const base::android::JavaParamRef<jobject>& jprofile,
-      JNIEnv* env);
+      JNIEnv* env,
+      AutofillProfile* profile);
 
   // Returns true if personal data manager has loaded the initial data.
   jboolean IsDataLoaded(
diff --git a/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc b/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc
index c95d0f8..67ee790 100644
--- a/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc
+++ b/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc
@@ -165,8 +165,9 @@
     const base::android::JavaParamRef<jobject>& obj,
     const base::android::JavaParamRef<jobject>& jprofile) {
   had_user_interaction_ = true;
-  AutofillProfile edited_profile =
-      PersonalDataManagerAndroid::CreateNativeProfileFromJava(jprofile, env);
+  AutofillProfile edited_profile;
+  PersonalDataManagerAndroid::PopulateNativeProfileFromJava(jprofile, env,
+                                                            &edited_profile);
   profile_ = edited_profile;
   RunSaveAddressProfileCallback(
       AutofillClient::SaveAddressProfileOfferUserDecision::kEditAccepted);
diff --git a/chrome/browser/direct_sockets/direct_sockets_apitest.cc b/chrome/browser/direct_sockets/direct_sockets_apitest.cc
index e873299..14b9155 100644
--- a/chrome/browser/direct_sockets/direct_sockets_apitest.cc
+++ b/chrome/browser/direct_sockets/direct_sockets_apitest.cc
@@ -420,7 +420,7 @@
   dir.WriteFile(FILE_PATH_LITERAL("background.js"), R"(
     chrome.test.sendMessage("ready", async (message) => {
       try {
-        const clientPort = message;
+        const [clientAddress, clientPort] = message.split(':');
 
         const socket = new UDPSocket({ localAddress: "127.0.0.1" });
 
@@ -447,7 +447,7 @@
 
         writer.write({
           data: (new TextEncoder()).encode(kUdpMessage),
-          remoteAddress: "127.0.0.1",
+          remoteAddress: clientAddress,
           remotePort: clientPort,
         });
       } catch (e) {
@@ -462,7 +462,7 @@
   ASSERT_TRUE(LoadExtension(dir.UnpackedPath()));
   ASSERT_TRUE(listener.WaitUntilSatisfied());
 
-  listener.Reply(base::StringPrintf("%d", test_server()->port()));
+  listener.Reply(base::StringPrintf("%s:%d", kHostname, test_server()->port()));
   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
 }
 
@@ -616,8 +616,8 @@
         const kUdpMessage = "udp_message";
         writable.getWriter().write({
           data: (new TextEncoder()).encode(kUdpMessage),
-          remoteAddress: "127.0.0.1",
-          remotePort: $1,
+          remoteAddress: $1,
+          remotePort: $2,
         });
         return await readable.getReader().read().then(packet => {
           const { value, done } = packet;
@@ -631,7 +631,7 @@
           if (remoteAddress !== "127.0.0.1") {
             return false;
           }
-          if (remotePort !== $1) {
+          if (remotePort !== $2) {
             return false;
           }
           return true;
@@ -645,7 +645,7 @@
 
   ASSERT_TRUE(
       EvalJs(app_frame, content::JsReplace(kUdpServerSendReceiveEchoScript,
-                                           test_server()->port()))
+                                           kHostname, test_server()->port()))
           .ExtractBool());
 }
 
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
index 1e84377..aab7c63 100644
--- a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
+++ b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
@@ -99,7 +99,7 @@
 
 // Serializes the AddressUiComponent a map from string to base::Value().
 base::Value::Dict AddressUiComponentAsValueMap(
-    const autofill::ExtendedAddressUiComponent& address_ui_component) {
+    const i18n::addressinput::AddressUiComponent& address_ui_component) {
   base::Value::Dict info;
   info.Set(kFieldNameKey, address_ui_component.name);
   info.Set(kFieldTypeKey,
@@ -335,7 +335,7 @@
           api::autofill_private::GetAddressComponents::Params::Create(args());
   EXTENSION_FUNCTION_VALIDATE(parameters.get());
 
-  std::vector<std::vector<autofill::ExtendedAddressUiComponent>> lines;
+  std::vector<std::vector<::i18n::addressinput::AddressUiComponent>> lines;
   std::string language_code;
 
   autofill::GetAddressComponents(
@@ -348,7 +348,7 @@
 
   for (auto& line : lines) {
     base::Value::List row_values;
-    for (const autofill::ExtendedAddressUiComponent& component : line) {
+    for (const ::i18n::addressinput::AddressUiComponent& component : line) {
       row_values.Append(AddressUiComponentAsValueMap(component));
     }
     base::Value::Dict row;
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index 94c18b25..e73f0a2 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/test_future.h"
 #include "base/test/trace_event_analyzer.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -631,21 +632,13 @@
                                {.extension_url = "textarea_append_perf.html"}))
       << message_;
 
-  std::string trace_output;
-  {
-    base::RunLoop wait_for_tracing;
-    content::TracingController::GetInstance()->StopTracing(
-        content::TracingController::CreateStringEndpoint(base::BindOnce(
-            [](base::OnceClosure quit_closure, std::string* output,
-               std::unique_ptr<std::string> trace_str) {
-              *output = *trace_str;
-              std::move(quit_closure).Run();
-            },
-            wait_for_tracing.QuitClosure(), &trace_output)));
-    wait_for_tracing.Run();
-  }
+  base::test::TestFuture<std::unique_ptr<std::string>> stop_tracing_future;
+  content::TracingController::GetInstance()->StopTracing(
+      content::TracingController::CreateStringEndpoint(
+          stop_tracing_future.GetCallback()));
 
-  absl::optional<base::Value> trace_data = base::JSONReader::Read(trace_output);
+  absl::optional<base::Value> trace_data =
+      base::JSONReader::Read(*stop_tracing_future.Take());
   ASSERT_TRUE(trace_data);
 
   const base::Value* trace_events = trace_data->FindListKey("traceEvents");
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
index 012c47a..7bbec25 100644
--- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
+++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -8,6 +8,7 @@
 #include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/test/bind.h"
+#include "base/test/test_future.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
@@ -76,26 +77,17 @@
       /*secure=*/true, false, net::CookieSameSite::NO_RESTRICTION,
       net::COOKIE_PRIORITY_DEFAULT, false);
 
-  bool success = false;
-  base::RunLoop loop;
-  base::OnceClosure loop_quit = loop.QuitClosure();
-  base::OnceCallback<void(net::CookieAccessResult)> callback =
-      base::BindLambdaForTesting(
-          [&success, &loop_quit](net::CookieAccessResult r) {
-            success = r.status.IsInclude();
-            std::move(loop_quit).Run();
-          });
+  base::test::TestFuture<net::CookieAccessResult> set_cookie_future;
   network::mojom::CookieManager* cookie_manager =
       profile->GetDefaultStoragePartition()
           ->GetCookieManagerForBrowserProcess();
   cookie_manager->SetCanonicalCookie(
       *cookie, google_url, net::CookieOptions::MakeAllInclusive(),
       mojo::WrapCallbackWithDefaultInvokeIfNotRun(
-          std::move(callback),
+          set_cookie_future.GetCallback(),
           net::CookieAccessResult(net::CookieInclusionStatus(
               net::CookieInclusionStatus::EXCLUDE_UNKNOWN_ERROR))));
-  loop.Run();
-  return success;
+  return set_cookie_future.Get().status.IsInclude();
 }
 #endif
 
@@ -206,15 +198,10 @@
   local_storage_control->BindStorageArea(key,
                                          area.BindNewPipeAndPassReceiver());
   {
-    bool success = false;
-    base::RunLoop run_loop;
+    base::test::TestFuture<bool> put_future;
     area->Put({'k', 'e', 'y'}, {'v', 'a', 'l', 'u', 'e'}, absl::nullopt,
-              "source", base::BindLambdaForTesting([&](bool success_in) {
-                success = success_in;
-                run_loop.Quit();
-              }));
-    run_loop.Run();
-    ASSERT_TRUE(success);
+              "source", put_future.GetCallback());
+    ASSERT_TRUE(put_future.Get());
   }
 }
 
@@ -222,17 +209,10 @@
     Profile* profile) {
   auto* local_storage_control =
       profile->GetDefaultStoragePartition()->GetLocalStorageControl();
-  std::vector<storage::mojom::StorageUsageInfoPtr> usage_infos;
-  {
-    base::RunLoop run_loop;
-    local_storage_control->GetUsage(base::BindLambdaForTesting(
-        [&](std::vector<storage::mojom::StorageUsageInfoPtr> usage_infos_in) {
-          usage_infos.swap(usage_infos_in);
-          run_loop.Quit();
-        }));
-    run_loop.Run();
-  }
-  return usage_infos;
+  base::test::TestFuture<std::vector<storage::mojom::StorageUsageInfoPtr>>
+      get_usage_future;
+  local_storage_control->GetUsage(get_usage_future.GetCallback());
+  return get_usage_future.Take();
 }
 
 bool UsageInfosHasStorageKey(
diff --git a/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc b/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc
index d6b7ed31..cf58ce3 100644
--- a/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc
+++ b/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc
@@ -27,6 +27,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
+#include "base/test/test_future.h"
 #include "base/values.h"
 #include "chrome/browser/certificate_provider/certificate_provider.h"
 #include "chrome/browser/certificate_provider/certificate_provider_service.h"
@@ -93,14 +94,6 @@
 
 namespace {
 
-void StoreDigest(std::vector<uint8_t>* digest,
-                 base::OnceClosure callback,
-                 base::Value value) {
-  ASSERT_TRUE(value.is_blob()) << "Unexpected value in StoreDigest";
-  digest->assign(value.GetBlob().begin(), value.GetBlob().end());
-  std::move(callback).Run();
-}
-
 bool RsaSignRawData(uint16_t openssl_signature_algorithm,
                     const std::vector<uint8_t>& input,
                     crypto::RSAPrivateKey* key,
@@ -278,17 +271,17 @@
 
   std::vector<scoped_refptr<net::X509Certificate>>
   GetAllProvidedCertificates() {
-    base::RunLoop run_loop;
     std::unique_ptr<chromeos::CertificateProvider> cert_provider =
         cert_provider_service_->CreateCertificateProvider();
+
+    base::test::TestFuture<net::ClientCertIdentityList> get_certificates_future;
+    cert_provider->GetCertificates(get_certificates_future.GetCallback());
+
     std::vector<scoped_refptr<net::X509Certificate>> all_provided_certificates;
-    auto callback = base::BindLambdaForTesting(
-        [&](net::ClientCertIdentityList cert_identity_list) {
-          for (const auto& cert_identity : cert_identity_list)
-            all_provided_certificates.push_back(cert_identity->certificate());
-        });
-    cert_provider->GetCertificates(callback.Then(run_loop.QuitClosure()));
-    run_loop.Run();
+    for (const auto& cert_identity : get_certificates_future.Get()) {
+      all_provided_certificates.push_back(cert_identity->certificate());
+    }
+
     return all_provided_certificates;
   }
 
@@ -431,14 +424,11 @@
                                  "signatureRequestAlgorithm;")
             .GetString();
     EXPECT_EQ(expected_request_signature_algorithm, request_algorithm);
-    std::vector<uint8_t> request_data;
-    {
-      base::RunLoop run_loop;
-      GetExtensionMainFrame()->ExecuteJavaScriptForTests(
-          u"signatureRequestData;",
-          base::BindOnce(&StoreDigest, &request_data, run_loop.QuitClosure()));
-      run_loop.Run();
-    }
+
+    base::test::TestFuture<base::Value> exec_js_future;
+    GetExtensionMainFrame()->ExecuteJavaScriptForTests(
+        u"signatureRequestData;", exec_js_future.GetCallback());
+    std::vector<uint8_t> request_data(exec_js_future.Get().GetBlob());
 
     // Load the private key.
     std::string key_pk8 = GetKeyPk8();
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
index 42f116b..afd573a 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
@@ -292,8 +292,9 @@
  private:
   // download::DownloadItem::Observer
   void OnDownloadOpened(download::DownloadItem* item) override {
-    if (!completion_closure_.is_null())
+    if (completion_closure_) {
       std::move(completion_closure_).Run();
+    }
   }
 
   void OnDownloadDestroyed(download::DownloadItem* item) override {
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc
index 1b8b11c..216beea 100644
--- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc
+++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc
@@ -244,16 +244,6 @@
         profile(), mock_policy_provider());
   }
 
-  void DidGetCertDatabase(base::OnceClosure done_callback,
-                          net::NSSCertDatabase* cert_db) {
-    // In order to use a prepared certificate, import a private key to the
-    // user's token for which the Javscript test will import the certificate.
-    ImportPrivateKeyPKCS8ToSlot(privateKeyPkcs8User,
-                                std::size(privateKeyPkcs8User),
-                                cert_db->GetPrivateSlot().get());
-    std::move(done_callback).Run();
-  }
-
  protected:
   bool IsSystemTokenEnabled() const {
     return system_token_status() == SystemTokenStatus::EXISTS &&
@@ -295,12 +285,14 @@
 IN_PROC_BROWSER_TEST_P(EnterprisePlatformKeysTest, Basic) {
   AddScreenplayTag();
   {
-    base::RunLoop loop;
+    base::test::TestFuture<net::NSSCertDatabase*> get_db_future;
     NssServiceFactory::GetForContext(profile())
-        ->UnsafelyGetNSSCertDatabaseForTesting(
-            base::BindOnce(&EnterprisePlatformKeysTest::DidGetCertDatabase,
-                           base::Unretained(this), loop.QuitClosure()));
-    loop.Run();
+        ->UnsafelyGetNSSCertDatabaseForTesting(get_db_future.GetCallback());
+    // In order to use a prepared certificate, import a private key to the
+    // user's token for which the Javscript test will import the certificate.
+    ImportPrivateKeyPKCS8ToSlot(privateKeyPkcs8User,
+                                std::size(privateKeyPkcs8User),
+                                get_db_future.Get()->GetPrivateSlot().get());
   }
 
   SetCustomArg(BuildCustomArg(/*user_session_test=*/true,
diff --git a/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc b/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
index 017b3f4..6e3519d 100644
--- a/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
+++ b/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
@@ -63,13 +63,13 @@
 class TestFeedbackUploaderDelegate
     : public feedback::FeedbackUploaderChrome::Delegate {
  public:
-  explicit TestFeedbackUploaderDelegate(base::RunLoop* quit_on_dispatch)
-      : quit_on_dispatch_(quit_on_dispatch) {}
+  explicit TestFeedbackUploaderDelegate(base::OnceClosure quit_callback)
+      : quit_callback_(std::move(quit_callback)) {}
 
-  void OnStartDispatchingReport() override { quit_on_dispatch_->Quit(); }
+  void OnStartDispatchingReport() override { std::move(quit_callback_).Run(); }
 
  private:
-  raw_ptr<base::RunLoop> quit_on_dispatch_;
+  base::OnceClosure quit_callback_;
 };
 
 // TODO(crbug.com/1241504): disable tests.
@@ -409,7 +409,7 @@
   // normally would have been uploaded. We have it setup to then quit the
   // RunLoop which will then allow us to terminate.
   base::RunLoop run_loop;
-  TestFeedbackUploaderDelegate delegate(&run_loop);
+  TestFeedbackUploaderDelegate delegate(run_loop.QuitClosure());
   feedback::FeedbackUploaderFactoryChrome::GetInstance()
       ->GetForBrowserContext(browser()->profile())
       ->set_feedback_uploader_delegate(&delegate);
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc
index c8ae508..d30cd4d 100644
--- a/chrome/browser/extensions/api/management/management_browsertest.cc
+++ b/chrome/browser/extensions/api/management/management_browsertest.cc
@@ -444,16 +444,15 @@
   ASSERT_NO_FATAL_FAILURE(SetUpExtensionUpdateResponse(
       temp_dir.GetPath(), "v3.crx", "manifest_v3.xml.template"));
 
-  extensions::ExtensionUpdater::CheckParams params2;
   {
+    extensions::ExtensionUpdater::CheckParams params2;
     base::RunLoop run_loop;
-    params2.callback = base::BindLambdaForTesting([&]() {
-      notification_listener.OnFinished();
-      run_loop.Quit();
-    });
+    params2.callback = run_loop.QuitClosure();
     service->updater()->CheckNow(std::move(params2));
     run_loop.Run();
+    notification_listener.OnFinished();
   }
+
   ASSERT_TRUE(notification_listener.finished());
   ASSERT_TRUE(base::Contains(notification_listener.updates(),
                              "ogjcoiohnmldgjemafoockdghcjciccf"));
diff --git a/chrome/browser/extensions/api/offscreen/offscreen_apitest.cc b/chrome/browser/extensions/api/offscreen/offscreen_apitest.cc
index 999d587..f0ed24e 100644
--- a/chrome/browser/extensions/api/offscreen/offscreen_apitest.cc
+++ b/chrome/browser/extensions/api/offscreen/offscreen_apitest.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
@@ -86,13 +87,10 @@
 // Wakes up the service worker for the `extension` in the given `profile`.
 void WakeUpServiceWorker(const Extension& extension, Profile& profile) {
   base::RunLoop run_loop;
-  auto quit_loop_adapter =
-      [&run_loop](std::unique_ptr<LazyContextTaskQueue::ContextInfo>) {
-        run_loop.QuitWhenIdle();
-      };
   ServiceWorkerTaskQueue::Get(&profile)->AddPendingTask(
       LazyContextId(&profile, extension.id(), extension.url()),
-      base::BindLambdaForTesting(quit_loop_adapter));
+      base::BindOnce([](std::unique_ptr<LazyContextTaskQueue::ContextInfo>) {
+      }).Then(run_loop.QuitWhenIdleClosure()));
   run_loop.Run();
 }
 
diff --git a/chrome/browser/extensions/api/omnibox/suggestion_parser_unittest.cc b/chrome/browser/extensions/api/omnibox/suggestion_parser_unittest.cc
index f123792..968ed7d 100644
--- a/chrome/browser/extensions/api/omnibox/suggestion_parser_unittest.cc
+++ b/chrome/browser/extensions/api/omnibox/suggestion_parser_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/run_loop.h"
 #include "base/test/bind.h"
+#include "base/test/test_future.h"
 #include "content/public/test/browser_task_environment.h"
 #include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -83,22 +84,14 @@
  private:
   void ParseImpl(const std::vector<base::StringPiece>& strs,
                  DescriptionAndStylesResult* result_out) {
-    base::RunLoop run_loop;
-    auto get_result = [&run_loop,
-                       result_out](DescriptionAndStylesResult result) {
-      *result_out = std::move(result);
-      run_loop.Quit();
-    };
-
-    auto get_result_callback = base::BindLambdaForTesting(get_result);
+    base::test::TestFuture<DescriptionAndStylesResult> parse_future;
     if (strs.size() == 1) {
-      ParseDescriptionAndStyles(strs[0], std::move(get_result_callback));
+      ParseDescriptionAndStyles(strs[0], parse_future.GetCallback());
     } else {
-      ParseDescriptionsAndStyles(strs, std::move(get_result_callback));
+      ParseDescriptionsAndStyles(strs, parse_future.GetCallback());
     }
 
-    run_loop.Run();
-
+    *result_out = parse_future.Take();
     // Exactly one of error and result should be populated.
     bool has_parsed_entries = !result_out->descriptions_and_styles.empty();
     bool has_error = !result_out->error.empty();
diff --git a/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc b/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
index a3df0ea1..ca05fa2 100644
--- a/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
@@ -21,6 +21,7 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/test_future.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service_factory.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.h"
 #include "chrome/browser/ash/login/quick_unlock/auth_token.h"
@@ -516,18 +517,10 @@
     const AccountId account_id =
         AccountId::FromUserEmailGaiaId(kTestUserEmail, kTestUserGaiaId);
 
-    bool called = false;
-    bool is_set = false;
+    base::test::TestFuture<bool> is_pin_set_future;
     ash::quick_unlock::PinBackend::GetInstance()->IsSet(
-        account_id, base::BindOnce(
-                        [](bool* out_called, bool* out_is_set, bool is_set) {
-                          *out_called = true;
-                          *out_is_set = is_set;
-                        },
-                        &called, &is_set));
-    base::RunLoop().RunUntilIdle();
-    CHECK(called);
-    return is_set;
+        account_id, is_pin_set_future.GetCallback());
+    return is_pin_set_future.Get();
   }
 
   // Checks whether there is a user value set for the PIN auto submit
@@ -616,38 +609,24 @@
     auto user_context = std::make_unique<ash::UserContext>(
         user_manager::USER_TYPE_REGULAR, account_id);
     user_context->SetIsUsingPin(true);
-    bool called = false;
-    bool success = false;
-    base::RunLoop loop;
+
+    base::test::TestFuture<std::unique_ptr<ash::UserContext>,
+                           absl::optional<ash::AuthenticationError>>
+        auth_future;
     ash::quick_unlock::PinBackend::GetInstance()->TryAuthenticate(
         std::move(user_context), ash::Key(password),
-        ash::quick_unlock::Purpose::kAny,
-        base::BindLambdaForTesting(
-            [&](std::unique_ptr<ash::UserContext>,
-                absl::optional<ash::AuthenticationError> error) {
-              called = true;
-              success = !error.has_value();
-              loop.Quit();
-            }));
-    loop.Run();
-    return success;
+        ash::quick_unlock::Purpose::kAny, auth_future.GetCallback());
+    return !auth_future.Get<absl::optional<ash::AuthenticationError>>()
+                .has_value();
   }
 
   bool SetPinAutosubmitEnabled(const std::string& pin, const bool enabled) {
     const AccountId account_id =
         AccountId::FromUserEmailGaiaId(kTestUserEmail, kTestUserGaiaId);
-    bool called = false;
-    bool success = false;
-    base::RunLoop loop;
+    base::test::TestFuture<bool> set_pin_future;
     ash::quick_unlock::PinBackend::GetInstance()->SetPinAutoSubmitEnabled(
-        account_id, pin, enabled,
-        base::BindLambdaForTesting([&](bool autosubmit_success) {
-          called = true;
-          success = autosubmit_success;
-          loop.Quit();
-        }));
-    loop.Run();
-    return success;
+        account_id, pin, enabled, set_pin_future.GetCallback());
+    return set_pin_future.Get();
   }
 
   bool IsAutosubmitFeatureEnabled() { return std::get<1>(GetParam()); }
diff --git a/chrome/browser/extensions/api/sessions/sessions_apitest.cc b/chrome/browser/extensions/api/sessions/sessions_apitest.cc
index ca6bb25..d5535506 100644
--- a/chrome/browser/extensions/api/sessions/sessions_apitest.cc
+++ b/chrome/browser/extensions/api/sessions/sessions_apitest.cc
@@ -15,6 +15,7 @@
 #include "base/strings/pattern.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind.h"
+#include "base/test/test_future.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/extensions/api/sessions/sessions_api.h"
@@ -205,19 +206,12 @@
 
   service->ProxyTabsStateChanged(syncer::DataTypeController::RUNNING);
 
-  std::unique_ptr<syncer::DataTypeActivationResponse> activation_response;
-  base::RunLoop loop;
+  base::test::TestFuture<std::unique_ptr<syncer::DataTypeActivationResponse>>
+      sync_start_future;
   service->GetControllerDelegate()->OnSyncStarting(
-      request,
-      base::BindLambdaForTesting(
-          [&](std::unique_ptr<syncer::DataTypeActivationResponse> response) {
-            activation_response = std::move(response);
-            loop.Quit();
-          }));
-  loop.Run();
-
-  syncer::MockModelTypeWorker worker(sync_pb::ModelTypeState(),
-                                     activation_response->type_processor.get());
+      request, sync_start_future.GetCallback());
+  syncer::MockModelTypeWorker worker(
+      sync_pb::ModelTypeState(), sync_start_future.Get()->type_processor.get());
 
   const base::Time time_now = base::Time::Now();
   syncer::SyncDataList initial_data;
diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc
index 014e563..575ef02b 100644
--- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc
+++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc
@@ -14,6 +14,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/bind.h"
+#include "base/test/test_future.h"
 #include "base/threading/platform_thread.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
@@ -70,19 +71,13 @@
 // resulting from that call.
 void GetAudioDeviceDescriptions(bool for_input,
                                 AudioDeviceDescriptions* device_descriptions) {
-  base::RunLoop run_loop;
+  base::test::TestFuture<AudioDeviceDescriptions>
+      audio_device_descriptions_future;
   std::unique_ptr<media::AudioSystem> audio_system =
       content::CreateAudioSystemForAudioService();
   audio_system->GetDeviceDescriptions(
-      for_input, base::BindOnce(
-                     [](base::OnceClosure finished_callback,
-                        AudioDeviceDescriptions* result,
-                        AudioDeviceDescriptions received) {
-                       *result = std::move(received);
-                       std::move(finished_callback).Run();
-                     },
-                     run_loop.QuitClosure(), device_descriptions));
-  run_loop.Run();
+      for_input, audio_device_descriptions_future.GetCallback());
+  *device_descriptions = audio_device_descriptions_future.Take();
 }
 
 }  // namespace
@@ -107,8 +102,6 @@
 
 class WebrtcAudioPrivateTest : public AudioWaitingExtensionTest {
  public:
-  WebrtcAudioPrivateTest() {}
-
   void SetUpOnMainThread() override {
     AudioWaitingExtensionTest::SetUpOnMainThread();
     // Needs to happen after chrome's schemes are added.
diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc
index 22bf506..3462cfe8 100644
--- a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc
+++ b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc
@@ -522,11 +522,11 @@
     SystemLogsResponse* response) {
   // Extract the "settings" entry in the local state and serialize back to
   // a string.
-  base::Value local_state =
+  base::Value::Dict local_state =
       g_browser_process->local_state()->GetPreferenceValues(
           PrefService::EXCLUDE_DEFAULTS);
-  const base::Value* local_state_settings =
-      local_state.FindDictKey(kSettingsKey);
+  const base::Value::Dict* local_state_settings =
+      local_state.FindDict(kSettingsKey);
   if (!local_state_settings) {
     VLOG(1) << "Failed to extract the settings entry from Local State.";
     return;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b5d9765..db21b17 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2688,7 +2688,7 @@
   },
   {
     "name": "enable-lock-screen-notification",
-    "owners": [ "tengs" ],
+    "owners": [ "newcomer" ],
     "expiry_milestone": 80
   },
   {
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
index 2903304..84ebcd3 100644
--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
@@ -1021,9 +1021,7 @@
     const MediaRoute::Id& route_id) {
   std::string issue_title =
       l10n_util::GetStringUTF8(IDS_MEDIA_ROUTER_ISSUE_FAILED_TO_CAST);
-  IssueInfo info(issue_title, IssueInfo::Severity::WARNING);
-
-  info.sink_id = sink_id;
+  IssueInfo info(issue_title, IssueInfo::Severity::WARNING, sink_id);
   info.route_id = route_id;
   media_router_->OnIssue(info);
 }
@@ -1035,8 +1033,7 @@
       IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_USER_PENDING_AUTHORIZATION,
       base::UTF8ToUTF16(sink_name));
 
-  IssueInfo info(issue_title, IssueInfo::Severity::NOTIFICATION);
-  info.sink_id = sink_id;
+  IssueInfo info(issue_title, IssueInfo::Severity::NOTIFICATION, sink_id);
   media_router_->OnIssue(info);
 }
 
diff --git a/chrome/browser/media/webrtc/display_media_access_handler.cc b/chrome/browser/media/webrtc/display_media_access_handler.cc
index ba21bdf5..ce8902f1 100644
--- a/chrome/browser/media/webrtc/display_media_access_handler.cc
+++ b/chrome/browser/media/webrtc/display_media_access_handler.cc
@@ -26,7 +26,6 @@
 #include "components/prefs/pref_service.h"
 #include "components/url_formatter/elide_url.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/desktop_capture.h"
 #include "content/public/browser/desktop_media_id.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_types.h"
@@ -286,32 +285,13 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   DCHECK(web_contents);
 
-  std::vector<DesktopMediaList::Type> media_types;
+  std::vector<DesktopMediaList::Type> media_types{
+      DesktopMediaList::Type::kWebContents, DesktopMediaList::Type::kWindow,
+      DesktopMediaList::Type::kScreen};
   if (pending_request.request.video_type ==
       blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_THIS_TAB) {
-    media_types = {DesktopMediaList::Type::kCurrentTab,
-                   DesktopMediaList::Type::kWebContents,
-                   DesktopMediaList::Type::kWindow,
-                   DesktopMediaList::Type::kScreen};
-  } else if (base::FeatureList::IsEnabled(
-                 blink::features::kNewGetDisplayMediaPickerOrder) ||
-             content::desktop_capture::CanUsePipeWire()) {
-    // 1. The new order is tabs-windows-screens, and is applied so long as the
-    // killswitch is not engaged.
-    //
-    // 2. In order to prevent the PipeWire picker from appearing immediately
-    // (because we start with the first item in the list selected and show the
-    // PipeWire picker when we select a DesktopMediaList::Type it controls),
-    // ensure that we initially select "kWebContents".
-    // The killswitch to revert to the old behavior does not affect PipeWire,
-    // as PipeWire has always used the new order.
-    media_types = {DesktopMediaList::Type::kWebContents,
-                   DesktopMediaList::Type::kWindow,
-                   DesktopMediaList::Type::kScreen};
-  } else {
-    media_types = {DesktopMediaList::Type::kScreen,
-                   DesktopMediaList::Type::kWindow,
-                   DesktopMediaList::Type::kWebContents};
+    media_types.insert(media_types.begin(),
+                       DesktopMediaList::Type::kCurrentTab);
   }
 
   capture_policy::FilterMediaList(media_types, capture_level);
diff --git a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
index d9ff8000..c5ed97e 100644
--- a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
+++ b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
@@ -51,7 +51,6 @@
 namespace {
 
 using base::test::FeatureRef;
-using blink::features::kNewGetDisplayMediaPickerOrder;
 
 static const char kMainHtmlPage[] = "/webrtc/webrtc_getdisplaymedia_test.html";
 static const char kMainHtmlFileName[] = "webrtc_getdisplaymedia_test.html";
@@ -71,21 +70,14 @@
 };
 
 struct TestConfigForPicker {
-  TestConfigForPicker(bool new_picker_order,
-                      bool should_prefer_current_tab,
+  TestConfigForPicker(bool should_prefer_current_tab,
                       bool accept_this_tab_capture)
-      : new_picker_order(new_picker_order),
-        should_prefer_current_tab(should_prefer_current_tab),
+      : should_prefer_current_tab(should_prefer_current_tab),
         accept_this_tab_capture(accept_this_tab_capture) {}
 
-  explicit TestConfigForPicker(std::tuple<bool, bool, bool> input_tuple)
+  explicit TestConfigForPicker(std::tuple<bool, bool> input_tuple)
       : TestConfigForPicker(std::get<0>(input_tuple),
-                            std::get<1>(input_tuple),
-                            std::get<2>(input_tuple)) {}
-
-  // The new order is tabs/windows/screens.
-  // The old order is screens/windows/tabs.
-  bool new_picker_order;
+                            std::get<1>(input_tuple)) {}
 
   // If true, specify {preferCurrentTab: true}.
   // Otherwise, either don't specify it, or set it to false.
@@ -215,25 +207,10 @@
 
   void SetUpInProcessBrowserTestFixture() override {
     DetectErrorsInJavaScript();
-    feature_list_.InitWithFeatures(EnabledFeatures(), DisabledFeatures());
   }
 
-  virtual bool IsNewMediaPickerOrderEnabled() const = 0;
-
   virtual bool PreferCurrentTab() const = 0;
 
-  virtual std::vector<FeatureRef> EnabledFeatures() const {
-    return IsNewMediaPickerOrderEnabled()
-               ? std::vector<FeatureRef>{kNewGetDisplayMediaPickerOrder}
-               : std::vector<FeatureRef>{};
-  }
-
-  virtual std::vector<FeatureRef> DisabledFeatures() const {
-    return IsNewMediaPickerOrderEnabled()
-               ? std::vector<FeatureRef>{}
-               : std::vector<FeatureRef>{kNewGetDisplayMediaPickerOrder};
-  }
-
   std::string GetConstraints(bool video,
                              bool audio,
                              SelectAllScreens select_all_screens) const {
@@ -250,16 +227,13 @@
         PreferCurrentTab() ? "true" : "false",
         select_all_screens_property.c_str());
   }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
 };
 
 // Top level test for getDisplayMedia().
 // Pops picker UI and shares by default.
 class WebRtcScreenCaptureBrowserTestWithPicker
     : public WebRtcScreenCaptureBrowserTest,
-      public testing::WithParamInterface<std::tuple<bool, bool, bool>> {
+      public testing::WithParamInterface<std::tuple<bool, bool>> {
  public:
   WebRtcScreenCaptureBrowserTestWithPicker() : test_config_(GetParam()) {}
 
@@ -281,10 +255,6 @@
     }
   }
 
-  bool IsNewMediaPickerOrderEnabled() const override {
-    return test_config_.new_picker_order;
-  }
-
   bool PreferCurrentTab() const override {
     return test_config_.should_prefer_current_tab;
   }
@@ -295,7 +265,6 @@
 INSTANTIATE_TEST_SUITE_P(All,
                          WebRtcScreenCaptureBrowserTestWithPicker,
                          testing::Combine(
-                             /*new_picker_order=*/testing::Bool(),
                              /*should_prefer_current_tab=*/testing::Bool(),
                              /*accept_this_tab_capture=*/testing::Bool()));
 
@@ -430,8 +399,6 @@
                            test_config_.display_surface));
   }
 
-  bool IsNewMediaPickerOrderEnabled() const override { return false; }
-
   bool PreferCurrentTab() const override {
     return test_config_.should_prefer_current_tab;
   }
@@ -543,20 +510,10 @@
         switches::kAutoSelectTabCaptureSourceByTitle, kMainHtmlTitle);
   }
 
-  bool IsNewMediaPickerOrderEnabled() const override { return false; }
-
   bool PreferCurrentTab() const override {
     return tested_variant_ == GetDisplayMediaVariant::kPreferCurrentTab;
   }
 
-  // This test suite focuses on permission policies, not on the order.
-  // TODO(crbug.com/1358278): Refactor test to assume the new order,
-  // by employing a second tab that can be captured.
-  std::vector<FeatureRef> EnabledFeatures() const override { return {}; }
-  std::vector<FeatureRef> DisabledFeatures() const override {
-    return {kNewGetDisplayMediaPickerOrder};
-  }
-
  protected:
   const GetDisplayMediaVariant tested_variant_;
   const bool allowlisted_by_policy_;
@@ -579,9 +536,11 @@
                        MAYBE_ScreenShareFromEmbedded) {
   ASSERT_TRUE(embedded_test_server()->Start());
 
-  const std::string constraints =
-      base::StringPrintf("{video: true, preferCurrentTab: %s}",
-                         PreferCurrentTab() ? "true" : "false");
+  // The use of selfBrowserSurface is in order to simplify the test by
+  // using just one tab. It is orthogonal to the test's purpose.
+  const std::string constraints = base::StringPrintf(
+      "{video: true, selfBrowserSurface: 'include', preferCurrentTab: %s}",
+      PreferCurrentTab() ? "true" : "false");
 
   std::string result;
   EXPECT_TRUE(content::ExecuteScriptAndExtractString(
@@ -668,8 +627,6 @@
  public:
   ~WebRtcSameOriginPolicyBrowserTest() override = default;
 
-  bool IsNewMediaPickerOrderEnabled() const override { return false; }
-
   bool PreferCurrentTab() const override { return false; }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -1339,17 +1296,14 @@
 
 class GetDisplayMediaSelfBrowserSurfaceBrowserTest
     : public WebRtcTestBase,
-      public testing::WithParamInterface<std::tuple<bool, std::string>> {
+      public testing::WithParamInterface<std::string> {
  public:
   GetDisplayMediaSelfBrowserSurfaceBrowserTest()
-      : new_picker_order_(std::get<0>(GetParam())),
-        self_browser_surface_(std::get<1>(GetParam())) {}
+      : self_browser_surface_(GetParam()) {}
 
   void SetUpInProcessBrowserTestFixture() override {
     WebRtcTestBase::SetUpInProcessBrowserTestFixture();
 
-    feature_list_.InitWithFeatures(EnabledFeatures(), DisabledFeatures());
-
     DetectErrorsInJavaScript();
 
     base::FilePath test_dir;
@@ -1378,8 +1332,7 @@
   }
 
   bool IsSelfBrowserSurfaceExclude() const {
-    if (new_picker_order_ && self_browser_surface_ == "" &&
-        !prefer_current_tab_) {
+    if (self_browser_surface_ == "" && !prefer_current_tab_) {
       // Special case - when using the new order, selfBrowserSurface
       // defaults to "exclude", unless {preferCurrentTab: true} is specified.
       return true;
@@ -1387,38 +1340,18 @@
     return self_browser_surface_ == "exclude";
   }
 
-  std::vector<FeatureRef> EnabledFeatures() const {
-    return new_picker_order_
-               ? std::vector<FeatureRef>{kNewGetDisplayMediaPickerOrder}
-               : std::vector<FeatureRef>{};
-  }
-
-  std::vector<FeatureRef> DisabledFeatures() const {
-    return new_picker_order_
-               ? std::vector<FeatureRef>{}
-               : std::vector<FeatureRef>{kNewGetDisplayMediaPickerOrder};
-  }
-
  protected:
-  // The new order is tabs/windows/screens.
-  // The old order is screens/windows/tabs.
-  const bool new_picker_order_;
-
   // If empty, the constraint is unused. Otherwise, the value is either
   // "include" or "exclude"
   const std::string self_browser_surface_;
 
   // Whether {preferCurrentTab: true} will be specified by the test.
   bool prefer_current_tab_ = false;
-
-  base::test::ScopedFeatureList feature_list_;
 };
 
-INSTANTIATE_TEST_SUITE_P(
-    All,
-    GetDisplayMediaSelfBrowserSurfaceBrowserTest,
-    testing::Combine(testing::Bool(),
-                     testing::Values("", "include", "exclude")));
+INSTANTIATE_TEST_SUITE_P(All,
+                         GetDisplayMediaSelfBrowserSurfaceBrowserTest,
+                         testing::Values("", "include", "exclude"));
 
 IN_PROC_BROWSER_TEST_P(GetDisplayMediaSelfBrowserSurfaceBrowserTest,
                        SelfBrowserSurfaceChangesCapturedTab) {
@@ -1490,8 +1423,6 @@
                            test_config_.display_surface));
   }
 
-  bool IsNewMediaPickerOrderEnabled() const override { return false; }
-
   bool PreferCurrentTab() const override { return false; }
 
  protected:
diff --git a/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc b/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc
index 2653ddd7..adb907c 100644
--- a/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc
+++ b/chrome/browser/policy/messaging_layer/upload/record_handler_impl.cc
@@ -173,6 +173,15 @@
 
   UploadEncryptedReportingRequestBuilder request_builder{need_encryption_key_};
   for (auto record : records_) {
+    if (record.has_record_copy()) {
+      // TODO(b/264399295): Check for duplication, initiate upload, post update
+      // event if succeeded. In case of permanent error, finalize the event with
+      // error status and continue. In case of any transient failure, break and
+      // keep the event in Storage for the next attempt.
+
+      // Upon success, remove the copy for actual upload.
+      record.clear_record_copy();
+    }
     request_builder.AddRecord(std::move(record), scoped_reservation_);
   }
 
diff --git a/chrome/browser/prefs/pref_functional_browsertest.cc b/chrome/browser/prefs/pref_functional_browsertest.cc
index 95bdd1bb..89b991c 100644
--- a/chrome/browser/prefs/pref_functional_browsertest.cc
+++ b/chrome/browser/prefs/pref_functional_browsertest.cc
@@ -244,7 +244,8 @@
 
 // Verify that we have some Local State prefs.
 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) {
-  base::Value prefs = g_browser_process->local_state()->GetPreferenceValues(
-      PrefService::INCLUDE_DEFAULTS);
-  EXPECT_TRUE(prefs.is_dict());
+  base::Value::Dict prefs =
+      g_browser_process->local_state()->GetPreferenceValues(
+          PrefService::INCLUDE_DEFAULTS);
+  EXPECT_FALSE(prefs.empty());
 }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
index a80e6085..07618e4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -115,22 +115,22 @@
         LogManager.logTreeDump();
         break;
       case Command.DECREASE_TTS_RATE:
-        this.increaseOrDecreaseSpeechProperty_(TtsSettings.RATE, false);
+        ChromeVox.tts.increaseOrDecreaseProperty(TtsSettings.RATE, false);
         return false;
       case Command.INCREASE_TTS_RATE:
-        this.increaseOrDecreaseSpeechProperty_(TtsSettings.RATE, true);
+        ChromeVox.tts.increaseOrDecreaseProperty(TtsSettings.RATE, true);
         return false;
       case Command.DECREASE_TTS_PITCH:
-        this.increaseOrDecreaseSpeechProperty_(TtsSettings.PITCH, false);
+        ChromeVox.tts.increaseOrDecreaseProperty(TtsSettings.PITCH, false);
         return false;
       case Command.INCREASE_TTS_PITCH:
-        this.increaseOrDecreaseSpeechProperty_(TtsSettings.PITCH, true);
+        ChromeVox.tts.increaseOrDecreaseProperty(TtsSettings.PITCH, true);
         return false;
       case Command.DECREASE_TTS_VOLUME:
-        this.increaseOrDecreaseSpeechProperty_(TtsSettings.VOLUME, false);
+        ChromeVox.tts.increaseOrDecreaseProperty(TtsSettings.VOLUME, false);
         return false;
       case Command.INCREASE_TTS_VOLUME:
-        this.increaseOrDecreaseSpeechProperty_(TtsSettings.VOLUME, true);
+        ChromeVox.tts.increaseOrDecreaseProperty(TtsSettings.VOLUME, true);
         return false;
       case Command.STOP_SPEECH:
         ChromeVox.tts.stop();
@@ -802,17 +802,6 @@
   }
 
   /**
-   * Increase or decrease a speech property and make an announcement.
-   * @param {string} propertyName The name of the property to change.
-   * @param {boolean} increase If true, increases the property value by one
-   *     step size, otherwise decreases.
-   * @private
-   */
-  increaseOrDecreaseSpeechProperty_(propertyName, increase) {
-    ChromeVox.tts.increaseOrDecreaseProperty(propertyName, increase);
-  }
-
-  /**
    * Called when an image frame is received on a node.
    * @param {!ChromeVoxEvent} event The event.
    * @private
diff --git a/chrome/browser/resources/chromeos/login/test_api/test_api.js b/chrome/browser/resources/chromeos/login/test_api/test_api.js
index d122078..7415414 100644
--- a/chrome/browser/resources/chromeos/login/test_api/test_api.js
+++ b/chrome/browser/resources/chromeos/login/test_api/test_api.js
@@ -726,6 +726,7 @@
     this.nextButton = new PolymerElementApi(this, '#acceptButton');
     this.readMoreButton =
         new PolymerElementApi(this.loadedStep, '#readMoreButton');
+    this.recoveryToggle = new PolymerElementApi(this, '#recoveryOptIn');
   }
 
   /** @override */
@@ -751,6 +752,14 @@
   getNextButtonName() {
     return loadTimeData.getString('consolidatedConsentAcceptAndContinue');
   }
+
+  /**
+   * Enable the toggle which controls whether the user opted-in the the
+   * cryptohome recovery feature.
+   */
+  enableRecoveryToggle() {
+    this.recoveryToggle.element().checked = true;
+  }
 }
 
 class SmartPrivacyProtectionScreenTester extends ScreenElementApi {
@@ -775,6 +784,12 @@
   }
 }
 
+class CryptohomeRecoverySetupScreenTester extends ScreenElementApi {
+  constructor() {
+    super('cryptohome-recovery-setup');
+  }
+}
+
 export class OobeApiProvider {
   constructor() {
     this.screens = {
@@ -801,6 +816,7 @@
       GestureNavigation: new GestureNavigationScreenTester(),
       ConsolidatedConsentScreen: new ConsolidatedConsentScreenTester(),
       SmartPrivacyProtectionScreen: new SmartPrivacyProtectionScreenTester(),
+      CryptohomeRecoverySetupScreen: new CryptohomeRecoverySetupScreenTester(),
     };
 
     this.loginWithPin = function(username, pin) {
diff --git a/chrome/browser/resources/print_preview/ui/sidebar.html b/chrome/browser/resources/print_preview/ui/sidebar.html
index 24c24911..60e14d2 100644
--- a/chrome/browser/resources/print_preview/ui/sidebar.html
+++ b/chrome/browser/resources/print_preview/ui/sidebar.html
@@ -39,7 +39,10 @@
     error="[[error]]" sheet-count="[[sheetCount_]]" state="[[state]]"
     settings="[[settings]]" managed="[[controlsManaged]]">
 </print-preview-header>
-<div id="container" show-bottom-shadow>
+<!-- TODO(dizhangg): Need negative tabindex so the container doesn't get
+         focused. Delete this comment when KeyboardFocusableScrollers is enabled
+         by default. -->
+<div id="container" show-bottom-shadow tabindex="-1">
   <print-preview-destination-settings id="destinationSettings"
       dark="[[inDarkMode]]" destination="{{destination}}"
       destination-state="{{destinationState}}"
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts
index aa27cfc..37a4f67 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts
@@ -21,7 +21,6 @@
 import './fingerprint_list.js';
 import './lock_screen.js';
 import './lock_screen_password_prompt_dialog.js';
-import './users_page.js';
 import './os_sync_controls.js';
 import './os_signout_dialog.js';
 import './os_sync_page.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/users_page.html b/chrome/browser/resources/settings/chromeos/os_privacy_page/manage_users_page.html
similarity index 100%
rename from chrome/browser/resources/settings/chromeos/os_people_page/users_page.html
rename to chrome/browser/resources/settings/chromeos/os_privacy_page/manage_users_page.html
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/users_page.ts b/chrome/browser/resources/settings/chromeos/os_privacy_page/manage_users_page.ts
similarity index 91%
rename from chrome/browser/resources/settings/chromeos/os_people_page/users_page.ts
rename to chrome/browser/resources/settings/chromeos/os_privacy_page/manage_users_page.ts
index bb3244b..ef93fa3 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/users_page.ts
+++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/manage_users_page.ts
@@ -4,8 +4,8 @@
 
 /**
  * @fileoverview
- * 'settings-users-page' is the settings page for managing user accounts on
- * the device.
+ * 'settings-manage-users-page' is the settings page for managing user accounts
+ * on the device.
  */
 
 import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
@@ -13,8 +13,8 @@
 import 'chrome://resources/js/action_link.js';
 import '../../controls/settings_toggle_button.js';
 import '../../settings_shared.css.js';
-import './user_list.js';
-import './users_add_user_dialog.js';
+import '../os_people_page/user_list.js';
+import '../os_people_page/users_add_user_dialog.js';
 
 import {focusWithoutInk} from 'chrome://resources/js/focus_without_ink.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
@@ -23,12 +23,12 @@
 import {Setting} from '../../mojom-webui/setting.mojom-webui.js';
 import {castExists} from '../assert_extras.js';
 import {DeepLinkingMixin} from '../deep_linking_mixin.js';
+import {SettingsUsersAddUserDialogElement} from '../os_people_page/users_add_user_dialog.js';
 import {routes} from '../os_route.js';
 import {RouteObserverMixin} from '../route_observer_mixin.js';
 import {Route} from '../router.js';
 
-import {SettingsUsersAddUserDialogElement} from './users_add_user_dialog.js';
-import {getTemplate} from './users_page.html.js';
+import {getTemplate} from './manage_users_page.html.js';
 
 const SettingsUsersPageElementBase =
     DeepLinkingMixin(RouteObserverMixin(PolymerElement));
@@ -41,7 +41,7 @@
 
 class SettingsUsersPageElement extends SettingsUsersPageElementBase {
   static get is() {
-    return 'settings-users-page' as const;
+    return 'settings-manage-users-page' as const;
   }
 
   static get template() {
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html
index 8a7caf1..780a28c 100644
--- a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html
@@ -153,8 +153,8 @@
     </template>
     <template is="dom-if" route-path="/osPrivacy/accounts">
       <os-settings-subpage page-title="$i18n{manageOtherPeople}">
-        <settings-users-page prefs="{{prefs}}">
-        </settings-users-page>
+        <settings-manage-users-page prefs="{{prefs}}">
+        </settings-manage-users-page>
       </os-settings-subpage>
     </template>
     <template is="dom-if" route-path="/osPrivacy/smartPrivacy">
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts
index 05bce9d..ceedfb04 100644
--- a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts
+++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts
@@ -16,10 +16,10 @@
 import '../../controls/settings_toggle_button.js';
 import '../../settings_shared.css.js';
 import '../os_settings_page/os_settings_subpage.js';
-import '../os_people_page/users_page.js';
 import '../os_settings_page/os_settings_animated_pages.js';
 import '../os_people_page/lock_screen.js';
 import '../os_people_page/lock_screen_password_prompt_dialog.js';
+import './manage_users_page.js';
 import './metrics_consent_toggle_button.js';
 
 import {I18nMixin, I18nMixinInterface} from 'chrome://resources/cr_elements/i18n_mixin.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.gni b/chrome/browser/resources/settings/chromeos/os_settings.gni
index 6ae2e17c..d130e33 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.gni
+++ b/chrome/browser/resources/settings/chromeos/os_settings.gni
@@ -201,9 +201,8 @@
   "chromeos/os_people_page/pin_autosubmit_dialog.ts",
   "chromeos/os_people_page/setup_fingerprint_dialog.ts",
   "chromeos/os_people_page/setup_pin_dialog.ts",
-  "chromeos/os_people_page/users_add_user_dialog.ts",
   "chromeos/os_people_page/user_list.ts",
-  "chromeos/os_people_page/users_page.ts",
+  "chromeos/os_people_page/users_add_user_dialog.ts",
   "chromeos/os_printing_page/cups_add_print_server_dialog.ts",
   "chromeos/os_printing_page/cups_add_printer_dialog.ts",
   "chromeos/os_printing_page/cups_add_printer_manually_dialog.ts",
@@ -217,6 +216,7 @@
   "chromeos/os_printing_page/cups_saved_printers.ts",
   "chromeos/os_printing_page/cups_settings_add_printer_dialog.ts",
   "chromeos/os_printing_page/os_printing_page.ts",
+  "chromeos/os_privacy_page/manage_users_page.ts",
   "chromeos/os_privacy_page/metrics_consent_toggle_button.ts",
   "chromeos/os_privacy_page/os_privacy_page.ts",
   "chromeos/os_privacy_page/peripheral_data_access_protection_dialog.ts",
@@ -438,6 +438,7 @@
   "mojom-webui/setting.mojom-webui.js",
 ]
 
+# TODO(b/207087930) Consider moving these shared files to chrome://resources
 # Files below are from Nearby Share and shared with ChromeOS Settings
 nearby_share_shared_files = [
   "shared/nearby_contact_visibility.js",
@@ -473,16 +474,6 @@
 # TODO(crbug/1315757) JS files here are available for TS conversion
 src_ts_files = non_web_component_files + web_component_files
 
-# TODO(crbug.com/1121865): browser_resolver_prefix_replacements allows path
-# from ../../shared/* to resolve to ../../../nearby_share/shared/* for closure
-# purposes.
-nearby_share_closure_flags = [
-  "js_module_root=" +
-      rebase_path("//chrome/browser/resources/nearby_share", root_build_dir),
-  "js_module_root=./gen/chrome/browser/resources/nearby_share",
-  "browser_resolver_prefix_replacements=\"../../shared/=../../../nearby_share/shared/\"",
-]
-
 # TODO(crbug.com/1179821) This allows WebUI mojom files listed under the
 # mojom-webui/ folder to be properly resolved during closure compilation.
 mojom_webui_closure_flags = [
@@ -515,5 +506,4 @@
 # TODO(crbug.com/1315757) Remove once ChromeOS Settings is fully migrated to
 # TypeScript and no longer using Closure compilation
 os_settings_closure_flags =
-    settings_closure_flags + nearby_share_closure_flags + mojom_js_args +
-    mojom_webui_closure_flags
+    settings_closure_flags + mojom_js_args + mojom_webui_closure_flags
diff --git a/chrome/browser/resources/settings/chromeos/settings_controls_types.js b/chrome/browser/resources/settings/chromeos/settings_controls_types.js
deleted file mode 100644
index e08631d..0000000
--- a/chrome/browser/resources/settings/chromeos/settings_controls_types.js
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * Externs for files shared with Browser Settings and have been migrated to
- * TypeScript. Remove if ever CrOS Settings is migrated to TS.
- * @externs
- */
-
-/** @interface */
-function PrefControlMixinInterface() {}
-
-/** @type {!chrome.settingsPrivate.PrefObject|undefined} */
-PrefControlMixinInterface.prototype.pref;
-
-/**
- * @interface
- * @extends {PrefControlMixinInterface}
- */
-function SettingsBooleanControlMixinInterface() {}
-
-/** @type {boolean} */
-SettingsBooleanControlMixinInterface.prototype.checked;
-
-/** @type {string} */
-SettingsBooleanControlMixinInterface.prototype.label;
-
-/** @return {boolean} */
-SettingsBooleanControlMixinInterface.prototype.controlDisabled = function() {};
-
-SettingsBooleanControlMixinInterface.prototype.notifyChangedByUserInteraction =
-    function() {};
-SettingsBooleanControlMixinInterface.prototype.resetToPrefValue = function() {};
-SettingsBooleanControlMixinInterface.prototype.sendPrefChange = function() {};
-
-/**
- * @constructor
- * @implements {SettingsBooleanControlMixinInterface}
- * @extends {HTMLElement}
- */
-function SettingsToggleButtonElement() {}
-
-
-/**
- * @typedef {{
- *   name: string,
- *   value: (number|string)
- * }}
- */
-let DropdownMenuOption;
-
-/**
- * @typedef {!Array<!DropdownMenuOption>}
- */
-let DropdownMenuOptionList;
-
-/** @interface */
-function SettingsPrefsElement() {}
-
-/** @param {string} key */
-SettingsPrefsElement.prototype.refresh = function(key) {};
-
-/**
- * @constructor
- * @extends {HTMLElement}
- */
-function SettingsPersonalizationOptionsElement() {}
-
-/** @return {?HTMLElement} */
-SettingsPersonalizationOptionsElement.prototype.getDriveSuggestToggle =
-    function() {};
-
-/** @return {?HTMLElement} */
-SettingsPersonalizationOptionsElement.prototype.getUrlCollectionToggle =
-    function() {};
-
-/** @return {?HTMLElement} */
-SettingsPersonalizationOptionsElement.prototype.getSearchSuggestToggle =
-    function() {};
-
-/**
- * @constructor
- * @extends {HTMLElement}
- */
-function OsSettingsSyncEncryptionOptionsElement() {}
-
-/** @return {?HTMLElement} */
-OsSettingsSyncEncryptionOptionsElement.prototype.getEncryptionsRadioButtons =
-    function() {};
-
-
-/**
- * @constructor
- * @extends {HTMLElement}
- */
-function OsSettingsSyncPageElement() {}
-
-/** @return {?SettingsPersonalizationOptionsElement} */
-OsSettingsSyncPageElement.prototype.getPersonalizationOptions = function() {};
-
-/** @return {?OsSettingsSyncEncryptionOptionsElement} */
-OsSettingsSyncPageElement.prototype.getEncryptionOptions = function() {};
-
-/**
- * Must be kept in sync with the return values of getSyncErrorAction in
- * chrome/browser/ui/webui/settings/people_handler.cc
- * @enum {string}
- */
-const StatusAction = {
-  NO_ACTION: 'noAction',             // No action to take.
-  REAUTHENTICATE: 'reauthenticate',  // User needs to reauthenticate.
-  SIGNOUT_AND_SIGNIN:
-      'signOutAndSignIn',               // User needs to sign out and sign in.
-  UPGRADE_CLIENT: 'upgradeClient',      // User needs to upgrade the client.
-  ENTER_PASSPHRASE: 'enterPassphrase',  // User needs to enter passphrase.
-  // User needs to go through key retrieval.
-  RETRIEVE_TRUSTED_VAULT_KEYS: 'retrieveTrustedVaultKeys',
-  CONFIRM_SYNC_SETTINGS:
-      'confirmSyncSettings',  // User needs to confirm sync settings.
-};
-
-/**
- * @typedef {{
- *   appsRegistered: boolean,
- *   appsSynced: boolean,
- *   autofillRegistered: boolean,
- *   autofillSynced: boolean,
- *   bookmarksRegistered: boolean,
- *   bookmarksSynced: boolean,
- *   customPassphraseAllowed: boolean,
- *   encryptAllData: boolean,
- *   explicitPassphraseTime: (string|undefined),
- *   extensionsRegistered: boolean,
- *   extensionsSynced: boolean,
- *   passphraseRequired: boolean,
- *   passwordsRegistered: boolean,
- *   passwordsSynced: boolean,
- *   paymentsIntegrationEnabled: boolean,
- *   preferencesRegistered: boolean,
- *   preferencesSynced: boolean,
- *   readingListRegistered: boolean,
- *   readingListSynced: boolean,
- *   savedTabGroupsRegistered: boolean,
- *   savedTabGroupsSynced: boolean,
- *   syncAllDataTypes: boolean,
- *   tabsRegistered: boolean,
- *   tabsSynced: boolean,
- *   themesRegistered: boolean,
- *   themesSynced: boolean,
- *   trustedVaultKeysRequired: boolean,
- *   typedUrlsRegistered: boolean,
- *   typedUrlsSynced: boolean,
- *   wifiConfigurationsRegistered: boolean,
- *   wifiConfigurationsSynced: boolean,
- * }}
- */
-let SyncPrefs;
-
-/**
- * @typedef {{childUser: (boolean|undefined),
- *            disabled: (boolean|undefined),
- *            domain: (string|undefined),
- *            hasError: (boolean|undefined),
- *            hasPasswordsOnlyError: (boolean|undefined),
- *            hasUnrecoverableError: (boolean|undefined),
- *            managed: (boolean|undefined),
- *            firstSetupInProgress: (boolean|undefined),
- *            signedIn: (boolean|undefined),
- *            signedInUsername: (string|undefined),
- *            statusAction: (!StatusAction),
- *            statusActionText: (string|undefined),
- *            statusText: (string|undefined),
- *            supervisedUser: (boolean|undefined),
- *            syncSystemEnabled: (boolean|undefined)}}
- * @see chrome/browser/ui/webui/settings/people_handler.cc
- */
-let SyncStatus;
-
-/** @interface */
-function SyncBrowserProxy() {}
-
-/** @return {!Promise<!SyncStatus>} */
-SyncBrowserProxy.prototype.getSyncStatus = function() {};
-
-SyncBrowserProxy.prototype.sendSyncPrefsChanged = function() {};
-
-/**
- * @typedef {{
- *   name: string,
- *   iconUrl: string
- * }}
- */
-let ProfileInfo;
-
-/** @interface */
-function ProfileInfoBrowserProxy() {}
-
-/** @return {!Promise<!ProfileInfo>} */
-ProfileInfoBrowserProxy.prototype.getProfileInfo = function() {};
-
-/** @interface */
-function OpenWindowProxy() {}
-
-/** @param {string} url */
-OpenWindowProxy.prototype.openURL = function(url) {};
-
-/** @interface */
-function LifetimeBrowserProxy() {}
-
-LifetimeBrowserProxy.prototype.factoryReset = function() {};
-LifetimeBrowserProxy.prototype.relaunch = function() {};
-LifetimeBrowserProxy.prototype.signOutAndRestart = function() {};
diff --git a/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc b/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc
index 788e239..e154b85c0 100644
--- a/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc
+++ b/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc
@@ -16,7 +16,6 @@
 #include "components/safe_browsing/core/browser/ping_manager.h"
 #include "components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.h"
 #include "components/safe_browsing/core/browser/sync/sync_utils.h"
-#include "components/safe_browsing/core/common/features.h"
 #include "content/public/browser/browser_task_traits.h"
 
 namespace safe_browsing {
@@ -63,8 +62,7 @@
   PrefService* prefs = profile->GetPrefs();
   signin::IdentityManager* identity_manager =
       IdentityManagerFactory::GetForProfile(profile);
-  return base::FeatureList::IsEnabled(kSafeBrowsingCsbrrWithToken) &&
-         IsEnhancedProtectionEnabled(*prefs) && identity_manager &&
+  return IsEnhancedProtectionEnabled(*prefs) && identity_manager &&
          safe_browsing::SyncUtils::IsPrimaryAccountSignedIn(identity_manager);
 }
 
diff --git a/chrome/browser/safe_browsing/chrome_ping_manager_unittest.cc b/chrome/browser/safe_browsing/chrome_ping_manager_unittest.cc
index 181d6fa..eba3a7b 100644
--- a/chrome/browser/safe_browsing/chrome_ping_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/chrome_ping_manager_unittest.cc
@@ -43,7 +43,6 @@
   void TearDown() override;
   void RunReportThreatDetailsTest(bool is_enhanced_protection,
                                   bool is_signed_in,
-                                  bool is_csbrr_token_feature_enabled,
                                   bool is_remove_cookies_feature_enabled,
                                   bool expect_access_token,
                                   bool expect_cookies_removed);
@@ -52,8 +51,7 @@
   std::unique_ptr<TestingProfileManager> profile_manager_;
 
  private:
-  void SetUpFeatureList(bool should_enable_csbrr_with_token,
-                        bool should_enable_remove_cookies);
+  void SetUpFeatureList(bool should_enable_remove_cookies);
   raw_ptr<TestingProfile> SetUpProfile(bool is_enhanced_protection,
                                        bool is_signed_in);
   TestSafeBrowsingTokenFetcher* SetUpTokenFetcher(PingManager* ping_manager);
@@ -87,15 +85,9 @@
 }
 
 void ChromePingManagerTest::SetUpFeatureList(
-    bool should_enable_csbrr_with_token,
     bool should_enable_remove_cookies) {
   std::vector<base::test::FeatureRef> enabled_features = {};
   std::vector<base::test::FeatureRef> disabled_features = {};
-  if (should_enable_csbrr_with_token) {
-    enabled_features.push_back(kSafeBrowsingCsbrrWithToken);
-  } else {
-    disabled_features.push_back(kSafeBrowsingCsbrrWithToken);
-  }
   if (should_enable_remove_cookies) {
     enabled_features.push_back(kSafeBrowsingRemoveCookiesInAuthRequests);
   } else {
@@ -133,14 +125,12 @@
 void ChromePingManagerTest::RunReportThreatDetailsTest(
     bool is_enhanced_protection,
     bool is_signed_in,
-    bool is_csbrr_token_feature_enabled,
     bool is_remove_cookies_feature_enabled,
     bool expect_access_token,
     bool expect_cookies_removed) {
   base::RunLoop csbrr_logged_run_loop;
   base::HistogramTester histogram_tester;
-  SetUpFeatureList(is_csbrr_token_feature_enabled,
-                   is_remove_cookies_feature_enabled);
+  SetUpFeatureList(is_remove_cookies_feature_enabled);
   raw_ptr<TestingProfile> profile =
       SetUpProfile(is_enhanced_protection, is_signed_in);
   auto* ping_manager = ChromePingManagerFactory::GetForBrowserContext(profile);
@@ -201,7 +191,6 @@
 TEST_F(ChromePingManagerTest, ReportThreatDetailsWithAccessToken) {
   RunReportThreatDetailsTest(/*is_enhanced_protection=*/true,
                              /*is_signed_in=*/true,
-                             /*is_csbrr_token_feature_enabled=*/true,
                              /*is_remove_cookies_feature_enabled=*/true,
                              /*expect_access_token=*/true,
                              /*expect_cookies_removed=*/true);
@@ -210,7 +199,6 @@
        ReportThreatDetailsWithAccessToken_RemoveCookiesFeatureDisabled) {
   RunReportThreatDetailsTest(/*is_enhanced_protection=*/true,
                              /*is_signed_in=*/true,
-                             /*is_csbrr_token_feature_enabled=*/true,
                              /*is_remove_cookies_feature_enabled=*/false,
                              /*expect_access_token=*/true,
                              /*expect_cookies_removed=*/false);
@@ -219,7 +207,6 @@
        ReportThreatDetailsWithoutAccessToken_NotSignedIn) {
   RunReportThreatDetailsTest(/*is_enhanced_protection=*/true,
                              /*is_signed_in=*/false,
-                             /*is_csbrr_token_feature_enabled=*/true,
                              /*is_remove_cookies_feature_enabled=*/true,
                              /*expect_access_token=*/false,
                              /*expect_cookies_removed=*/false);
@@ -228,7 +215,6 @@
        ReportThreatDetailsWithoutAccessToken_NotEnhancedProtection) {
   RunReportThreatDetailsTest(/*is_enhanced_protection=*/false,
                              /*is_signed_in=*/true,
-                             /*is_csbrr_token_feature_enabled=*/true,
                              /*is_remove_cookies_feature_enabled=*/true,
                              /*expect_access_token=*/false,
                              /*expect_cookies_removed=*/false);
@@ -238,17 +224,6 @@
       profile_manager_->CreateTestingProfile("testing_profile"));
   EXPECT_EQ(ChromePingManagerFactory::GetForBrowserContext(profile), nullptr);
 }
-// TODO(crbug.com/1296615): remove test case when deprecating
-// kSafeBrowsingCsbrrWithToken feature
-TEST_F(ChromePingManagerTest,
-       ReportThreatDetailsWithoutAccessToken_CsbrrTokenFeatureDisabled) {
-  RunReportThreatDetailsTest(/*is_enhanced_protection=*/true,
-                             /*is_signed_in=*/true,
-                             /*is_csbrr_token_feature_enabled=*/false,
-                             /*is_remove_cookies_feature_enabled=*/true,
-                             /*expect_access_token=*/false,
-                             /*expect_cookies_removed=*/false);
-}
 
 TEST_F(ChromePingManagerTest, ReportSafeBrowsingHit) {
   raw_ptr<TestingProfile> profile =
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
index 91c998f..a36b9c6 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
@@ -50,6 +50,7 @@
 import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
+import org.chromium.components.sync.UserSelectableType;
 import org.chromium.components.user_prefs.UserPrefs;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.modaldialog.ModalDialogManagerHolder;
@@ -59,6 +60,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Contains the common logic of fragments used to sign in and enable sync.
@@ -266,6 +268,11 @@
                         public void onSignInComplete() {
                             UnifiedConsentServiceBridge.setUrlKeyedAnonymizedDataCollectionEnabled(
                                     Profile.getLastUsedRegularProfile(), true);
+                            if (ChromeFeatureList.isEnabled(ChromeFeatureList.TANGIBLE_SYNC)) {
+                                SyncService.get().setSelectedTypes(false,
+                                        Set.of(UserSelectableType.HISTORY,
+                                                UserSelectableType.TABS));
+                            }
                             if (!settingsClicked) {
                                 SyncService.get().setFirstSetupComplete(
                                         SyncFirstSetupCompleteSource.BASIC_FLOW);
diff --git a/chrome/browser/ui/autofill/address_editor_controller.cc b/chrome/browser/ui/autofill/address_editor_controller.cc
index dabb8ca..2e3752d5 100644
--- a/chrome/browser/ui/autofill/address_editor_controller.cc
+++ b/chrome/browser/ui/autofill/address_editor_controller.cc
@@ -56,7 +56,7 @@
   if (chosen_country_index_ < countries_.size())
     chosen_country_code = countries_[chosen_country_index_].first;
 
-  std::vector<std::vector<autofill::ExtendedAddressUiComponent>> components;
+  std::vector<std::vector<::i18n::addressinput::AddressUiComponent>> components;
   autofill::GetAddressComponents(chosen_country_code, locale_,
                                  /*include_literals=*/false, &components,
                                  &language_code_);
@@ -68,9 +68,9 @@
       l10n_util::GetStringUTF16(IDS_LIBADDRESSINPUT_COUNTRY_OR_REGION_LABEL),
       EditorField::LengthHint::HINT_LONG, EditorField::ControlType::COMBOBOX);
 
-  for (const std::vector<autofill::ExtendedAddressUiComponent>& line :
+  for (const std::vector<::i18n::addressinput::AddressUiComponent>& line :
        components) {
-    for (const autofill::ExtendedAddressUiComponent& component : line) {
+    for (const ::i18n::addressinput::AddressUiComponent& component : line) {
       EditorField::LengthHint length_hint =
           component.length_hint ==
                   i18n::addressinput::AddressUiComponent::HINT_LONG
diff --git a/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc b/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc
index 15847124..355b8fa 100644
--- a/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/cast_device_list_host_unittest.cc
@@ -148,7 +148,7 @@
 TEST_F(CastDeviceListHostTest, SelectingDeviceClearsIssue) {
   auto sink = CreateMediaSink();
   media_router::IssueInfo issue_info(
-      "Issue Title", media_router::IssueInfo::Severity::WARNING);
+      "Issue Title", media_router::IssueInfo::Severity::WARNING, sink.id);
   media_router::Issue issue(issue_info);
   sink.issue = issue;
   host_->OnModelUpdated(CreateModelWithSinks({sink}));
diff --git a/chrome/browser/ui/media_router/media_router_ui.cc b/chrome/browser/ui/media_router/media_router_ui.cc
index 5aad2bdd..70a63dc6 100644
--- a/chrome/browser/ui/media_router/media_router_ui.cc
+++ b/chrome/browser/ui/media_router/media_router_ui.cc
@@ -415,8 +415,7 @@
       break;
   }
 
-  IssueInfo issue_info(issue_title, IssueInfo::Severity::NOTIFICATION);
-  issue_info.sink_id = sink_id;
+  IssueInfo issue_info(issue_title, IssueInfo::Severity::NOTIFICATION, sink_id);
   AddIssue(issue_info);
 }
 
@@ -434,8 +433,7 @@
   std::string issue_title = l10n_util::GetStringFUTF8(
       IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_USER_NOT_ALLOWED,
       GetSinkFriendlyNameFromId(sink_id));
-  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING);
-  issue_info.sink_id = sink_id;
+  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING, sink_id);
   AddIssue(issue_info);
 }
 
@@ -444,8 +442,7 @@
   std::string issue_title = l10n_util::GetStringFUTF8(
       IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_NOTIFICATION_DISABLED,
       GetSinkFriendlyNameFromId(sink_id));
-  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING);
-  issue_info.sink_id = sink_id;
+  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING, sink_id);
   AddIssue(issue_info);
 }
 
@@ -453,8 +450,7 @@
 #if BUILDFLAG(IS_MAC)
   std::string issue_title = l10n_util::GetStringUTF8(
       IDS_MEDIA_ROUTER_ISSUE_MAC_SCREEN_CAPTURE_PERMISSION_ERROR);
-  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING);
-  issue_info.sink_id = sink_id;
+  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING, sink_id);
   AddIssue(issue_info);
 #else
   NOTREACHED() << "Only valid for MAC OS!";
@@ -471,8 +467,7 @@
                 IDS_MEDIA_ROUTER_ISSUE_UNABLE_TO_CAST_DESKTOP)
           : l10n_util::GetStringUTF8(
                 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
-  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING);
-  issue_info.sink_id = sink_id;
+  IssueInfo issue_info(issue_title, IssueInfo::Severity::WARNING, sink_id);
   AddIssue(issue_info);
 }
 
@@ -480,8 +475,7 @@
     const MediaSink::Id& sink_id) {
   IssueInfo issue_info(
       l10n_util::GetStringUTF8(IDS_MEDIA_ROUTER_ISSUE_TAB_AUDIO_NOT_SUPPORTED),
-      IssueInfo::Severity::NOTIFICATION);
-  issue_info.sink_id = sink_id;
+      IssueInfo::Severity::NOTIFICATION, sink_id);
   AddIssue(issue_info);
 }
 
diff --git a/chrome/browser/ui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/media_router/media_router_ui_unittest.cc
index c33437b3..78df08b 100644
--- a/chrome/browser/ui/media_router/media_router_ui_unittest.cc
+++ b/chrome/browser/ui/media_router/media_router_ui_unittest.cc
@@ -451,8 +451,7 @@
   NiceMock<MockIssuesObserver> issues_observer(mock_router_->GetIssueManager());
   issues_observer.Init();
   const std::string issue_title("Issue 1");
-  IssueInfo issue(issue_title, IssueInfo::Severity::WARNING);
-  issue.sink_id = sink2.id();
+  IssueInfo issue(issue_title, IssueInfo::Severity::WARNING, sink2.id());
   Issue::Id issue_id = -1;
 
   EXPECT_CALL(issues_observer, OnIssue)
diff --git a/chrome/browser/ui/toolbar/media_router_action_controller_unittest.cc b/chrome/browser/ui/toolbar/media_router_action_controller_unittest.cc
index 6531ea7..7f14ab39 100644
--- a/chrome/browser/ui/toolbar/media_router_action_controller_unittest.cc
+++ b/chrome/browser/ui/toolbar/media_router_action_controller_unittest.cc
@@ -40,7 +40,8 @@
   MediaRouterActionControllerUnitTest()
       : issue_(media_router::IssueInfo(
             "title notification",
-            media_router::IssueInfo::Severity::NOTIFICATION)) {}
+            media_router::IssueInfo::Severity::NOTIFICATION,
+            "sinkId1")) {}
 
   MediaRouterActionControllerUnitTest(
       const MediaRouterActionControllerUnitTest&) = delete;
diff --git a/chrome/browser/ui/views/autofill/save_address_profile_view.cc b/chrome/browser/ui/views/autofill/save_address_profile_view.cc
index 157b7b4f7..23037cc 100644
--- a/chrome/browser/ui/views/autofill/save_address_profile_view.cc
+++ b/chrome/browser/ui/views/autofill/save_address_profile_view.cc
@@ -132,16 +132,16 @@
                                   HtmlFieldMode::kNone);
   const std::u16string& country_code = profile.GetInfo(kCountryCode, locale);
 
-  std::vector<std::vector<autofill::ExtendedAddressUiComponent>> components;
+  std::vector<std::vector<::i18n::addressinput::AddressUiComponent>> components;
   autofill::GetAddressComponents(base::UTF16ToUTF8(country_code), locale,
                                  /*include_literals=*/true, &components,
                                  nullptr);
 
-  for (const std::vector<autofill::ExtendedAddressUiComponent>& line :
+  for (const std::vector<::i18n::addressinput::AddressUiComponent>& line :
        components) {
     std::unique_ptr<views::View> line_view = CreateAddressLineView();
     std::vector<std::u16string> components_str;
-    for (const autofill::ExtendedAddressUiComponent& component : line) {
+    for (const ::i18n::addressinput::AddressUiComponent& component : line) {
       // AddressUiComponent can represent an address field such as City, or a
       // formatting literal such as "," or "-". If the literal field is empty,
       // then it represents a field, otherwise, it is a literal.
diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc
index 6ae3dde8..f8d2ed8 100644
--- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc
@@ -550,7 +550,7 @@
   // cast session.
   auto sink = CreateMediaSink();
   media_router::IssueInfo issue_info(
-      "Issue Title", media_router::IssueInfo::Severity::WARNING);
+      "Issue Title", media_router::IssueInfo::Severity::WARNING, sink.id);
   media_router::Issue issue(issue_info);
   sink.issue = issue;
 
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_sink_button_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_sink_button_unittest.cc
index cb0cdf1..4debd36f0 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_sink_button_unittest.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_sink_button_unittest.cc
@@ -74,7 +74,8 @@
 
 TEST_F(CastDialogSinkButtonTest, SetStatusLabelForSinkWithIssue) {
   UIMediaSink sink{mojom::MediaRouteProviderId::CAST};
-  sink.issue = Issue(IssueInfo("issue", IssueInfo::Severity::WARNING));
+  sink.issue =
+      Issue(IssueInfo("issue", IssueInfo::Severity::WARNING, "sinkId1"));
   // Issue info should be the status text regardless of the sink state.
   sink.state = UIMediaSinkState::AVAILABLE;
   CastDialogSinkButton button1(views::Button::PressedCallback(), sink);
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
index 988cb07a..bc3f374 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
@@ -192,7 +192,7 @@
 TEST_F(CastDialogViewTest, ClearIssue) {
   std::vector<UIMediaSink> media_sinks = {CreateAvailableSink()};
   media_sinks[0].issue =
-      Issue(IssueInfo("title", IssueInfo::Severity::WARNING));
+      Issue(IssueInfo("title", IssueInfo::Severity::WARNING, "sinkId1"));
   CastDialogModel model = CreateModelWithSinks(std::move(media_sinks));
   InitializeDialogWithModel(model);
   // When there is an issue, clicking on an available sink should clear the
diff --git a/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc b/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc
index 227f2bb..8f57160c 100644
--- a/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc
+++ b/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc
@@ -157,12 +157,12 @@
   button_->UpdateIcon();
   EXPECT_TRUE(gfx::test::AreImagesEqual(idle_icon_, GetIcon()));
 
-  button_->OnIssue(Issue(
-      IssueInfo("title notification", IssueInfo::Severity::NOTIFICATION)));
+  button_->OnIssue(Issue(IssueInfo(
+      "title notification", IssueInfo::Severity::NOTIFICATION, "sinkId1")));
   EXPECT_TRUE(gfx::test::AreImagesEqual(idle_icon_, GetIcon()));
 
-  button_->OnIssue(
-      Issue(IssueInfo("title warning", IssueInfo::Severity::WARNING)));
+  button_->OnIssue(Issue(
+      IssueInfo("title warning", IssueInfo::Severity::WARNING, "sinkId1")));
   EXPECT_TRUE(gfx::test::AreImagesEqual(warning_icon_, GetIcon()));
 
   button_->OnIssuesCleared();
diff --git a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
index 53c92c4..a175b7c 100644
--- a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
+++ b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
@@ -43,7 +43,8 @@
  public:
   MediaRouterUIBrowserTest()
       : issue_(IssueInfo("title notification",
-                         IssueInfo::Severity::NOTIFICATION)) {}
+                         IssueInfo::Severity::NOTIFICATION,
+                         "sinkId1")) {}
   ~MediaRouterUIBrowserTest() override {}
 
   void SetUpOnMainThread() override {
diff --git a/chrome/browser/ui/views/payments/payment_handler_header_view_ui_browsertest.cc b/chrome/browser/ui/views/payments/payment_handler_header_view_ui_browsertest.cc
index f3053c55..2e47714 100644
--- a/chrome/browser/ui/views/payments/payment_handler_header_view_ui_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_handler_header_view_ui_browsertest.cc
@@ -93,10 +93,6 @@
 }
 
 IN_PROC_BROWSER_TEST_P(PaymentHandlerHeaderViewUITest, HeaderWithoutIcon) {
-  // TODO(crbug.com/1385136): Handle missing/empty icons in minimal header UX.
-  if (minimal_header_ux_enabled_)
-    return;
-
   std::string method_name;
   InstallPaymentAppWithoutIcon("a.com", "/payment_handler_sw.js", &method_name);
 
diff --git a/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc b/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc
index fb96e29..325cd86 100644
--- a/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc
+++ b/chrome/browser/ui/views/payments/payment_handler_web_flow_view_controller.cc
@@ -321,13 +321,17 @@
 
   // Icon column.
   const SkBitmap* icon_bitmap = state()->selected_app()->icon_bitmap();
-  // TODO(crbug.com/1385136): Handle missing/empty/rectangular icons.
-  DCHECK(icon_bitmap && !icon_bitmap->drawsNothing());
-  layout->AddColumn(
-      views::LayoutAlignment::kStart, views::LayoutAlignment::kCenter,
-      views::TableLayout::kFixedSize, views::TableLayout::ColumnSize::kFixed,
-      /*fixed_width=*/32,
-      /*min_width=*/0);
+  const bool has_icon = icon_bitmap && !icon_bitmap->drawsNothing();
+  constexpr int kHeaderIconWidth = 32;
+  if (has_icon) {
+    layout->AddColumn(views::LayoutAlignment::kStart,
+                      views::LayoutAlignment::kCenter,
+                      views::TableLayout::kFixedSize,
+                      views::TableLayout::ColumnSize::kFixed, kHeaderIconWidth,
+                      /*min_width=*/0);
+  } else {
+    layout->AddPaddingColumn(views::TableLayout::kFixedSize, kHeaderIconWidth);
+  }
 
   // Origin column.
   layout->AddColumn(
@@ -350,19 +354,22 @@
   //
   // We should set image size in density independent pixels here, since
   // views::ImageView objects are rastered at the device scale factor.
-  views::ImageView* app_icon_view = container->AddChildView(CreateAppIconView(
-      /*icon_resource_id=*/0, icon_bitmap,
-      // TODO(crbug.com/1385136): Determine correct text (used for both tooltip
-      // and screen reader).
-      /*tooltip_text=*/GetPaymentHandlerDialogTitle(web_contents())));
-  app_icon_view->SetID(static_cast<int>(DialogViewID::PAYMENT_APP_HEADER_ICON));
-  float adjusted_width =
-      base::checked_cast<float>(icon_bitmap->width()) *
-      (IconSizeCalculator::kPaymentAppDeviceIndependentIdealIconHeight /
-       icon_bitmap->height());
-  app_icon_view->SetImageSize(gfx::Size(
-      adjusted_width,
-      IconSizeCalculator::kPaymentAppDeviceIndependentIdealIconHeight));
+  if (has_icon) {
+    views::ImageView* app_icon_view = container->AddChildView(CreateAppIconView(
+        /*icon_resource_id=*/0, icon_bitmap,
+        // TODO(crbug.com/1414090): Determine correct text (used for both
+        // tooltip and screen reader).
+        /*tooltip_text=*/GetPaymentHandlerDialogTitle(web_contents())));
+    app_icon_view->SetID(
+        static_cast<int>(DialogViewID::PAYMENT_APP_HEADER_ICON));
+    float adjusted_width =
+        base::checked_cast<float>(icon_bitmap->width()) *
+        (IconSizeCalculator::kPaymentAppDeviceIndependentIdealIconHeight /
+         icon_bitmap->height());
+    app_icon_view->SetImageSize(gfx::Size(
+        adjusted_width,
+        IconSizeCalculator::kPaymentAppDeviceIndependentIdealIconHeight));
+  }
 
   // Add the origin label.
   const url::Origin origin =
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
index eec03d0..5924aa76 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
@@ -437,7 +437,7 @@
   if (chosen_country_index_ < countries_.size())
     chosen_country_code = countries_[chosen_country_index_].first;
 
-  std::vector<std::vector<autofill::ExtendedAddressUiComponent>> components;
+  std::vector<std::vector<::i18n::addressinput::AddressUiComponent>> components;
   autofill::GetAddressComponents(
       chosen_country_code, state()->GetApplicationLocale(),
       /*include_literals=*/false, &components, &language_code_);
@@ -449,9 +449,9 @@
       EditorField::LengthHint::HINT_SHORT, /*required=*/true,
       EditorField::ControlType::COMBOBOX);
 
-  for (const std::vector<autofill::ExtendedAddressUiComponent>& line :
+  for (const std::vector<::i18n::addressinput::AddressUiComponent>& line :
        components) {
-    for (const autofill::ExtendedAddressUiComponent& component : line) {
+    for (const ::i18n::addressinput::AddressUiComponent& component : line) {
       EditorField::LengthHint length_hint =
           component.length_hint ==
                   i18n::addressinput::AddressUiComponent::HINT_LONG
diff --git a/chrome/browser/ui/views/profiles/profile_picker_window_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_window_browsertest.cc
new file mode 100644
index 0000000..2410fabd
--- /dev/null
+++ b/chrome/browser/ui/views/profiles/profile_picker_window_browsertest.cc
@@ -0,0 +1,71 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/run_loop.h"
+#include "chrome/browser/ui/profile_picker.h"
+#include "chrome/browser/ui/views/profiles/profile_picker_test_base.h"
+#include "chromeos/ui/frame/caption_buttons/frame_caption_button_container_view.h"
+#include "chromeos/ui/frame/non_client_frame_view_base.h"
+#include "content/public/test/browser_test.h"
+#include "ui/views/widget/widget.h"
+#include "ui/views/window/non_client_view.h"
+
+using ProfilePickerWindowBrowserTest = ProfilePickerTestBase;
+
+// Based on the existing Ash test of the same name in:
+//   //ash/frame/non_client_frame_view_ash_unittest.cc
+//
+// Regression test for:
+//   - https://crbug.com/839955
+//   - https://crbug.com/1385921
+IN_PROC_BROWSER_TEST_F(ProfilePickerWindowBrowserTest,
+                       ActiveStateOfButtonMatchesWidget) {
+  ProfilePicker::Show(ProfilePicker::Params::FromEntryPoint(
+      ProfilePicker::EntryPoint::kOnStartup));
+  EXPECT_TRUE(ProfilePicker::IsOpen());
+  WaitForPickerWidgetCreated();
+
+  views::NonClientView* non_client_view = widget()->non_client_view();
+  ASSERT_NE(non_client_view, nullptr);
+  views::NonClientFrameView* non_client_frame_view =
+      non_client_view->frame_view();
+  ASSERT_NE(non_client_frame_view, nullptr);
+  // We make the assumption that this test is running under ChromeOS so that we
+  // can use the ChromeOS-specific subclass chromeos::NonClientFrameViewBase.
+  chromeos::NonClientFrameViewBase* non_client_frame_view_base =
+      static_cast<chromeos::NonClientFrameViewBase*>(non_client_frame_view);
+  chromeos::FrameCaptionButtonContainerView::TestApi test_api(
+      non_client_frame_view_base->GetHeaderView()->caption_button_container());
+
+  // Wait for the profile picker widget to activate.
+  base::RunLoop run_loop;
+  auto subscription =
+      widget()->RegisterPaintAsActiveChangedCallback(run_loop.QuitClosure());
+  if (widget()->ShouldPaintAsActive()) {
+    run_loop.Quit();
+  }
+  run_loop.Run();
+
+  EXPECT_TRUE(widget()->IsActive());
+  EXPECT_TRUE(non_client_frame_view->ShouldPaintAsActive());
+  EXPECT_TRUE(test_api.size_button()->GetPaintAsActive());
+
+  // Activate a different widget so the original one loses activation.
+  auto widget2 = std::make_unique<views::Widget>();
+  views::Widget::InitParams params;
+  params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+  params.type = views::Widget::InitParams::TYPE_WINDOW;
+  widget2->Init(std::move(params));
+
+  // Wait for the other widget to activate.
+  base::RunLoop run_loop2;
+  auto subscription2 =
+      widget2->RegisterPaintAsActiveChangedCallback(run_loop2.QuitClosure());
+  widget2->Show();
+  run_loop2.Run();
+
+  EXPECT_FALSE(widget()->IsActive());
+  EXPECT_FALSE(non_client_frame_view->ShouldPaintAsActive());
+  EXPECT_FALSE(test_api.size_button()->GetPaintAsActive());
+}
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
index c929fc7e..6765f1b2 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
@@ -2659,5 +2659,111 @@
   helper_.CheckWindowControlsOverlay(Site::kWco, IsOn::kOff);
 }
 
+IN_PROC_BROWSER_TEST_F(
+    WebAppIntegration,
+    WAI_29FileHandlerWindowed_118FileHandlerFoo_118FileHandlerBar_120FileHandlerMultipleBarFilesAllowAskAgain_126FileHandlerMultipleBarFiles) {
+  // Test contents are generated by script. Please do not modify!
+  // See `docs/webapps/why-is-this-test-failing.md` or
+  // `docs/webapps/integration-testing-framework` for more info.
+  // Sheriffs: Disabling this test is supported.
+  helper_.CreateShortcut(Site::kFileHandler, WindowOptions::kWindowed);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kFoo);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kBar);
+  helper_.LaunchFileExpectDialog(
+      Site::kFileHandler, FilesOptions::kMultipleBarFiles,
+      AllowDenyOptions::kAllow, AskAgainOptions::kAskAgain);
+  helper_.CheckFilesLoadedInSite(Site::kFileHandler,
+                                 FilesOptions::kMultipleBarFiles);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    WebAppIntegration,
+    WAI_29FileHandlerBrowser_118FileHandlerFoo_118FileHandlerBar_120FileHandlerMultipleBarFilesAllowAskAgain_126FileHandlerMultipleBarFiles) {
+  // Test contents are generated by script. Please do not modify!
+  // See `docs/webapps/why-is-this-test-failing.md` or
+  // `docs/webapps/integration-testing-framework` for more info.
+  // Sheriffs: Disabling this test is supported.
+  helper_.CreateShortcut(Site::kFileHandler, WindowOptions::kBrowser);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kFoo);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kBar);
+  helper_.LaunchFileExpectDialog(
+      Site::kFileHandler, FilesOptions::kMultipleBarFiles,
+      AllowDenyOptions::kAllow, AskAgainOptions::kAskAgain);
+  helper_.CheckFilesLoadedInSite(Site::kFileHandler,
+                                 FilesOptions::kMultipleBarFiles);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    WebAppIntegration,
+    WAI_32FileHandlerWithShortcutWindowedWebApp_118FileHandlerFoo_118FileHandlerBar_120FileHandlerMultipleBarFilesAllowAskAgain_126FileHandlerMultipleBarFiles) {
+  // Test contents are generated by script. Please do not modify!
+  // See `docs/webapps/why-is-this-test-failing.md` or
+  // `docs/webapps/integration-testing-framework` for more info.
+  // Sheriffs: Disabling this test is supported.
+  helper_.InstallPolicyApp(Site::kFileHandler, ShortcutOptions::kWithShortcut,
+                           WindowOptions::kWindowed, InstallMode::kWebApp);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kFoo);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kBar);
+  helper_.LaunchFileExpectDialog(
+      Site::kFileHandler, FilesOptions::kMultipleBarFiles,
+      AllowDenyOptions::kAllow, AskAgainOptions::kAskAgain);
+  helper_.CheckFilesLoadedInSite(Site::kFileHandler,
+                                 FilesOptions::kMultipleBarFiles);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    WebAppIntegration,
+    WAI_32FileHandlerWithShortcutBrowserWebApp_118FileHandlerFoo_118FileHandlerBar_120FileHandlerMultipleBarFilesAllowAskAgain_126FileHandlerMultipleBarFiles) {
+  // Test contents are generated by script. Please do not modify!
+  // See `docs/webapps/why-is-this-test-failing.md` or
+  // `docs/webapps/integration-testing-framework` for more info.
+  // Sheriffs: Disabling this test is supported.
+  helper_.InstallPolicyApp(Site::kFileHandler, ShortcutOptions::kWithShortcut,
+                           WindowOptions::kBrowser, InstallMode::kWebApp);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kFoo);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kBar);
+  helper_.LaunchFileExpectDialog(
+      Site::kFileHandler, FilesOptions::kMultipleBarFiles,
+      AllowDenyOptions::kAllow, AskAgainOptions::kAskAgain);
+  helper_.CheckFilesLoadedInSite(Site::kFileHandler,
+                                 FilesOptions::kMultipleBarFiles);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    WebAppIntegration,
+    WAI_32FileHandlerNoShortcutWindowedWebApp_118FileHandlerFoo_118FileHandlerBar_120FileHandlerMultipleBarFilesAllowAskAgain_126FileHandlerMultipleBarFiles) {
+  // Test contents are generated by script. Please do not modify!
+  // See `docs/webapps/why-is-this-test-failing.md` or
+  // `docs/webapps/integration-testing-framework` for more info.
+  // Sheriffs: Disabling this test is supported.
+  helper_.InstallPolicyApp(Site::kFileHandler, ShortcutOptions::kNoShortcut,
+                           WindowOptions::kWindowed, InstallMode::kWebApp);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kFoo);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kBar);
+  helper_.LaunchFileExpectDialog(
+      Site::kFileHandler, FilesOptions::kMultipleBarFiles,
+      AllowDenyOptions::kAllow, AskAgainOptions::kAskAgain);
+  helper_.CheckFilesLoadedInSite(Site::kFileHandler,
+                                 FilesOptions::kMultipleBarFiles);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    WebAppIntegration,
+    WAI_32FileHandlerNoShortcutBrowserWebApp_118FileHandlerFoo_118FileHandlerBar_120FileHandlerMultipleBarFilesAllowAskAgain_126FileHandlerMultipleBarFiles) {
+  // Test contents are generated by script. Please do not modify!
+  // See `docs/webapps/why-is-this-test-failing.md` or
+  // `docs/webapps/integration-testing-framework` for more info.
+  // Sheriffs: Disabling this test is supported.
+  helper_.InstallPolicyApp(Site::kFileHandler, ShortcutOptions::kNoShortcut,
+                           WindowOptions::kBrowser, InstallMode::kWebApp);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kFoo);
+  helper_.CheckSiteHandlesFile(Site::kFileHandler, FileExtension::kBar);
+  helper_.LaunchFileExpectDialog(
+      Site::kFileHandler, FilesOptions::kMultipleBarFiles,
+      AllowDenyOptions::kAllow, AskAgainOptions::kAskAgain);
+  helper_.CheckFilesLoadedInSite(Site::kFileHandler,
+                                 FilesOptions::kMultipleBarFiles);
+}
+
 }  // namespace
 }  // namespace web_app::integration_tests
diff --git a/chrome/browser/ui/webui/prefs_internals_source.cc b/chrome/browser/ui/webui/prefs_internals_source.cc
index ca0c1eb..20a21647 100644
--- a/chrome/browser/ui/webui/prefs_internals_source.cc
+++ b/chrome/browser/ui/webui/prefs_internals_source.cc
@@ -33,7 +33,7 @@
     content::URLDataSource::GotDataCallback callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   std::string json;
-  base::Value prefs =
+  base::Value::Dict prefs =
       profile_->GetPrefs()->GetPreferenceValues(PrefService::INCLUDE_DEFAULTS);
   CHECK(base::JSONWriter::WriteWithOptions(
       prefs, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json));
diff --git a/chrome/browser/ui/webui/side_panel/search_companion/search_companion.mojom b/chrome/browser/ui/webui/side_panel/search_companion/search_companion.mojom
index 180cdf4..052ea61c 100644
--- a/chrome/browser/ui/webui/side_panel/search_companion/search_companion.mojom
+++ b/chrome/browser/ui/webui/side_panel/search_companion/search_companion.mojom
@@ -24,14 +24,14 @@
   OnURLChanged(string new_url);
 
   // Pass the Zero Suggest Prefix data to frontend
-  // TODO(mercerd): Use actual struct instead of string
+  // TODO(b/268286065): Use actual struct instead of string
   OnNewZeroSuggestPrefixData(string suggest_response);
 
   // Pass the optimization guide page annotations to the frontend
-  // TODO(mercerd): Use actual struct instead of string
+  // TODO(b/268286065): Use actual struct instead of string
   OnNewOptimizationGuidePageAnnotations(string content_annotations);
 
   // Pass the current viewport images to the frontend
-  // TODO(mercerd): Pass actual Image struct instead of assembling a string
+  // TODO(b/268286065): Pass actual Image struct instead of assembling a string
   OnNewViewportImages(string images_string);
 };
diff --git a/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.cc b/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.cc
index 18710c6a..578e040 100644
--- a/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.cc
+++ b/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.cc
@@ -67,11 +67,8 @@
     opt_guide_ = OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
 
     if (opt_guide_) {
-      std::vector<optimization_guide::proto::OptimizationType> types;
-      types.push_back(
-          optimization_guide::proto::OptimizationType::PAGE_ENTITIES);
-
-      opt_guide_->RegisterOptimizationTypes(types);
+      opt_guide_->RegisterOptimizationTypes(
+          {optimization_guide::proto::OptimizationType::PAGE_ENTITIES});
     }
   }
 }
@@ -87,7 +84,7 @@
 
   // Use zero suggest returning as the trigger to request entities from
   // optimization guide.
-  // TODO(mercerd): In the future use web navigation in the main frame to
+  // TODO(b/268285939): In the future use web navigation in the main frame to
   // trigger.
   if (opt_guide_) {
     opt_guide_->CanApplyOptimization(
@@ -100,8 +97,8 @@
 
   // Use zero suggest returning as the trigger to start a recurring timer to
   // fetch images from the main frame.
-  // TODO(mercerd): Rather than using a timer explore listening to page scroll
-  // events.
+  // TODO(b/268285663): Rather than using a timer explore listening to page
+  // scroll events.
   ExecuteFetchImagesJavascript();  // Fetching images one time right away
   fetch_images_timer_.Start(
       FROM_HERE, kTimerInterval, this,
@@ -117,9 +114,8 @@
   absl::optional<PageEntitiesMetadata> page_entities_metadata =
       metadata.ParsedMetadata<PageEntitiesMetadata>();
   if (page_entities_metadata) {
-    PageEntitiesMetadata entities_metadata = *page_entities_metadata;
     NotifyNewOptimizationGuidePageAnnotations(
-        ContentAnnotationsToString(entities_metadata));
+        ContentAnnotationsToString(*page_entities_metadata));
   }
 }
 
@@ -140,22 +136,20 @@
   main_frame_render_host->ExecuteJavaScriptInIsolatedWorld(
       base::UTF8ToUTF16(script),
       base::BindOnce(&SearchCompanionPageHandler::OnFetchImagesJavascriptResult,
-                     weak_ptr_factory_.GetWeakPtr(), GURL("www.foo.com")),
+                     weak_ptr_factory_.GetWeakPtr()),
       ISOLATED_WORLD_ID_CHROME_INTERNAL);
 }
 
 void SearchCompanionPageHandler::OnFetchImagesJavascriptResult(
-    const GURL url,
     base::Value result) {
   data_decoder::DataDecoder::ParseJsonIsolated(
       result.GetString(),
       base::BindOnce(
           &SearchCompanionPageHandler::OnImageFetchJsonSanitizationCompleted,
-          weak_ptr_factory_.GetWeakPtr(), url));
+          weak_ptr_factory_.GetWeakPtr()));
 }
 
 void SearchCompanionPageHandler::OnImageFetchJsonSanitizationCompleted(
-    const GURL url,
     data_decoder::DataDecoder::ValueOrError result) {
   if (!result.has_value() || !result.value().is_dict()) {
     return;
diff --git a/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.h b/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.h
index ffe2626..c039f97 100644
--- a/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.h
+++ b/chrome/browser/ui/webui/side_panel/search_companion/search_companion_page_handler.h
@@ -77,10 +77,9 @@
   // image url of images on screen which fill certain filtering criteria.
   void ExecuteFetchImagesJavascript();
   // Handle the output of the fetch images javascript to ensure it is valid.
-  void OnFetchImagesJavascriptResult(const GURL url, base::Value result);
+  void OnFetchImagesJavascriptResult(base::Value result);
   // Handle the output of the fetch images javascript after validity is ensured.
   void OnImageFetchJsonSanitizationCompleted(
-      const GURL url,
       data_decoder::DataDecoder::ValueOrError result);
 
   base::RepeatingTimer fetch_images_timer_;
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index e269654..a2a8407 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1675846790-55a9672b78eb2d71f4430c3ea115d0daf558a179.profdata
+chrome-win32-main-1675868378-1e5d86b1ee35f4a2c318fa716bb9027e93de9907.profdata
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index f9b7faea..8f68094 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -1738,11 +1738,11 @@
 const wchar_t* ShellUtil::kPotentialFileAssociations[] = {
     L".htm", L".html",  L".pdf",  L".shtml", L".svg",
     L".xht", L".xhtml", L".webp", nullptr};
-const wchar_t* ShellUtil::kBrowserProtocolAssociations[] = {L"ftp", L"http",
-                                                            L"https", nullptr};
+const wchar_t* ShellUtil::kBrowserProtocolAssociations[] = {L"http", L"https",
+                                                            nullptr};
 const wchar_t* ShellUtil::kPotentialProtocolAssociations[] = {
-    L"ftp", L"http",  L"https", L"irc", L"mailto", L"mms",    L"news", L"nntp",
-    L"sms", L"smsto", L"snews", L"tel", L"urn",    L"webcal", nullptr};
+    L"http", L"https", L"irc",   L"mailto", L"mms", L"news",   L"nntp",
+    L"sms",  L"smsto", L"snews", L"tel",    L"urn", L"webcal", nullptr};
 const wchar_t* ShellUtil::kRegUrlProtocol = L"URL Protocol";
 const wchar_t* ShellUtil::kRegApplication = L"\\Application";
 const wchar_t* ShellUtil::kRegAppUserModelId = L"AppUserModelId";
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 07f53d0..9a38b0c58 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4302,6 +4302,7 @@
         "//chrome/browser/metrics/structured",
         "//chrome/browser/nearby_sharing/common",
         "//chrome/browser/policy:onc",
+        "//chrome/browser/policy/messaging_layer/proto:log_upload_event_proto",
         "//chrome/browser/resources/chromeos/accessibility:browser_tests",
         "//chrome/browser/ui:ash_test_support",
         "//chrome/browser/ui/ash/holding_space:browser_tests",
@@ -4920,6 +4921,7 @@
       "../browser/ui/views/intent_picker_bubble_view_browsertest.cc",
       "../browser/ui/views/location_bar/intent_chip_button_browsertest.cc",
       "../browser/ui/views/profiles/profile_picker_view_browsertest.cc",
+      "../browser/ui/views/profiles/profile_picker_window_browsertest.cc",
       "../browser/ui/views/web_apps/web_app_integration_browsertest.cc",
       "../browser/ui/views/web_apps/web_app_integration_browsertest_cros.cc",
       "../browser/ui/views/web_apps/web_app_integration_browsertest_win_linux_cros.cc",
@@ -4952,6 +4954,7 @@
       "//chromeos/services/machine_learning/public/mojom",
       "//chromeos/startup",
       "//chromeos/ui/base",
+      "//chromeos/ui/frame",
       "//components/account_manager_core:test_support",
       "//components/captive_portal/content:content",
       "//components/captive_portal/core:buildflags",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/BookmarkTestUtil.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/BookmarkTestUtil.java
index cf09a0c..a846c266 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/BookmarkTestUtil.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/BookmarkTestUtil.java
@@ -12,7 +12,6 @@
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
-import org.chromium.chrome.browser.app.bookmarks.BookmarkActivity;
 import org.chromium.chrome.browser.app.bookmarks.BookmarkAddEditFolderActivity;
 import org.chromium.chrome.browser.app.bookmarks.BookmarkEditActivity;
 import org.chromium.chrome.browser.bookmarks.BookmarkModel;
@@ -58,15 +57,6 @@
         return (ChromeTabbedActivity) ApplicationStatus.getLastTrackedFocusedActivity();
     }
 
-    public static BookmarkActivity waitForBookmarkActivity() {
-        CriteriaHelper.pollUiThread(() -> {
-            Criteria.checkThat(ApplicationStatus.getLastTrackedFocusedActivity(),
-                    IsInstanceOf.instanceOf(BookmarkActivity.class));
-        });
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-        return (BookmarkActivity) ApplicationStatus.getLastTrackedFocusedActivity();
-    }
-
     public static BookmarkEditActivity waitForEditActivity() {
         CriteriaHelper.pollUiThread(() -> {
             Criteria.checkThat(ApplicationStatus.getLastTrackedFocusedActivity(),
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeApplicationTestUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeApplicationTestUtils.java
index d73dae01..69e71d25 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeApplicationTestUtils.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeApplicationTestUtils.java
@@ -39,7 +39,7 @@
     // Increase the default timeout, as it can take a long time for Android to
     // fully stop/start Chrome.
     private static final long CHROME_STOP_START_TIMEOUT_MS =
-            Math.max(10000L, CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL);
+            Math.max(20000L, CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL);
 
     private static PowerManager.WakeLock sWakeLock;
 
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/manifest.json b/chrome/test/data/extensions/api_test/tabs/basics/manifest.json
index fb5efd4..38adaca0 100644
--- a/chrome/test/data/extensions/api_test/tabs/basics/manifest.json
+++ b/chrome/test/data/extensions/api_test/tabs/basics/manifest.json
@@ -3,5 +3,5 @@
   "version": "0.1",
   "manifest_version": 2,
   "description": "end-to-end browser test for chrome.tabs API",
-  "permissions": ["tabs"]
+  "permissions": ["storage", "tabs"]
 }
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/remove-multiple.js b/chrome/test/data/extensions/api_test/tabs/basics/remove-multiple.js
index 8daf765..6e3fc7f2 100644
--- a/chrome/test/data/extensions/api_test/tabs/basics/remove-multiple.js
+++ b/chrome/test/data/extensions/api_test/tabs/basics/remove-multiple.js
@@ -7,12 +7,15 @@
 var thirdTabId;
 var fourthTabId;
 
-function resolveOnMessage(expected_message, resolve) {
-  chrome.runtime.onMessage.addListener(function local(message) {
-    if (message == expected_message) {
-      chrome.runtime.onMessage.removeListener(local);
-      resolve();
-    }
+function resolveOnStorageChanged(key, resolve) {
+  chrome.storage.local.onChanged.addListener(function local(changes,
+                                                            areaName) {
+    let change = changes[key];
+    if (change == undefined)
+      return;
+    assertEq({'newValue': 'yes'}, change)
+    chrome.storage.local.onChanged.removeListener(local);
+    resolve();
   });
 }
 
@@ -65,10 +68,10 @@
       });
   },
   function removeCreatedTabs() {
-    let onMessagePromise1 =
-        new Promise(resolveOnMessage.bind(this, 'did_run_unload_1'));
-    let onMessagePromise2 =
-        new Promise(resolveOnMessage.bind(this, 'did_run_unload_2'));
+    let onStorageChangedPromise1 =
+        new Promise(resolveOnStorageChanged.bind(this, 'did_run_unload_1'));
+    let onStorageChangedPromise2 =
+        new Promise(resolveOnStorageChanged.bind(this, 'did_run_unload_2'));
 
     let removePromise = new Promise((resolve) => {
       chrome.tabs.remove([secondTabId, thirdTabId, fourthTabId], () => {
@@ -83,7 +86,7 @@
       });
     });
 
-    Promise.all([onMessagePromise1, onMessagePromise2, removePromise]).then(
-        chrome.test.succeed);
+    Promise.all([onStorageChangedPromise1, onStorageChangedPromise2,
+                 removePromise]).then(chrome.test.succeed);
   }
 ]);
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/remove.js b/chrome/test/data/extensions/api_test/tabs/basics/remove.js
index 430386a..53b27b8 100644
--- a/chrome/test/data/extensions/api_test/tabs/basics/remove.js
+++ b/chrome/test/data/extensions/api_test/tabs/basics/remove.js
@@ -2,10 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-function resolveOnMessage(resolve) {
-  chrome.runtime.onMessage.addListener(function local(message) {
-    chrome.runtime.onMessage.removeListener(local);
-    assertEq('did_run_unload_1', message);
+function resolveOnStorageChanged(resolve) {
+  chrome.storage.local.onChanged.addListener(function local(changes,
+                                                            areaName) {
+    assertEq({'newValue': 'yes'}, changes['did_run_unload_1'])
+    chrome.storage.local.onChanged.removeListener(local);
     resolve();
   });
 }
@@ -19,16 +20,19 @@
         secondTabId = tab.id;
         assertTrue(tab.active);
         assertEq(1, tab.index);
-        chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
+        chrome.tabs.onUpdated.addListener(function local(tabId,
+                                                         changeInfo,
+                                                         tab) {
           // Wait for the second tab to finish loading before moving on.
           if (tabId == secondTabId && changeInfo.status == 'complete') {
+            chrome.tabs.onUpdated.removeListener(local);
             chrome.test.succeed();
           }
         });
       });
   },
   function removeSecondTab() {
-    let onMessagePromise = new Promise(resolveOnMessage);
+    let onStoragePromise = new Promise(resolveOnStorageChanged);
 
     let removePromise = new Promise((resolve) => {
       chrome.tabs.remove(secondTabId, () => {
@@ -36,6 +40,6 @@
       });
     });
 
-    Promise.all([onMessagePromise, removePromise]).then(chrome.test.succeed);
+    Promise.all([onStoragePromise, removePromise]).then(chrome.test.succeed);
   }
 ]);
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-1.js b/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-1.js
index 684c74c..67ba31b 100644
--- a/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-1.js
+++ b/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-1.js
@@ -3,5 +3,5 @@
 // found in the LICENSE file.
 
 window.addEventListener('unload', (e) => {
-  chrome.runtime.sendMessage('did_run_unload_1');
+  chrome.storage.local.set({'did_run_unload_1': 'yes'});
 });
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-2.js b/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-2.js
index 900a57b..a71d6246 100644
--- a/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-2.js
+++ b/chrome/test/data/extensions/api_test/tabs/basics/unload-storage-2.js
@@ -3,5 +3,5 @@
 // found in the LICENSE file.
 
 window.addEventListener('unload', (e) => {
-  chrome.runtime.sendMessage('did_run_unload_2');
+  chrome.storage.local.set({'did_run_unload_2': 'yes'});
 });
diff --git a/chrome/test/data/webui/settings/chromeos/BUILD.gn b/chrome/test/data/webui/settings/chromeos/BUILD.gn
index b53166e..afe0c89 100644
--- a/chrome/test/data/webui/settings/chromeos/BUILD.gn
+++ b/chrome/test/data/webui/settings/chromeos/BUILD.gn
@@ -95,6 +95,7 @@
   "keyboard_shortcut_banner_test.js",
   "lock_screen_tests.js",
   "manage_accessibility_page_tests.js",
+  "manage_users_page_tests.js",
   "multidevice_combined_setup_item_tests.js",
   "multidevice_feature_item_tests.js",
   "multidevice_feature_toggle_tests.js",
@@ -199,7 +200,6 @@
   "timezone_selector_test.js",
   "timezone_subpage_test.js",
   "tts_subpage_test.js",
-  "user_page_tests.js",
   "utils.ts",
 ]
 
diff --git a/chrome/test/data/webui/settings/chromeos/user_page_tests.js b/chrome/test/data/webui/settings/chromeos/manage_users_page_tests.js
similarity index 97%
rename from chrome/test/data/webui/settings/chromeos/user_page_tests.js
rename to chrome/test/data/webui/settings/chromeos/manage_users_page_tests.js
index a9ed20b..af589a2 100644
--- a/chrome/test/data/webui/settings/chromeos/user_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/manage_users_page_tests.js
@@ -45,7 +45,7 @@
 
 function createUsersPage() {
   PolymerTest.clearBody();
-  page = document.createElement('settings-users-page');
+  page = document.createElement('settings-manage-users-page');
   page.set('prefs', {
     cros: {
       accounts: {
@@ -81,7 +81,7 @@
   }
 }
 
-suite('UserPage', () => {
+suite('ManageUsersPage', () => {
   setup(function() {
     createUsersPage();
   });
diff --git a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
index ea0ceec..b41e10c1 100644
--- a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
@@ -195,7 +195,7 @@
     flush();
 
     const deepLinkElement =
-        privacyPage.shadowRoot.querySelector('settings-users-page')
+        privacyPage.shadowRoot.querySelector('settings-manage-users-page')
             .shadowRoot.querySelector('#allowGuestBrowsing')
             .shadowRoot.querySelector('cr-toggle');
     await waitAfterNextRender(deepLinkElement);
@@ -212,7 +212,7 @@
     flush();
 
     const deepLinkElement =
-        privacyPage.shadowRoot.querySelector('settings-users-page')
+        privacyPage.shadowRoot.querySelector('settings-manage-users-page')
             .shadowRoot.querySelector('#showUserNamesOnSignIn')
             .shadowRoot.querySelector('cr-toggle');
     await waitAfterNextRender(deepLinkElement);
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
index d5c3cff6..1234eaf 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -433,6 +433,7 @@
  ['KeyboardShortcutBanner', 'keyboard_shortcut_banner_test.js'],
  ['LockScreenPage', 'lock_screen_tests.js'],
  ['ManageAccessibilityPage', 'manage_accessibility_page_tests.js'],
+ ['ManageUsersPage', 'manage_users_page_tests.js'],
  ['MultideviceCombinedSetupItem', 'multidevice_combined_setup_item_tests.js'],
  // TODO(b/208932892): Re-enable once flakiness is fixed.
  // ['MultideviceFeatureItem', 'multidevice_feature_item_tests.js'],
@@ -552,7 +553,6 @@
  ['TimezoneSelector', 'timezone_selector_test.js'],
  ['TimezoneSubpage', 'timezone_subpage_test.js'],
  ['TtsSubpage', 'tts_subpage_test.js'],
- ['UserPage', 'user_page_tests.js'],
 ].forEach(test => registerTest(...test));
 
 function registerTest(testName, module, featureList) {
diff --git a/chrome/test/webapps/coverage/coverage_cros.tsv b/chrome/test/webapps/coverage/coverage_cros.tsv
index a4ebf812..92844da 100644
--- a/chrome/test/webapps/coverage/coverage_cros.tsv
+++ b/chrome/test/webapps/coverage/coverage_cros.tsv
@@ -1,5 +1,5 @@
 # This is a generated file.
-# Full coverage: 55%, with partial coverage: 76%
+# Full coverage: 55%, with partial coverage: 75%
 create_shortcut_Standalone_Windowed🌕	launch_from_menu_option_Standalone🌕	check_app_title_Standalone_StandaloneOriginal🌑
 create_shortcut_Standalone_Windowed🌕	launch_from_launch_icon_Standalone🌕	check_app_title_Standalone_StandaloneOriginal🌑
 create_shortcut_Standalone_Windowed🌕	launch_from_chrome_apps_Standalone🌓	check_app_title_Standalone_StandaloneOriginal🌑
@@ -1009,6 +1009,26 @@
 install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌑	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
 create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌑	launch_file_expect_no_dialog_FileHandler_OneFooFile🌑	check_pwa_window_created_FileHandler_One🌑
 create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌑	launch_file_expect_no_dialog_FileHandler_OneFooFile🌑	check_pwa_window_created_FileHandler_One🌑
 install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌑	launch_file_expect_no_dialog_FileHandler_OneFooFile🌑	check_pwa_window_created_FileHandler_One🌑
diff --git a/chrome/test/webapps/coverage/coverage_linux.tsv b/chrome/test/webapps/coverage/coverage_linux.tsv
index de5b0d0..8ed5af2 100644
--- a/chrome/test/webapps/coverage/coverage_linux.tsv
+++ b/chrome/test/webapps/coverage/coverage_linux.tsv
@@ -1,5 +1,5 @@
 # This is a generated file.
-# Full coverage: 67%, with partial coverage: 90%
+# Full coverage: 67%, with partial coverage: 89%
 create_shortcut_Standalone_Windowed🌕	launch_from_menu_option_Standalone🌕	check_app_title_Standalone_StandaloneOriginal🌑
 create_shortcut_Standalone_Windowed🌕	launch_from_launch_icon_Standalone🌕	check_app_title_Standalone_StandaloneOriginal🌑
 create_shortcut_Standalone_Windowed🌕	launch_from_chrome_apps_Standalone🌓	check_app_title_Standalone_StandaloneOriginal🌑
@@ -1226,6 +1226,26 @@
 install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
 create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
 create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
 install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
diff --git a/chrome/test/webapps/coverage/coverage_mac.tsv b/chrome/test/webapps/coverage/coverage_mac.tsv
index e158ee5..6d125ed 100644
--- a/chrome/test/webapps/coverage/coverage_mac.tsv
+++ b/chrome/test/webapps/coverage/coverage_mac.tsv
@@ -1213,6 +1213,26 @@
 install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
 create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
 create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
 install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
diff --git a/chrome/test/webapps/coverage/coverage_win.tsv b/chrome/test/webapps/coverage/coverage_win.tsv
index f5f8e59b..f9362f01f 100644
--- a/chrome/test/webapps/coverage/coverage_win.tsv
+++ b/chrome/test/webapps/coverage/coverage_win.tsv
@@ -1,5 +1,5 @@
 # This is a generated file.
-# Full coverage: 69%, with partial coverage: 91%
+# Full coverage: 68%, with partial coverage: 91%
 create_shortcut_Standalone_Windowed🌕	launch_from_menu_option_Standalone🌕	check_app_title_Standalone_StandaloneOriginal🌑
 create_shortcut_Standalone_Windowed🌕	launch_from_launch_icon_Standalone🌕	check_app_title_Standalone_StandaloneOriginal🌑
 create_shortcut_Standalone_Windowed🌕	launch_from_chrome_apps_Standalone🌓	check_app_title_Standalone_StandaloneOriginal🌑
@@ -1226,6 +1226,26 @@
 install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
 install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_OneBarFile_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_One🌑	check_files_loaded_in_site_FileHandler_OneBarFile🌑
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕
+create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_WithShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
+install_policy_app_FileHandler_NoShortcut_Browser_WebApp🌓	launch_file_expect_dialog_FileHandler_MultipleBarFiles_Allow_AskAgain🌕	check_pwa_window_created_FileHandler_Two🌑	check_files_loaded_in_site_FileHandler_MultipleBarFiles🌑
 create_shortcut_FileHandler_Windowed🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
 create_shortcut_FileHandler_Browser🌕	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
 install_policy_app_FileHandler_WithShortcut_Windowed_WebApp🌓	launch_file_expect_dialog_FileHandler_OneFooFile_Allow_Remember🌕	launch_file_expect_no_dialog_FileHandler_OneFooFile🌕	check_pwa_window_created_FileHandler_One🌑
diff --git a/chrome/test/webapps/data/critical_user_journeys.md b/chrome/test/webapps/data/critical_user_journeys.md
index 666faaa..b40ad0c6 100644
--- a/chrome/test/webapps/data/critical_user_journeys.md
+++ b/chrome/test/webapps/data/critical_user_journeys.md
@@ -317,8 +317,8 @@
 | WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, MultipleFooFiles, Allow, AskAgain) | check_pwa_window_created(FileHandler, One) | check_files_loaded_in_site(FileHandler, MultipleFooFiles) |
 | WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, OneBarFile, Allow, AskAgain) |
 | WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, OneBarFile, Allow, AskAgain) | check_pwa_window_created(FileHandler, One) | check_files_loaded_in_site(FileHandler, OneBarFile) |
-| #WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, MultipleBarFiles, Allow, AskAgain) |
-| #WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, MultipleBarFiles, Allow, AskAgain) | check_pwa_window_created(FileHandler, Two) | check_files_loaded_in_site(FileHandler, MultipleBarFiles) |
+| WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, MultipleBarFiles, Allow, AskAgain) |
+| WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, MultipleBarFiles, Allow, AskAgain) | check_pwa_window_created(FileHandler, Two) | check_files_loaded_in_site(FileHandler, MultipleBarFiles) |
 | # Dialog options |
 | WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, OneFooFile, Allow, Remember) | launch_file_expect_no_dialog(FileHandler, OneFooFile) | check_pwa_window_created(FileHandler, One) |
 | WMLC | install_or_shortcut(FileHandler) | launch_file_expect_dialog(FileHandler, OneFooFile, Allow, AskAgain) | launch_file_expect_dialog(FileHandler, OneFooFile, Allow, AskAgain) |
@@ -344,4 +344,4 @@
 | #WMLC | install_or_shortcut(SubApp1) | check_app_in_list(SubApp1) | check_has_shortcut(SubApp1)
 | #WMLC | install_or_shortcut(HasSubApps) | install_or_shortcut(SubApp1) | check_not_has_sub_app(SubApp1)
 | #WMLC | install_or_shortcut(HasSubApps) | install_or_shortcut(SubApp1) | install_sub_app(HasSubApps, SubApp1, UserAllow) | check_has_sub_app(SubApp1)
-| #WMLC | install_or_shortcut(HasSubApps) | install_or_shortcut(SubApp1) | install_sub_app(HasSubApps, SubApp1, UserAllow) | remove_sub_app(HasSubApps, SubApp1) | check_not_has_sub_app(SubApp1) | check_app_in_list_windowed(SubApp1) | check_has_shortcut(SubApp1)
\ No newline at end of file
+| #WMLC | install_or_shortcut(HasSubApps) | install_or_shortcut(SubApp1) | install_sub_app(HasSubApps, SubApp1, UserAllow) | remove_sub_app(HasSubApps, SubApp1) | check_not_has_sub_app(SubApp1) | check_app_in_list_windowed(SubApp1) | check_has_shortcut(SubApp1)
diff --git a/chrome/updater/app/server/win/BUILD.gn b/chrome/updater/app/server/win/BUILD.gn
index fa0b027..f8ddebc 100644
--- a/chrome/updater/app/server/win/BUILD.gn
+++ b/chrome/updater/app/server/win/BUILD.gn
@@ -87,6 +87,7 @@
     "PLACEHOLDER-GUID-E432DCFE-6A32-4C07-B038-9D74AC80D6AB=6DDCE70D-A4AE-4E97-908C-BE7B2DB750AD",  # PolicyStatusUserClass
     "PLACEHOLDER-GUID-F675D224-BD54-40E9-AECB-AA3B64EB9863=521FDB42-7130-4806-822A-FC5163FAD983",  # PolicyStatusSystemClass
     "PLACEHOLDER-GUID-CEC2877D-4856-460E-BE73-11DD7CC7C821=ABC01078-F197-4B0B-ADBC-CFE684B39C82",  # ProcessLauncherClass
+    "PLACEHOLDER-GUID-AA10D17D-7A09-48AC-B1E4-F124937E3D26=0CD01D1E-4A1C-489D-93B9-9B6672877C57",  # IAppVersionWeb
     "PLACEHOLDER-GUID-A643508B-B1E3-4457-9769-32C953BD1D57=247954F9-9EDC-4E68-8CC3-150C2B89EADF",  # ICurrentState
     "PLACEHOLDER-GUID-A35E1C5E-0A18-4FF1-8C4D-DD8ED07B0BD0=494B20CF-282E-4BDD-9F5D-B70CB09D351E",  # IGoogleUpdate3Web
     "PLACEHOLDER-GUID-0569DBB9-BAA0-48D5-8543-0F3BE30A1648=DD42475D-6D46-496A-924E-BD5630B4CBBA",  # IAppBundleWeb
@@ -108,6 +109,7 @@
     "PLACEHOLDER-GUID-E432DCFE-6A32-4C07-B038-9D74AC80D6AB=4DAC24AB-B340-4B7E-AD01-1504A7F59EEA",  # PolicyStatusUserClass
     "PLACEHOLDER-GUID-F675D224-BD54-40E9-AECB-AA3B64EB9863=83FE19AC-72A6-4A72-B136-724444121586",  # PolicyStatusSystemClass
     "PLACEHOLDER-GUID-CEC2877D-4856-460E-BE73-11DD7CC7C821=811A664F-703E-407C-A323-E6E31D1EFFA0",  # ProcessLauncherClass
+    "PLACEHOLDER-GUID-AA10D17D-7A09-48AC-B1E4-F124937E3D26=3057E1F8-2498-4C19-99B5-F7F207DA4DC7",  # IAppVersionWeb
     "PLACEHOLDER-GUID-A643508B-B1E3-4457-9769-32C953BD1D57=BE5D3E90-A66C-4A0A-9B7B-1A6B9BF3971E",  # ICurrentState
     "PLACEHOLDER-GUID-A35E1C5E-0A18-4FF1-8C4D-DD8ED07B0BD0=027234BD-61BB-4F5C-9386-7FE804171C8C",  # IGoogleUpdate3Web
     "PLACEHOLDER-GUID-0569DBB9-BAA0-48D5-8543-0F3BE30A1648=D734C877-21F4-496E-B857-3E5B2E72E4CC",  # IAppBundleWeb
diff --git a/chrome/updater/app/server/win/com_classes_legacy.cc b/chrome/updater/app/server/win/com_classes_legacy.cc
index 2b4e81a..a9819cd 100644
--- a/chrome/updater/app/server/win/com_classes_legacy.cc
+++ b/chrome/updater/app/server/win/com_classes_legacy.cc
@@ -108,6 +108,43 @@
 
 namespace updater {
 
+// Implements `IAppVersionWeb`.
+class AppVersionWebImpl : public IDispatchImpl<IAppVersionWeb> {
+ public:
+  AppVersionWebImpl() = default;
+  AppVersionWebImpl(const AppVersionWebImpl&) = delete;
+  AppVersionWebImpl& operator=(const AppVersionWebImpl&) = delete;
+
+  HRESULT RuntimeClassInitialize(const std::wstring& version) {
+    version_ = version;
+
+    return S_OK;
+  }
+
+  // Overrides for IAppVersionWeb.
+  IFACEMETHODIMP get_version(BSTR* version) override {
+    DCHECK(version);
+
+    *version = base::win::ScopedBstr(version_).Release();
+    return S_OK;
+  }
+
+  IFACEMETHODIMP get_packageCount(long* count) override {
+    LOG(ERROR) << "Reached unimplemented COM method: " << __func__;
+    return E_NOTIMPL;
+  }
+
+  IFACEMETHODIMP get_packageWeb(long index, IDispatch** package) override {
+    LOG(ERROR) << "Reached unimplemented COM method: " << __func__;
+    return E_NOTIMPL;
+  }
+
+ private:
+  ~AppVersionWebImpl() override = default;
+
+  std::wstring version_;
+};
+
 // Implements `ICurrentState`. Initialized with a snapshot of the current state
 // of the install.
 class CurrentStateImpl : public IDispatchImpl<ICurrentState> {
@@ -359,18 +396,67 @@
 
   // Overrides for IAppWeb.
   IFACEMETHODIMP get_appId(BSTR* app_id) override {
-    LOG(ERROR) << "Reached unimplemented COM method: " << __func__;
-    return E_NOTIMPL;
+    DCHECK(app_id);
+
+    *app_id = base::win::ScopedBstr(base::ASCIIToWide(app_id_)).Release();
+    return S_OK;
   }
 
   IFACEMETHODIMP get_currentVersionWeb(IDispatch** current) override {
-    LOG(ERROR) << "Reached unimplemented COM method: " << __func__;
-    return E_NOTIMPL;
+    // Holds the result of the IPC to retrieve the current version.
+    struct CurrentVersionResult
+        : public base::RefCountedThreadSafe<CurrentVersionResult> {
+      absl::optional<base::Version> current_version;
+      base::WaitableEvent completion_event;
+
+     private:
+      friend class base::RefCountedThreadSafe<CurrentVersionResult>;
+      virtual ~CurrentVersionResult() = default;
+    };
+
+    auto result = base::MakeRefCounted<CurrentVersionResult>();
+    AppServerSingletonInstance()->main_task_runner()->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](const std::string app_id,
+               scoped_refptr<CurrentVersionResult> result) {
+              const base::ScopedClosureRunner signal_event(base::BindOnce(
+                  [](scoped_refptr<CurrentVersionResult> result) {
+                    result->completion_event.Signal();
+                  },
+                  result));
+
+              const base::Version current_version =
+                  base::MakeRefCounted<const PersistedData>(
+                      GetUpdaterScope(),
+                      AppServerSingletonInstance()->prefs()->GetPrefService())
+                      ->GetProductVersion(app_id);
+              if (!current_version.IsValid()) {
+                return;
+              }
+
+              result->current_version = current_version;
+            },
+            app_id_, result));
+
+    if (!result->completion_event.TimedWait(base::Seconds(60)) ||
+        !result->current_version.has_value()) {
+      return E_FAIL;
+    }
+
+    return Microsoft::WRL::MakeAndInitialize<AppVersionWebImpl>(
+        current, base::ASCIIToWide(result->current_version->GetString()));
   }
 
   IFACEMETHODIMP get_nextVersionWeb(IDispatch** next) override {
-    LOG(ERROR) << "Reached unimplemented COM method: " << __func__;
-    return E_NOTIMPL;
+    base::AutoLock lock{lock_};
+
+    if (!state_update_ || !state_update_->next_version.IsValid()) {
+      return E_FAIL;
+    }
+
+    return Microsoft::WRL::MakeAndInitialize<AppVersionWebImpl>(
+        next, base::ASCIIToWide(state_update_->next_version.GetString()));
   }
 
   IFACEMETHODIMP get_command(BSTR command_id, IDispatch** command) override {
diff --git a/chrome/updater/app/server/win/com_classes_legacy_unittest.cc b/chrome/updater/app/server/win/com_classes_legacy_unittest.cc
index d24443e..cebcd864 100644
--- a/chrome/updater/app/server/win/com_classes_legacy_unittest.cc
+++ b/chrome/updater/app/server/win/com_classes_legacy_unittest.cc
@@ -259,6 +259,8 @@
             L"{521FDB42-7130-4806-822A-FC5163FAD983}");
   EXPECT_EQ(base::win::WStringFromGUID(__uuidof(ProcessLauncherClass)),
             L"{ABC01078-F197-4B0B-ADBC-CFE684B39C82}");
+  EXPECT_EQ(base::win::WStringFromGUID(__uuidof(IAppVersionWeb)),
+            L"{0CD01D1E-4A1C-489D-93B9-9B6672877C57}");
   EXPECT_EQ(base::win::WStringFromGUID(__uuidof(ICurrentState)),
             L"{247954F9-9EDC-4E68-8CC3-150C2B89EADF}");
   EXPECT_EQ(base::win::WStringFromGUID(__uuidof(IGoogleUpdate3Web)),
@@ -294,6 +296,8 @@
             L"{83FE19AC-72A6-4A72-B136-724444121586}");
   EXPECT_EQ(base::win::WStringFromGUID(__uuidof(ProcessLauncherClass)),
             L"{811A664F-703E-407C-A323-E6E31D1EFFA0}");
+  EXPECT_EQ(base::win::WStringFromGUID(__uuidof(IAppVersionWeb)),
+            L"{3057E1F8-2498-4C19-99B5-F7F207DA4DC7}");
   EXPECT_EQ(base::win::WStringFromGUID(__uuidof(ICurrentState)),
             L"{BE5D3E90-A66C-4A0A-9B7B-1A6B9BF3971E}");
   EXPECT_EQ(base::win::WStringFromGUID(__uuidof(IGoogleUpdate3Web)),
diff --git a/chrome/updater/app/server/win/updater_legacy_idl.template b/chrome/updater/app/server/win/updater_legacy_idl.template
index a243190..5e0bcacf 100644
--- a/chrome/updater/app/server/win/updater_legacy_idl.template
+++ b/chrome/updater/app/server/win/updater_legacy_idl.template
@@ -5,15 +5,7 @@
 import "oaidl.idl";
 import "ocidl.idl";
 
-// Backward-compatible, Omaha public interfaces.
-
-// The following are copied from omaha3_idl.idl:
-//   enum CurrentState.
-//   interface ICurrentState.
-//   interface IGoogleUpdate3Web.
-//   interface IAppBundleWeb.
-//   interface IAppWeb.
-//   coclass GoogleUpdate3WebUserClass.
+// Backward-compatible, Omaha public interfaces copied from omaha3_idl.idl.
 
 // The normal install flow proceeds from STATE_INIT through
 // STATE_INSTALL_COMPLETE in order, skipping states that are not relevant.
@@ -54,6 +46,26 @@
 [
   object,
   dual,
+  uuid(PLACEHOLDER-GUID-AA10D17D-7A09-48AC-B1E4-F124937E3D26),
+  helpstring("IAppVersionWeb Interface"),
+  pointer_default(unique)
+]
+interface IAppVersionWeb : IDispatch {
+  [propget] HRESULT version([out, retval] BSTR*);
+
+  // Returns the count of the Packages in the AppVersion.
+  [propget] HRESULT packageCount([out, retval] long* count);
+
+  // TODO(omaha3): Implement this after a security review.
+  // Returns an IDispatch of the Package in the AppVersion at the specified
+  // 0-based index.
+  [propget] HRESULT packageWeb([in] long index,
+                               [out, retval] IDispatch** package);
+};
+
+[
+  object,
+  dual,
   uuid(PLACEHOLDER-GUID-A643508B-B1E3-4457-9769-32C953BD1D57),
   helpstring("ICurrentState Interface"),
   pointer_default(unique)
@@ -559,6 +571,7 @@
     [default] interface IUnknown;
   }
 
+  interface IAppVersionWeb;
   interface ICurrentState;
   interface IGoogleUpdate3Web;
   interface IAppBundleWeb;
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc
index 0c7d757..240adc8 100644
--- a/chrome/updater/test/integration_tests_win.cc
+++ b/chrome/updater/test/integration_tests_win.cc
@@ -515,6 +515,17 @@
   return result;
 }
 
+std::wstring GetAppVersionWebString(
+    Microsoft::WRL::ComPtr<IDispatch> version_web_dispatch) {
+  Microsoft::WRL::ComPtr<IAppVersionWeb> version_web;
+  EXPECT_HRESULT_SUCCEEDED(version_web_dispatch.As(&version_web));
+
+  base::win::ScopedBstr version;
+  EXPECT_HRESULT_SUCCEEDED(version_web->get_version(version.Receive()));
+
+  return version.Get();
+}
+
 }  // namespace
 
 base::FilePath GetSetupExecutablePath() {
@@ -897,8 +908,8 @@
     Microsoft::WRL::ComPtr<ICurrentState> state;
     EXPECT_HRESULT_SUCCEEDED(state_dispatch.As(&state));
 
-    std::wstring stateDescription;
-    std::wstring extraData;
+    std::wstring state_description;
+    std::wstring extra_data;
 
     EXPECT_HRESULT_SUCCEEDED(state->get_stateValue(&state_value));
 
@@ -906,17 +917,33 @@
 
     switch (state_value) {
       case STATE_INIT:
-        stateDescription = L"Initializating...";
+        state_description = L"Initializating...";
         break;
 
       case STATE_WAITING_TO_CHECK_FOR_UPDATE:
       case STATE_CHECKING_FOR_UPDATE: {
-        stateDescription = L"Checking for update...";
+        state_description = L"Checking for update...";
+
+        Microsoft::WRL::ComPtr<IDispatch> current_version_web_dispatch;
+        EXPECT_HRESULT_SUCCEEDED(
+            app->get_currentVersionWeb(&current_version_web_dispatch));
+
+        extra_data = base::StrCat(
+            {L"[Current Version: ",
+             GetAppVersionWebString(current_version_web_dispatch), L"]"});
         break;
       }
 
       case STATE_UPDATE_AVAILABLE: {
-        stateDescription = L"Update available!";
+        state_description = L"Update available!";
+        Microsoft::WRL::ComPtr<IDispatch> next_version_web_dispatch;
+        EXPECT_HRESULT_SUCCEEDED(
+            app->get_nextVersionWeb(&next_version_web_dispatch));
+
+        extra_data = base::StrCat(
+            {L"[Next Version: ",
+             GetAppVersionWebString(next_version_web_dispatch), L"]"});
+
         if (!done) {
           EXPECT_HRESULT_SUCCEEDED(bundle->install());
         }
@@ -925,11 +952,11 @@
 
       case STATE_WAITING_TO_DOWNLOAD:
       case STATE_RETRYING_DOWNLOAD:
-        stateDescription = L"Contacting server...";
+        state_description = L"Contacting server...";
         break;
 
       case STATE_DOWNLOADING: {
-        stateDescription = L"Downloading...";
+        state_description = L"Downloading...";
 
         ULONG bytes_downloaded = 0;
         state->get_bytesDownloaded(&bytes_downloaded);
@@ -940,7 +967,7 @@
         LONG download_time_remaining_ms = 0;
         state->get_downloadTimeRemainingMs(&download_time_remaining_ms);
 
-        extraData = base::StringPrintf(
+        extra_data = base::StringPrintf(
             L"[Bytes downloaded: %d][Bytes total: %d][Time remaining: %d]",
             bytes_downloaded, total_bytes_to_download,
             download_time_remaining_ms);
@@ -951,14 +978,14 @@
       case STATE_EXTRACTING:
       case STATE_APPLYING_DIFFERENTIAL_PATCH:
       case STATE_READY_TO_INSTALL: {
-        stateDescription = L"Download completed!";
+        state_description = L"Download completed!";
         ULONG bytes_downloaded = 0;
         state->get_bytesDownloaded(&bytes_downloaded);
 
         ULONG total_bytes_to_download = 0;
         state->get_totalBytesToDownload(&total_bytes_to_download);
 
-        extraData =
+        extra_data =
             base::StringPrintf(L"[Bytes downloaded: %d][Bytes total: %d]",
                                bytes_downloaded, total_bytes_to_download);
 
@@ -969,33 +996,33 @@
 
       case STATE_WAITING_TO_INSTALL:
       case STATE_INSTALLING: {
-        stateDescription = L"Installing...";
+        state_description = L"Installing...";
 
         LONG install_progress = 0;
         state->get_installProgress(&install_progress);
         LONG install_time_remaining_ms = 0;
         state->get_installTimeRemainingMs(&install_time_remaining_ms);
 
-        extraData =
+        extra_data =
             base::StringPrintf(L"[Install Progress: %d][Time remaining: %d]",
                                install_progress, install_time_remaining_ms);
         break;
       }
 
       case STATE_INSTALL_COMPLETE:
-        stateDescription = L"Done!";
+        state_description = L"Done!";
         break;
 
       case STATE_PAUSED:
-        stateDescription = L"Paused...";
+        state_description = L"Paused...";
         break;
 
       case STATE_NO_UPDATE:
-        stateDescription = L"No update available!";
+        state_description = L"No update available!";
         break;
 
       case STATE_ERROR: {
-        stateDescription = L"Error!";
+        state_description = L"Error!";
 
         EXPECT_HRESULT_SUCCEEDED(state->get_errorCode(&error_code));
 
@@ -1007,22 +1034,22 @@
         EXPECT_HRESULT_SUCCEEDED(
             state->get_installerResultCode(&installer_result_code));
 
-        extraData = base::StringPrintf(
+        extra_data = base::StringPrintf(
             L"[errorCode: %d][completionMessage: %ls][installerResultCode: %d]",
             error_code, completion_message.Get(), installer_result_code);
         break;
       }
 
       default:
-        stateDescription = L"Unhandled state...";
+        state_description = L"Unhandled state...";
         break;
     }
 
     // TODO(crbug.com/1245992): Remove this logging once the code is test
     // flakiness is eliminated and no further debugging is needed.
     LOG(ERROR) << base::StringPrintf(L"[State: %d][%ls]%ls", state_value,
-                                     stateDescription.c_str(),
-                                     extraData.c_str());
+                                     state_description.c_str(),
+                                     extra_data.c_str());
     base::PlatformThread::Sleep(base::Seconds(1));
   }
 
diff --git a/chrome/updater/util/linux_util.cc b/chrome/updater/util/linux_util.cc
index 9f36b7d..b165433 100644
--- a/chrome/updater/util/linux_util.cc
+++ b/chrome/updater/util/linux_util.cc
@@ -32,9 +32,9 @@
 }
 
 absl::optional<base::FilePath> GetInstallDirectory(UpdaterScope scope) {
+  base::FilePath path;
   switch (scope) {
     case UpdaterScope::kUser:
-      base::FilePath path;
       if (base::PathService::Get(base::DIR_HOME, &path)) {
         return path.Append(kUserRelativeDataPath)
             .Append(GetUpdaterFolderName());
diff --git a/chrome/updater/win/setup/setup_util.cc b/chrome/updater/win/setup/setup_util.cc
index 1835d2a..083c352a 100644
--- a/chrome/updater/win/setup/setup_util.cc
+++ b/chrome/updater/win/setup/setup_util.cc
@@ -156,6 +156,7 @@
           __uuidof(IAppBundleWeb),
           __uuidof(IAppWeb),
           __uuidof(IAppCommandWeb),
+          __uuidof(IAppVersionWeb),
           __uuidof(ICurrentState),
           __uuidof(IGoogleUpdate3Web),
           __uuidof(IPolicyStatus),
@@ -388,6 +389,7 @@
           {__uuidof(IAppBundleWeb), kUpdaterLegacyIndex},
           {__uuidof(IAppWeb), kUpdaterLegacyIndex},
           {__uuidof(IAppCommandWeb), kUpdaterLegacyIndex},
+          {__uuidof(IAppVersionWeb), kUpdaterLegacyIndex},
           {__uuidof(ICurrentState), kUpdaterLegacyIndex},
           {__uuidof(IGoogleUpdate3Web), kUpdaterLegacyIndex},
           {__uuidof(IPolicyStatus), kUpdaterLegacyIndex},
diff --git a/chromeos/ash/components/audio/cras_audio_handler.cc b/chromeos/ash/components/audio/cras_audio_handler.cc
index fe7e75fe..cca281a3 100644
--- a/chromeos/ash/components/audio/cras_audio_handler.cc
+++ b/chromeos/ash/components/audio/cras_audio_handler.cc
@@ -23,6 +23,8 @@
 #include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/components/audio/audio_device.h"
 #include "chromeos/ash/components/audio/audio_devices_pref_handler_stub.h"
+#include "chromeos/ash/components/dbus/audio/cras_audio_client.h"
+#include "chromeos/ash/components/dbus/audio/fake_cras_audio_client.h"
 #include "chromeos/ash/components/dbus/audio/floss_media_client.h"
 #include "device/bluetooth/floss/floss_features.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
@@ -133,9 +135,8 @@
 
 // static
 void CrasAudioHandler::InitializeForTesting() {
-  // Make sure CrasAudioClient has been initialized.
-  if (!CrasAudioClient::Get())
-    CrasAudioClient::InitializeFake();
+  CHECK(CrasAudioClient::Get()) << "CrasAudioClient must be initialized.";
+
   // Make sure FlossMediaClient has been initialized.
   // TODO(b/228608730): Remove this after Floss bypasses CRAS to receive media
   // information directly from the provider.
@@ -1977,7 +1978,7 @@
     return;
   }
 
-  DCHECK(*new_output_streams_count >= 0);
+  DCHECK_GE(*new_output_streams_count, 0);
   if (*new_output_streams_count > 0 && num_active_output_streams_ == 0) {
     for (auto& observer : observers_)
       observer.OnOutputStarted();
@@ -2325,6 +2326,12 @@
 }
 
 ScopedCrasAudioHandlerForTesting::ScopedCrasAudioHandlerForTesting() {
+  CHECK(!CrasAudioClient::Get())
+      << "ScopedCrasAudioHandlerForTesting expects that there is no "
+         "CrasAudioClient running at its constructor.";
+
+  fake_cras_audio_client_ = std::make_unique<FakeCrasAudioClient>();
+
   CrasAudioHandler::InitializeForTesting();
 }
 
diff --git a/chromeos/ash/components/audio/cras_audio_handler.h b/chromeos/ash/components/audio/cras_audio_handler.h
index 824ffde..9b6c1c7 100644
--- a/chromeos/ash/components/audio/cras_audio_handler.h
+++ b/chromeos/ash/components/audio/cras_audio_handler.h
@@ -25,6 +25,7 @@
 #include "chromeos/ash/components/audio/audio_pref_observer.h"
 #include "chromeos/ash/components/dbus/audio/audio_node.h"
 #include "chromeos/ash/components/dbus/audio/cras_audio_client.h"
+#include "chromeos/ash/components/dbus/audio/fake_cras_audio_client.h"
 #include "chromeos/ash/components/dbus/audio/volume_state.h"
 #include "media/base/video_facing.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -837,11 +838,14 @@
   base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_{this};
 };
 
-// Helper class that will initialize the |CrasAudioHandler| for testing in its
+// Helper class that will initialize the `CrasAudioHandler` for testing in its
 // constructor, and clean things up in its destructor.
 class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_AUDIO)
     ScopedCrasAudioHandlerForTesting {
  public:
+  // `ScopedCrasAudioHandlerForTesting` expects that there is no audio client
+  // running. This class starts and shuts down an audio client automatically at
+  // its constructor and destructor.
   ScopedCrasAudioHandlerForTesting();
   ScopedCrasAudioHandlerForTesting(const ScopedCrasAudioHandlerForTesting&) =
       delete;
@@ -850,6 +854,9 @@
   ~ScopedCrasAudioHandlerForTesting();
 
   CrasAudioHandler& Get();
+
+ private:
+  std::unique_ptr<FakeCrasAudioClient> fake_cras_audio_client_;
 };
 
 }  // namespace ash
diff --git a/chromeos/ash/components/dbus/audio/cras_audio_client.h b/chromeos/ash/components/dbus/audio/cras_audio_client.h
index 68610837..ac07f22 100644
--- a/chromeos/ash/components/dbus/audio/cras_audio_client.h
+++ b/chromeos/ash/components/dbus/audio/cras_audio_client.h
@@ -82,7 +82,15 @@
   // Creates and initializes the global instance. |bus| must not be null.
   static void Initialize(dbus::Bus* bus);
 
-  // Creates and initializes a fake global instance if not already created.
+  // Creates and initializes a fake global instance.
+  //
+  // Note:
+  // `InitializeFake` does not shutdown `CrasAudioClient` automatically and it
+  // can cause an unexpected side effect for other tests in automated tests.
+  //
+  // e.g.
+  // A test leaves a client without shutdown. A following test expect that a
+  // client does not exist.
   static void InitializeFake();
 
   // Destroys the global instance which must have been initialized.
diff --git a/chromeos/ash/services/assistant/platform/audio_input_host_unittest.cc b/chromeos/ash/services/assistant/platform/audio_input_host_unittest.cc
index 7c9ce91..8b59f31 100644
--- a/chromeos/ash/services/assistant/platform/audio_input_host_unittest.cc
+++ b/chromeos/ash/services/assistant/platform/audio_input_host_unittest.cc
@@ -53,16 +53,6 @@
   mojo::Receiver<MojomAudioInputController> receiver_{this};
 };
 
-class ScopedCrasAudioHandler {
- public:
-  ScopedCrasAudioHandler() { CrasAudioHandler::InitializeForTesting(); }
-  ScopedCrasAudioHandler(const ScopedCrasAudioHandler&) = delete;
-  ScopedCrasAudioHandler& operator=(const ScopedCrasAudioHandler&) = delete;
-  ~ScopedCrasAudioHandler() { CrasAudioHandler::Shutdown(); }
-
-  CrasAudioHandler* Get() { return CrasAudioHandler::Get(); }
-};
-
 class AssistantAudioInputHostTest : public testing::Test {
  public:
   AssistantAudioInputHostTest() {
@@ -98,7 +88,7 @@
   void CreateNewAudioInputHost() {
     audio_input_host_ = std::make_unique<AudioInputHostImpl>(
         audio_input_controller_.BindNewPipeAndPassRemote(),
-        cras_audio_handler_.Get(), chromeos::FakePowerManagerClient::Get(),
+        &cras_audio_handler_.Get(), chromeos::FakePowerManagerClient::Get(),
         "default-locale");
 
     FlushPendingMojomCalls();
@@ -144,7 +134,7 @@
  private:
   base::test::TaskEnvironment task_environment_;
   base::test::ScopedFeatureList scoped_feature_list_;
-  ScopedCrasAudioHandler cras_audio_handler_;
+  ScopedCrasAudioHandlerForTesting cras_audio_handler_;
   NiceMock<AudioInputControllerMock> audio_input_controller_;
   std::unique_ptr<AudioInputHostImpl> audio_input_host_;
 };
diff --git a/chromeos/ash/services/assistant/service_unittest.cc b/chromeos/ash/services/assistant/service_unittest.cc
index 1e78575d..fe23df11 100644
--- a/chromeos/ash/services/assistant/service_unittest.cc
+++ b/chromeos/ash/services/assistant/service_unittest.cc
@@ -72,8 +72,6 @@
   ~AssistantServiceTest() override = default;
 
   void SetUp() override {
-    CrasAudioHandler::InitializeForTesting();
-
     chromeos::PowerManagerClient::InitializeFake();
     chromeos::FakePowerManagerClient::Get()->SetTabletMode(
         chromeos::PowerManagerClient::TabletMode::OFF, base::TimeTicks());
@@ -160,6 +158,7 @@
 
   std::unique_ptr<Service> service_;
 
+  ScopedCrasAudioHandlerForTesting cras_audio_handler_;
   FullyInitializedAssistantState assistant_state_;
   signin::IdentityTestEnvironment identity_test_env_;
   ScopedFakeAssistantBrowserDelegate fake_delegate_{&assistant_state_};
diff --git a/chromeos/ash/services/device_sync/cryptauth_device_manager_impl_unittest.cc b/chromeos/ash/services/device_sync/cryptauth_device_manager_impl_unittest.cc
index 74831c07..12a48b6 100644
--- a/chromeos/ash/services/device_sync/cryptauth_device_manager_impl_unittest.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_device_manager_impl_unittest.cc
@@ -300,15 +300,14 @@
                 beacon_seeds_from_prefs->size());
       for (size_t beacon_seed = 0;
            beacon_seed < beacon_seeds_from_prefs->size(); beacon_seed++) {
-        const base::Value& seed = (*beacon_seeds_from_prefs)[beacon_seed];
-        ASSERT_TRUE(seed.is_dict());
+        const base::Value::Dict& seed =
+            (*beacon_seeds_from_prefs)[beacon_seed].GetDict();
 
-        const std::string* data_b64 = seed.FindStringKey("beacon_seed_data");
+        const std::string* data_b64 = seed.FindString("beacon_seed_data");
         EXPECT_TRUE(data_b64);
-        const std::string* start_ms =
-            seed.FindStringKey("beacon_seed_start_ms");
+        const std::string* start_ms = seed.FindString("beacon_seed_start_ms");
         EXPECT_TRUE(start_ms);
-        const std::string* end_ms = seed.FindStringKey("beacon_seed_end_ms");
+        const std::string* end_ms = seed.FindString("beacon_seed_end_ms");
         EXPECT_TRUE(end_ms);
 
         const cryptauth::BeaconSeed& expected_seed =
diff --git a/chromeos/ash/services/device_sync/cryptauth_device_registry.cc b/chromeos/ash/services/device_sync/cryptauth_device_registry.cc
index 39d42b51..a570794b 100644
--- a/chromeos/ash/services/device_sync/cryptauth_device_registry.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_device_registry.cc
@@ -63,13 +63,13 @@
   return true;
 }
 
-base::Value CryptAuthDeviceRegistry::AsReadableDictionary() const {
-  base::Value dict(base::Value::Type::DICT);
+base::Value::Dict CryptAuthDeviceRegistry::AsReadableDictionary() const {
+  base::Value::Dict dict;
   for (const std::pair<std::string, CryptAuthDevice>& id_device_pair :
        instance_id_to_device_map_) {
     std::string key = id_device_pair.second.device_name +
                       " (ID: " + id_device_pair.second.instance_id() + ")";
-    dict.SetKey(key, base::Value(id_device_pair.second.AsReadableDictionary()));
+    dict.Set(key, id_device_pair.second.AsReadableDictionary());
   }
 
   return dict;
diff --git a/chromeos/ash/services/device_sync/cryptauth_device_registry.h b/chromeos/ash/services/device_sync/cryptauth_device_registry.h
index 6035e4a..5066d53 100644
--- a/chromeos/ash/services/device_sync/cryptauth_device_registry.h
+++ b/chromeos/ash/services/device_sync/cryptauth_device_registry.h
@@ -47,7 +47,7 @@
   bool SetRegistry(const InstanceIdToDeviceMap& instance_id_to_device_map);
 
   // Converts the registry to a human-readable dictionary.
-  base::Value AsReadableDictionary() const;
+  base::Value::Dict AsReadableDictionary() const;
 
  protected:
   CryptAuthDeviceRegistry();
diff --git a/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.cc b/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.cc
index 64adfe9..3fe1026 100644
--- a/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.cc
@@ -16,9 +16,7 @@
 #include "components/prefs/pref_service.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-namespace ash {
-
-namespace device_sync {
+namespace ash::device_sync {
 
 // static
 CryptAuthDeviceRegistryImpl::Factory*
@@ -73,20 +71,18 @@
 CryptAuthDeviceRegistryImpl::~CryptAuthDeviceRegistryImpl() = default;
 
 void CryptAuthDeviceRegistryImpl::OnDeviceRegistryUpdated() {
-  pref_service_->Set(prefs::kCryptAuthDeviceRegistry, AsDictionary());
+  pref_service_->SetDict(prefs::kCryptAuthDeviceRegistry, AsDictionary());
 }
 
-base::Value CryptAuthDeviceRegistryImpl::AsDictionary() const {
-  base::Value dict(base::Value::Type::DICT);
+base::Value::Dict CryptAuthDeviceRegistryImpl::AsDictionary() const {
+  base::Value::Dict dict;
   for (const std::pair<std::string, CryptAuthDevice>& id_device_pair :
        instance_id_to_device_map()) {
-    dict.SetKey(util::EncodeAsString(id_device_pair.first),
-                base::Value(id_device_pair.second.AsDictionary()));
+    dict.Set(util::EncodeAsString(id_device_pair.first),
+             id_device_pair.second.AsDictionary());
   }
 
   return dict;
 }
 
-}  // namespace device_sync
-
-}  // namespace ash
+}  // namespace ash::device_sync
diff --git a/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.h b/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.h
index 6cd125f4..e49a7d9 100644
--- a/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.h
+++ b/chromeos/ash/services/device_sync/cryptauth_device_registry_impl.h
@@ -56,7 +56,7 @@
   void OnDeviceRegistryUpdated() override;
 
   // Converts the registry to a dictionary value in a form suitable for a pref.
-  base::Value AsDictionary() const;
+  base::Value::Dict AsDictionary() const;
 
   // Contains preferences that outlive the lifetime of this object and across
   // process restarts. Not owned and must outlive this instance.
diff --git a/chromeos/ash/services/device_sync/cryptauth_device_registry_impl_unittest.cc b/chromeos/ash/services/device_sync/cryptauth_device_registry_impl_unittest.cc
index e5554bd6..54a11442 100644
--- a/chromeos/ash/services/device_sync/cryptauth_device_registry_impl_unittest.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_device_registry_impl_unittest.cc
@@ -22,9 +22,7 @@
 #include "components/prefs/testing_pref_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace ash {
-
-namespace device_sync {
+namespace ash::device_sync {
 
 namespace {
 
@@ -90,13 +88,13 @@
     return devices->at(index);
   }
 
-  base::Value AsDictionary(
+  base::Value::Dict AsDictionary(
       const CryptAuthDeviceRegistry::InstanceIdToDeviceMap& devices) const {
-    base::Value dict(base::Value::Type::DICT);
+    base::Value::Dict dict;
     for (const std::pair<std::string, CryptAuthDevice>& id_device_pair :
          devices) {
-      dict.SetKey(util::EncodeAsString(id_device_pair.first),
-                  base::Value(id_device_pair.second.AsDictionary()));
+      dict.Set(util::EncodeAsString(id_device_pair.first),
+               id_device_pair.second.AsDictionary());
     }
 
     return dict;
@@ -180,14 +178,12 @@
 TEST_F(DeviceSyncCryptAuthDeviceRegistryImplTest, PopulateRegistryFromPref) {
   CryptAuthDeviceRegistry::InstanceIdToDeviceMap expected_devices = {
       {kInstanceId0, GetDeviceForTest(0)}, {kInstanceId1, GetDeviceForTest(1)}};
-  pref_service()->Set(prefs::kCryptAuthDeviceRegistry,
-                      AsDictionary(expected_devices));
+  pref_service()->SetDict(prefs::kCryptAuthDeviceRegistry,
+                          AsDictionary(expected_devices));
 
   CreateDeviceRegistry();
 
   VerifyDeviceRegistry(expected_devices);
 }
 
-}  // namespace device_sync
-
-}  // namespace ash
+}  // namespace ash::device_sync
diff --git a/chromeos/ash/services/device_sync/cryptauth_key.cc b/chromeos/ash/services/device_sync/cryptauth_key.cc
index 9cc14e1..c17101f 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_key.cc
@@ -44,11 +44,7 @@
 
 // static
 absl::optional<CryptAuthKey> CryptAuthKey::FromDictionary(
-    const base::Value& value) {
-  if (!value.is_dict())
-    return absl::nullopt;
-
-  const base::Value::Dict& dict = value.GetDict();
+    const base::Value::Dict& dict) {
   absl::optional<int> opt_status = dict.FindInt(kStatusDictKey);
   if (!opt_status)
     return absl::nullopt;
diff --git a/chromeos/ash/services/device_sync/cryptauth_key.h b/chromeos/ash/services/device_sync/cryptauth_key.h
index 38dc148b..d97c22be 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key.h
+++ b/chromeos/ash/services/device_sync/cryptauth_key.h
@@ -26,7 +26,8 @@
   // this status is meaningless.
   enum Status { kActive, kInactive };
 
-  static absl::optional<CryptAuthKey> FromDictionary(const base::Value& value);
+  static absl::optional<CryptAuthKey> FromDictionary(
+      const base::Value::Dict& value);
 
   // Constructor for symmetric keys.
   CryptAuthKey(const std::string& symmetric_key,
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_bundle.cc b/chromeos/ash/services/device_sync/cryptauth_key_bundle.cc
index 8242ac4..608594c8 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_bundle.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_key_bundle.cc
@@ -12,9 +12,7 @@
 #include "chromeos/ash/services/device_sync/cryptauth_enrollment_constants.h"
 #include "chromeos/ash/services/device_sync/value_string_encoding.h"
 
-namespace ash {
-
-namespace device_sync {
+namespace ash::device_sync {
 
 namespace {
 
@@ -95,7 +93,8 @@
 
   bool active_key_exists = false;
   for (const base::Value& key_dict : *keys) {
-    absl::optional<CryptAuthKey> key = CryptAuthKey::FromDictionary(key_dict);
+    absl::optional<CryptAuthKey> key =
+        CryptAuthKey::FromDictionary(key_dict.GetDict());
     if (!key)
       return absl::nullopt;
 
@@ -175,7 +174,7 @@
     handle_key_pair.second.set_status(CryptAuthKey::Status::kInactive);
 }
 
-base::Value CryptAuthKeyBundle::AsDictionary() const {
+base::Value::Dict CryptAuthKeyBundle::AsDictionary() const {
   base::Value::Dict dict;
 
   dict.Set(kBundleNameDictKey, KeyBundleNameEnumToString(name_));
@@ -197,7 +196,7 @@
              util::EncodeProtoMessageAsValueString(&key_directive_.value()));
   }
 
-  return base::Value(std::move(dict));
+  return dict;
 }
 
 bool CryptAuthKeyBundle::operator==(const CryptAuthKeyBundle& other) const {
@@ -212,6 +211,4 @@
   return !(*this == other);
 }
 
-}  // namespace device_sync
-
-}  // namespace ash
+}  // namespace ash::device_sync
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_bundle.h b/chromeos/ash/services/device_sync/cryptauth_key_bundle.h
index b674b1f..ac5c90a 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_bundle.h
+++ b/chromeos/ash/services/device_sync/cryptauth_key_bundle.h
@@ -12,9 +12,7 @@
 #include "chromeos/ash/services/device_sync/proto/cryptauth_directive.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-namespace ash {
-
-namespace device_sync {
+namespace ash::device_sync {
 
 // A group of related CryptAuthKeys, uniquely identified by their handles.
 //
@@ -62,7 +60,7 @@
   static absl::optional<CryptAuthKeyBundle> FromDictionary(
       const base::Value::Dict& dict);
 
-  CryptAuthKeyBundle(Name name);
+  explicit CryptAuthKeyBundle(Name name);
 
   CryptAuthKeyBundle(const CryptAuthKeyBundle&);
 
@@ -102,7 +100,7 @@
   // Remove the key corresponding to |handle| from the bundle.
   void DeleteKey(const std::string& handle);
 
-  base::Value AsDictionary() const;
+  base::Value::Dict AsDictionary() const;
 
   bool operator==(const CryptAuthKeyBundle& other) const;
   bool operator!=(const CryptAuthKeyBundle& other) const;
@@ -114,8 +112,6 @@
   absl::optional<cryptauthv2::KeyDirective> key_directive_;
 };
 
-}  // namespace device_sync
-
-}  // namespace ash
+}  // namespace ash::device_sync
 
 #endif  // CHROMEOS_ASH_SERVICES_DEVICE_SYNC_CRYPTAUTH_KEY_BUNDLE_H_
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_bundle_unittest.cc b/chromeos/ash/services/device_sync/cryptauth_key_bundle_unittest.cc
index 0516659..91e491d 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_bundle_unittest.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_key_bundle_unittest.cc
@@ -234,7 +234,7 @@
 TEST(DeviceSyncCryptAuthKeyBundleTest, ToAndFromDictionary_Trivial) {
   CryptAuthKeyBundle bundle(CryptAuthKeyBundle::Name::kLegacyAuthzenKey);
   absl::optional<CryptAuthKeyBundle> bundle_from_dict =
-      CryptAuthKeyBundle::FromDictionary(bundle.AsDictionary().GetDict());
+      CryptAuthKeyBundle::FromDictionary(bundle.AsDictionary());
   ASSERT_TRUE(bundle_from_dict);
   EXPECT_EQ(*bundle_from_dict, bundle);
 }
@@ -259,7 +259,7 @@
   bundle.set_key_directive(key_directive);
 
   absl::optional<CryptAuthKeyBundle> bundle_from_dict =
-      CryptAuthKeyBundle::FromDictionary(bundle.AsDictionary().GetDict());
+      CryptAuthKeyBundle::FromDictionary(bundle.AsDictionary());
   ASSERT_TRUE(bundle_from_dict);
   EXPECT_EQ(*bundle_from_dict, bundle);
 }
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.cc b/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.cc
index 14802323..9e37461 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.cc
@@ -10,9 +10,7 @@
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 
-namespace ash {
-
-namespace device_sync {
+namespace ash::device_sync {
 
 // static
 CryptAuthKeyRegistryImpl::Factory*
@@ -67,13 +65,13 @@
 CryptAuthKeyRegistryImpl::~CryptAuthKeyRegistryImpl() = default;
 
 void CryptAuthKeyRegistryImpl::OnKeyRegistryUpdated() {
-  pref_service_->Set(prefs::kCryptAuthKeyRegistry, AsDictionary());
+  pref_service_->SetDict(prefs::kCryptAuthKeyRegistry, AsDictionary());
 }
 
-base::Value CryptAuthKeyRegistryImpl::AsDictionary() const {
-  base::Value dict(base::Value::Type::DICT);
+base::Value::Dict CryptAuthKeyRegistryImpl::AsDictionary() const {
+  base::Value::Dict dict;
   for (const auto& name_bundle_pair : key_bundles_) {
-    dict.SetKey(
+    dict.Set(
         CryptAuthKeyBundle::KeyBundleNameEnumToString(name_bundle_pair.first),
         name_bundle_pair.second.AsDictionary());
   }
@@ -81,6 +79,4 @@
   return dict;
 }
 
-}  // namespace device_sync
-
-}  // namespace ash
+}  // namespace ash::device_sync
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.h b/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.h
index c6c279b..cfed800 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.h
+++ b/chromeos/ash/services/device_sync/cryptauth_key_registry_impl.h
@@ -53,7 +53,7 @@
   void OnKeyRegistryUpdated() override;
 
   // Converts the registry to a dictionary value in a form suitable for a pref.
-  base::Value AsDictionary() const;
+  base::Value::Dict AsDictionary() const;
 
   // Contains preferences that outlive the lifetime of this object and across
   // process restarts. Not owned and must outlive this instance.
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_registry_impl_unittest.cc b/chromeos/ash/services/device_sync/cryptauth_key_registry_impl_unittest.cc
index 51e80cd..018df2b9 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_registry_impl_unittest.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_key_registry_impl_unittest.cc
@@ -10,9 +10,7 @@
 #include "components/prefs/testing_pref_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace ash {
-
-namespace device_sync {
+namespace ash::device_sync {
 
 class DeviceSyncCryptAuthKeyRegistryImplTest : public testing::Test {
  public:
@@ -32,7 +30,7 @@
   }
 
   // Verify that changing the in-memory key bundle map updates the pref.
-  void VerifyPrefValue(const base::Value& expected_dict) {
+  void VerifyPrefValue(const base::Value::Dict& expected_dict) {
     const base::Value::Dict& dict =
         pref_service_.GetDict(prefs::kCryptAuthKeyRegistry);
     EXPECT_EQ(expected_dict, dict);
@@ -90,8 +88,8 @@
   expected_bundle.AddKey(sym_key);
   EXPECT_EQ(expected_bundle, *key_bundle);
 
-  base::Value expected_dict(base::Value::Type::DICT);
-  expected_dict.SetKey(
+  base::Value::Dict expected_dict;
+  expected_dict.Set(
       CryptAuthKeyBundle::KeyBundleNameEnumToString(expected_bundle.name()),
       expected_bundle.AsDictionary());
   VerifyPrefValue(expected_dict);
@@ -110,7 +108,7 @@
   ASSERT_TRUE(active_key);
   EXPECT_EQ(asym_key, *active_key);
 
-  expected_dict.SetKey(
+  expected_dict.Set(
       CryptAuthKeyBundle::KeyBundleNameEnumToString(expected_bundle.name()),
       expected_bundle.AsDictionary());
   VerifyPrefValue(expected_dict);
@@ -140,8 +138,8 @@
   expected_bundle.AddKey(sym_key);
   asym_key.set_status(CryptAuthKey::Status::kInactive);
   expected_bundle.AddKey(asym_key);
-  base::Value expected_dict(base::Value::Type::DICT);
-  expected_dict.SetKey(
+  base::Value::Dict expected_dict;
+  expected_dict.Set(
       CryptAuthKeyBundle::KeyBundleNameEnumToString(expected_bundle.name()),
       expected_bundle.AsDictionary());
   VerifyPrefValue(expected_dict);
@@ -166,8 +164,8 @@
   expected_bundle.AddKey(sym_key);
   asym_key.set_status(CryptAuthKey::Status::kInactive);
   expected_bundle.AddKey(asym_key);
-  base::Value expected_dict(base::Value::Type::DICT);
-  expected_dict.SetKey(
+  base::Value::Dict expected_dict;
+  expected_dict.Set(
       CryptAuthKeyBundle::KeyBundleNameEnumToString(expected_bundle.name()),
       expected_bundle.AsDictionary());
   VerifyPrefValue(expected_dict);
@@ -195,8 +193,8 @@
   CryptAuthKeyBundle expected_bundle(
       CryptAuthKeyBundle::Name::kLegacyAuthzenKey);
   expected_bundle.AddKey(asym_key);
-  base::Value expected_dict(base::Value::Type::DICT);
-  expected_dict.SetKey(
+  base::Value::Dict expected_dict;
+  expected_dict.Set(
       CryptAuthKeyBundle::KeyBundleNameEnumToString(expected_bundle.name()),
       expected_bundle.AsDictionary());
   VerifyPrefValue(expected_dict);
@@ -224,8 +222,8 @@
       CryptAuthKeyBundle::Name::kLegacyAuthzenKey);
   expected_bundle.AddKey(sym_key);
   expected_bundle.set_key_directive(key_directive);
-  base::Value expected_dict(base::Value::Type::DICT);
-  expected_dict.SetKey(
+  base::Value::Dict expected_dict;
+  expected_dict.Set(
       CryptAuthKeyBundle::KeyBundleNameEnumToString(expected_bundle.name()),
       expected_bundle.AsDictionary());
   VerifyPrefValue(expected_dict);
@@ -270,6 +268,4 @@
   EXPECT_EQ(expected_bundle_legacy_authzen_key, *key_bundle_legacy_authzen_key);
 }
 
-}  // namespace device_sync
-
-}  // namespace ash
+}  // namespace ash::device_sync
diff --git a/chromeos/ash/services/device_sync/cryptauth_key_unittest.cc b/chromeos/ash/services/device_sync/cryptauth_key_unittest.cc
index 7b22ba14..35dc7e3 100644
--- a/chromeos/ash/services/device_sync/cryptauth_key_unittest.cc
+++ b/chromeos/ash/services/device_sync/cryptauth_key_unittest.cc
@@ -95,7 +95,7 @@
   dict.Set("symmetric_key", util::EncodeAsValueString(kFakeSymmetricKey));
 
   absl::optional<CryptAuthKey> key =
-      CryptAuthKey::FromDictionary(base::Value(std::move(dict)));
+      CryptAuthKey::FromDictionary(std::move(dict));
   ASSERT_TRUE(key);
   EXPECT_EQ(*key, CryptAuthKey(kFakeSymmetricKey, CryptAuthKey::Status::kActive,
                                cryptauthv2::KeyType::RAW256, kFakeHandle));
@@ -110,7 +110,7 @@
   dict.Set("private_key", util::EncodeAsValueString(kFakePrivateKey));
 
   absl::optional<CryptAuthKey> key =
-      CryptAuthKey::FromDictionary(base::Value(std::move(dict)));
+      CryptAuthKey::FromDictionary(std::move(dict));
   ASSERT_TRUE(key);
   EXPECT_EQ(*key, CryptAuthKey(kFakePublicKey, kFakePrivateKey,
                                CryptAuthKey::Status::kActive,
@@ -123,7 +123,7 @@
   dict.Set("type", cryptauthv2::KeyType::RAW256);
   dict.Set("symmetric_key", kFakeSymmetricKey);
 
-  EXPECT_FALSE(CryptAuthKey::FromDictionary(base::Value(std::move(dict))));
+  EXPECT_FALSE(CryptAuthKey::FromDictionary(std::move(dict)));
 }
 
 TEST(DeviceSyncCryptAuthKeyTest, KeyFromDictionary_MissingStatus) {
@@ -132,7 +132,7 @@
   dict.Set("type", cryptauthv2::KeyType::RAW256);
   dict.Set("symmetric_key", kFakeSymmetricKey);
 
-  EXPECT_FALSE(CryptAuthKey::FromDictionary(base::Value(std::move(dict))));
+  EXPECT_FALSE(CryptAuthKey::FromDictionary(std::move(dict)));
 }
 
 TEST(DeviceSyncCryptAuthKeyTest, KeyFromDictionary_MissingType) {
@@ -141,7 +141,7 @@
   dict.Set("status", CryptAuthKey::Status::kActive);
   dict.Set("symmetric_key", kFakeSymmetricKey);
 
-  EXPECT_FALSE(CryptAuthKey::FromDictionary(base::Value(std::move(dict))));
+  EXPECT_FALSE(CryptAuthKey::FromDictionary(std::move(dict)));
 }
 
 TEST(DeviceSyncCryptAuthKeyTest,
@@ -151,7 +151,7 @@
   dict.Set("status", CryptAuthKey::Status::kActive);
   dict.Set("type", cryptauthv2::KeyType::RAW256);
 
-  EXPECT_FALSE(CryptAuthKey::FromDictionary(base::Value(std::move(dict))));
+  EXPECT_FALSE(CryptAuthKey::FromDictionary(std::move(dict)));
 }
 
 TEST(DeviceSyncCryptAuthKeyTest, AsymmetricKeyFromDictionary_MissingPublicKey) {
@@ -161,7 +161,7 @@
   dict.Set("type", cryptauthv2::KeyType::P256);
   dict.Set("private_key", kFakePrivateKey);
 
-  EXPECT_FALSE(CryptAuthKey::FromDictionary(base::Value(std::move(dict))));
+  EXPECT_FALSE(CryptAuthKey::FromDictionary(std::move(dict)));
 }
 
 TEST(DeviceSyncCryptAuthKeyTest,
@@ -172,7 +172,7 @@
   dict.Set("type", cryptauthv2::KeyType::P256);
   dict.Set("public_key", kFakePublicKey);
 
-  EXPECT_FALSE(CryptAuthKey::FromDictionary(base::Value(std::move(dict))));
+  EXPECT_FALSE(CryptAuthKey::FromDictionary(std::move(dict)));
 }
 
 TEST(DeviceSyncCryptAuthKeyTest, Equality) {
diff --git a/chromeos/components/payments/mojom/BUILD.gn b/chromeos/components/payments/mojom/BUILD.gn
new file mode 100644
index 0000000..c9ea4de
--- /dev/null
+++ b/chromeos/components/payments/mojom/BUILD.gn
@@ -0,0 +1,11 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//mojo/public/tools/bindings/mojom.gni")
+
+mojom("mojom") {
+  sources = [ "payment_app_types.mojom" ]
+
+  public_deps = [ "//components/payments/mojom" ]
+}
diff --git a/chromeos/components/payments/mojom/OWNERS b/chromeos/components/payments/mojom/OWNERS
new file mode 100644
index 0000000..977ca80
--- /dev/null
+++ b/chromeos/components/payments/mojom/OWNERS
@@ -0,0 +1,3 @@
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
+per-file *.mojom=file://chromeos/SECURITY_OWNERS
diff --git a/chromeos/components/payments/mojom/payment_app_types.mojom b/chromeos/components/payments/mojom/payment_app_types.mojom
new file mode 100644
index 0000000..468642b
--- /dev/null
+++ b/chromeos/components/payments/mojom/payment_app_types.mojom
@@ -0,0 +1,129 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module chromeos.payments.mojom;
+
+// These types are used by PaymentAppInstance methods. ARC implements
+// PaymentAppInstance and invokes payments apps. Ash exposes a
+// PaymentAppInstance over Crosapi, forwarding all requests to ARC.
+
+// After the browser calls IsPaymentImplemented(), ARC sends back this result
+// if there are no errors.
+[Stable]
+struct IsPaymentImplementedValidResult {
+  // The list of activities with intent filter for
+  // org.chromium.intent.action.PAY action and "https://play.google.com/billing"
+  // in either "org.chromium.default_payment_method_name" or
+  // "org.chromium.payment_method_names" metadata. Other payment methods are
+  // ignored for now.
+  // Example activity name: "com.example.app.PaymentActivity".
+  array<string> activity_names;
+
+  // The list of services with intent filter for
+  // org.chromium.intent.action.IS_READY_TO_PAY. Example service name:
+  // "com.example.app.IsReadyToPayService".
+  array<string> service_names;
+};
+
+// After the browser calls IsPaymentImplemented(), ARC sends back this result.
+[Stable]
+union IsPaymentImplementedResult {
+  IsPaymentImplementedValidResult valid;
+  string error;
+};
+
+// The common payment parameters for the browser to pass to ARC in both
+// PaymentAppInstance.IsReadyToPayService() and
+// PaymentAppInstance.InvokePaymentApp() Mojo methods. ARC will forward this
+// data to either WebPaymentIntentHelper.createIsReadyToPayIntent() or
+// WebPaymentIntentHelper.createPayIntent(), depending on which method of
+// PaymentApp Mojo IPC service was invoked.
+//
+// WebPaymentIntentHelper in ARC should be used only with the
+// "https://play.google.com/billing" payment method identifier at this time.
+[Stable]
+struct PaymentParameters {
+  // The TWA package name, e.g., "com.example.app". This is the "String
+  // packageName" parameter to createIsReadyToPayIntent() and createPayIntent()
+  // methods.
+  string package_name;
+
+  // The name of the IS_READY_TO_PAY service to query or PAY activity to invoke,
+  // depending on whether this struct is passed into IsReadyToPay() or
+  // InvokePaymentApp() method. For example,
+  // "com.example.app.IsReadyToPayService" or "com.example.app.PaymentActivity".
+  // This is the "String serviceName" parameter to createIsReadyToPayIntent() or
+  // "String activityName" parameter to createPayIntent().
+  string activity_or_service_name;
+
+  // The JSON serialization of the JavaScript object "data" in the
+  // PaymentRequest API. For example:
+  //
+  //  {"productId": "test_product_id"}
+  //
+  // This string is serialized in Blink and is parsed in the TWA. The browser
+  // does not parse this string. This string goes into the value of the
+  // "methodDataMap" parameter of createIsReadyToPayIntent() and
+  // createPayIntent() methods, i.e.:
+  //
+  //  methodDataMap.put("https://play.google.com/billing",
+  //                    new PaymentMethodData("https://play.google.com/billing",
+  //                                          stringified_method_data));
+  string stringified_method_data;
+
+  // (Host, optional port) tuple that cannot be an opaque origin. For example:
+  // "shop.com". This is the "String schemelessOrigin" parameter to
+  // createIsReadyToPayIntent() and createPayIntent() methods.
+  string top_level_origin;
+
+  // (Host, optional port) tuple that cannot be an opaque origin. For
+  // example: "payment-service-provider.com". This is the "String
+  // schemelessIframeOrigin" parameter to createIsReadyToPayIntent() and
+  // createPayIntent() methods.
+  string payment_request_origin;
+
+  // The free-form identifier for this pending transaction as set either by the
+  // merchant website in PaymentRequest() constructor in JavaScript, or (more
+  // commonly) a browser-generated GUID string. This is the "String id"
+  // parameter to createPayIntent() method. The createIsReadyToPayIntent() does
+  // not currently need this parameter.
+  [MinVersion=2]
+  string? payment_request_id;
+
+  // Opaque, browser-generated identifier for this payment request. Used to
+  // identify a particular request across calls.
+  [MinVersion=3]
+  string? request_token;
+};
+
+// After the browser calls IsReadyToPay(), ARC sends back this result.
+[Stable]
+union IsReadyToPayResult {
+  bool response;
+  string error;
+};
+
+// After the browser calls InvokePaymentApp(), ARC sends back this result, if
+// there are no errors.
+[Stable]
+struct InvokePaymentAppValidResult {
+  // Whether the intent return status is Activity.RESULT_OK.
+  bool is_activity_result_ok;
+
+  // The JSON serialization of a JavaScript object that's the response to
+  // PaymentRequest API. For example:
+  //
+  //  {"receiptIdentifier": "test_receipt_identifier"}
+  //
+  // This string is serialized in TWA and is parsed in Blink. The browser does
+  // not parse this string.
+  string stringified_details;
+};
+
+// After the browser calls InvokePaymentApp(), ARC sends back this result.
+[Stable]
+union InvokePaymentAppResult {
+  InvokePaymentAppValidResult valid;
+  string error;
+};
diff --git a/chromeos/ui/frame/non_client_frame_view_base.cc b/chromeos/ui/frame/non_client_frame_view_base.cc
index 2d66b2a..a6316765 100644
--- a/chromeos/ui/frame/non_client_frame_view_base.cc
+++ b/chromeos/ui/frame/non_client_frame_view_base.cc
@@ -79,6 +79,10 @@
 
 NonClientFrameViewBase::~NonClientFrameViewBase() = default;
 
+HeaderView* NonClientFrameViewBase::GetHeaderView() {
+  return header_view_;
+}
+
 int NonClientFrameViewBase::NonClientTopBorderHeight() const {
   // The frame should not occupy the window area when it's in fullscreen,
   // not visible, disabled, in immersive mode or in tablet mode.
@@ -207,4 +211,9 @@
   return frame_->client_view()->HitTestRect(rect_in_client_view_coords);
 }
 
+void NonClientFrameViewBase::PaintAsActiveChanged() {
+  header_view_->GetFrameHeader()->SetPaintAsActive(ShouldPaintAsActive());
+  frame_->non_client_view()->Layout();
+}
+
 }  // namespace chromeos
diff --git a/chromeos/ui/frame/non_client_frame_view_base.h b/chromeos/ui/frame/non_client_frame_view_base.h
index 96db79d..a80febbe 100644
--- a/chromeos/ui/frame/non_client_frame_view_base.h
+++ b/chromeos/ui/frame/non_client_frame_view_base.h
@@ -5,6 +5,7 @@
 #ifndef CHROMEOS_UI_FRAME_NON_CLIENT_FRAME_VIEW_BASE_H_
 #define CHROMEOS_UI_FRAME_NON_CLIENT_FRAME_VIEW_BASE_H_
 
+#include "base/callback_list.h"
 #include "chromeos/ui/frame/header_view.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
@@ -40,6 +41,9 @@
   gfx::Size GetMaximumSize() const override;
   void OnThemeChanged() override;
 
+  // Get the view of the header.
+  HeaderView* GetHeaderView();
+
   // Height from top of window to top of client area.
   int NonClientTopBorderHeight() const;
 
@@ -59,6 +63,15 @@
   OverlayView* overlay_view_ = nullptr;
 
   bool frame_enabled_ = true;
+
+ private:
+  // Called when |frame_|'s "paint as active" state has changed.
+  void PaintAsActiveChanged();
+
+  base::CallbackListSubscription paint_as_active_subscription_ =
+      frame_->RegisterPaintAsActiveChangedCallback(
+          base::BindRepeating(&NonClientFrameViewBase::PaintAsActiveChanged,
+                              base::Unretained(this)));
 };
 
 // View which takes up the entire widget and contains the HeaderView. HeaderView
diff --git a/components/attribution_reporting/BUILD.gn b/components/attribution_reporting/BUILD.gn
index 4af3919..70d02a5 100644
--- a/components/attribution_reporting/BUILD.gn
+++ b/components/attribution_reporting/BUILD.gn
@@ -43,8 +43,6 @@
     "source_type.h",
     "suitable_origin.cc",
     "suitable_origin.h",
-    "trigger_attestation.cc",
-    "trigger_attestation.h",
     "trigger_registration.cc",
     "trigger_registration.h",
   ]
@@ -79,7 +77,6 @@
     "parsing_utils_unittest.cc",
     "source_registration_unittest.cc",
     "suitable_origin_unittest.cc",
-    "trigger_attestation_unittest.cc",
     "trigger_registration_unittest.cc",
   ]
 
@@ -100,7 +97,10 @@
     "test_utils.h",
   ]
 
-  public_deps = [ ":attribution_reporting" ]
+  public_deps = [
+    ":attribution_reporting",
+    "//services/network/public/cpp",
+  ]
 
   deps = [ "//base" ]
 }
@@ -161,7 +161,6 @@
   sources = [ "registration.mojom" ]
 
   generate_java = true
-  webui_module_path = "/"
 
   deps = [
     "//components/aggregation_service:mojom",
@@ -235,13 +234,6 @@
           forward_declaration = "namespace attribution_reporting { struct AggregatableTriggerData; }"
         },
         {
-          mojom = "attribution_reporting.mojom.TriggerAttestation"
-          cpp = "::attribution_reporting::TriggerAttestation"
-          forward_declaration =
-              "namespace attribution_reporting { class TriggerAttestation; }"
-          move_only = true
-        },
-        {
           mojom = "attribution_reporting.mojom.TriggerRegistration"
           cpp = "::attribution_reporting::TriggerRegistration"
           forward_declaration =
diff --git a/components/attribution_reporting/registration.mojom b/components/attribution_reporting/registration.mojom
index d7a3ad08..dfe25c9 100644
--- a/components/attribution_reporting/registration.mojom
+++ b/components/attribution_reporting/registration.mojom
@@ -52,16 +52,6 @@
   Filters not_filters;
 };
 
-// Structure containing a redemption token that can be sent to the reporting
-// origin alongside an aggregatable report for them to attest the validity of a
-// trigger. The token was signed over the included aggregatable_report_id which
-// must therefore be used when creating the report.
-struct TriggerAttestation {
-  string token;
-  // TODO(crbug.com/1240405): replace with `guid` once a type-mapping exists.
-  string aggregatable_report_id;
-};
-
 struct SourceRegistration {
   // Target site where this source will be triggered.
   //
diff --git a/components/attribution_reporting/registration_mojom_traits.cc b/components/attribution_reporting/registration_mojom_traits.cc
index 75c947c3..693f8351 100644
--- a/components/attribution_reporting/registration_mojom_traits.cc
+++ b/components/attribution_reporting/registration_mojom_traits.cc
@@ -20,7 +20,6 @@
 #include "components/attribution_reporting/registration.mojom-shared.h"
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "mojo/public/cpp/base/int128_mojom_traits.h"
 #include "mojo/public/cpp/base/time_mojom_traits.h"
@@ -154,31 +153,6 @@
 }
 
 // static
-bool StructTraits<attribution_reporting::mojom::TriggerAttestationDataView,
-                  attribution_reporting::TriggerAttestation>::
-    Read(attribution_reporting::mojom::TriggerAttestationDataView data,
-         attribution_reporting::TriggerAttestation* out) {
-  std::string token;
-  if (!data.ReadToken(&token)) {
-    return false;
-  }
-
-  std::string aggregatable_report_id;
-  if (!data.ReadAggregatableReportId(&aggregatable_report_id)) {
-    return false;
-  }
-
-  auto trigger_attesation = attribution_reporting::TriggerAttestation::Create(
-      std::move(token), aggregatable_report_id);
-  if (!trigger_attesation) {
-    return false;
-  }
-
-  *out = std::move(*trigger_attesation);
-  return true;
-}
-
-// static
 bool StructTraits<attribution_reporting::mojom::EventTriggerDataDataView,
                   attribution_reporting::EventTriggerData>::
     Read(attribution_reporting::mojom::EventTriggerDataDataView data,
diff --git a/components/attribution_reporting/registration_mojom_traits.h b/components/attribution_reporting/registration_mojom_traits.h
index 50a8376..a623c7b7 100644
--- a/components/attribution_reporting/registration_mojom_traits.h
+++ b/components/attribution_reporting/registration_mojom_traits.h
@@ -21,7 +21,6 @@
 #include "components/attribution_reporting/registration.mojom-shared.h"
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "mojo/public/cpp/base/int128_mojom_traits.h"
 #include "mojo/public/cpp/base/time_mojom_traits.h"
@@ -48,25 +47,6 @@
 
 template <>
 struct COMPONENT_EXPORT(ATTRIBUTION_REPORTING_REGISTRATION_MOJOM_TRAITS)
-    StructTraits<attribution_reporting::mojom::TriggerAttestationDataView,
-                 attribution_reporting::TriggerAttestation> {
-  static const std::string& token(
-      const attribution_reporting::TriggerAttestation& attestation) {
-    return attestation.token();
-  }
-
-  static std::string aggregatable_report_id(
-      const attribution_reporting::TriggerAttestation& attestation) {
-    return attestation.aggregatable_report_id().AsLowercaseString();
-  }
-
-  static bool Read(
-      attribution_reporting::mojom::TriggerAttestationDataView data,
-      attribution_reporting::TriggerAttestation* out);
-};
-
-template <>
-struct COMPONENT_EXPORT(ATTRIBUTION_REPORTING_REGISTRATION_MOJOM_TRAITS)
     StructTraits<attribution_reporting::mojom::SuitableOriginDataView,
                  attribution_reporting::SuitableOrigin> {
   static const url::Origin& origin(
diff --git a/components/attribution_reporting/test_utils.cc b/components/attribution_reporting/test_utils.cc
index d486e9d..5c20458 100644
--- a/components/attribution_reporting/test_utils.cc
+++ b/components/attribution_reporting/test_utils.cc
@@ -15,7 +15,6 @@
 #include "components/attribution_reporting/filters.h"
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "net/base/schemeful_site.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -120,17 +119,4 @@
   return out << *origin;
 }
 
-bool operator==(const TriggerAttestation& a, const TriggerAttestation& b) {
-  auto tie = [](const TriggerAttestation& t) {
-    return std::make_tuple(t.token(), t.aggregatable_report_id());
-  };
-  return tie(a) == tie(b);
-}
-
-std::ostream& operator<<(std::ostream& out,
-                         const TriggerAttestation& attestation) {
-  return out << "{token=" << attestation.token() << ",aggregatable_report_id="
-             << attestation.aggregatable_report_id() << "}";
-}
-
 }  // namespace attribution_reporting
diff --git a/components/attribution_reporting/test_utils.h b/components/attribution_reporting/test_utils.h
index 13296c7..43bddada 100644
--- a/components/attribution_reporting/test_utils.h
+++ b/components/attribution_reporting/test_utils.h
@@ -20,7 +20,6 @@
 class FilterData;
 class Filters;
 class SuitableOrigin;
-class TriggerAttestation;
 
 struct EventTriggerData;
 struct SourceRegistration;
@@ -62,10 +61,6 @@
 
 std::ostream& operator<<(std::ostream&, const SuitableOrigin&);
 
-bool operator==(const TriggerAttestation&, const TriggerAttestation&);
-
-std::ostream& operator<<(std::ostream&, const TriggerAttestation&);
-
 template <typename T, size_t kMaxSize>
 bool operator==(const BoundedList<T, kMaxSize>& a,
                 const BoundedList<T, kMaxSize>& b) {
diff --git a/components/autofill/core/browser/autofill_address_util.cc b/components/autofill/core/browser/autofill_address_util.cc
index 90a8889..dad6b28 100644
--- a/components/autofill/core/browser/autofill_address_util.cc
+++ b/components/autofill/core/browser/autofill_address_util.cc
@@ -4,11 +4,9 @@
 
 #include "components/autofill/core/browser/autofill_address_util.h"
 
-#include <iterator>
 #include <memory>
 #include <utility>
 
-#include "autofill_address_util.h"
 #include "base/check.h"
 #include "base/memory/ptr_util.h"
 #include "base/notreached.h"
@@ -29,19 +27,18 @@
 #include "ui/base/l10n/l10n_util.h"
 
 using i18n::addressinput::AddressField;
+using i18n::addressinput::AddressUiComponent;
 using i18n::addressinput::Localization;
 
 namespace autofill {
 
 namespace {
 
-constexpr char kAddressComponentsFallbackCountryCode[] = "US";
-
 // Returns a vector of AddressUiComponent for `country_code` when using
 // `ui_language_code`. If no components are available for `country_code`, it
 // defaults back to the US. If `ui_language_code` is not valid,  the default
 // format is returned.
-std::vector<ExtendedAddressUiComponent> GetAddressComponents(
+std::vector<AddressUiComponent> GetAddressComponents(
     const std::string& country_code,
     const std::string& ui_language_code,
     std::string* components_language_code) {
@@ -50,68 +47,33 @@
   // Return strings in the current application locale.
   Localization localization;
   localization.SetGetter(l10n_util::GetStringUTF8);
-  AutofillCountry country(country_code);
-
-  std::vector<ExtendedAddressUiComponent> components =
-      ConvertAddressUiComponents(
-          ::i18n::addressinput::BuildComponentsWithLiterals(
-              country_code, localization, ui_language_code,
-              components_language_code),
-          country);
-
-  if (!components.empty()) {
-    ExtendAddressComponents(components, country, localization,
-                            /*include_literals=*/true);
-    return components;
-  } else if (country_code != kAddressComponentsFallbackCountryCode) {
-    return GetAddressComponents(kAddressComponentsFallbackCountryCode,
-                                ui_language_code, components_language_code);
+  for (const auto& country : {country_code, std::string("US")}) {
+    std::vector<AddressUiComponent> components =
+        ::i18n::addressinput::BuildComponentsWithLiterals(
+            country, localization, ui_language_code, components_language_code);
+    if (!components.empty()) {
+      ExtendAddressComponents(components, country, localization,
+                              /*include_literals=*/true);
+      return components;
+    }
   }
-
   NOTREACHED();
   return {};
 }
 
 }  // namespace
 
-std::vector<ExtendedAddressUiComponent> ConvertAddressUiComponents(
-    const std::vector<::i18n::addressinput::AddressUiComponent>&
-        addressinput_components,
-    const AutofillCountry& country) {
-  std::vector<ExtendedAddressUiComponent> components;
-  components.reserve(addressinput_components.size());
-
-  base::ranges::transform(
-      addressinput_components, std::back_inserter(components),
-      [&country](const ::i18n::addressinput::AddressUiComponent& component) {
-        return ExtendedAddressUiComponent(
-            std::move(component),
-            /*is_required=*/country.IsAddressFieldRequired(component.field));
-      });
-
-  return components;
-}
-
-ExtendedAddressUiComponent::ExtendedAddressUiComponent(
-    const ::i18n::addressinput::AddressUiComponent&& component,
-    bool is_required)
-    : ::i18n::addressinput::AddressUiComponent(component),
-      is_required(is_required) {}
-ExtendedAddressUiComponent::ExtendedAddressUiComponent(
-    const ::i18n::addressinput::AddressUiComponent&& component)
-    : ::i18n::addressinput::AddressUiComponent(component) {}
-
-void ExtendAddressComponents(
-    std::vector<ExtendedAddressUiComponent>& components,
-    const AutofillCountry& country,
-    const Localization& localization,
-    bool include_literals) {
+void ExtendAddressComponents(std::vector<AddressUiComponent>& components,
+                             const std::string& country_code,
+                             const Localization& localization,
+                             bool include_literals) {
+  AutofillCountry country(country_code);
   for (const AutofillCountry::AddressFormatExtension& rule :
        country.address_format_extensions()) {
     // Find the location of `rule.placed_after` in `components`.
     // `components.field` is only valid if `components.literal.empty()`.
     auto prev_component = base::ranges::find_if(
-        components, [&rule](const ExtendedAddressUiComponent& component) {
+        components, [&rule](const AddressUiComponent& component) {
           return component.literal.empty() &&
                  component.field == rule.placed_after;
         });
@@ -121,19 +83,16 @@
     if (include_literals) {
       prev_component = components.insert(
           ++prev_component,
-          ExtendedAddressUiComponent{
-              {.literal = std::string(rule.separator_before_label)}});
+          AddressUiComponent{.literal =
+                                 std::string(rule.separator_before_label)});
     }
-
     components.insert(
         ++prev_component,
-        ExtendedAddressUiComponent{
-            {.field = rule.type,
-             .name = localization.GetString(rule.label_id),
-             .length_hint = rule.large_sized
-                                ? ExtendedAddressUiComponent::HINT_LONG
-                                : ExtendedAddressUiComponent::HINT_SHORT},
-            /*is_required=*/country.IsAddressFieldRequired(rule.type)});
+        AddressUiComponent{
+            .field = rule.type,
+            .name = localization.GetString(rule.label_id),
+            .length_hint = rule.large_sized ? AddressUiComponent::HINT_LONG
+                                            : AddressUiComponent::HINT_SHORT});
   }
 }
 
@@ -141,17 +100,17 @@
     const std::string& country_code,
     const std::string& ui_language_code,
     bool include_literals,
-    std::vector<std::vector<ExtendedAddressUiComponent>>* address_components,
+    std::vector<std::vector<AddressUiComponent>>* address_components,
     std::string* components_language_code) {
   std::string not_used;
-  std::vector<ExtendedAddressUiComponent> components = GetAddressComponents(
+  std::vector<AddressUiComponent> components = GetAddressComponents(
       country_code, ui_language_code,
       components_language_code ? components_language_code : &not_used);
-  std::vector<ExtendedAddressUiComponent>* line_components = nullptr;
-  for (const ExtendedAddressUiComponent& component : components) {
+  std::vector<AddressUiComponent>* line_components = nullptr;
+  for (const AddressUiComponent& component : components) {
     // Start a new line if this is the first line, or a new line literal exists.
     if (!line_components || component.literal == "\n") {
-      address_components->push_back(std::vector<ExtendedAddressUiComponent>());
+      address_components->push_back(std::vector<AddressUiComponent>());
       line_components = &address_components->back();
     }
 
@@ -184,12 +143,12 @@
       profile.GetInfo(kCountryCode, ui_language_code);
 
   std::string not_used;
-  std::vector<ExtendedAddressUiComponent> components = GetAddressComponents(
+  std::vector<AddressUiComponent> components = GetAddressComponents(
       base::UTF16ToUTF8(country_code), ui_language_code, &not_used);
 
   DCHECK(!components.empty());
   std::string address;
-  for (const ExtendedAddressUiComponent& component : components) {
+  for (const AddressUiComponent& component : components) {
     // Add string literals directly.
     if (!component.literal.empty()) {
       address += component.literal;
diff --git a/components/autofill/core/browser/autofill_address_util.h b/components/autofill/core/browser/autofill_address_util.h
index e42cf7c..d6902b4a 100644
--- a/components/autofill/core/browser/autofill_address_util.h
+++ b/components/autofill/core/browser/autofill_address_util.h
@@ -9,7 +9,6 @@
 
 #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/field_types.h"
-#include "components/autofill/core/browser/geo/autofill_country.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui_component.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/localization.h"
 
@@ -18,30 +17,12 @@
 class AutofillProfile;
 class PersonalDataManager;
 
-// Extended addressinput struct for storing Autofill specific data.
-struct ExtendedAddressUiComponent
-    : public ::i18n::addressinput::AddressUiComponent {
-  bool is_required = false;
-
-  ExtendedAddressUiComponent(const ::i18n::addressinput::AddressUiComponent&&,
-                             bool);
-  explicit ExtendedAddressUiComponent(
-      const ::i18n::addressinput::AddressUiComponent&&);
-};
-
-// Creates extended ui components from libaddressinput ones with respect to
-// the |country| provided.
-std::vector<ExtendedAddressUiComponent> ConvertAddressUiComponents(
-    const std::vector<::i18n::addressinput::AddressUiComponent>&
-        addressinput_components,
-    const AutofillCountry& country);
-
 // Extend `components` using Autofill's address format extensions. These are
 // used make fields beyond libaddressinput's format available in Autofill's
 // settings UI and import dialogs.
 void ExtendAddressComponents(
-    std::vector<ExtendedAddressUiComponent>& components,
-    const AutofillCountry& country,
+    std::vector<::i18n::addressinput::AddressUiComponent>& components,
+    const std::string& country_code,
     const ::i18n::addressinput::Localization& localization,
     bool include_literals);
 
@@ -57,7 +38,8 @@
     const std::string& country_code,
     const std::string& ui_language_code,
     bool include_literals,
-    std::vector<std::vector<ExtendedAddressUiComponent>>* address_components,
+    std::vector<std::vector<::i18n::addressinput::AddressUiComponent>>*
+        address_components,
     std::string* components_language_code);
 
 // Returns the address stored in `profile` when UI BCP 47 language code is
diff --git a/components/autofill/core/browser/autofill_address_util_unittest.cc b/components/autofill/core/browser/autofill_address_util_unittest.cc
index 2f9b71f..ae51085 100644
--- a/components/autofill/core/browser/autofill_address_util_unittest.cc
+++ b/components/autofill/core/browser/autofill_address_util_unittest.cc
@@ -42,7 +42,7 @@
 // some countries consist of lines with literals only, which, in case
 // |include_literals| is false, appear empty and should be skipped.
 TEST_F(AddressFormattingTest, GetAddressComponentsSkipsEmptyLines) {
-  std::vector<std::vector<ExtendedAddressUiComponent>> lines;
+  std::vector<std::vector<::i18n::addressinput::AddressUiComponent>> lines;
   std::string components_language_code;
   // For Åland Islands the last line contains "ÅLAND" and should be skipped.
   autofill::GetAddressComponents("AX", GetLocale(), /*include_literals=*/false,
@@ -55,7 +55,7 @@
 // Tests that address field extensions are applied to `GetAddressComponents()`,
 // by checking that Great Britain's address format is extended by a state field.
 TEST_F(AddressFormattingTest, GetAddressComponentsWithExtensions) {
-  std::vector<std::vector<ExtendedAddressUiComponent>> lines;
+  std::vector<std::vector<::i18n::addressinput::AddressUiComponent>> lines;
   std::string components_language_code;
   autofill::GetAddressComponents("GB", GetLocale(), /*include_literals=*/false,
                                  &lines, &components_language_code);
diff --git a/components/autofill/core/browser/data_model/autofill_profile.cc b/components/autofill/core/browser/data_model/autofill_profile.cc
index 4594fed..7975ea6 100644
--- a/components/autofill/core/browser/data_model/autofill_profile.cc
+++ b/components/autofill/core/browser/data_model/autofill_profile.cc
@@ -230,11 +230,8 @@
   DCHECK(type == SERVER_PROFILE);
 }
 
-AutofillProfile::AutofillProfile(Source source)
-    : AutofillProfile(base::GenerateGUID(), std::string(), source) {}
-
 AutofillProfile::AutofillProfile()
-    : AutofillProfile(Source::kLocalOrSyncable) {}
+    : AutofillProfile(base::GenerateGUID(), std::string()) {}
 
 AutofillProfile::AutofillProfile(const AutofillProfile& profile)
     : AutofillDataModel(std::string(), std::string()),
diff --git a/components/autofill/core/browser/data_model/autofill_profile.h b/components/autofill/core/browser/data_model/autofill_profile.h
index 4e19337f..538c134c 100644
--- a/components/autofill/core/browser/data_model/autofill_profile.h
+++ b/components/autofill/core/browser/data_model/autofill_profile.h
@@ -61,7 +61,6 @@
   AutofillProfile(const std::string& guid,
                   const std::string& origin,
                   Source source = Source::kLocalOrSyncable);
-  explicit AutofillProfile(Source source);
 
   // Server profile constructor. The type must be SERVER_PROFILE (this serves
   // to differentiate this constructor). |server_id| can be empty. If empty,
diff --git a/components/autofill/core/browser/geo/autofill_country.cc b/components/autofill/core/browser/geo/autofill_country.cc
index d4bcd4f7..9397a1e 100644
--- a/components/autofill/core/browser/geo/autofill_country.cc
+++ b/components/autofill/core/browser/geo/autofill_country.cc
@@ -6,7 +6,6 @@
 
 #include <stddef.h>
 #include <array>
-#include <unordered_map>
 
 #include "base/containers/contains.h"
 #include "base/containers/fixed_flat_map.h"
@@ -27,22 +26,9 @@
 namespace {
 
 // The maximum capacity needed to store a locale up to the country code.
-constexpr size_t kLocaleCapacity =
+const size_t kLocaleCapacity =
     ULOC_LANG_CAPACITY + ULOC_SCRIPT_CAPACITY + ULOC_COUNTRY_CAPACITY + 1;
 
-// Mapping of fields needed for identifying libaddressinput fields that
-// considered required in Autofill.
-constexpr auto kRequiredFieldMapping =
-    base::MakeFixedFlatMap<::i18n::addressinput::AddressField,
-                           RequiredFieldsForAddressImport>(
-        {{::i18n::addressinput::AddressField::ADMIN_AREA,
-          RequiredFieldsForAddressImport::ADDRESS_REQUIRES_STATE},
-         {::i18n::addressinput::AddressField::LOCALITY,
-          RequiredFieldsForAddressImport::ADDRESS_REQUIRES_CITY},
-         {::i18n::addressinput::AddressField::STREET_ADDRESS,
-          RequiredFieldsForAddressImport::ADDRESS_REQUIRES_LINE1},
-         {::i18n::addressinput::AddressField::POSTAL_CODE,
-          RequiredFieldsForAddressImport::ADDRESS_REQUIRES_ZIP}});
 }  // namespace
 
 AutofillCountry::AutofillCountry(const std::string& country_code,
@@ -151,9 +137,4 @@
              [](const AddressFormatExtension& rule) { return rule.type; });
 }
 
-bool AutofillCountry::IsAddressFieldRequired(AddressField address_field) const {
-  auto* mapping_it = kRequiredFieldMapping.find(address_field);
-  return mapping_it != kRequiredFieldMapping.end() &&
-         (required_fields_for_address_import_ & mapping_it->second);
-}
 }  // namespace autofill
diff --git a/components/autofill/core/browser/geo/autofill_country.h b/components/autofill/core/browser/geo/autofill_country.h
index 2080ed3..c225272 100644
--- a/components/autofill/core/browser/geo/autofill_country.h
+++ b/components/autofill/core/browser/geo/autofill_country.h
@@ -61,12 +61,6 @@
   bool IsAddressFieldSettingAccessible(
       ::i18n::addressinput::AddressField address_field) const;
 
-  // Returns true if the given `address_field` is considered required.
-  // Not to be confused with libaddressinput's requirements, it has its
-  // own set of required fields.
-  bool IsAddressFieldRequired(
-      ::i18n::addressinput::AddressField address_field) const;
-
   // Returns the likely country code for |locale|, or "US" as a fallback if no
   // mapping from the locale is available.
   static const std::string CountryCodeForLocale(const std::string& locale);
diff --git a/components/autofill/core/browser/geo/autofill_country_unittest.cc b/components/autofill/core/browser/geo/autofill_country_unittest.cc
index 0c3e2947..a6b0f073 100644
--- a/components/autofill/core/browser/geo/autofill_country_unittest.cc
+++ b/components/autofill/core/browser/geo/autofill_country_unittest.cc
@@ -12,7 +12,6 @@
 #include "components/autofill/core/browser/geo/country_data.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_field.h"
 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_metadata.h"
 #if defined(ANDROID)
 #include "base/android/build_info.h"
@@ -20,7 +19,6 @@
 
 using autofill::CountryDataMap;
 using base::ASCIIToUTF16;
-using ::i18n::addressinput::AddressField;
 
 namespace autofill {
 
@@ -71,19 +69,13 @@
 // Test the address requirement methods for the US.
 TEST(AutofillCountryTest, UsaAddressRequirements) {
   // The US requires a zip, state, city and line1 entry.
-  AutofillCountry country("US", "en_US");
+  AutofillCountry us_autofill_country("US", "en_US");
 
-  EXPECT_FALSE(country.requires_zip_or_state());
-  EXPECT_TRUE(country.requires_zip());
-  EXPECT_TRUE(country.requires_state());
-  EXPECT_TRUE(country.requires_city());
-  EXPECT_TRUE(country.requires_line1());
-
-  // The same expectations via libaddressinput AddressField.
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::POSTAL_CODE));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::ADMIN_AREA));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::LOCALITY));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::STREET_ADDRESS));
+  EXPECT_FALSE(us_autofill_country.requires_zip_or_state());
+  EXPECT_TRUE(us_autofill_country.requires_zip());
+  EXPECT_TRUE(us_autofill_country.requires_state());
+  EXPECT_TRUE(us_autofill_country.requires_city());
+  EXPECT_TRUE(us_autofill_country.requires_line1());
 }
 
 // Test that unknown country codes have US requirements.
@@ -106,40 +98,28 @@
 // Test the address requirement method for Brazil.
 TEST(AutofillCountryTest, BrAddressRequirements) {
   // Brazil only requires a zip entry.
-  AutofillCountry country("BR", "en_US");
+  AutofillCountry brazil_autofill_country("BR", "en_US");
 
-  EXPECT_FALSE(country.requires_zip_or_state());
-  EXPECT_TRUE(country.requires_zip());
-  EXPECT_TRUE(country.requires_state());
-  EXPECT_TRUE(country.requires_city());
-  EXPECT_TRUE(country.requires_line1());
-
-  // The same expectations via libaddressinput AddressField.
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::POSTAL_CODE));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::ADMIN_AREA));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::LOCALITY));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::STREET_ADDRESS));
+  EXPECT_FALSE(brazil_autofill_country.requires_zip_or_state());
+  EXPECT_TRUE(brazil_autofill_country.requires_zip());
+  EXPECT_TRUE(brazil_autofill_country.requires_state());
+  EXPECT_TRUE(brazil_autofill_country.requires_city());
+  EXPECT_TRUE(brazil_autofill_country.requires_line1());
 }
 
 // Test the address requirement method for Turkey.
 TEST(AutofillCountryTest, TrAddressRequirements) {
   // Brazil only requires a zip entry.
-  AutofillCountry country("TR", "en_US");
+  AutofillCountry turkey_autofill_country("TR", "en_US");
 
   // Although ZIP codes are existing in Turkey, they are commonly used.
-  EXPECT_FALSE(country.requires_zip());
+  EXPECT_FALSE(turkey_autofill_country.requires_zip());
   // In Turkey, a district is the largest level of the address hierarchy and
   // mapped to the Autofill state.
-  EXPECT_TRUE(country.requires_state());
+  EXPECT_TRUE(turkey_autofill_country.requires_state());
   // And the province as the second largest level is mapped to city.
-  EXPECT_TRUE(country.requires_city());
-  EXPECT_TRUE(country.requires_line1());
-
-  // The same expectations via libaddressinput AddressField.
-  EXPECT_FALSE(country.IsAddressFieldRequired(AddressField::POSTAL_CODE));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::ADMIN_AREA));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::LOCALITY));
-  EXPECT_TRUE(country.IsAddressFieldRequired(AddressField::STREET_ADDRESS));
+  EXPECT_TRUE(turkey_autofill_country.requires_city());
+  EXPECT_TRUE(turkey_autofill_country.requires_line1());
 }
 
 // Test mapping all country codes to country names.
diff --git a/components/autofill/core/common/autofill_regex_constants.h b/components/autofill/core/common/autofill_regex_constants.h
index 74e3358..4552565 100644
--- a/components/autofill/core/common/autofill_regex_constants.h
+++ b/components/autofill/core/common/autofill_regex_constants.h
@@ -633,19 +633,19 @@
     u"one.?time|"
     // The main tokens are good signals, but they are short, require word
     // boundaries around them.
-    u"(\\b|_)(otp|otc|totp|sms|2fa|mfa)(\\b|_)|"
+    u"(?:\\b|_)(?:otp|otc|totp|sms|2fa|mfa)(?:\\b|_)|"
     // Alternatively, require companion tokens before or after the main tokens.
-    u"(otp|otc|totp|sms|2fa|mfa).?(code|token|input|value|pin|login|verif|pass|"
-    u"pwd|psw|auth|field)|"
-    u"(verif(y|ication)?|email|phone|text|login|input|txt|user).?(otp|otc|totp|"
-    u"sms|2fa|mfa)|"
+    u"(?:otp|otc|totp|sms|2fa|mfa).?(?:code|token|input|value|pin|login|verif|"
+    u"pass|pwd|psw|auth|field)|"
+    u"(?:verif(?:y|ication)?|email|phone|text|login|input|txt|user).?(?:otp|"
+    u"otc|totp|sms|2fa|mfa)|"
     // Sometimes the main tokens are combined with each other.
     u"sms.?otp|mfa.?otp|"
     // "code" is not so strong signal as the main tokens, but in combination
     // with "verification" and its variations it is.
-    u"verif(y|ication)?.?code|(\\b|_)vcode|"
+    u"verif(?:y|ication)?.?code|(?:\\b|_)vcode|"
     // 'Second factor' and its variations are good signals.
-    u"(second|two|2).?factor|"
+    u"(?:second|two|2).?factor|"
     // A couple of custom strings that are usually OTP fields.
     u"wfls-token|email_code";
 
diff --git a/components/autofill_strings.grdp b/components/autofill_strings.grdp
index f5014cd..29549f42 100644
--- a/components/autofill_strings.grdp
+++ b/components/autofill_strings.grdp
@@ -246,9 +246,6 @@
         <message name="IDS_ENABLE_CREDIT_CARD_FIDO_AUTH_SUBLABEL" desc="Sublabel for a toggle that allows users to control whether or not to use FIDO authentication for credit card unmasking for Android. Sentence-Cased." formatter_data="android_java">
           Use screen lock to confirm cards faster
         </message>
-        <message name="IDS_AUTOFILL_EDIT_ADDRESS_REQUIRED_FIELD_ERROR" desc="Validation error message for missing required address field." formatter_data="android_java">
-          <ph name="FIELD">$1<ex>Postal code</ex></ph> can't be empty
-        </message>
       </if>
       <if expr="not is_macosx and not is_win and not is_android">
         <message name="IDS_ENABLE_CREDIT_CARD_FIDO_AUTH_LABEL" desc="Label for a toggle that allows users to control whether or not to use FIDO authentication for credit card unmasking. Title-Cased.">
diff --git a/components/autofill_strings_grdp/IDS_AUTOFILL_EDIT_ADDRESS_REQUIRED_FIELD_ERROR.png.sha1 b/components/autofill_strings_grdp/IDS_AUTOFILL_EDIT_ADDRESS_REQUIRED_FIELD_ERROR.png.sha1
deleted file mode 100644
index 25ed733..0000000
--- a/components/autofill_strings_grdp/IDS_AUTOFILL_EDIT_ADDRESS_REQUIRED_FIELD_ERROR.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f39ae6c4e10fac45317aba9bb8458cbd6f13e875
\ No newline at end of file
diff --git a/components/cast_streaming/browser/stream_consumer.cc b/components/cast_streaming/browser/stream_consumer.cc
index 48cda3ab..c1c98f4 100644
--- a/components/cast_streaming/browser/stream_consumer.cc
+++ b/components/cast_streaming/browser/stream_consumer.cc
@@ -6,11 +6,11 @@
 
 #include <algorithm>
 
-#include "base/containers/span.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/public/features.h"
 #include "media/base/media_util.h"
+#include "third_party/openscreen/src/platform/base/span.h"
 
 namespace cast_streaming {
 
@@ -135,7 +135,7 @@
   // Write to temporary storage in case we need to drop this frame.
   pending_buffer_offset_ = 0;
   encoded_frame = receiver_->ConsumeNextFrame(
-      base::span<uint8_t>(pending_buffer_, buffer_size));
+      openscreen::ByteBuffer(&pending_buffer_[0], buffer_size));
 
   // If the frame occurs before the id we want to flush until, drop it and try
   // again.
diff --git a/components/cast_streaming/test/cast_streaming_test_sender.cc b/components/cast_streaming/test/cast_streaming_test_sender.cc
index 4bac848..7b1410a 100644
--- a/components/cast_streaming/test/cast_streaming_test_sender.cc
+++ b/components/cast_streaming/test/cast_streaming_test_sender.cc
@@ -11,7 +11,7 @@
 #include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/public/config_conversions.h"
 #include "components/cast_streaming/test/cast_message_port_sender_impl.h"
-#include "third_party/openscreen/src/platform/base/byte_view.h"
+#include "third_party/openscreen/src/platform/base/span.h"
 
 namespace cast_streaming {
 
diff --git a/components/history/core/browser/history_backend_db_unittest.cc b/components/history/core/browser/history_backend_db_unittest.cc
index 3a492d9..fb15cd0 100644
--- a/components/history/core/browser/history_backend_db_unittest.cc
+++ b/components/history/core/browser/history_backend_db_unittest.cc
@@ -1456,7 +1456,7 @@
       // Manually set last compatible version to one higher
       // than current version.
       sql::MetaTable meta;
-      meta.Init(&db, 1, 1);
+      ASSERT_TRUE(meta.Init(&db, 1, 1));
       meta.SetCompatibleVersionNumber(HistoryDatabase::GetCurrentVersion() + 1);
     }
   }
@@ -1475,7 +1475,7 @@
     ASSERT_TRUE(db.Open(history_dir_.Append(kHistoryFilename)));
     {
       sql::MetaTable meta;
-      meta.Init(&db, 1, 1);
+      ASSERT_TRUE(meta.Init(&db, 1, 1));
       // Current browser version must be already higher than 28.
       ASSERT_LT(28, HistoryDatabase::GetCurrentVersion());
       // Expect that version in DB remains the same.
diff --git a/components/local_state/local_state_utils.cc b/components/local_state/local_state_utils.cc
index 64ae50b..3fdff33 100644
--- a/components/local_state/local_state_utils.cc
+++ b/components/local_state/local_state_utils.cc
@@ -26,8 +26,9 @@
 bool HasValidPrefix(const std::string& pref_name,
                     const std::vector<std::string> valid_prefixes) {
   for (const std::string& prefix : valid_prefixes) {
-    if (base::StartsWith(pref_name, prefix, base::CompareCase::SENSITIVE))
+    if (base::StartsWith(pref_name, prefix, base::CompareCase::SENSITIVE)) {
       return true;
+    }
   }
   return false;
 }
@@ -37,14 +38,15 @@
 namespace internal {
 
 void FilterPrefs(const std::vector<std::string>& valid_prefixes,
-                 base::Value& prefs) {
+                 base::Value::Dict& prefs) {
   std::vector<std::string> prefs_to_remove;
-  for (auto it : prefs.DictItems()) {
-    if (!HasValidPrefix(it.first, valid_prefixes))
+  for (auto it : prefs) {
+    if (!HasValidPrefix(it.first, valid_prefixes)) {
       prefs_to_remove.push_back(it.first);
+    }
   }
   for (const std::string& pref_to_remove : prefs_to_remove) {
-    bool successfully_removed = prefs.RemovePath(pref_to_remove);
+    bool successfully_removed = prefs.RemoveByDottedPath(pref_to_remove);
     DCHECK(successfully_removed);
   }
 }
@@ -52,14 +54,14 @@
 }  // namespace internal
 
 bool GetPrefsAsJson(PrefService* pref_service, std::string* json_string) {
-  base::Value local_state_values =
+  base::Value::Dict local_state_values =
       pref_service->GetPreferenceValues(PrefService::EXCLUDE_DEFAULTS);
   if (ENABLE_FILTERING) {
     // Filter out the prefs to only include variations and UMA related fields,
     // which don't contain PII.
-    std::vector<std::string> allowlisted_prefixes = {"variations",
-                                                     "user_experience_metrics"};
-    internal::FilterPrefs(allowlisted_prefixes, local_state_values);
+    std::vector<std::string> allowed_prefixes = {"variations",
+                                                 "user_experience_metrics"};
+    internal::FilterPrefs(allowed_prefixes, local_state_values);
   }
 
   JSONStringValueSerializer serializer(json_string);
diff --git a/components/local_state/local_state_utils.h b/components/local_state/local_state_utils.h
index af2d1fd3..d995d80 100644
--- a/components/local_state/local_state_utils.h
+++ b/components/local_state/local_state_utils.h
@@ -17,7 +17,7 @@
 // Removes elements from |prefs| where the key does not match any of the
 // prefixes in |valid_prefixes|.
 void FilterPrefs(const std::vector<std::string>& valid_prefixes,
-                 base::Value& prefs);
+                 base::Value::Dict& prefs);
 
 }  // namespace internal
 
diff --git a/components/local_state/local_state_utils_unittest.cc b/components/local_state/local_state_utils_unittest.cc
index ff62966..3a3c5e6 100644
--- a/components/local_state/local_state_utils_unittest.cc
+++ b/components/local_state/local_state_utils_unittest.cc
@@ -17,17 +17,19 @@
   all_pref_paths.insert(all_pref_paths.end(), valid_pref_paths.begin(),
                         valid_pref_paths.end());
 
-  base::Value prefs(base::Value::Type::DICT);
-  for (const std::string& path : all_pref_paths)
-    prefs.SetStringPath(path, path + "_value");
+  base::Value::Dict prefs;
+  for (const std::string& path : all_pref_paths) {
+    prefs.SetByDottedPath(path, path + "_value");
+  }
 
   internal::FilterPrefs(prefixes, prefs);
 
-  for (const std::string& invalid_path : invalid_pref_paths)
-    EXPECT_FALSE(prefs.FindStringPath(invalid_path));
+  for (const std::string& invalid_path : invalid_pref_paths) {
+    EXPECT_FALSE(prefs.FindByDottedPath(invalid_path));
+  }
 
   for (const std::string& valid_path : valid_pref_paths) {
-    const std::string* result = prefs.FindStringPath(valid_path);
+    const std::string* result = prefs.FindStringByDottedPath(valid_path);
     ASSERT_TRUE(result);
     EXPECT_EQ(valid_path + "_value", *result);
   }
diff --git a/components/media_router/browser/issue_manager_unittest.cc b/components/media_router/browser/issue_manager_unittest.cc
index 1b6d0712..aeb65f24 100644
--- a/components/media_router/browser/issue_manager_unittest.cc
+++ b/components/media_router/browser/issue_manager_unittest.cc
@@ -17,7 +17,7 @@
 namespace {
 
 IssueInfo CreateTestIssue(IssueInfo::Severity severity) {
-  IssueInfo issue("title", severity);
+  IssueInfo issue("title", severity, "sinkId1");
   issue.message = "message";
   return issue;
 }
diff --git a/components/media_router/common/issue.cc b/components/media_router/common/issue.cc
index c6913db..b463939 100644
--- a/components/media_router/common/issue.cc
+++ b/components/media_router/common/issue.cc
@@ -5,6 +5,7 @@
 #include "components/media_router/common/issue.h"
 
 #include "base/atomic_sequence_num.h"
+#include "base/check.h"
 
 namespace media_router {
 
@@ -20,12 +21,17 @@
 IssueInfo& IssueInfo::operator=(IssueInfo&&) = default;
 IssueInfo::~IssueInfo() = default;
 
-IssueInfo::IssueInfo(const std::string& title, Severity severity)
-    : title(title), severity(severity) {}
+IssueInfo::IssueInfo(const std::string& title,
+                     Severity severity,
+                     MediaSink::Id sink_id)
+    : title(title), severity(severity), sink_id(sink_id) {
+  DCHECK(!sink_id.empty());
+}
 
 bool IssueInfo::operator==(const IssueInfo& other) const {
   return title == other.title && severity == other.severity &&
-         message == other.message && route_id == other.route_id;
+         message == other.message && route_id == other.route_id &&
+         sink_id == other.sink_id;
 }
 
 Issue::Issue(IssueInfo info)
diff --git a/components/media_router/common/issue.h b/components/media_router/common/issue.h
index aa34714..1876e08 100644
--- a/components/media_router/common/issue.h
+++ b/components/media_router/common/issue.h
@@ -23,10 +23,8 @@
 
   // |title|: The title for the issue.
   // |severity|: The severity of the issue.
-  //
-  // TODO(crbug.com/1407333): Add sink_id as a ctor argument, as all issues have
-  // associated sinks.
-  IssueInfo(const std::string& title, Severity severity);
+  // |sink_id|: ID of the associated MediaSink.
+  IssueInfo(const std::string& title, Severity severity, MediaSink::Id sink_id);
   IssueInfo(const IssueInfo&);
   IssueInfo& operator=(const IssueInfo&);
   IssueInfo(IssueInfo&&);
@@ -46,8 +44,7 @@
   // with it.
   MediaRoute::Id route_id;
 
-  // ID of the sink associated with this issue, or empty if no sink is
-  // associated with it.
+  // ID of the sink associated with this issue.
   MediaSink::Id sink_id;
 };
 
diff --git a/components/media_router/common/issue_unittest.cc b/components/media_router/common/issue_unittest.cc
index 58f60d4..1223f6d1 100644
--- a/components/media_router/common/issue_unittest.cc
+++ b/components/media_router/common/issue_unittest.cc
@@ -10,21 +10,23 @@
 
 namespace {
 
+constexpr char kMediaSinkId[] = "sinkId1";
+
 IssueInfo CreateWarningIssueInfo() {
-  IssueInfo issue("title", IssueInfo::Severity::WARNING);
+  IssueInfo issue("title", IssueInfo::Severity::WARNING, kMediaSinkId);
   issue.message = "message";
   return issue;
 }
 
 IssueInfo CreateNotificationRouteIssueInfoWithMessage() {
-  IssueInfo issue("title", IssueInfo::Severity::NOTIFICATION);
+  IssueInfo issue("title", IssueInfo::Severity::NOTIFICATION, kMediaSinkId);
   issue.message = "message";
   issue.route_id = "routeid";
   return issue;
 }
 
 IssueInfo CreateNotificationRouteIssueInfo() {
-  IssueInfo issue("title", IssueInfo::Severity::NOTIFICATION);
+  IssueInfo issue("title", IssueInfo::Severity::NOTIFICATION, kMediaSinkId);
   issue.route_id = "routeid";
   return issue;
 }
diff --git a/components/offline_pages/core/prefetch/store/prefetch_store_schema_unittest.cc b/components/offline_pages/core/prefetch/store/prefetch_store_schema_unittest.cc
index 8addde4..a269d2e 100644
--- a/components/offline_pages/core/prefetch/store/prefetch_store_schema_unittest.cc
+++ b/components/offline_pages/core/prefetch/store/prefetch_store_schema_unittest.cc
@@ -252,7 +252,7 @@
   sql::Database db;
   ASSERT_TRUE(db.OpenInMemory());
   sql::MetaTable meta;
-  meta.Init(&db, 100, 99);  // Some future version.
+  ASSERT_TRUE(meta.Init(&db, 100, 99));  // Some future version.
   ASSERT_TRUE(db.Execute("CREATE TABLE prefetch_items (x INTEGER DEFAULT 1);"));
   ASSERT_TRUE(PrefetchStoreSchema::CreateOrUpgradeIfNeeded(&db));
 
diff --git a/components/password_manager/core/browser/affiliation/affiliation_database.cc b/components/password_manager/core/browser/affiliation/affiliation_database.cc
index a2c5ea70..b03d6df1 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_database.cc
+++ b/components/password_manager/core/browser/affiliation/affiliation_database.cc
@@ -411,7 +411,8 @@
   // that a metatable already exists. Hence they are not influencing the version
   // of the underlying database.
   DCHECK(sql::MetaTable::DoesTableExist(sql_connection_.get()));
-  metatable.Init(sql_connection_.get(), 1, 1);
+  bool ok = metatable.Init(sql_connection_.get(), 1, 1);
+  DCHECK(ok);
   return metatable.GetVersionNumber();
 }
 
diff --git a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
index 1fd2300..8e23e06 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
@@ -1935,7 +1935,8 @@
       password_manager::features::kNewRegexForOtpFields);
   for (const char16_t* field_name :
        {u"SocialSecurityNumber", u"OneTimePassword", u"SMS-token", u"otp-code",
-        u"input_SMS", u"second.factor"}) {
+        u"input_SMS", u"second.factor", u"2FA", u"Sms{Otp}",
+        u"login$$verif_vcode"}) {
     CheckTestData({
         {
             .description_for_logging = "Field name matches the SSN/OTP pattern,"
diff --git a/components/payments/content/DEPS b/components/payments/content/DEPS
index 944b064..2aacec5f 100644
--- a/components/payments/content/DEPS
+++ b/components/payments/content/DEPS
@@ -2,6 +2,7 @@
   "-components/payments/content/android",
   "+ash/components/arc",
   "+ash/public/cpp/external_arc/overlay",
+  "+chromeos/components/payments",
   # TODO(b/129295708): Remove after move is complete.
   "+components/arc",
   "+components/autofill",
diff --git a/components/payments/content/android_app_communication_ash.cc b/components/payments/content/android_app_communication_ash.cc
index 997cb4f..0141406 100644
--- a/components/payments/content/android_app_communication_ash.cc
+++ b/components/payments/content/android_app_communication_ash.cc
@@ -10,6 +10,7 @@
 #include "ash/components/arc/pay/arc_payment_app_bridge.h"
 #include "ash/public/cpp/external_arc/overlay/arc_overlay_manager.h"
 #include "base/functional/callback_helpers.h"
+#include "chromeos/components/payments/mojom/payment_app_types.mojom.h"
 #include "components/payments/core/android_app_description.h"
 #include "components/payments/core/chrome_os_error_strings.h"
 #include "components/payments/core/method_strings.h"
@@ -26,7 +27,7 @@
 void OnIsImplemented(
     const std::string& twa_package_name,
     AndroidAppCommunication::GetAppDescriptionsCallback callback,
-    arc::mojom::IsPaymentImplementedResultPtr response) {
+    chromeos::payments::mojom::IsPaymentImplementedResultPtr response) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   DCHECK(!twa_package_name.empty());
 
@@ -79,7 +80,7 @@
 }
 
 void OnIsReadyToPay(AndroidAppCommunication::IsReadyToPayCallback callback,
-                    arc::mojom::IsReadyToPayResultPtr response) {
+                    chromeos::payments::mojom::IsReadyToPayResultPtr response) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (response.is_null()) {
     std::move(callback).Run(errors::kEmptyResponse, /*is_ready_to_pay=*/false);
@@ -104,7 +105,7 @@
 void OnPaymentAppResponse(
     AndroidAppCommunication::InvokePaymentAppCallback callback,
     base::ScopedClosureRunner overlay_state,
-    arc::mojom::InvokePaymentAppResultPtr response) {
+    chromeos::payments::mojom::InvokePaymentAppResultPtr response) {
   // Dismiss and prevent any further overlays
   overlay_state.RunAndReset();
 
@@ -143,7 +144,7 @@
       response->get_valid()->stringified_details);
 }
 
-arc::mojom::PaymentParametersPtr CreatePaymentParameters(
+chromeos::payments::mojom::PaymentParametersPtr CreatePaymentParameters(
     const std::string& package_name,
     const std::string& activity_or_service_name,
     const std::map<std::string, std::set<std::string>>& stringified_method_data,
@@ -165,7 +166,7 @@
     return nullptr;
   }
 
-  auto parameters = arc::mojom::PaymentParameters::New();
+  auto parameters = chromeos::payments::mojom::PaymentParameters::New();
   parameters->stringified_method_data =
       supported_method_iterator->second.empty()
           ? kEmptyDictionaryJson
diff --git a/components/payments/content/android_app_communication_test_support_chrome_os.cc b/components/payments/content/android_app_communication_test_support_chrome_os.cc
index 9113972..5447769 100644
--- a/components/payments/content/android_app_communication_test_support_chrome_os.cc
+++ b/components/payments/content/android_app_communication_test_support_chrome_os.cc
@@ -10,6 +10,7 @@
 #include "ash/components/arc/pay/arc_payment_app_bridge.h"
 #include "ash/components/arc/test/arc_payment_app_bridge_test_support.h"
 #include "ash/public/cpp/external_arc/overlay/test/test_arc_overlay_manager.h"
+#include "chromeos/components/payments/mojom/payment_app_types.mojom.h"
 #include "components/payments/core/method_strings.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -88,10 +89,11 @@
     EXPECT_CALL(*support_.instance(), IsReadyToPay(testing::_, testing::_))
         .WillOnce(testing::Invoke(
             [is_ready_to_pay](
-                arc::mojom::PaymentParametersPtr parameters,
+                chromeos::payments::mojom::PaymentParametersPtr parameters,
                 arc::ArcPaymentAppBridge::IsReadyToPayCallback callback) {
               std::move(callback).Run(
-                  arc::mojom::IsReadyToPayResult::NewResponse(is_ready_to_pay));
+                  chromeos::payments::mojom::IsReadyToPayResult::NewResponse(
+                      is_ready_to_pay));
             }));
   }
 
@@ -102,16 +104,17 @@
     EXPECT_CALL(*support_.instance(), InvokePaymentApp(testing::_, testing::_))
         .WillOnce(testing::Invoke(
             [is_activity_result_ok, stringified_details](
-                arc::mojom::PaymentParametersPtr parameters,
+                chromeos::payments::mojom::PaymentParametersPtr parameters,
                 arc::ArcPaymentAppBridge::InvokePaymentAppCallback callback) {
               // Chrome OS supports only kGooglePlayBilling payment method
               // identifier at this time, so the |payment_method_identifier|
               // parameter is ignored here.
-              auto valid = arc::mojom::InvokePaymentAppValidResult::New();
+              auto valid =
+                  chromeos::payments::mojom::InvokePaymentAppValidResult::New();
               valid->is_activity_result_ok = is_activity_result_ok;
               valid->stringified_details = stringified_details;
               std::move(callback).Run(
-                  arc::mojom::InvokePaymentAppResult::NewValid(
+                  chromeos::payments::mojom::InvokePaymentAppResult::NewValid(
                       std::move(valid)));
             }));
   }
@@ -120,7 +123,7 @@
     EXPECT_CALL(*support_.instance(), InvokePaymentApp(testing::_, testing::_))
         .WillOnce(testing::Invoke(
             [this](
-                arc::mojom::PaymentParametersPtr parameters,
+                chromeos::payments::mojom::PaymentParametersPtr parameters,
                 arc::ArcPaymentAppBridge::InvokePaymentAppCallback callback) {
               pending_invoke_callback_ = std::move(callback);
             }));
@@ -131,8 +134,8 @@
                    arc::ArcPaymentAppBridge::AbortPaymentAppCallback callback) {
               if (!pending_invoke_callback_.is_null()) {
                 std::move(pending_invoke_callback_)
-                    .Run(arc::mojom::InvokePaymentAppResult::NewError(
-                        "Payment was aborted."));
+                    .Run(chromeos::payments::mojom::InvokePaymentAppResult::
+                             NewError("Payment was aborted."));
               }
               std::move(callback).Run(true);
             }));
@@ -149,7 +152,8 @@
   void RespondToGetAppDescriptions(
       const std::string& package_name,
       arc::ArcPaymentAppBridge::IsPaymentImplementedCallback callback) {
-    auto valid = arc::mojom::IsPaymentImplementedValidResult::New();
+    auto valid =
+        chromeos::payments::mojom::IsPaymentImplementedValidResult::New();
     for (const auto& app : apps_) {
       if (app->package == package_name) {
         for (const auto& activity : app->activities) {
@@ -168,7 +172,8 @@
     }
 
     std::move(callback).Run(
-        arc::mojom::IsPaymentImplementedResult::NewValid(std::move(valid)));
+        chromeos::payments::mojom::IsPaymentImplementedResult::NewValid(
+            std::move(valid)));
   }
 
   arc::ArcPaymentAppBridgeTestSupport support_;
diff --git a/components/prefs/pref_service.cc b/components/prefs/pref_service.cc
index adea7fe..804588c 100644
--- a/components/prefs/pref_service.cc
+++ b/components/prefs/pref_service.cc
@@ -235,19 +235,20 @@
     callback.Run(it.first, *GetPreferenceValue(it.first));
 }
 
-base::Value PrefService::GetPreferenceValues(
+base::Value::Dict PrefService::GetPreferenceValues(
     IncludeDefaults include_defaults) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  base::Value out(base::Value::Type::DICT);
+  base::Value::Dict out;
   for (const auto& it : *pref_registry_) {
     if (include_defaults == INCLUDE_DEFAULTS) {
-      out.SetPath(it.first, GetPreferenceValue(it.first)->Clone());
+      out.SetByDottedPath(it.first, GetPreferenceValue(it.first)->Clone());
     } else {
       const Preference* pref = FindPreference(it.first);
-      if (pref->IsDefaultValue())
+      if (pref->IsDefaultValue()) {
         continue;
-      out.SetPath(it.first, pref->GetValue()->Clone());
+      }
+      out.SetByDottedPath(it.first, pref->GetValue()->Clone());
     }
   }
   return out;
diff --git a/components/prefs/pref_service.h b/components/prefs/pref_service.h
index 10f5691f..3150c4e 100644
--- a/components/prefs/pref_service.h
+++ b/components/prefs/pref_service.h
@@ -334,7 +334,7 @@
   // If INCLUDE_DEFAULTS is requested, preferences set to their default values
   // will be included. Otherwise, these will be omitted from the returned
   // dictionary.
-  base::Value GetPreferenceValues(IncludeDefaults include_defaults) const;
+  base::Value::Dict GetPreferenceValues(IncludeDefaults include_defaults) const;
 
   bool ReadOnly() const;
 
diff --git a/components/reporting/storage/storage_queue.cc b/components/reporting/storage/storage_queue.cc
index 726b26f..c679092 100644
--- a/components/reporting/storage/storage_queue.cc
+++ b/components/reporting/storage/storage_queue.cc
@@ -1486,6 +1486,12 @@
       return;
     }
 
+    // Prepare a copy of the original record, if `upload_settings` is present.
+    if (record_.needs_local_unencrypted_copy()) {
+      record_copy_ = record_;
+      record_.clear_needs_local_unencrypted_copy();
+    }
+
     // If `record_` requires to uphold reserved space, check whether disk space
     // is sufficient. Note that this is only an approximate check, since other
     // writes that have no reservation specified will not observe it anyway.
@@ -1658,16 +1664,22 @@
       Response(encrypted_record_result.status());
       return;
     }
+    auto encrypted_record = std::move(encrypted_record_result.ValueOrDie());
 
     // Add compression information to the encrypted record if it exists.
     if (compression_information.has_value()) {
-      *encrypted_record_result.ValueOrDie().mutable_compression_information() =
+      *encrypted_record.mutable_compression_information() =
           compression_information.value();
     }
 
+    // Add original Record copy, if required.
+    if (record_copy_.has_value()) {
+      *encrypted_record.mutable_record_copy() = std::move(record_copy_.value());
+    }
+
     // Proceed and serialize record.
     SerializeEncryptedRecord(std::move(compression_information),
-                             std::move(encrypted_record_result.ValueOrDie()));
+                             std::move(encrypted_record));
   }
 
   void SerializeEncryptedRecord(
@@ -1876,6 +1888,9 @@
   // Accessed in serialized methods only.
   size_t remaining_attempts_ = 16u;
 
+  // Copy of the original record, if required.
+  absl::optional<Record> record_copy_;
+
   // Position in the `storage_queue_`->`write_contexts_queue_`.
   // We use it in order to detect whether the context is in the queue
   // and to remove it from the queue, when the time comes.
diff --git a/components/reporting/storage/storage_queue_unittest.cc b/components/reporting/storage/storage_queue_unittest.cc
index ca032ce..6ede862 100644
--- a/components/reporting/storage/storage_queue_unittest.cc
+++ b/components/reporting/storage/storage_queue_unittest.cc
@@ -135,6 +135,10 @@
                 (int64_t /*uploader_id*/, int64_t, uint64_t),
                 (const));
     MOCK_METHOD(void,
+                HasUnencryptedCopy,
+                (int64_t /*uploader_id*/, Destination, base::StringPiece),
+                (const));
+    MOCK_METHOD(void,
                 UploadComplete,
                 (int64_t /*uploader_id*/, Status),
                 (const));
@@ -167,11 +171,13 @@
       mock_upload_->EncounterSeqId(uploader_id, sequencing_id);
     }
 
-    void DoUploadRecord(int64_t uploader_id,
-                        int64_t sequencing_id,
-                        int64_t generation_id,
-                        base::StringPiece data,
-                        base::OnceCallback<void(bool)> processed_cb) {
+    void DoUploadRecord(
+        int64_t uploader_id,
+        int64_t sequencing_id,
+        int64_t generation_id,
+        const Record& record,
+        const absl::optional<const Record>& possible_record_copy,
+        base::OnceCallback<void(bool)> processed_cb) {
       DoEncounterSeqId(uploader_id, sequencing_id, generation_id);
       DCHECK_CALLED_ON_VALID_SEQUENCE(scoped_checker_);
       upload_progress_.append("Record: ")
@@ -179,10 +185,19 @@
           .append("/")
           .append(base::NumberToString(generation_id))
           .append(" '")
-          .append(data.data(), data.size())
+          .append(record.data().data(), record.data().size())
           .append("'\n");
-      std::move(processed_cb)
-          .Run(mock_upload_->UploadRecord(uploader_id, sequencing_id, data));
+      bool success =
+          mock_upload_->UploadRecord(uploader_id, sequencing_id, record.data());
+      if (success && possible_record_copy.has_value()) {
+        const auto& record_copy = possible_record_copy.value();
+        upload_progress_.append("Has unencrypted copy: ")
+            .append(record_copy.data().data(), record_copy.data().size())
+            .append("'\n");
+        mock_upload_->HasUnencryptedCopy(uploader_id, record_copy.destination(),
+                                         record_copy.data());
+      }
+      std::move(processed_cb).Run(success);
     }
 
     void DoUploadRecordFailure(int64_t uploader_id,
@@ -326,6 +341,18 @@
         return *this;
       }
 
+      SetUp& HasUnencryptedCopy(int64_t sequencing_id,
+                                Destination destination,
+                                base::StringPiece value) {
+        CHECK(uploader_) << "'Complete' already called";
+        EXPECT_CALL(*uploader_->mock_upload_,
+                    HasUnencryptedCopy(Eq(uploader_id_), Eq(destination),
+                                       StrEq(std::string(value))))
+            .Times(1)
+            .InSequence(uploader_->test_upload_sequence_);
+        return *this;
+      }
+
       SetUp& Failure(int64_t sequencing_id, Status error) {
         CHECK(uploader_) << "'Complete' already called";
         EXPECT_CALL(
@@ -405,8 +432,12 @@
         EXPECT_FALSE(encrypted_record.has_compression_information());
       }
 
+      absl::optional<Record> possible_record_copy;
+      if (encrypted_record.has_record_copy()) {
+        possible_record_copy = encrypted_record.record_copy();
+      }
       VerifyRecord(std::move(sequence_information), std::move(wrapped_record),
-                   std::move(processed_cb));
+                   std::move(possible_record_copy), std::move(processed_cb));
     }
 
     void ProcessGap(SequenceInformation sequence_information,
@@ -483,6 +514,7 @@
    private:
     void VerifyRecord(SequenceInformation sequence_information,
                       WrappedRecord wrapped_record,
+                      absl::optional<const Record> possible_record_copy,
                       base::OnceCallback<void(bool)> processed_cb) {
       DCHECK_CALLED_ON_VALID_SEQUENCE(test_uploader_checker_);
       // Verify generation match.
@@ -507,6 +539,10 @@
         *last_upload_generation_id_ = sequence_information.generation_id();
       }
 
+      // Verify local elements are not included in Record.
+      DCHECK_EQ(wrapped_record.record().has_reserved_space(), 0);
+      DCHECK(!wrapped_record.record().needs_local_unencrypted_copy());
+
       // Verify digest and its match.
       {
         std::string serialized_record;
@@ -552,7 +588,8 @@
       sequence_bound_upload_.AsyncCall(&SequenceBoundUpload::DoUploadRecord)
           .WithArgs(uploader_id_, sequence_information.sequencing_id(),
                     sequence_information.generation_id(),
-                    wrapped_record.record().data(), std::move(processed_cb));
+                    wrapped_record.record(), possible_record_copy,
+                    std::move(processed_cb));
     }
 
     SEQUENCE_CHECKER(test_uploader_checker_);
@@ -2418,6 +2455,37 @@
   EXPECT_THAT(storage_queue_result.status(), Ne(Status::StatusOK()));
 }
 
+TEST_P(StorageQueueTest, WriteWithUnencryptedCopy) {
+  static constexpr char kTestData[] = "test_data";
+
+  CreateTestStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
+  Record record;
+  record.set_data(kTestData);
+  record.set_destination(UPLOAD_EVENTS);
+  record.set_needs_local_unencrypted_copy(true);
+  if (!dm_token_.empty()) {
+    record.set_dm_token(dm_token_);
+  }
+  const Status write_result = WriteRecord(std::move(record));
+  ASSERT_OK(write_result) << write_result;
+
+  // Set uploader expectations.
+  test::TestCallbackAutoWaiter waiter;
+  EXPECT_CALL(set_mock_uploader_expectations_,
+              Call(Eq(UploaderInterface::UploadReason::MANUAL)))
+      .WillOnce(Invoke([&waiter, this](UploaderInterface::UploadReason reason) {
+        return TestUploader::SetUp(&waiter, this)
+            .Required(0, kTestData)
+            .HasUnencryptedCopy(0, UPLOAD_EVENTS, kTestData)
+            .Complete();
+      }))
+      .RetiresOnSaturation();
+
+  // Flush manually.
+  SetExpectedUploadsCount();
+  FlushOrDie();
+}
+
 INSTANTIATE_TEST_SUITE_P(
     VaryingFileSize,
     StorageQueueTest,
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc
index cd4f47e..f0977b9 100644
--- a/components/safe_browsing/core/common/features.cc
+++ b/components/safe_browsing/core/common/features.cc
@@ -178,10 +178,6 @@
              "SafeBrowsingCsbrrNewDownloadTrigger",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kSafeBrowsingCsbrrWithToken,
-             "SafeBrowsingCsbrrWithToken",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 BASE_FEATURE(kSafeBrowsingDisableConsumerCsdForEnterprise,
              "SafeBrowsingDisableConsumerCsdForEnterprise",
              base::FEATURE_ENABLED_BY_DEFAULT);
@@ -272,7 +268,6 @@
     {&kRealTimeUrlFilteringForEnterprise, true},
     {&kRealTimeUrlLookupForEnterpriseAllowlistBypass, true},
     {&kSafeBrowsingCsbrrNewDownloadTrigger, true},
-    {&kSafeBrowsingCsbrrWithToken, true},
     {&kSafeBrowsingDisableConsumerCsdForEnterprise, true},
     {&kSafeBrowsingEnterpriseCsd, true},
     {&kSafeBrowsingLookupMechanismExperiment, true},
diff --git a/components/safe_browsing/core/common/features.h b/components/safe_browsing/core/common/features.h
index b848665c..f952821 100644
--- a/components/safe_browsing/core/common/features.h
+++ b/components/safe_browsing/core/common/features.h
@@ -177,10 +177,6 @@
 // new triggers
 BASE_DECLARE_FEATURE(kSafeBrowsingCsbrrNewDownloadTrigger);
 
-// Controls whether Client Safe Browsing Reports are sent with a GAIA-tied token
-// for Enhanced Safe Browsing users
-BASE_DECLARE_FEATURE(kSafeBrowsingCsbrrWithToken);
-
 // Controls whether we are disabling consumer download checks for users using
 // the enterprise download checks.
 BASE_DECLARE_FEATURE(kSafeBrowsingDisableConsumerCsdForEnterprise);
diff --git a/components/sync/base/features.cc b/components/sync/base/features.cc
index e71be49a..fe7128f 100644
--- a/components/sync/base/features.cc
+++ b/components/sync/base/features.cc
@@ -86,10 +86,6 @@
              "SyncTrustedVaultUseMD5HashedFile",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-BASE_FEATURE(kSyncTrustedVaultBypassThrottlingForNetworkErrors,
-             "SyncTrustedVaultBypassThrottlingForNetworkErrors",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 BASE_FEATURE(kUseSyncInvalidations,
              "UseSyncInvalidations",
              base::FEATURE_DISABLED_BY_DEFAULT);
@@ -142,4 +138,8 @@
              "SyncEnableLoadModelsTimeout",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+BASE_FEATURE(kSyncEnforcePreferencesAllowlist,
+             "SyncEnforcePreferencesAllowlist",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 }  // namespace syncer
diff --git a/components/sync/base/features.h b/components/sync/base/features.h
index 72024e5..e544dcc 100644
--- a/components/sync/base/features.h
+++ b/components/sync/base/features.h
@@ -113,9 +113,6 @@
 // Enables storing MD5 hashed trusted vault file instead of OSCrypt encrypted.
 BASE_DECLARE_FEATURE(kSyncTrustedVaultUseMD5HashedFile);
 
-// Bypasses throttling of trusted vault requests upon network errors.
-BASE_DECLARE_FEATURE(kSyncTrustedVaultBypassThrottlingForNetworkErrors);
-
 // If enabled, the device will register with FCM and listen to new
 // invalidations. Also, FCM token will be set in DeviceInfo, which signals to
 // the server that device listens to new invalidations.
@@ -181,6 +178,10 @@
                                    "sync_load_models_timeout_duration",
                                    base::Seconds(30)};
 
+// Enable check to ensure only preferences in the allowlist are registered as
+// syncable.
+BASE_DECLARE_FEATURE(kSyncEnforcePreferencesAllowlist);
+
 }  // namespace syncer
 
 #endif  // COMPONENTS_SYNC_BASE_FEATURES_H_
diff --git a/components/sync/model/client_tag_based_model_type_processor.cc b/components/sync/model/client_tag_based_model_type_processor.cc
index c2ef36c4..4de78839e 100644
--- a/components/sync/model/client_tag_based_model_type_processor.cc
+++ b/components/sync/model/client_tag_based_model_type_processor.cc
@@ -1232,15 +1232,11 @@
     base::UmaHistogramEnumeration(
         "Sync.ModelTypeEntityMetadataWithoutInitialSync",
         ModelTypeHistogramValue(type_));
-    // In older versions of the binary, commit-only types did not persist
-    // initial_sync_done(). So this branch can legitimately be exercised for
-    // commit-only types exactly once as an upgrade flow.
-    if (!CommitOnlyTypes().Has(type_)) {
-      ClearAllProvidedMetadataAndResetState(metadata_map);
-      // Not having `entity_tracker_` results in doing the initial sync again.
-      DCHECK(!entity_tracker_);
-      return false;
-    }
+
+    ClearAllProvidedMetadataAndResetState(metadata_map);
+    // Not having `entity_tracker_` results in doing the initial sync again.
+    DCHECK(!entity_tracker_);
+    return false;
   }
 
   // Check if ClearMetadataWhileStopped() was called before ModelReadyToSync().
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
index e59046e5..a9e5aa0 100644
--- a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
+++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
@@ -947,16 +947,9 @@
       WriteDataToDisk();
       return;
     case TrustedVaultRegistrationStatus::kAccessTokenFetchingFailure:
+    case TrustedVaultRegistrationStatus::kNetworkError:
       // Request wasn't sent to the server, so there is no need for throttling.
       return;
-    case TrustedVaultRegistrationStatus::kNetworkError:
-      if (base::FeatureList::IsEnabled(
-              kSyncTrustedVaultBypassThrottlingForNetworkErrors)) {
-        // Request wasn't sent to the server, so there is no need for
-        // throttling.
-        return;
-      }
-      [[fallthrough]];
     case TrustedVaultRegistrationStatus::kOtherError:
       RecordFailedConnectionRequestForThrottling();
       return;
@@ -1065,16 +1058,9 @@
       RecordFailedConnectionRequestForThrottling();
       break;
     case TrustedVaultDownloadKeysStatus::kAccessTokenFetchingFailure:
+    case TrustedVaultDownloadKeysStatus::kNetworkError:
       // Request wasn't sent to the server, so there is no need for throttling.
       break;
-    case TrustedVaultDownloadKeysStatus::kNetworkError:
-      if (base::FeatureList::IsEnabled(
-              kSyncTrustedVaultBypassThrottlingForNetworkErrors)) {
-        // Request wasn't sent to the server, so there is no need for
-        // throttling.
-        break;
-      }
-      [[fallthrough]];
     case TrustedVaultDownloadKeysStatus::kOtherError:
       RecordFailedConnectionRequestForThrottling();
       break;
diff --git a/components/sync_preferences/BUILD.gn b/components/sync_preferences/BUILD.gn
index 53babce..4b74605 100644
--- a/components/sync_preferences/BUILD.gn
+++ b/components/sync_preferences/BUILD.gn
@@ -9,12 +9,14 @@
   sources = [
     "pref_model_associator.cc",
     "pref_model_associator.h",
+    "pref_model_associator_client.cc",
     "pref_model_associator_client.h",
     "pref_service_syncable.cc",
     "pref_service_syncable.h",
     "pref_service_syncable_factory.cc",
     "pref_service_syncable_factory.h",
     "pref_service_syncable_observer.h",
+    "syncable_prefs_database.h",
     "synced_pref_observer.h",
   ]
 
diff --git a/components/sync_preferences/pref_model_associator.cc b/components/sync_preferences/pref_model_associator.cc
index 8fae13c..64a2f9b 100644
--- a/components/sync_preferences/pref_model_associator.cc
+++ b/components/sync_preferences/pref_model_associator.cc
@@ -18,6 +18,7 @@
 #include "base/values.h"
 #include "build/chromeos_buildflags.h"
 #include "components/prefs/pref_service.h"
+#include "components/sync/base/features.h"
 #include "components/sync/base/model_type.h"
 #include "components/sync/model/sync_change.h"
 #include "components/sync/model/sync_change_processor.h"
@@ -25,6 +26,7 @@
 #include "components/sync/protocol/preference_specifics.pb.h"
 #include "components/sync_preferences/pref_model_associator_client.h"
 #include "components/sync_preferences/pref_service_syncable.h"
+#include "components/sync_preferences/syncable_prefs_database.h"
 
 namespace sync_preferences {
 
@@ -430,6 +432,11 @@
 
 void PrefModelAssociator::RegisterPref(const std::string& name) {
   DCHECK(!base::Contains(registered_preferences_, name));
+  DCHECK(
+      !base::FeatureList::IsEnabled(syncer::kSyncEnforcePreferencesAllowlist) ||
+      client_->GetSyncablePrefsDatabase().IsPreferenceSyncable(name))
+      << "Preference " << name
+      << " has not been added to syncable prefs allowlist";
   registered_preferences_.insert(name);
 }
 
@@ -437,6 +444,11 @@
     const std::string& name) {
   DCHECK(!base::Contains(legacy_model_type_preferences_, name));
   DCHECK(!base::Contains(registered_preferences_, name));
+  DCHECK(
+      !base::FeatureList::IsEnabled(syncer::kSyncEnforcePreferencesAllowlist) ||
+      client_->GetSyncablePrefsDatabase().IsPreferenceSyncable(name))
+      << "Preference " << name
+      << " has not been added to syncable prefs allowlist";
   legacy_model_type_preferences_.insert(name);
 }
 
diff --git a/components/sync_preferences/pref_model_associator_client.cc b/components/sync_preferences/pref_model_associator_client.cc
new file mode 100644
index 0000000..c5a4bc3
--- /dev/null
+++ b/components/sync_preferences/pref_model_associator_client.cc
@@ -0,0 +1,26 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/sync_preferences/pref_model_associator_client.h"
+#include "components/sync_preferences/syncable_prefs_database.h"
+
+namespace sync_preferences {
+namespace {
+// TODO(crbug.com/1401271): Remove this class once GetSyncablePrefsDatabase()
+// is marked as pure virtual.
+class DummySyncablePrefsDatabase : public SyncablePrefsDatabase {
+ public:
+  bool IsPreferenceSyncable(const std::string& /*pref_name*/) const override {
+    return true;
+  }
+};
+}  // namespace
+
+const SyncablePrefsDatabase&
+PrefModelAssociatorClient::GetSyncablePrefsDatabase() const {
+  static const DummySyncablePrefsDatabase syncable_prefs_database;
+  return syncable_prefs_database;
+}
+
+}  // namespace sync_preferences
diff --git a/components/sync_preferences/pref_model_associator_client.h b/components/sync_preferences/pref_model_associator_client.h
index f0e8773..daf3473 100644
--- a/components/sync_preferences/pref_model_associator_client.h
+++ b/components/sync_preferences/pref_model_associator_client.h
@@ -11,6 +11,8 @@
 
 namespace sync_preferences {
 
+class SyncablePrefsDatabase;
+
 // This class allows the embedder to configure the PrefModelAssociator to
 // have a different behaviour when receiving preference synchronisations
 // events from the server.
@@ -39,6 +41,12 @@
       const base::Value& local_value,
       const base::Value& server_value) const = 0;
 
+  // Returns a pointer to the instance of SyncablePrefsDatabase. This should
+  // define the list of syncable preferences.
+  // TODO(crbug.com/1401271): Mark this method as pure virtual once
+  // platform-specific implementations are complete.
+  virtual const SyncablePrefsDatabase& GetSyncablePrefsDatabase() const;
+
  protected:
   PrefModelAssociatorClient() {}
   virtual ~PrefModelAssociatorClient() {}
diff --git a/components/sync_preferences/pref_model_associator_unittest.cc b/components/sync_preferences/pref_model_associator_unittest.cc
index 0d5ac85..a9085e204 100644
--- a/components/sync_preferences/pref_model_associator_unittest.cc
+++ b/components/sync_preferences/pref_model_associator_unittest.cc
@@ -5,27 +5,48 @@
 #include "components/sync_preferences/pref_model_associator.h"
 
 #include <memory>
+#include <unordered_set>
 
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/test/gtest_util.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/prefs/testing_pref_store.h"
+#include "components/sync/base/features.h"
 #include "components/sync_preferences/pref_model_associator_client.h"
 #include "components/sync_preferences/pref_service_mock_factory.h"
 #include "components/sync_preferences/pref_service_syncable.h"
+#include "components/sync_preferences/syncable_prefs_database.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace sync_preferences {
 
 namespace {
 
+using testing::NotNull;
+
 const char kStringPrefName[] = "pref.string";
 const char kListPrefName[] = "pref.list";
 const char kDictionaryPrefName[] = "pref.dictionary";
 const char kCustomMergePrefName[] = "pref.custom";
 
+const char kAllowedStringPrefName[] = "allowed_string_pref";
+const char kAllowedListPrefName[] = "allowed_list_pref";
+const char kAllowedDictPrefName[] = "allowed_dict_pref";
+const std::unordered_set<std::string> kSyncablePrefsAllowlist = {
+    kAllowedStringPrefName, kAllowedListPrefName, kAllowedDictPrefName};
+
+class TestSyncablePrefsDatabase : public SyncablePrefsDatabase {
+ public:
+  bool IsPreferenceSyncable(const std::string& pref_name) const override {
+    return kSyncablePrefsAllowlist.count(pref_name);
+  }
+};
+
 class TestPrefModelAssociatorClient : public PrefModelAssociatorClient {
  public:
   TestPrefModelAssociatorClient() = default;
@@ -55,26 +76,33 @@
     }
     return base::Value();
   }
+
+ private:
+  const SyncablePrefsDatabase& GetSyncablePrefsDatabase() const override {
+    return syncable_prefs_database_;
+  }
+
+  TestSyncablePrefsDatabase syncable_prefs_database_;
 };
 
 class AbstractPreferenceMergeTest : public testing::Test {
  protected:
   AbstractPreferenceMergeTest()
-      : user_prefs_(base::MakeRefCounted<TestingPrefStore>()) {
+      : pref_registry_(
+            base::MakeRefCounted<user_prefs::PrefRegistrySyncable>()),
+        user_prefs_(base::MakeRefCounted<TestingPrefStore>()) {
     PrefServiceMockFactory factory;
     factory.SetPrefModelAssociatorClient(&client_);
     factory.set_user_prefs(user_prefs_);
-    scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry(
-        new user_prefs::PrefRegistrySyncable);
-    pref_registry->RegisterStringPref(
+    pref_registry_->RegisterStringPref(
         kStringPrefName, std::string(),
         user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-    pref_registry->RegisterListPref(
+    pref_registry_->RegisterListPref(
         kListPrefName, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-    pref_registry->RegisterDictionaryPref(
+    pref_registry_->RegisterDictionaryPref(
         kDictionaryPrefName, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-    pref_service_ = factory.CreateSyncable(pref_registry.get());
-    pref_registry->RegisterStringPref(
+    pref_service_ = factory.CreateSyncable(pref_registry_.get());
+    pref_registry_->RegisterStringPref(
         kCustomMergePrefName, std::string(),
         user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
     pref_sync_service_ = static_cast<PrefModelAssociator*>(
@@ -104,6 +132,7 @@
   }
 
   TestPrefModelAssociatorClient client_;
+  scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_;
   scoped_refptr<TestingPrefStore> user_prefs_;
   std::unique_ptr<PrefServiceSyncable> pref_service_;
   raw_ptr<PrefModelAssociator> pref_sync_service_;
@@ -450,6 +479,167 @@
   EXPECT_TRUE(MergeListPreference(kListPrefName));
 }
 
+class SyncablePrefsDatabaseTest : public AbstractPreferenceMergeTest {
+ protected:
+  SyncablePrefsDatabaseTest()
+      : feature_list_(syncer::kSyncEnforcePreferencesAllowlist) {}
+
+  base::test::ScopedFeatureList feature_list_;
+};
+
+TEST_F(SyncablePrefsDatabaseTest, ShouldAllowRegisteringSyncablePrefs) {
+  pref_registry_->RegisterStringPref(
+      kAllowedStringPrefName, std::string(),
+      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedStringPrefName), NotNull());
+  pref_registry_->RegisterListPref(
+      kAllowedListPrefName, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedListPrefName), NotNull());
+  pref_registry_->RegisterDictionaryPref(
+      kAllowedDictPrefName, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedDictPrefName), NotNull());
+}
+
+TEST_F(SyncablePrefsDatabaseTest, ShouldAllowRegisteringSyncablePriorityPrefs) {
+  pref_registry_->RegisterStringPref(
+      kAllowedStringPrefName, std::string(),
+      user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedStringPrefName), NotNull());
+  pref_registry_->RegisterListPref(
+      kAllowedListPrefName,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedListPrefName), NotNull());
+  pref_registry_->RegisterDictionaryPref(
+      kAllowedDictPrefName,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedDictPrefName), NotNull());
+}
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+TEST_F(SyncablePrefsDatabaseTest, ShouldAllowRegisteringSyncableOSPrefs) {
+  pref_registry_->RegisterStringPref(
+      kAllowedStringPrefName, std::string(),
+      user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedStringPrefName), NotNull());
+  pref_registry_->RegisterListPref(
+      kAllowedListPrefName, user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedListPrefName), NotNull());
+  pref_registry_->RegisterDictionaryPref(
+      kAllowedDictPrefName, user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedDictPrefName), NotNull());
+}
+
+TEST_F(SyncablePrefsDatabaseTest,
+       ShouldAllowRegisteringSyncableOSPriorityPrefs) {
+  pref_registry_->RegisterStringPref(
+      kAllowedStringPrefName, std::string(),
+      user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedStringPrefName), NotNull());
+  pref_registry_->RegisterListPref(
+      kAllowedListPrefName,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedListPrefName), NotNull());
+  pref_registry_->RegisterDictionaryPref(
+      kAllowedDictPrefName,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF);
+  EXPECT_THAT(pref_service_->FindPreference(kAllowedDictPrefName), NotNull());
+}
+#endif
+using SyncablePrefsDatabaseDeathTest = SyncablePrefsDatabaseTest;
+
+TEST_F(SyncablePrefsDatabaseDeathTest, ShouldFailRegisteringIllegalPrefs) {
+  const std::string kIllegalStringPrefName = "not-allowed_string_pref";
+  const std::string kIllegalListPrefName = "not-allowed_list_pref";
+  const std::string kIllegalDictPrefName = "not-allowed_dict_pref";
+  const std::string kExpectedErrorMessageHint = "syncable prefs allowlist";
+
+  EXPECT_DCHECK_DEATH_WITH(pref_registry_->RegisterStringPref(
+                               kIllegalStringPrefName, std::string(),
+                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF),
+                           kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(pref_registry_->RegisterListPref(
+                               kIllegalListPrefName,
+                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF),
+                           kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(pref_registry_->RegisterDictionaryPref(
+                               kIllegalDictPrefName,
+                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF),
+                           kExpectedErrorMessageHint);
+}
+
+TEST_F(SyncablePrefsDatabaseDeathTest,
+       ShouldFailRegisteringIllegalPriorityPrefs) {
+  const std::string kIllegalStringPrefName = "not-allowed_string_pref";
+  const std::string kIllegalListPrefName = "not-allowed_list_pref";
+  const std::string kIllegalDictPrefName = "not-allowed_dict_pref";
+  const std::string kExpectedErrorMessageHint = "syncable prefs allowlist";
+
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterStringPref(
+          kIllegalStringPrefName, std::string(),
+          user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF),
+      kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterListPref(
+          kIllegalListPrefName,
+          user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF),
+      kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterDictionaryPref(
+          kIllegalDictPrefName,
+          user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF),
+      kExpectedErrorMessageHint);
+}
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+TEST_F(SyncablePrefsDatabaseDeathTest, ShouldFailRegisteringIllegalOSPrefs) {
+  const std::string kIllegalStringPrefName = "not-allowed_string_pref";
+  const std::string kIllegalListPrefName = "not-allowed_list_pref";
+  const std::string kIllegalDictPrefName = "not-allowed_dict_pref";
+  const std::string kExpectedErrorMessageHint = "syncable prefs allowlist";
+
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterStringPref(
+          kIllegalStringPrefName, std::string(),
+          user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF),
+      kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterListPref(
+          kIllegalListPrefName,
+          user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF),
+      kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterDictionaryPref(
+          kIllegalDictPrefName,
+          user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF),
+      kExpectedErrorMessageHint);
+}
+
+TEST_F(SyncablePrefsDatabaseDeathTest,
+       ShouldFailRegisteringIllegalOSPriorityPrefs) {
+  const std::string kIllegalStringPrefName = "not-allowed_string_pref";
+  const std::string kIllegalListPrefName = "not-allowed_list_pref";
+  const std::string kIllegalDictPrefName = "not-allowed_dict_pref";
+  const std::string kExpectedErrorMessageHint = "syncable prefs allowlist";
+
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterStringPref(
+          kIllegalStringPrefName, std::string(),
+          user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF),
+      kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterListPref(
+          kIllegalListPrefName,
+          user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF),
+      kExpectedErrorMessageHint);
+  EXPECT_DCHECK_DEATH_WITH(
+      pref_registry_->RegisterDictionaryPref(
+          kIllegalDictPrefName,
+          user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF),
+      kExpectedErrorMessageHint);
+}
+#endif
+
 }  // namespace
 
 }  // namespace sync_preferences
diff --git a/components/sync_preferences/pref_service_syncable_unittest.cc b/components/sync_preferences/pref_service_syncable_unittest.cc
index 781c2b1..e37f5bf 100644
--- a/components/sync_preferences/pref_service_syncable_unittest.cc
+++ b/components/sync_preferences/pref_service_syncable_unittest.cc
@@ -30,6 +30,7 @@
 #include "components/sync_preferences/pref_model_associator.h"
 #include "components/sync_preferences/pref_model_associator_client.h"
 #include "components/sync_preferences/pref_service_syncable_observer.h"
+#include "components/sync_preferences/syncable_prefs_database.h"
 #include "components/sync_preferences/synced_pref_observer.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -353,6 +354,13 @@
   EXPECT_THAT(prefs_.GetString(kStringPrefName), Eq(kExampleUrl0));
 }
 
+class TestSyncablePrefsDatabase : public SyncablePrefsDatabase {
+ public:
+  bool IsPreferenceSyncable(const std::string& pref_name) const override {
+    return true;
+  }
+};
+
 class TestPrefModelAssociatorClient : public PrefModelAssociatorClient {
  public:
   TestPrefModelAssociatorClient() = default;
@@ -383,6 +391,12 @@
   void SetIsDictPref(bool is_dict_pref) { is_dict_pref_ = is_dict_pref; }
 
  private:
+  const SyncablePrefsDatabase& GetSyncablePrefsDatabase() const override {
+    return syncable_prefs_database_;
+  }
+
+  TestSyncablePrefsDatabase syncable_prefs_database_;
+
   bool is_dict_pref_ = true;
 };
 
diff --git a/components/sync_preferences/syncable_prefs_database.h b/components/sync_preferences/syncable_prefs_database.h
new file mode 100644
index 0000000..9c41e164
--- /dev/null
+++ b/components/sync_preferences/syncable_prefs_database.h
@@ -0,0 +1,34 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SYNC_PREFERENCES_SYNCABLE_PREFS_DATABASE_H_
+#define COMPONENTS_SYNC_PREFERENCES_SYNCABLE_PREFS_DATABASE_H_
+
+#include <string>
+
+namespace sync_preferences {
+
+// This class provides an interface to define the list of syncable
+// preferences (and in the future, some additional metadata).
+// PrefModelAssociatorClient uses the interface to verify if a preference is
+// syncable. Platform-specific preferences should be part of individual
+// implementations of this interface.
+// TODO(crbug.com/1401271): Consider adding more information about the listed
+// preferences, for eg. distinguishing between SYNCABLE_PREF,
+// SYNCABLE_PRIORITY_PREF, SYNCABLE_OS_PREF, and SYNCABLE_OS_PRIORITY_PREF.
+class SyncablePrefsDatabase {
+ public:
+  SyncablePrefsDatabase() = default;
+  virtual ~SyncablePrefsDatabase() = default;
+  SyncablePrefsDatabase(const SyncablePrefsDatabase&) = delete;
+  SyncablePrefsDatabase& operator=(const SyncablePrefsDatabase&) = delete;
+
+  // Returns true if `pref_name` is part of the allowlist of syncable
+  // preferences.
+  virtual bool IsPreferenceSyncable(const std::string& pref_name) const = 0;
+};
+
+}  // namespace sync_preferences
+
+#endif  // COMPONENTS_SYNC_PREFERENCES_SYNCABLE_PREFS_DATABASE_H_
diff --git a/components/user_education/views/BUILD.gn b/components/user_education/views/BUILD.gn
index 57616ea..bbc3081 100644
--- a/components/user_education/views/BUILD.gn
+++ b/components/user_education/views/BUILD.gn
@@ -36,6 +36,7 @@
     "//ui/base",
     "//ui/color",
     "//ui/gfx",
+    "//ui/strings:ui_strings",
     "//ui/views",
   ]
 }
diff --git a/components/user_education/views/DEPS b/components/user_education/views/DEPS
index 53a99db..23244c2 100644
--- a/components/user_education/views/DEPS
+++ b/components/user_education/views/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+ui/strings/grit/ui_strings.h",
   "+ui/views",
   "+components/variations",
 ]
diff --git a/components/user_education/views/new_badge_label.cc b/components/user_education/views/new_badge_label.cc
index 1b3e0df..ab61782 100644
--- a/components/user_education/views/new_badge_label.cc
+++ b/components/user_education/views/new_badge_label.cc
@@ -5,10 +5,11 @@
 #include "components/user_education/views/new_badge_label.h"
 
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/text_utils.h"
+#include "ui/views/badge_painter.h"
 #include "ui/views/border.h"
-#include "ui/views/controls/menu/new_badge.h"
 #include "ui/views/metadata/type_conversion.h"
 #include "ui/views/view.h"
 #include "ui/views/view_class_properties.h"
@@ -78,7 +79,7 @@
   std::u16string accessible_name = GetText();
   if (display_new_badge_) {
     accessible_name.push_back(' ');
-    accessible_name.append(views::NewBadge::GetNewBadgeAccessibleDescription());
+    accessible_name.append(GetAccessibleDescription());
   }
   node_data->SetNameChecked(accessible_name);
 }
@@ -86,22 +87,21 @@
 gfx::Size NewBadgeLabel::CalculatePreferredSize() const {
   gfx::Size size = Label::CalculatePreferredSize();
   if (display_new_badge_)
-    size.SetToMax(views::NewBadge::GetNewBadgeSize(font_list()));
+    size.SetToMax(GetNewBadgeSize());
   return size;
 }
 
 gfx::Size NewBadgeLabel::GetMinimumSize() const {
   gfx::Size size = Label::GetMinimumSize();
   if (display_new_badge_)
-    size.SetToMax(views::NewBadge::GetNewBadgeSize(font_list()));
+    size.SetToMax(GetNewBadgeSize());
   return size;
 }
 
 int NewBadgeLabel::GetHeightForWidth(int w) const {
   int height = Label::GetHeightForWidth(w);
   if (display_new_badge_) {
-    height = std::max(height,
-                      views::NewBadge::GetNewBadgeSize(font_list()).height());
+    height = std::max(height, GetNewBadgeSize().height());
   }
   return height;
 }
@@ -119,12 +119,13 @@
   int extra_width = 0;
   if (badge_placement_ == BadgePlacement::kImmediatelyAfterText)
     extra_width = std::max(0, width() - GetPreferredSize().width());
-  const int badge_x = views::NewBadge::kNewBadgeHorizontalMargin - extra_width +
+  const int badge_x = views::BadgePainter::kBadgeHorizontalMargin -
+                      extra_width +
                       (base::i18n::IsRTL() ? width() - contents_bounds.x()
                                            : contents_bounds.right());
 
-  views::NewBadge::DrawNewBadge(canvas, this, badge_x, GetFontListY(),
-                                font_list());
+  views::BadgePainter::PaintBadge(canvas, this, badge_x, GetFontListY(),
+                                  new_badge_text_, font_list());
 }
 
 void NewBadgeLabel::UpdatePaddingForNewBadge() {
@@ -132,19 +133,19 @@
     return;
 
   // Calculate the width required for the badge plus separation from the text.
-  int width = views::NewBadge::GetNewBadgeSize(font_list()).width();
+  int width = GetNewBadgeSize().width();
   int right_padding = 0;
   if (pad_after_new_badge_) {
-    width += 2 * views::NewBadge::kNewBadgeHorizontalMargin;
-    right_padding = views::NewBadge::kNewBadgeHorizontalMargin;
+    width += 2 * views::BadgePainter::kBadgeHorizontalMargin;
+    right_padding = views::BadgePainter::kBadgeHorizontalMargin;
   } else {
-    width += views::NewBadge::kNewBadgeHorizontalMargin;
+    width += views::BadgePainter::kBadgeHorizontalMargin;
   }
 
   // Reserve adequate space above and below the label so that the badge will fit
   // vertically, and to the right to actually hold the badge.
   gfx::Insets border = gfx::AdjustVisualBorderForFont(
-      font_list(), gfx::Insets(views::NewBadge::kNewBadgeInternalPadding));
+      font_list(), gfx::Insets(views::BadgePainter::kBadgeInternalPadding));
   if (base::i18n::IsRTL()) {
     border.set_left(width);
     border.set_right(0);
@@ -160,6 +161,14 @@
               gfx::Insets::TLBR(0, 0, 0, right_padding));
 }
 
+gfx::Size NewBadgeLabel::GetNewBadgeSize() const {
+  return views::BadgePainter::GetBadgeSize(new_badge_text_, font_list());
+}
+
+std::u16string NewBadgeLabel::GetAccessibleDescription() const {
+  return l10n_util::GetStringUTF16(IDS_NEW_BADGE_SCREEN_READER_MESSAGE);
+}
+
 void NewBadgeLabel::SetBorder(std::unique_ptr<views::Border> b) {
   NOTREACHED() << "Calling SetBorder() externally is currently not allowed.";
 }
diff --git a/components/user_education/views/new_badge_label.h b/components/user_education/views/new_badge_label.h
index 117057d..47cd220 100644
--- a/components/user_education/views/new_badge_label.h
+++ b/components/user_education/views/new_badge_label.h
@@ -7,8 +7,10 @@
 
 #include <memory>
 
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/strings/grit/ui_strings.h"
+#include "ui/views/badge_painter.h"
 #include "ui/views/controls/label.h"
-#include "ui/views/controls/menu/new_badge.h"
 #include "ui/views/style/typography.h"
 
 namespace views {
@@ -60,6 +62,10 @@
   void SetBadgePlacement(BadgePlacement badge_placement);
   BadgePlacement GetBadgePlacement() const { return badge_placement_; }
 
+  // Gets the accessible description of the badge, which can be added to
+  // tooltip/screen reader text.
+  std::u16string GetAccessibleDescription() const;
+
   // Label:
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   gfx::Size CalculatePreferredSize() const override;
@@ -83,6 +89,8 @@
   // display the new badge.
   void UpdatePaddingForNewBadge();
 
+  gfx::Size GetNewBadgeSize() const;
+
   // Specifies the placement of the "New" badge when the label is wider than its
   // preferred size.
   BadgePlacement badge_placement_ = BadgePlacement::kImmediatelyAfterText;
@@ -91,6 +99,9 @@
   // "New" badge. When set to true, the space will be allocated, and
   // kInternalPaddingKey will be set so that layouts know this space is empty.
   bool pad_after_new_badge_ = true;
+
+  const std::u16string new_badge_text_ =
+      l10n_util::GetStringUTF16(IDS_NEW_BADGE);
 };
 
 }  // namespace user_education
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 50d35c0..11e2dd4 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -862,6 +862,9 @@
 
 void BrowserAccessibilityManager::DoDefaultAction(
     const BrowserAccessibility& node) {
+  DCHECK(node.node()->data().GetDefaultActionVerb() !=
+         ax::mojom::DefaultActionVerb::kNone);
+
   if (!delegate_)
     return;
 
diff --git a/content/browser/attribution_reporting/BUILD.gn b/content/browser/attribution_reporting/BUILD.gn
index c1ed47a..c5f9e3b1 100644
--- a/content/browser/attribution_reporting/BUILD.gn
+++ b/content/browser/attribution_reporting/BUILD.gn
@@ -7,6 +7,7 @@
 
 proto_library("attribution_reporting_proto") {
   sources = [ "attribution_reporting.proto" ]
+  generate_python = false
 }
 
 mojom("mojo_bindings") {
@@ -19,8 +20,8 @@
   public_deps = [
     ":mojo_bindings",
     "//components/attribution_reporting:mojom",
-    "//components/attribution_reporting:registration_mojom",
     "//components/attribution_reporting:source_type_mojom",
+    "//services/network/public/mojom:mojom_attribution",
     "//services/network/public/mojom:mojom_schemeful_site",
     "//url/mojom:url_mojom_origin",
   ]
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
index 6ecabac..fa4f4b2 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
@@ -21,7 +21,6 @@
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "content/browser/attribution_reporting/attribution_beacon_id.h"
 #include "content/browser/attribution_reporting/attribution_constants.h"
@@ -33,6 +32,7 @@
 #include "content/browser/attribution_reporting/storable_source.h"
 #include "net/base/schemeful_site.h"
 #include "net/http/http_response_headers.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/abseil-cpp/absl/types/variant.h"
 #include "third_party/blink/public/common/features.h"
@@ -491,7 +491,8 @@
 void AttributionDataHostManagerImpl::TriggerDataAvailable(
     attribution_reporting::SuitableOrigin reporting_origin,
     attribution_reporting::TriggerRegistration data,
-    absl::optional<attribution_reporting::TriggerAttestation> attestation) {
+    // TODO(crbug.com/1401347): Propagate `attestation` to storage.
+    absl::optional<network::TriggerAttestation> attestation) {
   // This is validated by the Mojo typemapping.
   DCHECK(reporting_origin.IsValid());
 
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.h b/content/browser/attribution_reporting/attribution_data_host_manager_impl.h
index fed0b4c..8e9827b 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.h
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.h
@@ -21,6 +21,7 @@
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/conversions/attribution_data_host.mojom.h"
@@ -121,8 +122,7 @@
   void TriggerDataAvailable(
       attribution_reporting::SuitableOrigin reporting_origin,
       attribution_reporting::TriggerRegistration,
-      absl::optional<attribution_reporting::TriggerAttestation> attestation)
-      override;
+      absl::optional<network::TriggerAttestation> attestation) override;
 
   void OnReceiverDisconnected();
   void OnSourceEligibleDataHostFinished(base::TimeTicks register_time);
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
index e5918b2..ef91436 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
@@ -31,10 +31,8 @@
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "content/browser/attribution_reporting/attribution_beacon_id.h"
 #include "content/browser/attribution_reporting/attribution_constants.h"
-#include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
diff --git a/content/browser/attribution_reporting/attribution_internals.mojom b/content/browser/attribution_reporting/attribution_internals.mojom
index 9ef7b56..cc8c2ef 100644
--- a/content/browser/attribution_reporting/attribution_internals.mojom
+++ b/content/browser/attribution_reporting/attribution_internals.mojom
@@ -4,7 +4,7 @@
 
 module attribution_internals.mojom;
 
-import "components/attribution_reporting/registration.mojom";
+import "services/network/public/mojom/attribution.mojom";
 import "components/attribution_reporting/source_registration_error.mojom";
 import "components/attribution_reporting/source_type.mojom";
 import "content/browser/attribution_reporting/attribution_reporting.mojom";
@@ -159,7 +159,7 @@
   // simply displayed in the UI, never inspected.
   string registration_json;
   TriggerDebugKey? cleared_debug_key;
-  attribution_reporting.mojom.TriggerAttestation? attestation;
+  network.mojom.TriggerAttestation? attestation;
 
   enum Status {
     // Shared statuses:
diff --git a/content/browser/attribution_reporting/attribution_internals_browsertest.cc b/content/browser/attribution_reporting/attribution_internals_browsertest.cc
index 0679b65..9e821d3 100644
--- a/content/browser/attribution_reporting/attribution_internals_browsertest.cc
+++ b/content/browser/attribution_reporting/attribution_internals_browsertest.cc
@@ -23,7 +23,6 @@
 #include "components/attribution_reporting/filters.h"
 #include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "content/browser/attribution_reporting/attribution_debug_report.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
@@ -49,6 +48,7 @@
 #include "content/shell/browser/shell.h"
 #include "net/base/net_errors.h"
 #include "net/base/schemeful_site.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -993,8 +993,7 @@
   ASSERT_TRUE(NavigateToURL(shell(), GURL(kAttributionInternalsUrl)));
 
   const auto create_trigger =
-      [](absl::optional<attribution_reporting::TriggerAttestation>
-             attestation) {
+      [](absl::optional<network::TriggerAttestation> attestation) {
         return AttributionTrigger(
             /*reporting_origin=*/*SuitableOrigin::Deserialize("https://r.test"),
             attribution_reporting::TriggerRegistration(
@@ -1091,12 +1090,11 @@
                          AttributionTrigger::EventLevelResult::kSuccess,
                          AttributionTrigger::AggregatableResult::kSuccess);
 
-  notify_trigger_handled(
-      create_trigger(attribution_reporting::TriggerAttestation::Create(
-          "abc", "a2ab30b9-d664-4dfc-a9db-85f9729b9a30")),
-      AttributionTrigger::EventLevelResult::kSuccess,
-      AttributionTrigger::AggregatableResult::kSuccess,
-      /*cleared_debug_key=*/123);
+  notify_trigger_handled(create_trigger(network::TriggerAttestation::Create(
+                             "abc", "a2ab30b9-d664-4dfc-a9db-85f9729b9a30")),
+                         AttributionTrigger::EventLevelResult::kSuccess,
+                         AttributionTrigger::AggregatableResult::kSuccess,
+                         /*cleared_debug_key=*/123);
 
   // TODO(apaseltiner): Add tests for other statuses.
 
diff --git a/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc b/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc
index d0f3b03ab..c7f1a757 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc
@@ -22,10 +22,10 @@
 
 // Ensure that both version numbers are updated together to prevent crashes on
 // downgrades as in crbug.com/1413728.
-void SetVersionNumbers(sql::MetaTable* meta_table, int version) {
+[[nodiscard]] bool SetVersionNumbers(sql::MetaTable* meta_table, int version) {
   DCHECK(meta_table);
-  meta_table->SetVersionNumber(version);
-  meta_table->SetCompatibleVersionNumber(version);
+  return meta_table->SetVersionNumber(version) &&
+         meta_table->SetCompatibleVersionNumber(version);
 }
 
 // Wrap each migration in its own transaction. This results in smaller
@@ -54,8 +54,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 36);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 36) && transaction.Commit();
 }
 
 bool MigrateToVersion37(sql::Database* db, sql::MetaTable* meta_table) {
@@ -99,8 +98,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 37);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 37) && transaction.Commit();
 }
 
 bool MigrateToVersion38(sql::Database* db, sql::MetaTable* meta_table) {
@@ -197,8 +195,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 38);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 38) && transaction.Commit();
 }
 
 bool MigrateToVersion39(sql::Database* db, sql::MetaTable* meta_table) {
@@ -282,8 +279,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 39);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 39) && transaction.Commit();
 }
 
 bool MigrateToVersion40(sql::Database* db, sql::MetaTable* meta_table) {
@@ -329,8 +325,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 40);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 40) && transaction.Commit();
 }
 
 bool MigrateToVersion41(sql::Database* db, sql::MetaTable* meta_table) {
@@ -346,8 +341,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 41);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 41) && transaction.Commit();
 }
 
 bool MigrateToVersion42(sql::Database* db, sql::MetaTable* meta_table) {
@@ -377,8 +371,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 42);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 42) && transaction.Commit();
 }
 
 bool MigrateToVersion43(sql::Database* db, sql::MetaTable* meta_table) {
@@ -403,8 +396,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 43);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 43) && transaction.Commit();
 }
 
 bool MigrateToVersion44(sql::Database* db, sql::MetaTable* meta_table) {
@@ -534,8 +526,7 @@
     }
   }
 
-  SetVersionNumbers(meta_table, 44);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 44) && transaction.Commit();
 }
 
 bool MigrateToVersion45(sql::Database* db, sql::MetaTable* meta_table) {
@@ -551,8 +542,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 45);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 45) && transaction.Commit();
 }
 
 bool MigrateToVersion46(sql::Database* db, sql::MetaTable* meta_table) {
@@ -565,8 +555,7 @@
     return false;
   }
 
-  SetVersionNumbers(meta_table, 46);
-  return transaction.Commit();
+  return SetVersionNumbers(meta_table, 46) && transaction.Commit();
 }
 
 }  // namespace
diff --git a/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc b/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc
index f3af025a..de0e28cb 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc
@@ -24,13 +24,13 @@
 #include "components/aggregation_service/aggregation_service.mojom.h"
 #include "components/attribution_reporting/filters.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "content/browser/attribution_reporting/aggregatable_histogram_contribution.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_reporting.pb.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/storable_source.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "sql/database.h"
 #include "sql/meta_table.h"
 #include "sql/statement.h"
@@ -335,7 +335,7 @@
                               .Build();
   storage()->StoreSource(source);
 
-  auto trigger_attestation = attribution_reporting::TriggerAttestation::Create(
+  auto trigger_attestation = network::TriggerAttestation::Create(
       /*token=*/"attestation-token", /*aggregatable_report_id=*/
       "55865da3-fb0e-4b71-965e-64fc4bf0a323");
   AttributionTrigger trigger = DefaultAggregatableTriggerBuilder()
diff --git a/content/browser/attribution_reporting/attribution_test_utils.cc b/content/browser/attribution_reporting/attribution_test_utils.cc
index 2f00e69..8312faf 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.cc
+++ b/content/browser/attribution_reporting/attribution_test_utils.cc
@@ -29,7 +29,6 @@
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "content/browser/attribution_reporting/attribution_config.h"
 #include "content/browser/attribution_reporting/attribution_data_host_manager.h"
@@ -42,6 +41,8 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "net/base/net_errors.h"
 #include "net/base/schemeful_site.h"
+#include "services/network/public/cpp/trigger_attestation.h"
+#include "services/network/public/cpp/trigger_attestation_test_utils.h"
 #include "third_party/abseil-cpp/absl/numeric/int128.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -123,7 +124,7 @@
 void MockDataHost::TriggerDataAvailable(
     attribution_reporting::SuitableOrigin reporting_origin,
     attribution_reporting::TriggerRegistration data,
-    absl::optional<attribution_reporting::TriggerAttestation> attestation) {
+    absl::optional<network::TriggerAttestation> attestation) {
   trigger_data_.push_back(std::move(data));
   if (trigger_data_.size() < min_trigger_data_count_) {
     return;
@@ -725,7 +726,7 @@
 }
 
 TriggerBuilder& TriggerBuilder::SetAttestation(
-    absl::optional<attribution_reporting::TriggerAttestation> attestation) {
+    absl::optional<network::TriggerAttestation> attestation) {
   attestation_ = std::move(attestation);
   return *this;
 }
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h
index 34be662..b3f56149 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.h
+++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -31,7 +31,6 @@
 #include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "components/attribution_reporting/suitable_origin.h"
 #include "components/attribution_reporting/test_utils.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "content/browser/attribution_reporting/aggregatable_histogram_contribution.h"
 #include "content/browser/attribution_reporting/attribution_config.h"
@@ -74,12 +73,15 @@
 class Origin;
 }  // namespace url
 
+namespace network {
+class TriggerAttestation;
+}  // namespace network
+
 namespace content {
 
 class AttributionDataHostManager;
 class AttributionObserver;
 class AttributionTrigger;
-class TriggerAttestation;
 
 enum class RateLimitResult : int;
 
@@ -160,8 +162,7 @@
   void TriggerDataAvailable(
       attribution_reporting::SuitableOrigin reporting_origin,
       attribution_reporting::TriggerRegistration,
-      absl::optional<attribution_reporting::TriggerAttestation> attestation)
-      override;
+      absl::optional<network::TriggerAttestation> attestation) override;
 
   size_t min_source_data_count_ = 0;
   std::vector<attribution_reporting::SourceRegistration> source_data_;
@@ -558,7 +559,7 @@
       ::aggregation_service::mojom::AggregationCoordinator);
 
   TriggerBuilder& SetAttestation(
-      absl::optional<attribution_reporting::TriggerAttestation> attestation);
+      absl::optional<network::TriggerAttestation> attestation);
 
   AttributionTrigger Build(bool generate_event_trigger_data = true) const;
 
@@ -579,7 +580,7 @@
   ::aggregation_service::mojom::AggregationCoordinator
       aggregation_coordinator_ =
           ::aggregation_service::mojom::AggregationCoordinator::kDefault;
-  absl::optional<attribution_reporting::TriggerAttestation> attestation_;
+  absl::optional<network::TriggerAttestation> attestation_;
 };
 
 // Helper class to construct an `AttributionInfo` for tests using default data.
@@ -1025,8 +1026,7 @@
       registration = ::testing::_;
   ::testing::Matcher<const attribution_reporting::SuitableOrigin&>
       destination_origin = ::testing::_;
-  ::testing::Matcher<
-      const absl::optional<attribution_reporting::TriggerAttestation>&>
+  ::testing::Matcher<const absl::optional<network::TriggerAttestation>&>
       attestation = ::testing::_;
 
   ::testing::Matcher<bool> is_within_fenced_frame = ::testing::_;
diff --git a/content/browser/attribution_reporting/attribution_trigger.cc b/content/browser/attribution_reporting/attribution_trigger.cc
index 7fbc37f7..b1a1948 100644
--- a/content/browser/attribution_reporting/attribution_trigger.cc
+++ b/content/browser/attribution_reporting/attribution_trigger.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace content {
@@ -16,7 +16,7 @@
     attribution_reporting::SuitableOrigin reporting_origin,
     attribution_reporting::TriggerRegistration registration,
     attribution_reporting::SuitableOrigin destination_origin,
-    absl::optional<attribution_reporting::TriggerAttestation> attestation,
+    absl::optional<network::TriggerAttestation> attestation,
     bool is_within_fenced_frame)
     : reporting_origin_(std::move(reporting_origin)),
       registration_(std::move(registration)),
diff --git a/content/browser/attribution_reporting/attribution_trigger.h b/content/browser/attribution_reporting/attribution_trigger.h
index 11d9fb7..f2374cd9 100644
--- a/content/browser/attribution_reporting/attribution_trigger.h
+++ b/content/browser/attribution_reporting/attribution_trigger.h
@@ -6,9 +6,9 @@
 #define CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_TRIGGER_H_
 
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "content/common/content_export.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace content {
@@ -67,12 +67,11 @@
     kMaxValue = kReportWindowPassed,
   };
 
-  AttributionTrigger(
-      attribution_reporting::SuitableOrigin reporting_origin,
-      attribution_reporting::TriggerRegistration registration,
-      attribution_reporting::SuitableOrigin destination_origin,
-      absl::optional<attribution_reporting::TriggerAttestation> attestation,
-      bool is_within_fenced_frame);
+  AttributionTrigger(attribution_reporting::SuitableOrigin reporting_origin,
+                     attribution_reporting::TriggerRegistration registration,
+                     attribution_reporting::SuitableOrigin destination_origin,
+                     absl::optional<network::TriggerAttestation> attestation,
+                     bool is_within_fenced_frame);
 
   AttributionTrigger(const AttributionTrigger&);
   AttributionTrigger& operator=(const AttributionTrigger&);
@@ -98,8 +97,7 @@
 
   bool is_within_fenced_frame() const { return is_within_fenced_frame_; }
 
-  const absl::optional<attribution_reporting::TriggerAttestation>& attestation()
-      const {
+  const absl::optional<network::TriggerAttestation>& attestation() const {
     return attestation_;
   }
 
@@ -112,7 +110,7 @@
   attribution_reporting::SuitableOrigin destination_origin_;
 
   // Optional token attesting to the veracity of the trigger.
-  absl::optional<attribution_reporting::TriggerAttestation> attestation_;
+  absl::optional<network::TriggerAttestation> attestation_;
 
   // Whether the trigger is registered within a fenced frame tree.
   bool is_within_fenced_frame_;
diff --git a/content/browser/devtools/devtools_instrumentation.cc b/content/browser/devtools/devtools_instrumentation.cc
index 281e9de..b9bfba9e 100644
--- a/content/browser/devtools/devtools_instrumentation.cc
+++ b/content/browser/devtools/devtools_instrumentation.cc
@@ -60,6 +60,8 @@
 
 namespace {
 
+const char kPrivacySandboxExtensionsAPI[] = "PrivacySandboxExtensionsAPI";
+
 template <typename Handler, typename... MethodArgs, typename... Args>
 void DispatchToAgents(DevToolsAgentHostImpl* host,
                       void (Handler::*method)(MethodArgs...),
@@ -283,12 +285,11 @@
   return issue;
 }
 
-protocol::Audits::DeprecationIssueType DeprecationIssueTypeToProtocol(
+const char* DeprecationIssueTypeToProtocol(
     blink::mojom::DeprecationIssueType error_type) {
   switch (error_type) {
     case blink::mojom::DeprecationIssueType::kPrivacySandboxExtensionsAPI:
-      return protocol::Audits::DeprecationIssueTypeEnum::
-          PrivacySandboxExtensionsAPI;
+      return kPrivacySandboxExtensionsAPI;
   }
 }
 
diff --git a/content/browser/devtools/devtools_trust_token_browsertest.cc b/content/browser/devtools/devtools_trust_token_browsertest.cc
index d7c9436..a8554c88 100644
--- a/content/browser/devtools/devtools_trust_token_browsertest.cc
+++ b/content/browser/devtools/devtools_trust_token_browsertest.cc
@@ -269,4 +269,40 @@
   EXPECT_EQ(GetTrustTokensViaProtocol().size(), 1ul);
 }
 
+IN_PROC_BROWSER_TEST_F(DevToolsTrustTokenBrowsertest, ClearTrustTokens) {
+  ProvideRequestHandlerKeyCommitmentsToNetworkService({"a.test"});
+
+  // 1) Navigate to a test site.
+  GURL start_url = server_.GetURL("a.test", "/title1.html");
+  ASSERT_TRUE(NavigateToURL(shell(), start_url));
+
+  // 2) Open DevTools.
+  Attach();
+
+  // 3) Request some Trust Tokens.
+  std::string command = R"(
+  (async () => {
+    await fetch('/issue', {trustToken: {version: 1,
+                                        operation: 'token-request'}});
+    return 'Success'; })(); )";
+
+  // We use EvalJs here, not ExecJs, because EvalJs waits for promises to
+  // resolve.
+  EXPECT_EQ("Success", EvalJs(shell(), command));
+
+  // 4) Call Storage.getTrustTokens and expect a Trust Token to be there.
+  AssertTrustTokensViaProtocol(IssuanceOriginFromHost("a.test"), 10);
+
+  // 5) Call Storage.clearTrustTokens
+  base::Value::Dict params;
+  params.Set("issuerOrigin", IssuanceOriginFromHost("a.test"));
+  auto* result = SendCommandSync("Storage.clearTrustTokens", std::move(params));
+
+  EXPECT_THAT(result->FindBool("didDeleteTokens"), ::testing::Optional(true));
+
+  // 6) Call Storage.getTrustTokens and expect no Trust Tokens to be there.
+  //    Note that we still get an entry for our 'issuerOrigin', but the actual
+  //    Token count must be 0.
+  AssertTrustTokensViaProtocol(IssuanceOriginFromHost("a.test"), 0);
+}
 }  // namespace content
diff --git a/content/browser/devtools/protocol/storage_handler.cc b/content/browser/devtools/protocol/storage_handler.cc
index 28af212..0050eb97 100644
--- a/content/browser/devtools/protocol/storage_handler.cc
+++ b/content/browser/devtools/protocol/storage_handler.cc
@@ -779,6 +779,45 @@
       base::BindOnce(&SendTrustTokens, std::move(callback)));
 }
 
+namespace {
+
+void SendClearTrustTokensStatus(
+    std::unique_ptr<StorageHandler::ClearTrustTokensCallback> callback,
+    network::mojom::DeleteStoredTrustTokensStatus status) {
+  switch (status) {
+    case network::mojom::DeleteStoredTrustTokensStatus::kSuccessTokensDeleted:
+      callback->sendSuccess(/* didDeleteTokens */ true);
+      break;
+    case network::mojom::DeleteStoredTrustTokensStatus::kSuccessNoTokensDeleted:
+      callback->sendSuccess(/* didDeleteTokens */ false);
+      break;
+    case network::mojom::DeleteStoredTrustTokensStatus::kFailureFeatureDisabled:
+      callback->sendFailure(
+          Response::ServerError("The Trust Tokens feature is disabled."));
+      break;
+    case network::mojom::DeleteStoredTrustTokensStatus::kFailureInvalidOrigin:
+      callback->sendFailure(
+          Response::InvalidParams("The provided issuerOrigin is invalid. It "
+                                  "must be a HTTP/HTTPS trustworthy origin."));
+      break;
+  }
+}
+
+}  // namespace
+
+void StorageHandler::ClearTrustTokens(
+    const std::string& issuerOrigin,
+    std::unique_ptr<ClearTrustTokensCallback> callback) {
+  if (!storage_partition_) {
+    callback->sendFailure(Response::InternalError());
+    return;
+  }
+
+  storage_partition_->GetNetworkContext()->DeleteStoredTrustTokens(
+      url::Origin::Create(GURL(issuerOrigin)),
+      base::BindOnce(&SendClearTrustTokensStatus, std::move(callback)));
+}
+
 void StorageHandler::OnInterestGroupAccessed(
     const base::Time& access_time,
     InterestGroupManagerImpl::InterestGroupObserver::AccessType type,
diff --git a/content/browser/devtools/protocol/storage_handler.h b/content/browser/devtools/protocol/storage_handler.h
index e1e6e5f..5fa6df9 100644
--- a/content/browser/devtools/protocol/storage_handler.h
+++ b/content/browser/devtools/protocol/storage_handler.h
@@ -95,6 +95,9 @@
 
   void GetTrustTokens(
       std::unique_ptr<GetTrustTokensCallback> callback) override;
+  void ClearTrustTokens(
+      const std::string& issuerOrigin,
+      std::unique_ptr<ClearTrustTokensCallback> callback) override;
 
   void GetInterestGroupDetails(
       const std::string& owner_origin_string,
diff --git a/content/browser/devtools/protocol_config.json b/content/browser/devtools/protocol_config.json
index 0b2ed6fd..42b92b3 100644
--- a/content/browser/devtools/protocol_config.json
+++ b/content/browser/devtools/protocol_config.json
@@ -91,7 +91,7 @@
             },
             {
                 "domain": "Storage",
-              "async": ["getUsageAndQuota", "clearDataForOrigin", "clearDataForStorageKey", "getCookies", "setCookies", "clearCookies", "overrideQuotaForOrigin", "getTrustTokens", "getInterestGroupDetails", "getSharedStorageMetadata", "getSharedStorageEntries", "setSharedStorageEntry", "deleteSharedStorageEntry", "clearSharedStorageEntries", "resetSharedStorageBudget"]
+              "async": ["getUsageAndQuota", "clearDataForOrigin", "clearDataForStorageKey", "getCookies", "setCookies", "clearCookies", "overrideQuotaForOrigin", "getTrustTokens", "clearTrustTokens", "getInterestGroupDetails", "getSharedStorageMetadata", "getSharedStorageEntries", "setSharedStorageEntry", "deleteSharedStorageEntry", "clearSharedStorageEntries", "resetSharedStorageBudget"]
             },
             {
                 "domain": "SystemInfo",
diff --git a/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc b/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
index 0821113..f902c308 100644
--- a/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
+++ b/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
@@ -422,21 +422,6 @@
         localAddress: '127.0.0.1',
       }, {
         data: (new TextEncoder()).encode("meow"),
-        remoteAddress: 'direct-sockets.com',
-        remotePort: 53,
-      })
-    )";
-    ASSERT_THAT(
-        EvalJs(shell(), script).ExtractString(),
-        testing::HasSubstr("UDPMessage: 'remoteAddress' must be a valid IP"));
-  }
-
-  {
-    const std::string script = R"(
-      testUdpMessageConfiguration({
-        localAddress: '127.0.0.1',
-      }, {
-        data: (new TextEncoder()).encode("meow"),
       })
     )";
     ASSERT_THAT(
diff --git a/content/browser/fenced_frame/fenced_frame_reporter.cc b/content/browser/fenced_frame/fenced_frame_reporter.cc
index 95be41ae3..26e2545 100644
--- a/content/browser/fenced_frame/fenced_frame_reporter.cc
+++ b/content/browser/fenced_frame/fenced_frame_reporter.cc
@@ -267,4 +267,17 @@
   automatic_beacon_destination_ = destination;
 }
 
+base::flat_map<blink::FencedFrame::ReportingDestination,
+               FencedFrameReporter::ReportingUrlMap>
+FencedFrameReporter::GetAdBeaconMapForTesting() {
+  base::flat_map<blink::FencedFrame::ReportingDestination, ReportingUrlMap> out;
+  for (const auto& reporting_metadata : reporting_metadata_) {
+    if (reporting_metadata.second.reporting_url_map) {
+      out.emplace(reporting_metadata.first,
+                  *reporting_metadata.second.reporting_url_map);
+    }
+  }
+  return out;
+}
+
 }  // namespace content
diff --git a/content/browser/fenced_frame/fenced_frame_reporter.h b/content/browser/fenced_frame/fenced_frame_reporter.h
index 4f579d07..9c5578d 100644
--- a/content/browser/fenced_frame/fenced_frame_reporter.h
+++ b/content/browser/fenced_frame/fenced_frame_reporter.h
@@ -102,6 +102,13 @@
       const std::string& event_data,
       const std::vector<blink::FencedFrame::ReportingDestination>& destination);
 
+  // Returns a copy of the internal reporting metadata, so it can be validated
+  // in tests. Only includes maps for which maps have been received - i.e., if
+  // wait for OnUrlMappingReady() to be invoked for a reporting destination, it
+  // is not included in the returned map.
+  base::flat_map<blink::FencedFrame::ReportingDestination, ReportingUrlMap>
+  GetAdBeaconMapForTesting();
+
  private:
   friend class base::RefCounted<FencedFrameReporter>;
   friend class FencedFrameURLMappingTestPeer;
diff --git a/content/browser/first_party_sets/database/first_party_sets_database.cc b/content/browser/first_party_sets/database/first_party_sets_database.cc
index ee3e9e9..14771ce 100644
--- a/content/browser/first_party_sets/database/first_party_sets_database.cc
+++ b/content/browser/first_party_sets/database/first_party_sets_database.cc
@@ -836,9 +836,8 @@
   if (!db_->Execute(kRenamePolicyConfigurationsTableSql))
     return false;
 
-  meta_table_.SetVersionNumber(3);
-  meta_table_.SetCompatibleVersionNumber(3);
-  return true;
+  return meta_table_.SetVersionNumber(3) &&
+         meta_table_.SetCompatibleVersionNumber(3);
 }
 
 bool FirstPartySetsDatabase::MigrateToVersion4() {
@@ -862,20 +861,15 @@
                      "FROM manual_sets") &&
                  db_->Execute("DROP TABLE manual_sets");
 
-  if (!success)
-    return false;
-
-  meta_table_.SetVersionNumber(4);
-  meta_table_.SetCompatibleVersionNumber(4);
-  return true;
+  return success && meta_table_.SetVersionNumber(4) &&
+         meta_table_.SetCompatibleVersionNumber(4);
 }
 
 bool FirstPartySetsDatabase::MigrateToVersion5() {
   DCHECK(db_->HasActiveTransactions());
   // Only updates the versions in the meta table for fixing crbug.com/1409117.
-  meta_table_.SetVersionNumber(5);
-  meta_table_.SetCompatibleVersionNumber(5);
-  return true;
+  return meta_table_.SetVersionNumber(5) &&
+         meta_table_.SetCompatibleVersionNumber(5);
 }
 
 void FirstPartySetsDatabase::IncreaseRunCount() {
diff --git a/content/browser/interest_group/ad_auction_service_impl.cc b/content/browser/interest_group/ad_auction_service_impl.cc
index ca536fd..5ee42a1a0 100644
--- a/content/browser/interest_group/ad_auction_service_impl.cc
+++ b/content/browser/interest_group/ad_auction_service_impl.cc
@@ -628,14 +628,12 @@
       render_frame_host()
           .GetStoragePartition()
           ->GetURLLoaderFactoryForBrowserProcess();
-  scoped_refptr<FencedFrameReporter> fenced_frame_reporter =
-      FencedFrameReporter::CreateForFledge(url_loader_factory);
 
   blink::FencedFrame::RedactedFencedFrameConfig config =
       fenced_frame_urls_map.AssignFencedFrameURLAndInterestGroupInfo(
           urn_uuid, *render_url, std::move(ad_auction_data),
           reporter->OnNavigateToWinningAdCallback(), ad_component_urls,
-          fenced_frame_reporter);
+          reporter->fenced_frame_reporter());
   std::move(callback).Run(/*manually_aborted=*/false, std::move(config));
 
   // Start the InterestGroupAuctionReporter. It will run reporting scripts, but
@@ -646,8 +644,7 @@
   reporters_.emplace_front(std::move(reporter));
   reporters_.front()->Start(
       base::BindOnce(&AdAuctionServiceImpl::OnReporterComplete,
-                     base::Unretained(this), reporters_.begin(),
-                     std::move(urn_uuid), std::move(fenced_frame_reporter)));
+                     base::Unretained(this), reporters_.begin()));
   if (auction_result_metrics) {
     auction_result_metrics->ReportAuctionResult(
         AdAuctionResultMetrics::AuctionResult::kSucceeded);
@@ -655,9 +652,7 @@
 }
 
 void AdAuctionServiceImpl::OnReporterComplete(
-    ReporterList::iterator reporter_it,
-    GURL urn_uuid,
-    scoped_refptr<FencedFrameReporter> fenced_frame_reporter) {
+    ReporterList::iterator reporter_it) {
   // Forward debug information to devtools.
   //
   // TODO(https://crbug.com/1394777): Ideally this will share code with the
@@ -669,7 +664,6 @@
         base::StrCat({"Worklet error: ", error}));
   }
 
-  auto ad_beacon_map = reporter->TakeAdBeaconMap();
   auto private_aggregation_requests_reserved =
       reporter->TakeReservedPrivateAggregationRequests();
   // TODO(crbug.com/1410340): Log non-reserved private aggregation requests as
@@ -690,16 +684,6 @@
   SendPrivateAggregationRequests(
       private_aggregation_manager_, main_frame_origin_,
       std::move(private_aggregation_requests_reserved));
-
-  // Pass reporting map to the FencedFrameReporter.
-  // TODO(mmenke): move this into InterestGroupReporter.
-  for (auto destination :
-       {blink::FencedFrame::ReportingDestination::kBuyer,
-        blink::FencedFrame::ReportingDestination::kSeller,
-        blink::FencedFrame::ReportingDestination::kComponentSeller}) {
-    fenced_frame_reporter->OnUrlMappingReady(
-        destination, std::move(ad_beacon_map.metadata[destination]));
-  }
 }
 
 void AdAuctionServiceImpl::MaybeLogPrivateAggregationFeature(
diff --git a/content/browser/interest_group/ad_auction_service_impl.h b/content/browser/interest_group/ad_auction_service_impl.h
index aacbd17..112ddae6 100644
--- a/content/browser/interest_group/ad_auction_service_impl.h
+++ b/content/browser/interest_group/ad_auction_service_impl.h
@@ -13,7 +13,6 @@
 #include "base/containers/unique_ptr_adapters.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
-#include "content/browser/fenced_frame/fenced_frame_reporter.h"
 #include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
 #include "content/browser/interest_group/auction_runner.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
@@ -136,10 +135,7 @@
       std::vector<std::string> errors,
       std::unique_ptr<InterestGroupAuctionReporter> reporter);
 
-  void OnReporterComplete(
-      ReporterList::iterator reporter_it,
-      GURL urn_uuid,
-      scoped_refptr<FencedFrameReporter> fenced_frame_reporter);
+  void OnReporterComplete(ReporterList::iterator reporter_it);
 
   // Calls LogWebFeatureForCurrentPage() for the frame to inform it of FLEDGE
   // private aggregation API usage, if `private_aggregation_requests` is
diff --git a/content/browser/interest_group/auction_runner_unittest.cc b/content/browser/interest_group/auction_runner_unittest.cc
index 6b696fd..d0bbcbaa 100644
--- a/content/browser/interest_group/auction_runner_unittest.cc
+++ b/content/browser/interest_group/auction_runner_unittest.cc
@@ -30,6 +30,7 @@
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "content/browser/fenced_frame/fenced_frame_reporter.h"
 #include "content/browser/interest_group/auction_process_manager.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
 #include "content/browser/interest_group/debuggable_auction_worklet.h"
@@ -1135,7 +1136,9 @@
     std::vector<GURL> report_urls;
     std::vector<GURL> debug_loss_report_urls;
     std::vector<GURL> debug_win_report_urls;
-    ReportingMetadata ad_beacon_map;
+    base::flat_map<blink::FencedFrame::ReportingDestination,
+                   FencedFrameReporter::ReportingUrlMap>
+        ad_beacon_map;
     std::map<url::Origin, PrivateAggregationRequests>
         private_aggregation_requests_reserved;
     std::map<std::string, PrivateAggregationRequests>
@@ -1456,7 +1459,7 @@
     result_.errors = std::move(errors);
     result_.debug_loss_report_urls.clear();
     result_.debug_win_report_urls.clear();
-    result_.ad_beacon_map = ReportingMetadata();
+    result_.ad_beacon_map.clear();
     result_.interest_groups_that_bid.clear();
     result_.private_aggregation_requests_reserved =
         std::move(private_aggregation_requests_reserved);
@@ -1502,7 +1505,8 @@
     DCHECK(reporter_);
     result_.report_urls = interest_group_manager_->TakeReportUrlsOfType(
         InterestGroupManagerImpl::ReportType::kSendReportTo);
-    result_.ad_beacon_map = reporter_->TakeAdBeaconMap();
+    result_.ad_beacon_map =
+        reporter_->fenced_frame_reporter()->GetAdBeaconMapForTesting();
     result_.debug_loss_report_urls =
         interest_group_manager_->TakeReportUrlsOfType(
             InterestGroupManagerImpl::ReportType::kDebugLoss);
@@ -1878,6 +1882,15 @@
             bid_from_component_auction_wins, report_post_auction_signals));
   }
 
+  // This is what an "empty" FLEDGE ad beacon map looks like.
+  const base::flat_map<blink::FencedFrame::ReportingDestination,
+                       FencedFrameReporter::ReportingUrlMap>
+      kEmptyAdBeaconMap = {
+          {blink::FencedFrame::ReportingDestination::kSeller, {}},
+          {blink::FencedFrame::ReportingDestination::kComponentSeller, {}},
+          {blink::FencedFrame::ReportingDestination::kBuyer, {}},
+      };
+
   bool use_promise_for_seller_signals_ = false;
   bool use_promise_for_auction_signals_ = false;
   bool use_promise_for_per_buyer_signals_ = false;
@@ -1936,7 +1949,9 @@
 
   network::TestURLLoaderFactory url_loader_factory_;
 
-  // ScopedURLLoaderFactory used for reports. Reports are short-circuited by the
+  // ScopedURLLoaderFactory used for reports. The FencedFrameReporter is never
+  // told to send any reports in these tests, and reports sent directly through
+  // the InterestGroupManager are short-circuited by the
   // TestInterestGroupManagerImpl before they make it over the network, so this
   // is only used for equality checks around making sure the right factory is
   // passed to it.
@@ -2351,11 +2366,13 @@
           ReportWinUrl(/*bid=*/2, /*highest_scoring_other_bid=*/1,
                        /*made_highest_scoring_other_bid=*/false)));
   EXPECT_THAT(
-      res.ad_beacon_map.metadata,
+      res.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/4")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -2547,12 +2564,14 @@
                     GURL("https://reporting.example.com/2"),
                     GURL("https://buyer-reporting.example.com/2")));
     EXPECT_THAT(
-        result_.ad_beacon_map.metadata,
+        result_.ad_beacon_map,
         testing::UnorderedElementsAre(
             testing::Pair(
                 ReportingDestination::kSeller,
                 testing::ElementsAre(testing::Pair(
                     "click", GURL("https://reporting.example.com/4")))),
+            testing::Pair(ReportingDestination::kComponentSeller,
+                          testing::ElementsAre()),
             testing::Pair(
                 ReportingDestination::kBuyer,
                 testing::ElementsAre(testing::Pair(
@@ -2635,11 +2654,13 @@
                   GURL("https://reporting.example.com/2"),
                   GURL("https://buyer-reporting.example.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/4")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -2716,11 +2737,13 @@
                   GURL("https://reporting.example.com/2"),
                   GURL("https://buyer-reporting.example.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/4")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -2770,7 +2793,7 @@
           ReportWinUrl(/*bid=*/2, /*highest_scoring_other_bid=*/0,
                        /*made_highest_scoring_other_bid=*/false)));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
@@ -2951,7 +2974,7 @@
                   GURL("https://component.seller2.test/33"),
                   GURL("https://buyer-reporting.example.com/3")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(
               ReportingDestination::kSeller,
@@ -3088,7 +3111,7 @@
           ReportWinUrl(/*bid=*/1, /*highest_scoring_other_bid=*/2,
                        /*made_highest_scoring_other_bid=*/false)));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
@@ -3224,7 +3247,7 @@
                   GURL("https://component.seller1.test/true"),
                   GURL("https://adstuff.publisher1.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(
               ReportingDestination::kSeller,
@@ -3338,7 +3361,7 @@
                   GURL("https://component.seller1.test/2_3"),
                   GURL("https://adstuff.publisher1.com/3")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(
               ReportingDestination::kSeller,
@@ -3371,8 +3394,6 @@
   EXPECT_FALSE(result_.winning_group_id);
   EXPECT_FALSE(result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_THAT(result_.interest_groups_that_bid,
               testing::UnorderedElementsAre());
@@ -3403,8 +3424,6 @@
   EXPECT_FALSE(result_.winning_group_id);
   EXPECT_FALSE(result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_THAT(result_.interest_groups_that_bid,
               testing::UnorderedElementsAre());
@@ -3445,7 +3464,7 @@
                   GURL("https://component1-report.test/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
@@ -3503,8 +3522,6 @@
   EXPECT_FALSE(result_.winning_group_id);
   EXPECT_FALSE(result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
   EXPECT_THAT(result_.interest_groups_that_bid,
@@ -3550,11 +3567,13 @@
                   GURL("https://reporting.example.com/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/2")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -3610,8 +3629,6 @@
   EXPECT_FALSE(result_.winning_group_id);
   EXPECT_FALSE(result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
   EXPECT_THAT(result_.interest_groups_that_bid,
@@ -3648,7 +3665,7 @@
                   GURL("https://component1-report.test/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
@@ -3766,11 +3783,13 @@
                   GURL("https://reporting.example.com/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/2")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -3841,7 +3860,7 @@
                   GURL("https://component1-report.test/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
@@ -3923,11 +3942,13 @@
                   GURL("https://reporting.example.com/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/2")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -3986,8 +4007,6 @@
   EXPECT_FALSE(res.winning_group_id);
   EXPECT_FALSE(res.ad_url);
   EXPECT_TRUE(res.ad_component_urls.empty());
-  EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(res.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(res.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(res.private_aggregation_requests_non_reserved.empty());
   EXPECT_THAT(res.interest_groups_that_bid, testing::UnorderedElementsAre());
@@ -4028,8 +4047,6 @@
   EXPECT_FALSE(res.winning_group_id);
   EXPECT_FALSE(res.ad_url);
   EXPECT_TRUE(res.ad_component_urls.empty());
-  EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(res.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(res.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(res.private_aggregation_requests_non_reserved.empty());
   EXPECT_THAT(res.interest_groups_that_bid, testing::UnorderedElementsAre());
@@ -4078,8 +4095,6 @@
   EXPECT_FALSE(res.winning_group_id);
   EXPECT_FALSE(res.ad_url);
   EXPECT_TRUE(res.ad_component_urls.empty());
-  EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(res.ad_beacon_map.metadata.empty());
   EXPECT_THAT(
       result_.private_aggregation_requests_reserved,
       testing::UnorderedElementsAre(
@@ -4139,11 +4154,13 @@
                   GURL("https://reporting.example.com/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/2")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -4190,8 +4207,6 @@
   EXPECT_FALSE(res.winning_group_id);
   EXPECT_FALSE(res.ad_url);
   EXPECT_TRUE(res.ad_component_urls.empty());
-  EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(res.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(res.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(res.private_aggregation_requests_non_reserved.empty());
 
@@ -4239,11 +4254,13 @@
                   GURL("https://reporting.example.com/2"),
                   GURL("https://buyer-reporting.example.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/4")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -4314,11 +4331,13 @@
                   GURL("https://reporting.example.com/2"),
                   GURL("https://buyer-reporting.example.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/4")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -4401,11 +4420,15 @@
   EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre(GURL(
                                    "https://buyer-reporting.example.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
-      testing::UnorderedElementsAre(testing::Pair(
-          ReportingDestination::kBuyer,
-          testing::ElementsAre(testing::Pair(
-              "click", GURL("https://buyer-reporting.example.com/4"))))));
+      result_.ad_beacon_map,
+      testing::UnorderedElementsAre(
+          testing::Pair(ReportingDestination::kSeller, testing::ElementsAre()),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
+          testing::Pair(
+              ReportingDestination::kBuyer,
+              testing::ElementsAre(testing::Pair(
+                  "click", GURL("https://buyer-reporting.example.com/4"))))));
   EXPECT_THAT(
       result_.private_aggregation_requests_reserved,
       testing::UnorderedElementsAre(
@@ -4475,11 +4498,15 @@
             res.ad_component_urls);
   EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre(
                                    GURL("https://reporting.example.com/2")));
-  EXPECT_THAT(result_.ad_beacon_map.metadata,
-              testing::UnorderedElementsAre(testing::Pair(
-                  ReportingDestination::kSeller,
-                  testing::ElementsAre(testing::Pair(
-                      "click", GURL("https://reporting.example.com/4"))))));
+  EXPECT_THAT(
+      result_.ad_beacon_map,
+      testing::UnorderedElementsAre(
+          testing::Pair(ReportingDestination::kSeller,
+                        testing::ElementsAre(testing::Pair(
+                            "click", GURL("https://reporting.example.com/4")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
+          testing::Pair(ReportingDestination::kBuyer, testing::ElementsAre())));
   EXPECT_THAT(
       result_.private_aggregation_requests_reserved,
       testing::UnorderedElementsAre(
@@ -4545,7 +4572,8 @@
   EXPECT_EQ(std::vector<GURL>{GURL("https://ad2.com-component1.com")},
             res.ad_component_urls);
   EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(res.ad_beacon_map.metadata.empty());
+  EXPECT_THAT(res.ad_beacon_map,
+              testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
   EXPECT_THAT(
       result_.private_aggregation_requests_reserved,
       testing::UnorderedElementsAre(
@@ -4618,7 +4646,8 @@
             res.ad_component_urls);
   EXPECT_THAT(res.report_urls, testing::UnorderedElementsAre(GURL(
                                    "https://seller.signals.were.null.test/")));
-  EXPECT_TRUE(res.ad_beacon_map.metadata.empty());
+  EXPECT_THAT(res.ad_beacon_map,
+              testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
   EXPECT_THAT(
       result_.private_aggregation_requests_reserved,
       testing::UnorderedElementsAre(
@@ -4756,11 +4785,13 @@
                   GURL("https://reporting.example.com/1"),
                   GURL("https://buyer-reporting.example.com/1")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
                             "click", GURL("https://reporting.example.com/2")))),
+          testing::Pair(ReportingDestination::kComponentSeller,
+                        testing::ElementsAre()),
           testing::Pair(
               ReportingDestination::kBuyer,
               testing::ElementsAre(testing::Pair(
@@ -5964,12 +5995,14 @@
                       GURL("https://reporting.example.com/2"),
                       GURL("https://buyer-reporting.example.com/2")));
       EXPECT_THAT(
-          result_.ad_beacon_map.metadata,
+          result_.ad_beacon_map,
           testing::UnorderedElementsAre(
               testing::Pair(
                   ReportingDestination::kSeller,
                   testing::ElementsAre(testing::Pair(
                       "click", GURL("https://reporting.example.com/4")))),
+              testing::Pair(ReportingDestination::kComponentSeller,
+                            testing::ElementsAre()),
               testing::Pair(
                   ReportingDestination::kBuyer,
                   testing::ElementsAre(testing::Pair(
@@ -6158,7 +6191,7 @@
                       GURL("https://component2-report.test/2"),
                       GURL("https://buyer-reporting.example.com/2")));
       EXPECT_THAT(
-          result_.ad_beacon_map.metadata,
+          result_.ad_beacon_map,
           testing::UnorderedElementsAre(
               testing::Pair(
                   ReportingDestination::kSeller,
@@ -6342,7 +6375,7 @@
                   GURL("https://component2-report.test/2"),
                   GURL("https://buyer-reporting.example.com/2")));
   EXPECT_THAT(
-      result_.ad_beacon_map.metadata,
+      result_.ad_beacon_map,
       testing::UnorderedElementsAre(
           testing::Pair(ReportingDestination::kSeller,
                         testing::ElementsAre(testing::Pair(
@@ -6566,7 +6599,8 @@
   EXPECT_EQ(GURL("https://ad1.com/"), result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
   EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
+  EXPECT_THAT(result_.ad_beacon_map,
+              testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
 }
@@ -6624,8 +6658,6 @@
   EXPECT_FALSE(result_.winning_group_id);
   EXPECT_FALSE(result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
   EXPECT_THAT(result_.interest_groups_that_bid,
@@ -6730,7 +6762,8 @@
     EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
     EXPECT_TRUE(result_.ad_component_urls.empty());
     EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-    EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
+    EXPECT_THAT(result_.ad_beacon_map,
+                testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
     EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
     EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
     EXPECT_THAT(result_.interest_groups_that_bid,
@@ -6826,8 +6859,6 @@
     EXPECT_FALSE(result_.winning_group_id);
     EXPECT_FALSE(result_.ad_url);
     EXPECT_TRUE(result_.ad_component_urls.empty());
-    EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-    EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
     EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
     EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
     EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7251,7 +7282,8 @@
       EXPECT_EQ(GURL("https://ad1.com/"), result_.ad_url);
       EXPECT_TRUE(result_.ad_component_urls.empty());
       EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-      EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
+      EXPECT_THAT(result_.ad_beacon_map,
+                  testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
       EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
       EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
       EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7273,8 +7305,6 @@
       EXPECT_FALSE(result_.winning_group_id);
       EXPECT_FALSE(result_.ad_url);
       EXPECT_TRUE(result_.ad_component_urls.empty());
-      EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-      EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
       EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
       EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
       EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7352,7 +7382,8 @@
       EXPECT_EQ(GURL("https://ad1.com/"), result_.ad_url);
       EXPECT_EQ(ad_component_urls, result_.ad_component_urls);
       EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-      EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
+      EXPECT_THAT(result_.ad_beacon_map,
+                  testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
       EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
       EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
       EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7374,8 +7405,6 @@
       EXPECT_FALSE(result_.winning_group_id);
       EXPECT_FALSE(result_.ad_url);
       EXPECT_TRUE(result_.ad_component_urls.empty());
-      EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-      EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
       EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
       EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
       EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7527,8 +7556,6 @@
     EXPECT_FALSE(result_.winning_group_id);
     EXPECT_FALSE(result_.ad_url);
     EXPECT_TRUE(result_.ad_component_urls.empty());
-    EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-    EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
     EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
     EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
     EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7539,148 +7566,6 @@
   }
 }
 
-// Test cases where a bad report URL is received over Mojo from the seller
-// worklet. Bad report URLs should be rejected in the Mojo process, so this
-// results in reporting a bad Mojo message, though the reporting phase is
-// allowed to continue.
-TEST_F(AuctionRunnerTest, BadSellerBeaconUrl) {
-  StartStandardAuctionWithMockService();
-
-  auto seller_worklet = mock_auction_process_manager_->TakeSellerWorklet();
-  ASSERT_TRUE(seller_worklet);
-  auto bidder1_worklet =
-      mock_auction_process_manager_->TakeBidderWorklet(kBidder1Url);
-  ASSERT_TRUE(bidder1_worklet);
-  auto bidder2_worklet =
-      mock_auction_process_manager_->TakeBidderWorklet(kBidder2Url);
-  ASSERT_TRUE(bidder2_worklet);
-
-  // Only Bidder1 bids, to keep things simple.
-  bidder1_worklet->InvokeGenerateBidCallback(/*bid=*/5,
-                                             GURL("https://ad1.com/"));
-  bidder2_worklet->InvokeGenerateBidCallback(/*bid=*/absl::nullopt);
-
-  auto score_ad_params = seller_worklet->WaitForScoreAd();
-  EXPECT_EQ(kBidder1, score_ad_params.interest_group_owner);
-  EXPECT_EQ(5, score_ad_params.bid);
-  mojo::Remote<auction_worklet::mojom::ScoreAdClient>(
-      std::move(score_ad_params.score_ad_client))
-      ->OnScoreAdComplete(
-          /*score=*/10,
-          /*reject_reason=*/
-          auction_worklet::mojom::RejectReason::kNotAvailable,
-          auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr(),
-          /*scoring_signals_data_version=*/0,
-          /*has_scoring_signals_data_version=*/false,
-          /*debug_loss_report_url=*/absl::nullopt,
-          /*debug_win_report_url=*/absl::nullopt, /*pa_requests=*/{},
-          /*errors=*/{});
-
-  // The seller provides a bad beacon map.
-  seller_worklet->WaitForReportResult();
-  seller_worklet->InvokeReportResultCallback(
-      GURL("https://seller.report.test/"),
-      {{"click", GURL("http://not.https.test/")}});
-
-  // The winning bidder still gets a chance to provide a report URL.
-  mock_auction_process_manager_->WaitForWinningBidderReload();
-  bidder1_worklet =
-      mock_auction_process_manager_->TakeBidderWorklet(kBidder1Url);
-  bidder1_worklet->WaitForReportWin();
-  bidder1_worklet->InvokeReportWinCallback(GURL("https://bidder.report.test/"));
-  auction_run_loop_->Run();
-
-  EXPECT_EQ("Invalid seller beacon URL for 'click'", TakeBadMessage());
-
-  EXPECT_THAT(result_.errors, testing::ElementsAre());
-  EXPECT_EQ(kBidder1Key, result_.winning_group_id);
-  EXPECT_EQ(GURL("https://ad1.com/"), result_.ad_url);
-  EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre(
-                                       GURL("https://seller.report.test/"),
-                                       GURL("https://bidder.report.test/")));
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
-  EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
-  EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
-  EXPECT_THAT(result_.interest_groups_that_bid,
-              testing::UnorderedElementsAre(kBidder1Key));
-  EXPECT_EQ(R"({"render_url":"https://ad1.com/","metadata":{"ads": true}})",
-            result_.winning_group_ad_metadata);
-  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
-                  /*expected_interest_groups=*/2, /*expected_owners=*/2,
-                  /*expected_sellers=*/1);
-}
-
-// Test cases where a bad URL is present in the beacon mapping received over
-// Mojo from the bidder worklet. Bad report URLs should be rejected in the Mojo
-// process, so this results in reporting a bad Mojo message, though the
-// reporting phase is allowed to complete.
-TEST_F(AuctionRunnerTest, BadBidderBeaconUrl) {
-  StartStandardAuctionWithMockService();
-
-  auto seller_worklet = mock_auction_process_manager_->TakeSellerWorklet();
-  ASSERT_TRUE(seller_worklet);
-  auto bidder1_worklet =
-      mock_auction_process_manager_->TakeBidderWorklet(kBidder1Url);
-  ASSERT_TRUE(bidder1_worklet);
-  auto bidder2_worklet =
-      mock_auction_process_manager_->TakeBidderWorklet(kBidder2Url);
-  ASSERT_TRUE(bidder2_worklet);
-
-  // Only Bidder1 bids, to keep things simple.
-  bidder1_worklet->InvokeGenerateBidCallback(/*bid=*/5,
-                                             GURL("https://ad1.com/"));
-  bidder2_worklet->InvokeGenerateBidCallback(/*bid=*/absl::nullopt);
-
-  auto score_ad_params = seller_worklet->WaitForScoreAd();
-  EXPECT_EQ(kBidder1, score_ad_params.interest_group_owner);
-  EXPECT_EQ(5, score_ad_params.bid);
-  mojo::Remote<auction_worklet::mojom::ScoreAdClient>(
-      std::move(score_ad_params.score_ad_client))
-      ->OnScoreAdComplete(
-          /*score=*/10,
-          /*reject_reason=*/
-          auction_worklet::mojom::RejectReason::kNotAvailable,
-          auction_worklet::mojom::ComponentAuctionModifiedBidParamsPtr(),
-          /*scoring_signals_data_version=*/0,
-          /*has_scoring_signals_data_version=*/false,
-          /*debug_loss_report_url=*/absl::nullopt,
-          /*debug_win_report_url=*/absl::nullopt, /*pa_requests=*/{},
-          /*errors=*/{});
-
-  seller_worklet->WaitForReportResult();
-  seller_worklet->InvokeReportResultCallback(
-      GURL("https://seller.report.test/"));
-  mock_auction_process_manager_->WaitForWinningBidderReload();
-  bidder1_worklet =
-      mock_auction_process_manager_->TakeBidderWorklet(kBidder1Url);
-  bidder1_worklet->WaitForReportWin();
-  bidder1_worklet->InvokeReportWinCallback(
-      GURL("https://bidder.report.test/"),
-      {{"click", GURL("http://not.https.test/")}});
-  auction_run_loop_->Run();
-
-  EXPECT_EQ("Invalid bidder beacon URL for 'click'", TakeBadMessage());
-
-  EXPECT_THAT(result_.errors, testing::ElementsAre());
-  EXPECT_EQ(kBidder1Key, result_.winning_group_id);
-  EXPECT_EQ(GURL("https://ad1.com/"), result_.ad_url);
-  EXPECT_TRUE(result_.ad_component_urls.empty());
-  EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre(
-                                       GURL("https://seller.report.test/"),
-                                       GURL("https://bidder.report.test/")));
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
-  EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
-  EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
-  EXPECT_THAT(result_.interest_groups_that_bid,
-              testing::UnorderedElementsAre(kBidder1Key));
-  EXPECT_EQ(R"({"render_url":"https://ad1.com/","metadata":{"ads": true}})",
-            result_.winning_group_ad_metadata);
-  CheckHistograms(InterestGroupAuction::AuctionResult::kSuccess,
-                  /*expected_interest_groups=*/2, /*expected_owners=*/2,
-                  /*expected_sellers=*/1);
-}
-
 // Check that BidderWorklets that don't make a bid are destroyed immediately.
 TEST_F(AuctionRunnerTest, DestroyBidderWorkletWithoutBid) {
   StartStandardAuctionWithMockService();
@@ -7736,7 +7621,8 @@
   EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
   EXPECT_TRUE(result_.ad_component_urls.empty());
   EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-  EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
+  EXPECT_THAT(result_.ad_beacon_map,
+              testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
   EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
   EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
   EXPECT_THAT(result_.interest_groups_that_bid,
@@ -7849,7 +7735,8 @@
     }
 
     EXPECT_THAT(result_.report_urls, testing::UnorderedElementsAre());
-    EXPECT_TRUE(result_.ad_beacon_map.metadata.empty());
+    EXPECT_THAT(result_.ad_beacon_map,
+                testing::UnorderedElementsAreArray(kEmptyAdBeaconMap));
     EXPECT_TRUE(result_.private_aggregation_requests_reserved.empty());
     EXPECT_TRUE(result_.private_aggregation_requests_non_reserved.empty());
     EXPECT_THAT(result_.interest_groups_that_bid,
diff --git a/content/browser/interest_group/interest_group_auction_reporter.cc b/content/browser/interest_group/interest_group_auction_reporter.cc
index 2ef92a8..54fa76b 100644
--- a/content/browser/interest_group/interest_group_auction_reporter.cc
+++ b/content/browser/interest_group/interest_group_auction_reporter.cc
@@ -22,6 +22,7 @@
 #include "base/time/time.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_event.h"
+#include "content/browser/fenced_frame/fenced_frame_reporter.h"
 #include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
 #include "content/browser/interest_group/interest_group_auction.h"
@@ -37,6 +38,7 @@
 #include "services/network/public/mojom/client_security_state.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h"
 #include "third_party/blink/public/common/interest_group/interest_group.h"
 #include "third_party/blink/public/mojom/fenced_frame/fenced_frame.mojom-shared.h"
 #include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h"
@@ -106,7 +108,9 @@
       private_aggregation_requests_reserved_(
           std::move(private_aggregation_requests_reserved)),
       private_aggregation_requests_non_reserved_(
-          std::move(private_aggregation_requests_non_reserved)) {
+          std::move(private_aggregation_requests_non_reserved)),
+      fenced_frame_reporter_(
+          FencedFrameReporter::CreateForFledge(url_loader_factory_)) {
   DCHECK(interest_group_manager_);
   DCHECK(auction_worklet_manager_);
   DCHECK(url_loader_factory_);
@@ -122,7 +126,15 @@
 
   DCHECK(!callback_);
 
+  // If there's no component seller, set the component seller mapping as empty,
+  // so it's available as soon as possible.
+  if (!component_seller_winning_bid_info_) {
+    fenced_frame_reporter_->OnUrlMappingReady(
+        blink::FencedFrame::ReportingDestination::kComponentSeller,
+        /*reporting_url_map=*/{});
+  }
   callback_ = std::move(callback);
+
   RequestSellerWorklet(&top_level_seller_winning_bid_info_,
                        /*top_seller_signals=*/absl::nullopt);
 }
@@ -262,30 +274,29 @@
     }
   }
 
-  if (!seller_ad_beacon_map.empty()) {
-    bool has_bad_beacon_map = false;
-    for (const auto& element : seller_ad_beacon_map) {
-      if (!IsEventLevelReportingUrlValid(element.second)) {
-        mojo::ReportBadMessage(base::StrCat(
-            {"Invalid seller beacon URL for '", element.first, "'"}));
-        // No need to skip rest of work on failure - all fields are validated
-        // and consumed independently, and it's not worth the complexity to make
-        // sure everything is dropped when a field is invalid.
-        has_bad_beacon_map = true;
-        break;
-      }
+  // This will be cleared if any beacons are invalid.
+  base::flat_map<std::string, GURL> validated_seller_ad_beacon_map =
+      seller_ad_beacon_map;
+  for (const auto& element : seller_ad_beacon_map) {
+    if (!IsEventLevelReportingUrlValid(element.second)) {
+      mojo::ReportBadMessage(base::StrCat(
+          {"Invalid seller beacon URL for '", element.first, "'"}));
+      // Drop the entire beacon map if part of it is invalid. No need to treat
+      // the rest of the data received from the worklet as invalid - all fields
+      // are validated and consumed independently, and it's not worth the
+      // complexity to make sure everything is dropped when a field is invalid.
+      validated_seller_ad_beacon_map.clear();
+      break;
     }
-    if (!has_bad_beacon_map) {
-      if (seller_info == &top_level_seller_winning_bid_info_) {
-        ad_beacon_map_
-            .metadata[blink::FencedFrame::ReportingDestination::kSeller] =
-            seller_ad_beacon_map;
-      } else {
-        ad_beacon_map_.metadata
-            [blink::FencedFrame::ReportingDestination::kComponentSeller] =
-            seller_ad_beacon_map;
-      }
-    }
+  }
+  if (seller_info == &top_level_seller_winning_bid_info_) {
+    fenced_frame_reporter_->OnUrlMappingReady(
+        blink::FencedFrame::ReportingDestination::kSeller,
+        std::move(validated_seller_ad_beacon_map));
+  } else {
+    fenced_frame_reporter_->OnUrlMappingReady(
+        blink::FencedFrame::ReportingDestination::kComponentSeller,
+        std::move(validated_seller_ad_beacon_map));
   }
 
   if (seller_report_url) {
@@ -479,25 +490,24 @@
     }
   }
 
-  if (!bidder_ad_beacon_map.empty()) {
-    bool has_bad_beacon_map = false;
-    for (const auto& element : bidder_ad_beacon_map) {
-      if (!IsEventLevelReportingUrlValid(element.second)) {
-        mojo::ReportBadMessage(base::StrCat(
-            {"Invalid bidder beacon URL for '", element.first, "'"}));
-        has_bad_beacon_map = true;
-        break;
-        // No need to skip rest of work on failure - all fields are validated
-        // and consumed independently, and it's not worth the complexity to make
-        // sure everything is dropped when a field is invalid.
-      }
-    }
-    if (!has_bad_beacon_map) {
-      ad_beacon_map_
-          .metadata[blink::FencedFrame::ReportingDestination::kBuyer] =
-          bidder_ad_beacon_map;
+  // This will be cleared if any beacons are invalid.
+  base::flat_map<std::string, GURL> validated_bidder_ad_beacon_map =
+      bidder_ad_beacon_map;
+  for (const auto& element : bidder_ad_beacon_map) {
+    if (!IsEventLevelReportingUrlValid(element.second)) {
+      mojo::ReportBadMessage(base::StrCat(
+          {"Invalid bidder beacon URL for '", element.first, "'"}));
+      // Drop the entire beacon map if part of it is invalid. No need to treat
+      // the rest of the data received from the worklet as invalid - all fields
+      // are validated and consumed independently, and it's not worth the
+      // complexity to make sure everything is dropped when a field is invalid.
+      validated_bidder_ad_beacon_map.clear();
+      break;
     }
   }
+  fenced_frame_reporter_->OnUrlMappingReady(
+      blink::FencedFrame::ReportingDestination::kBuyer,
+      std::move(validated_bidder_ad_beacon_map));
 
   if (bidder_report_url) {
     if (!IsEventLevelReportingUrlValid(*bidder_report_url)) {
diff --git a/content/browser/interest_group/interest_group_auction_reporter.h b/content/browser/interest_group/interest_group_auction_reporter.h
index 595b596..2e8a3fd 100644
--- a/content/browser/interest_group/interest_group_auction_reporter.h
+++ b/content/browser/interest_group/interest_group_auction_reporter.h
@@ -18,7 +18,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
-#include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
+#include "content/browser/fenced_frame/fenced_frame_reporter.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
 #include "content/browser/interest_group/interest_group_storage.h"
 #include "content/browser/interest_group/subresource_url_authorizations.h"
@@ -30,7 +30,6 @@
 #include "services/network/public/mojom/client_security_state.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/interest_group/interest_group.h"
-#include "third_party/blink/public/mojom/fenced_frame/fenced_frame.mojom-shared.h"
 #include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -191,9 +190,18 @@
     return std::move(private_aggregation_requests_non_reserved_);
   }
 
-  // Retrieves the ad beacon map. May only be called once, since it takes
-  // ownership of the stored ad beacon map.
-  ReportingMetadata TakeAdBeaconMap() { return std::move(ad_beacon_map_); }
+  // The FencedFrameReporter that `this` will pass event-level ad beacon
+  // information received from reporting worklets to, as they're received.
+  // Created by `this`. The consumer is responsible for wiring this up to a
+  // fenced frame URN mapping, so that any fenced frame the winning ad is loaded
+  // into can find it to send reports.
+  //
+  // This is refcounted, so both the InterestGroupAuctionReporter and fenced
+  // frame URN mapping can continue to access it if the other is destroyed
+  // first.
+  scoped_refptr<FencedFrameReporter> fenced_frame_reporter() {
+    return fenced_frame_reporter_.get();
+  }
 
  private:
   // Starts request for a seller worklet. Invokes OnSellerWorkletReceived() on
@@ -322,14 +330,10 @@
   std::map<std::string, PrivateAggregationRequests>
       private_aggregation_requests_non_reserved_;
 
-  // Ad Beacon URL mapping generated from reportResult() or reportWin() from
-  // this auction and its components. Destination is relative to this auction.
-  // Returned to `callback_` to deal with, so the Auction itself can be
-  // deleted at the end of the auction.
-  ReportingMetadata ad_beacon_map_;
-
   std::vector<GURL> pending_report_urls_;
 
+  const scoped_refptr<FencedFrameReporter> fenced_frame_reporter_;
+
   bool reporting_complete_ = false;
   bool navigated_to_winning_ad_ = false;
 
diff --git a/content/browser/interest_group/interest_group_auction_reporter_unittest.cc b/content/browser/interest_group/interest_group_auction_reporter_unittest.cc
index b8c4da1..e5e0360 100644
--- a/content/browser/interest_group/interest_group_auction_reporter_unittest.cc
+++ b/content/browser/interest_group/interest_group_auction_reporter_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/notreached.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
+#include "content/browser/fenced_frame/fenced_frame_reporter.h"
 #include "content/browser/interest_group/auction_worklet_manager.h"
 #include "content/browser/interest_group/interest_group_k_anonymity_manager.h"
 #include "content/browser/interest_group/interest_group_manager_impl.h"
@@ -31,6 +32,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h"
 #include "third_party/blink/public/common/interest_group/auction_config.h"
 #include "third_party/blink/public/common/interest_group/interest_group.h"
 #include "third_party/blink/public/common/interest_group/test_interest_group_builder.h"
@@ -384,6 +386,20 @@
   const GURL kBidderReportUrl =
       GURL("https://bidder.report.test/bidder=report");
 
+  // These are used in ad beacon tests. Not used by default.
+  const FencedFrameReporter::ReportingUrlMap kSellerBeaconMap = {
+      {"click", GURL("https://seller.click.test/")},
+      {"clock", GURL("https://seller.clock.test/")},
+  };
+  const FencedFrameReporter::ReportingUrlMap kComponentSellerBeaconMap = {
+      {"click", GURL("https://component.seller.click.test/")},
+  };
+  const FencedFrameReporter::ReportingUrlMap kBuyerBeaconMap = {
+      {"click", GURL("https://buyer.click.test/")},
+      {"clack", GURL("https://buyer.clack.test/")},
+      {"cluck", GURL("https://buyer.cluck.test/")},
+  };
+
   // SharedURLLoaderFactory used for reports. Reports are short-circuited by the
   // TestInterestGroupManagerImpl before they make it over the network, so this
   // is only used for equality checks around making sure the right factory is
@@ -749,6 +765,226 @@
   WaitForCompletion();
 }
 
+TEST_F(InterestGroupAuctionReporterTest, SingleSellerReportBeaconMap) {
+  SetUpAndStartSingleSellerAuction();
+  // The component seller list should be empty from the start, for a single
+  // seller auction.
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre(testing::Pair(
+                  blink::FencedFrame::ReportingDestination::kComponentSeller,
+                  testing::UnorderedElementsAre())));
+
+  WaitForReportResultAndRunCallback(
+      kSellerScriptUrl, /*report_url=*/absl::nullopt, kSellerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAre())));
+
+  WaitForReportWinAndRunCallback(/*report_url=*/absl::nullopt, kBuyerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAre()),
+          testing::Pair(blink::FencedFrame::ReportingDestination::kBuyer,
+                        testing::UnorderedElementsAreArray(kBuyerBeaconMap))));
+
+  // Invoking the callback has no effect on per-destination reporting maps.
+  // Fenced frames navigated to the winning ad use them to trigger reports, so
+  // no need to hold them back until a fenced frame is navigated to the winning
+  // ad.
+  interest_group_auction_reporter_->OnNavigateToWinningAdCallback().Run();
+
+  WaitForCompletion();
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAre()),
+          testing::Pair(blink::FencedFrame::ReportingDestination::kBuyer,
+                        testing::UnorderedElementsAreArray(kBuyerBeaconMap))));
+}
+
+TEST_F(InterestGroupAuctionReporterTest, ComponentAuctionReportBeaconMap) {
+  SetUpAndStartComponentAuction();
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre());
+
+  WaitForReportResultAndRunCallback(
+      kSellerScriptUrl, /*report_url=*/absl::nullopt, kSellerBeaconMap);
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre(testing::Pair(
+                  blink::FencedFrame::ReportingDestination::kSeller,
+                  testing::UnorderedElementsAreArray(kSellerBeaconMap))));
+
+  WaitForReportResultAndRunCallback(kComponentSellerScriptUrl,
+                                    /*report_url=*/absl::nullopt,
+                                    kComponentSellerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap))));
+
+  WaitForReportWinAndRunCallback(/*report_url=*/absl::nullopt, kBuyerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap)),
+          testing::Pair(blink::FencedFrame::ReportingDestination::kBuyer,
+                        testing::UnorderedElementsAreArray(kBuyerBeaconMap))));
+
+  // Invoking the callback has no effect on per-destination reporting maps.
+  // Fenced frames navigated to the winning ad use them to trigger reports, so
+  // no need to hold them back until a fenced frame is navigated to the winning
+  // ad.
+  interest_group_auction_reporter_->OnNavigateToWinningAdCallback().Run();
+
+  WaitForCompletion();
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap)),
+          testing::Pair(blink::FencedFrame::ReportingDestination::kBuyer,
+                        testing::UnorderedElementsAreArray(kBuyerBeaconMap))));
+}
+
+// Test case where a bad report URL is received over Mojo from the seller
+// worklet. Bad report URLs should be rejected in the Mojo process, so this
+// results in reporting a bad Mojo message, though the reporting phase is
+// allowed to continue.
+TEST_F(InterestGroupAuctionReporterTest,
+       ComponentAuctionReportBeaconMapBadSellerUrl) {
+  SetUpAndStartComponentAuction();
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre());
+
+  WaitForReportResultAndRunCallback(
+      kSellerScriptUrl, /*report_url=*/absl::nullopt,
+      /*ad_beacon_map=*/
+      {{"click", GURL("https://seller.click.test/")},
+       {"clock", GURL("http://http.not.allowed.test/")}});
+  EXPECT_EQ("Invalid seller beacon URL for 'clock'", TakeBadMessage());
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre(testing::Pair(
+                  blink::FencedFrame::ReportingDestination::kSeller,
+                  testing::UnorderedElementsAre())));
+
+  WaitForReportResultAndRunCallback(kComponentSellerScriptUrl,
+                                    /*report_url=*/absl::nullopt,
+                                    kComponentSellerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAre()),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap))));
+
+  WaitForReportWinAndRunCallback(/*report_url=*/absl::nullopt, kBuyerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAre()),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap)),
+          testing::Pair(blink::FencedFrame::ReportingDestination::kBuyer,
+                        testing::UnorderedElementsAreArray(kBuyerBeaconMap))));
+
+  interest_group_auction_reporter_->OnNavigateToWinningAdCallback().Run();
+  WaitForCompletion();
+}
+
+// Test case where a bad report URL is received over Mojo from the bidder
+// worklet. Bad report URLs should be rejected in the Mojo process, so this
+// results in reporting a bad Mojo message, though the reporting phase is
+// allowed to continue.
+TEST_F(InterestGroupAuctionReporterTest,
+       ComponentAuctionReportBeaconMapBadBidderUrl) {
+  SetUpAndStartComponentAuction();
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre());
+
+  WaitForReportResultAndRunCallback(
+      kSellerScriptUrl, /*report_url=*/absl::nullopt, kSellerBeaconMap);
+  EXPECT_THAT(interest_group_auction_reporter_->fenced_frame_reporter()
+                  ->GetAdBeaconMapForTesting(),
+              testing::UnorderedElementsAre(testing::Pair(
+                  blink::FencedFrame::ReportingDestination::kSeller,
+                  testing::UnorderedElementsAreArray(kSellerBeaconMap))));
+
+  WaitForReportResultAndRunCallback(kComponentSellerScriptUrl,
+                                    /*report_url=*/absl::nullopt,
+                                    kComponentSellerBeaconMap);
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap))));
+
+  WaitForReportWinAndRunCallback(
+      /*report_url=*/absl::nullopt, /*ad_beacon_map=*/{
+          {"click", GURL()}, {"clack", GURL("http://buyer.clack.test/")}});
+  EXPECT_EQ("Invalid bidder beacon URL for 'clack'", TakeBadMessage());
+  EXPECT_THAT(
+      interest_group_auction_reporter_->fenced_frame_reporter()
+          ->GetAdBeaconMapForTesting(),
+      testing::UnorderedElementsAre(
+          testing::Pair(blink::FencedFrame::ReportingDestination::kSeller,
+                        testing::UnorderedElementsAreArray(kSellerBeaconMap)),
+          testing::Pair(
+              blink::FencedFrame::ReportingDestination::kComponentSeller,
+              testing::UnorderedElementsAreArray(kComponentSellerBeaconMap)),
+          testing::Pair(blink::FencedFrame::ReportingDestination::kBuyer,
+                        testing::UnorderedElementsAre())));
+
+  interest_group_auction_reporter_->OnNavigateToWinningAdCallback().Run();
+  WaitForCompletion();
+}
+
 TEST_F(InterestGroupAuctionReporterTest, DebugReportsEarlyNavigation) {
   const GURL kDebugWinReport1("https://debug.win.report.test/report-1");
   const GURL kDebugWinReport2("https://debug.win.report.test/report-2");
diff --git a/content/browser/resources/attribution_reporting/BUILD.gn b/content/browser/resources/attribution_reporting/BUILD.gn
index d3526f4..b3584c9 100644
--- a/content/browser/resources/attribution_reporting/BUILD.gn
+++ b/content/browser/resources/attribution_reporting/BUILD.gn
@@ -33,21 +33,21 @@
 
   mojo_files = [
     "$mojom_folder/$aggregation_service_folder/aggregation_service.mojom-webui.js",
-    "$mojom_folder/$attribution_reporting_component_folder/registration.mojom-webui.js",
     "$mojom_folder/$attribution_reporting_component_folder/source_registration_error.mojom-webui.js",
     "$mojom_folder/$attribution_reporting_component_folder/source_type.mojom-webui.js",
     "$mojom_folder/$attribution_reporting_content_folder/attribution_internals.mojom-webui.js",
     "$mojom_folder/$attribution_reporting_content_folder/attribution_reporting.mojom-webui.js",
     "$mojom_folder/$network_folder/schemeful_site.mojom-webui.js",
+    "$mojom_folder/$network_folder/attribution.mojom-webui.js",
   ]
 
   mojo_files_deps = [
     "//$aggregation_service_folder:mojom_js__generator",
     "//$attribution_reporting_component_folder:mojom_js__generator",
-    "//$attribution_reporting_component_folder:registration_mojom_js__generator",
     "//$attribution_reporting_component_folder:source_type_mojom_js__generator",
     "//$attribution_reporting_content_folder:internals_mojo_bindings_js__generator",
     "//$attribution_reporting_content_folder:mojo_bindings_js__generator",
+    "//$network_folder:mojom_attribution_js__generator",
     "//$network_folder:mojom_schemeful_site_js__generator",
   ]
 
diff --git a/content/browser/resources/attribution_reporting/attribution_internals.ts b/content/browser/resources/attribution_reporting/attribution_internals.ts
index 3bfc484..9a98199 100644
--- a/content/browser/resources/attribution_reporting/attribution_internals.ts
+++ b/content/browser/resources/attribution_reporting/attribution_internals.ts
@@ -8,10 +8,10 @@
 import {getTrustedHTML} from 'chrome://resources/js/static_types.js';
 import {Origin} from 'chrome://resources/mojo/url/mojom/origin.mojom-webui.js';
 
+import {TriggerAttestation} from './attribution.mojom-webui.js';
 import {FailedSourceRegistration, Handler, HandlerInterface, ObserverInterface, ObserverReceiver, ReportID, WebUIDebugReport, WebUIReport, WebUISource, WebUISource_Attributability, WebUISource_DebugReporting, WebUITrigger, WebUITrigger_Status} from './attribution_internals.mojom-webui.js';
 import {AttributionInternalsTableElement} from './attribution_internals_table.js';
 import {ReportType} from './attribution_reporting.mojom-webui.js';
-import {TriggerAttestation} from './registration.mojom-webui.js';
 import {SourceRegistrationError} from './source_registration_error.mojom-webui.js';
 import {SourceType} from './source_type.mojom-webui.js';
 import {Column, TableModel} from './table_model.js';
diff --git a/content/browser/webauth/authenticator_common_impl.cc b/content/browser/webauth/authenticator_common_impl.cc
index 8902143..417749d 100644
--- a/content/browser/webauth/authenticator_common_impl.cc
+++ b/content/browser/webauth/authenticator_common_impl.cc
@@ -1045,8 +1045,10 @@
 
     bool is_first = true;
     absl::optional<std::vector<uint8_t>> last_id;
+    // TODO(agl): should match the credential IDs from the allow list, which
+    // will also limit the size to the size of the allow list.
     for (const auto& prf_input_from_renderer : options->prf_inputs) {
-      device::CtapGetAssertionOptions::PRFInput prf_input;
+      device::PRFInput prf_input;
 
       // This statement enforces invariants that should be established by the
       // renderer.
@@ -1761,7 +1763,7 @@
         device::kExtensionDevicePublicKey);
   }
 
-  bool did_create_hmac_secret = false;
+  bool did_create_hmac_secret = response_data.prf_enabled;
   bool did_store_cred_blob = false;
   absl::optional<std::vector<uint8_t>> device_public_key_authenticator_output;
   const absl::optional<cbor::Value>& maybe_extensions =
@@ -1770,11 +1772,14 @@
     DCHECK(maybe_extensions->is_map());
     const cbor::Value::MapValue& extensions = maybe_extensions->GetMap();
 
-    const auto hmac_secret_it =
-        extensions.find(cbor::Value(device::kExtensionHmacSecret));
-    if (hmac_secret_it != extensions.end() &&
-        hmac_secret_it->second.is_bool() && hmac_secret_it->second.GetBool()) {
-      did_create_hmac_secret = true;
+    if (!did_create_hmac_secret) {
+      const auto hmac_secret_it =
+          extensions.find(cbor::Value(device::kExtensionHmacSecret));
+      if (hmac_secret_it != extensions.end() &&
+          hmac_secret_it->second.is_bool() &&
+          hmac_secret_it->second.GetBool()) {
+        did_create_hmac_secret = true;
+      }
     }
 
     const auto cred_blob_it =
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index b0b9254..0d2afd63 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -8136,212 +8136,226 @@
 TEST_F(ResidentKeyAuthenticatorImplTest, PRFExtension) {
   NavigateAndCommit(GURL(kTestOrigin1));
 
-  absl::optional<device::PublicKeyCredentialDescriptor> credential;
-  for (bool hmac_secret_supported : {false, true}) {
-    // Setting the PRF extension on an authenticator that doesn't support it
-    // should cause the extension to be echoed, but with enabled=false.
-    // Otherwise, enabled should be true.
-    device::VirtualCtap2Device::Config config;
-    config.hmac_secret_support = hmac_secret_supported;
-    config.max_credential_count_in_list = 3;
-    config.max_credential_id_length = 256;
-    config.pin_support = true;
-    config.resident_key_support = true;
-    virtual_device_factory_->SetCtap2Config(config);
-
-    PublicKeyCredentialCreationOptionsPtr options =
-        GetTestPublicKeyCredentialCreationOptions();
-    options->prf_enable = true;
-    options->authenticator_selection->resident_key =
-        hmac_secret_supported ? device::ResidentKeyRequirement::kRequired
-                              : device::ResidentKeyRequirement::kDiscouraged;
-    options->user.id = {1, 2, 3, 4};
-    options->user.name = "name";
-    options->user.display_name = "displayName";
-    MakeCredentialResult result =
-        AuthenticatorMakeCredential(std::move(options));
-    EXPECT_EQ(result.status, AuthenticatorStatus::SUCCESS);
-
-    ASSERT_TRUE(result.response->echo_prf);
-    ASSERT_EQ(result.response->prf, hmac_secret_supported);
-
-    if (hmac_secret_supported) {
-      device::AuthenticatorData auth_data =
-          AuthDataFromMakeCredentialResponse(result.response);
-      credential.emplace(device::CredentialType::kPublicKey,
-                         auth_data.GetCredentialId());
-    }
-  }
-
-  auto assertion = [&](std::vector<blink::mojom::PRFValuesPtr> inputs,
-                       unsigned allow_list_size = 1,
-                       device::UserVerificationRequirement uv =
-                           device::UserVerificationRequirement::kPreferred)
-      -> blink::mojom::PRFValuesPtr {
-    PublicKeyCredentialRequestOptionsPtr options =
-        GetTestPublicKeyCredentialRequestOptions();
-    options->prf = true;
-    options->prf_inputs = std::move(inputs);
-    options->allow_credentials.clear();
-    options->user_verification = uv;
-    if (allow_list_size >= 1) {
-      for (unsigned i = 0; i < allow_list_size - 1; i++) {
-        std::vector<uint8_t> random_credential_id(32, static_cast<uint8_t>(i));
-        options->allow_credentials.emplace_back(
-            device::CredentialType::kPublicKey,
-            std::move(random_credential_id));
+  for (bool use_prf_extension_instead : {false, true}) {
+    SCOPED_TRACE(use_prf_extension_instead);
+    absl::optional<device::PublicKeyCredentialDescriptor> credential;
+    for (bool authenticator_support : {false, true}) {
+      // Setting the PRF extension on an authenticator that doesn't support it
+      // should cause the extension to be echoed, but with enabled=false.
+      // Otherwise, enabled should be true.
+      device::VirtualCtap2Device::Config config;
+      if (authenticator_support) {
+        config.prf_support = use_prf_extension_instead;
+        config.hmac_secret_support = !use_prf_extension_instead;
       }
-      options->allow_credentials.push_back(*credential);
+      config.internal_account_chooser = config.prf_support;
+      config.always_uv = config.prf_support;
+      config.max_credential_count_in_list = 3;
+      config.max_credential_id_length = 256;
+      config.pin_support = true;
+      config.resident_key_support = true;
+      virtual_device_factory_->SetCtap2Config(config);
+
+      PublicKeyCredentialCreationOptionsPtr options =
+          GetTestPublicKeyCredentialCreationOptions();
+      options->prf_enable = true;
+      options->authenticator_selection->resident_key =
+          authenticator_support ? device::ResidentKeyRequirement::kRequired
+                                : device::ResidentKeyRequirement::kDiscouraged;
+      options->user.id = {1, 2, 3, 4};
+      options->user.name = "name";
+      options->user.display_name = "displayName";
+      MakeCredentialResult result =
+          AuthenticatorMakeCredential(std::move(options));
+      EXPECT_EQ(result.status, AuthenticatorStatus::SUCCESS);
+
+      ASSERT_TRUE(result.response->echo_prf);
+      ASSERT_EQ(result.response->prf, authenticator_support);
+
+      if (authenticator_support) {
+        device::AuthenticatorData auth_data =
+            AuthDataFromMakeCredentialResponse(result.response);
+        credential.emplace(device::CredentialType::kPublicKey,
+                           auth_data.GetCredentialId());
+      }
     }
 
-    GetAssertionResult result = AuthenticatorGetAssertion(std::move(options));
+    auto assertion = [&](std::vector<blink::mojom::PRFValuesPtr> inputs,
+                         unsigned allow_list_size = 1,
+                         device::UserVerificationRequirement uv =
+                             device::UserVerificationRequirement::kPreferred)
+        -> blink::mojom::PRFValuesPtr {
+      PublicKeyCredentialRequestOptionsPtr options =
+          GetTestPublicKeyCredentialRequestOptions();
+      options->prf = true;
+      options->prf_inputs = std::move(inputs);
+      options->allow_credentials.clear();
+      options->user_verification = uv;
+      if (allow_list_size >= 1) {
+        for (unsigned i = 0; i < allow_list_size - 1; i++) {
+          std::vector<uint8_t> random_credential_id(32,
+                                                    static_cast<uint8_t>(i));
+          options->allow_credentials.emplace_back(
+              device::CredentialType::kPublicKey,
+              std::move(random_credential_id));
+        }
+        options->allow_credentials.push_back(*credential);
+      }
 
-    EXPECT_EQ(result.status, AuthenticatorStatus::SUCCESS);
-    CHECK(result.response->prf_results);
-    CHECK(!result.response->prf_results->id);
-    return std::move(result.response->prf_results);
-  };
+      GetAssertionResult result = AuthenticatorGetAssertion(std::move(options));
 
-  const std::vector<uint8_t> salt1(32, 1);
-  const std::vector<uint8_t> salt2(32, 2);
-  std::vector<uint8_t> salt1_eval;
-  std::vector<uint8_t> salt2_eval;
+      EXPECT_EQ(result.status, AuthenticatorStatus::SUCCESS);
+      CHECK(result.response->prf_results);
+      CHECK(!result.response->prf_results->id);
+      return std::move(result.response->prf_results);
+    };
 
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->first = salt1;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs));
-    salt1_eval = std::move(result->first);
-  }
+    const std::vector<uint8_t> salt1(32, 1);
+    const std::vector<uint8_t> salt2(32, 2);
+    std::vector<uint8_t> salt1_eval;
+    std::vector<uint8_t> salt2_eval;
 
-  // The result should be consistent
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->first = salt1;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs));
-    ASSERT_EQ(result->first, salt1_eval);
-  }
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->first = salt1;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs));
+      salt1_eval = std::move(result->first);
+    }
 
-  // ... but should be different when uv=discouraged because a different PRF
-  // is used.
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->first = salt1;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs), 1,
-                            device::UserVerificationRequirement::kDiscouraged);
-    ASSERT_NE(result->first, salt1_eval);
-  }
+    // The result should be consistent
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->first = salt1;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs));
+      ASSERT_EQ(result->first, salt1_eval);
+    }
 
-  // Should be able to evaluate two points at once.
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->first = salt1;
-    prf_value->second = salt2;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs));
-    ASSERT_EQ(result->first, salt1_eval);
-    ASSERT_TRUE(result->second);
-    salt2_eval = std::move(*result->second);
-    ASSERT_NE(salt1_eval, salt2_eval);
-  }
+    // When uv=discouraged security keys will use a different PRF. But hybrid
+    // devices always do a UV and only have a single PRF.
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->first = salt1;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result =
+          assertion(std::move(inputs), 1,
+                    device::UserVerificationRequirement::kDiscouraged);
+      if (use_prf_extension_instead) {
+        ASSERT_EQ(result->first, salt1_eval);
+      } else {
+        ASSERT_NE(result->first, salt1_eval);
+      }
+    }
 
-  // Should be consistent if swapped.
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->first = salt2;
-    prf_value->second = salt1;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs));
-    ASSERT_EQ(result->first, salt2_eval);
-    ASSERT_TRUE(result->second);
-    ASSERT_EQ(*result->second, salt1_eval);
-  }
+    // Should be able to evaluate two points at once.
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->first = salt1;
+      prf_value->second = salt2;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs));
+      ASSERT_EQ(result->first, salt1_eval);
+      ASSERT_TRUE(result->second);
+      salt2_eval = std::move(*result->second);
+      ASSERT_NE(salt1_eval, salt2_eval);
+    }
 
-  // Should still trigger if the credential ID is specified
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->id.emplace(credential->id);
-    prf_value->first = salt1;
-    prf_value->second = salt2;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs));
-    ASSERT_EQ(result->first, salt1_eval);
-    ASSERT_TRUE(result->second);
-    ASSERT_EQ(*result->second, salt2_eval);
-  }
+    // Should be consistent if swapped.
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->first = salt2;
+      prf_value->second = salt1;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs));
+      ASSERT_EQ(result->first, salt2_eval);
+      ASSERT_TRUE(result->second);
+      ASSERT_EQ(*result->second, salt1_eval);
+    }
 
-  // And the specified credential ID should override any default inputs.
-  {
-    auto prf_value1 = blink::mojom::PRFValues::New();
-    prf_value1->first = std::vector<uint8_t>(32, 3);
-    auto prf_value2 = blink::mojom::PRFValues::New();
-    prf_value2->id.emplace(credential->id);
-    prf_value2->first = salt1;
-    prf_value2->second = salt2;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value1));
-    inputs.emplace_back(std::move(prf_value2));
-    auto result = assertion(std::move(inputs));
-    ASSERT_EQ(result->first, salt1_eval);
-    ASSERT_TRUE(result->second);
-    ASSERT_EQ(*result->second, salt2_eval);
-  }
+    // Should still trigger if the credential ID is specified
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->id.emplace(credential->id);
+      prf_value->first = salt1;
+      prf_value->second = salt2;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs));
+      ASSERT_EQ(result->first, salt1_eval);
+      ASSERT_TRUE(result->second);
+      ASSERT_EQ(*result->second, salt2_eval);
+    }
 
-  // ... and that should still be true if there there are lots of dummy entries
-  // in the allowlist. Note that the virtual authenticator was configured such
-  // that this will cause multiple batches.
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->id.emplace(credential->id);
-    prf_value->first = salt1;
-    prf_value->second = salt2;
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs), /*allowlist_size=*/20);
-    ASSERT_EQ(result->first, salt1_eval);
-    ASSERT_TRUE(result->second);
-    ASSERT_EQ(*result->second, salt2_eval);
-  }
+    // And the specified credential ID should override any default inputs.
+    {
+      auto prf_value1 = blink::mojom::PRFValues::New();
+      prf_value1->first = std::vector<uint8_t>(32, 3);
+      auto prf_value2 = blink::mojom::PRFValues::New();
+      prf_value2->id.emplace(credential->id);
+      prf_value2->first = salt1;
+      prf_value2->second = salt2;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value1));
+      inputs.emplace_back(std::move(prf_value2));
+      auto result = assertion(std::move(inputs));
+      ASSERT_EQ(result->first, salt1_eval);
+      ASSERT_TRUE(result->second);
+      ASSERT_EQ(*result->second, salt2_eval);
+    }
 
-  // Default PRF values should be passed down when the allowlist is empty.
-  {
-    auto prf_value = blink::mojom::PRFValues::New();
-    prf_value->first = salt1;
-    prf_value->second = salt2;
-    test_client_.delegate_config.expected_accounts =
-        "01020304:name:displayName";
-    test_client_.delegate_config.selected_user_id = {1, 2, 3, 4};
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value));
-    auto result = assertion(std::move(inputs), /*allowlist_size=*/0);
-    ASSERT_EQ(result->first, salt1_eval);
-    ASSERT_TRUE(result->second);
-    ASSERT_EQ(*result->second, salt2_eval);
-  }
+    // ... and that should still be true if there there are lots of dummy
+    // entries in the allowlist. Note that the virtual authenticator was
+    // configured such that this will cause multiple batches.
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->id.emplace(credential->id);
+      prf_value->first = salt1;
+      prf_value->second = salt2;
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs), /*allowlist_size=*/20);
+      ASSERT_EQ(result->first, salt1_eval);
+      ASSERT_TRUE(result->second);
+      ASSERT_EQ(*result->second, salt2_eval);
+    }
 
-  // And the default PRF values should be used if none of the specific values
-  // match.
-  {
-    auto prf_value1 = blink::mojom::PRFValues::New();
-    prf_value1->first = salt1;
-    auto prf_value2 = blink::mojom::PRFValues::New();
-    prf_value2->first = std::vector<uint8_t>(32, 3);
-    prf_value2->id = std::vector<uint8_t>(32, 4);
-    std::vector<blink::mojom::PRFValuesPtr> inputs;
-    inputs.emplace_back(std::move(prf_value1));
-    inputs.emplace_back(std::move(prf_value2));
-    auto result = assertion(std::move(inputs), /*allowlist_size=*/20);
-    ASSERT_EQ(result->first, salt1_eval);
-    ASSERT_FALSE(result->second);
+    // Default PRF values should be passed down when the allowlist is empty.
+    {
+      auto prf_value = blink::mojom::PRFValues::New();
+      prf_value->first = salt1;
+      prf_value->second = salt2;
+      test_client_.delegate_config.expected_accounts =
+          "01020304:name:displayName";
+      test_client_.delegate_config.selected_user_id = {1, 2, 3, 4};
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value));
+      auto result = assertion(std::move(inputs), /*allowlist_size=*/0);
+      ASSERT_EQ(result->first, salt1_eval);
+      ASSERT_TRUE(result->second);
+      ASSERT_EQ(*result->second, salt2_eval);
+    }
+
+    // And the default PRF values should be used if none of the specific values
+    // match.
+    {
+      auto prf_value1 = blink::mojom::PRFValues::New();
+      prf_value1->first = salt1;
+      auto prf_value2 = blink::mojom::PRFValues::New();
+      prf_value2->first = std::vector<uint8_t>(32, 3);
+      prf_value2->id = std::vector<uint8_t>(32, 4);
+      std::vector<blink::mojom::PRFValuesPtr> inputs;
+      inputs.emplace_back(std::move(prf_value1));
+      inputs.emplace_back(std::move(prf_value2));
+      auto result = assertion(std::move(inputs), /*allowlist_size=*/20);
+      ASSERT_EQ(result->first, salt1_eval);
+      ASSERT_FALSE(result->second);
+    }
   }
 }
 
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index e699cc3..f3ba504 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -535,6 +535,7 @@
     # public testing method.
     "//services/network:network_service",
     "//services/network:test_support",
+    "//services/network/public/cpp:test_support",
     "//services/network/public/mojom",
     "//services/proxy_resolver:lib",
     "//services/service_manager/public/cpp",
diff --git a/device/fido/authenticator_get_assertion_response.h b/device/fido/authenticator_get_assertion_response.h
index c68a5542..4a7e93e 100644
--- a/device/fido/authenticator_get_assertion_response.h
+++ b/device/fido/authenticator_get_assertion_response.h
@@ -48,7 +48,8 @@
   absl::optional<PublicKeyCredentialUserEntity> user_entity;
   absl::optional<uint8_t> num_credentials;
 
-  // hmac_secret contains the output of the hmac_secret extension.
+  // hmac-secret contains the output of the hmac-secret or prf extension. The
+  // values have already been decrypted.
   absl::optional<std::vector<uint8_t>> hmac_secret;
 
   // hmac_secret_not_evaluated will be true in cases where the
diff --git a/device/fido/authenticator_make_credential_response.cc b/device/fido/authenticator_make_credential_response.cc
index cb29ad4..3cdbfe4f 100644
--- a/device/fido/authenticator_make_credential_response.cc
+++ b/device/fido/authenticator_make_credential_response.cc
@@ -126,10 +126,17 @@
     // requests.
     map.emplace(5, cbor::Value(std::array<uint8_t, kLargeBlobKeyLength>()));
   }
+  cbor::Value::MapValue unsigned_extension_outputs;
   if (response.device_public_key_signature.has_value()) {
-    cbor::Value::MapValue unsigned_extension_outputs;
     unsigned_extension_outputs.emplace(kExtensionDevicePublicKey,
                                        *response.device_public_key_signature);
+  }
+  if (response.prf_enabled) {
+    cbor::Value::MapValue prf;
+    prf.emplace(kExtensionPRFEnabled, true);
+    unsigned_extension_outputs.emplace(kExtensionPRF, std::move(prf));
+  }
+  if (!unsigned_extension_outputs.empty()) {
     map.emplace(6, std::move(unsigned_extension_outputs));
   }
   auto encoded_bytes = cbor::Writer::Write(cbor::Value(std::move(map)));
diff --git a/device/fido/authenticator_make_credential_response.h b/device/fido/authenticator_make_credential_response.h
index 31ed4d5..555cec7 100644
--- a/device/fido/authenticator_make_credential_response.h
+++ b/device/fido/authenticator_make_credential_response.h
@@ -92,6 +92,12 @@
   // not. This can only be true if the credential is created with the
   // largeBlobKey extension on a capable authenticator.
   bool has_associated_large_blob_key = false;
+
+  // Whether a PRF is configured for this credential. This only reflects the
+  // output of the `prf` extension. Any output from the `hmac-secret` extension
+  // is in the authenticator data. However, note that the WebAuthn-level prf
+  // extension may be using the `hmac-secret` extension at the CTAP layer.
+  bool prf_enabled = false;
 };
 
 // Through cbor::Writer, produces a CTAP style CBOR-encoded byte array
diff --git a/device/fido/authenticator_supported_options.h b/device/fido/authenticator_supported_options.h
index 600f3f2..8e8009f 100644
--- a/device/fido/authenticator_supported_options.h
+++ b/device/fido/authenticator_supported_options.h
@@ -120,6 +120,9 @@
   bool supports_hmac_secret = false;
   // If true, indicates that the authenticator supports the DPK extension.
   bool supports_device_public_key = false;
+  // If true, indicates that the authenticator supports the PRF extension. This
+  // will be preferred to the hmac-secret extension if supported.
+  bool supports_prf = false;
   // max_cred_blob_length is the longest credBlob value that this authenticator
   // can store. A value of `nullopt` indicates no support for credBlob.
   absl::optional<uint16_t> max_cred_blob_length;
diff --git a/device/fido/ctap_get_assertion_request.cc b/device/fido/ctap_get_assertion_request.cc
index c7e58f5..40fb8526 100644
--- a/device/fido/ctap_get_assertion_request.cc
+++ b/device/fido/ctap_get_assertion_request.cc
@@ -29,11 +29,53 @@
 
 bool AreGetAssertionRequestMapKeysCorrect(
     const cbor::Value::MapValue& request_map) {
-  return base::ranges::all_of(
-      request_map, [](const auto& param) {
-        return (param.first.is_integer() && 1u <= param.first.GetInteger() &&
-                param.first.GetInteger() <= 7u);
-      });
+  return base::ranges::all_of(request_map, [](const auto& param) {
+    return (param.first.is_integer() && 1u <= param.first.GetInteger() &&
+            param.first.GetInteger() <= 7u);
+  });
+}
+
+cbor::Value::MapValue PRFInputToCBOR(const PRFInput& input) {
+  cbor::Value::MapValue ret;
+  ret.emplace(kExtensionPRFFirst,
+              std::vector<uint8_t>(input.salt1.begin(), input.salt1.end()));
+  if (input.salt2) {
+    ret.emplace(kExtensionPRFSecond,
+                std::vector<uint8_t>(input.salt2->begin(), input.salt2->end()));
+  }
+  return ret;
+}
+
+bool CBORToPRFValue(const cbor::Value& v, std::array<uint8_t, 32>* out) {
+  if (!v.is_bytestring()) {
+    return false;
+  }
+  return fido_parsing_utils::ExtractArray(v.GetBytestring(), 0, out);
+}
+
+absl::optional<PRFInput> CBORToPRFInput(const cbor::Value& v) {
+  if (!v.is_map()) {
+    return absl::nullopt;
+  }
+  const cbor::Value::MapValue& map = v.GetMap();
+  const auto first_it = map.find(cbor::Value(kExtensionPRFFirst));
+  if (first_it == map.end()) {
+    return absl::nullopt;
+  }
+
+  PRFInput ret;
+  if (!CBORToPRFValue(first_it->second, &ret.salt1)) {
+    return absl::nullopt;
+  }
+
+  const auto second_it = map.find(cbor::Value(kExtensionPRFSecond));
+  if (second_it != map.end()) {
+    ret.salt2.emplace();
+    if (!CBORToPRFValue(second_it->second, &ret.salt2.value())) {
+      return absl::nullopt;
+    }
+  }
+  return ret;
 }
 }  // namespace
 
@@ -44,10 +86,21 @@
     default;
 CtapGetAssertionOptions::~CtapGetAssertionOptions() = default;
 
-CtapGetAssertionOptions::PRFInput::PRFInput() = default;
-CtapGetAssertionOptions::PRFInput::PRFInput(const PRFInput&) = default;
-CtapGetAssertionOptions::PRFInput::PRFInput(PRFInput&&) = default;
-CtapGetAssertionOptions::PRFInput::~PRFInput() = default;
+PRFInput::PRFInput() = default;
+PRFInput::PRFInput(const PRFInput&) = default;
+PRFInput::PRFInput(PRFInput&&) = default;
+PRFInput& PRFInput::operator=(const PRFInput&) = default;
+PRFInput::~PRFInput() = default;
+
+bool operator<(const PRFInput& a, const PRFInput& b) {
+  if (!a.credential_id.has_value()) {
+    return b.credential_id.has_value();
+  }
+  if (!b.credential_id.has_value()) {
+    return false;
+  }
+  return a.credential_id.value() < b.credential_id.value();
+}
 
 CtapGetAssertionRequest::HMACSecret::HMACSecret(
     base::span<const uint8_t, kP256X962Length> in_public_key_x962,
@@ -181,18 +234,53 @@
         if (!request.device_public_key) {
           return absl::nullopt;
         }
+      } else if (extension_id == kExtensionPRF) {
+        if (!extension.second.is_map()) {
+          return absl::nullopt;
+        }
+        const cbor::Value::MapValue& prf = extension.second.GetMap();
+        const auto eval_it = prf.find(cbor::Value(kExtensionPRFEval));
+        if (eval_it != prf.end()) {
+          absl::optional<PRFInput> input = CBORToPRFInput(eval_it->second);
+          if (!input) {
+            return absl::nullopt;
+          }
+          request.prf_inputs.emplace_back(std::move(*input));
+        }
+        const auto by_cred_it =
+            prf.find(cbor::Value(kExtensionPRFEvalByCredential));
+        if (by_cred_it != prf.end()) {
+          if (!by_cred_it->second.is_map()) {
+            return absl::nullopt;
+          }
+          const cbor::Value::MapValue& by_cred = by_cred_it->second.GetMap();
+          for (const auto& cred : by_cred) {
+            absl::optional<PRFInput> input = CBORToPRFInput(cred.second);
+            if (!input || !cred.first.is_bytestring()) {
+              return absl::nullopt;
+            }
+            input->credential_id = cred.first.GetBytestring();
+            if (input->credential_id->empty()) {
+              return absl::nullopt;
+            }
+            request.prf_inputs.emplace_back(std::move(*input));
+          }
+        }
+        std::sort(request.prf_inputs.begin(), request.prf_inputs.end());
       }
     }
   }
 
   const auto option_it = request_map.find(cbor::Value(5));
   if (option_it != request_map.end()) {
-    if (!option_it->second.is_map())
+    if (!option_it->second.is_map()) {
       return absl::nullopt;
+    }
 
     const auto& option_map = option_it->second.GetMap();
-    if (!IsGetAssertionOptionMapFormatCorrect(option_map))
+    if (!IsGetAssertionOptionMapFormatCorrect(option_map)) {
       return absl::nullopt;
+    }
 
     const auto user_presence_option =
         option_map.find(cbor::Value(kUserPresenceMapKey));
@@ -297,6 +385,22 @@
                        request.device_public_key->ToCBOR());
   }
 
+  if (!request.prf_inputs.empty()) {
+    cbor::Value::MapValue prf;
+    cbor::Value::MapValue by_cred;
+    for (const auto& input : request.prf_inputs) {
+      if (!input.credential_id.has_value()) {
+        prf.emplace(kExtensionPRFEval, PRFInputToCBOR(input));
+      } else {
+        by_cred.emplace(*input.credential_id, PRFInputToCBOR(input));
+      }
+    }
+    if (!by_cred.empty()) {
+      prf.emplace(kExtensionPRFEvalByCredential, std::move(by_cred));
+    }
+    extensions.emplace(kExtensionPRF, std::move(prf));
+  }
+
   if (!extensions.empty()) {
     cbor_map[cbor::Value(4)] = cbor::Value(std::move(extensions));
   }
diff --git a/device/fido/ctap_get_assertion_request.h b/device/fido/ctap_get_assertion_request.h
index 28bbd0b2..07607b4 100644
--- a/device/fido/ctap_get_assertion_request.h
+++ b/device/fido/ctap_get_assertion_request.h
@@ -27,6 +27,20 @@
 
 namespace device {
 
+// PRFInput contains salts for the hmac-secret or prf extension, potentially
+// specific to a given credential ID.
+struct COMPONENT_EXPORT(DEVICE_FIDO) PRFInput {
+  PRFInput();
+  PRFInput(const PRFInput&);
+  PRFInput(PRFInput&&);
+  PRFInput& operator=(const PRFInput&);
+  ~PRFInput();
+
+  absl::optional<std::vector<uint8_t>> credential_id;
+  std::array<uint8_t, 32> salt1;
+  absl::optional<std::array<uint8_t, 32>> salt2;
+};
+
 // CtapGetAssertionOptions contains values that are pertinent to a
 // |GetAssertionTask|, but are not specific to an individual
 // authenticatorGetAssertion command, i.e. would not be directly serialised into
@@ -37,19 +51,6 @@
   CtapGetAssertionOptions(CtapGetAssertionOptions&&);
   ~CtapGetAssertionOptions();
 
-  // PRFInput contains salts for the hmac_secret extension, potentially specific
-  // to a given credential ID.
-  struct COMPONENT_EXPORT(DEVICE_FIDO) PRFInput {
-    PRFInput();
-    PRFInput(const PRFInput&);
-    PRFInput(PRFInput&&);
-    ~PRFInput();
-
-    absl::optional<std::vector<uint8_t>> credential_id;
-    std::array<uint8_t, 32> salt1;
-    absl::optional<std::array<uint8_t, 32>> salt2;
-  };
-
   // The PUAT used for the request. The caller is expected to set this if needed
   // with the correct permissions. Obtain from |FidoAuthenticator::GetPINToken|.
   absl::optional<pin::TokenResponse> pin_uv_auth_token;
@@ -138,6 +139,16 @@
   bool large_blob_key = false;
   bool get_cred_blob = false;
 
+  // prf_inputs is non-empty if the `prf` extension is contained in the request.
+  // The WebAuthn-level `prf` extension is implemented at the CTAP level by
+  // either the `hmac-secret` extension or the `prf` extension. Security keys
+  // generally only implement `hmac-secret` and, in this case, values are
+  // set in the `CtapGetAssertionOptions` so that the `GetAssertionTask` can
+  // send the multiple requests needed to process them. "Large" authenticators,
+  // e.g. phones, want all the inputs at once and thus process the CTAP-level
+  // `prf` extension.
+  std::vector<PRFInput> prf_inputs;
+
   // device_public_key contains parameters for the devicePubKey extension
   // https://github.com/w3c/webauthn/pull/1663
   absl::optional<DevicePublicKeyRequest> device_public_key;
diff --git a/device/fido/ctap_make_credential_request.cc b/device/fido/ctap_make_credential_request.cc
index 61665a0e..0f8d9cc 100644
--- a/device/fido/ctap_make_credential_request.cc
+++ b/device/fido/ctap_make_credential_request.cc
@@ -168,6 +168,11 @@
           return absl::nullopt;
         }
         request.hmac_secret = extension.second.GetBool();
+      } else if (extension_name == kExtensionPRF) {
+        if (!extension.second.is_map()) {
+          return absl::nullopt;
+        }
+        request.prf = true;
       } else if (extension_name == kExtensionLargeBlobKey) {
         if (!extension.second.is_bool() || !extension.second.GetBool()) {
           return absl::nullopt;
@@ -293,6 +298,10 @@
     extensions[cbor::Value(kExtensionHmacSecret)] = cbor::Value(true);
   }
 
+  if (request.prf) {
+    extensions.emplace(kExtensionPRF, cbor::Value::MapValue());
+  }
+
   if (request.large_blob_key) {
     extensions[cbor::Value(kExtensionLargeBlobKey)] = cbor::Value(true);
   }
diff --git a/device/fido/ctap_make_credential_request.h b/device/fido/ctap_make_credential_request.h
index 82b4916..a0f1ce3a 100644
--- a/device/fido/ctap_make_credential_request.h
+++ b/device/fido/ctap_make_credential_request.h
@@ -77,6 +77,10 @@
   // asserted to CTAP2 authenticators.
   bool hmac_secret = false;
 
+  // prf indicates that the "prf" extension should be asserted to request that
+  // the authenticator associate a PRF with the credential.
+  bool prf = false;
+
   // large_blob_key indicates whether a large blob key should be associated to
   // the new credential through the "largeBlobKey" extension.
   bool large_blob_key = false;
diff --git a/device/fido/device_response_converter.cc b/device/fido/device_response_converter.cc
index 4fb57c36..8189069 100644
--- a/device/fido/device_response_converter.cc
+++ b/device/fido/device_response_converter.cc
@@ -130,6 +130,18 @@
           return absl::nullopt;
         }
         response.device_public_key_signature = map_it.second.GetBytestring();
+      } else if (map_it.first.GetString() == kExtensionPRF) {
+        if (!map_it.second.is_map()) {
+          return absl::nullopt;
+        }
+        const cbor::Value::MapValue& prf = map_it.second.GetMap();
+        const auto enabled_it = prf.find(cbor::Value(kExtensionPRFEnabled));
+        if (enabled_it != prf.end()) {
+          if (!enabled_it->second.is_bool()) {
+            return absl::nullopt;
+          }
+          response.prf_enabled = enabled_it->second.GetBool();
+        }
       }
     }
   }
@@ -222,11 +234,47 @@
       if (!map_it.first.is_string()) {
         return absl::nullopt;
       }
-      if (map_it.first.GetString() == kExtensionDevicePublicKey) {
+      const std::string& extension_name = map_it.first.GetString();
+      if (extension_name == kExtensionDevicePublicKey) {
         if (!map_it.second.is_bytestring()) {
           return absl::nullopt;
         }
         response.device_public_key_signature = map_it.second.GetBytestring();
+      } else if (extension_name == kExtensionPRF) {
+        if (!map_it.second.is_map()) {
+          return absl::nullopt;
+        }
+        const cbor::Value::MapValue& prf = map_it.second.GetMap();
+        auto results_it = prf.find(cbor::Value(kExtensionPRFResults));
+        if (results_it != prf.end()) {
+          if (!results_it->second.is_map()) {
+            return absl::nullopt;
+          }
+          const cbor::Value::MapValue& results = results_it->second.GetMap();
+          auto first = results.find(cbor::Value(kExtensionPRFFirst));
+          if (first == results.end() || !first->second.is_bytestring()) {
+            return absl::nullopt;
+          }
+          std::vector<uint8_t> output = first->second.GetBytestring();
+          if (output.size() != kExtensionPRFOutputSize) {
+            return absl::nullopt;
+          }
+
+          auto second = results.find(cbor::Value(kExtensionPRFSecond));
+          if (second != results.end()) {
+            if (!second->second.is_bytestring()) {
+              return absl::nullopt;
+            }
+            const std::vector<uint8_t>& second_bytes =
+                second->second.GetBytestring();
+            if (second_bytes.size() != kExtensionPRFOutputSize) {
+              return absl::nullopt;
+            }
+            output.insert(output.end(), second_bytes.begin(),
+                          second_bytes.end());
+          }
+          response.hmac_secret = std::move(output);
+        }
       }
     }
   }
@@ -338,6 +386,8 @@
         options.supports_hmac_secret = true;
       } else if (extension_str == kExtensionDevicePublicKey) {
         options.supports_device_public_key = true;
+      } else if (extension_str == kExtensionPRF) {
+        options.supports_prf = true;
       }
       extensions.push_back(extension_str);
     }
diff --git a/device/fido/fido_constants.cc b/device/fido/fido_constants.cc
index c8f80c6..deacb2d8 100644
--- a/device/fido/fido_constants.cc
+++ b/device/fido/fido_constants.cc
@@ -76,6 +76,14 @@
 const char kExtensionCredBlob[] = "credBlob";
 const char kExtensionMinPINLength[] = "minPinLength";
 const char kExtensionDevicePublicKey[] = "devicePubKey";
+const char kExtensionPRF[] = "prf";
+
+const char kExtensionPRFEnabled[] = "enabled";
+const char kExtensionPRFEval[] = "eval";
+const char kExtensionPRFEvalByCredential[] = "evalByCredential";
+const char kExtensionPRFFirst[] = "first";
+const char kExtensionPRFResults[] = "results";
+const char kExtensionPRFSecond[] = "second";
 
 const char kDevicePublicKeyAttestationKey[] = "attestation";
 const char kDevicePublicKeyAttestationFormatsKey[] = "attestationFormats";
diff --git a/device/fido/fido_constants.h b/device/fido/fido_constants.h
index 012e552..cf7b6b8 100644
--- a/device/fido/fido_constants.h
+++ b/device/fido/fido_constants.h
@@ -452,6 +452,16 @@
 COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionCredBlob[];
 COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionMinPINLength[];
 COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionDevicePublicKey[];
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRF[];
+
+// Constants for the prf extension
+constexpr size_t kExtensionPRFOutputSize = 32;
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRFEnabled[];
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRFEval[];
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRFEvalByCredential[];
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRFFirst[];
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRFResults[];
+COMPONENT_EXPORT(DEVICE_FIDO) extern const char kExtensionPRFSecond[];
 
 // Map keys for the device public key extension.
 COMPONENT_EXPORT(DEVICE_FIDO)
diff --git a/device/fido/get_assertion_request_handler.cc b/device/fido/get_assertion_request_handler.cc
index 7f8115f..5a53d84 100644
--- a/device/fido/get_assertion_request_handler.cc
+++ b/device/fido/get_assertion_request_handler.cc
@@ -275,6 +275,7 @@
 
 CtapGetAssertionRequest SpecializeRequestForAuthenticator(
     const CtapGetAssertionRequest& request,
+    const CtapGetAssertionOptions& options,
     const FidoAuthenticator& authenticator) {
   CtapGetAssertionRequest specialized_request(request);
 
@@ -290,6 +291,9 @@
       !authenticator.Options().supports_device_public_key) {
     specialized_request.device_public_key.reset();
   }
+  if (!options.prf_inputs.empty() && authenticator.Options().supports_prf) {
+    specialized_request.prf_inputs = options.prf_inputs;
+  }
   return specialized_request;
 }
 
@@ -299,7 +303,8 @@
   CtapGetAssertionOptions specialized_options(options);
 
   if (!options.prf_inputs.empty() &&
-      !authenticator.Options().supports_hmac_secret) {
+      (!authenticator.Options().supports_hmac_secret ||
+       authenticator.Options().supports_prf)) {
     specialized_options.prf_inputs.clear();
   }
 
@@ -422,7 +427,7 @@
   }
 
   CtapGetAssertionRequest request =
-      SpecializeRequestForAuthenticator(request_, *authenticator);
+      SpecializeRequestForAuthenticator(request_, options_, *authenticator);
   CtapGetAssertionOptions options =
       SpecializeOptionsForAuthenticator(options_, *authenticator);
   PINUVDisposition uv_disposition =
@@ -743,7 +748,7 @@
   options_.pin_uv_auth_token = std::move(token);
   state_ = State::kWaitingForResponseWithToken;
   CtapGetAssertionRequest request = SpecializeRequestForAuthenticator(
-      request_, *selected_authenticator_for_pin_uv_auth_token_);
+      request_, options_, *selected_authenticator_for_pin_uv_auth_token_);
   CtapGetAssertionOptions options = SpecializeOptionsForAuthenticator(
       options_, *selected_authenticator_for_pin_uv_auth_token_);
 
diff --git a/device/fido/get_assertion_task.cc b/device/fido/get_assertion_task.cc
index 8296a51..694810c 100644
--- a/device/fido/get_assertion_task.cc
+++ b/device/fido/get_assertion_task.cc
@@ -66,8 +66,7 @@
 }
 
 // GetDefaultPRFInput returns the default PRF input from |options|, if any.
-const CtapGetAssertionOptions::PRFInput* GetDefaultPRFInput(
-    const CtapGetAssertionOptions& options) {
+const PRFInput* GetDefaultPRFInput(const CtapGetAssertionOptions& options) {
   if (options.prf_inputs.empty() ||
       options.prf_inputs[0].credential_id.has_value()) {
     return nullptr;
@@ -78,9 +77,8 @@
 // GetPRFInputForCredential returns the PRF input specific to the given
 // credential ID from |options|, or the default PRF input if there's nothing
 // specific for |id|, or |nullptr| if there's not a default value.
-const CtapGetAssertionOptions::PRFInput* GetPRFInputForCredential(
-    const CtapGetAssertionOptions& options,
-    const std::vector<uint8_t>& id) {
+const PRFInput* GetPRFInputForCredential(const CtapGetAssertionOptions& options,
+                                         const std::vector<uint8_t>& id) {
   for (const auto& prf_input : options.prf_inputs) {
     if (prf_input.credential_id == id) {
       return &prf_input;
@@ -274,22 +272,16 @@
     if (response_data->user_selected && !allow_list.empty()) {
       // The userSelected signal is only valid if the request had an empty
       // allowList.
-      FIDO_LOG(DEBUG)
-          << "Assertion response has userSelected for non-empty allowList";
-      std::move(callback_).Run(CtapDeviceResponseCode::kCtap2ErrOther,
-                               absl::nullopt);
-      return;
+      return LogAndFail(
+          "Assertion response has userSelected for non-empty allowList");
     }
 
     if (!SetResponseCredential(&response_data.value(), allow_list)) {
-      FIDO_LOG(DEBUG)
-          << "Assertion response has invalid credential information";
-      std::move(callback_).Run(CtapDeviceResponseCode::kCtap2ErrOther,
-                               absl::nullopt);
-      return;
+      return LogAndFail(
+          "Assertion response has invalid credential information");
     }
 
-    // Decrypt any hmac-secret response.
+    // Extract any hmac-secret or prf response.
     const absl::optional<cbor::Value>& extensions_cbor =
         response_data->authenticator_data.extensions();
     if (extensions_cbor) {
@@ -298,18 +290,16 @@
       auto it = extensions.find(cbor::Value(kExtensionHmacSecret));
       if (it != extensions.end()) {
         if (!hmac_secret_request_ || !it->second.is_bytestring()) {
-          FIDO_LOG(DEBUG) << "Unexpected or invalid hmac_secret extension";
-          std::move(callback_).Run(CtapDeviceResponseCode::kCtap2ErrOther,
-                                   absl::nullopt);
-          return;
+          return LogAndFail("Unexpected or invalid hmac-secret extension");
+        }
+        if (response_data->hmac_secret.has_value()) {
+          return LogAndFail(
+              "Assertion response has both hmac-secret and prf extensions");
         }
         absl::optional<std::vector<uint8_t>> plaintext =
             hmac_secret_request_->Decrypt(it->second.GetBytestring());
         if (!plaintext) {
-          FIDO_LOG(DEBUG) << "Failed to decrypt hmac_secret extension";
-          std::move(callback_).Run(CtapDeviceResponseCode::kCtap2ErrOther,
-                                   absl::nullopt);
-          return;
+          return LogAndFail("Failed to decrypt hmac-secret extension");
         }
         response_data->hmac_secret = std::move(plaintext.value());
       }
@@ -398,9 +388,8 @@
                            absl::nullopt);
 }
 
-void GetAssertionTask::MaybeSetPRFParameters(
-    CtapGetAssertionRequest* request,
-    const CtapGetAssertionOptions::PRFInput* maybe_inputs) {
+void GetAssertionTask::MaybeSetPRFParameters(CtapGetAssertionRequest* request,
+                                             const PRFInput* maybe_inputs) {
   if (maybe_inputs == nullptr) {
     return;
   }
@@ -425,4 +414,10 @@
   std::move(callback_).Run(status, std::move(response));
 }
 
+void GetAssertionTask::LogAndFail(const char* error) {
+  FIDO_LOG(DEBUG) << error;
+  std::move(callback_).Run(CtapDeviceResponseCode::kCtap2ErrOther,
+                           absl::nullopt);
+}
+
 }  // namespace device
diff --git a/device/fido/get_assertion_task.h b/device/fido/get_assertion_task.h
index 0d8be269f..42862202 100644
--- a/device/fido/get_assertion_task.h
+++ b/device/fido/get_assertion_task.h
@@ -89,14 +89,15 @@
       CtapDeviceResponseCode response_code,
       absl::optional<AuthenticatorMakeCredentialResponse> response_data);
 
-  void MaybeSetPRFParameters(
-      CtapGetAssertionRequest* request,
-      const CtapGetAssertionOptions::PRFInput* maybe_inputs);
+  void MaybeSetPRFParameters(CtapGetAssertionRequest* request,
+                             const PRFInput* maybe_inputs);
 
   void MaybeRevertU2fFallbackAndInvokeCallback(
       CtapDeviceResponseCode status,
       absl::optional<AuthenticatorGetAssertionResponse> response);
 
+  void LogAndFail(const char* error);
+
   CtapGetAssertionRequest request_;
   CtapGetAssertionOptions options_;
   std::vector<std::vector<PublicKeyCredentialDescriptor>> allow_list_batches_;
diff --git a/device/fido/make_credential_request_handler.cc b/device/fido/make_credential_request_handler.cc
index 7a4e52b4..c29ef7e 100644
--- a/device/fido/make_credential_request_handler.cc
+++ b/device/fido/make_credential_request_handler.cc
@@ -1016,8 +1016,10 @@
     request->cred_protect_enforce = options_.cred_protect_request->second;
   }
 
-  if (request->hmac_secret && !auth_options.supports_hmac_secret) {
-    request->hmac_secret = false;
+  if (request->hmac_secret) {
+    request->prf = auth_options.supports_prf;
+    request->hmac_secret =
+        !auth_options.supports_prf && auth_options.supports_hmac_secret;
   }
 
   if (request->large_blob_key && !auth_options.supports_large_blobs) {
diff --git a/device/fido/virtual_ctap2_device.cc b/device/fido/virtual_ctap2_device.cc
index e3d16d4e..fb950bc 100644
--- a/device/fido/virtual_ctap2_device.cc
+++ b/device/fido/virtual_ctap2_device.cc
@@ -159,7 +159,8 @@
     AuthenticatorData authenticator_data,
     bool enterprise_attestation_requested,
     absl::optional<std::array<uint8_t, kLargeBlobKeyLength>> large_blob_key,
-    const absl::optional<std::vector<uint8_t>>& dpk_signature) {
+    const absl::optional<std::vector<uint8_t>>& dpk_signature,
+    bool prf_enabled) {
   std::unique_ptr<OpaqueAttestationStatement> attestation_statement;
   if (!signature.empty()) {
     cbor::Value::MapValue attestation_map;
@@ -189,6 +190,7 @@
       large_blob_key.has_value();
   make_credential_response.device_public_key_signature =
       std::move(dpk_signature);
+  make_credential_response.prf_enabled = prf_enabled;
   return AsCTAPStyleCBORBytes(make_credential_response);
 }
 
@@ -445,11 +447,34 @@
   if (response.large_blob_key) {
     response_map.emplace(7, cbor::Value(*response.large_blob_key));
   }
+
+  cbor::Value::MapValue unsigned_extension_outputs;
   if (response.device_public_key_signature) {
-    cbor::Value::MapValue unsigned_extension_outputs;
     unsigned_extension_outputs.emplace(
         kExtensionDevicePublicKey,
         cbor::Value(*response.device_public_key_signature));
+  }
+  if (response.hmac_secret) {
+    // This is actually the output of the PRF extension because the hmac-secret
+    // output is carried in the authenticator data.
+    const std::vector<uint8_t>& outputs = *response.hmac_secret;
+    cbor::Value::MapValue prf_results;
+    if (outputs.size() == 32) {
+      prf_results.emplace(kExtensionPRFFirst, std::move(outputs));
+    } else {
+      CHECK_EQ(outputs.size(), 64u);
+      prf_results.emplace(kExtensionPRFFirst,
+                          std::vector<uint8_t>(&outputs[0], &outputs[32]));
+      prf_results.emplace(
+          kExtensionPRFSecond,
+          std::vector<uint8_t>(outputs.begin() + 32, outputs.end()));
+    }
+
+    cbor::Value::MapValue prf;
+    prf.emplace(kExtensionPRFResults, std::move(prf_results));
+    unsigned_extension_outputs.emplace(kExtensionPRF, std::move(prf));
+  }
+  if (!unsigned_extension_outputs.empty()) {
     response_map.emplace(8, cbor::Value(std::move(unsigned_extension_outputs)));
   }
 
@@ -477,6 +502,29 @@
   return true;
 }
 
+std::vector<uint8_t> EvaluateHMAC(
+    base::span<const uint8_t> hmac_key,
+    const std::array<uint8_t, 32>& hmac_salt1,
+    const absl::optional<std::array<uint8_t, 32>>& hmac_salt2) {
+  uint8_t hmac_result[SHA256_DIGEST_LENGTH];
+  unsigned hmac_out_length;
+  HMAC(EVP_sha256(), hmac_key.data(), hmac_key.size(), hmac_salt1.data(),
+       hmac_salt1.size(), hmac_result, &hmac_out_length);
+  CHECK_EQ(hmac_out_length, sizeof(hmac_result));
+
+  std::vector<uint8_t> outputs;
+  outputs.insert(outputs.end(), std::begin(hmac_result), std::end(hmac_result));
+
+  if (hmac_salt2) {
+    HMAC(EVP_sha256(), hmac_key.data(), hmac_key.size(), hmac_salt2->data(),
+         hmac_salt2->size(), hmac_result, &hmac_out_length);
+    CHECK_EQ(hmac_out_length, sizeof(hmac_result));
+    outputs.insert(outputs.end(), std::begin(hmac_result),
+                   std::end(hmac_result));
+  }
+  return outputs;
+}
+
 }  // namespace
 
 VirtualCtap2Device::Config::Config() = default;
@@ -623,6 +671,12 @@
     extensions.emplace_back(device::kExtensionHmacSecret);
   }
 
+  if (config.prf_support) {
+    DCHECK(!config.hmac_secret_support);
+    DCHECK(config.internal_account_chooser);
+    extensions.emplace_back(device::kExtensionPRF);
+  }
+
   if (config.cred_blob_support) {
     extensions.emplace_back(device::kExtensionCredBlob);
     device_info_->options.max_cred_blob_length = kMaxCredBlob;
@@ -1230,6 +1284,9 @@
                            cbor::Value(true));
   }
 
+  const bool prf_enabled = request.prf;
+  CHECK(!prf_enabled || config_.prf_support);
+
   CredProtect cred_protect = config_.default_cred_protect;
   if (request.cred_protect) {
     cred_protect = *request.cred_protect;
@@ -1380,7 +1437,7 @@
 
   *response = ConstructMakeCredentialResponse(
       std::move(attestation_cert), sig, std::move(authenticator_data),
-      enterprise_attestation_requested, large_blob_key, dpk_sig);
+      enterprise_attestation_requested, large_blob_key, dpk_sig, prf_enabled);
   RegistrationData registration(std::move(private_key), rp_id_hash,
                                 /*counter=*/1);
 
@@ -1413,7 +1470,7 @@
   registration.protection = cred_protect;
   registration.device_key = std::move(device_key);
 
-  if (request.hmac_secret) {
+  if (request.hmac_secret || prf_enabled) {
     registration.hmac_key.emplace();
     RAND_bytes(registration.hmac_key->first.data(),
                registration.hmac_key->first.size());
@@ -1655,24 +1712,8 @@
           hmac_keys = *registration.second->hmac_key;
       const std::array<uint8_t, 32>& hmac_key =
           user_verified ? hmac_keys.second : hmac_keys.first;
-
-      unsigned hmac_out_length;
-      uint8_t hmac_result[SHA256_DIGEST_LENGTH];
-      std::vector<uint8_t> outputs;
-
-      HMAC(EVP_sha256(), hmac_key.data(), hmac_key.size(), hmac_salt1->data(),
-           hmac_salt1->size(), hmac_result, &hmac_out_length);
-      DCHECK_EQ(hmac_out_length, sizeof(hmac_result));
-      outputs.insert(outputs.end(), &hmac_result[0],
-                     &hmac_result[sizeof(hmac_result)]);
-
-      if (hmac_salt2) {
-        HMAC(EVP_sha256(), hmac_key.data(), hmac_key.size(), hmac_salt2->data(),
-             hmac_salt2->size(), hmac_result, &hmac_out_length);
-        DCHECK_EQ(hmac_out_length, sizeof(hmac_result));
-        outputs.insert(outputs.end(), &hmac_result[0],
-                       &hmac_result[sizeof(hmac_result)]);
-      }
+      const std::vector<uint8_t> outputs =
+          EvaluateHMAC(hmac_key, *hmac_salt1, hmac_salt2);
 
       std::vector<uint8_t> encrypted_outputs =
           pin::ProtocolVersion(*request.pin_protocol)
@@ -1775,6 +1816,27 @@
       }
     }
 
+    if (!request.prf_inputs.empty() && user_verified &&
+        registration.second->hmac_key) {
+      DCHECK(!request.hmac_secret);
+      const PRFInput* selected_input = nullptr;
+      for (const auto& input : request.prf_inputs) {
+        if (!input.credential_id) {
+          selected_input = &input;
+        } else if (std::equal(
+                       input.credential_id->begin(), input.credential_id->end(),
+                       registration.first.begin(), registration.first.end())) {
+          selected_input = &input;
+        }
+      }
+
+      if (selected_input) {
+        assertion.hmac_secret =
+            EvaluateHMAC(registration.second->hmac_key->second,
+                         selected_input->salt1, selected_input->salt2);
+      }
+    }
+
     if (request.device_public_key &&
         !config_.device_public_key_drop_signature) {
       assertion.device_public_key_signature =
diff --git a/device/fido/virtual_ctap2_device.h b/device/fido/virtual_ctap2_device.h
index 34c2eec4..b394a24 100644
--- a/device/fido/virtual_ctap2_device.h
+++ b/device/fido/virtual_ctap2_device.h
@@ -71,6 +71,7 @@
     uint8_t bio_enrollment_samples_required = 4;
     bool cred_protect_support = false;
     bool hmac_secret_support = false;
+    bool prf_support = false;
     bool large_blob_support = false;
     // Support for setting a min PIN length and forcing pin change.
     bool min_pin_length_support = false;
diff --git a/device/fido/win/webauthn_api.cc b/device/fido/win/webauthn_api.cc
index b6a6b2ca5..4460dd1 100644
--- a/device/fido/win/webauthn_api.cc
+++ b/device/fido/win/webauthn_api.cc
@@ -43,7 +43,7 @@
 // HMAC salt values, using `salts_storage` to own the returned pointer.
 WEBAUTHN_HMAC_SECRET_SALT* FillHMACSalts(
     std::vector<WEBAUTHN_HMAC_SECRET_SALT>* salts_storage,
-    const CtapGetAssertionOptions::PRFInput& input) {
+    const PRFInput& input) {
   const WEBAUTHN_HMAC_SECRET_SALT salts{
       base::checked_cast<DWORD>(input.salt1.size()),
       const_cast<PBYTE>(input.salt1.data()),
@@ -62,7 +62,7 @@
     WEBAUTHN_HMAC_SECRET_SALT_VALUES* values_storage,
     std::vector<WEBAUTHN_HMAC_SECRET_SALT>* salts_storage,
     std::vector<WEBAUTHN_CRED_WITH_HMAC_SECRET_SALT>* cred_salts_storage,
-    const std::vector<CtapGetAssertionOptions::PRFInput>& inputs) {
+    const std::vector<PRFInput>& inputs) {
   if (inputs.empty()) {
     return nullptr;
   }
diff --git a/docs/android_build_instructions.md b/docs/android_build_instructions.md
index b6568cf..9f71751 100644
--- a/docs/android_build_instructions.md
+++ b/docs/android_build_instructions.md
@@ -183,21 +183,18 @@
 depending on the version of Android running on a device. Chrome uses this
 feature to package optimized versions for different OS versions.
 
-1. `chrome_modern_public_bundle` (ChromeModernPublic.aab)
-   * `minSdkVersion=24` (Nougat).
-   * WebView packaged independently (`system_webview_bundle`).
-2. `monochrome_public_bundle` (MonochromePublic.aab)
+1. `monochrome_public_bundle` (MonochromePublic.aab)
    * `minSdkVersion=24` (Nougat).
    * Contains both Chrome and WebView (to save disk space).
-3. `trichrome_chrome_bundle` (TrichromeChrome.aab)
+2. `trichrome_chrome_bundle` (TrichromeChrome.aab)
    * `minSdkVersion=29` (Android 10).
    * Native code shared with WebView through a "Static Shared Library APK": `trichrome_library_apk` 
    * Corresponding WebView target: `trichrome_webview_bundle`
-4. `chrome_public_apk` (ChromePublic.apk)
+3. `chrome_public_apk` (ChromePublic.apk)
+   * `minSdkVersion=24` (Nougat).
+   * WebView packaged independently (`system_webview_apk`).
    * Used for only local development and tests (simpler than using bundle
      targets).
-   * Same configuration as chrome_modern_public_bundle, except without
-     separating things into modules.
 
 *** note
 **Notes:**
diff --git a/docs/ios/build_instructions.md b/docs/ios/build_instructions.md
index e45bfcb5..c3680e7 100644
--- a/docs/ios/build_instructions.md
+++ b/docs/ios/build_instructions.md
@@ -265,7 +265,7 @@
 ```
 
 To run on a live device you will need to set the
-`com.apple.developer.kernel.extended-virtual-addressing` entitlement. 
+`com.apple.developer.kernel.extended-virtual-addressing` entitlement.
 
 ## Running apps from the command line
 
diff --git a/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc b/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc
index e83dce0..1e70198 100644
--- a/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/angle_vulkan_image_backing.cc
@@ -530,13 +530,11 @@
   }
 
   scoped_refptr<gles2::TexturePassthrough> passthrough_texture;
-  GLTextureImageBackingHelper::MakeTextureAndSetParameters(
-      GL_TEXTURE_2D, /*service_id=*/0,
+  GLuint texture = GLTextureImageBackingHelper::MakeTextureAndSetParameters(
+      GL_TEXTURE_2D,
       /*framebuffer_attachment_angle=*/true, &passthrough_texture, nullptr);
   passthrough_texture->SetEstimatedSize(GetEstimatedSize());
 
-  GLuint texture = passthrough_texture->service_id();
-
   gl::GLApi* api = gl::g_current_gl_context;
   ScopedRestoreTexture scoped_restore(api, GL_TEXTURE_2D);
   api->glBindTextureFn(GL_TEXTURE_2D, texture);
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc b/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc
index 5684a88d..0f552e1 100644
--- a/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc
@@ -339,16 +339,14 @@
   if (texture_) {
     // Ensure that a context is current before removing the ref and calling
     // glDeleteTextures.
-    if (!gl::GLContext::GetCurrent())
-      context_state()->MakeCurrent(nullptr, true /* need_gl */);
+    MakeGLContextCurrent();
     texture_->RemoveLightweightRef(have_context());
   }
 
   if (texture_passthrough_) {
     // Ensure that a context is current before releasing |texture_passthrough_|,
     // it calls glDeleteTextures.
-    if (!gl::GLContext::GetCurrent())
-      context_state()->MakeCurrent(nullptr, true /* need_gl */);
+    MakeGLContextCurrent();
     if (!have_context())
       texture_passthrough_->MarkContextLost();
     texture_passthrough_ = nullptr;
@@ -385,8 +383,7 @@
     GLuint texture_id = texture_passthrough_
                             ? texture_passthrough_->service_id()
                             : texture_->service_id();
-    if (!gl::GLContext::GetCurrent())
-      context_state()->MakeCurrent(/*gl_surface=*/nullptr, /*needs_gl=*/true);
+    MakeGLContextCurrent();
 
     GrVkImageInfo info;
     auto result = backend_texture_.getVkImageInfo(&info);
@@ -479,8 +476,7 @@
     GLuint texture_id = texture_passthrough_
                             ? texture_passthrough_->service_id()
                             : texture_->service_id();
-    if (!gl::GLContext::GetCurrent())
-      context_state()->MakeCurrent(/*gl_surface=*/nullptr, /*needs_gl=*/true);
+    MakeGLContextCurrent();
     std::vector<ExternalSemaphore> external_semaphores;
     BeginAccessInternal(true, &external_semaphores);
     DCHECK_LE(external_semaphores.size(), 1u);
@@ -609,17 +605,26 @@
 #endif
 }
 
-GLuint ExternalVkImageBacking::ProduceGLTextureInternal() {
-  GrVkImageInfo image_info;
-  bool result = backend_texture_.getVkImageInfo(&image_info);
-  DCHECK(result);
+bool ExternalVkImageBacking::MakeGLContextCurrent() {
+  if (gl::GLContext::GetCurrent()) {
+    return true;
+  }
+  return context_state()->MakeCurrent(/*surface=*/nullptr, /*needs_gl=*/true);
+}
+
+bool ExternalVkImageBacking::ProduceGLTextureInternal(bool is_passthrough) {
   gl::GLApi* api = gl::g_current_gl_context;
   absl::optional<ScopedDedicatedMemoryObject> memory_object;
   if (!use_separate_gl_texture()) {
+    GrVkImageInfo image_info;
+    bool result = backend_texture_.getVkImageInfo(&image_info);
+    DCHECK(result);
+
 #if BUILDFLAG(IS_POSIX)
     auto memory_fd = image_->GetMemoryFd();
-    if (!memory_fd.is_valid())
-      return 0;
+    if (!memory_fd.is_valid()) {
+      return false;
+    }
     memory_object.emplace(api);
     api->glImportMemoryFdEXTFn(memory_object->id(), image_info.fAlloc.fSize,
                                GL_HANDLE_TYPE_OPAQUE_FD_EXT,
@@ -627,7 +632,7 @@
 #elif BUILDFLAG(IS_WIN)
     auto memory_handle = image_->GetMemoryHandle();
     if (!memory_handle.IsValid()) {
-      return 0;
+      return false;
     }
     memory_object.emplace(api);
     api->glImportMemoryWin32HandleEXTFn(
@@ -636,7 +641,7 @@
 #elif BUILDFLAG(IS_FUCHSIA)
     zx::vmo vmo = image_->GetMemoryZirconHandle();
     if (!vmo)
-      return 0;
+      return false;
     memory_object.emplace(api);
     api->glImportMemoryZirconHandleANGLEFn(
         memory_object->id(), image_info.fAlloc.fSize,
@@ -646,6 +651,13 @@
 #endif
   }
 
+  bool use_rgbx = context_state()
+                      ->feature_info()
+                      ->feature_flags()
+                      .angle_rgbx_internal_format;
+  GLFormatDesc format_desc =
+      ToGLFormatDesc(format(), /*plane_index=*/0, use_rgbx);
+
   GLuint texture_service_id = 0;
   api->glGenTexturesFn(1, &texture_service_id);
   gl::ScopedTextureBinder scoped_texture_binder(GL_TEXTURE_2D,
@@ -654,22 +666,20 @@
   api->glTexParameteriFn(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   api->glTexParameteriFn(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   api->glTexParameteriFn(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
   if (use_separate_gl_texture()) {
     DCHECK(!memory_object);
     if (UseTexStorage2D(context_state_.get())) {
-      bool use_rgbx = context_state()
-                          ->feature_info()
-                          ->feature_flags()
-                          .angle_rgbx_internal_format;
-      GLuint internal_format = TextureStorageFormat(format(), use_rgbx);
-      api->glTexStorage2DEXTFn(GL_TEXTURE_2D, 1, internal_format,
+      api->glTexStorage2DEXTFn(GL_TEXTURE_2D, 1,
+                               format_desc.storage_internal_format,
                                size().width(), size().height());
     } else {
       auto gl_format_info = GetGLFormatInfo(format());
       auto gl_format = gl_format_info.gl_format;
       auto gl_type = gl_format_info.gl_type;
-      if (gl_format == GL_ZERO || gl_type == GL_ZERO)
+      if (gl_format == GL_ZERO || gl_type == GL_ZERO) {
         LOG(FATAL) << "Not support format: " << format().ToString();
+      }
       api->glTexImage2DFn(GL_TEXTURE_2D, 0, gl_format, size().width(),
                           size().height(), 0, gl_format, gl_type, nullptr);
     }
@@ -682,23 +692,42 @@
     // when creating the image, so communicate that information to ANGLE.  This
     // makes sure that ANGLE recreates the VkImage identically to Chromium.
     DCHECK(image_->usage() != 0);
-    bool use_rgbx = context_state()
-                        ->feature_info()
-                        ->feature_flags()
-                        .angle_rgbx_internal_format;
-    GLuint internal_format = TextureStorageFormat(format(), use_rgbx);
     if (UseMinimalUsageFlags(context_state())) {
       api->glTexStorageMemFlags2DANGLEFn(
-          GL_TEXTURE_2D, 1, internal_format, size().width(), size().height(),
-          memory_object->id(), 0, image_->flags(), image_->usage(), nullptr);
+          GL_TEXTURE_2D, 1, format_desc.storage_internal_format, size().width(),
+          size().height(), memory_object->id(), 0, image_->flags(),
+          image_->usage(), nullptr);
     } else {
-      api->glTexStorageMem2DEXTFn(GL_TEXTURE_2D, 1, internal_format,
-                                  size().width(), size().height(),
-                                  memory_object->id(), 0);
+      api->glTexStorageMem2DEXTFn(
+          GL_TEXTURE_2D, 1, format_desc.storage_internal_format, size().width(),
+          size().height(), memory_object->id(), 0);
     }
   }
 
-  return texture_service_id;
+  if (is_passthrough) {
+    texture_passthrough_ = base::MakeRefCounted<gpu::gles2::TexturePassthrough>(
+        texture_service_id, GL_TEXTURE_2D, format_desc.storage_internal_format,
+        size().width(), size().height(),
+        /*depth=*/1, /*border=*/0, format_desc.data_format,
+        format_desc.data_type);
+
+  } else {
+    texture_ = gles2::CreateGLES2TextureWithLightRef(texture_service_id,
+                                                     GL_TEXTURE_2D);
+    // If the backing is already cleared, no need to clear it again.
+    gfx::Rect cleared_rect;
+    if (IsCleared()) {
+      cleared_rect = gfx::Rect(size());
+    }
+
+    texture_->SetLevelInfo(GL_TEXTURE_2D, 0,
+                           format_desc.storage_internal_format, size().width(),
+                           size().height(), 1, 0, format_desc.data_format,
+                           format_desc.data_type, cleared_rect);
+    texture_->SetImmutable(true, true);
+  }
+
+  return true;
 }
 
 std::unique_ptr<GLTextureImageRepresentation>
@@ -711,31 +740,12 @@
   }
 
   if (!texture_) {
-    GLuint texture_service_id = ProduceGLTextureInternal();
-    if (!texture_service_id)
+    if (!ProduceGLTextureInternal(/*is_passthrough=*/false)) {
       return nullptr;
-    bool use_rgbx = context_state()
-                        ->feature_info()
-                        ->feature_flags()
-                        .angle_rgbx_internal_format;
-    GLuint internal_format = TextureStorageFormat(format(), use_rgbx);
-    GLenum gl_format = GLDataFormat(format());
-    GLenum gl_type = GLDataType(format());
-
-    texture_ = gles2::CreateGLES2TextureWithLightRef(texture_service_id,
-                                                     GL_TEXTURE_2D);
-    // If the backing is already cleared, no need to clear it again.
-    gfx::Rect cleared_rect;
-    if (IsCleared())
-      cleared_rect = gfx::Rect(size());
-
-    texture_->SetLevelInfo(GL_TEXTURE_2D, 0, internal_format, size().width(),
-                           size().height(), 1, 0, gl_format, gl_type,
-                           cleared_rect);
-    texture_->SetImmutable(true, true);
+    }
   }
-  return std::make_unique<ExternalVkImageGLRepresentation>(
-      manager, this, tracker, texture_, texture_->service_id());
+  return std::make_unique<ExternalVkImageGLRepresentation>(manager, this,
+                                                           tracker, texture_);
 }
 
 std::unique_ptr<GLTexturePassthroughImageRepresentation>
@@ -749,25 +759,13 @@
   }
 
   if (!texture_passthrough_) {
-    GLuint texture_service_id = ProduceGLTextureInternal();
-    if (!texture_service_id)
+    if (!ProduceGLTextureInternal(/*is_passthrough=*/true)) {
       return nullptr;
-    bool use_rgbx = context_state()
-                        ->feature_info()
-                        ->feature_flags()
-                        .angle_rgbx_internal_format;
-    GLuint internal_format = TextureStorageFormat(format(), use_rgbx);
-    GLenum gl_format = GLDataFormat(format());
-    GLenum gl_type = GLDataType(format());
-
-    texture_passthrough_ = base::MakeRefCounted<gpu::gles2::TexturePassthrough>(
-        texture_service_id, GL_TEXTURE_2D, internal_format, size().width(),
-        size().height(),
-        /*depth=*/1, /*border=*/0, gl_format, gl_type);
+    }
   }
 
   return std::make_unique<ExternalVkImageGLPassthroughRepresentation>(
-      manager, this, tracker, texture_passthrough_->service_id());
+      manager, this, tracker, texture_passthrough_);
 }
 
 std::unique_ptr<SkiaImageRepresentation> ExternalVkImageBacking::ProduceSkia(
@@ -1059,9 +1057,9 @@
 
   // Make sure a gl context is current, since textures are shared between all gl
   // contexts, we don't care which gl context is current.
-  if (!gl::GLContext::GetCurrent() &&
-      !context_state_->MakeCurrent(nullptr, true /* needs_gl */))
+  if (!MakeGLContextCurrent()) {
     return;
+  }
 
   gl::GLApi* api = gl::g_current_gl_context;
   GLuint framebuffer;
@@ -1118,9 +1116,9 @@
 
   // Make sure a gl context is current, since textures are shared between all gl
   // contexts, we don't care which gl context is current.
-  if (!gl::GLContext::GetCurrent() &&
-      !context_state_->MakeCurrent(nullptr, true /* needs_gl */))
+  if (!MakeGLContextCurrent()) {
     return;
+  }
 
   gl::GLApi* api = gl::g_current_gl_context;
   base::CheckedNumeric<size_t> checked_size = bytes_per_pixel;
@@ -1170,9 +1168,9 @@
 
   // Make sure a gl context is current, since textures are shared between all gl
   // contexts, we don't care which gl context is current.
-  if (!gl::GLContext::GetCurrent() &&
-      !context_state_->MakeCurrent(nullptr, true /* needs_gl */))
+  if (!MakeGLContextCurrent()) {
     return;
+  }
 
   gl::GLApi* api = gl::g_current_gl_context;
   gl::ScopedTextureBinder scoped_texture_binder(GL_TEXTURE_2D,
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_backing.h b/gpu/command_buffer/service/shared_image/external_vk_image_backing.h
index e88ec74..7b3062d 100644
--- a/gpu/command_buffer/service/shared_image/external_vk_image_backing.h
+++ b/gpu/command_buffer/service/shared_image/external_vk_image_backing.h
@@ -81,10 +81,6 @@
     return promise_texture_;
   }
   VulkanImage* image() const { return image_.get(); }
-  const scoped_refptr<gles2::TexturePassthrough>& GetTexturePassthrough()
-      const {
-    return texture_passthrough_;
-  }
   viz::VulkanContextProvider* context_provider() const {
     return context_state()->vk_context_provider();
   }
@@ -173,8 +169,12 @@
       MemoryTypeTracker* tracker) override;
 
  private:
-  // Returns texture_service_id for ProduceGLTexture and GLTexturePassthrough.
-  GLuint ProduceGLTextureInternal();
+  // Makes GL context current if not already. Will return false if MakeCurrent()
+  // failed.
+  bool MakeGLContextCurrent();
+
+  // Allocates GL texture and returns true if successful.
+  bool ProduceGLTextureInternal(bool is_passthrough);
 
   using WriteBufferCallback = base::OnceCallback<void(void* buffer)>;
   // TODO(penghuang): Remove it when GrContext::updateBackendTexture() supports
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.cc b/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.cc
index 881c4797..33291e5 100644
--- a/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.cc
+++ b/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.cc
@@ -154,11 +154,10 @@
     SharedImageManager* manager,
     SharedImageBacking* backing,
     MemoryTypeTracker* tracker,
-    gles2::Texture* texture,
-    GLuint texture_service_id)
+    gles2::Texture* texture)
     : GLTextureImageRepresentation(manager, backing, tracker),
       texture_(texture),
-      representation_shared_(backing, texture_service_id) {
+      representation_shared_(backing, texture_->service_id()) {
   DCHECK(texture_);
 }
 
@@ -177,23 +176,25 @@
 }
 
 ExternalVkImageGLPassthroughRepresentation::
-    ExternalVkImageGLPassthroughRepresentation(SharedImageManager* manager,
-                                               SharedImageBacking* backing,
-                                               MemoryTypeTracker* tracker,
-                                               GLuint texture_service_id)
+    ExternalVkImageGLPassthroughRepresentation(
+        SharedImageManager* manager,
+        SharedImageBacking* backing,
+        MemoryTypeTracker* tracker,
+        scoped_refptr<gles2::TexturePassthrough> texture)
     : GLTexturePassthroughImageRepresentation(manager, backing, tracker),
-      representation_shared_(backing, texture_service_id) {
-  DCHECK(representation_shared_.backing_impl()->GetTexturePassthrough());
+      texture_(std::move(texture)),
+      representation_shared_(backing, texture_->service_id()) {
+  DCHECK(texture_);
 }
 
 ExternalVkImageGLPassthroughRepresentation::
-    ~ExternalVkImageGLPassthroughRepresentation() {}
+    ~ExternalVkImageGLPassthroughRepresentation() = default;
 
 const scoped_refptr<gles2::TexturePassthrough>&
 ExternalVkImageGLPassthroughRepresentation::GetTexturePassthrough(
     int plane_index) {
   DCHECK_EQ(plane_index, 0);
-  return representation_shared_.backing_impl()->GetTexturePassthrough();
+  return texture_;
 }
 
 bool ExternalVkImageGLPassthroughRepresentation::BeginAccess(GLenum mode) {
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.h b/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.h
index 4a79767..5461786 100644
--- a/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.h
+++ b/gpu/command_buffer/service/shared_image/external_vk_image_gl_representation.h
@@ -55,8 +55,7 @@
   ExternalVkImageGLRepresentation(SharedImageManager* manager,
                                   SharedImageBacking* backing,
                                   MemoryTypeTracker* tracker,
-                                  gles2::Texture* texture,
-                                  GLuint texture_service_id);
+                                  gles2::Texture* texture);
 
   ExternalVkImageGLRepresentation(const ExternalVkImageGLRepresentation&) =
       delete;
@@ -78,10 +77,11 @@
 class ExternalVkImageGLPassthroughRepresentation
     : public GLTexturePassthroughImageRepresentation {
  public:
-  ExternalVkImageGLPassthroughRepresentation(SharedImageManager* manager,
-                                             SharedImageBacking* backing,
-                                             MemoryTypeTracker* tracker,
-                                             GLuint texture_service_id);
+  ExternalVkImageGLPassthroughRepresentation(
+      SharedImageManager* manager,
+      SharedImageBacking* backing,
+      MemoryTypeTracker* tracker,
+      scoped_refptr<gles2::TexturePassthrough> texture);
 
   ExternalVkImageGLPassthroughRepresentation(
       const ExternalVkImageGLPassthroughRepresentation&) = delete;
@@ -97,6 +97,7 @@
   void EndAccess() override;
 
  private:
+  scoped_refptr<gles2::TexturePassthrough> texture_;
   ExternalVkImageGLRepresentationShared representation_shared_;
 };
 
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_holder.cc b/gpu/command_buffer/service/shared_image/gl_texture_holder.cc
index fcec043..7d7e863 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_holder.cc
+++ b/gpu/command_buffer/service/shared_image/gl_texture_holder.cc
@@ -99,7 +99,7 @@
   format_desc_.storage_internal_format = format_info.storage_internal_format;
 
   GLTextureImageBackingHelper::MakeTextureAndSetParameters(
-      format_desc_.target, /*service_id=*/0, framebuffer_attachment_angle,
+      format_desc_.target, framebuffer_attachment_angle,
       is_passthrough_ ? &passthrough_texture_ : nullptr,
       is_passthrough_ ? nullptr : &texture_);
 
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_holder.h b/gpu/command_buffer/service/shared_image/gl_texture_holder.h
index fde0020..0476e83 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_holder.h
+++ b/gpu/command_buffer/service/shared_image/gl_texture_holder.h
@@ -65,7 +65,7 @@
   bool is_passthrough_;
   bool context_lost_ = false;
 
-  gles2::Texture* texture_ = nullptr;
+  raw_ptr<gles2::Texture> texture_ = nullptr;
   scoped_refptr<gles2::TexturePassthrough> passthrough_texture_;
   GLFormatDesc format_desc_;
   raw_ptr<gl::ProgressReporter> progress_reporter_ = nullptr;
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.cc b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.cc
index d62c7c2a..9f83b32 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.cc
+++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.cc
@@ -220,26 +220,24 @@
 }
 
 // static
-void GLTextureImageBackingHelper::MakeTextureAndSetParameters(
+GLuint GLTextureImageBackingHelper::MakeTextureAndSetParameters(
     GLenum target,
-    GLuint service_id,
     bool framebuffer_attachment_angle,
     scoped_refptr<gles2::TexturePassthrough>* passthrough_texture,
-    gles2::Texture** texture) {
-  if (!service_id) {
-    gl::GLApi* api = gl::g_current_gl_context;
-    ScopedRestoreTexture scoped_restore(api, target);
+    raw_ptr<gles2::Texture>* texture) {
+  gl::GLApi* api = gl::g_current_gl_context;
+  ScopedRestoreTexture scoped_restore(api, target);
 
-    api->glGenTexturesFn(1, &service_id);
-    api->glBindTextureFn(target, service_id);
-    api->glTexParameteriFn(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    api->glTexParameteriFn(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-    api->glTexParameteriFn(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-    api->glTexParameteriFn(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-    if (framebuffer_attachment_angle) {
-      api->glTexParameteriFn(target, GL_TEXTURE_USAGE_ANGLE,
-                             GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
-    }
+  GLuint service_id = 0;
+  api->glGenTexturesFn(1, &service_id);
+  api->glBindTextureFn(target, service_id);
+  api->glTexParameteriFn(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+  api->glTexParameteriFn(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+  api->glTexParameteriFn(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+  api->glTexParameteriFn(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+  if (framebuffer_attachment_angle) {
+    api->glTexParameteriFn(target, GL_TEXTURE_USAGE_ANGLE,
+                           GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
   }
   if (passthrough_texture) {
     *passthrough_texture =
@@ -248,6 +246,7 @@
   if (texture) {
     *texture = gles2::CreateGLES2TextureWithLightRef(service_id, target);
   }
+  return service_id;
 }
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.h b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.h
index 483efb1..a6ccbe4b 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.h
+++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_helper.h
@@ -90,13 +90,12 @@
     GLuint old_binding_ = 0;
   };
 
-  // Helper function to create a GL texture.
-  static void MakeTextureAndSetParameters(
+  // Creates a new GL texture and returns GL texture ID.
+  static GLuint MakeTextureAndSetParameters(
       GLenum target,
-      GLuint service_id,
       bool framebuffer_attachment_angle,
       scoped_refptr<gles2::TexturePassthrough>* passthrough_texture,
-      gles2::Texture** texture);
+      raw_ptr<gles2::Texture>* texture);
 
   // Create a Dawn backing. This will use |backing|'s ProduceGLTexture or
   // ProduceGLTexturePassthrough method, and populate the dawn backing via
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
index 5e7e43e..04da6be4 100644
--- a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
+++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
@@ -624,8 +624,7 @@
     // Allocate the GL texture.
     scoped_refptr<gles2::TexturePassthrough> gl_texture;
     GLTextureImageBackingHelper::MakeTextureAndSetParameters(
-        gl_target_, /*service_id=*/0, framebuffer_attachment_angle_,
-        &gl_texture, nullptr);
+        gl_target_, framebuffer_attachment_angle_, &gl_texture, nullptr);
     // Set the IOSurface to be initially unbound from the GL texture.
     gl_texture->SetEstimatedSize(GetEstimatedSize());
     gl_texture->set_bind_pending();
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc
index 5c1f3a0..fab5d1d 100644
--- a/headless/lib/browser/headless_content_browser_client.cc
+++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -284,6 +284,21 @@
   return false;
 }
 
+bool HeadlessContentBrowserClient::IsSharedStorageAllowed(
+    content::BrowserContext* browser_context,
+    content::RenderFrameHost* rfh,
+    const url::Origin& top_frame_origin,
+    const url::Origin& accessing_origin) {
+  return true;
+}
+
+bool HeadlessContentBrowserClient::IsSharedStorageSelectURLAllowed(
+    content::BrowserContext* browser_context,
+    const url::Origin& top_frame_origin,
+    const url::Origin& accessing_origin) {
+  return true;
+}
+
 void HeadlessContentBrowserClient::ConfigureNetworkContextParams(
     content::BrowserContext* context,
     bool in_memory,
diff --git a/headless/lib/browser/headless_content_browser_client.h b/headless/lib/browser/headless_content_browser_client.h
index c96642d5..603ebb3 100644
--- a/headless/lib/browser/headless_content_browser_client.h
+++ b/headless/lib/browser/headless_content_browser_client.h
@@ -70,6 +70,14 @@
       net::ClientCertIdentityList client_certs,
       std::unique_ptr<content::ClientCertificateDelegate> delegate) override;
   bool ShouldEnableStrictSiteIsolation() override;
+  bool IsSharedStorageAllowed(content::BrowserContext* browser_context,
+                              content::RenderFrameHost* rfh,
+                              const url::Origin& top_frame_origin,
+                              const url::Origin& accessing_origin) override;
+  bool IsSharedStorageSelectURLAllowed(
+      content::BrowserContext* browser_context,
+      const url::Origin& top_frame_origin,
+      const url::Origin& accessing_origin) override;
 
   void ConfigureNetworkContextParams(
       content::BrowserContext* context,
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder \050dbg\051/properties.json"
index 7acd229..2e4b52d 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder \050dbg\051/properties.json"
@@ -97,6 +97,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder ARM64 \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder ARM64 \050dbg\051/properties.json"
index 50403f1..b03d24e3 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder ARM64 \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder ARM64 \050dbg\051/properties.json"
@@ -97,6 +97,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder/properties.json
index 321f748..6647766 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Builder/properties.json
@@ -52,6 +52,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests \050dbg\051/properties.json"
index 68c7d3e..90d17f7 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests \050dbg\051/properties.json"
@@ -85,6 +85,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests ARM64 \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests ARM64 \050dbg\051/properties.json"
index 7b14774..c4f1d9151 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests ARM64 \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Android Tests ARM64 \050dbg\051/properties.json"
@@ -85,6 +85,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder \050dbg\051/properties.json"
index 9662055a..49ee8d79 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder \050dbg\051/properties.json"
@@ -43,6 +43,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder/properties.json
index f3110e6..6d3a155 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Builder/properties.json
@@ -82,6 +82,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Tester/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Tester/properties.json
index 75521ff4..363edd3 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Tester/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Linux Tester/properties.json
@@ -70,6 +70,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder \050dbg\051/properties.json"
index d57c6f26..86140f7 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder \050dbg\051/properties.json"
@@ -42,6 +42,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder/properties.json
index d3ba776..4c907055 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Builder/properties.json
@@ -83,6 +83,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Tester/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Tester/properties.json
index bd74ab6..69a4c08 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Tester/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Mac Tester/properties.json
@@ -72,6 +72,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder \050dbg\051/properties.json"
index 7dfc85a..48879d15 100644
--- "a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder \050dbg\051/properties.json"
@@ -43,6 +43,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder/properties.json
index ed4b387..31a41f85 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win Builder/properties.json
@@ -82,6 +82,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win10 Tester/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win10 Tester/properties.json
index a6a9c3fa..0328b1d 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win10 Tester/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI Win10 Tester/properties.json
@@ -70,6 +70,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-device/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-device/properties.json
index 4e502f2..0b8a1dd 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-device/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-device/properties.json
@@ -43,6 +43,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-simulator/properties.json b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-simulator/properties.json
index b2a8eca..2b16c60 100644
--- a/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-simulator/properties.json
+++ b/infra/config/generated/builders/webrtc.fyi/WebRTC Chromium FYI ios-simulator/properties.json
@@ -43,6 +43,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Android Builder/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Android Builder/properties.json
index 3ff0d43d..86086fa7 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Android Builder/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Android Builder/properties.json
@@ -97,6 +97,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Android Tester/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Android Tester/properties.json
index f150ae1c..6849094f 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Android Tester/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Android Tester/properties.json
@@ -85,6 +85,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Builder/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Builder/properties.json
index 92f9627..0ea8467 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Builder/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Builder/properties.json
@@ -82,6 +82,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Tester/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Tester/properties.json
index d23a75e..f659f0b 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Tester/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Linux Tester/properties.json
@@ -70,6 +70,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json
index be2b498..8ad149438 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json
@@ -83,6 +83,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json
index e46fa2b0..5c6c749 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json
@@ -72,6 +72,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Win Builder/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Win Builder/properties.json
index 8dda881..d6d8180 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Win Builder/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Win Builder/properties.json
@@ -82,6 +82,11 @@
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org"
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Win10 Tester/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Win10 Tester/properties.json
index 2ad0719..e6457a6 100644
--- a/infra/config/generated/builders/webrtc/WebRTC Chromium Win10 Tester/properties.json
+++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Win10 Tester/properties.json
@@ -70,6 +70,11 @@
       ]
     }
   },
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/subprojects/webrtc/webrtc.fyi.star b/infra/config/subprojects/webrtc/webrtc.fyi.star
index 96f24e6..b85f82af 100644
--- a/infra/config/subprojects/webrtc/webrtc.fyi.star
+++ b/infra/config/subprojects/webrtc/webrtc.fyi.star
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "builder", "cpu", "defaults", "goma", "os", "xcode")
+load("//lib/builders.star", "builder", "cpu", "defaults", "goma", "os", "reclient", "xcode")
 
 luci.bucket(
     name = "webrtc.fyi",
@@ -45,6 +45,8 @@
 defaults.pool.set("luci.chromium.webrtc.fyi")
 defaults.service_account.set("chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com")
 defaults.triggered_by.set(["webrtc-gitiles-trigger"])
+defaults.reclient_instance.set(reclient.instance.DEFAULT_TRUSTED)
+defaults.reclient_jobs.set(reclient.jobs.DEFAULT)
 
 # Builders are defined in lexicographic order by name
 
diff --git a/infra/config/subprojects/webrtc/webrtc.star b/infra/config/subprojects/webrtc/webrtc.star
index ddfb40b..8c3a08b 100644
--- a/infra/config/subprojects/webrtc/webrtc.star
+++ b/infra/config/subprojects/webrtc/webrtc.star
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "builder", "cpu", "defaults", "goma", "os", "xcode")
+load("//lib/builders.star", "builder", "cpu", "defaults", "goma", "os", "reclient", "xcode")
 
 luci.bucket(
     name = "webrtc",
@@ -37,6 +37,8 @@
 defaults.os.set(os.LINUX_DEFAULT)
 defaults.service_account.set("chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com")
 defaults.triggered_by.set(["chromium-gitiles-trigger"])
+defaults.reclient_instance.set(reclient.instance.DEFAULT_TRUSTED)
+defaults.reclient_jobs.set(reclient.jobs.DEFAULT)
 
 defaults.properties.set({
     "perf_dashboard_machine_group": "ChromiumWebRTC",
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index cf290fdd..da6f0ab7 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1770,6 +1770,9 @@
       <message name="IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION" desc="A table header element that describes the effect of a user choosing to price-track an item.">
         Get an alert if the price drops on any site.
       </message>
+      <message name="IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION_FOR_TRACKED_ITEM" desc="A table header element that describes that this price-tracked item can be managed in bookmarks.">
+        You'll get an alert if the price drops on any site. This page is saved in <ph name="BEGIN_LINK">BEGIN_LINK</ph>Bookmarks<ph name="END_LINK">END_LINK</ph>.
+      </message>
       <message name="IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACK_BUTTON" desc="The title for a button that adds the price-trackable item to the user's stored price tracking list.">
         Track
       </message>
@@ -2240,6 +2243,9 @@
       <message name="IDS_IOS_TOOLS_MENU_CELL_NEW_FEATURE_BADGE" desc="Title and accessibility label of the badge displayed on a tools menu item when it represents a new feature [Length: 20em]" meaning="A badge with this title is displayed informing the user that this feature that is new to them.">
         New
       </message>
+      <message name="IDS_IOS_NEW_LABEL_FEATURE_BADGE" desc="Character representing the word new displayed inside the badge to represent a new features [iOS only]">
+        N
+      </message>
       <message name="IDS_IOS_TOOLS_MENU_DOWNLOADS" desc="The iOS menu item for opening the downloads folder [iOS only]" meaning="[Length: unlimited]">
         Downloads
       </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_NEW_LABEL_FEATURE_BADGE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_NEW_LABEL_FEATURE_BADGE.png.sha1
new file mode 100644
index 0000000..062e001
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_NEW_LABEL_FEATURE_BADGE.png.sha1
@@ -0,0 +1 @@
+e944924147344e198549f091e6ace52bc58e506f
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION_FOR_TRACKED_ITEM.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION_FOR_TRACKED_ITEM.png.sha1
new file mode 100644
index 0000000..6e19fccc
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION_FOR_TRACKED_ITEM.png.sha1
@@ -0,0 +1 @@
+a7389e51ed5250c64d27ff233845c431acddce3c
\ No newline at end of file
diff --git a/ios/chrome/browser/autofill/autofill_controller_unittest.mm b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
index 52b9dc6..2a554dcc 100644
--- a/ios/chrome/browser/autofill/autofill_controller_unittest.mm
+++ b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
@@ -68,6 +68,7 @@
 
 @property(nonatomic, copy) NSArray* suggestions;
 @property(nonatomic, assign) BOOL suggestionRetrievalComplete;
+@property(nonatomic, assign) BOOL suggestionRetrievalStarted;
 
 @end
 
@@ -78,7 +79,7 @@
 
 - (void)retrieveSuggestionsForForm:(const autofill::FormActivityParams&)params
                           webState:(web::WebState*)webState {
-  self.suggestionRetrievalComplete = NO;
+  self.suggestionRetrievalStarted = YES;
   [super retrieveSuggestionsForForm:params webState:webState];
 }
 
@@ -91,6 +92,12 @@
   self.suggestionRetrievalComplete = YES;
 }
 
+- (void)resetSuggestionAvailable {
+  self.suggestionRetrievalComplete = NO;
+  self.suggestionRetrievalStarted = NO;
+  self.suggestions = nil;
+}
+
 @end
 
 namespace autofill {
@@ -259,6 +266,7 @@
   // If `wait_for_trigger` is yes, wait for the call to
   // `retrieveSuggestionsForForm` to avoid considering a former call.
   void WaitForSuggestionRetrieval(BOOL wait_for_trigger);
+  void ResetWaitForSuggestionRetrieval();
 
   // Loads the page and wait until the initial form processing has been done.
   // This processing must find `expected_size` forms.
@@ -372,18 +380,22 @@
   web_state_.reset();
 }
 
+void AutofillControllerTest::ResetWaitForSuggestionRetrieval() {
+  [suggestion_controller() resetSuggestionAvailable];
+}
+
 void AutofillControllerTest::WaitForSuggestionRetrieval(BOOL wait_for_trigger) {
   // Wait for the message queue to ensure that JS events fired in the tests
   // trigger TestSuggestionController's retrieveSuggestionsForFormNamed: method
   // and set suggestionRetrievalComplete to NO.
   if (wait_for_trigger) {
     WaitForCondition(^bool {
-      return ![suggestion_controller() suggestionRetrievalComplete];
+      return suggestion_controller().suggestionRetrievalStarted;
     });
   }
   // Now we can wait for suggestionRetrievalComplete to be set to YES.
   WaitForCondition(^bool {
-    return [suggestion_controller() suggestionRetrievalComplete];
+    return suggestion_controller().suggestionRetrievalComplete;
   });
 }
 
@@ -512,6 +524,7 @@
 TEST_F(AutofillControllerTest, ProfileSuggestions) {
   SetUpForSuggestions(kProfileFormHtml, 1);
   ForceViewRendering(web_state()->GetView());
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"document.forms[0].name.focus()", web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
   ExpectMetric("Autofill.AddressSuggestionsCount", 1);
@@ -528,6 +541,7 @@
       [NSString stringWithFormat:@"%@%@", kProfileFormHtml, kProfileFormHtml],
       2);
   ForceViewRendering(web_state()->GetView());
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"document.forms[0].name.focus()", web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
   ExpectMetric("Autofill.AddressSuggestionsCount", 1);
@@ -543,6 +557,7 @@
 TEST_F(AutofillControllerTest, ProfileSuggestionsFromSelectField) {
   SetUpForSuggestions(kProfileFormHtml, 1);
   ForceViewRendering(web_state()->GetView());
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"document.forms[0].state.focus()", web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
   ExpectMetric("Autofill.AddressSuggestionsCount", 1);
@@ -582,6 +597,7 @@
   EXPECT_EQ(2U, personal_data_manager->GetProfiles().size());
   EXPECT_TRUE(LoadHtmlAndWaitForFormFetched(kProfileFormHtml, 1));
   ForceViewRendering(web_state()->GetView());
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"document.forms[0].name.focus()", web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
   ExpectMetric("Autofill.AddressSuggestionsCount", 2);
@@ -649,7 +665,7 @@
 // AutofillAgent, once data has been loaded into a test data manager.
 TEST_F(AutofillControllerTest, KeyValueSuggestions) {
   SetUpKeyValueData();
-
+  ResetWaitForSuggestionRetrieval();
   // Focus element.
   web::test::ExecuteJavaScript(@"document.forms[0].greeting.value='B'",
                                web_state());
@@ -666,9 +682,11 @@
 // happen in practice and should not result in a crash or incorrect behavior.
 TEST_F(AutofillControllerTest, KeyValueTypedSuggestions) {
   SetUpKeyValueData();
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"document.forms[0].greeting.focus()",
                                web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"event = document.createEvent('TextEvent');",
                                web_state());
   web::test::ExecuteJavaScript(
@@ -688,9 +706,11 @@
   SetUpKeyValueData();
 
   // Focus the dummy field and confirm no suggestions are presented.
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"document.forms[0].dummy.focus()", web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
   ASSERT_EQ(0U, [suggestion_controller() suggestions].count);
+  ResetWaitForSuggestionRetrieval();
 
   // Enter 'B' in the dummy field and confirm no suggestions are presented.
   web::test::ExecuteJavaScript(@"event = document.createEvent('TextEvent');",
@@ -698,16 +718,19 @@
   web::test::ExecuteJavaScript(
       @"event.initTextEvent('textInput', true, true, window, 'B');",
       web_state());
+
   web::test::ExecuteJavaScript(@"document.forms[0].dummy.dispatchEvent(event);",
                                web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
   ASSERT_EQ(0U, [suggestion_controller() suggestions].count);
+  ResetWaitForSuggestionRetrieval();
 
   // Enter 'B' in the greeting field and confirm that one suggestion ("Bonjour")
   // is presented.
   web::test::ExecuteJavaScript(@"document.forms[0].greeting.focus()",
                                web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
+  ResetWaitForSuggestionRetrieval();
   web::test::ExecuteJavaScript(@"event = document.createEvent('TextEvent');",
                                web_state());
   web::test::ExecuteJavaScript(
@@ -716,6 +739,7 @@
   web::test::ExecuteJavaScript(
       @"document.forms[0].greeting.dispatchEvent(event);", web_state());
   WaitForSuggestionRetrieval(/*wait_for_trigger=*/YES);
+
   ASSERT_EQ(1U, [suggestion_controller() suggestions].count);
   FormSuggestion* suggestion = [suggestion_controller() suggestions][0];
   EXPECT_NSEQ(@"Bonjour", suggestion.value);
@@ -726,7 +750,7 @@
 // been loaded into a test data manager.
 TEST_F(AutofillControllerTest, NoKeyValueSuggestionsWithoutTyping) {
   SetUpKeyValueData();
-
+  ResetWaitForSuggestionRetrieval();
   // Focus element.
   web::test::ExecuteJavaScript(@"document.forms[0].greeting.focus()",
                                web_state());
diff --git a/ios/chrome/browser/signin/fake_system_identity_interaction_manager.mm b/ios/chrome/browser/signin/fake_system_identity_interaction_manager.mm
index ca4d382..fe0c9d67 100644
--- a/ios/chrome/browser/signin/fake_system_identity_interaction_manager.mm
+++ b/ios/chrome/browser/signin/fake_system_identity_interaction_manager.mm
@@ -21,7 +21,10 @@
 
 }  // namespace
 
-@interface FakeAuthActivityViewController : UIViewController
+@interface FakeAuthActivityViewController : UIViewController {
+  __weak FakeSystemIdentityInteractionManager* _manager;
+  UIButton* _cancelButton;
+}
 
 - (instancetype)initWithManager:(FakeSystemIdentityInteractionManager*)manager
     NS_DESIGNATED_INITIALIZER;
@@ -33,11 +36,7 @@
 
 @end
 
-@implementation FakeAuthActivityViewController {
-  __weak FakeSystemIdentityInteractionManager* _manager;
-  UIButton* _cancelButton;
-  UIButton* _signInButton;
-}
+@implementation FakeAuthActivityViewController
 
 - (instancetype)initWithManager:(FakeSystemIdentityInteractionManager*)manager {
   if ((self = [super initWithNibName:nil bundle:nil])) {
@@ -46,17 +45,6 @@
   return self;
 }
 
-#pragma mark - NSObject
-
-- (void)dealloc {
-  [_signInButton removeTarget:self
-                       action:@selector(didTapSignIn:)
-             forControlEvents:UIControlEventTouchUpInside];
-  [_cancelButton removeTarget:self
-                       action:@selector(didTapCancel:)
-             forControlEvents:UIControlEventTouchUpInside];
-}
-
 #pragma mark - UIViewController
 
 - (void)viewDidLoad {
@@ -67,20 +55,9 @@
   mainView.backgroundColor = [UIColor magentaColor];
   mainView.accessibilityIdentifier = kFakeAuthActivityViewIdentifier;
 
-  // TODO(crbug.com/1400696): Since those buttons have no accessibility
-  // identitifer, EarlGrey probably can't interact with them. So they
-  // likely are not useful (unless EarlGrey select them by their title).
-  //
-  // Investigate whether they can be removed or whether they should be
-  // given accessibility identifier to allow EarlGrey to interact with
-  // them.
-  _signInButton = [self addButtonWithTitle:@"Sign in"
-                                    action:@selector(didTapSignIn:)
-                    accessibilitIdentifier:nil];
-
   _cancelButton = [self addButtonWithTitle:@"Cancel"
                                     action:@selector(didTapCancel:)
-                    accessibilitIdentifier:@"cancel"];
+                    accessibilitIdentifier:kFakeAuthCancelButtonIdentifier];
 }
 
 - (void)viewWillLayoutSubviews {
@@ -90,10 +67,7 @@
   const CGFloat midX = CGRectGetMidX(bounds);
   const CGFloat midY = CGRectGetMidY(bounds);
 
-  [self sizeButtonToFitWithCenter:CGPointMake(midX, midY - 50)
-                           button:_signInButton];
-  [self sizeButtonToFitWithCenter:CGPointMake(midX, midY + 50)
-                           button:_cancelButton];
+  [self sizeButtonToFitWithCenter:CGPointMake(midX, midY) button:_cancelButton];
 }
 
 #pragma mark - Private methods
@@ -116,10 +90,6 @@
   [button sizeToFit];
 }
 
-- (void)didTapSignIn:(id)sender {
-  [_manager simulateDidTapAddAccount];
-}
-
 - (void)didTapCancel:(id)sender {
   [_manager simulateDidTapCancel];
 }
diff --git a/ios/chrome/browser/signin/test_constants.h b/ios/chrome/browser/signin/test_constants.h
index f68ffd9..007b1dc 100644
--- a/ios/chrome/browser/signin/test_constants.h
+++ b/ios/chrome/browser/signin/test_constants.h
@@ -9,5 +9,8 @@
 
 // Accessibility identifier for FakeAuthActivityViewController.
 extern NSString* const kFakeAuthActivityViewIdentifier;
+// Accessibility identifier for the cancel button in
+// FakeAuthActivityViewController.
+extern NSString* const kFakeAuthCancelButtonIdentifier;
 
 #endif  // IOS_CHROME_BROWSER_SIGNIN_TEST_CONSTANTS_H_
diff --git a/ios/chrome/browser/signin/test_constants.mm b/ios/chrome/browser/signin/test_constants.mm
index 6e9e70f3..1750ba4a 100644
--- a/ios/chrome/browser/signin/test_constants.mm
+++ b/ios/chrome/browser/signin/test_constants.mm
@@ -10,3 +10,5 @@
 
 NSString* const kFakeAuthActivityViewIdentifier =
     @"FakeAuthActivityViewIdentifier";
+NSString* const kFakeAuthCancelButtonIdentifier =
+    @"FakeAuthCancelButtonIdentifier";
diff --git a/ios/chrome/browser/ui/app_store_rating/BUILD.gn b/ios/chrome/browser/ui/app_store_rating/BUILD.gn
index 0210d9aa..384de87 100644
--- a/ios/chrome/browser/ui/app_store_rating/BUILD.gn
+++ b/ios/chrome/browser/ui/app_store_rating/BUILD.gn
@@ -18,6 +18,7 @@
     "//components/feature_engagement/public",
     "//components/password_manager/core/browser",
     "//components/prefs",
+    "//components/version_info:channel",
     "//ios/chrome/browser/application_context",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/prefs:pref_names",
@@ -28,6 +29,7 @@
     "//ios/chrome/browser/ui/main:browser_interface_provider",
     "//ios/chrome/browser/ui/main:observing_scene_agent",
     "//ios/chrome/browser/ui/promos_manager:promos",
+    "//ios/chrome/common",
   ]
 }
 
diff --git a/ios/chrome/browser/ui/app_store_rating/app_store_rating_scene_agent.mm b/ios/chrome/browser/ui/app_store_rating/app_store_rating_scene_agent.mm
index b0779ad..beac800 100644
--- a/ios/chrome/browser/ui/app_store_rating/app_store_rating_scene_agent.mm
+++ b/ios/chrome/browser/ui/app_store_rating/app_store_rating_scene_agent.mm
@@ -28,14 +28,17 @@
 @interface AppStoreRatingSceneAgent ()
 
 // Determines whether the user has used Chrome for at least 3
-// different days within the past 7 days.
-@property(nonatomic, assign, readonly, getter=isChromeUsed3DaysInPastWeek)
-    BOOL chromeUsed3DaysInPastWeek;
+// different days within the past 7 days for stable channel.
+// In Canary and Dev channels, the requirement is at least 1 day
+// in the past 7 days.
+@property(nonatomic, assign, readonly, getter=isDaysInPastWeekRequirementMet)
+    BOOL daysInPastWeekRequirementMet;
 
 // Determines whether the user has used Chrome for at least 15
-// different days overall.
-@property(nonatomic, assign, readonly, getter=isChromeUsed15Days)
-    BOOL chromeUsed15Days;
+// different days overall for stable channel. In Canary and Dev channels,
+// the requirement is at least 1 day.
+@property(nonatomic, assign, readonly, getter=isTotalDaysRequirementMet)
+    BOOL totalDaysRequirementMet;
 
 // Determines whether the user has enabled the Credentials
 // Provider Extension.
@@ -56,8 +59,8 @@
 }
 
 - (BOOL)isUserEngaged {
-  return IsChromeLikelyDefaultBrowser() && self.chromeUsed3DaysInPastWeek &&
-         self.chromeUsed15Days && self.CPEEnabled;
+  return IsChromeLikelyDefaultBrowser() && self.daysInPastWeekRequirementMet &&
+         self.totalDaysRequirementMet && self.CPEEnabled;
 }
 
 #pragma mark - SceneStateObserver
@@ -88,16 +91,18 @@
 
 #pragma mark - Getters
 
-- (BOOL)isChromeUsed3DaysInPastWeek {
+- (BOOL)isDaysInPastWeekRequirementMet {
   NSArray* activeDaysInPastWeek =
       base::mac::ObjCCastStrict<NSArray>([[NSUserDefaults standardUserDefaults]
           objectForKey:kAppStoreRatingActiveDaysInPastWeekKey]);
-  return [activeDaysInPastWeek count] >= 3;
+  return [activeDaysInPastWeek count] >=
+         kAppStoreRatingDaysOnChromeInPastWeekRequirement;
 }
 
-- (BOOL)isChromeUsed15Days {
+- (BOOL)isTotalDaysRequirementMet {
   return [[NSUserDefaults standardUserDefaults]
-             integerForKey:kAppStoreRatingTotalDaysOnChromeKey] >= 15;
+             integerForKey:kAppStoreRatingTotalDaysOnChromeKey] >=
+         kAppStoreRatingTotalDaysOnChromeRequirement;
 }
 
 - (BOOL)isCPEEnabled {
diff --git a/ios/chrome/browser/ui/app_store_rating/constants.h b/ios/chrome/browser/ui/app_store_rating/constants.h
index 1e27a10..188558f 100644
--- a/ios/chrome/browser/ui/app_store_rating/constants.h
+++ b/ios/chrome/browser/ui/app_store_rating/constants.h
@@ -15,8 +15,17 @@
 // a session in the past 7 days in NSUserDefaults.
 extern NSString* const kAppStoreRatingActiveDaysInPastWeekKey;
 
-// Key used to store the the latest date the App Store Rating promo was
+// Key used to store the latest date the App Store Rating promo was
 // requested for display for the user.
 extern NSString* const kAppStoreRatingLastShownPromoDayKey;
 
+// Key used to store the minimum number of the days the user needs to have used
+// Chrome to satisfy the App Store Rating promo trigger requirement.
+extern const unsigned int kAppStoreRatingTotalDaysOnChromeRequirement;
+
+// Key used to store the minimum number of the days the user needs to have used
+// Chrome in the past week to satisfy the App Store Rating promo trigger
+// requirement.
+extern const unsigned int kAppStoreRatingDaysOnChromeInPastWeekRequirement;
+
 #endif  // IOS_CHROME_BROWSER_UI_APP_STORE_RATING_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/app_store_rating/constants.mm b/ios/chrome/browser/ui/app_store_rating/constants.mm
index 6ae61dd..6db8883 100644
--- a/ios/chrome/browser/ui/app_store_rating/constants.mm
+++ b/ios/chrome/browser/ui/app_store_rating/constants.mm
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #import "ios/chrome/browser/ui/app_store_rating/constants.h"
+#import "components/version_info/channel.h"
+#import "ios/chrome/common/channel_info.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -14,3 +16,13 @@
     @"AppStoreRatingActiveDaysInPastWeek";
 NSString* const kAppStoreRatingLastShownPromoDayKey =
     @"AppStoreRatingLastShownPromoDay";
+const unsigned int kAppStoreRatingTotalDaysOnChromeRequirement =
+    (GetChannel() == version_info::Channel::DEV ||
+     GetChannel() == version_info::Channel::CANARY)
+        ? 1
+        : 15;
+const unsigned int kAppStoreRatingDaysOnChromeInPastWeekRequirement =
+    (GetChannel() == version_info::Channel::DEV ||
+     GetChannel() == version_info::Channel::CANARY)
+        ? 1
+        : 3;
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm b/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm
index aec52130d..00099c6 100644
--- a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm
@@ -311,7 +311,7 @@
       waitForMatcher:grey_accessibilityID(kFakeAuthActivityViewIdentifier)];
   // Close the SSO view controller.
   id<GREYMatcher> matcher =
-      grey_allOf(chrome_test_util::ButtonWithAccessibilityLabel(@"Cancel"),
+      grey_allOf(grey_accessibilityID(kFakeAuthCancelButtonIdentifier),
                  grey_sufficientlyVisible(), nil);
   [[EarlGrey selectElementWithMatcher:matcher] performAction:grey_tap()];
   // Make sure the SSO view controller is fully removed before ending the test.
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
index 255322f..cf40bcd8 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
@@ -709,7 +709,7 @@
       waitForMatcher:grey_accessibilityID(kFakeAuthActivityViewIdentifier)];
   // Close the SSO view controller.
   id<GREYMatcher> matcher =
-      grey_allOf(chrome_test_util::ButtonWithAccessibilityLabel(@"Cancel"),
+      grey_allOf(grey_accessibilityID(kFakeAuthCancelButtonIdentifier),
                  grey_sufficientlyVisible(), nil);
   [[EarlGrey selectElementWithMatcher:matcher] performAction:grey_tap()];
   // Make sure the SSO view controller is fully removed before ending the test.
diff --git a/ios/chrome/browser/ui/incognito_reauth/BUILD.gn b/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
index 80b480f..452af25 100644
--- a/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
+++ b/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
@@ -38,6 +38,7 @@
   deps = [
     ":incognito_reauth_util",
     "//ios/chrome/app/strings",
+    "//ios/chrome/browser/ui/icons:symbols",
     "//ios/chrome/browser/ui/incognito_reauth/resources:incognito_logo_reauth",
     "//ios/chrome/common/ui/util",
     "//ui/base",
diff --git a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_view.mm b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_view.mm
index 9ae7edd..8c72d608 100644
--- a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_view.mm
+++ b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_view.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_view.h"
 
 #import "base/strings/sys_string_conversions.h"
+#import "ios/chrome/browser/ui/icons/symbols.h"
 #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_util.h"
 #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_view_label.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
@@ -56,8 +57,14 @@
     blurBackgroundView.translatesAutoresizingMaskIntoConstraints = NO;
     AddSameConstraints(self, blurBackgroundView);
 
-    UIImage* incognitoLogo = [UIImage imageNamed:@"incognito_logo_reauth"];
+    UIImage* incognitoLogo;
+    if (UseSymbols()) {
+      incognitoLogo = CustomSymbolWithPointSize(kIncognitoSymbol, 28);
+    } else {
+      incognitoLogo = [UIImage imageNamed:@"incognito_logo_reauth"];
+    }
     _logoView = [[UIImageView alloc] initWithImage:incognitoLogo];
+    _logoView.tintColor = UIColor.whiteColor;
     _logoView.translatesAutoresizingMaskIntoConstraints = NO;
     [blurBackgroundView.contentView addSubview:_logoView];
     AddSameCenterXConstraint(_logoView, blurBackgroundView);
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
index ea4c550..08b6e10a 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
@@ -122,13 +122,6 @@
     return -Dimensions.iconWidth + (Dimensions.newLabelBadgeWidth - 10)
   }
 
-  var newLabelString: String {
-    if let newString = L10NUtils.string(forMessageId: IDS_IOS_TOOLS_MENU_CELL_NEW_FEATURE_BADGE) {
-      return String(newString.prefix(1))
-    }
-    return ""
-  }
-
   /// Build the image to be displayed, based on the configuration of the item.
   /// TODO(crbug.com/1315544): Remove this once only the symbols are present.
   @ViewBuilder
@@ -152,7 +145,9 @@
             .frame(width: Dimensions.newLabelBadgeWidth, height: Dimensions.newLabelBadgeWidth)
             .offset(x: newBadgeOffsetX, y: newBadgeOffsetY)
             .overlay {
-              if !newLabelString.isEmpty {
+              if let newLabelString = L10NUtils.string(
+                forMessageId: IDS_IOS_NEW_LABEL_FEATURE_BADGE)
+              {
                 Text(newLabelString)
                   .font(.system(size: 10, weight: .bold, design: .rounded))
                   .offset(x: newBadgeOffsetX, y: newBadgeOffsetY)
diff --git a/ios/chrome/browser/ui/price_notifications/BUILD.gn b/ios/chrome/browser/ui/price_notifications/BUILD.gn
index 2c78556..d773dc6 100644
--- a/ios/chrome/browser/ui/price_notifications/BUILD.gn
+++ b/ios/chrome/browser/ui/price_notifications/BUILD.gn
@@ -61,6 +61,7 @@
     ":constants",
     "//base",
     "//ios/chrome/app/strings",
+    "//ios/chrome/browser/net:crurl",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/list_model",
     "//ios/chrome/browser/ui/price_notifications/cells",
diff --git a/ios/chrome/browser/ui/price_notifications/price_notifications_table_view_controller.mm b/ios/chrome/browser/ui/price_notifications/price_notifications_table_view_controller.mm
index 35a8b825..90394d3 100644
--- a/ios/chrome/browser/ui/price_notifications/price_notifications_table_view_controller.mm
+++ b/ios/chrome/browser/ui/price_notifications/price_notifications_table_view_controller.mm
@@ -7,6 +7,7 @@
 #import <MaterialComponents/MaterialSnackbar.h>
 
 #import "base/mac/foundation_util.h"
+#import "ios/chrome/browser/net/crurl.h"
 #import "ios/chrome/browser/ui/commands/snackbar_commands.h"
 #import "ios/chrome/browser/ui/list_model/list_item+Controller.h"
 #import "ios/chrome/browser/ui/price_notifications/cells/price_notifications_table_view_item.h"
@@ -16,6 +17,7 @@
 #import "ios/chrome/browser/ui/table_view/cells/table_view_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.h"
 #import "ios/chrome/browser/ui/table_view/table_view_model.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h"
@@ -33,25 +35,24 @@
 namespace {
 
 const CGFloat kVerticalTableViewSectionSpacing = 30;
-const CGFloat kDescriptionPadding = 16;
-const CGFloat kDescriptionLabelHeight = 18;
-const CGFloat kDescriptionTopSpacing = 10;
-const CGFloat kDescriptionBottomSpacing = 26;
-const CGFloat kSectionHeaderHeight = 22;
 
 // Types of ListItems used by the price notifications UI.
 typedef NS_ENUM(NSInteger, ItemType) {
   ItemTypeHeader = kItemTypeEnumZero,
   ItemTypeSectionHeader,
   ItemTypeListItem,
+  ItemTypeTableViewHeader,
 };
 
 // Identifiers for sections in the price notifications.
 typedef NS_ENUM(NSInteger, SectionIdentifier) {
   SectionIdentifierTrackableItemsOnCurrentSite = kSectionIdentifierEnumZero,
   SectionIdentifierTrackedItems,
+  SectionIdentifierTableViewHeader
 };
 
+const char kBookmarksSettingsURL[] = "settings://open_bookmarks";
+
 }  // namespace
 
 @interface PriceNotificationsTableViewController ()
@@ -82,18 +83,21 @@
 
   self.tableView.accessibilityIdentifier =
       kPriceNotificationsTableViewIdentifier;
-  self.tableView.estimatedSectionHeaderHeight = kSectionHeaderHeight;
   self.tableView.estimatedRowHeight = 100;
 
   self.title =
       l10n_util::GetNSString(IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TITLE);
-  [self createTableViewHeader];
 }
 
 #pragma mark - UITableViewDelegate
 
 - (CGFloat)tableView:(UITableView*)tableView
     heightForFooterInSection:(NSInteger)section {
+  if (section ==
+      [self.tableViewModel
+          sectionForSectionIdentifier:SectionIdentifierTableViewHeader]) {
+    return 0;
+  }
   return kVerticalTableViewSectionSpacing;
 }
 
@@ -101,7 +105,6 @@
     willSelectRowAtIndexPath:(NSIndexPath*)indexPath {
   if (@available(iOS 16.0, *)) {
     return [super tableView:tableView willSelectRowAtIndexPath:indexPath];
-    ;
   }
 
   PriceNotificationsTableViewItem* item =
@@ -158,6 +161,10 @@
                                    SectionIdentifierTrackableItemsOnCurrentSite
                                                    isEmpty:!trackableItem]
       forSectionWithIdentifier:SectionIdentifierTrackableItemsOnCurrentSite];
+  [self.tableViewModel setHeader:[self createHeaderForSectionIndex:
+                                           SectionIdentifierTableViewHeader
+                                                           isEmpty:NO]
+        forSectionWithIdentifier:SectionIdentifierTableViewHeader];
 
   if (trackableItem && !currentlyTracking) {
     [self addItem:trackableItem
@@ -169,11 +176,9 @@
   }
 
   [self.tableView
-        reloadSections:
-            [NSIndexSet
-                indexSetWithIndexesInRange:
-                    [self createRangeForSectionIdentifier:
-                              SectionIdentifierTrackableItemsOnCurrentSite]]
+        reloadSections:[self createIndexSetForSectionIdentifiers:
+                                 {SectionIdentifierTableViewHeader,
+                                  SectionIdentifierTrackableItemsOnCurrentSite}]
       withRowAnimation:UITableViewRowAnimationAutomatic];
 }
 
@@ -200,11 +205,9 @@
     return;
   }
 
-  [self.tableView
-        reloadSections:[NSIndexSet indexSetWithIndexesInRange:
-                                       [self createRangeForSectionIdentifier:
-                                                 SectionIdentifierTrackedItems]]
-      withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView reloadSections:[self createIndexSetForSectionIdentifiers:
+                                           {SectionIdentifierTrackedItems}]
+                withRowAnimation:UITableViewRowAnimationAutomatic];
 }
 
 - (void)didStopPriceTrackingItem:(PriceNotificationsTableViewItem*)trackedItem
@@ -231,10 +234,8 @@
                                                      isEmpty:YES]
               forSectionWithIdentifier:trackedSection];
           [self.tableView
-                reloadSections:[NSIndexSet
-                                   indexSetWithIndexesInRange:
-                                       [self createRangeForSectionIdentifier:
-                                                 SectionIdentifierTrackedItems]]
+                reloadSections:[self createIndexSetForSectionIdentifiers:
+                                         {SectionIdentifierTrackedItems}]
               withRowAnimation:UITableViewRowAnimationAutomatic];
         }
 
@@ -268,13 +269,15 @@
   [model setHeader:[self createHeaderForSectionIndex:trackableSectionID
                                              isEmpty:YES]
       forSectionWithIdentifier:trackableSectionID];
+  [self.tableViewModel setHeader:[self createHeaderForSectionIndex:
+                                           SectionIdentifierTableViewHeader
+                                                           isEmpty:NO]
+        forSectionWithIdentifier:SectionIdentifierTableViewHeader];
 
   [self.tableView
-        reloadSections:
-            [NSIndexSet
-                indexSetWithIndexesInRange:
-                    [self createRangeForSectionIdentifier:
-                              SectionIdentifierTrackableItemsOnCurrentSite]]
+        reloadSections:[self createIndexSetForSectionIdentifiers:
+                                 {SectionIdentifierTableViewHeader,
+                                  SectionIdentifierTrackableItemsOnCurrentSite}]
       withRowAnimation:UITableViewRowAnimationAutomatic];
 
   [self addTrackedItem:trackableItem];
@@ -324,32 +327,19 @@
 - (TableViewHeaderFooterItem*)createHeaderForSectionIndex:
                                   (SectionIdentifier)sectionID
                                                   isEmpty:(BOOL)isEmpty {
-  TableViewTextHeaderFooterItem* header =
-      [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeHeader];
-
   switch (sectionID) {
-    case SectionIdentifierTrackableItemsOnCurrentSite:
-      header.text = l10n_util::GetNSString(
-          IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKABLE_SECTION_HEADER);
-      if (self.itemOnCurrentSiteIsTracked) {
-        header.subtitleText = l10n_util::GetNSString(
-            IDS_IOS_PRICE_NOTIFICAITONS_PRICE_TRACK_TRACKABLE_ITEM_IS_TRACKED);
-      } else if (isEmpty) {
-        header.subtitleText = l10n_util::GetNSString(
-            IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKABLE_EMPTY_LIST);
-      }
-      break;
-    case SectionIdentifierTrackedItems:
-      header.text = l10n_util::GetNSString(
-          IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKED_SECTION_HEADER);
-      if (isEmpty) {
-        header.subtitleText = l10n_util::GetNSString(
-            IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKING_EMPTY_LIST);
-      }
-      break;
+    case SectionIdentifierTrackableItemsOnCurrentSite: {
+      return [self createHeaderForTrackableSection:isEmpty];
+    }
+    case SectionIdentifierTrackedItems: {
+      return [self createHeaderForTrackedSection:isEmpty];
+    }
+    case SectionIdentifierTableViewHeader: {
+      return [self createHeaderForTableViewHeaderSection];
+    }
   }
 
-  return header;
+  return nil;
 }
 
 // Constructs the TableViewModel's sections and section headers and initializes
@@ -365,6 +355,12 @@
   SectionIdentifier trackedSectionID = SectionIdentifierTrackedItems;
   TableViewModel* model = self.tableViewModel;
 
+  [model addSectionWithIdentifier:SectionIdentifierTableViewHeader];
+  [model setHeader:
+             [self createHeaderForSectionIndex:SectionIdentifierTableViewHeader
+                                       isEmpty:NO]
+      forSectionWithIdentifier:SectionIdentifierTableViewHeader];
+
   [model addSectionWithIdentifier:trackableSectionID];
   [model setHeader:[self createHeaderForSectionIndex:trackableSectionID
                                              isEmpty:NO]
@@ -376,31 +372,6 @@
       forSectionWithIdentifier:trackedSectionID];
 }
 
-// Creates, configures, and sets a UIView to the TableViewControllers's
-// TableHeaderView property.
-- (void)createTableViewHeader {
-  UIView* view =
-      [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0,
-                                               kDescriptionLabelHeight +
-                                                   kDescriptionTopSpacing +
-                                                   kDescriptionBottomSpacing)];
-  UILabel* description = [[UILabel alloc] init];
-  description.translatesAutoresizingMaskIntoConstraints = NO;
-  description.font =
-      [UIFont preferredFontForTextStyle:kTableViewSublabelFontStyle];
-  description.textColor = [UIColor colorNamed:kTextSecondaryColor];
-  description.text = l10n_util::GetNSString(
-      IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION);
-
-  [view addSubview:description];
-  self.tableView.tableHeaderView = view;
-
-  AddSameConstraintsWithInsets(
-      description, view,
-      NSDirectionalEdgeInsetsMake(kDescriptionPadding, kDescriptionPadding,
-                                  kDescriptionPadding, kDescriptionPadding));
-}
-
 // Adds placeholder items into each section.
 - (void)addLoadingStateItems {
   if (_shouldHideLoadingState) {
@@ -457,23 +428,73 @@
 
   [self.tableView deleteRowsAtIndexPaths:itemIndexPaths
                         withRowAnimation:UITableViewRowAnimationAutomatic];
-  [self.tableView
-        reloadSections:[NSIndexSet indexSetWithIndexesInRange:
-                                       [self createRangeForSectionIdentifier:
-                                                 SectionIdentifierTrackedItems]]
-      withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView reloadSections:[self createIndexSetForSectionIdentifiers:
+                                           {SectionIdentifierTrackedItems}]
+                withRowAnimation:UITableViewRowAnimationAutomatic];
   _displayedLoadingState = NO;
 }
 
-// Creates the NSRanges that encapsulate the various sections within the table
-// view.
-- (NSRange)createRangeForSectionIdentifier:(SectionIdentifier)sectionID {
-  switch (sectionID) {
-    case SectionIdentifierTrackableItemsOnCurrentSite:
-      return NSMakeRange(0, 1);
-    case SectionIdentifierTrackedItems:
-      return NSMakeRange(1, 1);
+// Creates the IndexSet that encapsulate the various sections provided in
+// `sectionIDs`
+- (NSIndexSet*)createIndexSetForSectionIdentifiers:
+    (std::vector<SectionIdentifier>)sectionIDs {
+  NSMutableIndexSet* indexSet = [[NSMutableIndexSet alloc] init];
+  for (auto& sectionID : sectionIDs) {
+    NSUInteger sectionIndex =
+        [self.tableViewModel sectionForSectionIdentifier:sectionID];
+    [indexSet addIndex:sectionIndex];
   }
+  return indexSet;
+}
+
+// Creates the TableViewHeaderFooterItem for the section
+// `SectionIdentifierTrackableItemsOnCurrentSite`
+- (TableViewTextHeaderFooterItem*)createHeaderForTrackableSection:
+    (BOOL)isEmpty {
+  TableViewTextHeaderFooterItem* header =
+      [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeHeader];
+  header.text = l10n_util::GetNSString(
+      IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKABLE_SECTION_HEADER);
+  if (self.itemOnCurrentSiteIsTracked) {
+    header.subtitleText = l10n_util::GetNSString(
+        IDS_IOS_PRICE_NOTIFICAITONS_PRICE_TRACK_TRACKABLE_ITEM_IS_TRACKED);
+  } else if (isEmpty) {
+    header.subtitleText = l10n_util::GetNSString(
+        IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKABLE_EMPTY_LIST);
+  }
+  return header;
+}
+
+// Creates the TableViewHeaderFooterItem for the section
+// `SectionIdentifierTrackedItems`
+- (TableViewTextHeaderFooterItem*)createHeaderForTrackedSection:(BOOL)isEmpty {
+  TableViewTextHeaderFooterItem* header =
+      [[TableViewTextHeaderFooterItem alloc] initWithType:ItemTypeHeader];
+  header.text = l10n_util::GetNSString(
+      IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKED_SECTION_HEADER);
+  if (isEmpty) {
+    header.subtitleText = l10n_util::GetNSString(
+        IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_TRACKABLE_EMPTY_LIST);
+  }
+  return header;
+}
+
+// Creates the TableViewHeaderFooterItem for the section
+// `SectionIdentifierTableViewHeader`
+- (TableViewLinkHeaderFooterItem*)createHeaderForTableViewHeaderSection {
+  TableViewLinkHeaderFooterItem* header = [[TableViewLinkHeaderFooterItem alloc]
+      initWithType:ItemTypeTableViewHeader];
+
+  if (self.itemOnCurrentSiteIsTracked) {
+    header.text = l10n_util::GetNSString(
+        IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION_FOR_TRACKED_ITEM);
+    header.urls = @[ [[CrURL alloc] initWithGURL:GURL(kBookmarksSettingsURL)] ];
+    return header;
+  }
+
+  header.text = l10n_util::GetNSString(
+      IDS_IOS_PRICE_NOTIFICATIONS_PRICE_TRACK_DESCRIPTION);
+  return header;
 }
 
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill/BUILD.gn b/ios/chrome/browser/ui/settings/autofill/BUILD.gn
index 7c3ce20..4b5dc38c 100644
--- a/ios/chrome/browser/ui/settings/autofill/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/autofill/BUILD.gn
@@ -98,6 +98,8 @@
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/main:test_support",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/signin:test_support",
     "//ios/chrome/browser/ui/settings:settings_root",
     "//ios/chrome/browser/ui/settings:test_support",
     "//ios/chrome/browser/ui/table_view",
@@ -130,6 +132,7 @@
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/ui/autofill:eg_test_support+eg2",
     "//ios/chrome/browser/ui/autofill:eg_test_support+eg2",
+    "//ios/chrome/browser/ui/elements:eg_test_support+eg2",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
     "//ios/testing/earl_grey:eg_test_support+eg2",
     "//ios/third_party/earl_grey2:test_lib",
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
index 310a728..4da56c7 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
@@ -6,8 +6,10 @@
 
 #import "base/ios/ios_util.h"
 #import "base/test/ios/wait_util.h"
+#import "components/autofill/core/common/autofill_features.h"
 #import "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ui/autofill/autofill_app_interface.h"
+#import "ios/chrome/browser/ui/elements/activity_overlay_egtest_util.h"
 #import "ios/chrome/browser/ui/settings/autofill/autofill_constants.h"
 #import "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
@@ -109,6 +111,18 @@
   [super tearDown];
 }
 
+- (AppLaunchConfiguration)appConfigurationForTestCase {
+  AppLaunchConfiguration config;
+
+  if ([self isRunningTest:@selector(testConfirmationShownOnDeletion)] ||
+      [self isRunningTest:@selector(testConfirmationShownOnSwipeToDelete)]) {
+    config.features_enabled.push_back(
+        autofill::features::kAutofillAccountProfilesUnionView);
+  }
+
+  return config;
+}
+
 // Helper to open the settings page for Autofill profiles.
 - (void)openAutofillProfilesSettings {
   [ChromeEarlGreyUI openSettingsMenu];
@@ -134,6 +148,22 @@
   [ChromeEarlGreyUI waitForAppToIdle];
 }
 
+// Helper to open the settings page for the Autofill profile card list in edit
+// mode.
+- (void)openProfileListInEditMode {
+  [self openAutofillProfilesSettings];
+
+  [[EarlGrey selectElementWithMatcher:NavigationBarEditButton()]
+      performAction:grey_tap()];
+}
+
+// Returns the delete button on the deletion confirmation action sheet.
+- (id<GREYMatcher>)confirmDeleteAddressButton {
+  return grey_allOf(grey_accessibilityLabel(@"Test Delete Address"),
+                    grey_accessibilityTrait(UIAccessibilityTraitButton),
+                    grey_userInteractionEnabled(), nil);
+}
+
 // Test that the page for viewing Autofill profile details is as expected.
 - (void)testAutofillProfileViewPage {
   [AutofillAppInterface saveExampleProfile];
@@ -237,12 +267,7 @@
 // profiles switch is disabled.
 - (void)testListViewEditMode {
   [AutofillAppInterface saveExampleProfile];
-
-  [self openAutofillProfilesSettings];
-
-  // Switch on edit mode.
-  [[EarlGrey selectElementWithMatcher:NavigationBarEditButton()]
-      performAction:grey_tap()];
+  [self openProfileListInEditMode];
 
   // Check the Autofill profile switch is disabled.
   [[EarlGrey
@@ -285,4 +310,83 @@
   [self exitSettingsMenu];
 }
 
+// Checks that the autofill profile is deleted when the deletion is initiated.
+- (void)testDeletionOfAddressProfile {
+  [AutofillAppInterface saveExampleProfile];
+  [self openProfileListInEditMode];
+
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityLabel(
+                                   [AutofillAppInterface exampleProfileName])]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::
+                                          SettingsBottomToolbarDeleteButton()]
+      performAction:grey_tap()];
+
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::
+                                          SettingsBottomToolbarDeleteButton()]
+      assertWithMatcher:grey_nil()];
+  // If the done button in the nav bar is enabled it is no longer in edit
+  // mode.
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Checks that the confirmation action sheet is shown when an autofill profile
+// is deleted and the profile is deleted when the confirmation is accepted.
+- (void)testConfirmationShownOnDeletion {
+  [AutofillAppInterface saveExampleProfile];
+  [self openProfileListInEditMode];
+
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityLabel(
+                                   [AutofillAppInterface exampleProfileName])]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::
+                                          SettingsBottomToolbarDeleteButton()]
+      performAction:grey_tap()];
+
+  [[EarlGrey selectElementWithMatcher:[self confirmDeleteAddressButton]]
+      performAction:grey_tap()];
+  WaitForActivityOverlayToDisappear();
+
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::
+                                          SettingsBottomToolbarDeleteButton()]
+      assertWithMatcher:grey_nil()];
+  // If the done button in the nav bar is enabled it is no longer in edit
+  // mode.
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Checks that the confirmation action sheet is shown when an autofill profile
+// is swiped to be deleted.
+- (void)testConfirmationShownOnSwipeToDelete {
+  [AutofillAppInterface saveExampleProfile];
+  [self openAutofillProfilesSettings];
+
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityLabel(
+                                   [AutofillAppInterface exampleProfileName])]
+      performAction:chrome_test_util::SwipeToShowDeleteButton()];
+
+  // There are multiple delete buttons but only one enabled.
+  [[EarlGrey
+      selectElementWithMatcher:grey_allOf(
+                                   ButtonWithAccessibilityLabel(@"Delete"),
+                                   grey_not(grey_accessibilityTrait(
+                                       UIAccessibilityTraitNotEnabled)),
+                                   nil)] performAction:grey_tap()];
+
+  [[EarlGrey selectElementWithMatcher:[self confirmDeleteAddressButton]]
+      performAction:grey_tap()];
+  WaitForActivityOverlayToDisappear();
+
+  // Check the profile has been deleted.
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityLabel(
+                                   [AutofillAppInterface exampleProfileName])]
+      assertWithMatcher:grey_notVisible()];
+}
+
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.h b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.h
index 7f5fecbd..6d5eff3 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.h
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.h
@@ -8,15 +8,14 @@
 #import "ios/chrome/browser/ui/settings/settings_controller_protocol.h"
 #import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h"
 
-class ChromeBrowserState;
+class Browser;
 
 // The TableView for the Autofill settings.
 @interface AutofillProfileTableViewController
     : SettingsRootTableViewController <SettingsControllerProtocol>
 
-// The designated initializer. `browserState` must not be nil.
-- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState
-    NS_DESIGNATED_INITIALIZER;
+// The designated initializer. `browser` must not be nil.
+- (instancetype)initWithBrowser:(Browser*)browser NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE;
 
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
index b5aec66..2b94f5a 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
@@ -10,6 +10,7 @@
 #import "base/metrics/user_metrics_action.h"
 #import "base/strings/sys_string_conversions.h"
 #import "components/autofill/core/browser/personal_data_manager.h"
+#import "components/autofill/core/common/autofill_features.h"
 #import "components/autofill/core/common/autofill_prefs.h"
 #import "components/autofill/ios/browser/personal_data_manager_observer_bridge.h"
 #import "components/password_manager/core/common/password_manager_features.h"
@@ -18,13 +19,16 @@
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/autofill/personal_data_manager_factory.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/net/crurl.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/sync/sync_setup_service.h"
 #import "ios/chrome/browser/sync/sync_setup_service_factory.h"
+#import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h"
 #import "ios/chrome/browser/ui/settings/autofill/autofill_constants.h"
 #import "ios/chrome/browser/ui/settings/autofill/autofill_profile_edit_table_view_controller.h"
+#import "ios/chrome/browser/ui/settings/autofill/cells/autofill_address_profile_source.h"
 #import "ios/chrome/browser/ui/settings/autofill/cells/autofill_profile_item.h"
 #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h"
@@ -72,7 +76,7 @@
     PopoverLabelViewControllerDelegate> {
   autofill::PersonalDataManager* _personalDataManager;
 
-  ChromeBrowserState* _browserState;
+  Browser* _browser;
   std::unique_ptr<autofill::PersonalDataManagerObserverBridge> _observer;
 
   // Deleting profiles updates PersonalDataManager resulting in an observer
@@ -89,20 +93,30 @@
 @property(nonatomic, getter=isAutofillProfileEnabled)
     BOOL autofillProfileEnabled;
 
+// If the syncing is enabled, stores the signed in user's email.
+@property(nonatomic, strong) NSString* syncingUserEmail;
+
+// Default NO. YES, when the autofill syncing is enabled.
+@property(nonatomic, assign, getter=isSyncEnabled) BOOL syncEnabled;
+
+// Coordinator that managers a UIAlertController to delete addresses.
+@property(nonatomic, strong) ActionSheetCoordinator* deletionSheetCoordinator;
+
 @end
 
 @implementation AutofillProfileTableViewController
 
-- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState {
-  DCHECK(browserState);
+- (instancetype)initWithBrowser:(Browser*)browser {
+  DCHECK(browser);
 
   self = [super initWithStyle:ChromeTableViewStyle()];
   if (self) {
     self.title = l10n_util::GetNSString(IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE);
     self.shouldDisableDoneButtonOnEdit = YES;
-    _browserState = browserState;
+    _browser = browser;
     _personalDataManager =
-        autofill::PersonalDataManagerFactory::GetForBrowserState(_browserState);
+        autofill::PersonalDataManagerFactory::GetForBrowserState(
+            _browser->GetBrowserState());
     _observer.reset(new autofill::PersonalDataManagerObserverBridge(self));
     _personalDataManager->AddObserver(_observer.get());
   }
@@ -120,6 +134,7 @@
   self.tableView.accessibilityIdentifier = kAutofillProfileTableViewID;
   self.tableView.estimatedSectionFooterHeight =
       kTableViewHeaderFooterViewHeight;
+  [self setSyncingUserEmail];
   [self updateUIForEditState];
   [self loadModel];
 }
@@ -133,7 +148,7 @@
 
   [model addSectionWithIdentifier:SectionIdentifierSwitches];
 
-  if (_browserState->GetPrefs()->IsManagedPreference(
+  if (_browser->GetBrowserState()->GetPrefs()->IsManagedPreference(
           autofill::prefs::kAutofillProfileEnabled)) {
     [model addItem:[self managedAddressItem]
         toSectionWithIdentifier:SectionIdentifierSwitches];
@@ -232,6 +247,15 @@
   item.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
   item.accessibilityIdentifier = title;
   item.GUID = guid;
+  if (autofillProfile.source() == autofill::AutofillProfile::Source::kAccount) {
+    item.autofillProfileSource =
+        AutofillAddressProfileSource::AutofillAccountProfile;
+  } else if (self.syncEnabled) {
+    item.autofillProfileSource =
+        AutofillAddressProfileSource::AutofillSyncableProfile;
+  } else {
+    item.autofillProfileSource = AutofillLocalProfile;
+  }
   return item;
 }
 
@@ -259,7 +283,7 @@
 
   // Clear C++ ivars.
   _personalDataManager = nullptr;
-  _browserState = nullptr;
+  _browser = nullptr;
 
   _settingsAreDismissed = YES;
 }
@@ -271,7 +295,11 @@
 }
 
 - (BOOL)shouldHideToolbar {
-  return self.navigationController.visibleViewController != self;
+  // Hide the toolbar if the visible view controller is not the current view
+  // controller or the `deletionSheetCoordinator` is shown.
+  return self.navigationController.visibleViewController != self &&
+         self.deletionSheetCoordinator != nil &&
+         ![self.deletionSheetCoordinator isVisible];
 }
 
 - (BOOL)shouldShowEditDoneButton {
@@ -287,18 +315,20 @@
 
 // Override.
 - (void)deleteItems:(NSArray<NSIndexPath*>*)indexPaths {
-  // If there are no index paths, return early. This can happen if the user
-  // presses the Delete button twice in quick succession.
-  if (![indexPaths count])
-    return;
-
-  _deletionInProgress = YES;
-  [self willDeleteItemsAtIndexPaths:indexPaths];
-  // Call super to delete the items in the table view.
-  [super deleteItems:indexPaths];
-
-  // TODO(crbug.com/650390) Generalize removing empty sections
-  [self removeSectionIfEmptyForSectionWithIdentifier:SectionIdentifierProfiles];
+  if (base::FeatureList::IsEnabled(
+          autofill::features::kAutofillAccountProfilesUnionView)) {
+    [self showDeletionConfirmationForIndexPaths:indexPaths];
+  } else {
+    // If there are no index paths, return early. This can happen if the user
+    // presses the Delete button twice in quick succession.
+    if (![indexPaths count]) {
+      return;
+    }
+    [self willDeleteItemsAtIndexPaths:indexPaths];
+    // TODO(crbug.com/650390) Generalize removing empty sections
+    [self
+        removeSectionIfEmptyForSectionWithIdentifier:SectionIdentifierProfiles];
+  }
 }
 
 #pragma mark - UITableViewDelegate
@@ -325,30 +355,17 @@
     return;
   }
 
-  TableViewModel* model = self.tableViewModel;
-  if ([model itemTypeForIndexPath:indexPath] != ItemTypeAddress)
+  if (![self isItemTypeForIndexPathAddress:indexPath]) {
     return;
+  }
 
   const std::vector<autofill::AutofillProfile*> autofillProfiles =
       _personalDataManager->GetProfiles();
-  AuthenticationService* authenticationService =
-      AuthenticationServiceFactory::GetForBrowserState(_browserState);
-  DCHECK(authenticationService);
-  NSString* syncingUserEmail = nil;
-  id<SystemIdentity> identity =
-      authenticationService->GetPrimaryIdentity(signin::ConsentLevel::kSync);
-  if (identity) {
-    SyncSetupService* syncSetupService =
-        SyncSetupServiceFactory::GetForBrowserState(_browserState);
-    if (syncSetupService->IsDataTypeActive(syncer::AUTOFILL)) {
-      syncingUserEmail = identity.userEmail;
-    }
-  }
   AutofillProfileEditTableViewController* controller =
       [AutofillProfileEditTableViewController
           controllerWithProfile:*autofillProfiles[indexPath.item]
             personalDataManager:_personalDataManager
-                      userEmail:syncingUserEmail];
+                      userEmail:self.syncingUserEmail];
   controller.dispatcher = self.dispatcher;
   [self.navigationController pushViewController:controller animated:YES];
   [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
@@ -504,12 +521,32 @@
 #pragma mark - Getters and Setter
 
 - (BOOL)isAutofillProfileEnabled {
-  return autofill::prefs::IsAutofillProfileEnabled(_browserState->GetPrefs());
+  return autofill::prefs::IsAutofillProfileEnabled(
+      _browser->GetBrowserState()->GetPrefs());
 }
 
 - (void)setAutofillProfileEnabled:(BOOL)isEnabled {
-  return autofill::prefs::SetAutofillProfileEnabled(_browserState->GetPrefs(),
-                                                    isEnabled);
+  return autofill::prefs::SetAutofillProfileEnabled(
+      _browser->GetBrowserState()->GetPrefs(), isEnabled);
+}
+
+- (void)setSyncingUserEmail {
+  self.syncEnabled = NO;
+  AuthenticationService* authenticationService =
+      AuthenticationServiceFactory::GetForBrowserState(
+          _browser->GetBrowserState());
+  DCHECK(authenticationService);
+  id<SystemIdentity> identity =
+      authenticationService->GetPrimaryIdentity(signin::ConsentLevel::kSync);
+  if (identity) {
+    SyncSetupService* syncSetupService =
+        SyncSetupServiceFactory::GetForBrowserState(
+            _browser->GetBrowserState());
+    if (syncSetupService->IsDataTypeActive(syncer::AUTOFILL)) {
+      self.syncingUserEmail = identity.userEmail;
+      self.syncEnabled = YES;
+    }
+  }
 }
 
 #pragma mark - Private
@@ -519,11 +556,21 @@
   if (_settingsAreDismissed)
     return;
 
+  _deletionInProgress = YES;
   for (NSIndexPath* indexPath in indexPaths) {
     AutofillProfileItem* item = base::mac::ObjCCastStrict<AutofillProfileItem>(
         [self.tableViewModel itemAtIndexPath:indexPath]);
     _personalDataManager->RemoveByGUID([item GUID]);
   }
+
+  [self.tableView
+      performBatchUpdates:^{
+        [self removeFromModelItemAtIndexPaths:indexPaths];
+        [self.tableView
+            deleteRowsAtIndexPaths:indexPaths
+                  withRowAnimation:UITableViewRowAnimationAutomatic];
+      }
+               completion:nil];
 }
 
 // Remove the section from the model and collectionView if there are no more
@@ -581,4 +628,91 @@
   [self view:nil didTapLinkURL:[[CrURL alloc] initWithNSURL:URL]];
 }
 
+#pragma mark - Private
+
+// Shows the action sheet asking for the confirmation on delete from the user.
+- (void)showDeletionConfirmationForIndexPaths:
+    (NSArray<NSIndexPath*>*)indexPaths {
+  NSString* deletionConfirmationString =
+      [self getDeletionConfirmationStringFromIndexPaths:indexPaths];
+  if (deletionConfirmationString == nil) {
+    return;
+  }
+  // TODO(crbug.com/1407666): Explore attaching the sheet coordinator to the
+  // cell of the indexPath calling it.
+  self.deletionSheetCoordinator = [[ActionSheetCoordinator alloc]
+      initWithBaseViewController:self
+                         browser:_browser
+                           title:deletionConfirmationString
+                         message:nil
+                   barButtonItem:self.deleteButton];
+
+  if (UIContentSizeCategoryIsAccessibilityCategory(
+          UIApplication.sharedApplication.preferredContentSizeCategory)) {
+    self.deletionSheetCoordinator.alertStyle = UIAlertControllerStyleAlert;
+  }
+
+  self.deletionSheetCoordinator.popoverArrowDirection =
+      UIPopoverArrowDirectionAny;
+  __weak AutofillProfileTableViewController* weakSelf = self;
+  // TODO(crbug.com/1407666): Add i18n string.
+  [self.deletionSheetCoordinator
+      addItemWithTitle:@"Test Delete Address"
+                action:^{
+                  [weakSelf willDeleteItemsAtIndexPaths:indexPaths];
+                  // TODO(crbug.com/650390) Generalize removing empty sections
+                  [weakSelf removeSectionIfEmptyForSectionWithIdentifier:
+                                SectionIdentifierProfiles];
+                }
+                 style:UIAlertActionStyleDestructive];
+  [self.deletionSheetCoordinator start];
+}
+
+// Returns the deletion confirmation message string based on the
+// source of the profiles that are being deleted.
+- (NSString*)getDeletionConfirmationStringFromIndexPaths:
+    (NSArray<NSIndexPath*>*)indexPaths {
+  BOOL hasAccountProfiles = NO;
+  BOOL hasSyncProfiles = NO;
+
+  NSInteger profileCount = 0;
+
+  for (NSIndexPath* indexPath in indexPaths) {
+    if (![self isItemTypeForIndexPathAddress:indexPath]) {
+      continue;
+    }
+    profileCount++;
+    AutofillProfileItem* item = base::mac::ObjCCastStrict<AutofillProfileItem>(
+        [self.tableViewModel itemAtIndexPath:indexPath]);
+    switch (item.autofillProfileSource) {
+      case AutofillAccountProfile:
+        hasAccountProfiles = YES;
+        break;
+      case AutofillSyncableProfile:
+        hasSyncProfiles = YES;
+        break;
+      case AutofillLocalProfile:
+        break;
+    }
+  }
+
+  BOOL hasMultipleProfiles = profileCount > 1;
+
+  if (hasAccountProfiles) {
+    return hasMultipleProfiles ? @"These GAS address" : @"This GAS address";
+  } else if (hasSyncProfiles) {
+    return hasMultipleProfiles ? @"These Sync address" : @"This Sync address";
+  } else if (profileCount > 0) {
+    return hasMultipleProfiles ? @"These Local address" : @"This Local address";
+  }
+  // Can happen if user presses delete in quick succesion.
+  return nil;
+}
+
+// Returns true when the item type for `indexPath` is Address.
+- (BOOL)isItemTypeForIndexPathAddress:(NSIndexPath*)indexPath {
+  return
+      [self.tableViewModel itemTypeForIndexPath:indexPath] == ItemTypeAddress;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm
index 3289fd4..6931015 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller_unittest.mm
@@ -8,12 +8,16 @@
 #import "base/mac/foundation_util.h"
 #import "base/strings/utf_string_conversions.h"
 #import "base/test/ios/wait_util.h"
+#import "base/test/scoped_feature_list.h"
 #import "components/autofill/core/browser/data_model/autofill_profile.h"
 #import "components/autofill/core/browser/personal_data_manager.h"
 #import "components/autofill/core/common/autofill_features.h"
 #import "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/autofill/personal_data_manager_factory.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service_factory.h"
+#import "ios/chrome/browser/signin/fake_authentication_service_delegate.h"
 #import "ios/chrome/browser/ui/settings/personal_data_manager_finished_profile_tasks_waiter.h"
 #import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h"
 #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h"
@@ -21,6 +25,8 @@
 #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
 #import "ios/web/public/test/web_task_environment.h"
 #import "testing/gtest/include/gtest/gtest.h"
+#import "testing/gtest_mac.h"
+#import "third_party/ocmock/gtest_support.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -39,7 +45,15 @@
     test_cbs_builder.AddTestingFactory(
         ios::WebDataServiceFactory::GetInstance(),
         ios::WebDataServiceFactory::GetDefaultFactory());
+    test_cbs_builder.AddTestingFactory(
+        AuthenticationServiceFactory::GetInstance(),
+        AuthenticationServiceFactory::GetDefaultFactory());
     chrome_browser_state_ = test_cbs_builder.Build();
+    browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get());
+
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<FakeAuthenticationServiceDelegate>());
 
     // Set circular SyncService dependency to null.
     autofill::PersonalDataManagerFactory::GetForBrowserState(
@@ -49,7 +63,7 @@
 
   ChromeTableViewController* InstantiateController() override {
     return [[AutofillProfileTableViewController alloc]
-        initWithBrowserState:chrome_browser_state_.get()];
+        initWithBrowser:browser_.get()];
   }
 
   void TearDown() override {
@@ -84,6 +98,7 @@
   web::WebTaskEnvironment task_environment_;
   IOSChromeScopedTestingLocalState local_state_;
   std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
+  std::unique_ptr<Browser> browser_;
 };
 
 // Default test case of no addresses.
diff --git a/ios/chrome/browser/ui/settings/autofill/cells/BUILD.gn b/ios/chrome/browser/ui/settings/autofill/cells/BUILD.gn
index 6bac95af..6c67c22 100644
--- a/ios/chrome/browser/ui/settings/autofill/cells/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/autofill/cells/BUILD.gn
@@ -4,6 +4,7 @@
 
 source_set("cells") {
   sources = [
+    "autofill_address_profile_source.h",
     "autofill_card_item.h",
     "autofill_card_item.mm",
     "autofill_profile_item.h",
diff --git a/ios/chrome/browser/ui/settings/autofill/cells/autofill_address_profile_source.h b/ios/chrome/browser/ui/settings/autofill/cells/autofill_address_profile_source.h
new file mode 100644
index 0000000..18ad942b
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill/cells/autofill_address_profile_source.h
@@ -0,0 +1,19 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_CELLS_AUTOFILL_ADDRESS_PROFILE_SOURCE_H_
+#define IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_CELLS_AUTOFILL_ADDRESS_PROFILE_SOURCE_H_
+
+#import <Foundation/Foundation.h>
+
+// Corresponds to `autofill::AutofillProfile::Source` with the exception that
+// `autofill::AutofillProfile::Source::kLocalOrSyncable` is further broken into
+// local and syncable profiles.
+typedef NS_ENUM(NSInteger, AutofillAddressProfileSource) {
+  AutofillAccountProfile,
+  AutofillSyncableProfile,
+  AutofillLocalProfile
+};
+
+#endif  // IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_CELLS_AUTOFILL_ADDRESS_PROFILE_SOURCE_H_
diff --git a/ios/chrome/browser/ui/settings/autofill/cells/autofill_profile_item.h b/ios/chrome/browser/ui/settings/autofill/cells/autofill_profile_item.h
index d166b22..d500fff 100644
--- a/ios/chrome/browser/ui/settings/autofill/cells/autofill_profile_item.h
+++ b/ios/chrome/browser/ui/settings/autofill/cells/autofill_profile_item.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#import "ios/chrome/browser/ui/settings/autofill/cells/autofill_address_profile_source.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_multi_detail_text_item.h"
 
 // Item for autofill profile (address).
@@ -15,6 +16,9 @@
 // The GUID used by the PersonalDataManager to identify profiles.
 @property(nonatomic, assign) std::string GUID;
 
+// Denotes whether the profile is local, syncable or account profile.
+@property(nonatomic, assign) AutofillAddressProfileSource autofillProfileSource;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_CELLS_AUTOFILL_PROFILE_ITEM_H_
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
index 9217c8e7..015802c 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
@@ -296,8 +296,7 @@
                                        delegate {
   DCHECK(browser);
   AutofillProfileTableViewController* controller =
-      [[AutofillProfileTableViewController alloc]
-          initWithBrowserState:browser->GetBrowserState()];
+      [[AutofillProfileTableViewController alloc] initWithBrowser:browser];
   controller.dispatcher = [delegate handlerForSettings];
 
   SettingsNavigationController* nc = [[SettingsNavigationController alloc]
@@ -801,8 +800,7 @@
 - (void)showProfileSettingsFromViewController:
     (UIViewController*)baseViewController {
   AutofillProfileTableViewController* controller =
-      [[AutofillProfileTableViewController alloc]
-          initWithBrowserState:self.browser->GetBrowserState()];
+      [[AutofillProfileTableViewController alloc] initWithBrowser:self.browser];
   controller.dispatcher = [self.settingsNavigationDelegate handlerForSettings];
   [self pushViewController:controller animated:YES];
 }
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
index a1dbfb1..969f0f5 100644
--- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -1593,8 +1593,8 @@
       break;
     case SettingsItemTypeAutofillProfile:
       base::RecordAction(base::UserMetricsAction("AutofillAddressesViewed"));
-      controller = [[AutofillProfileTableViewController alloc]
-          initWithBrowserState:_browserState];
+      controller =
+          [[AutofillProfileTableViewController alloc] initWithBrowser:_browser];
       break;
     case SettingsItemTypePriceNotifications:
       DCHECK(IsPriceNotificationsEnabled());
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
index 84cdca1..5f474748 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
@@ -367,6 +367,9 @@
     didChangePinnedStateForWebState:(web::WebState*)webState
                             atIndex:(int)index {
   DCHECK_EQ(_webStateList, webStateList);
+  if (webStateList->IsBatchInProgress()) {
+    return;
+  }
 
   if (IsPinnedTabsEnabled() && webStateList->IsWebStatePinnedAt(index)) {
     [self.consumer removeItemWithID:webState->GetStableIdentifier()
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_mediator.mm b/ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_mediator.mm
index 2dd783e..cf295f6 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_mediator.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_mediator.mm
@@ -76,7 +76,7 @@
 
 - (void)disconnect {
   if (_webStateList) {
-    _allWebStateObservationForwarder.reset();
+    [self removeWebStateObservations];
     _webStateList->RemoveObserver(_webStateListObserver.get());
     _webStateListObserver = nullptr;
     _webStateList = nullptr;
@@ -87,7 +87,7 @@
 
 - (void)setWebStateList:(WebStateList*)webStateList {
   if (_webStateList) {
-    _allWebStateObservationForwarder.reset();
+    [self removeWebStateObservations];
     _webStateList->RemoveObserver(_webStateListObserver.get());
   }
 
@@ -99,11 +99,9 @@
     _webStateList->AddObserver(_webStateListObserver.get());
 
     _webStateObserver = std::make_unique<web::WebStateObserverBridge>(self);
-    // Observe all webStates of this `_webStateList`.
-    _allWebStateObservationForwarder =
-        std::make_unique<AllWebStateObservationForwarder>(
-            _webStateList, _webStateObserver.get());
+    [self addWebStateObservations];
   }
+
   [self populateConsumerItems];
 }
 
@@ -112,6 +110,11 @@
 - (void)webStateList:(WebStateList*)webStateList
     didDetachWebState:(web::WebState*)webState
               atIndex:(int)atIndex {
+  DCHECK_EQ(_webStateList, webStateList);
+  if (webStateList->IsBatchInProgress()) {
+    return;
+  }
+
   [self populateConsumerItems];
 }
 
@@ -119,6 +122,11 @@
     didInsertWebState:(web::WebState*)webState
               atIndex:(int)index
            activating:(BOOL)activating {
+  DCHECK_EQ(_webStateList, webStateList);
+  if (webStateList->IsBatchInProgress()) {
+    return;
+  }
+
   [self populateConsumerItems];
 }
 
@@ -140,6 +148,19 @@
   [self.consumer selectItemWithID:newWebState->GetStableIdentifier()];
 }
 
+- (void)webStateListWillBeginBatchOperation:(WebStateList*)webStateList {
+  DCHECK_EQ(_webStateList, webStateList);
+
+  [self removeWebStateObservations];
+}
+
+- (void)webStateListBatchOperationEnded:(WebStateList*)webStateList {
+  DCHECK_EQ(_webStateList, webStateList);
+
+  [self addWebStateObservations];
+  [self populateConsumerItems];
+}
+
 #pragma mark - TabFaviconDataSource
 
 - (void)faviconForIdentifier:(NSString*)identifier
@@ -205,6 +226,18 @@
 
 #pragma mark - Private
 
+// Adds an observation to every WebState of the current WebSateList.
+- (void)addWebStateObservations {
+  _allWebStateObservationForwarder =
+      std::make_unique<AllWebStateObservationForwarder>(
+          _webStateList, _webStateObserver.get());
+}
+
+// Removes an observation from every WebState of the current WebSateList.
+- (void)removeWebStateObservations {
+  _allWebStateObservationForwarder.reset();
+}
+
 // Calls `-populateItems:selectedItemID:` on the consumer.
 - (void)populateConsumerItems {
   if (!self.webStateList)
diff --git a/ios/chrome/browser/ui/webui/prefs_internals_ui.cc b/ios/chrome/browser/ui/webui/prefs_internals_ui.cc
index 8221ec7..5b8684e 100644
--- a/ios/chrome/browser/ui/webui/prefs_internals_ui.cc
+++ b/ios/chrome/browser/ui/webui/prefs_internals_ui.cc
@@ -48,7 +48,7 @@
 
     DCHECK_CURRENTLY_ON(web::WebThread::UI);
     std::string json;
-    base::Value prefs = browser_state_->GetPrefs()->GetPreferenceValues(
+    base::Value::Dict prefs = browser_state_->GetPrefs()->GetPreferenceValues(
         PrefService::INCLUDE_DEFAULTS);
     CHECK(base::JSONWriter::WriteWithOptions(
         prefs, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json));
diff --git a/media/cast/common/openscreen_conversion_helpers.cc b/media/cast/common/openscreen_conversion_helpers.cc
index e5d46a4f..89d699d 100644
--- a/media/cast/common/openscreen_conversion_helpers.cc
+++ b/media/cast/common/openscreen_conversion_helpers.cc
@@ -4,7 +4,7 @@
 
 #include "media/cast/common/openscreen_conversion_helpers.h"
 
-#include "third_party/openscreen/src/platform/base/byte_view.h"
+#include "third_party/openscreen/src/platform/base/span.h"
 
 namespace media::cast {
 
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
index f56be25..530e9539 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
@@ -247,7 +247,7 @@
     sql::Database db;
     ASSERT_TRUE(db.Open(temp_dir_.GetPath().Append(kCookieFilename)));
     sql::MetaTable meta_table_;
-    meta_table_.Init(&db, 1, 1);
+    ASSERT_TRUE(meta_table_.Init(&db, 1, 1));
     ASSERT_TRUE(db.Execute("DELETE FROM meta"));
     db.Close();
   }
diff --git a/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
index 2a88dd4a..df09ad9 100644
--- a/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
+++ b/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
@@ -296,7 +296,7 @@
     ASSERT_TRUE(
         db.Open(temp_dir_.GetPath().Append(kReportingAndNELStoreFilename)));
     sql::MetaTable meta_table;
-    meta_table.Init(&db, 1, 1);
+    ASSERT_TRUE(meta_table.Init(&db, 1, 1));
     ASSERT_TRUE(db.Execute("DELETE FROM meta"));
     db.Close();
   }
diff --git a/services/network/attribution/attribution_request_helper.cc b/services/network/attribution/attribution_request_helper.cc
index bff8ed0..781bbc4 100644
--- a/services/network/attribution/attribution_request_helper.cc
+++ b/services/network/attribution/attribution_request_helper.cc
@@ -17,6 +17,7 @@
 #include "services/network/attribution/attribution_attestation_mediator.h"
 #include "services/network/attribution/boringssl_attestation_cryptographer.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
 #include "services/network/trust_tokens/trust_token_key_commitment_getter.h"
 #include "url/origin.h"
@@ -143,8 +144,9 @@
     return;
   }
 
-  // TODO(crbug.com/1405832) Add attestation header to the response as it gets
-  // updated with a trigger attestation property.
+  response.trigger_attestation =
+      TriggerAttestation::Create(/*token=*/maybe_attestation_header.value(),
+                                 aggregatable_report_id_.AsLowercaseString());
 
   std::move(done).Run();
 }
diff --git a/services/network/attribution/attribution_request_helper_unittest.cc b/services/network/attribution/attribution_request_helper_unittest.cc
index 00961655..128831d 100644
--- a/services/network/attribution/attribution_request_helper_unittest.cc
+++ b/services/network/attribution/attribution_request_helper_unittest.cc
@@ -152,8 +152,9 @@
 
   RunFinalizeWith(*response_head);
 
-  // TODO(crbug.com/1405832): Update to test that the attestation token has been
-  // been added to the response.
+  ASSERT_TRUE(response_head->trigger_attestation);
+  EXPECT_TRUE(FakeCryptographer::IsToken(
+      response_head->trigger_attestation->token(), "blind-signature"));
 }
 
 TEST_F(AttributionRequestHelperTest, Finalize_NotBegun) {
@@ -165,8 +166,7 @@
 
   RunFinalizeWith(*response_head);
 
-  // TODO(crbug.com/1405832): Update to test that the attestation token has not
-  // been been added to the response.
+  EXPECT_FALSE(response_head->trigger_attestation);
 }
 
 struct CreateIfNeededTestCase {
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 47bba434..654b867 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -107,6 +107,7 @@
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/network_switches.h"
 #include "services/network/public/cpp/parsed_headers.h"
+#include "services/network/public/cpp/simple_host_resolver.h"
 #include "services/network/public/mojom/network_context.mojom-forward.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 #include "services/network/public/mojom/reporting_service.mojom.h"
@@ -1474,9 +1475,11 @@
     mojo::PendingReceiver<mojom::RestrictedUDPSocket> receiver,
     mojo::PendingRemote<mojom::UDPSocketListener> listener,
     CreateRestrictedUDPSocketCallback callback) {
+  // SimpleHostResolver is transitively owned by |this|.
   socket_factory_->CreateRestrictedUDPSocket(
       addr, mode, traffic_annotation, std::move(options), std::move(receiver),
-      std::move(listener), std::move(callback));
+      std::move(listener), SimpleHostResolver::Create(this),
+      std::move(callback));
 }
 
 void NetworkContext::CreateTCPServerSocket(
diff --git a/services/network/public/cpp/BUILD.gn b/services/network/public/cpp/BUILD.gn
index 77d7476e..390eaed7 100644
--- a/services/network/public/cpp/BUILD.gn
+++ b/services/network/public/cpp/BUILD.gn
@@ -295,6 +295,34 @@
   defines = [ "IS_NETWORK_CPP_CROSS_ORIGIN_IMPL" ]
 }
 
+# This component is separate from `:cpp_base` to avoid a circular dependency as
+# its needed by :trigger_attestation_traits.
+component("trigger_attestation") {
+  sources = [
+    "trigger_attestation.cc",
+    "trigger_attestation.h",
+  ]
+  deps = [ "//base" ]
+  defines = [ "IS_NETWORK_CPP_TRIGGER_ATTESTATION_IMPL" ]
+}
+
+# This component is separate from
+# //services/network/public/mojom:url_loader_base to use the same typemap for
+# both Blink and non-Blink bindings.
+component("trigger_attestation_traits") {
+  sources = [
+    "attribution_mojom_traits.cc",
+    "attribution_mojom_traits.h",
+    "trigger_attestation.h",
+  ]
+  deps = [
+    ":trigger_attestation",
+    "//base",
+    "//services/network/public/mojom:mojom_attribution_shared",
+  ]
+  defines = [ "IS_NETWORK_CPP_ATTRIBUTION_MOJOM_TRAITS_IMPL" ]
+}
+
 # This component is separate from cpp_base as it is a dependency of
 # //services/network/public/mojom:cookies_mojom.
 component("schemeful_site_mojom_support") {
@@ -392,6 +420,7 @@
     ":proxy_config_mojom_support",
     ":schemeful_site_mojom_support",
     ":structured_headers_mojom_support",
+    ":trigger_attestation",
     "//services/network/public/mojom:url_loader_base",
     "//url/ipc:url_ipc",
     "//url/mojom:url_mojom_gurl",
@@ -442,10 +471,15 @@
 source_set("test_support") {
   testonly = true
 
-  sources = [ "is_potentially_trustworthy_unittest.h" ]
+  sources = [
+    "is_potentially_trustworthy_unittest.h",
+    "trigger_attestation_test_utils.cc",
+    "trigger_attestation_test_utils.h",
+  ]
 
   public_deps = [
     ":cpp",
+    ":trigger_attestation",
     "//base",
     "//base/test:test_support",
     "//testing/gmock",
@@ -512,6 +546,7 @@
     "timing_allow_origin_parser_unittest.cc",
     "transferable_directory_unittest.cc",
     "transferable_socket_unittest.cc",
+    "trigger_attestation_unittest.cc",
     "url_loader_completion_status_mojom_traits_unittest.cc",
     "url_request_mojom_traits_unittest.cc",
     "variants_header_parser_unittest.cc",
diff --git a/services/network/public/cpp/attribution_mojom_traits.cc b/services/network/public/cpp/attribution_mojom_traits.cc
new file mode 100644
index 0000000..29d1e9b
--- /dev/null
+++ b/services/network/public/cpp/attribution_mojom_traits.cc
@@ -0,0 +1,35 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/network/public/cpp/attribution_mojom_traits.h"
+#include "services/network/public/cpp/trigger_attestation.h"
+#include "services/network/public/mojom/attribution.mojom-shared.h"
+
+namespace mojo {
+
+bool StructTraits<network::mojom::TriggerAttestationDataView,
+                  network::TriggerAttestation>::
+    Read(network::mojom::TriggerAttestationDataView data,
+         network::TriggerAttestation* out) {
+  std::string token;
+  if (!data.ReadToken(&token)) {
+    return false;
+  }
+
+  std::string aggregatable_report_id;
+  if (!data.ReadAggregatableReportId(&aggregatable_report_id)) {
+    return false;
+  }
+
+  auto trigger_attesation = network::TriggerAttestation::Create(
+      std::move(token), aggregatable_report_id);
+  if (!trigger_attesation) {
+    return false;
+  }
+
+  *out = std::move(*trigger_attesation);
+  return true;
+}
+
+}  // namespace mojo
diff --git a/services/network/public/cpp/attribution_mojom_traits.h b/services/network/public/cpp/attribution_mojom_traits.h
new file mode 100644
index 0000000..8a827c04
--- /dev/null
+++ b/services/network/public/cpp/attribution_mojom_traits.h
@@ -0,0 +1,35 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_NETWORK_PUBLIC_CPP_ATTRIBUTION_MOJOM_TRAITS_H_
+#define SERVICES_NETWORK_PUBLIC_CPP_ATTRIBUTION_MOJOM_TRAITS_H_
+
+#include "base/component_export.h"
+#include "mojo/public/cpp/bindings/struct_traits.h"
+#include "services/network/public/cpp/trigger_attestation.h"
+#include "services/network/public/mojom/attribution.mojom-shared.h"
+
+namespace mojo {
+
+template <>
+struct COMPONENT_EXPORT(NETWORK_CPP_ATTRIBUTION_MOJOM_TRAITS)
+    StructTraits<network::mojom::TriggerAttestationDataView,
+                 network::TriggerAttestation> {
+  static const std::string& token(
+      const network::TriggerAttestation& attestation) {
+    return attestation.token();
+  }
+
+  static std::string aggregatable_report_id(
+      const network::TriggerAttestation& attestation) {
+    return attestation.aggregatable_report_id().AsLowercaseString();
+  }
+
+  static bool Read(network::mojom::TriggerAttestationDataView data,
+                   network::TriggerAttestation* out);
+};
+
+}  // namespace mojo
+
+#endif  // SERVICES_NETWORK_PUBLIC_CPP_ATTRIBUTION_MOJOM_TRAITS_H_
diff --git a/services/network/public/cpp/trigger_attestation.cc b/services/network/public/cpp/trigger_attestation.cc
new file mode 100644
index 0000000..fe81d83
--- /dev/null
+++ b/services/network/public/cpp/trigger_attestation.cc
@@ -0,0 +1,47 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/network/public/cpp/trigger_attestation.h"
+
+#include <string>
+#include <utility>
+
+#include "base/check.h"
+#include "base/guid.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace network {
+
+TriggerAttestation::TriggerAttestation() = default;
+TriggerAttestation::~TriggerAttestation() = default;
+
+TriggerAttestation::TriggerAttestation(const TriggerAttestation&) = default;
+TriggerAttestation& TriggerAttestation::operator=(const TriggerAttestation&) =
+    default;
+
+TriggerAttestation::TriggerAttestation(TriggerAttestation&&) = default;
+TriggerAttestation& TriggerAttestation::operator=(TriggerAttestation&&) =
+    default;
+
+// static
+absl::optional<TriggerAttestation> TriggerAttestation::Create(
+    std::string token,
+    const std::string& aggregatable_report_id) {
+  base::GUID id = base::GUID::ParseLowercase(aggregatable_report_id);
+  if (!id.is_valid() || token.empty()) {
+    return absl::nullopt;
+  }
+
+  return TriggerAttestation(std::move(token), std::move(id));
+}
+
+TriggerAttestation::TriggerAttestation(std::string token,
+                                       base::GUID aggregatable_report_id)
+    : token_(std::move(token)),
+      aggregatable_report_id_(std::move(aggregatable_report_id)) {
+  DCHECK(aggregatable_report_id_.is_valid());
+  DCHECK(!token_.empty());
+}
+
+}  // namespace network
diff --git a/services/network/public/cpp/trigger_attestation.h b/services/network/public/cpp/trigger_attestation.h
new file mode 100644
index 0000000..f1d543b1
--- /dev/null
+++ b/services/network/public/cpp/trigger_attestation.h
@@ -0,0 +1,51 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_NETWORK_PUBLIC_CPP_TRIGGER_ATTESTATION_H_
+#define SERVICES_NETWORK_PUBLIC_CPP_TRIGGER_ATTESTATION_H_
+
+#include <string>
+
+#include "base/component_export.h"
+#include "base/guid.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace network {
+
+class COMPONENT_EXPORT(NETWORK_CPP_TRIGGER_ATTESTATION) TriggerAttestation {
+ public:
+  // Creates a TriggerAttestation instance if the `aggregatable_report_id` is a
+  // valid id and `token` is not empty.
+  static absl::optional<TriggerAttestation> Create(
+      std::string token,
+      const std::string& aggregatable_report_id);
+
+  // Creates an invalid instance for use with Mojo deserialization, which
+  // requires types to be default-constructible.
+  // TODO(https://crbug.com/1408442): Avoid exposing default constructor
+  TriggerAttestation();
+
+  ~TriggerAttestation();
+
+  TriggerAttestation(const TriggerAttestation&);
+  TriggerAttestation& operator=(const TriggerAttestation&);
+
+  TriggerAttestation(TriggerAttestation&&);
+  TriggerAttestation& operator=(TriggerAttestation&&);
+
+  const std::string& token() const { return token_; }
+  const base::GUID& aggregatable_report_id() const {
+    return aggregatable_report_id_;
+  }
+
+ private:
+  TriggerAttestation(std::string token, base::GUID aggregatable_report_id);
+
+  std::string token_;
+  base::GUID aggregatable_report_id_;
+};
+
+}  // namespace network
+
+#endif  // SERVICES_NETWORK_PUBLIC_CPP_TRIGGER_ATTESTATION_H_
diff --git a/services/network/public/cpp/trigger_attestation_test_utils.cc b/services/network/public/cpp/trigger_attestation_test_utils.cc
new file mode 100644
index 0000000..5edb66f
--- /dev/null
+++ b/services/network/public/cpp/trigger_attestation_test_utils.cc
@@ -0,0 +1,24 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/network/public/cpp/trigger_attestation.h"
+
+#include <ostream>
+
+namespace network {
+
+bool operator==(const TriggerAttestation&& a, const TriggerAttestation&& b) {
+  auto tie = [](const TriggerAttestation& t) {
+    return std::make_tuple(t.token(), t.aggregatable_report_id());
+  };
+  return tie(a) == tie(b);
+}
+
+std::ostream& operator<<(std::ostream& out,
+                         const TriggerAttestation& attestation) {
+  return out << "{token=" << attestation.token() << ",aggregatable_report_id="
+             << attestation.aggregatable_report_id() << "}";
+}
+
+}  // namespace network
diff --git a/services/network/public/cpp/trigger_attestation_test_utils.h b/services/network/public/cpp/trigger_attestation_test_utils.h
new file mode 100644
index 0000000..fcdcc95
--- /dev/null
+++ b/services/network/public/cpp/trigger_attestation_test_utils.h
@@ -0,0 +1,18 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_NETWORK_PUBLIC_CPP_TRIGGER_ATTESTATION_TEST_UTILS_H_
+#define SERVICES_NETWORK_PUBLIC_CPP_TRIGGER_ATTESTATION_TEST_UTILS_H_
+
+#include <ostream>
+
+namespace network {
+class TriggerAttestation;
+
+bool operator==(const TriggerAttestation&, const TriggerAttestation&);
+
+std::ostream& operator<<(std::ostream&, const TriggerAttestation&);
+}  // namespace network
+
+#endif  // SERVICES_NETWORK_PUBLIC_CPP_TRIGGER_ATTESTATION_TEST_UTILS_H_
diff --git a/services/network/public/cpp/trigger_attestation_unittest.cc b/services/network/public/cpp/trigger_attestation_unittest.cc
new file mode 100644
index 0000000..03c829d
--- /dev/null
+++ b/services/network/public/cpp/trigger_attestation_unittest.cc
@@ -0,0 +1,61 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/network/public/cpp/trigger_attestation.h"
+
+#include <string>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace network {
+namespace {
+
+TEST(TriggerAttestationTest, Create) {
+  const struct {
+    std::string id;
+    std::string token;
+    bool expected_created;
+  } kTestCases[] = {
+      {
+          "a2ab30b9-d664-4dfc-a9db-85f9729b9a30",
+          "token",
+          true,
+      },
+      {
+          // not a uuid
+          "not-a-uuid",
+          "token",
+          false,
+      },
+      {
+          // not lowercased uuid
+          "A2AB30B9-d664-4dFC-a9db-85f9729b9a30",
+          "token",
+          false,
+      },
+      {
+          // empty token
+          "a2ab30b9-d664-4dfc-a9db-85f9729b9a30",
+          "",
+          false,
+      },
+  };
+
+  for (const auto& test_case : kTestCases) {
+    absl::optional<TriggerAttestation> actual =
+        TriggerAttestation::Create(test_case.token, test_case.id);
+
+    EXPECT_EQ(test_case.expected_created, actual.has_value())
+        << "id: " << test_case.id << " token: " << test_case.token;
+    if (test_case.expected_created) {
+      EXPECT_EQ(actual->token(), test_case.token);
+      EXPECT_EQ(actual->aggregatable_report_id().AsLowercaseString(),
+                test_case.id);
+    }
+  }
+}
+
+}  // namespace
+}  // namespace network
diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn
index 1732794..18c2e12f 100644
--- a/services/network/public/mojom/BUILD.gn
+++ b/services/network/public/mojom/BUILD.gn
@@ -325,6 +325,41 @@
   blink_cpp_typemaps = shared_cpp_typemaps
 }
 
+mojom("mojom_attribution") {
+  generate_java = true
+
+  webui_module_path = "/"
+
+  sources = [ "attribution.mojom" ]
+
+  public_deps = [ "//mojo/public/mojom/base" ]
+
+  if (!is_ios) {
+    export_class_attribute_blink = "BLINK_PLATFORM_EXPORT"
+    export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
+    export_header_blink = "third_party/blink/public/platform/web_common.h"
+  }
+
+  shared_typemaps = [
+    {
+      types = [
+        {
+          mojom = "network.mojom.TriggerAttestation"
+          cpp = "::network::TriggerAttestation"
+          move_only = true
+        },
+      ]
+      traits_headers =
+          [ "//services/network/public/cpp/attribution_mojom_traits.h" ]
+      traits_deps =
+          [ "//services/network/public/cpp:trigger_attestation_traits" ]
+    },
+  ]
+
+  cpp_typemaps = shared_typemaps
+  blink_cpp_typemaps = shared_typemaps
+}
+
 # These .mojom files are put in their own target to avoid a circular dependency,
 # which comes from the fact that the typemap for url_loader.mojom
 # (ResourceRequest) depends on them.
@@ -378,6 +413,7 @@
 
   public_deps = [
     ":cookies_mojom",
+    ":mojom_attribution",
     ":mojom_ip_address",
     ":mojom_network_param",
     ":mojom_proxy_config",
diff --git a/services/network/public/mojom/attribution.mojom b/services/network/public/mojom/attribution.mojom
new file mode 100644
index 0000000..04256cd
--- /dev/null
+++ b/services/network/public/mojom/attribution.mojom
@@ -0,0 +1,15 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module network.mojom;
+
+// Structure containing a redemption token that can be sent to the reporting
+// origin alongside an aggregatable report for them to attest the validity of a
+// trigger. The token was signed over the included aggregatable_report_id which
+// must therefore be used when creating the report.
+struct TriggerAttestation {
+  string token;
+  // TODO(https://crbug.com/1240405): replace with `guid` once a type-mapping exists.
+  string aggregatable_report_id;
+};
diff --git a/services/network/public/mojom/url_response_head.mojom b/services/network/public/mojom/url_response_head.mojom
index 5cfd1bb..604916a 100644
--- a/services/network/public/mojom/url_response_head.mojom
+++ b/services/network/public/mojom/url_response_head.mojom
@@ -8,6 +8,7 @@
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "services/network/public/mojom/alternate_protocol_usage.mojom";
 import "services/network/public/mojom/encoded_body_length.mojom";
+import "services/network/public/mojom/attribution.mojom";
 import "services/network/public/mojom/fetch_api.mojom";
 import "services/network/public/mojom/ip_address_space.mojom";
 import "services/network/public/mojom/ip_endpoint.mojom";
@@ -256,4 +257,25 @@
   // algorithm.
   // See: https://fetch.spec.whatwg.org/#concept-http-network-fetch
   bool request_include_credentials = true;
+
+  // Supports aggregatable reports in the Attribution Reporting API:
+  // https://github.com/WICG/attribution-reporting-api.
+  //
+  // The property will be added only on responses to trigger registration
+  // requests sent to reporting origin registered as private state token issuer
+  // which returned a blind token attesting to the validity of the trigger.
+  //
+  // The structure contains a token that can be sent to a reporting origin
+  // alongside an aggregatable report for it to attest the validity of a
+  // trigger. The token is signed over the included aggregatable_report_id which
+  // must be used to create the aggregatable report.
+  //
+  // It is added as a property on the response to transfer the token from the
+  // network service (where it's generated) to blink where it is transferred to
+  // the browser alongside of the attribution data that it attests. See:
+  // https://github.com/WICG/attribution-reporting-api/blob/main/trigger_attestation.md
+  //
+  // TODO(https://crbug.com/1374121): Remove the property when attribution response
+  // parsing moves from blink to the network service.
+  TriggerAttestation? trigger_attestation;
 };
diff --git a/services/network/restricted_udp_socket.cc b/services/network/restricted_udp_socket.cc
index 85c652d8..3d97e4e8 100644
--- a/services/network/restricted_udp_socket.cc
+++ b/services/network/restricted_udp_socket.cc
@@ -4,18 +4,23 @@
 
 #include "services/network/restricted_udp_socket.h"
 
+#include "base/functional/bind.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_errors.h"
+#include "net/base/network_anonymization_key.h"
+#include "services/network/public/cpp/simple_host_resolver.h"
 #include "services/network/udp_socket.h"
 
 namespace network {
 
 RestrictedUDPSocket::RestrictedUDPSocket(
     std::unique_ptr<UDPSocket> udp_socket,
-    net::MutableNetworkTrafficAnnotationTag traffic_annotation)
+    net::MutableNetworkTrafficAnnotationTag traffic_annotation,
+    std::unique_ptr<SimpleHostResolver> resolver)
     : udp_socket_(std::move(udp_socket)),
-      traffic_annotation_(std::move(traffic_annotation)) {}
+      traffic_annotation_(std::move(traffic_annotation)),
+      resolver_(std::move(resolver)) {}
 
 RestrictedUDPSocket::~RestrictedUDPSocket() = default;
 
@@ -38,8 +43,31 @@
     return;
   }
 
-  // Arbitrary addresses that require DNS resolution are currently unsupported.
-  std::move(callback).Run(net::ERR_NOT_IMPLEMENTED);
+  resolver_->ResolveHost(
+      mojom::HostResolverHost::NewHostPortPair(dest_addr),
+      net::NetworkAnonymizationKey::CreateTransient(),
+      /*optional_parameters=*/nullptr,
+      base::BindOnce(&RestrictedUDPSocket::OnResolveCompleteForSendTo,
+                     base::Unretained(this),
+                     /*data=*/std::vector<uint8_t>(data.begin(), data.end()),
+                     /*callback=*/std::move(callback)));
+}
+
+void RestrictedUDPSocket::OnResolveCompleteForSendTo(
+    std::vector<uint8_t> data,
+    SendToCallback callback,
+    int result,
+    const net::ResolveErrorInfo&,
+    const absl::optional<net::AddressList>& resolved_addresses,
+    const absl::optional<net::HostResolverEndpointResults>&) {
+  if (result != net::OK) {
+    std::move(callback).Run(result);
+    return;
+  }
+
+  DCHECK(resolved_addresses);
+  udp_socket_->SendTo(resolved_addresses->front(), std::move(data),
+                      traffic_annotation_, std::move(callback));
 }
 
 }  // namespace network
diff --git a/services/network/restricted_udp_socket.h b/services/network/restricted_udp_socket.h
index f67d6df..ced83c0 100644
--- a/services/network/restricted_udp_socket.h
+++ b/services/network/restricted_udp_socket.h
@@ -6,22 +6,26 @@
 #define SERVICES_NETWORK_RESTRICTED_UDP_SOCKET_H_
 
 #include "base/component_export.h"
-#include "net/traffic_annotation/network_traffic_annotation.h"
+#include "net/base/address_list.h"
+#include "net/base/net_error_details.h"
+#include "net/dns/public/host_resolver_results.h"
 #include "services/network/public/mojom/restricted_udp_socket.mojom.h"
 
 namespace network {
 
 class UDPSocket;
+class SimpleHostResolver;
 
 // Forwards requests from the Renderer to the connected UDPSocket.
 // We do not expose the UDPSocket directly to the Renderer, as that
 // would allow a compromised Renderer to contact other end points.
 class COMPONENT_EXPORT(NETWORK_SERVICE) RestrictedUDPSocket
-    : public network::mojom::RestrictedUDPSocket {
+    : public mojom::RestrictedUDPSocket {
  public:
   RestrictedUDPSocket(
       std::unique_ptr<UDPSocket> udp_socket,
-      net::MutableNetworkTrafficAnnotationTag traffic_annotation);
+      net::MutableNetworkTrafficAnnotationTag traffic_annotation,
+      std::unique_ptr<SimpleHostResolver> resolver);
   ~RestrictedUDPSocket() override;
 
   // blink::mojom::RestrictedUDPSocket:
@@ -32,8 +36,17 @@
               SendToCallback callback) override;
 
  private:
+  void OnResolveCompleteForSendTo(
+      std::vector<uint8_t> data,
+      SendToCallback callback,
+      int result,
+      const net::ResolveErrorInfo&,
+      const absl::optional<net::AddressList>& resolved_addresses,
+      const absl::optional<net::HostResolverEndpointResults>&);
+
   std::unique_ptr<UDPSocket> udp_socket_;
   net::MutableNetworkTrafficAnnotationTag traffic_annotation_;
+  std::unique_ptr<SimpleHostResolver> resolver_;
 };
 
 }  // namespace network
diff --git a/services/network/socket_factory.cc b/services/network/socket_factory.cc
index adf8db62..aae6a8e 100644
--- a/services/network/socket_factory.cc
+++ b/services/network/socket_factory.cc
@@ -21,6 +21,7 @@
 #include "net/ssl/ssl_config.h"
 #include "net/ssl/ssl_config_service.h"
 #include "net/url_request/url_request_context.h"
+#include "services/network/public/cpp/simple_host_resolver.h"
 #include "services/network/restricted_udp_socket.h"
 #include "services/network/tls_client_socket.h"
 #include "services/network/udp_socket.h"
@@ -59,6 +60,7 @@
     mojom::UDPSocketOptionsPtr options,
     mojo::PendingReceiver<mojom::RestrictedUDPSocket> receiver,
     mojo::PendingRemote<mojom::UDPSocketListener> listener,
+    std::unique_ptr<SimpleHostResolver> resolver,
     mojom::NetworkContext::CreateRestrictedUDPSocketCallback callback) {
   auto udp_socket = std::make_unique<UDPSocket>(std::move(listener), net_log_);
   switch (mode) {
@@ -70,8 +72,8 @@
       break;
   }
   restricted_udp_socket_receivers_.Add(
-      std::make_unique<RestrictedUDPSocket>(std::move(udp_socket),
-                                            traffic_annotation),
+      std::make_unique<RestrictedUDPSocket>(
+          std::move(udp_socket), traffic_annotation, std::move(resolver)),
       std::move(receiver));
 }
 
diff --git a/services/network/socket_factory.h b/services/network/socket_factory.h
index bdb697bc..6248538 100644
--- a/services/network/socket_factory.h
+++ b/services/network/socket_factory.h
@@ -33,14 +33,15 @@
 
 namespace network {
 
+class SimpleHostResolver;
+
 // Helper class that handles socket requests. It takes care of destroying
 // socket implementation instances when mojo  pipes are broken.
 class COMPONENT_EXPORT(NETWORK_SERVICE) SocketFactory
     : public TCPServerSocket::Delegate {
  public:
   // Constructs a SocketFactory. If |net_log| is non-null, it is used to
-  // log NetLog events when logging is enabled. |net_log| used to must outlive
-  // |this|.
+  // log NetLog events when logging is enabled. |net_log| must outlive |this|.
   SocketFactory(net::NetLog* net_log,
                 net::URLRequestContext* url_request_context);
 
@@ -59,6 +60,7 @@
       mojom::UDPSocketOptionsPtr options,
       mojo::PendingReceiver<mojom::RestrictedUDPSocket> receiver,
       mojo::PendingRemote<mojom::UDPSocketListener> listener,
+      std::unique_ptr<SimpleHostResolver> resolver,
       mojom::NetworkContext::CreateRestrictedUDPSocketCallback callback);
   void CreateTCPServerSocket(
       const net::IPEndPoint& local_addr,
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json
index f7e1522a6..3c608f8 100644
--- a/testing/buildbot/chrome.json
+++ b/testing/buildbot/chrome.json
@@ -1833,7 +1833,7 @@
       {
         "args": [],
         "cros_board": "dedede",
-        "cros_img": "dedede-release/R112-15341.0.0",
+        "cros_img": "dedede-release/R112-15342.0.0",
         "name": "lacros_all_tast_tests DEDEDE_RELEASE_LKGM",
         "resultdb": {
           "enable": true,
@@ -1897,7 +1897,7 @@
       {
         "args": [],
         "cros_board": "eve",
-        "cros_img": "eve-release/R112-15341.0.0",
+        "cros_img": "eve-release/R112-15342.0.0",
         "name": "lacros_all_tast_tests EVE_RELEASE_LKGM",
         "resultdb": {
           "enable": true,
@@ -2040,7 +2040,7 @@
       {
         "args": [],
         "cros_board": "jacuzzi",
-        "cros_img": "jacuzzi-release/R112-15341.0.0",
+        "cros_img": "jacuzzi-release/R112-15342.0.0",
         "name": "lacros_all_tast_tests JACUZZI_RELEASE_LKGM",
         "resultdb": {
           "enable": true,
@@ -2145,7 +2145,7 @@
       {
         "args": [],
         "cros_board": "herobrine",
-        "cros_img": "herobrine-release/R112-15341.0.0",
+        "cros_img": "herobrine-release/R112-15342.0.0",
         "name": "lacros_fyi_tast_tests HEROBRINE_RELEASE_LKGM",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index b0b94a4..7c20f7b 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -19217,50 +19217,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "chrome_modern_public_bundle_smoke_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_os": "PQ3A.190801.002",
-              "device_os_flavor": "google",
-              "device_os_type": "userdebug",
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "chrome_modern_public_bundle_smoke_test",
-        "test_id_prefix": "ninja://chrome/android:chrome_modern_public_bundle_smoke_test/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "chrome_public_smoke_test"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index 10d27bc..99c46804 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -9569,7 +9569,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9588,7 +9589,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9607,7 +9609,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9626,7 +9629,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9645,7 +9649,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9664,7 +9669,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9683,7 +9689,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9702,7 +9709,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9721,7 +9729,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9740,7 +9749,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9759,7 +9769,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9778,7 +9789,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9797,7 +9809,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9816,7 +9829,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9835,7 +9849,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9854,7 +9869,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9873,7 +9889,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9892,7 +9909,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -9912,7 +9930,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9931,7 +9950,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9950,7 +9970,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9969,7 +9990,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -9988,7 +10010,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10007,7 +10030,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10026,7 +10050,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10045,7 +10070,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10064,7 +10090,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10083,7 +10110,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10102,7 +10130,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10121,7 +10150,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10140,7 +10170,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10159,7 +10190,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10178,7 +10210,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10197,7 +10230,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10216,7 +10250,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10235,7 +10270,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10257,7 +10293,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -10280,7 +10317,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10299,7 +10337,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10318,7 +10357,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10337,7 +10377,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10359,7 +10400,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10378,7 +10420,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10397,7 +10440,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10416,7 +10460,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10435,7 +10480,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10454,7 +10500,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10476,7 +10523,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10495,7 +10543,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10514,7 +10563,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10533,7 +10583,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10555,7 +10606,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10574,7 +10626,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10593,7 +10646,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10612,7 +10666,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10631,7 +10686,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10650,7 +10706,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10677,7 +10734,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -10700,7 +10758,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.coverage.json b/testing/buildbot/chromium.coverage.json
index 8082a6fe..b1370a1 100644
--- a/testing/buildbot/chromium.coverage.json
+++ b/testing/buildbot/chromium.coverage.json
@@ -14,51 +14,6 @@
             "--bucket",
             "chromium-result-details",
             "--test-name",
-            "chrome_modern_public_bundle_smoke_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_os": "PQ3A.190801.002",
-              "device_os_flavor": "google",
-              "device_os_type": "userdebug",
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "chrome_modern_public_bundle_smoke_test",
-        "test_id_prefix": "ninja://chrome/android:chrome_modern_public_bundle_smoke_test/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "isolate_profile_data": true,
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
             "chrome_public_smoke_test"
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
@@ -3338,7 +3293,6 @@
     "gtest_tests": [
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3360,7 +3314,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3382,7 +3335,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3404,7 +3356,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3427,7 +3378,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3449,7 +3399,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3471,7 +3420,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3493,7 +3441,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3516,7 +3463,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3539,7 +3485,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3561,7 +3506,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3583,7 +3527,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3605,7 +3548,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3627,7 +3569,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3649,7 +3590,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3671,7 +3611,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3694,7 +3633,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3716,7 +3654,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3738,7 +3675,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3761,7 +3697,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3786,7 +3721,6 @@
           "--test-arg=--disable-gpu",
           "--test-arg=--headless",
           "--test-arg=--ozone-platform=headless",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3809,7 +3743,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3832,7 +3765,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3854,7 +3786,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3876,7 +3807,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3898,7 +3828,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3920,7 +3849,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3942,7 +3870,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3964,7 +3891,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -3986,7 +3912,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4009,7 +3934,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4031,7 +3955,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4053,7 +3976,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4076,7 +3998,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4098,7 +4019,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4121,7 +4041,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4143,7 +4062,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4165,7 +4083,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4187,7 +4104,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4210,7 +4126,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4232,7 +4147,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4254,7 +4168,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4276,7 +4189,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4299,7 +4211,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4322,7 +4233,6 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.net_unittests.filter",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4346,7 +4256,6 @@
       {
         "args": [
           "--test-arg=--ozone-platform=headless",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4368,7 +4277,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4390,7 +4298,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4412,7 +4319,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4435,7 +4341,6 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.services_unittests.filter",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4458,7 +4363,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4480,7 +4384,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4502,7 +4405,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4524,7 +4426,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4546,7 +4447,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4569,7 +4469,6 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.ui_base_unittests.filter",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4591,7 +4490,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4613,7 +4511,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4636,7 +4533,6 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.views_examples_unittests.filter",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4659,7 +4555,6 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.views_unittests.filter",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4682,7 +4577,6 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.viz_unittests.filter",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4704,7 +4598,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4728,7 +4621,6 @@
       {
         "args": [
           "--test-arg=--vmodule=test_navigation_listener=1",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4750,7 +4642,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4772,7 +4663,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4794,7 +4684,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4816,7 +4705,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4838,7 +4726,6 @@
       },
       {
         "args": [
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}"
         ],
         "isolate_profile_data": true,
@@ -4863,7 +4750,6 @@
       {
         "args": [
           "bin/run_angle_unittests",
-          "--code-coverage",
           "--code-coverage-dir=${ISOLATED_OUTDIR}",
           "--logs-dir=${ISOLATED_OUTDIR}/logs"
         ],
diff --git a/testing/buildbot/chromium.dev.json b/testing/buildbot/chromium.dev.json
index 6a0d0b90..50bc677 100644
--- a/testing/buildbot/chromium.dev.json
+++ b/testing/buildbot/chromium.dev.json
@@ -47,51 +47,6 @@
         },
         "test": "base_unittests",
         "test_id_prefix": "ninja://base:base_unittests/"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "chrome_modern_public_bundle_smoke_test"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_os": "PQ3A.190801.002",
-              "device_os_flavor": "google",
-              "device_os_type": "userdebug",
-              "device_type": "walleye",
-              "os": "Android"
-            }
-          ],
-          "expiration": 10800,
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ],
-          "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "chrome_modern_public_bundle_smoke_test",
-        "test_id_prefix": "ninja://chrome/android:chrome_modern_public_bundle_smoke_test/"
       }
     ]
   },
diff --git a/testing/buildbot/chromium.fuchsia.fyi.json b/testing/buildbot/chromium.fuchsia.fyi.json
index 70e3a4df..e35533c 100644
--- a/testing/buildbot/chromium.fuchsia.fyi.json
+++ b/testing/buildbot/chromium.fuchsia.fyi.json
@@ -21,7 +21,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -41,7 +42,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -63,7 +65,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -89,7 +92,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -108,7 +112,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -127,7 +132,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -146,7 +152,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -165,7 +172,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -184,7 +192,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -203,7 +212,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -222,7 +232,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -241,7 +252,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -260,7 +272,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -279,7 +292,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -298,7 +312,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -317,7 +332,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -336,7 +352,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -355,7 +372,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -374,7 +392,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -393,7 +412,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -412,7 +432,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -435,7 +456,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -454,7 +476,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -473,7 +496,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -492,7 +516,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -511,7 +536,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -530,7 +556,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -549,7 +576,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -568,7 +596,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -587,7 +616,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -606,7 +636,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -625,7 +656,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -644,7 +676,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -663,7 +696,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -685,7 +719,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -704,7 +739,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -723,7 +759,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -742,7 +779,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -761,7 +799,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -783,7 +822,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -806,7 +846,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -825,7 +866,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -844,7 +886,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -863,7 +906,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -885,7 +929,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -904,7 +949,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -923,7 +969,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -945,7 +992,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -964,7 +1012,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -983,7 +1032,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1005,7 +1055,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1024,7 +1075,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1043,7 +1095,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1062,7 +1115,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1084,7 +1138,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1103,7 +1158,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1122,7 +1178,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1141,7 +1198,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1160,7 +1218,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1179,7 +1238,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1206,7 +1266,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.fuchsia.json b/testing/buildbot/chromium.fuchsia.json
index dee9f06..7b742318 100644
--- a/testing/buildbot/chromium.fuchsia.json
+++ b/testing/buildbot/chromium.fuchsia.json
@@ -17,7 +17,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -36,7 +37,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -55,7 +57,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -74,7 +77,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -93,7 +97,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -112,7 +117,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -131,7 +137,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -150,7 +157,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -169,7 +177,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -188,7 +197,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -207,7 +217,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -226,7 +237,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -245,7 +257,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -264,7 +277,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -283,7 +297,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -302,7 +317,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -321,7 +337,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -340,7 +357,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -360,7 +378,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -385,7 +404,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -405,7 +425,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -424,7 +445,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -443,7 +465,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -462,7 +485,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -481,7 +505,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -500,7 +525,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -519,7 +545,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -538,7 +565,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -557,7 +585,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -576,7 +605,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -595,7 +625,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -614,7 +645,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -633,7 +665,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -652,7 +685,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -671,7 +705,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -690,7 +725,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -709,7 +745,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -731,7 +768,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -754,7 +792,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -773,7 +812,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -792,7 +832,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -811,7 +852,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -833,7 +875,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -852,7 +895,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -871,7 +915,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -890,7 +935,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -909,7 +955,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -928,7 +975,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -950,7 +998,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -969,7 +1018,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -988,7 +1038,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1007,7 +1058,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1029,7 +1081,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1048,7 +1101,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1067,7 +1121,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1086,7 +1141,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1105,7 +1161,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1124,7 +1181,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1151,7 +1209,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1174,7 +1233,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1199,7 +1259,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1218,7 +1279,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1237,7 +1299,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1256,7 +1319,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1275,7 +1339,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1294,7 +1359,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1313,7 +1379,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1332,7 +1399,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1351,7 +1419,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1370,7 +1439,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1389,7 +1459,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1408,7 +1479,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1427,7 +1499,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1446,7 +1519,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1465,7 +1539,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1484,7 +1559,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1503,7 +1579,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1522,7 +1599,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -1542,7 +1620,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1567,7 +1646,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -1587,7 +1667,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1606,7 +1687,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1625,7 +1707,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1644,7 +1727,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1663,7 +1747,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1682,7 +1767,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1701,7 +1787,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1720,7 +1807,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1739,7 +1827,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1758,7 +1847,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1777,7 +1867,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1796,7 +1887,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1815,7 +1907,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1834,7 +1927,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1853,7 +1947,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1872,7 +1967,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1891,7 +1987,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1913,7 +2010,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -1936,7 +2034,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1955,7 +2054,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1974,7 +2074,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -1993,7 +2094,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2015,7 +2117,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2034,7 +2137,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2053,7 +2157,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2072,7 +2177,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2091,7 +2197,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2110,7 +2217,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2132,7 +2240,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2151,7 +2260,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2170,7 +2280,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2189,7 +2300,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2211,7 +2323,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2230,7 +2343,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2249,7 +2363,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2268,7 +2383,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2287,7 +2403,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2306,7 +2423,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2333,7 +2451,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2356,7 +2475,8 @@
             {
               "cpu": "arm64",
               "inside_docker": "1",
-              "os": "Ubuntu-20.04"
+              "os": "Ubuntu-20.04",
+              "pool": "chromium.tests.lifo"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 7a2f97d..927193ef 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -18,34 +18,6 @@
     "isolated_scripts": [
       {
         "args": [],
-        "isolate_name": "resource_sizes_chrome_modern_public_minimal_apks",
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "resource_sizes_chrome_modern_public_minimal_apks",
-        "override_compile_targets": [
-          "resource_sizes_chrome_modern_public_minimal_apks"
-        ],
-        "resultdb": {
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86",
-              "os": "Ubuntu-18.04",
-              "pool": "chrome.tests"
-            }
-          ],
-          "expiration": 7200,
-          "hard_timeout": 21600,
-          "io_timeout": 21600,
-          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
-        }
-      },
-      {
-        "args": [],
         "isolate_name": "resource_sizes_monochrome_minimal_apks",
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
@@ -1162,34 +1134,6 @@
     "isolated_scripts": [
       {
         "args": [],
-        "isolate_name": "resource_sizes_chrome_modern_public_minimal_apks",
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "resource_sizes_chrome_modern_public_minimal_apks",
-        "override_compile_targets": [
-          "resource_sizes_chrome_modern_public_minimal_apks"
-        ],
-        "resultdb": {
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86",
-              "os": "Ubuntu-18.04",
-              "pool": "chrome.tests"
-            }
-          ],
-          "expiration": 7200,
-          "hard_timeout": 21600,
-          "io_timeout": 21600,
-          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
-        }
-      },
-      {
-        "args": [],
         "isolate_name": "resource_sizes_monochrome_minimal_apks",
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
diff --git a/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter b/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter
index 56df1af..45b40708 100644
--- a/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter
+++ b/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter
@@ -64,5 +64,8 @@
 -SelectToSpeakKeystrokeSelectionTest.OmniboxPartiallySelectedInMid
 -SelectToSpeakKeystrokeSelectionTest.SpeakTextSurroundedByBrs
 -SelectToSpeakKeystrokeSelectionTest.SpeaksTextAtKeystrokeSingleWord
+-SelectToSpeakKeystrokeSelectionTest.TwoTextFieldsFullySelected
+-SelectToSpeakKeystrokeSelectionTest.contentEditableExternallySelected
+-SelectToSpeakMouseSelectionTest.SpeaksNodeWhenClicked
 # TODO(b/268056158) Flaky
--SelectToSpeakTestWithVoiceSwitching.BreaksAtLanguageBounds
\ No newline at end of file
+-SelectToSpeakTestWithVoiceSwitching.BreaksAtLanguageBounds
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index a31bdca..e26bb680 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -446,10 +446,6 @@
     "label": "//chrome/android:chrome_junit_tests",
     "type": "generated_script",
   },
-  "chrome_modern_public_bundle_smoke_test": {
-    "label": "//chrome/android:chrome_modern_public_bundle_smoke_test",
-    "type": "console_test_launcher",
-  },
   "chrome_nocompile_tests": {
     "label": "//chrome/android:chrome_nocompile_tests",
     "type": "additional_compile_target",
@@ -1506,10 +1502,6 @@
     "label": "//remoting:remoting_unittests",
     "type": "console_test_launcher",
   },
-  "resource_sizes_chrome_modern_public_minimal_apks": {
-    "label": "//chrome/android:resource_sizes_chrome_modern_public_minimal_apks",
-    "type": "generated_script",
-  },
   "resource_sizes_chromecast": {
     "label": "//chromecast:resource_sizes_chromecast",
     "type": "generated_script",
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json
index 9cdf0ea..5499786 100644
--- a/testing/buildbot/internal.chromeos.fyi.json
+++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -1148,7 +1148,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-release/R112-15341.0.0",
+        "cros_img": "octopus-release/R112-15342.0.0",
         "name": "lacros_fyi_tast_tests OCTOPUS_RELEASE_LKGM",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1196,7 +1196,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-release/R112-15341.0.0",
+        "cros_img": "octopus-release/R112-15342.0.0",
         "name": "ozone_unittests OCTOPUS_RELEASE_LKGM",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1247,7 +1247,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R112-15341.0.0",
+        "cros_img": "hana-release/R112-15342.0.0",
         "name": "lacros_all_tast_tests HANA_RELEASE_LKGM",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1343,7 +1343,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R112-15341.0.0",
+        "cros_img": "hana-release/R112-15342.0.0",
         "name": "ozone_unittests HANA_RELEASE_LKGM",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1431,7 +1431,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R112-15341.0.0",
+        "cros_img": "hana-release/R112-15342.0.0",
         "name": "viz_unittests HANA_RELEASE_LKGM",
         "swarming": {},
         "test": "viz_unittests",
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index d87fcc659..71ab3bae0 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -550,7 +550,6 @@
   'fuchsia-code-coverage': {
     '$mixin_append': {
       'args': [
-        '--code-coverage',
         '--code-coverage-dir=${ISOLATED_OUTDIR}'
       ],
     },
@@ -702,6 +701,15 @@
       ]
     },
   },
+  # TODO(crbug.com/901197): Remove this mixin and all uses once LIFO rolls
+  # out more widely.
+  'lifo-test-pool': {
+    'swarming': {
+      'dimensions': {
+        'pool': 'chromium.tests.lifo',
+      },
+    },
+  },
   'limited_capacity_bot': {
     # Some FYI bot configurations have a limited number of bots in the swarming
     # pool. Increase the default expiration time from 1 hour to 6 hours to
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 3796bf4..67cac567 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -123,10 +123,6 @@
       },
     },
 
-    'android_modern_smoke_tests': {
-      'chrome_modern_public_bundle_smoke_test': {},
-    },
-
     'android_monochrome_smoke_tests': {
       'monochrome_public_bundle_smoke_test': {},
       'monochrome_public_smoke_test': {},
@@ -1396,7 +1392,6 @@
 
     'chromium_swarm_android_gtests': {
       'base_unittests': {},
-      'chrome_modern_public_bundle_smoke_test': {},
     },
 
     'chromium_swarm_desktop_gtests': {
@@ -5644,7 +5639,6 @@
     ],
 
     'android_marshmallow_gtests': [
-      'android_modern_smoke_tests',
       'android_smoke_tests',
       'android_specific_chromium_gtests',  # Already includes gl_gtests.
       'chromium_gtests',
@@ -5685,7 +5679,6 @@
     ],
 
     'android_pie_coverage_instrumentation_tests': [
-      'android_modern_smoke_tests',
       'android_smoke_tests',
       'android_specific_coverage_java_tests',
       'chrome_public_tests',
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 0949f21..0d7843f 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -491,8 +491,8 @@
   'CROS_DEDEDE_RELEASE_LKGM': {
     'skylab': {
       'cros_board': 'dedede',
-      'cros_chrome_version': '112.0.5578.0',
-      'cros_img': 'dedede-release/R112-15341.0.0',
+      'cros_chrome_version': '112.0.5579.0',
+      'cros_img': 'dedede-release/R112-15342.0.0',
     },
     'enabled': True,
     'identifier': 'DEDEDE_RELEASE_LKGM',
@@ -527,8 +527,8 @@
   'CROS_EVE_RELEASE_LKGM': {
     'skylab': {
       'cros_board': 'eve',
-      'cros_chrome_version': '112.0.5578.0',
-      'cros_img': 'eve-release/R112-15341.0.0',
+      'cros_chrome_version': '112.0.5579.0',
+      'cros_img': 'eve-release/R112-15342.0.0',
     },
     'enabled': True,
     'identifier': 'EVE_RELEASE_LKGM',
@@ -573,8 +573,8 @@
   'CROS_HANA_RELEASE_LKGM': {
     'skylab': {
       'cros_board': 'hana',
-      'cros_chrome_version': '112.0.5578.0',
-      'cros_img': 'hana-release/R112-15341.0.0',
+      'cros_chrome_version': '112.0.5579.0',
+      'cros_img': 'hana-release/R112-15342.0.0',
     },
     'enabled': True,
     'identifier': 'HANA_RELEASE_LKGM',
@@ -609,8 +609,8 @@
   'CROS_HEROBRINE_RELEASE_LKGM': {
     'skylab': {
       'cros_board': 'herobrine',
-      'cros_chrome_version': '112.0.5578.0',
-      'cros_img': 'herobrine-release/R112-15341.0.0',
+      'cros_chrome_version': '112.0.5579.0',
+      'cros_img': 'herobrine-release/R112-15342.0.0',
     },
     'enabled': True,
     'identifier': 'HEROBRINE_RELEASE_LKGM',
@@ -618,8 +618,8 @@
   'CROS_JACUZZI_RELEASE_LKGM': {
     'skylab': {
       'cros_board': 'jacuzzi',
-      'cros_chrome_version': '112.0.5578.0',
-      'cros_img': 'jacuzzi-release/R112-15341.0.0',
+      'cros_chrome_version': '112.0.5579.0',
+      'cros_img': 'jacuzzi-release/R112-15342.0.0',
     },
     'enabled': True,
     'identifier': 'JACUZZI_RELEASE_LKGM',
@@ -694,8 +694,8 @@
   'CROS_OCTOPUS_RELEASE_LKGM': {
     'skylab': {
       'cros_board': 'octopus',
-      'cros_chrome_version': '112.0.5578.0',
-      'cros_img': 'octopus-release/R112-15341.0.0',
+      'cros_chrome_version': '112.0.5579.0',
+      'cros_img': 'octopus-release/R112-15342.0.0',
     },
     'enabled': True,
     'identifier': 'OCTOPUS_RELEASE_LKGM',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 0c49368..21bbe16 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1736,6 +1736,7 @@
         'mixins': [
           'arm64',
           'docker',
+          'lifo-test-pool',
           'linux-focal',
         ],
       },
@@ -2627,6 +2628,7 @@
         'mixins': [
           'arm64',
           'docker',
+          'lifo-test-pool',
           'linux-focal',
         ],
       },
@@ -2641,6 +2643,7 @@
         'mixins': [
           'arm64',
           'docker',
+          'lifo-test-pool',
           'linux-focal',
         ],
       },
@@ -2709,6 +2712,7 @@
         'mixins': [
           'arm64',
           'docker',
+          'lifo-test-pool',
           'linux-focal',
         ],
       },
@@ -2723,6 +2727,7 @@
         'mixins': [
           'arm64',
           'docker',
+          'lifo-test-pool',
           'linux-focal',
         ],
       },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 64a88dc..eea7ac0 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -7524,26 +7524,6 @@
             ]
         }
     ],
-    "NewGetDisplayMediaPickerOrder": [
-        {
-            "platforms": [
-                "chromeos",
-                "chromeos_lacros",
-                "fuchsia",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "NewGetDisplayMediaPickerOrder"
-                    ]
-                }
-            ]
-        }
-    ],
     "NewRegexForOtpFields": [
         {
             "platforms": [
@@ -8375,6 +8355,21 @@
             ]
         }
     ],
+    "PageInfoAboutThisSiteImprovedBottomSheet": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "PageInfoAboutThisSiteImprovedBottomSheet"
+                    ]
+                }
+            ]
+        }
+    ],
     "PageInfoAboutThisSiteMoreInfoDesktop": [
         {
             "platforms": [
@@ -13203,6 +13198,21 @@
             ]
         }
     ],
+    "WebRTC-Audio-GainController2": [
+        {
+            "platforms": [
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled,switch_to_agc2:true,target_range_min_dbfs:-50,target_range_max_dbfs:-30,max_gain_db:50,initial_gain_db:20,enable_clipping_predictor:true,disallow_transient_suppressor_usage:true,_20230208"
+                }
+            ]
+        }
+    ],
     "WebRTC-Audio-NetEqDecisionLogicConfig": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 75a5727..253de9a 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -1577,10 +1577,6 @@
              "NewBaseUrlInheritanceBehavior",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kNewGetDisplayMediaPickerOrder,
-             "NewGetDisplayMediaPickerOrder",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 bool IsNewBaseUrlInheritanceBehaviorEnabled() {
   // The kIsolateSandboxedIframes feature depends on the new base URL behavior,
   // so it enables the new behavior even if kNewBaseUrlInheritanceBehavior
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index adfdc51f..1ed69e2 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -880,18 +880,6 @@
 // base url inheritance behavior from https://crbug.com/1356658.
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kNewBaseUrlInheritanceBehavior);
 
-// When an application calls getDisplayMedia(), a media-picker is displayed
-// to the user, allowing them to share a tab, a window or a screen.
-// * If this flag is enabled, the order is - tabs, windows, screens.
-// * If this flag is disabled, the order is - screens, windows, tabs.
-//
-// If {preferCurrentTab: true} is specified, the order is unaffected.
-//
-// When the new order is used, the default value of selfBrowserSurface
-// is "exclude", unless {preferCurrentTab: true} is specified, in which
-// case the default value is "include".
-BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kNewGetDisplayMediaPickerOrder);
-
 // This function checks both kNewBaseUrlInheritanceBehavior and
 // kIsolateSandboxedIframes and returns true if either is enabled.
 BLINK_COMMON_EXPORT bool IsNewBaseUrlInheritanceBehaviorEnabled();
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 85fa61f2..5fdbb1c 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -761,73 +761,14 @@
       optional Page.FrameId frameId
       optional DOM.BackendNodeId violatingNodeId
 
-  type DeprecationIssueType extends string
-    enum
-      AuthorizationCoveredByWildcard
-      CanRequestURLHTTPContainingNewline
-      ChromeLoadTimesConnectionInfo
-      ChromeLoadTimesFirstPaintAfterLoadTime
-      ChromeLoadTimesWasAlternateProtocolAvailable
-      CookieWithTruncatingChar
-      CrossOriginAccessBasedOnDocumentDomain
-      CrossOriginWindowAlert
-      CrossOriginWindowConfirm
-      CSSSelectorInternalMediaControlsOverlayCastButton
-      DeprecationExample
-      DocumentDomainSettingWithoutOriginAgentClusterHeader
-      EventPath
-      ExpectCTHeader
-      GeolocationInsecureOrigin
-      GeolocationInsecureOriginDeprecatedNotRemoved
-      GetUserMediaInsecureOrigin
-      HostCandidateAttributeGetter
-      IdentityInCanMakePaymentEvent
-      InsecurePrivateNetworkSubresourceRequest
-      LocalCSSFileExtensionRejected
-      MediaSourceAbortRemove
-      MediaSourceDurationTruncatingBuffered
-      NoSysexWebMIDIWithoutPermission
-      NotificationInsecureOrigin
-      NotificationPermissionRequestedIframe
-      ObsoleteCreateImageBitmapImageOrientationNone
-      ObsoleteWebRtcCipherSuite
-      OpenWebDatabaseInsecureContext
-      OverflowVisibleOnReplacedElement
-      PaymentInstruments
-      PaymentRequestCSPViolation
-      PersistentQuotaType
-      PictureSourceSrc
-      PrefixedCancelAnimationFrame
-      PrefixedRequestAnimationFrame
-      PrefixedStorageInfo
-      PrefixedVideoDisplayingFullscreen
-      PrefixedVideoEnterFullscreen
-      PrefixedVideoEnterFullScreen
-      PrefixedVideoExitFullscreen
-      PrefixedVideoExitFullScreen
-      PrefixedVideoSupportsFullscreen
-      PrivacySandboxExtensionsAPI
-      RangeExpand
-      RequestedSubresourceWithEmbeddedCredentials
-      RTCConstraintEnableDtlsSrtpFalse
-      RTCConstraintEnableDtlsSrtpTrue
-      RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics
-      RTCPeerConnectionSdpSemanticsPlanB
-      RtcpMuxPolicyNegotiate
-      SharedArrayBufferConstructedWithoutIsolation
-      TextToSpeech_DisallowedByAutoplay
-      V8SharedArrayBufferConstructedInExtensionWithoutIsolation
-      XHRJSONEncodingDetection
-      XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload
-      XRSupportsSession
-
   # This issue tracks information needed to print a deprecation message.
   # https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/third_party/blink/renderer/core/frame/deprecation/README.md
   type DeprecationIssueDetails extends object
     properties
       optional AffectedFrame affectedFrame
       SourceCodeLocation sourceCodeLocation
-      DeprecationIssueType type
+      # One of the deprecation names from third_party/blink/renderer/core/frame/deprecation/deprecation.json5
+      string type
 
   type ClientHintIssueReason extends string
     enum
@@ -9373,6 +9314,15 @@
     returns
       array of TrustTokens tokens
 
+  # Removes all Trust Tokens issued by the provided issuerOrigin.
+  # Leaves other stored data, including the issuer's Redemption Records, intact.
+  experimental command clearTrustTokens
+    parameters
+      string issuerOrigin
+    returns
+      # True if any tokens were deleted, false otherwise.
+      boolean didDeleteTokens
+
   # Gets details for a named interest group.
   experimental command getInterestGroupDetails
     parameters
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index 317ae68..036aede 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -300,6 +300,7 @@
     # Direct deps (instead of transitive deps) are necessary for java targets.
     public_deps += [
       "//services/network/public/mojom:cookies_mojom",
+      "//services/network/public/mojom:mojom_attribution",
       "//services/network/public/mojom:mojom_network_param",
       "//services/network/public/mojom:mojom_schemeful_site",
       "//ui/accessibility:ax_enums_mojo",
diff --git a/third_party/blink/public/mojom/conversions/attribution_data_host.mojom b/third_party/blink/public/mojom/conversions/attribution_data_host.mojom
index b76ba69..336638de 100644
--- a/third_party/blink/public/mojom/conversions/attribution_data_host.mojom
+++ b/third_party/blink/public/mojom/conversions/attribution_data_host.mojom
@@ -5,6 +5,7 @@
 module blink.mojom;
 
 import "components/attribution_reporting/registration.mojom";
+import "services/network/public/mojom/attribution.mojom";
 
 // Browser-process interface responsible for processing attribution
 // configurations registered by the renderer. These configurations may be sent
@@ -19,5 +20,5 @@
   // attributionsrc request.
   TriggerDataAvailable(attribution_reporting.mojom.SuitableOrigin reporting_origin,
                        attribution_reporting.mojom.TriggerRegistration data,
-                       attribution_reporting.mojom.TriggerAttestation? attestation);
+                       network.mojom.TriggerAttestation? attestation);
 };
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
index f687338..4dd759f 100644
--- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
+++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3797,6 +3797,7 @@
   kWebAppEnableScopeExtensions = 4456,
   kServiceWorkerBypassFetchHandlerForMainResourceByOriginTrial = 4457,
   kV8RegExpUnicodeSetIncompatibilitiesWithUnicodeMode = 4458,
+  kFedCmAutoReauthn = 4459,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/DEPS b/third_party/blink/public/platform/DEPS
index 95d99931..9e58010 100644
--- a/third_party/blink/public/platform/DEPS
+++ b/third_party/blink/public/platform/DEPS
@@ -51,6 +51,7 @@
     "+services/network/public/cpp/cors/preflight_result.h",
     "+services/network/public/cpp/resource_request_body.h",
     "+services/network/public/cpp/shared_url_loader_factory.h",
+    "+services/network/public/cpp/trigger_attestation.h",
 
     # Enforce to use mojom-shared.h in blink/public so that it can compile
     # inside and outside Blink.
diff --git a/third_party/blink/public/platform/web_url_response.h b/third_party/blink/public/platform/web_url_response.h
index 926ccce..76ce247 100644
--- a/third_party/blink/public/platform/web_url_response.h
+++ b/third_party/blink/public/platform/web_url_response.h
@@ -46,6 +46,7 @@
 #include "third_party/blink/public/platform/web_vector.h"
 
 namespace network {
+class TriggerAttestation;
 namespace mojom {
 enum class AlternateProtocolUsage;
 enum class FetchResponseSource;
@@ -110,6 +111,9 @@
 
   void SetConnectionReused(bool);
 
+  void SetTriggerAttestation(
+      const absl::optional<network::TriggerAttestation>&);
+
   void SetLoadTiming(const network::mojom::LoadTimingInfo&);
 
   base::Time ResponseTime() const;
diff --git a/third_party/blink/renderer/core/frame/DEPS b/third_party/blink/renderer/core/frame/DEPS
index f874ca1..80e8b93 100644
--- a/third_party/blink/renderer/core/frame/DEPS
+++ b/third_party/blink/renderer/core/frame/DEPS
@@ -4,6 +4,7 @@
   ],
   "attribution_src_loader(\.cc|\.h|_test\.cc)": [
     "+components/attribution_reporting",
+    "+services/network/public/cpp/trigger_attestation.h",
   ],
   "child_frame_compositing_helper\.h": [
     "+components/viz/common/surfaces/surface_id.h",
diff --git a/third_party/blink/renderer/core/frame/attribution_src_loader.cc b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
index efb8a3d..9eab21d 100644
--- a/third_party/blink/renderer/core/frame/attribution_src_loader.cc
+++ b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
@@ -21,10 +21,10 @@
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/source_registration_error.mojom-shared.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "components/attribution_reporting/trigger_registration_error.mojom-shared.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 #include "third_party/blink/public/common/frame/frame_policy.h"
@@ -55,6 +55,7 @@
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
+#include "third_party/blink/renderer/platform/loader/fetch/resource_response.h"
 #include "third_party/blink/renderer/platform/network/encoded_form_data.h"
 #include "third_party/blink/renderer/platform/network/http_names.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
@@ -190,7 +191,8 @@
       attribution_reporting::SuitableOrigin reporting_origin,
       const AtomicString& source_json,
       const AtomicString& trigger_json,
-      uint64_t request_id);
+      uint64_t request_id,
+      const absl::optional<network::TriggerAttestation>& trigger_attestation);
 
   void Finish();
 
@@ -205,7 +207,8 @@
   void HandleTriggerRegistration(
       const AtomicString& json,
       attribution_reporting::SuitableOrigin reporting_origin,
-      uint64_t request_id);
+      uint64_t request_id,
+      const absl::optional<network::TriggerAttestation>& trigger_attestation);
 
   // RawResourceClient:
   String DebugName() const override;
@@ -518,11 +521,12 @@
     document->AddPostPrerenderingActivationStep(WTF::BindOnce(
         &AttributionSrcLoader::RegisterAttributionHeaders,
         WrapPersistentIfNeeded(this), *src_type, std::move(*reporting_origin),
-        source_json, trigger_json, resource->InspectorId()));
+        source_json, trigger_json, resource->InspectorId(),
+        response.GetTriggerAttestation()));
   } else {
-    RegisterAttributionHeaders(*src_type, std::move(*reporting_origin),
-                               source_json, trigger_json,
-                               resource->InspectorId());
+    RegisterAttributionHeaders(
+        *src_type, std::move(*reporting_origin), source_json, trigger_json,
+        resource->InspectorId(), response.GetTriggerAttestation());
   }
 
   return true;
@@ -533,7 +537,8 @@
     attribution_reporting::SuitableOrigin reporting_origin,
     const AtomicString& source_json,
     const AtomicString& trigger_json,
-    uint64_t request_id) {
+    uint64_t request_id,
+    const absl::optional<network::TriggerAttestation>& trigger_attestation) {
   // Create a client to mimic processing of attributionsrc requests. Note we do
   // not share `AttributionDataHosts` for redirects chains.
   // TODO(johnidel): Consider refactoring this such that we can share clients
@@ -541,7 +546,7 @@
   auto* client = MakeGarbageCollected<ResourceClient>(
       this, src_type, /*associated_with_navigation=*/false);
   client->HandleResponseHeaders(std::move(reporting_origin), source_json,
-                                trigger_json, request_id);
+                                trigger_json, request_id, trigger_attestation);
   client->Finish();
 }
 
@@ -615,14 +620,15 @@
   }
 
   HandleResponseHeaders(std::move(*reporting_origin), source_json, trigger_json,
-                        request_id);
+                        request_id, response.GetTriggerAttestation());
 }
 
 void AttributionSrcLoader::ResourceClient::HandleResponseHeaders(
     attribution_reporting::SuitableOrigin reporting_origin,
     const AtomicString& source_json,
     const AtomicString& trigger_json,
-    uint64_t request_id) {
+    uint64_t request_id,
+    const absl::optional<network::TriggerAttestation>& trigger_attestation) {
   DCHECK(!source_json.IsNull() || !trigger_json.IsNull());
 
   switch (type_) {
@@ -641,7 +647,7 @@
 
       if (!trigger_json.IsNull()) {
         HandleTriggerRegistration(trigger_json, std::move(reporting_origin),
-                                  request_id);
+                                  request_id, trigger_attestation);
       }
       break;
     case RegistrationType::kSourceOrTrigger:
@@ -663,7 +669,7 @@
       if (!trigger_json.IsNull()) {
         type_ = RegistrationType::kTrigger;
         HandleTriggerRegistration(trigger_json, std::move(reporting_origin),
-                                  request_id);
+                                  request_id, trigger_attestation);
       }
 
       break;
@@ -694,7 +700,8 @@
 void AttributionSrcLoader::ResourceClient::HandleTriggerRegistration(
     const AtomicString& json,
     attribution_reporting::SuitableOrigin reporting_origin,
-    uint64_t request_id) {
+    uint64_t request_id,
+    const absl::optional<network::TriggerAttestation>& trigger_attestation) {
   DCHECK_EQ(type_, RegistrationType::kTrigger);
   DCHECK(!json.IsNull());
 
@@ -708,10 +715,9 @@
     return;
   }
 
-  data_host_->TriggerDataAvailable(
-      std::move(reporting_origin), std::move(*trigger_data),
-      // TODO(crbug.com/1405832): pass down response's `attestation`.
-      /*attestation=*/absl::nullopt);
+  data_host_->TriggerDataAvailable(std::move(reporting_origin),
+                                   std::move(*trigger_data),
+                                   std::move(trigger_attestation));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/attribution_src_loader.h b/third_party/blink/renderer/core/frame/attribution_src_loader.h
index 610aa31..40fc3f2 100644
--- a/third_party/blink/renderer/core/frame/attribution_src_loader.h
+++ b/third_party/blink/renderer/core/frame/attribution_src_loader.h
@@ -9,6 +9,7 @@
 #include <stdint.h>
 
 #include "components/attribution_reporting/registration_type.mojom-blink-forward.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/conversions/attribution_reporting.mojom-blink-forward.h"
 #include "third_party/blink/renderer/core/core_export.h"
@@ -17,6 +18,10 @@
 #include "third_party/blink/renderer/platform/heap/member.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
 
+namespace network {
+class TriggerAttestation;
+}  // namespace network
+
 namespace attribution_reporting {
 class SuitableOrigin;
 }  // namespace attribution_reporting
@@ -117,7 +122,8 @@
       attribution_reporting::SuitableOrigin reporting_origin,
       const AtomicString& source_json,
       const AtomicString& trigger_json,
-      uint64_t request_id);
+      uint64_t request_id,
+      const absl::optional<network::TriggerAttestation>& trigger_attestation);
 
   const Member<LocalFrame> local_frame_;
   size_t num_resource_clients_ = 0;
diff --git a/third_party/blink/renderer/core/frame/attribution_src_loader_test.cc b/third_party/blink/renderer/core/frame/attribution_src_loader_test.cc
index 4be0e23..fce26020 100644
--- a/third_party/blink/renderer/core/frame/attribution_src_loader_test.cc
+++ b/third_party/blink/renderer/core/frame/attribution_src_loader_test.cc
@@ -13,12 +13,13 @@
 #include "components/attribution_reporting/registration_type.mojom-shared.h"
 #include "components/attribution_reporting/source_registration.h"
 #include "components/attribution_reporting/suitable_origin.h"
-#include "components/attribution_reporting/trigger_attestation.h"
 #include "components/attribution_reporting/trigger_registration.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "net/http/structured_headers.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/conversions/attribution_data_host.mojom-blink.h"
 #include "third_party/blink/public/mojom/conversions/conversions.mojom-blink.h"
@@ -42,6 +43,8 @@
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/referrer.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
+#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
@@ -93,6 +96,11 @@
     return trigger_data_;
   }
 
+  const Vector<absl::optional<network::TriggerAttestation>>&
+  trigger_attestation() const {
+    return trigger_attestation_;
+  }
+
   size_t disconnects() const { return disconnects_; }
 
   void Flush() { receiver_.FlushForTesting(); }
@@ -110,15 +118,17 @@
   void TriggerDataAvailable(
       attribution_reporting::SuitableOrigin reporting_origin,
       attribution_reporting::TriggerRegistration data,
-      absl::optional<attribution_reporting::TriggerAttestation> attestation)
-      override {
+      absl::optional<network::TriggerAttestation> attestation) override {
     trigger_data_.push_back(std::move(data));
+    trigger_attestation_.push_back(std::move(attestation));
   }
 
   Vector<attribution_reporting::SourceRegistration> source_data_;
 
   Vector<attribution_reporting::TriggerRegistration> trigger_data_;
 
+  Vector<absl::optional<network::TriggerAttestation>> trigger_attestation_;
+
   size_t disconnects_ = 0;
   mojo::Receiver<mojom::blink::AttributionDataHost> receiver_{this};
 };
@@ -227,8 +237,12 @@
 
   mock_data_host->Flush();
   EXPECT_EQ(mock_data_host->trigger_data().size(), 1u);
+  ASSERT_EQ(mock_data_host->trigger_attestation().size(), 1u);
+  ASSERT_FALSE(mock_data_host->trigger_attestation().at(0).has_value());
 }
 
+// TODO(https://crbug.com/1412566): Improve tests to properly cover the
+// different `kAttributionReportingEligible` header values.
 TEST_F(AttributionSrcLoaderTest, RegisterTriggerWithTriggerHeader) {
   KURL test_url = ToKURL("https://example1.com/foo.html");
 
@@ -281,6 +295,45 @@
   EXPECT_EQ(mock_data_host->trigger_data().size(), 1u);
 }
 
+TEST_F(AttributionSrcLoaderTest, RegisterTriggerWithAttestation) {
+  KURL test_url = ToKURL("https://example1.com/foo.html");
+
+  ResourceRequest request(test_url);
+  auto* resource = MakeGarbageCollected<MockResource>(test_url);
+  ResourceResponse response(test_url);
+  response.SetHttpStatusCode(200);
+  response.SetHttpHeaderField(
+      http_names::kAttributionReportingRegisterTrigger,
+      R"({"event_trigger_data":[{"trigger_data": "7"}]})");
+
+  absl::optional<network::TriggerAttestation> trigger_attestation =
+      network::TriggerAttestation::Create(
+          "token", "08fa6760-8e5c-4ccb-821d-b5d82bef2b37");
+  response.SetTriggerAttestation(trigger_attestation);
+
+  MockAttributionHost host(
+      GetFrame().GetRemoteNavigationAssociatedInterfaces());
+  EXPECT_TRUE(attribution_src_loader_->MaybeRegisterAttributionHeaders(
+      request, response, resource));
+
+  host.WaitUntilBoundAndFlush();
+
+  auto* mock_data_host = host.mock_data_host();
+  ASSERT_TRUE(mock_data_host);
+  mock_data_host->Flush();
+
+  ASSERT_EQ(mock_data_host->trigger_attestation().size(), 1u);
+  ASSERT_TRUE(mock_data_host->trigger_attestation().at(0).has_value());
+  EXPECT_EQ(mock_data_host->trigger_attestation().at(0).value().token(),
+            "token");
+  EXPECT_EQ(mock_data_host->trigger_attestation()
+                .at(0)
+                .value()
+                .aggregatable_report_id()
+                .AsLowercaseString(),
+            "08fa6760-8e5c-4ccb-821d-b5d82bef2b37");
+}
+
 TEST_F(AttributionSrcLoaderTest, AttributionSrcRequestsIgnored) {
   KURL test_url = ToKURL("https://example1.com/foo.html");
   ResourceRequest request(test_url);
diff --git a/third_party/blink/renderer/core/frame/deprecation/PRESUBMIT.py b/third_party/blink/renderer/core/frame/deprecation/PRESUBMIT.py
index 3d8a25ce..5865b15 100644
--- a/third_party/blink/renderer/core/frame/deprecation/PRESUBMIT.py
+++ b/third_party/blink/renderer/core/frame/deprecation/PRESUBMIT.py
@@ -13,6 +13,12 @@
 
 USE_PYTHON3 = True
 
+# Deprecations in this list have no `WebFeature`s to generate code from as they
+# are not dispatched within the renderer. If this list starts to grow we should
+# add more formal support.
+EXEMPTED_FROM_RENDERER_GENERATION = {
+    "PrivacySandboxExtensionsAPI": True,
+}
 
 # pyright: reportMissingImports=false
 def _LoadDeprecation(input_api, filename):
@@ -78,11 +84,12 @@
                         long_text='\n'.join(diff))
                 ]
         else:
-            return [
-                output_api.PresubmitError(
-                    'deprecation.json5 items must all contain a non-empty list of "web_features".'
-                )
-            ]
+            if deprecation['name'] not in EXEMPTED_FROM_RENDERER_GENERATION:
+                return [
+                    output_api.PresubmitError(
+                        'deprecation.json5 items must all contain a non-empty list of "web_features".'
+                    )
+                ]
         if 'chrome_status_feature' in deprecation:
             if not deprecation['chrome_status_feature']:
                 return [
diff --git a/third_party/blink/renderer/core/frame/deprecation/README.md b/third_party/blink/renderer/core/frame/deprecation/README.md
index a4714f09..667218cb 100644
--- a/third_party/blink/renderer/core/frame/deprecation/README.md
+++ b/third_party/blink/renderer/core/frame/deprecation/README.md
@@ -27,15 +27,7 @@
 Both `chrome_status_feature` and `milestone` are optional.
 More than one `web_features` can be added if needed.
 
-### (3) [DeprecationIssueType](/third_party/blink/renderer/core/inspector/inspector_audits_issue.h)
-
-Add an enum key called `kFeatureName`.
-
-### (4) [DeprecationIssueType](/third_party/blink/public/devtools_protocol/browser_protocol.pdl)
-
-Add an enum key called `FeatureName`.
-
-## (5) [GetDeprecationInfo](/third_party/blink/renderer/core/frame/deprecation/deprecation.cc)
+## (3) [GetDeprecationInfo](/third_party/blink/renderer/core/frame/deprecation/deprecation.cc)
 
 The new case statement should look like:
 ```
@@ -43,26 +35,17 @@
   return DeprecationInfo::WithTranslation(feature, DeprecationIssueType::kFeatureName);
 ```
 
-## (6) [AuditsIssue::ReportDeprecationIssue](/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc)
-
-The new case statement should look like:
-```
-case DeprecationIssueType::kFeatureName:
-  type = protocol::Audits::DeprecationIssueTypeEnum::FeatureName;
-  break;
-```
-
-## (7) Count the deprecation
+## (4) Count the deprecation
 
 Pick one (or both if needed) of the following methods.
 
-### (7a) Call `Deprecation::CountDeprecation`
+### (4a) Call `Deprecation::CountDeprecation`
 
 This function requires a subclass of `ExecutionContext` and your new `WebFeature` to be passed in.
 If you're already counting use with an existing `WebFeature`, you should swap `LocalDOMWindow::CountUse` with `ExecutionContext::CountDeprecation` as it will bump the counter for you.
 If you only care about cross-site iframes, you can call `Deprecation::CountDeprecationCrossOriginIframe`.
 
-### (7b) Add `DeprecateAs` to the relevant IDL
+### (4b) Add `DeprecateAs` to the relevant IDL
 
 The [`DeprecateAs`](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/bindings/IDLExtendedAttributes.md#DeprecateAs_m_a_c) attribute can be added to the IDL as follows:
 
@@ -70,7 +53,7 @@
 [DeprecateAs=FeatureName] void myDeprecatedFunction();
 ```
 
-## (8) Test
+## (5) Test
 
 Please do not skip this step! Examples can be found in:
 (/third_party/blink/web_tests/http/tests/inspector-protocol/issues/deprecation-issue.js)
@@ -80,11 +63,11 @@
 third_party/blink/tools/run_web_tests.py http/tests/inspector-protocol/issues
 ```
 
-## (9) Merge steps 1-8 in a `chromium/src` CL
+## (6) Merge steps 1-5 in a `chromium/src` CL
 
 Please tag deprecation-devtool-issues@chromium.org for review.
 
-## (10) Manually roll dependencies from `chromium/src` to `devtools/devtools-frontend`
+## (7) Manually roll dependencies from `chromium/src` to `devtools/devtools-frontend`
 
 [Check out](https://chromium.googlesource.com/devtools/devtools-frontend/+/refs/heads/main/docs/workflows.md) `devtools/devtools-frontend` on the same dev machine where you have `chromium/src` checked out.
 Check new branch out in `devtools/devtools-frontend`, and run (adjusting directories as needed):
@@ -92,17 +75,17 @@
 ./scripts/deps/roll_deps.py ~/chromium/src ~/devtools/devtools-frontend
 npm run generate-protocol-resources
 ```
-This pushes the change from (9) into `devtools/devtools-frontend` so you can use it in (13).
+This pushes the change from (6) into `devtools/devtools-frontend` so you can use it in (10).
 
-## (11) Merge step 7 in a `devtools/devtools-frontend` CL
+## (8) Merge step 7 in a `devtools/devtools-frontend` CL
 
 Please tag deprecation-devtool-issues@chromium.org for review.
 
-## (12) Wait for automatic roll dependencies from `devtools/devtools-frontend` to `chromium/src`
+## (9) Wait for automatic roll dependencies from `devtools/devtools-frontend` to `chromium/src`
 
 This will be done by the [AutoRoller](https://autoroll.skia.org/r/devtools-frontend-chromium) within a few hours.
 
-## (13) Build Chrome from tip-of-trunk
+## (10) Build Chrome from tip-of-trunk
 
 Verify everything is working as expected.
 If something is broken and you can't figure out why, reach out to deprecation-devtool-issues@chromium.org.
diff --git a/third_party/blink/renderer/core/frame/deprecation/deprecation.cc b/third_party/blink/renderer/core/frame/deprecation/deprecation.cc
index f23d44e..7a29ab6 100644
--- a/third_party/blink/renderer/core/frame/deprecation/deprecation.cc
+++ b/third_party/blink/renderer/core/frame/deprecation/deprecation.cc
@@ -25,23 +25,24 @@
 
 namespace {
 
+const char kNotDeprecated[] = "NotDeprecated";
+
 class DeprecationInfo final {
  public:
-  static const DeprecationInfo WithTranslation(
-      WebFeature feature,
-      const DeprecationIssueType& type) {
+  static const DeprecationInfo WithTranslation(WebFeature feature,
+                                               const String& type) {
     return DeprecationInfo(feature, type);
   }
 
   static const DeprecationInfo NotDeprecated(WebFeature feature) {
-    return DeprecationInfo(feature, DeprecationIssueType::kNotDeprecated);
+    return DeprecationInfo(feature, kNotDeprecated);
   }
 
   const WebFeature feature_;
-  const DeprecationIssueType type_;
+  const String type_;
 
  private:
-  DeprecationInfo(WebFeature feature, DeprecationIssueType type)
+  DeprecationInfo(WebFeature feature, String type)
       : feature_(feature), type_(type) {}
 };
 
@@ -49,11 +50,11 @@
   // Please keep this alphabetized by DeprecationIssueType.
   switch (feature) {
     case WebFeature::kAuthorizationCoveredByWildcard:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kAuthorizationCoveredByWildcard);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "AuthorizationCoveredByWildcard");
     case WebFeature::kCanRequestURLHTTPContainingNewline:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kCanRequestURLHTTPContainingNewline);
+          feature, "CanRequestURLHTTPContainingNewline");
     case WebFeature::kChromeLoadTimesCommitLoadTime:
     case WebFeature::kChromeLoadTimesConnectionInfo:
     case WebFeature::kChromeLoadTimesFinishDocumentLoadTime:
@@ -61,188 +62,163 @@
     case WebFeature::kChromeLoadTimesNavigationType:
     case WebFeature::kChromeLoadTimesRequestTime:
     case WebFeature::kChromeLoadTimesStartLoadTime:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kChromeLoadTimesConnectionInfo);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "ChromeLoadTimesConnectionInfo");
     case WebFeature::kChromeLoadTimesFirstPaintAfterLoadTime:
     case WebFeature::kChromeLoadTimesFirstPaintTime:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kChromeLoadTimesFirstPaintAfterLoadTime);
+          feature, "ChromeLoadTimesFirstPaintAfterLoadTime");
     case WebFeature::kChromeLoadTimesWasAlternateProtocolAvailable:
     case WebFeature::kChromeLoadTimesWasFetchedViaSpdy:
     case WebFeature::kChromeLoadTimesNpnNegotiatedProtocol:
     case WebFeature::kChromeLoadTimesWasNpnNegotiated:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kChromeLoadTimesWasAlternateProtocolAvailable);
+          feature, "ChromeLoadTimesWasAlternateProtocolAvailable");
     case WebFeature::kCookieWithTruncatingChar:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kCookieWithTruncatingChar);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "CookieWithTruncatingChar");
     case WebFeature::kCrossOriginAccessBasedOnDocumentDomain:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kCrossOriginAccessBasedOnDocumentDomain);
+          feature, "CrossOriginAccessBasedOnDocumentDomain");
     case WebFeature::kCrossOriginWindowAlert:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kCrossOriginWindowAlert);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "CrossOriginWindowAlert");
     case WebFeature::kCrossOriginWindowConfirm:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kCrossOriginWindowConfirm);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "CrossOriginWindowConfirm");
     case WebFeature::kCSSSelectorInternalMediaControlsOverlayCastButton:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::
-                       kCSSSelectorInternalMediaControlsOverlayCastButton);
+          feature, "CSSSelectorInternalMediaControlsOverlayCastButton");
     case WebFeature::kDeprecationExample:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kDeprecationExample);
+      return DeprecationInfo::WithTranslation(feature, "DeprecationExample");
     case WebFeature::kDocumentDomainSettingWithoutOriginAgentClusterHeader:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::
-                       kDocumentDomainSettingWithoutOriginAgentClusterHeader);
+          feature, "DocumentDomainSettingWithoutOriginAgentClusterHeader");
     case WebFeature::kEventPath:
-      return DeprecationInfo::WithTranslation(feature,
-                                              DeprecationIssueType::kEventPath);
+      return DeprecationInfo::WithTranslation(feature, "EventPath");
     case WebFeature::kExpectCTHeader:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kExpectCTHeader);
+      return DeprecationInfo::WithTranslation(feature, "ExpectCTHeader");
     // Powerful features on insecure origins (https://goo.gl/rStTGz)
     case WebFeature::kGeolocationInsecureOrigin:
     case WebFeature::kGeolocationInsecureOriginIframe:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kGeolocationInsecureOrigin);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "GeolocationInsecureOrigin");
     case WebFeature::kGeolocationInsecureOriginDeprecatedNotRemoved:
     case WebFeature::kGeolocationInsecureOriginIframeDeprecatedNotRemoved:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kGeolocationInsecureOriginDeprecatedNotRemoved);
+          feature, "GeolocationInsecureOriginDeprecatedNotRemoved");
     case WebFeature::kGetUserMediaInsecureOrigin:
     case WebFeature::kGetUserMediaInsecureOriginIframe:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kGetUserMediaInsecureOrigin);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "GetUserMediaInsecureOrigin");
     case WebFeature::kHostCandidateAttributeGetter:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kHostCandidateAttributeGetter);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "HostCandidateAttributeGetter");
     case WebFeature::kAddressSpacePrivateNonSecureContextEmbeddedLocal:
     case WebFeature::kAddressSpacePublicNonSecureContextEmbeddedLocal:
     case WebFeature::kAddressSpacePublicNonSecureContextEmbeddedPrivate:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kInsecurePrivateNetworkSubresourceRequest);
+          feature, "InsecurePrivateNetworkSubresourceRequest");
     case WebFeature::kLocalCSSFileExtensionRejected:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kLocalCSSFileExtensionRejected);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "LocalCSSFileExtensionRejected");
     case WebFeature::kMediaSourceAbortRemove:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kMediaSourceAbortRemove);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "MediaSourceAbortRemove");
     case WebFeature::kMediaSourceDurationTruncatingBuffered:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kMediaSourceDurationTruncatingBuffered);
+          feature, "MediaSourceDurationTruncatingBuffered");
     case WebFeature::kNoSysexWebMIDIWithoutPermission:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kNoSysexWebMIDIWithoutPermission);
+          feature, "NoSysexWebMIDIWithoutPermission");
     case WebFeature::kNotificationAPIInsecureOriginIframe:
     case WebFeature::kNotificationInsecureOrigin:
     case WebFeature::kNotificationPermissionRequestedInsecureOrigin:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kNotificationInsecureOrigin);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "NotificationInsecureOrigin");
     case WebFeature::kNotificationPermissionRequestedIframe:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kNotificationPermissionRequestedIframe);
+          feature, "NotificationPermissionRequestedIframe");
     case WebFeature::kObsoleteWebrtcTlsVersion:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kObsoleteWebRtcCipherSuite);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "ObsoleteWebRtcCipherSuite");
     case WebFeature::kObsoleteCreateImageBitmapImageOrientationNone:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kObsoleteCreateImageBitmapImageOrientationNone);
+          feature, "ObsoleteCreateImageBitmapImageOrientationNone");
     case WebFeature::kPaymentInstruments:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPaymentInstruments);
+      return DeprecationInfo::WithTranslation(feature, "PaymentInstruments");
     case WebFeature::kPaymentRequestCSPViolation:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPaymentRequestCSPViolation);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PaymentRequestCSPViolation");
     case WebFeature::kPersistentQuotaType:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPersistentQuotaType);
+      return DeprecationInfo::WithTranslation(feature, "PersistentQuotaType");
     case WebFeature::kPictureSourceSrc:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPictureSourceSrc);
+      return DeprecationInfo::WithTranslation(feature, "PictureSourceSrc");
     case WebFeature::kPrefixedCancelAnimationFrame:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedCancelAnimationFrame);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PrefixedCancelAnimationFrame");
     case WebFeature::kPrefixedRequestAnimationFrame:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedRequestAnimationFrame);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PrefixedRequestAnimationFrame");
     // Quota
     case WebFeature::kPrefixedStorageInfo:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedStorageInfo);
+      return DeprecationInfo::WithTranslation(feature, "PrefixedStorageInfo");
     case WebFeature::kPrefixedVideoDisplayingFullscreen:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedVideoDisplayingFullscreen);
+          feature, "PrefixedVideoDisplayingFullscreen");
     case WebFeature::kPrefixedVideoEnterFullScreen:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedVideoEnterFullScreen);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PrefixedVideoEnterFullScreen");
     case WebFeature::kPrefixedVideoEnterFullscreen:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedVideoEnterFullscreen);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PrefixedVideoEnterFullscreen");
     case WebFeature::kPrefixedVideoExitFullScreen:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedVideoExitFullScreen);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PrefixedVideoExitFullScreen");
     case WebFeature::kPrefixedVideoExitFullscreen:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedVideoExitFullscreen);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "PrefixedVideoExitFullscreen");
     case WebFeature::kPrefixedVideoSupportsFullscreen:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kPrefixedVideoSupportsFullscreen);
+          feature, "PrefixedVideoSupportsFullscreen");
     case WebFeature::kRangeExpand:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kRangeExpand);
+      return DeprecationInfo::WithTranslation(feature, "RangeExpand");
     // Blocked subresource requests:
     case WebFeature::kRequestedSubresourceWithEmbeddedCredentials:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kRequestedSubresourceWithEmbeddedCredentials);
+          feature, "RequestedSubresourceWithEmbeddedCredentials");
     case WebFeature::kRTCConstraintEnableDtlsSrtpFalse:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kRTCConstraintEnableDtlsSrtpFalse);
+          feature, "RTCConstraintEnableDtlsSrtpFalse");
     case WebFeature::kRTCConstraintEnableDtlsSrtpTrue:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kRTCConstraintEnableDtlsSrtpTrue);
+          feature, "RTCConstraintEnableDtlsSrtpTrue");
     case WebFeature::kRtcpMuxPolicyNegotiate:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kRtcpMuxPolicyNegotiate);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "RtcpMuxPolicyNegotiate");
     case WebFeature::kV8SharedArrayBufferConstructedWithoutIsolation:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::kSharedArrayBufferConstructedWithoutIsolation);
+          feature, "SharedArrayBufferConstructedWithoutIsolation");
     case WebFeature::kTextToSpeech_SpeakDisallowedByAutoplay:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kTextToSpeech_DisallowedByAutoplay);
+          feature, "TextToSpeech_DisallowedByAutoplay");
     case WebFeature::kV8SharedArrayBufferConstructedInExtensionWithoutIsolation:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::
-              kV8SharedArrayBufferConstructedInExtensionWithoutIsolation);
+          feature, "V8SharedArrayBufferConstructedInExtensionWithoutIsolation");
     case WebFeature::kXHRJSONEncodingDetection:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kXHRJSONEncodingDetection);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "XHRJSONEncodingDetection");
     case WebFeature::kXMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:
       return DeprecationInfo::WithTranslation(
-          feature,
-          DeprecationIssueType::
-              kXMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload);
+          feature, "XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload");
     case WebFeature::kXRSupportsSession:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kXRSupportsSession);
+      return DeprecationInfo::WithTranslation(feature, "XRSupportsSession");
     case WebFeature::kIdentityInCanMakePaymentEvent:
-      return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kIdentityInCanMakePaymentEvent);
+      return DeprecationInfo::WithTranslation(feature,
+                                              "IdentityInCanMakePaymentEvent");
     case WebFeature::kExplicitOverflowVisibleOnReplacedElement:
       return DeprecationInfo::WithTranslation(
-          feature, DeprecationIssueType::kOverflowVisibleOnReplacedElement);
+          feature, "OverflowVisibleOnReplacedElement");
     default:
       return DeprecationInfo::NotDeprecated(feature);
   }
@@ -334,8 +310,7 @@
 
 // static
 bool Deprecation::IsDeprecated(WebFeature feature) {
-  return GetDeprecationInfo(feature).type_ !=
-         DeprecationIssueType::kNotDeprecated;
+  return GetDeprecationInfo(feature).type_ != kNotDeprecated;
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/deprecation/deprecation.json5 b/third_party/blink/renderer/core/frame/deprecation/deprecation.json5
index b4d8b6f5..1a25588 100644
--- a/third_party/blink/renderer/core/frame/deprecation/deprecation.json5
+++ b/third_party/blink/renderer/core/frame/deprecation/deprecation.json5
@@ -432,6 +432,14 @@
       ],
     },
     {
+      name: "PrivacySandboxExtensionsAPI",
+      message: "We’re deprecating the API `chrome.privacy.websites.privacySandboxEnabled`, though it will remain active for backward compatibility until release M113. Instead, please use `chrome.privacy.websites.topicsEnabled`, `chrome.privacy.websites.fledgeEnabled` and `chrome.privacy.websites.adMeasurementEnabled`. See https://developer.chrome.com/docs/extensions/reference/privacy/#property-websites-privacySandboxEnabled.",
+      translation_note: "Warning displayed to developers that the API `chrome.privacy.websites.privacySandboxEnabled` is being deprecated in favour of three new more granular APIs: topicsEnabled, FledgeEnabled and adMeasurementEnabled. The `privacySandboxEnabled` API allowed extensions to control the homologous Chrome Setting. The existing Chrome Setting for Privacy Sandbox is also going away in favor of more granular settings that are matched by the new extensions APIs- topicsEnabled, FledgeEnabled and adMeasurementEnabled.",
+      web_features: [
+        // This deprecation is unique and is not dispatched from the renderer.
+      ],
+    },
+    {
       name: "RangeExpand",
       message: "Range.expand() is deprecated. Please use Selection.modify() instead.",
       translation_note: "Standard message when one web API is deprecated in favor of another.",
diff --git a/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc b/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc
index e34d04bd..91401a0 100644
--- a/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc
@@ -467,232 +467,7 @@
 
 // static
 void AuditsIssue::ReportDeprecationIssue(ExecutionContext* execution_context,
-                                         DeprecationIssueType type_enum) {
-  protocol::Audits::DeprecationIssueType type;
-  // Please keep this alphabetized.
-  switch (type_enum) {
-    case DeprecationIssueType::kAuthorizationCoveredByWildcard:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          AuthorizationCoveredByWildcard;
-      break;
-    case DeprecationIssueType::kCanRequestURLHTTPContainingNewline:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          CanRequestURLHTTPContainingNewline;
-      break;
-    case DeprecationIssueType::kChromeLoadTimesConnectionInfo:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          ChromeLoadTimesConnectionInfo;
-      break;
-    case DeprecationIssueType::kChromeLoadTimesFirstPaintAfterLoadTime:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          ChromeLoadTimesFirstPaintAfterLoadTime;
-      break;
-    case DeprecationIssueType::kChromeLoadTimesWasAlternateProtocolAvailable:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          ChromeLoadTimesWasAlternateProtocolAvailable;
-      break;
-    case DeprecationIssueType::kCookieWithTruncatingChar:
-      type =
-          protocol::Audits::DeprecationIssueTypeEnum::CookieWithTruncatingChar;
-      break;
-    case DeprecationIssueType::kCrossOriginAccessBasedOnDocumentDomain:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          CrossOriginAccessBasedOnDocumentDomain;
-      break;
-    case DeprecationIssueType::kCrossOriginWindowAlert:
-      type = protocol::Audits::DeprecationIssueTypeEnum::CrossOriginWindowAlert;
-      break;
-    case DeprecationIssueType::kCrossOriginWindowConfirm:
-      type =
-          protocol::Audits::DeprecationIssueTypeEnum::CrossOriginWindowConfirm;
-      break;
-    case DeprecationIssueType::
-        kCSSSelectorInternalMediaControlsOverlayCastButton:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          CSSSelectorInternalMediaControlsOverlayCastButton;
-      break;
-    case DeprecationIssueType::kDeprecationExample:
-      type = protocol::Audits::DeprecationIssueTypeEnum::DeprecationExample;
-      break;
-    case DeprecationIssueType::
-        kDocumentDomainSettingWithoutOriginAgentClusterHeader:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          DocumentDomainSettingWithoutOriginAgentClusterHeader;
-      break;
-    case DeprecationIssueType::kEventPath:
-      type = protocol::Audits::DeprecationIssueTypeEnum::EventPath;
-      break;
-    case DeprecationIssueType::kExpectCTHeader:
-      type = protocol::Audits::DeprecationIssueTypeEnum::ExpectCTHeader;
-      break;
-    case DeprecationIssueType::kGeolocationInsecureOrigin:
-      type =
-          protocol::Audits::DeprecationIssueTypeEnum::GeolocationInsecureOrigin;
-      break;
-    case DeprecationIssueType::kGeolocationInsecureOriginDeprecatedNotRemoved:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          GeolocationInsecureOriginDeprecatedNotRemoved;
-      break;
-    case DeprecationIssueType::kGetUserMediaInsecureOrigin:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          GetUserMediaInsecureOrigin;
-      break;
-    case DeprecationIssueType::kHostCandidateAttributeGetter:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          HostCandidateAttributeGetter;
-      break;
-    case DeprecationIssueType::kInsecurePrivateNetworkSubresourceRequest:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          InsecurePrivateNetworkSubresourceRequest;
-      break;
-    case DeprecationIssueType::kLocalCSSFileExtensionRejected:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          LocalCSSFileExtensionRejected;
-      break;
-    case DeprecationIssueType::kMediaSourceAbortRemove:
-      type = protocol::Audits::DeprecationIssueTypeEnum::MediaSourceAbortRemove;
-      break;
-    case DeprecationIssueType::kMediaSourceDurationTruncatingBuffered:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          MediaSourceDurationTruncatingBuffered;
-      break;
-    case DeprecationIssueType::kNoSysexWebMIDIWithoutPermission:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          NoSysexWebMIDIWithoutPermission;
-      break;
-    case DeprecationIssueType::kNotDeprecated:
-      LOG(FATAL) << "Feature " << type << " is not deprecated.";
-      break;
-    case DeprecationIssueType::kNotificationInsecureOrigin:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          NotificationInsecureOrigin;
-      break;
-    case DeprecationIssueType::kNotificationPermissionRequestedIframe:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          NotificationPermissionRequestedIframe;
-      break;
-    case DeprecationIssueType::kObsoleteCreateImageBitmapImageOrientationNone:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          ObsoleteCreateImageBitmapImageOrientationNone;
-      break;
-    case DeprecationIssueType::kObsoleteWebRtcCipherSuite:
-      type =
-          protocol::Audits::DeprecationIssueTypeEnum::ObsoleteWebRtcCipherSuite;
-      break;
-    case DeprecationIssueType::kOpenWebDatabaseInsecureContext:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          OpenWebDatabaseInsecureContext;
-      break;
-    case DeprecationIssueType::kOverflowVisibleOnReplacedElement:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          OverflowVisibleOnReplacedElement;
-      break;
-    case DeprecationIssueType::kPaymentInstruments:
-      type = protocol::Audits::DeprecationIssueTypeEnum::PaymentInstruments;
-      break;
-    case DeprecationIssueType::kPaymentRequestCSPViolation:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PaymentRequestCSPViolation;
-      break;
-    case DeprecationIssueType::kPersistentQuotaType:
-      type = protocol::Audits::DeprecationIssueTypeEnum::PersistentQuotaType;
-      break;
-    case DeprecationIssueType::kPictureSourceSrc:
-      type = protocol::Audits::DeprecationIssueTypeEnum::PictureSourceSrc;
-      break;
-    case DeprecationIssueType::kPrefixedCancelAnimationFrame:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedCancelAnimationFrame;
-      break;
-    case DeprecationIssueType::kPrefixedRequestAnimationFrame:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedRequestAnimationFrame;
-      break;
-    case DeprecationIssueType::kPrefixedStorageInfo:
-      type = protocol::Audits::DeprecationIssueTypeEnum::PrefixedStorageInfo;
-      break;
-    case DeprecationIssueType::kPrefixedVideoDisplayingFullscreen:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedVideoDisplayingFullscreen;
-      break;
-    case DeprecationIssueType::kPrefixedVideoEnterFullScreen:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedVideoEnterFullScreen;
-      break;
-    case DeprecationIssueType::kPrefixedVideoEnterFullscreen:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedVideoEnterFullscreen;
-      break;
-    case DeprecationIssueType::kPrefixedVideoExitFullScreen:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedVideoExitFullScreen;
-      break;
-    case DeprecationIssueType::kPrefixedVideoExitFullscreen:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedVideoExitFullscreen;
-      break;
-    case DeprecationIssueType::kPrefixedVideoSupportsFullscreen:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          PrefixedVideoSupportsFullscreen;
-      break;
-    case DeprecationIssueType::kRangeExpand:
-      type = protocol::Audits::DeprecationIssueTypeEnum::RangeExpand;
-      break;
-    case DeprecationIssueType::kRequestedSubresourceWithEmbeddedCredentials:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          RequestedSubresourceWithEmbeddedCredentials;
-      break;
-    case DeprecationIssueType::kRTCConstraintEnableDtlsSrtpFalse:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          RTCConstraintEnableDtlsSrtpFalse;
-      break;
-    case DeprecationIssueType::kRTCConstraintEnableDtlsSrtpTrue:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          RTCConstraintEnableDtlsSrtpTrue;
-      break;
-    case DeprecationIssueType::
-        kRTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics;
-      break;
-    case DeprecationIssueType::kRTCPeerConnectionSdpSemanticsPlanB:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          RTCPeerConnectionSdpSemanticsPlanB;
-      break;
-    case DeprecationIssueType::kRtcpMuxPolicyNegotiate:
-      type = protocol::Audits::DeprecationIssueTypeEnum::RtcpMuxPolicyNegotiate;
-      break;
-    case DeprecationIssueType::kSharedArrayBufferConstructedWithoutIsolation:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          SharedArrayBufferConstructedWithoutIsolation;
-      break;
-    case DeprecationIssueType::kTextToSpeech_DisallowedByAutoplay:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          TextToSpeech_DisallowedByAutoplay;
-      break;
-    case DeprecationIssueType::
-        kV8SharedArrayBufferConstructedInExtensionWithoutIsolation:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          V8SharedArrayBufferConstructedInExtensionWithoutIsolation;
-      break;
-    case DeprecationIssueType::kXHRJSONEncodingDetection:
-      type =
-          protocol::Audits::DeprecationIssueTypeEnum::XHRJSONEncodingDetection;
-      break;
-    case DeprecationIssueType::
-        kXMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload;
-      break;
-    case DeprecationIssueType::kXRSupportsSession:
-      type = protocol::Audits::DeprecationIssueTypeEnum::XRSupportsSession;
-      break;
-    case DeprecationIssueType::kIdentityInCanMakePaymentEvent:
-      type = protocol::Audits::DeprecationIssueTypeEnum::
-          IdentityInCanMakePaymentEvent;
-      break;
-  }
-
+                                         String type) {
   auto source_location = CaptureSourceLocation(execution_context);
   auto deprecation_issue_details =
       protocol::Audits::DeprecationIssueDetails::create()
diff --git a/third_party/blink/renderer/core/inspector/inspector_audits_issue.h b/third_party/blink/renderer/core/inspector/inspector_audits_issue.h
index c00c35ef..536147df 100644
--- a/third_party/blink/renderer/core/inspector/inspector_audits_issue.h
+++ b/third_party/blink/renderer/core/inspector/inspector_audits_issue.h
@@ -37,67 +37,6 @@
 }
 }  // namespace protocol
 
-// Please keep this alphabetized.
-enum class DeprecationIssueType {
-  kAuthorizationCoveredByWildcard,
-  kCanRequestURLHTTPContainingNewline,
-  kChromeLoadTimesConnectionInfo,
-  kChromeLoadTimesFirstPaintAfterLoadTime,
-  kChromeLoadTimesWasAlternateProtocolAvailable,
-  kCookieWithTruncatingChar,
-  kCrossOriginAccessBasedOnDocumentDomain,
-  kCrossOriginWindowAlert,
-  kCrossOriginWindowConfirm,
-  kCSSSelectorInternalMediaControlsOverlayCastButton,
-  kDeprecationExample,
-  kDocumentDomainSettingWithoutOriginAgentClusterHeader,
-  kEventPath,
-  kExpectCTHeader,
-  kGeolocationInsecureOrigin,
-  kGeolocationInsecureOriginDeprecatedNotRemoved,
-  kGetUserMediaInsecureOrigin,
-  kHostCandidateAttributeGetter,
-  kIdentityInCanMakePaymentEvent,
-  kInsecurePrivateNetworkSubresourceRequest,
-  kLocalCSSFileExtensionRejected,
-  kMediaSourceAbortRemove,
-  kMediaSourceDurationTruncatingBuffered,
-  kNoSysexWebMIDIWithoutPermission,
-  kNotDeprecated,
-  kNotificationInsecureOrigin,
-  kNotificationPermissionRequestedIframe,
-  kObsoleteCreateImageBitmapImageOrientationNone,
-  kObsoleteWebRtcCipherSuite,
-  kOpenWebDatabaseInsecureContext,
-  kOverflowVisibleOnReplacedElement,
-  kPaymentInstruments,
-  kPaymentRequestCSPViolation,
-  kPersistentQuotaType,
-  kPictureSourceSrc,
-  kPrefixedCancelAnimationFrame,
-  kPrefixedRequestAnimationFrame,
-  kPrefixedStorageInfo,
-  kPrefixedVideoDisplayingFullscreen,
-  kPrefixedVideoEnterFullScreen,
-  kPrefixedVideoEnterFullscreen,
-  kPrefixedVideoExitFullScreen,
-  kPrefixedVideoExitFullscreen,
-  kPrefixedVideoSupportsFullscreen,
-  kRangeExpand,
-  kRequestedSubresourceWithEmbeddedCredentials,
-  kRTCConstraintEnableDtlsSrtpFalse,
-  kRTCConstraintEnableDtlsSrtpTrue,
-  kRTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics,
-  kRTCPeerConnectionSdpSemanticsPlanB,
-  kRtcpMuxPolicyNegotiate,
-  kSharedArrayBufferConstructedWithoutIsolation,
-  kTextToSpeech_DisallowedByAutoplay,
-  kV8SharedArrayBufferConstructedInExtensionWithoutIsolation,
-  kXHRJSONEncodingDetection,
-  kXMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload,
-  kXRSupportsSession,
-};
-
 enum class RendererCorsIssueCode {
   kDisallowedByMode,
   kCorsDisabledScheme,
@@ -194,7 +133,7 @@
   // `execution_context` is used to extract the affected frame and source.
   // `type` is the enum used to differentiate messages.
   static void ReportDeprecationIssue(ExecutionContext* execution_context,
-                                     DeprecationIssueType type);
+                                     String type);
 
   static void ReportClientHintIssue(LocalDOMWindow* local_dom_window,
                                     ClientHintIssueReason reason);
diff --git a/third_party/blink/renderer/core/paint/paint_info.h b/third_party/blink/renderer/core/paint/paint_info.h
index c001b96..22dfed5 100644
--- a/third_party/blink/renderer/core/paint/paint_info.h
+++ b/third_party/blink/renderer/core/paint/paint_info.h
@@ -55,18 +55,6 @@
         cull_rect_(cull_rect),
         paint_flags_(paint_flags) {}
 
-  PaintInfo(GraphicsContext& new_context,
-            const PaintInfo& copy_other_fields_from)
-      : context(new_context),
-        phase(copy_other_fields_from.phase),
-        cull_rect_(copy_other_fields_from.cull_rect_),
-        fragment_id_(copy_other_fields_from.fragment_id_),
-        paint_flags_(copy_other_fields_from.paint_flags_) {
-    // We should never pass these flags to other PaintInfo.
-    DCHECK(!copy_other_fields_from.is_painting_background_in_contents_space);
-    DCHECK(!copy_other_fields_from.skips_background_);
-  }
-
   // Creates a PaintInfo for painting descendants. See comments about the paint
   // phases in PaintPhase.h for details.
   PaintInfo ForDescendants() const {
diff --git a/third_party/blink/renderer/core/paint/svg_shape_painter.cc b/third_party/blink/renderer/core/paint/svg_shape_painter.cc
index fdda5b1..9d78b74 100644
--- a/third_party/blink/renderer/core/paint/svg_shape_painter.cc
+++ b/third_party/blink/renderer/core/paint/svg_shape_painter.cc
@@ -255,12 +255,12 @@
   if (SVGLayoutSupport::IsOverflowHidden(marker))
     canvas->clipRect(gfx::RectFToSkRect(marker.Viewport()));
   auto* builder = MakeGarbageCollected<PaintRecordBuilder>(paint_info.context);
-  PaintInfo marker_paint_info(builder->Context(), paint_info);
   // It's expensive to track the transformed paint cull rect for each
   // marker so just disable culling. The shape paint call will already
   // be culled if it is outside the paint info cull rect.
-  marker_paint_info.ApplyInfiniteCullRect();
-
+  const PaintInfo marker_paint_info(builder->Context(), CullRect::Infinite(),
+                                    paint_info.phase,
+                                    paint_info.GetPaintFlags());
   SVGContainerPainter(marker).Paint(marker_paint_info);
   builder->EndRecording(*canvas);
 
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc
index 73c26db..4a27d2e 100644
--- a/third_party/blink/renderer/core/style/computed_style.cc
+++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -2680,8 +2680,6 @@
 }
 
 StyleInheritedVariables& ComputedStyleBuilder::MutableInheritedVariables() {
-  ClearVariableNamesCache();
-
   scoped_refptr<StyleInheritedVariables>& variables =
       MutableInheritedVariablesInternal();
   if (!variables) {
@@ -2694,8 +2692,6 @@
 
 StyleNonInheritedVariables&
 ComputedStyleBuilder::MutableNonInheritedVariables() {
-  ClearVariableNamesCache();
-
   std::unique_ptr<StyleNonInheritedVariables>& variables =
       MutableNonInheritedVariablesInternal();
   if (!variables) {
@@ -2807,12 +2803,6 @@
   }
 }
 
-void ComputedStyleBuilder::ClearVariableNamesCache() {
-  if (style_->cached_data_) {
-    style_->cached_data_->variable_names_.reset();
-  }
-}
-
 STATIC_ASSERT_ENUM(cc::OverscrollBehavior::Type::kAuto,
                    EOverscrollBehavior::kAuto);
 STATIC_ASSERT_ENUM(cc::OverscrollBehavior::Type::kContain,
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index 31f8917..9944a16 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -3413,7 +3413,6 @@
     }
   }
   CORE_EXPORT void SetInitialData(scoped_refptr<StyleInitialData> data) {
-    ClearVariableNamesCache();
     MutableInitialDataInternal() = std::move(data);
   }
 
@@ -3443,8 +3442,6 @@
 
   ComputedStyleBuilder() = default;
 
-  CORE_EXPORT void ClearVariableNamesCache();
-
   scoped_refptr<ComputedStyle> style_;
 };
 
diff --git a/third_party/blink/renderer/core/timing/performance.cc b/third_party/blink/renderer/core/timing/performance.cc
index c97b9a51..6142671 100644
--- a/third_party/blink/renderer/core/timing/performance.cc
+++ b/third_party/blink/renderer/core/timing/performance.cc
@@ -325,8 +325,9 @@
 PerformanceEntryVector Performance::getEntries(
     ScriptState* script_state,
     PerformanceEntryFilterOptions* options) {
-  if (!options) {
-    return getEntries();
+  if (!RuntimeEnabledFeatures::CrossFramePerformanceTimelineEnabled() ||
+      !options) {
+    return GetEntriesForCurrentFrame();
   }
 
   PerformanceEntryVector entries;
@@ -339,8 +340,7 @@
                                 : g_null_atom;
 
   // Get sorted entry list based on provided input.
-  if (options->getIncludeChildFramesOr(false) &&
-      RuntimeEnabledFeatures::CrossFramePerformanceTimelineEnabled()) {
+  if (options->getIncludeChildFramesOr(false)) {
     entries = GetEntriesWithChildFrames(script_state, entry_type, name);
   } else {
     if (!entry_type) {
diff --git a/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc b/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
index a7bcf59..0227385 100644
--- a/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
+++ b/third_party/blink/renderer/core/view_transition/view_transition_style_tracker.cc
@@ -47,9 +47,6 @@
 namespace blink {
 namespace {
 
-const char* kContainmentNotSatisfied =
-    "Aborting transition. Element must contain paint or layout for "
-    "view-transition-name : ";
 const char* kDuplicateTagBaseError =
     "Unexpected duplicate view-transition-name: ";
 
@@ -67,11 +64,6 @@
   return kAnimationUAStyles;
 }
 
-bool SatisfiesContainment(const LayoutObject& object) {
-  return object.ShouldApplyPaintContainment() ||
-         object.ShouldApplyLayoutContainment();
-}
-
 absl::optional<String> ComputeInsetDifference(PhysicalRect reference_rect,
                                               const LayoutRect& target_rect,
                                               float device_pixel_ratio) {
@@ -372,25 +364,6 @@
     VectorOf<Element>& elements,
     VectorOf<AtomicString>& transition_names,
     absl::optional<RootData>& root_data) {
-  for (const auto& element : ViewTransitionSupplement::From(*document_)
-                                 ->ElementsWithViewTransitionName()) {
-    DCHECK(element->ComputedStyleRef().ViewTransitionName());
-
-    // Ignore elements which are not rendered.
-    if (!element->GetLayoutObject())
-      continue;
-
-    // Skip the transition if containment is not satisfied.
-    if (!element->IsDocumentElement() &&
-        !SatisfiesContainment(*element->GetLayoutObject())) {
-      StringBuilder message;
-      message.Append(kContainmentNotSatisfied);
-      message.Append(element->ComputedStyleRef().ViewTransitionName());
-      AddConsoleError(message.ReleaseString());
-      return false;
-    }
-  }
-
   // We need to flatten the data first, and sort it by ordering which reflects
   // the setElement ordering.
   struct FlatData : public GarbageCollected<FlatData> {
@@ -838,11 +811,9 @@
 
     DCHECK_NE(element_data->target_element, document_->documentElement());
     auto* layout_object = element_data->target_element->GetLayoutObject();
-    if (!layout_object || !SatisfiesContainment(*layout_object)) {
-      StringBuilder message;
-      message.Append(kContainmentNotSatisfied);
-      message.Append(entry.key);
-      AddConsoleError(message.ReleaseString());
+    // TODO(khushalsagar): Verify that skipping a transition when things become
+    // display none is aligned with spec.
+    if (!layout_object) {
       return false;
     }
 
diff --git a/third_party/blink/renderer/modules/credentialmanagement/federated_credential_request_options.idl b/third_party/blink/renderer/modules/credentialmanagement/federated_credential_request_options.idl
index f574964..06850f0 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/federated_credential_request_options.idl
+++ b/third_party/blink/renderer/modules/credentialmanagement/federated_credential_request_options.idl
@@ -6,5 +6,4 @@
 dictionary FederatedCredentialRequestOptions {
     sequence<DOMString> providers;
     sequence<DOMString> protocols;
-    [RuntimeEnabled=FedCmAutoReauthn] boolean autoReauthn = false;
 };
diff --git a/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl b/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl
index 8a1ad0b..3b101f1 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl
+++ b/third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl
@@ -14,7 +14,7 @@
 // https://fedidcg.github.io/FedCM/#dictdef-identitycredentialrequestoptions
 dictionary IdentityCredentialRequestOptions {
     sequence<IdentityProviderConfig> providers;
-    [RuntimeEnabled=FedCmAutoReauthn] boolean autoReauthn = false;
+    [RuntimeEnabled=FedCmAutoReauthn, MeasureAs=FedCmAutoReauthn] boolean autoReauthn = false;
     // A querying language that allows an RP to ask what it wants from the IdPs.
     [RuntimeEnabled=FedCmSelectiveDisclosure] IdentityStandardClaims claims;
     [RuntimeEnabled=FedCmRpContext] IdentityCredentialRequestOptionsContext context = "signin";
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc
index 5e7429a..e34d2fe8 100644
--- a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc
+++ b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc
@@ -93,13 +93,6 @@
           "in 'connected' mode.");
       return ScriptPromise();
     }
-    if (net::IPAddress address;
-        !address.AssignFromIPLiteral(message->remoteAddress().Utf8())) {
-      exception_state.ThrowTypeError(
-          "UDPMessage: 'remoteAddress' must be a valid IP address -- DNS "
-          "resolution is currently unsupported.");
-      return ScriptPromise();
-    }
     dest_addr = net::HostPortPair(message->remoteAddress().Utf8(),
                                   message->remotePort());
   } else if (message->hasRemoteAddress() || message->hasRemotePort()) {
diff --git a/third_party/blink/renderer/modules/mediastream/media_devices.cc b/third_party/blink/renderer/modules/mediastream/media_devices.cc
index 2bf89d5d..9fae347c 100644
--- a/third_party/blink/renderer/modules/mediastream/media_devices.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_devices.cc
@@ -548,9 +548,7 @@
   }
 
   MediaStreamConstraints* const constraints = ToMediaStreamConstraints(options);
-  if (base::FeatureList::IsEnabled(
-          blink::features::kNewGetDisplayMediaPickerOrder) &&
-      !options->hasSelfBrowserSurface() &&
+  if (!options->hasSelfBrowserSurface() &&
       (!options->hasPreferCurrentTab() || !options->preferCurrentTab())) {
     constraints->setSelfBrowserSurface("exclude");
   }
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc b/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc
index bdc9770..95674030 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc
@@ -34,10 +34,6 @@
   DCHECK(webgpu_desc);
 
   WGPURenderPassColorAttachment dawn_desc = {};
-  // TODO(dawn:1269): Remove after the deprecation period.
-  // clearColor needs to be set to all NaNs to signal that it is not in use.
-  dawn_desc.clearColor = {NAN, NAN, NAN, NAN};
-
   dawn_desc.view = webgpu_desc->view()->GetHandle();
   dawn_desc.resolveTarget = webgpu_desc->hasResolveTarget()
                                 ? webgpu_desc->resolveTarget()->GetHandle()
@@ -88,10 +84,6 @@
   DCHECK(webgpu_desc);
 
   WGPURenderPassDepthStencilAttachment dawn_desc = {};
-  // TODO(dawn:1269): Remove after the deprecation period.
-  // clearDepth needs to be set to NaN to signal that it is not in use.
-  dawn_desc.clearDepth = NAN;
-
   dawn_desc.view = webgpu_desc->view()->GetHandle();
 
   if (webgpu_desc->hasDepthLoadOp()) {
diff --git a/third_party/blink/renderer/platform/exported/web_url_response.cc b/third_party/blink/renderer/platform/exported/web_url_response.cc
index 3970501..d4a7613 100644
--- a/third_party/blink/renderer/platform/exported/web_url_response.cc
+++ b/third_party/blink/renderer/platform/exported/web_url_response.cc
@@ -38,6 +38,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "net/ssl/ssl_info.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "services/network/public/mojom/ip_address_space.mojom-shared.h"
 #include "services/network/public/mojom/load_timing_info.mojom.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
@@ -199,6 +200,7 @@
   response.SetWasCookieInRequest(head.was_cookie_in_request);
   response.SetRecursivePrefetchToken(head.recursive_prefetch_token);
   response.SetWebBundleURL(KURL(head.web_bundle_url));
+  response.SetTriggerAttestation(head.trigger_attestation);
 
   SetSecurityStyleAndDetails(GURL(KURL(url)), head, &response,
                              report_security_info);
@@ -340,6 +342,11 @@
   resource_response_->SetResourceLoadTiming(std::move(timing));
 }
 
+void WebURLResponse::SetTriggerAttestation(
+    const absl::optional<network::TriggerAttestation>& trigger_attestation) {
+  resource_response_->SetTriggerAttestation(trigger_attestation);
+}
+
 base::Time WebURLResponse::ResponseTime() const {
   return resource_response_->ResponseTime();
 }
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_response.h b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
index 798fb44..2bf84919 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_response.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
@@ -34,6 +34,7 @@
 #include "base/time/time.h"
 #include "net/base/ip_endpoint.h"
 #include "net/ssl/ssl_info.h"
+#include "services/network/public/cpp/trigger_attestation.h"
 #include "services/network/public/mojom/alternate_protocol_usage.mojom-shared.h"
 #include "services/network/public/mojom/cross_origin_embedder_policy.mojom-shared.h"
 #include "services/network/public/mojom/fetch_api.mojom-shared.h"
@@ -296,6 +297,15 @@
     remote_ip_endpoint_ = value;
   }
 
+  const absl::optional<network::TriggerAttestation>& GetTriggerAttestation()
+      const {
+    return trigger_attestation_;
+  }
+  void SetTriggerAttestation(
+      const absl::optional<network::TriggerAttestation>& value) {
+    trigger_attestation_ = value;
+  }
+
   network::mojom::IPAddressSpace AddressSpace() const { return address_space_; }
   void SetAddressSpace(network::mojom::IPAddressSpace value) {
     address_space_ = value;
@@ -638,6 +648,8 @@
   absl::optional<net::AuthChallengeInfo> auth_challenge_info_;
 
   bool emitted_extra_info_ = false;
+
+  absl::optional<network::TriggerAttestation> trigger_attestation_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 32c27b3..be0ba1d3 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -6367,6 +6367,8 @@
 crbug.com/1411486 [ Mac ] external/wpt/storage-access-api/storage-access-permission.sub.https.window.html [ Failure ]
 crbug.com/1229708 [ Debug Linux ] fast/events/pointerevents/pointer-event-in-slop-region.html [ Failure ]
 crbug.com/1412477 [ Mac ] editing/spelling/cold_mode_no_leak_detached_node.html [ Failure ]
+crbug.com/1412469 [ Mac ] http/tests/serviceworker/navigation_preload/navigation-preload-resource-timing.html [ Failure ]
+crbug.com/1412469 [ Debug Linux ] http/tests/serviceworker/navigation_preload/navigation-preload-resource-timing.html [ Failure ]
 
 # Sheriff 2022-10-07
 crbug.com/1372556 [ Linux ] external/wpt/css/css-text/text-transform/text-transform-capitalize-* [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 9d6d34c..1a5f490 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -211,7 +211,9 @@
               "inspector-protocol/dom-snapshot",
               "media/stable",
               "webexposed",
-              "compositing/filters"],
+              "compositing/filters",
+              "external/wpt/performance-timeline/tentative/with-filter-options-originA.html"
+            ],
     "exclusive_tests": ["media/stable"],
     "args": ["--stable-release-mode",
              "--disable-auto-wpt-origin-isolation",
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming-ref.html
index df5eaac..a7d5e56d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming-ref.html
@@ -15,7 +15,6 @@
   background: blue;
 }
 .shared {
-  contain: layout;
   width: 100px;
   height: 100px;
 }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming.html
index 0a04971..01debbc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-incoming.html
@@ -25,7 +25,6 @@
 }
 .shared {
   view-transition-name: shared;
-  contain: layout;
   width: 100px;
   height: 100px;
 }
@@ -34,7 +33,6 @@
   width: 10px;
   height: 10px;
   background: red;
-  contain: layout;
 }
 
 ::view-transition-group(hidden) { animation-duration: 300s; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing-ref.html
index eede1314..393943e3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing-ref.html
@@ -9,7 +9,6 @@
   background: green;
 }
 .shared {
-  contain: layout;
   width: 100px;
   height: 100px;
 }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing.html
index 5cf83e4..1cf74c8f 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/3d-transform-outgoing.html
@@ -26,7 +26,6 @@
 }
 .shared {
   view-transition-name: shared;
-  contain: layout;
   width: 100px;
   height: 100px;
 }
@@ -35,7 +34,6 @@
   width: 10px;
   height: 10px;
   background: red;
-  contain: layout;
 }
 
 ::view-transition-group(hidden) { animation-duration: 300s; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order-ref.html
index 53f6b380..780d5fbd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order-ref.html
@@ -5,7 +5,6 @@
 
 <style>
 div {
-  contain: layout;
   position: absolute;
   top: 50px;
   width: 100px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order.html
index ee1d260e..c0e8769 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/css-tags-paint-order.html
@@ -7,7 +7,6 @@
 
 <script src="/common/reftest-wait.js"></script>
 <style>
-div { contain: layout; }
 #one {
   background: green;
   width: 100px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
index 0473209..91c2277 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
@@ -17,8 +17,6 @@
   padding: 0;
 
   view-transition-name: dialog;
-  contain: layout;
-
   outline: none;
 }
 
@@ -28,7 +26,6 @@
   background: grey;
 
   view-transition-name: backdrop;
-  contain: layout;
 }
 
 .hidden {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
index 3634f65d..406bdac 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
@@ -17,8 +17,6 @@
   padding: 0;
 
   view-transition-name: dialog;
-  contain: layout;
-
   outline: none;
 }
 
@@ -28,7 +26,6 @@
   background: grey;
 
   view-transition-name: backdrop;
-  contain: layout;
 }
 
 .hidden {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/element-with-overflow.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/element-with-overflow.html
index b600bce..678e0a0 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/element-with-overflow.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/element-with-overflow.html
@@ -12,14 +12,12 @@
     height: 10px;
     view-transition-name: hidden;
     background: green;
-    contain: layout;
   }
 
   .target {
     width: 100px;
     height: 100px;
     background: lightblue;
-    contain: layout;
     view-transition-name: target;
   }
   .inner {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-new.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-new.html
new file mode 100644
index 0000000..8a552b0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-new.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: element with fixed position descendant</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+<link rel="match" href="named-element-with-fix-pos-child-ref.html">
+<script src="/common/reftest-wait.js"></script>
+<style>
+.target {
+  width: 100px;
+  height: 100px;
+  background: blue;
+  view-transition-name: target;
+}
+.child {
+  width: 100px;
+  height: 100px;
+  position: fixed;
+  top: 150px;
+  left: 150px;
+  background: grey;
+}
+
+html::view-transition-group(target) { animation-duration: 300s; }
+html::view-transition-old(target) { animation: unset; opacity: 0; }
+html::view-transition-new(target) {
+  animation: unset;
+  opacity: 1;
+}
+</style>
+
+<div class=target>
+  <div class=child></div>
+</div>
+
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+async function runTest() {
+  document.startViewTransition(() =>
+    requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-old.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-old.html
new file mode 100644
index 0000000..a8211f42
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-old.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: element with fixed position descendant</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+<link rel="match" href="named-element-with-fix-pos-child-ref.html">
+<script src="/common/reftest-wait.js"></script>
+<style>
+.target {
+  width: 100px;
+  height: 100px;
+  background: blue;
+  view-transition-name: target;
+}
+.child {
+  width: 100px;
+  height: 100px;
+  position: fixed;
+  top: 150px;
+  left: 150px;
+  background: grey;
+}
+
+html::view-transition-group(target) { animation-duration: 300s; }
+html::view-transition-new(target) { animation: unset; opacity: 0; }
+html::view-transition-old(target) {
+  animation: unset;
+  opacity: 1;
+}
+</style>
+
+<div class=target>
+  <div class=child></div>
+</div>
+
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+async function runTest() {
+  document.startViewTransition(() =>
+    requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-ref.html
new file mode 100644
index 0000000..c1159f8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/named-element-with-fix-pos-child-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<title>View transitions: element with fixed position descendant (ref)</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+<style>
+.target {
+  width: 100px;
+  height: 100px;
+  background: blue;
+  view-transition-name: target;
+}
+.child {
+  width: 100px;
+  height: 100px;
+  position: fixed;
+  top: 150px;
+  left: 150px;
+  background: grey;
+}
+</style>
+
+<div class=target>
+  <div class=child></div>
+</div>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-element-writing-modes.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-element-writing-modes.html
index 84b6fcf5..d7740d78 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-element-writing-modes.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-element-writing-modes.html
@@ -27,9 +27,6 @@
   contain: paint;
   border: 1px solid black;
 }
-.source {
-  contain: layout;
-}
 #target {
   background: red;
   position: absolute;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-fill.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-fill.html
index 28652830..b891eee 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-fill.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-fill.html
@@ -29,7 +29,6 @@
   width: 10px;
   height: 10px;
   view-transition-name: hidden;
-  contain: layout;
 }
 
 html::view-transition-group(target) {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-none.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-none.html
index cad8366..d4b81b1a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-none.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/new-content-object-fit-none.html
@@ -21,7 +21,6 @@
   width: 10px;
   height: 10px;
   view-transition-name: hidden;
-  contain: layout;
 }
 
 html::view-transition-group(target) {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element-mid-transition.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
deleted file mode 100644
index dc5ede4..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>View transitions: transition skipped if no containment on new element after animation started</title>
-<link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
-<link rel="author" href="mailto:khushalsagar@chromium.org">
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<style>
-div {
-  width: 100px;
-  height: 100px;
-  background: blue;
-  view-transition-name: target;
-  contain: paint;
-}
-
-html::view-transition-group(target) {
-  animation-duration: 300s;
-}
-</style>
-
-<div id=first></div>
-
-<script>
-promise_test(async t => {
-  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
-  return new Promise(async (resolve, reject) => {
-    let transition = document.startViewTransition();
-    await transition.updateCallbackDone;
-    await transition.ready;
-
-    transition.finished.then(resolve, reject);
-    first.style.contain = "none";
-  });
-}, "new element becoming uncontained should skip the transition");
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element-mid-transition.html.ini b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element-mid-transition.html.ini
deleted file mode 100644
index 3501cc7..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element-mid-transition.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[no-containment-on-new-element-mid-transition.html]
-  expected:
-    if (processor == "x86_64") and (os == "linux") and (version == "Ubuntu 18.04"): TIMEOUT
-    if (processor == "x86_64") and (os == "win"): TIMEOUT
-  [new element becoming uncontained should skip the transition]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element.html
deleted file mode 100644
index 57f14830..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>View transitions: transition skipped if no containment on new element</title>
-<link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
-<link rel="author" href="mailto:khushalsagar@chromium.org">
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<style>
-div {
-  width: 100px;
-  height: 100px;
-  background: blue;
-  view-transition-name: target;
-  contain: paint;
-}
-</style>
-
-<div id=first></div>
-
-<script>
-promise_test(async t => {
-  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
-  return new Promise(async (resolve, reject) => {
-    let transition = document.startViewTransition(() => {
-      first.style.contain = "none";
-    });
-
-    let readyRejected = false;
-    transition.ready.then(reject, () => { readyRejected = true; });
-
-    let updateCallbackDone = false;
-    transition.updateCallbackDone.then(() => { updateCallbackDone = true; }, reject);
-    transition.finished.then(() => {
-      assert_true(readyRejected, "ready not rejected");
-      assert_true(updateCallbackDone, "dom not updated");
-
-      if (window.getComputedStyle(first).contain == "none")
-        resolve();
-      else
-        reject("dom update callback did not run");
-
-    }, reject);
-  });
-}, "uncontained new element should skip the transition");
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element.html.ini b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element.html.ini
deleted file mode 100644
index a188f1c..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-new-element.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[no-containment-on-new-element.html]
-  expected:
-    if (processor == "x86_64") and (os == "linux") and (version == "Ubuntu 18.04"): TIMEOUT
-    if (processor == "x86_64") and (os == "win"): TIMEOUT
-  [uncontained new element should skip the transition]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-old-element.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-old-element.html
deleted file mode 100644
index b0af95b..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-old-element.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>View transitions: transition skipped if no containment on old element</title>
-<link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
-<link rel="author" href="mailto:khushalsagar@chromium.org">
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<style>
-div {
-  width: 100px;
-  height: 100px;
-  background: blue;
-  view-transition-name: target;
-}
-</style>
-
-<div id=first></div>
-
-<script>
-promise_test(async t => {
-  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
-  return new Promise(async (resolve, reject) => {
-    let transition = document.startViewTransition(() => {
-      first.style.contain = "paint";
-    });
-
-    let readyRejected = false;
-    transition.ready.then(reject, () => { readyRejected = true; });
-
-    let updateCallbackDone = false;
-    transition.updateCallbackDone.then(() => { updateCallbackDone = true; }, reject);
-    transition.finished.then(() => {
-      assert_true(readyRejected, "ready not rejected");
-      assert_true(updateCallbackDone, "dom not updated");
-
-      if (window.getComputedStyle(first).contain == "paint")
-        resolve();
-      else
-        reject("dom update callback did not run");
-
-    }, reject);
-  });
-}, "uncontained old element should skip the transition");
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-old-element.html.ini b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-old-element.html.ini
deleted file mode 100644
index 4ac5cb6..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/no-containment-on-old-element.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[no-containment-on-old-element.html]
-  [uncontained old element should skip the transition]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-fill.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-fill.html
index 9a660266..9ad8b14 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-fill.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-fill.html
@@ -29,7 +29,6 @@
   width: 10px;
   height: 10px;
   view-transition-name: hidden;
-  contain: layout;
 }
 
 html::view-transition-group(target) {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-none.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-none.html
index 115fd06..1275aece7c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-none.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/old-content-object-fit-none.html
@@ -21,7 +21,6 @@
   width: 10px;
   height: 10px;
   view-transition-name: hidden;
-  contain: layout;
 }
 
 html::view-transition-group(target) {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-group.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-group.html
index c3e9d669..665befe 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-group.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-group.html
@@ -44,9 +44,6 @@
   color: red;
 }
 
-div {
-  contain: layout;
-}
 </style>
 <div id="target"></div>
 <div id="target2"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-new.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-new.html
index 62328f2..a03e045 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-new.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-new.html
@@ -44,10 +44,6 @@
   color: red;
 }
 
-#target {
-  contain: layout;
-}
-
 </style>
 <div id="target"></div>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-old.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-old.html
index 56dfa16..79fb26c6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-old.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/only-child-old.html
@@ -44,10 +44,6 @@
   color: red;
 }
 
-#target {
-  contain: layout;
-}
-
 </style>
 <div id="target"></div>
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/paused-animation-at-end.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/paused-animation-at-end.html
index 47db0a6f..ae9176ea 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/paused-animation-at-end.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/paused-animation-at-end.html
@@ -11,7 +11,6 @@
 #target {
   width: 100px;
   height: 100px;
-  contain: layout;
   view-transition-name: target;
 }
 .one {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos-ref.html
index fd84030f..ed118e6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos-ref.html
@@ -5,7 +5,6 @@
 
 <style>
 #target {
-  contain: layout;
   width: 200px;
   height: 200px;
   background: yellow;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos.html
index 952a267..6c5b16d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-abspos.html
@@ -9,7 +9,6 @@
 
 <style>
 #target {
-  contain: layout;
   view-transition-name: target;
   width: 200px;
   height: 200px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-ref.html
index be7e69ac..4ff2b2c5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child-ref.html
@@ -5,7 +5,6 @@
 
 <style>
 #target {
-  contain: layout;
   width: 500px;
   height: 500px;
   background: yellow;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child.html
index 2c8a0c4..72b405d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-child.html
@@ -9,7 +9,6 @@
 
 <style>
 #target {
-  contain: layout;
   view-transition-name: target;
   width: 500px;
   height: 500px;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-ref.html
index 9a764e74..27a2329ee 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller-ref.html
@@ -9,7 +9,6 @@
   width: 100px;
   height: 100px;
   background: blue;
-  contain: layout;
 }
 
 #child {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller.html
index ecc413b..c86fce2 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/scroller.html
@@ -13,7 +13,6 @@
   width: 100px;
   height: 100px;
   background: blue;
-  contain: layout;
   view-transition-name: target;
 }
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-ref.html
index 2cf8742..9cf41ec 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-ref.html
@@ -6,7 +6,6 @@
 .target {
   width: 100px;
   height: 100px;
-  contain: layout;
   background: blue;
   opacity: 0.5;
 }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform-ref.html
index 2e977ce..556d3f5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform-ref.html
@@ -13,7 +13,6 @@
 #target {
   width: 100px;
   height: 100px;
-  contain: layout;
   background: blue;
   view-transition-name: target;
   position: relative;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform.html
index 9958a0b..41e3d3f 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time-transform.html
@@ -10,7 +10,6 @@
 #target {
   width: 100px;
   height: 100px;
-  contain: layout;
   background: blue;
   view-transition-name: target;
   position: relative;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html
index 4047623..2e37626a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html
@@ -11,7 +11,6 @@
 .target {
   width: 100px;
   height: 100px;
-  contain: layout;
   background: blue;
   view-transition-name: target;
 }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/view-transition-name-on-added-element.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/view-transition-name-on-added-element.html
deleted file mode 100644
index 643121e..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/view-transition-name-on-added-element.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>View transitions: ensures view-transition-name is tracked on element added by script</title>
-<link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
-<link rel="author" href="mailto:khushalsagar@chromium.org">
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<style>
-#first {
-  width: 100px;
-  height: 100px;
-  background: blue;
-  view-transition-name: first;
-}
-</style>
-<body>
-  <div>
-    <div id=first></div>
-  </div>
-</body>
-<script>
-promise_test(async t => {
-  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
-  return new Promise((resolve, reject) => {
-    // Remove and add an uncontained element. Even though this element doesn't
-    // create a stacking context its verified during the transition.
-    const element = document.getElementById("first");
-    element.remove();
-    document.body.appendChild(element);
-
-    let transition = document.startViewTransition();
-    transition.ready.then(reject, resolve);
-  });
-}, "view-transition-name on an element added by script should be visited when discovering named elements");
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/performance-timeline/tentative/with-filter-options-originA.html b/third_party/blink/web_tests/external/wpt/performance-timeline/tentative/with-filter-options-originA.html
new file mode 100644
index 0000000..6c6643d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/performance-timeline/tentative/with-filter-options-originA.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+
+<head>
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+</head>
+
+<body>
+  <script>
+    promise_test(async () => {
+      performance.clearResourceTimings();
+
+      performance.mark('entry-name');
+
+      const navigationEntries = performance.getEntries({ entryType: 'navigation' });
+
+      const markedEntries = performance.getEntries(
+        { name: 'entry-name', entryType: 'mark' });
+
+      assert_equals(navigationEntries.length, 1, 'navigationEntries should be 1.');
+
+      assert_equals(markedEntries.length, 1, 'markedEntries should be 1.');
+
+    }, 'GetEntries with filter options.');
+  </script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html b/third_party/blink/web_tests/external/wpt/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html
index ad09b7b..4925850 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html
@@ -5,6 +5,7 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="/webrtc/dictionary-helper.js"></script>
 <script src="/webrtc/RTCRtpParameters-helper.js"></script>
+<script src="/webrtc/third_party/sdp/sdp.js"></script>
 <script>
 'use strict';
 
@@ -208,4 +209,34 @@
   }
 }, `the set of negotiated extensions is the set of unstopped extensions`);
 
+promise_test(async t => {
+  const pc = new RTCPeerConnection();
+  t.add_cleanup(() => pc.close());
+
+  const t1 = pc.addTransceiver('video');
+  const t2 = pc.addTransceiver('video');
+  const extensionUri = 'urn:3gpp:video-orientation';
+
+  assert_true(!!t1.headerExtensionsToOffer.find(ext => ext.uri === extensionUri));
+  const ext1 = t1.headerExtensionsToOffer;
+  ext1.find(ext => ext.uri === extensionUri).direction = 'stopped';
+  t1.setOfferedRtpHeaderExtensions(ext1);
+
+  assert_true(!!t2.headerExtensionsToOffer.find(ext => ext.uri === extensionUri));
+  const ext2 = t2.headerExtensionsToOffer;
+  ext2.find(ext => ext.uri === extensionUri).direction = 'sendrecv';
+  t2.setOfferedRtpHeaderExtensions(ext2);
+
+  const offer = await pc.createOffer();
+  const sections = SDPUtils.splitSections(offer.sdp);
+  sections.shift();
+  const extensions = sections.map(section => {
+    return SDPUtils.matchPrefix(section, 'a=extmap:')
+      .map(SDPUtils.parseExtmap);
+  });
+  assert_equals(extensions.length, 2);
+  assert_false(!!extensions[0].find(extension => extension.uri === extensionUri));
+  assert_true(!!extensions[1].find(extension => extension.uri === extensionUri));
+}, 'Extensions can be deactivated on a per-mline basis');
+
 </script>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/trust-tokens/clear-trust-tokens-invalid-issuer-origin.js b/third_party/blink/web_tests/http/tests/inspector-protocol/trust-tokens/clear-trust-tokens-invalid-issuer-origin.js
new file mode 100644
index 0000000..e209f2b0
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/trust-tokens/clear-trust-tokens-invalid-issuer-origin.js
@@ -0,0 +1,14 @@
+(async function(testRunner) {
+  const {dp} = await testRunner.startBlank(
+    `Check that calling Storage.clearTrustTokens with an invalid issuerOrigin produces an error`);
+
+  testRunner.expectedSuccess(
+      'Storage.clearTrustTokens with valid origin',
+      await dp.Storage.clearTrustTokens({issuerOrigin: 'https://example.org'}));
+
+  testRunner.expectedError(
+      'Storage.clearTrustTokens with invalid origin',
+      await dp.Storage.clearTrustTokens({issuerOrigin: 'ws://example.org'}));
+
+  testRunner.completeTest();
+})
diff --git a/third_party/blink/web_tests/virtual/stable/external/wpt/performance-timeline/tentative/with-filter-options-originA-expected.txt b/third_party/blink/web_tests/virtual/stable/external/wpt/performance-timeline/tentative/with-filter-options-originA-expected.txt
new file mode 100644
index 0000000..792a8f46
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/stable/external/wpt/performance-timeline/tentative/with-filter-options-originA-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL GetEntries with filter options. assert_equals: navigationEntries should be 1. expected 1 but got 2
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/trust-tokens/http/tests/inspector-protocol/trust-tokens/clear-trust-tokens-invalid-issuer-origin-expected.txt b/third_party/blink/web_tests/virtual/trust-tokens/http/tests/inspector-protocol/trust-tokens/clear-trust-tokens-invalid-issuer-origin-expected.txt
new file mode 100644
index 0000000..6944e3c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/trust-tokens/http/tests/inspector-protocol/trust-tokens/clear-trust-tokens-invalid-issuer-origin-expected.txt
@@ -0,0 +1,4 @@
+Check that calling Storage.clearTrustTokens with an invalid issuerOrigin produces an error
+PASS: Storage.clearTrustTokens with valid origin
+PASS: Storage.clearTrustTokens with invalid origin
+
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h
index 43307442..2080131 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.h
@@ -53,6 +53,13 @@
 

 /* Forward Declarations */ 

 

+#ifndef __IAppVersionWeb_FWD_DEFINED__

+#define __IAppVersionWeb_FWD_DEFINED__

+typedef interface IAppVersionWeb IAppVersionWeb;

+

+#endif 	/* __IAppVersionWeb_FWD_DEFINED__ */

+

+

 #ifndef __ICurrentState_FWD_DEFINED__

 #define __ICurrentState_FWD_DEFINED__

 typedef interface ICurrentState ICurrentState;

@@ -202,6 +209,13 @@
 #endif 	/* __ProcessLauncherClass_FWD_DEFINED__ */

 

 

+#ifndef __IAppVersionWeb_FWD_DEFINED__

+#define __IAppVersionWeb_FWD_DEFINED__

+typedef interface IAppVersionWeb IAppVersionWeb;

+

+#endif 	/* __IAppVersionWeb_FWD_DEFINED__ */

+

+

 #ifndef __ICurrentState_FWD_DEFINED__

 #define __ICurrentState_FWD_DEFINED__

 typedef interface ICurrentState ICurrentState;

@@ -326,6 +340,168 @@
 extern RPC_IF_HANDLE __MIDL_itf_updater_legacy_idl_0000_0000_v0_0_c_ifspec;

 extern RPC_IF_HANDLE __MIDL_itf_updater_legacy_idl_0000_0000_v0_0_s_ifspec;

 

+#ifndef __IAppVersionWeb_INTERFACE_DEFINED__

+#define __IAppVersionWeb_INTERFACE_DEFINED__

+

+/* interface IAppVersionWeb */

+/* [unique][helpstring][uuid][dual][object] */ 

+

+

+EXTERN_C const IID IID_IAppVersionWeb;

+

+#if defined(__cplusplus) && !defined(CINTERFACE)

+    

+    MIDL_INTERFACE("AA10D17D-7A09-48AC-B1E4-F124937E3D26")

+    IAppVersionWeb : public IDispatch

+    {

+    public:

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_version( 

+            /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000) = 0;

+        

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageCount( 

+            /* [retval][out] */ long *count) = 0;

+        

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageWeb( 

+            /* [in] */ long index,

+            /* [retval][out] */ IDispatch **package) = 0;

+        

+    };

+    

+    

+#else 	/* C style interface */

+

+    typedef struct IAppVersionWebVtbl

+    {

+        BEGIN_INTERFACE

+        

+        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)

+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 

+            IAppVersionWeb * This,

+            /* [in] */ REFIID riid,

+            /* [annotation][iid_is][out] */ 

+            _COM_Outptr_  void **ppvObject);

+        

+        DECLSPEC_XFGVIRT(IUnknown, AddRef)

+        ULONG ( STDMETHODCALLTYPE *AddRef )( 

+            IAppVersionWeb * This);

+        

+        DECLSPEC_XFGVIRT(IUnknown, Release)

+        ULONG ( STDMETHODCALLTYPE *Release )( 

+            IAppVersionWeb * This);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetTypeInfoCount)

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 

+            IAppVersionWeb * This,

+            /* [out] */ UINT *pctinfo);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetTypeInfo)

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 

+            IAppVersionWeb * This,

+            /* [in] */ UINT iTInfo,

+            /* [in] */ LCID lcid,

+            /* [out] */ ITypeInfo **ppTInfo);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetIDsOfNames)

+        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 

+            IAppVersionWeb * This,

+            /* [in] */ REFIID riid,

+            /* [size_is][in] */ LPOLESTR *rgszNames,

+            /* [range][in] */ UINT cNames,

+            /* [in] */ LCID lcid,

+            /* [size_is][out] */ DISPID *rgDispId);

+        

+        DECLSPEC_XFGVIRT(IDispatch, Invoke)

+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 

+            IAppVersionWeb * This,

+            /* [annotation][in] */ 

+            _In_  DISPID dispIdMember,

+            /* [annotation][in] */ 

+            _In_  REFIID riid,

+            /* [annotation][in] */ 

+            _In_  LCID lcid,

+            /* [annotation][in] */ 

+            _In_  WORD wFlags,

+            /* [annotation][out][in] */ 

+            _In_  DISPPARAMS *pDispParams,

+            /* [annotation][out] */ 

+            _Out_opt_  VARIANT *pVarResult,

+            /* [annotation][out] */ 

+            _Out_opt_  EXCEPINFO *pExcepInfo,

+            /* [annotation][out] */ 

+            _Out_opt_  UINT *puArgErr);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_version)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_version )( 

+            IAppVersionWeb * This,

+            /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_packageCount)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageCount )( 

+            IAppVersionWeb * This,

+            /* [retval][out] */ long *count);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_packageWeb)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageWeb )( 

+            IAppVersionWeb * This,

+            /* [in] */ long index,

+            /* [retval][out] */ IDispatch **package);

+        

+        END_INTERFACE

+    } IAppVersionWebVtbl;

+

+    interface IAppVersionWeb

+    {

+        CONST_VTBL struct IAppVersionWebVtbl *lpVtbl;

+    };

+

+    

+

+#ifdef COBJMACROS

+

+

+#define IAppVersionWeb_QueryInterface(This,riid,ppvObject)	\

+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

+

+#define IAppVersionWeb_AddRef(This)	\

+    ( (This)->lpVtbl -> AddRef(This) ) 

+

+#define IAppVersionWeb_Release(This)	\

+    ( (This)->lpVtbl -> Release(This) ) 

+

+

+#define IAppVersionWeb_GetTypeInfoCount(This,pctinfo)	\

+    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) 

+

+#define IAppVersionWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\

+    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) 

+

+#define IAppVersionWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\

+    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) 

+

+#define IAppVersionWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\

+    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) 

+

+

+#define IAppVersionWeb_get_version(This,__MIDL__IAppVersionWeb0000)	\

+    ( (This)->lpVtbl -> get_version(This,__MIDL__IAppVersionWeb0000) ) 

+

+#define IAppVersionWeb_get_packageCount(This,count)	\

+    ( (This)->lpVtbl -> get_packageCount(This,count) ) 

+

+#define IAppVersionWeb_get_packageWeb(This,index,package)	\

+    ( (This)->lpVtbl -> get_packageWeb(This,index,package) ) 

+

+#endif /* COBJMACROS */

+

+

+#endif 	/* C style interface */

+

+

+

+

+#endif 	/* __IAppVersionWeb_INTERFACE_DEFINED__ */

+

+

 #ifndef __ICurrentState_INTERFACE_DEFINED__

 #define __ICurrentState_INTERFACE_DEFINED__

 

@@ -2767,6 +2943,7 @@
 

 

 

+

 EXTERN_C const IID LIBID_UpdaterLegacyLib;

 

 EXTERN_C const CLSID CLSID_GoogleUpdate3WebUserClass;

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb
index 4313862..0883ce1 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl.tlb
Binary files differ
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c
index 37068aa..c6d58d2 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_i.c
@@ -67,6 +67,9 @@
 

 #endif // !_MIDL_USE_GUIDDEF_

 

+MIDL_DEFINE_GUID(IID, IID_IAppVersionWeb,0xAA10D17D,0x7A09,0x48AC,0xB1,0xE4,0xF1,0x24,0x93,0x7E,0x3D,0x26);

+

+

 MIDL_DEFINE_GUID(IID, IID_ICurrentState,0xA643508B,0xB1E3,0x4457,0x97,0x69,0x32,0xC9,0x53,0xBD,0x1D,0x57);

 

 

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_p.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_p.c
index 290e260..25a83f9 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_p.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/arm64/updater_legacy_idl_p.c
@@ -47,7 +47,7 @@
 #include "updater_legacy_idl.h"

 

 #define TYPE_FORMAT_STRING_SIZE   1089                              

-#define PROC_FORMAT_STRING_SIZE   3205                              

+#define PROC_FORMAT_STRING_SIZE   3253                              

 #define EXPR_FORMAT_STRING_SIZE   1                                 

 #define TRANSMIT_AS_TABLE_SIZE    0            

 #define WIRE_MARSHAL_TABLE_SIZE   2            

@@ -135,6 +135,13 @@
 extern const MIDL_STUB_DESC Object_StubDesc;

 

 

+extern const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo;

+extern const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo;

+

+

+extern const MIDL_STUB_DESC Object_StubDesc;

+

+

 extern const MIDL_SERVER_INFO ICurrentState_ServerInfo;

 extern const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo;

 

@@ -220,13 +227,16 @@
         0,

         {

 

-	/* Procedure get_lastCheckPeriodMinutes */

+	/* Procedure get_updaterVersion */

 

 

-	/* Procedure get_status */

+	/* Procedure get_source */

 

 

-	/* Procedure get_stateValue */

+	/* Procedure get_appId */

+

+

+	/* Procedure get_version */

 

 			0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

@@ -234,12 +244,12 @@
 /*  6 */	NdrFcShort( 0x7 ),	/* 7 */

 /*  8 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

 /* 10 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 12 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 14 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 12 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 14 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

 /* 16 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 18 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 18 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 20 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 22 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 24 */	NdrFcShort( 0x2 ),	/* 2 */

@@ -248,18 +258,23 @@
 /* 28 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

-	/* Parameter minutes */

+	/* Parameter version */

 

 

-	/* Parameter __MIDL__IAppCommandWeb0000 */

+	/* Parameter __MIDL__IPolicyStatusValue0000 */

 

 

-	/* Parameter __MIDL__ICurrentState0000 */

+	/* Parameter __MIDL__IAppWeb0000 */

 

-/* 30 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Parameter __MIDL__IAppVersionWeb0000 */

+

+/* 30 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 32 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 34 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 34 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

 

 	/* Return value */

 

@@ -274,10 +289,10 @@
 /* 40 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_value */

+	/* Procedure get_exitCode */

 

 

-	/* Procedure get_availableVersion */

+	/* Procedure get_packageCount */

 

 /* 42 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

@@ -285,12 +300,12 @@
 /* 48 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 50 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

 /* 52 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 54 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 56 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 54 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 56 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

 /* 58 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 60 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 60 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 62 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 64 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 66 */	NdrFcShort( 0x2 ),	/* 2 */

@@ -299,14 +314,15 @@
 /* 70 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

-	/* Parameter __MIDL__IPolicyStatusValue0001 */

+	/* Parameter __MIDL__IAppCommandWeb0001 */

 

 

-	/* Parameter __MIDL__ICurrentState0001 */

+	/* Parameter count */

 

-/* 72 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 72 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 74 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 76 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 76 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -318,40 +334,180 @@
 /* 82 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_bytesDownloaded */

+	/* Procedure get_packageWeb */

 

 /* 84 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 86 */	NdrFcLong( 0x0 ),	/* 0 */

 /* 90 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 92 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 94 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 96 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 98 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 92 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 94 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 96 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 98 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 100 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 102 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 104 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 106 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 108 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 110 */	0x2,		/* 2 */

+/* 108 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 110 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 112 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

-	/* Parameter __MIDL__ICurrentState0002 */

+	/* Parameter index */

 

-/* 114 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 114 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 116 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 118 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter package */

+

+/* 120 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 122 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 124 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

 	/* Return value */

 

-/* 120 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 122 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 124 */	0x8,		/* FC_LONG */

+/* 126 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 128 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 130 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_lastCheckPeriodMinutes */

+

+

+	/* Procedure get_status */

+

+

+	/* Procedure get_stateValue */

+

+/* 132 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 134 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 138 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 140 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 144 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 146 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 148 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 150 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 152 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 154 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 156 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 158 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 160 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter minutes */

+

+

+	/* Parameter __MIDL__IAppCommandWeb0000 */

+

+

+	/* Parameter __MIDL__ICurrentState0000 */

+

+/* 162 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 164 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 166 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+

+	/* Return value */

+

+

+	/* Return value */

+

+/* 168 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 170 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 172 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_value */

+

+

+	/* Procedure get_availableVersion */

+

+/* 174 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 176 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 180 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 182 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 184 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 186 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 188 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 190 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 192 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 194 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 196 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 198 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 200 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 202 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter __MIDL__IPolicyStatusValue0001 */

+

+

+	/* Parameter __MIDL__ICurrentState0001 */

+

+/* 204 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 206 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 208 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+

+	/* Return value */

+

+/* 210 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 212 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 214 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_bytesDownloaded */

+

+/* 216 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 218 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 222 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 224 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 226 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 228 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 230 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 232 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 234 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 236 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 238 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 240 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 242 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 244 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter __MIDL__ICurrentState0002 */

+

+/* 246 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 248 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 250 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 252 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 254 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 256 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheSizeLimitMBytes */

@@ -359,24 +515,24 @@
 

 	/* Procedure get_totalBytesToDownload */

 

-/* 126 */	0x33,		/* FC_AUTO_HANDLE */

+/* 258 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 128 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 132 */	NdrFcShort( 0xa ),	/* 10 */

-/* 134 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 136 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 138 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 140 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 260 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 264 */	NdrFcShort( 0xa ),	/* 10 */

+/* 266 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 268 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 270 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 272 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 142 */	0xe,		/* 14 */

+/* 274 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 144 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 146 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 148 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 150 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 152 */	0x2,		/* 2 */

+/* 276 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 278 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 280 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 282 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 284 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 154 */	0x81,		/* 129 */

+/* 286 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter limit */

@@ -384,9 +540,9 @@
 

 	/* Parameter __MIDL__ICurrentState0003 */

 

-/* 156 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 158 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 160 */	0x8,		/* FC_LONG */

+/* 288 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 290 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 292 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -394,9 +550,9 @@
 

 	/* Return value */

 

-/* 162 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 164 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 166 */	0x8,		/* FC_LONG */

+/* 294 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 296 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 298 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheExpirationTimeDays */

@@ -404,24 +560,24 @@
 

 	/* Procedure get_downloadTimeRemainingMs */

 

-/* 168 */	0x33,		/* FC_AUTO_HANDLE */

+/* 300 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 170 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 174 */	NdrFcShort( 0xb ),	/* 11 */

-/* 176 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 178 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 180 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 182 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 302 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 306 */	NdrFcShort( 0xb ),	/* 11 */

+/* 308 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 312 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 314 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 184 */	0xe,		/* 14 */

+/* 316 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 186 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 188 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 190 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 192 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 194 */	0x2,		/* 2 */

+/* 318 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 320 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 322 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 324 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 326 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 196 */	0x81,		/* 129 */

+/* 328 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter days */

@@ -429,9 +585,9 @@
 

 	/* Parameter __MIDL__ICurrentState0004 */

 

-/* 198 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 200 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 202 */	0x8,		/* FC_LONG */

+/* 330 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 332 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 334 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -439,45 +595,45 @@
 

 	/* Return value */

 

-/* 204 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 206 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 208 */	0x8,		/* FC_LONG */

+/* 336 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 338 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 340 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nextRetryTime */

 

-/* 210 */	0x33,		/* FC_AUTO_HANDLE */

+/* 342 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 212 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 216 */	NdrFcShort( 0xc ),	/* 12 */

-/* 218 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 220 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 222 */	NdrFcShort( 0x2c ),	/* 44 */

-/* 224 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 344 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 348 */	NdrFcShort( 0xc ),	/* 12 */

+/* 350 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 352 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 354 */	NdrFcShort( 0x2c ),	/* 44 */

+/* 356 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 226 */	0xe,		/* 14 */

+/* 358 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 228 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 230 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 232 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 234 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 236 */	0x2,		/* 2 */

+/* 360 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 362 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 364 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 366 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 368 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 238 */	0x81,		/* 129 */

+/* 370 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0005 */

 

-/* 240 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 242 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 244 */	0xb,		/* FC_HYPER */

+/* 372 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 374 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 376 */	0xb,		/* FC_HYPER */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 246 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 248 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 250 */	0x8,		/* FC_LONG */

+/* 378 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 380 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 382 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_length */

@@ -485,24 +641,24 @@
 

 	/* Procedure get_installProgress */

 

-/* 252 */	0x33,		/* FC_AUTO_HANDLE */

+/* 384 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 254 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 258 */	NdrFcShort( 0xd ),	/* 13 */

-/* 260 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 262 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 264 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 266 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 386 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 390 */	NdrFcShort( 0xd ),	/* 13 */

+/* 392 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 394 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 396 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 398 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 268 */	0xe,		/* 14 */

+/* 400 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 270 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 272 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 274 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 276 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 278 */	0x2,		/* 2 */

+/* 402 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 404 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 406 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 408 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 410 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 280 */	0x81,		/* 129 */

+/* 412 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter index */

@@ -510,9 +666,9 @@
 

 	/* Parameter __MIDL__ICurrentState0006 */

 

-/* 282 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 284 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 286 */	0x8,		/* FC_LONG */

+/* 414 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 416 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 418 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -520,491 +676,491 @@
 

 	/* Return value */

 

-/* 288 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 290 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 292 */	0x8,		/* FC_LONG */

+/* 420 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 422 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 424 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installTimeRemainingMs */

 

-/* 294 */	0x33,		/* FC_AUTO_HANDLE */

+/* 426 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 296 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 300 */	NdrFcShort( 0xe ),	/* 14 */

-/* 302 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 304 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 306 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 308 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 428 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 432 */	NdrFcShort( 0xe ),	/* 14 */

+/* 434 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 436 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 438 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 440 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 310 */	0xe,		/* 14 */

+/* 442 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 312 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 314 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 316 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 318 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 320 */	0x2,		/* 2 */

+/* 444 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 446 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 448 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 450 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 452 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 322 */	0x81,		/* 129 */

+/* 454 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0007 */

 

-/* 324 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 326 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 328 */	0x8,		/* FC_LONG */

+/* 456 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 458 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 460 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 330 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 332 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 334 */	0x8,		/* FC_LONG */

+/* 462 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 464 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 466 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_isCanceled */

 

-/* 336 */	0x33,		/* FC_AUTO_HANDLE */

+/* 468 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 338 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 342 */	NdrFcShort( 0xf ),	/* 15 */

-/* 344 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 346 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 348 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 350 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 470 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 474 */	NdrFcShort( 0xf ),	/* 15 */

+/* 476 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 478 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 480 */	NdrFcShort( 0x22 ),	/* 34 */

+/* 482 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 352 */	0xe,		/* 14 */

+/* 484 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 354 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 356 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 358 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 360 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 362 */	0x2,		/* 2 */

+/* 486 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 488 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 490 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 492 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 494 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 364 */	0x81,		/* 129 */

+/* 496 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter is_canceled */

 

-/* 366 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 368 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 370 */	0x6,		/* FC_SHORT */

+/* 498 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 500 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 502 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 372 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 374 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 376 */	0x8,		/* FC_LONG */

+/* 504 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 506 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 508 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_errorCode */

 

-/* 378 */	0x33,		/* FC_AUTO_HANDLE */

+/* 510 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 380 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 384 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 386 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 388 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 390 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 392 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 512 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 516 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 518 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 520 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 522 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 524 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 394 */	0xe,		/* 14 */

+/* 526 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 396 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 398 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 400 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 402 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 404 */	0x2,		/* 2 */

+/* 528 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 530 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 532 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 534 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 536 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 406 */	0x81,		/* 129 */

+/* 538 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0008 */

 

-/* 408 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 410 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 412 */	0x8,		/* FC_LONG */

+/* 540 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 542 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 544 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 414 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 416 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 418 */	0x8,		/* FC_LONG */

+/* 546 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 548 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 550 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_extraCode1 */

 

-/* 420 */	0x33,		/* FC_AUTO_HANDLE */

+/* 552 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 422 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 426 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 428 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 430 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 432 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 434 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 554 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 558 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 560 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 562 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 564 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 566 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 436 */	0xe,		/* 14 */

+/* 568 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 438 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 440 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 442 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 444 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 446 */	0x2,		/* 2 */

+/* 570 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 572 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 574 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 576 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 578 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 448 */	0x81,		/* 129 */

+/* 580 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0009 */

 

-/* 450 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 452 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 454 */	0x8,		/* FC_LONG */

+/* 582 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 584 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 586 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 456 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 458 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 460 */	0x8,		/* FC_LONG */

+/* 588 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 590 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 592 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_completionMessage */

 

-/* 462 */	0x33,		/* FC_AUTO_HANDLE */

+/* 594 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 464 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 468 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 470 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 472 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 474 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 476 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 596 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 600 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 602 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 604 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 606 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 608 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 478 */	0xe,		/* 14 */

+/* 610 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 480 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 482 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 484 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 486 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 488 */	0x2,		/* 2 */

+/* 612 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 614 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 616 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 618 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 620 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 490 */	0x81,		/* 129 */

+/* 622 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0010 */

 

-/* 492 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 494 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 496 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 624 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 626 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 628 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 498 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 500 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 502 */	0x8,		/* FC_LONG */

+/* 630 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 632 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 634 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installerResultCode */

 

-/* 504 */	0x33,		/* FC_AUTO_HANDLE */

+/* 636 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 506 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 510 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 512 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 514 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 516 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 518 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 638 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 642 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 644 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 646 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 648 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 650 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 520 */	0xe,		/* 14 */

+/* 652 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 522 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 524 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 526 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 528 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 530 */	0x2,		/* 2 */

+/* 654 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 656 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 658 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 660 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 662 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 532 */	0x81,		/* 129 */

+/* 664 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0011 */

 

-/* 534 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 536 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 538 */	0x8,		/* FC_LONG */

+/* 666 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 668 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 670 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 540 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 542 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 544 */	0x8,		/* FC_LONG */

+/* 672 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 674 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 676 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installerResultExtraCode1 */

 

-/* 546 */	0x33,		/* FC_AUTO_HANDLE */

+/* 678 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 548 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 552 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 554 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 556 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 558 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 560 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 680 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 684 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 686 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 688 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 690 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 692 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 562 */	0xe,		/* 14 */

+/* 694 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 564 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 566 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 568 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 570 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 572 */	0x2,		/* 2 */

+/* 696 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 698 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 700 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 702 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 704 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 574 */	0x81,		/* 129 */

+/* 706 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0012 */

 

-/* 576 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 578 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 580 */	0x8,		/* FC_LONG */

+/* 708 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 710 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 712 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 582 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 584 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 586 */	0x8,		/* FC_LONG */

+/* 714 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 716 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 718 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallLaunchCommandLine */

 

-/* 588 */	0x33,		/* FC_AUTO_HANDLE */

+/* 720 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 590 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 594 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 596 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 598 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 600 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 602 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 722 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 726 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 728 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 730 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 732 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 734 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 604 */	0xe,		/* 14 */

+/* 736 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 606 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 608 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 610 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 612 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 614 */	0x2,		/* 2 */

+/* 738 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 740 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 742 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 744 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 746 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 616 */	0x81,		/* 129 */

+/* 748 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0013 */

 

-/* 618 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 620 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 622 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 750 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 752 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 754 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 624 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 626 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 628 */	0x8,		/* FC_LONG */

+/* 756 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 758 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 760 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallUrl */

 

-/* 630 */	0x33,		/* FC_AUTO_HANDLE */

+/* 762 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 632 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 636 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 638 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 640 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 642 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 644 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 764 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 768 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 770 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 772 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 774 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 776 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 646 */	0xe,		/* 14 */

+/* 778 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 648 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 650 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 652 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 654 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 656 */	0x2,		/* 2 */

+/* 780 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 782 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 784 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 786 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 788 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 658 */	0x81,		/* 129 */

+/* 790 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0014 */

 

-/* 660 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 662 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 664 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 792 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 794 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 796 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 666 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 668 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 670 */	0x8,		/* FC_LONG */

+/* 798 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 800 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 802 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallAction */

 

-/* 672 */	0x33,		/* FC_AUTO_HANDLE */

+/* 804 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 674 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 678 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 680 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 682 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 684 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 686 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 806 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 810 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 812 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 814 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 816 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 818 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 688 */	0xe,		/* 14 */

+/* 820 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 690 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 692 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 694 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 696 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 698 */	0x2,		/* 2 */

+/* 822 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 824 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 826 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 828 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 830 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 700 */	0x81,		/* 129 */

+/* 832 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0015 */

 

-/* 702 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 704 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 706 */	0x8,		/* FC_LONG */

+/* 834 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 836 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 838 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 708 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 710 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 712 */	0x8,		/* FC_LONG */

+/* 840 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 842 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 844 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createAppBundleWeb */

 

-/* 714 */	0x33,		/* FC_AUTO_HANDLE */

+/* 846 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 716 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 720 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 722 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 724 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 726 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 728 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 848 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 852 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 854 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 856 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 858 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 860 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 730 */	0xe,		/* 14 */

+/* 862 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 732 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 734 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 736 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 738 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 740 */	0x2,		/* 2 */

+/* 864 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 866 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 868 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 870 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 872 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 742 */	0x81,		/* 129 */

+/* 874 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter app_bundle_web */

 

-/* 744 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 746 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 748 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 876 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 878 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 880 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 750 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 752 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 754 */	0x8,		/* FC_LONG */

+/* 882 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 884 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 886 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createApp */

 

-/* 756 */	0x33,		/* FC_AUTO_HANDLE */

+/* 888 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 758 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 762 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 764 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 766 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 768 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 770 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 890 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 894 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 896 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 898 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 900 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 902 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x5,		/* 5 */

-/* 772 */	0x10,		/* 16 */

+/* 904 */	0x10,		/* 16 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 774 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 776 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 778 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 780 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 782 */	0x5,		/* 5 */

+/* 906 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 908 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 910 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 912 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 914 */	0x5,		/* 5 */

 			0x80,		/* 128 */

-/* 784 */	0x81,		/* 129 */

+/* 916 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 786 */	0x83,		/* 131 */

+/* 918 */	0x83,		/* 131 */

 			0x84,		/* 132 */

 

 	/* Parameter app_guid */

 

-/* 788 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 790 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 792 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 920 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 922 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 924 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter brand_code */

 

-/* 794 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 796 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 798 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 926 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 928 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 930 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter language */

 

-/* 800 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 802 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 804 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 932 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 934 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 936 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter ap */

 

-/* 806 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 808 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 810 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 938 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 940 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 942 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 812 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 814 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 816 */	0x8,		/* FC_LONG */

+/* 944 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 946 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 948 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createInstalledApp */

 

-/* 818 */	0x33,		/* FC_AUTO_HANDLE */

+/* 950 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 820 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 824 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 826 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 828 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 830 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 832 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 952 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 956 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 958 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 960 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 962 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 964 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 834 */	0xe,		/* 14 */

+/* 966 */	0xe,		/* 14 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 836 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 838 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 840 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 842 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 844 */	0x2,		/* 2 */

+/* 968 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 970 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 972 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 974 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 976 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 846 */	0x81,		/* 129 */

+/* 978 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter app_id */

 

-/* 848 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 850 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 852 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 980 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 982 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 984 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 854 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 856 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 858 */	0x8,		/* FC_LONG */

+/* 986 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 988 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 990 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure refreshPolicies */

@@ -1012,22 +1168,22 @@
 

 	/* Procedure createAllInstalledApps */

 

-/* 860 */	0x33,		/* FC_AUTO_HANDLE */

+/* 992 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 862 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 866 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 868 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 870 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 872 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 874 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 994 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 998 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1000 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1002 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1004 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1006 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 876 */	0xc,		/* 12 */

+/* 1008 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 878 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 880 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 882 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 884 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 886 */	0x1,		/* 1 */

+/* 1010 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1012 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1014 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1016 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1018 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

@@ -1035,9 +1191,9 @@
 

 	/* Return value */

 

-/* 888 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 890 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 892 */	0x8,		/* FC_LONG */

+/* 1020 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1022 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1024 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_conflictSource */

@@ -1045,24 +1201,24 @@
 

 	/* Procedure get_displayLanguage */

 

-/* 894 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1026 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 896 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 900 */	NdrFcShort( 0xa ),	/* 10 */

-/* 902 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 904 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 906 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 908 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1028 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1032 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1034 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1036 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1038 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1040 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 910 */	0xe,		/* 14 */

+/* 1042 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 912 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 914 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 916 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 918 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 920 */	0x2,		/* 2 */

+/* 1044 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1046 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1048 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1050 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1052 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 922 */	0x81,		/* 129 */

+/* 1054 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__IPolicyStatusValue0002 */

@@ -1070,782 +1226,693 @@
 

 	/* Parameter __MIDL__IAppBundleWeb0000 */

 

-/* 924 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 926 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 928 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1056 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1058 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1060 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 930 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 932 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 934 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure put_displayLanguage */

-

-/* 936 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 938 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 942 */	NdrFcShort( 0xb ),	/* 11 */

-/* 944 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 946 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 948 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 950 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 952 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 954 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 956 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 958 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 960 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 962 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 964 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter __MIDL__IAppBundleWeb0001 */

-

-/* 966 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 968 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 970 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Return value */

-

-/* 972 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 974 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 976 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure put_parentHWND */

-

-/* 978 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 980 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 984 */	NdrFcShort( 0xc ),	/* 12 */

-/* 986 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 988 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 990 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 992 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 994 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 996 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 998 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1000 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1002 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1004 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 1006 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter hwnd */

-

-/* 1008 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1010 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1012 */	0xb9,		/* FC_UINT3264 */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1014 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1016 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1018 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_appWeb */

-

-/* 1020 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1022 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1026 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1028 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 1030 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1032 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1034 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1036 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1038 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1040 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1042 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1044 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1046 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 1048 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter index */

-

-/* 1050 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1052 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1054 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter app_web */

-

-/* 1056 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1058 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1060 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

 /* 1062 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1064 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1064 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 1066 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure initialize */

+	/* Procedure put_displayLanguage */

 

 /* 1068 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1070 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1074 */	NdrFcShort( 0xf ),	/* 15 */

-/* 1076 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1074 */	NdrFcShort( 0xb ),	/* 11 */

+/* 1076 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

 /* 1078 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1080 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1082 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x1,		/* 1 */

-/* 1084 */	0xc,		/* 12 */

-			0x1,		/* Ext Flags:  new corr desc, */

+/* 1082 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1084 */	0xe,		/* 14 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1086 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1088 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1088 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1090 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1092 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1094 */	0x1,		/* 1 */

+/* 1092 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1094 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 1096 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter __MIDL__IAppBundleWeb0001 */

+

+/* 1098 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1100 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1102 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Return value */

+

+/* 1104 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1106 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1108 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure put_parentHWND */

+

+/* 1110 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1112 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1116 */	NdrFcShort( 0xc ),	/* 12 */

+/* 1118 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1120 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1122 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1124 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 1126 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1128 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1130 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1132 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1134 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1136 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 1138 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter hwnd */

+

+/* 1140 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1142 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1144 */	0xb9,		/* FC_UINT3264 */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 1146 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1148 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1150 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_appWeb */

+

+/* 1152 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1154 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1158 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1160 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 1162 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1164 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1166 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 1168 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1170 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1172 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1174 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1176 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1178 */	0x3,		/* 3 */

+			0x80,		/* 128 */

+/* 1180 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter index */

+

+/* 1182 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1184 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1186 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter app_web */

+

+/* 1188 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1190 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1192 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1194 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1196 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1198 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure initialize */

+

+/* 1200 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1202 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1206 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1208 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1210 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1212 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1214 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x1,		/* 1 */

+/* 1216 */	0xc,		/* 12 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1218 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1220 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1222 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1224 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1226 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1096 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1098 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1100 */	0x8,		/* FC_LONG */

+/* 1228 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1230 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1232 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure checkForUpdate */

 

-/* 1102 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1234 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1104 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1108 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1110 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1112 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1114 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1116 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1236 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1240 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1242 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1244 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1246 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1248 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1118 */	0xc,		/* 12 */

+/* 1250 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1120 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1122 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1124 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1126 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1128 */	0x1,		/* 1 */

+/* 1252 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1256 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1258 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1260 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1130 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1132 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1134 */	0x8,		/* FC_LONG */

+/* 1262 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1264 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1266 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure download */

 

-/* 1136 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1268 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1138 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1142 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 1144 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1146 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1148 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1150 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1270 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1274 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 1276 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1278 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1280 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1282 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1152 */	0xc,		/* 12 */

+/* 1284 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1154 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1156 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1158 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1160 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1162 */	0x1,		/* 1 */

+/* 1286 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1288 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1290 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1292 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1294 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1164 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1166 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1168 */	0x8,		/* FC_LONG */

+/* 1296 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1298 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1300 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure install */

 

-/* 1170 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1302 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1172 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1176 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 1178 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1180 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1182 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1184 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1304 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1308 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 1310 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1312 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1314 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1316 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1186 */	0xc,		/* 12 */

+/* 1318 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1188 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1190 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1192 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1194 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1196 */	0x1,		/* 1 */

+/* 1320 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1322 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1324 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1326 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1328 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1198 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1200 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1202 */	0x8,		/* FC_LONG */

+/* 1330 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1332 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1334 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure pause */

 

-/* 1204 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1336 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1206 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1210 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 1212 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1214 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1216 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1218 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1338 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1342 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 1344 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1348 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1350 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1220 */	0xc,		/* 12 */

+/* 1352 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1222 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1224 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1226 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1228 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1230 */	0x1,		/* 1 */

+/* 1354 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1356 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1358 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1360 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1362 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1232 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1234 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1236 */	0x8,		/* FC_LONG */

+/* 1364 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1366 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1368 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure resume */

 

-/* 1238 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1370 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1240 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1244 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 1246 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1248 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1250 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1252 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1372 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1376 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 1378 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1380 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1382 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1384 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1254 */	0xc,		/* 12 */

+/* 1386 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1256 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1258 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1260 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1262 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1264 */	0x1,		/* 1 */

+/* 1388 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1390 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1392 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1394 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1396 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1266 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1268 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1270 */	0x8,		/* FC_LONG */

+/* 1398 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1400 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1402 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure cancel */

 

-/* 1272 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1404 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1274 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1278 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 1280 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1282 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1284 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1286 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1406 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1410 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 1412 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1414 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1416 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1418 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1288 */	0xc,		/* 12 */

+/* 1420 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1290 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1292 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1294 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1296 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1298 */	0x1,		/* 1 */

+/* 1422 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1424 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1426 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1428 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1430 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1300 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1302 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1304 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure downloadPackage */

-

-/* 1306 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1308 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1312 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 1314 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 1316 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1318 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1320 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1322 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1324 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1326 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1328 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1330 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1332 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 1334 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter app_id */

-

-/* 1336 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1338 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1340 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter package_name */

-

-/* 1342 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1344 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1346 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Return value */

-

-/* 1348 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1350 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1352 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_currentState */

-

-/* 1354 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1356 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1360 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 1362 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1364 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1366 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1368 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1370 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1372 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1374 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1376 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1378 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1380 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 1382 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter current_state */

-

-/* 1384 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 1386 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1388 */	NdrFcShort( 0x3fe ),	/* Type Offset=1022 */

-

-	/* Return value */

-

-/* 1390 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1392 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1394 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_updaterVersion */

-

-

-	/* Procedure get_source */

-

-

-	/* Procedure get_appId */

-

-/* 1396 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1398 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1402 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 1404 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1406 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1408 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1410 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1412 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1414 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1416 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1418 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1420 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1422 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 1424 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter version */

-

-

-	/* Parameter __MIDL__IPolicyStatusValue0000 */

-

-

-	/* Parameter __MIDL__IAppWeb0000 */

-

-/* 1426 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1428 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1430 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

-

-	/* Return value */

-

-

-	/* Return value */

-

-

-	/* Return value */

-

 /* 1432 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1434 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1434 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 1436 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_currentVersionWeb */

+	/* Procedure downloadPackage */

 

 /* 1438 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1440 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1444 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1446 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1444 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 1446 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 1448 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1450 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1452 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 1452 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 1454 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1456 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1458 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1458 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1460 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1462 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1464 */	0x2,		/* 2 */

+/* 1462 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1464 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 1466 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter current */

-

-/* 1468 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1470 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1472 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

-/* 1474 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1476 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1478 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_nextVersionWeb */

-

-/* 1480 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1482 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1486 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1488 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1490 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1492 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1494 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1496 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1498 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1500 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1502 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1504 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1506 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 1508 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter next */

-

-/* 1510 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1512 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1514 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

-/* 1516 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1518 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1520 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_command */

-

-/* 1522 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1524 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1528 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1530 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 1532 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1534 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1536 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1538 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1540 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1542 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1544 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1546 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1548 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 1550 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter command_id */

+	/* Parameter app_id */

 

-/* 1552 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1554 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1556 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 1468 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1470 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1472 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter command */

+	/* Parameter package_name */

 

-/* 1558 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1560 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1562 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 1474 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1476 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1478 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 1564 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1566 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1568 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure cancel */

-

-/* 1570 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1572 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1576 */	NdrFcShort( 0xb ),	/* 11 */

-/* 1578 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1580 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1582 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1584 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x1,		/* 1 */

-/* 1586 */	0xc,		/* 12 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1588 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1590 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1592 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1594 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1596 */	0x1,		/* 1 */

-			0x80,		/* 128 */

-

-	/* Return value */

-

-/* 1598 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1600 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1602 */	0x8,		/* FC_LONG */

+/* 1480 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1482 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1484 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_currentState */

 

-/* 1604 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1486 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1606 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1610 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1612 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1614 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1616 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1618 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1488 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1492 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 1494 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1496 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1498 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1500 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1620 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1622 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1624 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1628 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1630 */	0x2,		/* 2 */

+/* 1502 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1504 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1506 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1508 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1510 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1512 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1632 */	0x81,		/* 129 */

+/* 1514 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter current_state */

 

-/* 1634 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1636 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1638 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 1516 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 1518 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1520 */	NdrFcShort( 0x3fe ),	/* Type Offset=1022 */

 

 	/* Return value */

 

-/* 1640 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1642 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1644 */	0x8,		/* FC_LONG */

+/* 1522 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1524 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1526 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentVersionWeb */

+

+/* 1528 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1530 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1534 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1536 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1538 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1540 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1542 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1544 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1546 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1548 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1550 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1552 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1554 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 1556 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter current */

+

+/* 1558 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1560 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1562 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1564 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1566 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1568 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_nextVersionWeb */

+

+/* 1570 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1572 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1576 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1578 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1580 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1582 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1584 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1586 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1588 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1590 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1592 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1594 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1596 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 1598 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter next */

+

+/* 1600 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1602 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1604 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1606 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1608 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1610 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_command */

+

+/* 1612 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1614 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1618 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1620 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 1622 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1624 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1626 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 1628 */	0xe,		/* 14 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+/* 1630 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1632 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1636 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1638 */	0x3,		/* 3 */

+			0x80,		/* 128 */

+/* 1640 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter command_id */

+

+/* 1642 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1644 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1646 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter command */

+

+/* 1648 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1650 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1652 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1654 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1656 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1658 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure cancel */

+

+/* 1660 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1662 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1666 */	NdrFcShort( 0xb ),	/* 11 */

+/* 1668 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1672 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1674 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x1,		/* 1 */

+/* 1676 */	0xc,		/* 12 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1678 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1680 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1682 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1684 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1686 */	0x1,		/* 1 */

+			0x80,		/* 128 */

+

+	/* Return value */

+

+/* 1688 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1690 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1692 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentState */

+

+/* 1694 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1696 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1700 */	NdrFcShort( 0xc ),	/* 12 */

+/* 1702 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1704 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1706 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1708 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1710 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1712 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1714 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1716 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1718 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1720 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 1722 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter current_state */

+

+/* 1724 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1726 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1728 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1730 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1732 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1734 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure launch */

 

-/* 1646 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1736 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1648 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1652 */	NdrFcShort( 0xd ),	/* 13 */

-/* 1654 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1656 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1658 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1660 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1738 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1742 */	NdrFcShort( 0xd ),	/* 13 */

+/* 1744 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1746 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1748 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1750 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1662 */	0xc,		/* 12 */

+/* 1752 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1664 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1666 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1668 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1670 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1672 */	0x1,		/* 1 */

+/* 1754 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1756 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1758 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1760 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1762 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1674 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1676 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1678 */	0x8,		/* FC_LONG */

+/* 1764 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1766 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1768 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure uninstall */

 

-/* 1680 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1770 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1682 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1686 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1688 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1690 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1692 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1694 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1772 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1776 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1778 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1780 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1782 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1784 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1696 */	0xc,		/* 12 */

+/* 1786 */	0xc,		/* 12 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1698 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1700 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1702 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1704 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1706 */	0x1,		/* 1 */

+/* 1788 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1790 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1792 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1794 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1796 */	0x1,		/* 1 */

 			0x80,		/* 128 */

 

 	/* Return value */

 

-/* 1708 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1710 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1712 */	0x8,		/* FC_LONG */

+/* 1798 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1800 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1802 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_serverInstallDataIndex */

 

-/* 1714 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1804 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1716 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1720 */	NdrFcShort( 0xf ),	/* 15 */

-/* 1722 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1724 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1726 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1728 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1806 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1810 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1812 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1814 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1816 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1818 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1730 */	0xe,		/* 14 */

+/* 1820 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1732 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1734 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1736 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1738 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1740 */	0x2,		/* 2 */

+/* 1822 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1824 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1826 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1828 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1830 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1742 */	0x81,		/* 129 */

+/* 1832 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__IAppWeb0001 */

 

-/* 1744 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1746 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1748 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1834 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1836 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1838 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1750 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1752 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1754 */	0x8,		/* FC_LONG */

+/* 1840 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1842 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1844 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure put_serverInstallDataIndex */

 

-/* 1756 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1846 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1758 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1762 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1764 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1766 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1768 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1770 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1848 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1852 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1854 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1856 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1858 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1860 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1772 */	0xe,		/* 14 */

+/* 1862 */	0xe,		/* 14 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1774 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1776 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1778 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1780 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1782 */	0x2,		/* 2 */

+/* 1864 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1866 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1868 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1870 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1872 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1784 */	0x81,		/* 129 */

+/* 1874 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__IAppWeb0002 */

 

-/* 1786 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1788 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1790 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 1876 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1878 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1880 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 1792 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1794 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1796 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_exitCode */

-

-/* 1798 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1800 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1804 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1806 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1808 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1810 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1812 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 1814 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1816 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1818 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1820 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1822 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1824 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 1826 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter __MIDL__IAppCommandWeb0001 */

-

-/* 1828 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1830 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1832 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1834 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1836 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1838 */	0x8,		/* FC_LONG */

+/* 1882 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1884 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1886 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_downloadPreferenceGroupPolicy */

@@ -1853,24 +1920,24 @@
 

 	/* Procedure get_output */

 

-/* 1840 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1888 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1842 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1846 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1848 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1850 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1852 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1854 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1890 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1894 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1896 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1898 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1900 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1902 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1856 */	0xe,		/* 14 */

+/* 1904 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1858 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1860 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1862 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1864 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1866 */	0x2,		/* 2 */

+/* 1906 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1908 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1910 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1912 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1914 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1868 */	0x81,		/* 129 */

+/* 1916 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter pref */

@@ -1878,218 +1945,176 @@
 

 	/* Parameter __MIDL__IAppCommandWeb0002 */

 

-/* 1870 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1872 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1874 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1918 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1920 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1922 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 1876 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1878 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1880 */	0x8,		/* FC_LONG */

+/* 1924 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1926 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1928 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure execute */

 

-/* 1882 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1930 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1884 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1888 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1890 */	NdrFcShort( 0x58 ),	/* ARM64 Stack size/offset = 88 */

-/* 1892 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1894 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1896 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1932 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1936 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1938 */	NdrFcShort( 0x58 ),	/* ARM64 Stack size/offset = 88 */

+/* 1940 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1942 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1944 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0xa,		/* 10 */

-/* 1898 */	0x16,		/* 22 */

+/* 1946 */	0x16,		/* 22 */

 			0x85,		/* Ext Flags:  new corr desc, srv corr check, has big byval param */

-/* 1900 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1902 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1904 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1906 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1908 */	0xa,		/* 10 */

+/* 1948 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1950 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1952 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1954 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1956 */	0xa,		/* 10 */

 			0x80,		/* 128 */

-/* 1910 */	0x81,		/* 129 */

+/* 1958 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 1912 */	0x83,		/* 131 */

+/* 1960 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 1914 */	0x85,		/* 133 */

+/* 1962 */	0x85,		/* 133 */

 			0x86,		/* 134 */

-/* 1916 */	0x87,		/* 135 */

+/* 1964 */	0x87,		/* 135 */

 			0xf8,		/* 248 */

-/* 1918 */	0xf8,		/* 248 */

+/* 1966 */	0xf8,		/* 248 */

 			0x0,		/* 0 */

 

 	/* Parameter substitution1 */

 

-/* 1920 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1922 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1924 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1968 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1970 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1972 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution2 */

 

-/* 1926 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1928 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1930 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1974 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1976 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1978 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution3 */

 

-/* 1932 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1934 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1936 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1980 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1982 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1984 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution4 */

 

-/* 1938 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1940 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 1942 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1986 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1988 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 1990 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution5 */

 

-/* 1944 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1946 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 1948 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1992 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1994 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 1996 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution6 */

 

-/* 1950 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1952 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 1954 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1998 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2000 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2002 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution7 */

 

-/* 1956 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1958 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

-/* 1960 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 2004 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2006 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

+/* 2008 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution8 */

 

-/* 1962 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1964 */	NdrFcShort( 0x40 ),	/* ARM64 Stack size/offset = 64 */

-/* 1966 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 2010 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2012 */	NdrFcShort( 0x40 ),	/* ARM64 Stack size/offset = 64 */

+/* 2014 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution9 */

 

-/* 1968 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1970 */	NdrFcShort( 0x48 ),	/* ARM64 Stack size/offset = 72 */

-/* 1972 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 2016 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2018 */	NdrFcShort( 0x48 ),	/* ARM64 Stack size/offset = 72 */

+/* 2020 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Return value */

 

-/* 1974 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1976 */	NdrFcShort( 0x50 ),	/* ARM64 Stack size/offset = 80 */

-/* 1978 */	0x8,		/* FC_LONG */

+/* 2022 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2024 */	NdrFcShort( 0x50 ),	/* ARM64 Stack size/offset = 80 */

+/* 2026 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_updatesSuppressedTimes */

 

-/* 1980 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2028 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1982 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1986 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1988 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 1990 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1992 */	NdrFcShort( 0x76 ),	/* 118 */

-/* 1994 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2030 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2034 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2036 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2038 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2040 */	NdrFcShort( 0x76 ),	/* 118 */

+/* 2042 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x5,		/* 5 */

-/* 1996 */	0x10,		/* 16 */

+/* 2044 */	0x10,		/* 16 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1998 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2000 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2002 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2004 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 2006 */	0x5,		/* 5 */

+/* 2046 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2048 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2050 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2052 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2054 */	0x5,		/* 5 */

 			0x80,		/* 128 */

-/* 2008 */	0x81,		/* 129 */

+/* 2056 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2010 */	0x83,		/* 131 */

+/* 2058 */	0x83,		/* 131 */

 			0x84,		/* 132 */

 

 	/* Parameter start_hour */

 

-/* 2012 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2014 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2016 */	0x8,		/* FC_LONG */

+/* 2060 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2062 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2064 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter start_min */

 

-/* 2018 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2020 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2022 */	0x8,		/* FC_LONG */

+/* 2066 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2068 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2070 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter duration_min */

 

-/* 2024 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2026 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2028 */	0x8,		/* FC_LONG */

+/* 2072 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2074 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2076 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter are_updates_suppressed */

 

-/* 2030 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2032 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2034 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 2036 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2038 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2040 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_effectivePolicyForAppInstalls */

-

-/* 2042 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2044 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2048 */	NdrFcShort( 0xc ),	/* 12 */

-/* 2050 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2052 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2054 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2056 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2058 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2060 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2062 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2064 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2066 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2068 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 2070 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter app_id */

-

-/* 2072 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 2074 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2076 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter policy */

-

 /* 2078 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2080 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2082 */	0x8,		/* FC_LONG */

+/* 2080 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 2082 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 2084 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2086 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2086 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

 /* 2088 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_effectivePolicyForAppUpdates */

+	/* Procedure get_effectivePolicyForAppInstalls */

 

 /* 2090 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2092 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2096 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2096 */	NdrFcShort( 0xc ),	/* 12 */

 /* 2098 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2100 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2102 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -2126,20 +2151,20 @@
 /* 2136 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetVersionPrefix */

+	/* Procedure get_effectivePolicyForAppUpdates */

 

 /* 2138 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2140 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2144 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2144 */	NdrFcShort( 0xd ),	/* 13 */

 /* 2146 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2148 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2150 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2152 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+/* 2150 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2152 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2154 */	0xe,		/* 14 */

-			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

-/* 2156 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+/* 2156 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2158 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2160 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2162 */	NdrFcShort( 0x3 ),	/* 3 */

@@ -2154,11 +2179,12 @@
 /* 2170 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 2172 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter prefix */

+	/* Parameter policy */

 

-/* 2174 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2174 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 2176 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2178 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 2178 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -2167,20 +2193,20 @@
 /* 2184 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRollbackToTargetVersionAllowed */

+	/* Procedure get_targetVersionPrefix */

 

 /* 2186 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2188 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2192 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2192 */	NdrFcShort( 0xe ),	/* 14 */

 /* 2194 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2196 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2198 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 2200 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2198 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2200 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2202 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2204 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

+/* 2204 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2206 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2208 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2210 */	NdrFcShort( 0x3 ),	/* 3 */

@@ -2195,12 +2221,11 @@
 /* 2218 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 2220 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter rollback_allowed */

+	/* Parameter prefix */

 

-/* 2222 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2222 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 2224 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2226 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2226 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

@@ -2209,211 +2234,211 @@
 /* 2232 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hasConflict */

+	/* Procedure get_isRollbackToTargetVersionAllowed */

 

 /* 2234 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2236 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2240 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2242 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2240 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2242 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2244 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2246 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 2248 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 2248 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 2250 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2252 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2254 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2256 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2258 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2260 */	0x2,		/* 2 */

+/* 2258 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 2260 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 2262 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter app_id */

+

+/* 2264 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 2266 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2268 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter rollback_allowed */

+

+/* 2270 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2272 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2274 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 2276 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2278 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2280 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_hasConflict */

+

+/* 2282 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2284 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2288 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 2290 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2292 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2294 */	NdrFcShort( 0x22 ),	/* 34 */

+/* 2296 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 2298 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2300 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2302 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2304 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2306 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2308 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 2310 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter has_conflict */

 

-/* 2264 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2266 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2268 */	0x6,		/* FC_SHORT */

+/* 2312 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2314 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2316 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2270 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2272 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2274 */	0x8,		/* FC_LONG */

+/* 2318 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2320 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2322 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_conflictValue */

 

-/* 2276 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2324 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2278 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2282 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2284 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2286 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2288 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2290 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2326 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2330 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2332 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2334 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2336 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2338 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2292 */	0xe,		/* 14 */

+/* 2340 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2294 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2296 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2298 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2300 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2302 */	0x2,		/* 2 */

+/* 2342 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2344 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2348 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2350 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2304 */	0x81,		/* 129 */

+/* 2352 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter __MIDL__IPolicyStatusValue0003 */

 

-/* 2306 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2308 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2310 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 2354 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2356 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2358 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2312 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2314 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2316 */	0x8,		/* FC_LONG */

+/* 2360 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2362 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2364 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_lastCheckedTime */

 

-/* 2318 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2366 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2320 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2324 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2326 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2328 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2330 */	NdrFcShort( 0x2c ),	/* 44 */

-/* 2332 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2368 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2372 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2374 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2376 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2378 */	NdrFcShort( 0x2c ),	/* 44 */

+/* 2380 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2334 */	0xe,		/* 14 */

+/* 2382 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2336 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2338 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2340 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2342 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2344 */	0x2,		/* 2 */

+/* 2384 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2386 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2388 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2390 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2392 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2346 */	0x81,		/* 129 */

+/* 2394 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter last_checked */

 

-/* 2348 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2350 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2352 */	0xc,		/* FC_DOUBLE */

+/* 2396 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2398 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2400 */	0xc,		/* FC_DOUBLE */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2354 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2356 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2358 */	0x8,		/* FC_LONG */

+/* 2402 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2404 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2406 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_lastCheckPeriodMinutes */

 

-/* 2360 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2408 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2362 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2366 */	NdrFcShort( 0xa ),	/* 10 */

-/* 2368 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2370 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2372 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2374 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2410 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2414 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2416 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2418 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2420 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2422 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2376 */	0xe,		/* 14 */

+/* 2424 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2378 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2380 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2382 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2384 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2386 */	0x2,		/* 2 */

+/* 2426 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2428 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2430 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2432 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2434 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2388 */	0x81,		/* 129 */

+/* 2436 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 2390 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2392 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2394 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

-

-	/* Return value */

-

-/* 2396 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2398 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2400 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_updatesSuppressedTimes */

-

-/* 2402 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2404 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2408 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2410 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2412 */	NdrFcShort( 0x1a ),	/* 26 */

-/* 2414 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2416 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2418 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2420 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2422 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2424 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2426 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2428 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 2430 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter value */

-

-/* 2432 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2434 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2436 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

-

-	/* Parameter are_updates_suppressed */

-

-/* 2438 */	NdrFcShort( 0x148 ),	/* Flags:  in, base type, simple ref, */

-/* 2440 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2442 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2438 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2440 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2442 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

 /* 2444 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2446 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2446 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 2448 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_downloadPreferenceGroupPolicy */

+	/* Procedure get_updatesSuppressedTimes */

 

 /* 2450 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2452 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2456 */	NdrFcShort( 0xc ),	/* 12 */

-/* 2458 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2460 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2456 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2458 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 2460 */	NdrFcShort( 0x1a ),	/* 26 */

 /* 2462 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2464 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 2466 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2468 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2470 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2472 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2474 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2476 */	0x2,		/* 2 */

+/* 2474 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 2476 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 2478 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

 	/* Parameter value */

 

@@ -2421,235 +2446,236 @@
 /* 2482 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 2484 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

+	/* Parameter are_updates_suppressed */

+

+/* 2486 */	NdrFcShort( 0x148 ),	/* Flags:  in, base type, simple ref, */

+/* 2488 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2490 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 2486 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2488 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2490 */	0x8,		/* FC_LONG */

+/* 2492 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2494 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2496 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_downloadPreferenceGroupPolicy */

+

+/* 2498 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2500 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2504 */	NdrFcShort( 0xc ),	/* 12 */

+/* 2506 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2508 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2510 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2512 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 2514 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2516 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2518 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2520 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2522 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2524 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 2526 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter value */

+

+/* 2528 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2530 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2532 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+

+	/* Return value */

+

+/* 2534 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2536 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2538 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheSizeLimitMBytes */

 

-/* 2492 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2540 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2494 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2498 */	NdrFcShort( 0xd ),	/* 13 */

-/* 2500 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2502 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2504 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2506 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2542 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2546 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2548 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2550 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2552 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2554 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2508 */	0xe,		/* 14 */

+/* 2556 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2510 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2512 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2514 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2516 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2518 */	0x2,		/* 2 */

+/* 2558 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2560 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2562 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2564 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2566 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2520 */	0x81,		/* 129 */

+/* 2568 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 2522 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2524 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2526 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2570 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2572 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2574 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2528 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2530 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2532 */	0x8,		/* FC_LONG */

+/* 2576 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2578 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2580 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheExpirationTimeDays */

 

-/* 2534 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2582 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2536 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2540 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2542 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2544 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2546 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2548 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2584 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2588 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2590 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2592 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2594 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2596 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2550 */	0xe,		/* 14 */

+/* 2598 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2552 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2554 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2556 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2558 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2560 */	0x2,		/* 2 */

+/* 2600 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2602 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2604 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2606 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2608 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2562 */	0x81,		/* 129 */

+/* 2610 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 2564 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2566 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2568 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2612 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2614 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2616 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2570 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2572 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2574 */	0x8,		/* FC_LONG */

+/* 2618 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2620 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2622 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyMode */

 

-/* 2576 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2624 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2578 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2582 */	NdrFcShort( 0xf ),	/* 15 */

-/* 2584 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2586 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2588 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2590 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2626 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2630 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2632 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2636 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2638 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2592 */	0xe,		/* 14 */

+/* 2640 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2594 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2596 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2598 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2600 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2602 */	0x2,		/* 2 */

+/* 2642 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2644 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2646 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2648 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2650 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2604 */	0x81,		/* 129 */

+/* 2652 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 2606 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2608 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2610 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2654 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2656 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2658 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2612 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2614 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2616 */	0x8,		/* FC_LONG */

+/* 2660 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2662 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2664 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyPacUrl */

 

-/* 2618 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2666 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2620 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2624 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2626 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2628 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2630 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2632 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2668 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2672 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2674 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2676 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2678 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2680 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2634 */	0xe,		/* 14 */

+/* 2682 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2636 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2638 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2640 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2642 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2644 */	0x2,		/* 2 */

+/* 2684 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2686 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2688 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2690 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2692 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2646 */	0x81,		/* 129 */

+/* 2694 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 2648 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2650 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2652 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2696 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2698 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 2700 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2654 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2656 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2658 */	0x8,		/* FC_LONG */

+/* 2702 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2704 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2706 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyServer */

 

-/* 2660 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2708 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2662 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2666 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 2668 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 2670 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2672 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2674 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2710 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2714 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 2716 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2718 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2720 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2722 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2676 */	0xe,		/* 14 */

+/* 2724 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2678 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2680 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2682 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2684 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 2686 */	0x2,		/* 2 */

+/* 2726 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2728 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2730 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2732 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 2734 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2688 */	0x81,		/* 129 */

+/* 2736 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 2690 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2692 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2694 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

-

-	/* Return value */

-

-/* 2696 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2698 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2700 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_effectivePolicyForAppInstalls */

-

-/* 2702 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2704 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2708 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 2710 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2712 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2714 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2716 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2718 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2720 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2722 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2724 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2726 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2728 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 2730 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter app_id */

-

-/* 2732 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 2734 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2736 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter value */

-

 /* 2738 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2740 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 2740 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 2742 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

 /* 2744 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2746 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2746 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 2748 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_effectivePolicyForAppUpdates */

+	/* Procedure get_effectivePolicyForAppInstalls */

 

 /* 2750 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2752 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2756 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 2756 */	NdrFcShort( 0x12 ),	/* 18 */

 /* 2758 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2760 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2762 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2685,12 +2711,12 @@
 /* 2796 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetVersionPrefix */

+	/* Procedure get_effectivePolicyForAppUpdates */

 

 /* 2798 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2800 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2804 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 2804 */	NdrFcShort( 0x13 ),	/* 19 */

 /* 2806 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2808 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2810 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2726,12 +2752,12 @@
 /* 2844 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRollbackToTargetVersionAllowed */

+	/* Procedure get_targetVersionPrefix */

 

 /* 2846 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2848 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2852 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 2852 */	NdrFcShort( 0x14 ),	/* 20 */

 /* 2854 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2856 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2858 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2767,12 +2793,12 @@
 /* 2892 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetChannel */

+	/* Procedure get_isRollbackToTargetVersionAllowed */

 

 /* 2894 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2896 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2900 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2900 */	NdrFcShort( 0x15 ),	/* 21 */

 /* 2902 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 2904 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2906 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2808,21 +2834,21 @@
 /* 2940 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_forceInstallApps */

+	/* Procedure get_targetChannel */

 

 /* 2942 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2944 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2948 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 2948 */	NdrFcShort( 0x16 ),	/* 22 */

 /* 2950 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2952 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2952 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2954 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2956 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2956 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2958 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2960 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2962 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2962 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2964 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2966 */	NdrFcShort( 0x3 ),	/* 3 */

 /* 2968 */	0x3,		/* 3 */

@@ -2830,12 +2856,11 @@
 /* 2970 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter is_machine */

+	/* Parameter app_id */

 

-/* 2972 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2972 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

 /* 2974 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2976 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2976 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter value */

 

@@ -2850,196 +2875,238 @@
 /* 2988 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchCmdLine */

+	/* Procedure get_forceInstallApps */

 

 /* 2990 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2992 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2996 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2998 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3000 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2996 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 2998 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3000 */	NdrFcShort( 0x6 ),	/* 6 */

 /* 3002 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3004 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 3004 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 3006 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3008 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3010 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3012 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3014 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3016 */	0x2,		/* 2 */

+/* 3014 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3016 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 3018 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter is_machine */

+

+/* 3020 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3022 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3024 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

+	/* Parameter value */

+

+/* 3026 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3028 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3030 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+

+	/* Return value */

+

+/* 3032 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3034 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3036 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure LaunchCmdLine */

+

+/* 3038 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3040 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3044 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3046 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3048 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3050 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3052 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 3054 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3058 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3060 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3062 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3064 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 3066 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter cmd_line */

 

-/* 3020 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3022 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3024 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

-

-	/* Return value */

-

-/* 3026 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3028 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3030 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure LaunchBrowser */

-

-/* 3032 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3034 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3038 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3040 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3042 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3044 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3046 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3048 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3050 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3052 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3054 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3056 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3058 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 3060 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter browser_type */

-

-/* 3062 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3064 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3066 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter url */

-

 /* 3068 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3070 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3070 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 3072 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

 	/* Return value */

 

 /* 3074 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3076 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3076 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 3078 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchCmdElevated */

+	/* Procedure LaunchBrowser */

 

 /* 3080 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3082 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3086 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 3088 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 3086 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3088 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 3090 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3092 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3092 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3094 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x5,		/* 5 */

-/* 3096 */	0x10,		/* 16 */

+			0x3,		/* 3 */

+/* 3096 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3098 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3100 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3102 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3104 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 3106 */	0x5,		/* 5 */

+/* 3104 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3106 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 3108 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3110 */	0x83,		/* 131 */

+

+	/* Parameter browser_type */

+

+/* 3110 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3112 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3114 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter url */

+

+/* 3116 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 3118 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3120 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+

+	/* Return value */

+

+/* 3122 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3124 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3126 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure LaunchCmdElevated */

+

+/* 3128 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3130 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3134 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 3136 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 3138 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3140 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3142 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x5,		/* 5 */

+/* 3144 */	0x10,		/* 16 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3146 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3148 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3150 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3152 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 3154 */	0x5,		/* 5 */

+			0x80,		/* 128 */

+/* 3156 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+/* 3158 */	0x83,		/* 131 */

 			0x84,		/* 132 */

 

 	/* Parameter app_guid */

 

-/* 3112 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3114 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3116 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+/* 3160 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 3162 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3164 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

 	/* Parameter cmd_id */

 

-/* 3118 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3120 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3122 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+/* 3166 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 3168 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3170 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

 	/* Parameter caller_proc_id */

 

-/* 3124 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3126 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3128 */	0x8,		/* FC_LONG */

+/* 3172 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3174 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3176 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter proc_handle */

 

-/* 3130 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3132 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3134 */	0xb9,		/* FC_UINT3264 */

+/* 3178 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3180 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3182 */	0xb9,		/* FC_UINT3264 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3136 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3138 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3140 */	0x8,		/* FC_LONG */

+/* 3184 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3186 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3188 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure LaunchCmdLineEx */

 

-/* 3142 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3190 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3144 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3148 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 3150 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 3152 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3154 */	NdrFcShort( 0x5c ),	/* 92 */

-/* 3156 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 3192 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3196 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 3198 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 3200 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3202 */	NdrFcShort( 0x5c ),	/* 92 */

+/* 3204 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x5,		/* 5 */

-/* 3158 */	0x10,		/* 16 */

+/* 3206 */	0x10,		/* 16 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3160 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3162 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3164 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3166 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 3168 */	0x5,		/* 5 */

+/* 3208 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3210 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3212 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3214 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 3216 */	0x5,		/* 5 */

 			0x80,		/* 128 */

-/* 3170 */	0x81,		/* 129 */

+/* 3218 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3172 */	0x83,		/* 131 */

+/* 3220 */	0x83,		/* 131 */

 			0x84,		/* 132 */

 

 	/* Parameter cmd_line */

 

-/* 3174 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3176 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3178 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+/* 3222 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 3224 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3226 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

 	/* Parameter server_proc_id */

 

-/* 3180 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3182 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3184 */	0x8,		/* FC_LONG */

+/* 3228 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3230 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3232 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter proc_handle */

 

-/* 3186 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3188 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3190 */	0xb9,		/* FC_UINT3264 */

+/* 3234 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3236 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3238 */	0xb9,		/* FC_UINT3264 */

 			0x0,		/* 0 */

 

 	/* Parameter stdout_handle */

 

-/* 3192 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3194 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3196 */	0xb9,		/* FC_UINT3264 */

+/* 3240 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3242 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3244 */	0xb9,		/* FC_UINT3264 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3198 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3200 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3202 */	0x8,		/* FC_LONG */

+/* 3246 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3248 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3250 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 			0x0

@@ -3052,68 +3119,68 @@
         {

 			NdrFcShort( 0x0 ),	/* 0 */

 /*  2 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/*  4 */	0x8,		/* FC_LONG */

-			0x5c,		/* FC_PAD */

-/*  6 */	

 			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/*  8 */	NdrFcShort( 0x1c ),	/* Offset= 28 (36) */

-/* 10 */	

+/*  4 */	NdrFcShort( 0x1c ),	/* Offset= 28 (32) */

+/*  6 */	

 			0x13, 0x0,	/* FC_OP */

-/* 12 */	NdrFcShort( 0xe ),	/* Offset= 14 (26) */

-/* 14 */	

+/*  8 */	NdrFcShort( 0xe ),	/* Offset= 14 (22) */

+/* 10 */	

 			0x1b,		/* FC_CARRAY */

 			0x1,		/* 1 */

-/* 16 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 18 */	0x9,		/* Corr desc: FC_ULONG */

+/* 12 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 14 */	0x9,		/* Corr desc: FC_ULONG */

 			0x0,		/*  */

-/* 20 */	NdrFcShort( 0xfffc ),	/* -4 */

-/* 22 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

-/* 24 */	0x6,		/* FC_SHORT */

+/* 16 */	NdrFcShort( 0xfffc ),	/* -4 */

+/* 18 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 20 */	0x6,		/* FC_SHORT */

 			0x5b,		/* FC_END */

-/* 26 */	

+/* 22 */	

 			0x17,		/* FC_CSTRUCT */

 			0x3,		/* 3 */

-/* 28 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 30 */	NdrFcShort( 0xfff0 ),	/* Offset= -16 (14) */

-/* 32 */	0x8,		/* FC_LONG */

+/* 24 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 26 */	NdrFcShort( 0xfff0 ),	/* Offset= -16 (10) */

+/* 28 */	0x8,		/* FC_LONG */

 			0x8,		/* FC_LONG */

-/* 34 */	0x5c,		/* FC_PAD */

+/* 30 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 36 */	0xb4,		/* FC_USER_MARSHAL */

+/* 32 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

+/* 34 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 36 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 38 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 40 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 42 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 44 */	NdrFcShort( 0xffde ),	/* Offset= -34 (10) */

+/* 40 */	NdrFcShort( 0xffde ),	/* Offset= -34 (6) */

+/* 42 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 44 */	0x8,		/* FC_LONG */

+			0x5c,		/* FC_PAD */

 /* 46 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 48 */	0xb,		/* FC_HYPER */

-			0x5c,		/* FC_PAD */

-/* 50 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 52 */	0x6,		/* FC_SHORT */

-			0x5c,		/* FC_PAD */

-/* 54 */	

 			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 56 */	NdrFcShort( 0x2 ),	/* Offset= 2 (58) */

-/* 58 */	

+/* 48 */	NdrFcShort( 0x2 ),	/* Offset= 2 (50) */

+/* 50 */	

 			0x2f,		/* FC_IP */

 			0x5a,		/* FC_CONSTANT_IID */

-/* 60 */	NdrFcLong( 0x20400 ),	/* 132096 */

-/* 64 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 66 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 68 */	0xc0,		/* 192 */

+/* 52 */	NdrFcLong( 0x20400 ),	/* 132096 */

+/* 56 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 58 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 60 */	0xc0,		/* 192 */

 			0x0,		/* 0 */

-/* 70 */	0x0,		/* 0 */

+/* 62 */	0x0,		/* 0 */

 			0x0,		/* 0 */

-/* 72 */	0x0,		/* 0 */

+/* 64 */	0x0,		/* 0 */

 			0x0,		/* 0 */

-/* 74 */	0x0,		/* 0 */

+/* 66 */	0x0,		/* 0 */

 			0x46,		/* 70 */

+/* 68 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 70 */	0xb,		/* FC_HYPER */

+			0x5c,		/* FC_PAD */

+/* 72 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 74 */	0x6,		/* FC_SHORT */

+			0x5c,		/* FC_PAD */

 /* 76 */	

 			0x12, 0x0,	/* FC_UP */

-/* 78 */	NdrFcShort( 0xffcc ),	/* Offset= -52 (26) */

+/* 78 */	NdrFcShort( 0xffc8 ),	/* Offset= -56 (22) */

 /* 80 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

 /* 82 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -3157,11 +3224,11 @@
 /* 166 */	NdrFcLong( 0x7 ),	/* 7 */

 /* 170 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */

 /* 172 */	NdrFcLong( 0x8 ),	/* 8 */

-/* 176 */	NdrFcShort( 0xff5a ),	/* Offset= -166 (10) */

+/* 176 */	NdrFcShort( 0xff56 ),	/* Offset= -170 (6) */

 /* 178 */	NdrFcLong( 0xd ),	/* 13 */

 /* 182 */	NdrFcShort( 0xdc ),	/* Offset= 220 (402) */

 /* 184 */	NdrFcLong( 0x9 ),	/* 9 */

-/* 188 */	NdrFcShort( 0xff7e ),	/* Offset= -130 (58) */

+/* 188 */	NdrFcShort( 0xff76 ),	/* Offset= -138 (50) */

 /* 190 */	NdrFcLong( 0x2000 ),	/* 8192 */

 /* 194 */	NdrFcShort( 0xe2 ),	/* Offset= 226 (420) */

 /* 196 */	NdrFcLong( 0x24 ),	/* 36 */

@@ -3295,7 +3362,7 @@
 /* 510 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

 /* 512 */	

 			0x13, 0x0,	/* FC_OP */

-/* 514 */	NdrFcShort( 0xfe18 ),	/* Offset= -488 (26) */

+/* 514 */	NdrFcShort( 0xfe14 ),	/* Offset= -492 (22) */

 /* 516 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

 /* 518 */	

@@ -3351,7 +3418,7 @@
 /* 586 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

 /* 588 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 590 */	NdrFcShort( 0xfdec ),	/* Offset= -532 (58) */

+/* 590 */	NdrFcShort( 0xfde4 ),	/* Offset= -540 (50) */

 /* 592 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

 /* 594 */	

@@ -3656,13 +3723,13 @@
 /* 958 */	NdrFcShort( 0xfdce ),	/* Offset= -562 (396) */

 /* 960 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

-/* 962 */	NdrFcShort( 0xfc48 ),	/* Offset= -952 (10) */

+/* 962 */	NdrFcShort( 0xfc44 ),	/* Offset= -956 (6) */

 /* 964 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

 /* 966 */	NdrFcShort( 0xfdcc ),	/* Offset= -564 (402) */

 /* 968 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

-/* 970 */	NdrFcShort( 0xfc70 ),	/* Offset= -912 (58) */

+/* 970 */	NdrFcShort( 0xfc68 ),	/* Offset= -920 (50) */

 /* 972 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

 /* 974 */	NdrFcShort( 0xfdd6 ),	/* Offset= -554 (420) */

@@ -3802,6 +3869,80 @@
    GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */

 

 

+/* Object interface: IAppVersionWeb, ver. 0.0,

+   GUID={0xAA10D17D,0x7A09,0x48AC,{0xB1,0xE4,0xF1,0x24,0x93,0x7E,0x3D,0x26}} */

+

+#pragma code_seg(".orpc")

+static const unsigned short IAppVersionWeb_FormatStringOffsetTable[] =

+    {

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    0,

+    42,

+    84

+    };

+

+static const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo =

+    {

+    &Object_StubDesc,

+    updater_legacy_idl__MIDL_ProcFormatString.Format,

+    &IAppVersionWeb_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0

+    };

+

+

+static const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo = 

+    {

+    &Object_StubDesc,

+    0,

+    updater_legacy_idl__MIDL_ProcFormatString.Format,

+    &IAppVersionWeb_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0,

+    0};

+CINTERFACE_PROXY_VTABLE(10) _IAppVersionWebProxyVtbl = 

+{

+    &IAppVersionWeb_ProxyInfo,

+    &IID_IAppVersionWeb,

+    IUnknown_QueryInterface_Proxy,

+    IUnknown_AddRef_Proxy,

+    IUnknown_Release_Proxy ,

+    0 /* IDispatch::GetTypeInfoCount */ ,

+    0 /* IDispatch::GetTypeInfo */ ,

+    0 /* IDispatch::GetIDsOfNames */ ,

+    0 /* IDispatch_Invoke_Proxy */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_version */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageCount */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageWeb */

+};

+

+

+static const PRPC_STUB_FUNCTION IAppVersionWeb_table[] =

+{

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2

+};

+

+CInterfaceStubVtbl _IAppVersionWebStubVtbl =

+{

+    &IID_IAppVersionWeb,

+    &IAppVersionWeb_ServerInfo,

+    10,

+    &IAppVersionWeb_table[-3],

+    CStdStubBuffer_DELEGATING_METHODS

+};

+

+

 /* Object interface: ICurrentState, ver. 0.0,

    GUID={0xA643508B,0xB1E3,0x4457,{0x97,0x69,0x32,0xC9,0x53,0xBD,0x1D,0x57}} */

 

@@ -3812,23 +3953,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    42,

-    84,

-    126,

-    168,

-    210,

-    252,

-    294,

-    336,

-    378,

-    420,

-    462,

-    504,

-    546,

-    588,

-    630,

-    672

+    132,

+    174,

+    216,

+    258,

+    300,

+    342,

+    384,

+    426,

+    468,

+    510,

+    552,

+    594,

+    636,

+    678,

+    720,

+    762,

+    804

     };

 

 static const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo =

@@ -3928,7 +4069,7 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    714

+    846

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3Web_ProxyInfo =

@@ -3996,23 +4137,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    756,

-    818,

-    860,

-    894,

-    936,

-    978,

-    252,

-    1020,

+    888,

+    950,

+    992,

+    1026,

     1068,

-    1102,

-    1136,

-    1170,

-    1204,

-    1238,

-    1272,

-    1306,

-    1354

+    1110,

+    384,

+    1152,

+    1200,

+    1234,

+    1268,

+    1302,

+    1336,

+    1370,

+    1404,

+    1438,

+    1486

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppBundleWeb_ProxyInfo =

@@ -4112,16 +4253,16 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1396,

-    1438,

-    1480,

-    1522,

+    0,

+    1528,

     1570,

-    1604,

-    1646,

-    1680,

-    1714,

-    1756

+    1612,

+    1660,

+    1694,

+    1736,

+    1770,

+    1804,

+    1846

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppWeb_ProxyInfo =

@@ -4207,10 +4348,10 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    1798,

-    1840,

-    1882

+    132,

+    42,

+    1888,

+    1930

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppCommandWeb_ProxyInfo =

@@ -4284,15 +4425,15 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    1980,

-    1840,

-    126,

-    168,

-    2042,

+    132,

+    2028,

+    1888,

+    258,

+    300,

     2090,

     2138,

-    2186

+    2186,

+    2234

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus_ProxyInfo =

@@ -4376,11 +4517,11 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1396,

-    42,

-    2234,

-    894,

-    2276

+    0,

+    174,

+    2282,

+    1026,

+    2324

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatusValue_ProxyInfo =

@@ -4456,22 +4597,22 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1396,

-    2318,

-    860,

-    2360,

-    2402,

+    0,

+    2366,

+    992,

+    2408,

     2450,

-    2492,

-    2534,

-    2576,

-    2618,

-    2660,

-    2702,

+    2498,

+    2540,

+    2582,

+    2624,

+    2666,

+    2708,

     2750,

     2798,

     2846,

-    2894

+    2894,

+    2942

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus2_ProxyInfo =

@@ -4569,23 +4710,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1396,

-    2318,

-    860,

-    2360,

-    2402,

+    0,

+    2366,

+    992,

+    2408,

     2450,

-    2492,

-    2534,

-    2576,

-    2618,

-    2660,

-    2702,

+    2498,

+    2540,

+    2582,

+    2624,

+    2666,

+    2708,

     2750,

     2798,

     2846,

     2894,

-    2942

+    2942,

+    2990

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus3_ProxyInfo =

@@ -4681,9 +4822,9 @@
 #pragma code_seg(".orpc")

 static const unsigned short IProcessLauncher_FormatStringOffsetTable[] =

     {

-    2990,

-    3032,

-    3080

+    3038,

+    3080,

+    3128

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher_ProxyInfo =

@@ -4735,10 +4876,10 @@
 #pragma code_seg(".orpc")

 static const unsigned short IProcessLauncher2_FormatStringOffsetTable[] =

     {

-    2990,

-    3032,

+    3038,

     3080,

-    3142

+    3128,

+    3190

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher2_ProxyInfo =

@@ -4816,6 +4957,7 @@
     ( CInterfaceProxyVtbl *) &_IGoogleUpdate3WebProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IPolicyStatus3ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IPolicyStatusProxyVtbl,

+    ( CInterfaceProxyVtbl *) &_IAppVersionWebProxyVtbl,

     ( CInterfaceProxyVtbl *) &_ICurrentStateProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IProcessLauncher2ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAppBundleWebProxyVtbl,

@@ -4832,6 +4974,7 @@
     ( CInterfaceStubVtbl *) &_IGoogleUpdate3WebStubVtbl,

     ( CInterfaceStubVtbl *) &_IPolicyStatus3StubVtbl,

     ( CInterfaceStubVtbl *) &_IPolicyStatusStubVtbl,

+    ( CInterfaceStubVtbl *) &_IAppVersionWebStubVtbl,

     ( CInterfaceStubVtbl *) &_ICurrentStateStubVtbl,

     ( CInterfaceStubVtbl *) &_IProcessLauncher2StubVtbl,

     ( CInterfaceStubVtbl *) &_IAppBundleWebStubVtbl,

@@ -4848,6 +4991,7 @@
     "IGoogleUpdate3Web",

     "IPolicyStatus3",

     "IPolicyStatus",

+    "IAppVersionWeb",

     "ICurrentState",

     "IProcessLauncher2",

     "IAppBundleWeb",

@@ -4865,6 +5009,7 @@
     &IID_IDispatch,

     &IID_IDispatch,

     &IID_IDispatch,

+    &IID_IDispatch,

     0,

     &IID_IDispatch,

     &IID_IDispatch,

@@ -4879,11 +5024,11 @@
 {

     IID_BS_LOOKUP_SETUP

 

-    IID_BS_LOOKUP_INITIAL_TEST( _updater_legacy_idl, 11, 8 )

+    IID_BS_LOOKUP_INITIAL_TEST( _updater_legacy_idl, 12, 8 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 4 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 2 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 1 )

-    IID_BS_LOOKUP_RETURN_RESULT( _updater_legacy_idl, 11, *pIndex )

+    IID_BS_LOOKUP_RETURN_RESULT( _updater_legacy_idl, 12, *pIndex )

     

 }

 

@@ -4894,7 +5039,7 @@
     (const PCInterfaceName * ) & _updater_legacy_idl_InterfaceNamesList,

     (const IID ** ) & _updater_legacy_idl_BaseIIDList,

     & _updater_legacy_idl_IID_Lookup, 

-    11,

+    12,

     2,

     0, /* table of [async_uuid] interfaces */

     0, /* Filler1 */

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h
index 9ec3afe..5aab30c 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.h
@@ -53,6 +53,13 @@
 

 /* Forward Declarations */ 

 

+#ifndef __IAppVersionWeb_FWD_DEFINED__

+#define __IAppVersionWeb_FWD_DEFINED__

+typedef interface IAppVersionWeb IAppVersionWeb;

+

+#endif 	/* __IAppVersionWeb_FWD_DEFINED__ */

+

+

 #ifndef __ICurrentState_FWD_DEFINED__

 #define __ICurrentState_FWD_DEFINED__

 typedef interface ICurrentState ICurrentState;

@@ -202,6 +209,13 @@
 #endif 	/* __ProcessLauncherClass_FWD_DEFINED__ */

 

 

+#ifndef __IAppVersionWeb_FWD_DEFINED__

+#define __IAppVersionWeb_FWD_DEFINED__

+typedef interface IAppVersionWeb IAppVersionWeb;

+

+#endif 	/* __IAppVersionWeb_FWD_DEFINED__ */

+

+

 #ifndef __ICurrentState_FWD_DEFINED__

 #define __ICurrentState_FWD_DEFINED__

 typedef interface ICurrentState ICurrentState;

@@ -326,6 +340,168 @@
 extern RPC_IF_HANDLE __MIDL_itf_updater_legacy_idl_0000_0000_v0_0_c_ifspec;

 extern RPC_IF_HANDLE __MIDL_itf_updater_legacy_idl_0000_0000_v0_0_s_ifspec;

 

+#ifndef __IAppVersionWeb_INTERFACE_DEFINED__

+#define __IAppVersionWeb_INTERFACE_DEFINED__

+

+/* interface IAppVersionWeb */

+/* [unique][helpstring][uuid][dual][object] */ 

+

+

+EXTERN_C const IID IID_IAppVersionWeb;

+

+#if defined(__cplusplus) && !defined(CINTERFACE)

+    

+    MIDL_INTERFACE("AA10D17D-7A09-48AC-B1E4-F124937E3D26")

+    IAppVersionWeb : public IDispatch

+    {

+    public:

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_version( 

+            /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000) = 0;

+        

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageCount( 

+            /* [retval][out] */ long *count) = 0;

+        

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageWeb( 

+            /* [in] */ long index,

+            /* [retval][out] */ IDispatch **package) = 0;

+        

+    };

+    

+    

+#else 	/* C style interface */

+

+    typedef struct IAppVersionWebVtbl

+    {

+        BEGIN_INTERFACE

+        

+        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)

+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 

+            IAppVersionWeb * This,

+            /* [in] */ REFIID riid,

+            /* [annotation][iid_is][out] */ 

+            _COM_Outptr_  void **ppvObject);

+        

+        DECLSPEC_XFGVIRT(IUnknown, AddRef)

+        ULONG ( STDMETHODCALLTYPE *AddRef )( 

+            IAppVersionWeb * This);

+        

+        DECLSPEC_XFGVIRT(IUnknown, Release)

+        ULONG ( STDMETHODCALLTYPE *Release )( 

+            IAppVersionWeb * This);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetTypeInfoCount)

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 

+            IAppVersionWeb * This,

+            /* [out] */ UINT *pctinfo);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetTypeInfo)

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 

+            IAppVersionWeb * This,

+            /* [in] */ UINT iTInfo,

+            /* [in] */ LCID lcid,

+            /* [out] */ ITypeInfo **ppTInfo);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetIDsOfNames)

+        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 

+            IAppVersionWeb * This,

+            /* [in] */ REFIID riid,

+            /* [size_is][in] */ LPOLESTR *rgszNames,

+            /* [range][in] */ UINT cNames,

+            /* [in] */ LCID lcid,

+            /* [size_is][out] */ DISPID *rgDispId);

+        

+        DECLSPEC_XFGVIRT(IDispatch, Invoke)

+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 

+            IAppVersionWeb * This,

+            /* [annotation][in] */ 

+            _In_  DISPID dispIdMember,

+            /* [annotation][in] */ 

+            _In_  REFIID riid,

+            /* [annotation][in] */ 

+            _In_  LCID lcid,

+            /* [annotation][in] */ 

+            _In_  WORD wFlags,

+            /* [annotation][out][in] */ 

+            _In_  DISPPARAMS *pDispParams,

+            /* [annotation][out] */ 

+            _Out_opt_  VARIANT *pVarResult,

+            /* [annotation][out] */ 

+            _Out_opt_  EXCEPINFO *pExcepInfo,

+            /* [annotation][out] */ 

+            _Out_opt_  UINT *puArgErr);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_version)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_version )( 

+            IAppVersionWeb * This,

+            /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_packageCount)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageCount )( 

+            IAppVersionWeb * This,

+            /* [retval][out] */ long *count);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_packageWeb)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageWeb )( 

+            IAppVersionWeb * This,

+            /* [in] */ long index,

+            /* [retval][out] */ IDispatch **package);

+        

+        END_INTERFACE

+    } IAppVersionWebVtbl;

+

+    interface IAppVersionWeb

+    {

+        CONST_VTBL struct IAppVersionWebVtbl *lpVtbl;

+    };

+

+    

+

+#ifdef COBJMACROS

+

+

+#define IAppVersionWeb_QueryInterface(This,riid,ppvObject)	\

+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

+

+#define IAppVersionWeb_AddRef(This)	\

+    ( (This)->lpVtbl -> AddRef(This) ) 

+

+#define IAppVersionWeb_Release(This)	\

+    ( (This)->lpVtbl -> Release(This) ) 

+

+

+#define IAppVersionWeb_GetTypeInfoCount(This,pctinfo)	\

+    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) 

+

+#define IAppVersionWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\

+    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) 

+

+#define IAppVersionWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\

+    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) 

+

+#define IAppVersionWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\

+    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) 

+

+

+#define IAppVersionWeb_get_version(This,__MIDL__IAppVersionWeb0000)	\

+    ( (This)->lpVtbl -> get_version(This,__MIDL__IAppVersionWeb0000) ) 

+

+#define IAppVersionWeb_get_packageCount(This,count)	\

+    ( (This)->lpVtbl -> get_packageCount(This,count) ) 

+

+#define IAppVersionWeb_get_packageWeb(This,index,package)	\

+    ( (This)->lpVtbl -> get_packageWeb(This,index,package) ) 

+

+#endif /* COBJMACROS */

+

+

+#endif 	/* C style interface */

+

+

+

+

+#endif 	/* __IAppVersionWeb_INTERFACE_DEFINED__ */

+

+

 #ifndef __ICurrentState_INTERFACE_DEFINED__

 #define __ICurrentState_INTERFACE_DEFINED__

 

@@ -2767,6 +2943,7 @@
 

 

 

+

 EXTERN_C const IID LIBID_UpdaterLegacyLib;

 

 EXTERN_C const CLSID CLSID_GoogleUpdate3WebUserClass;

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb
index 4313862..0883ce1 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl.tlb
Binary files differ
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c
index af06e66d..de7f4137 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_i.c
@@ -67,6 +67,9 @@
 

 #endif // !_MIDL_USE_GUIDDEF_

 

+MIDL_DEFINE_GUID(IID, IID_IAppVersionWeb,0xAA10D17D,0x7A09,0x48AC,0xB1,0xE4,0xF1,0x24,0x93,0x7E,0x3D,0x26);

+

+

 MIDL_DEFINE_GUID(IID, IID_ICurrentState,0xA643508B,0xB1E3,0x4457,0x97,0x69,0x32,0xC9,0x53,0xBD,0x1D,0x57);

 

 

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_p.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_p.c
index 1f00065..743d5d9f 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_p.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x64/updater_legacy_idl_p.c
@@ -47,7 +47,7 @@
 #include "updater_legacy_idl.h"

 

 #define TYPE_FORMAT_STRING_SIZE   1089                              

-#define PROC_FORMAT_STRING_SIZE   2919                              

+#define PROC_FORMAT_STRING_SIZE   2963                              

 #define EXPR_FORMAT_STRING_SIZE   1                                 

 #define TRANSMIT_AS_TABLE_SIZE    0            

 #define WIRE_MARSHAL_TABLE_SIZE   2            

@@ -135,6 +135,13 @@
 extern const MIDL_STUB_DESC Object_StubDesc;

 

 

+extern const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo;

+extern const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo;

+

+

+extern const MIDL_STUB_DESC Object_StubDesc;

+

+

 extern const MIDL_SERVER_INFO ICurrentState_ServerInfo;

 extern const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo;

 

@@ -220,13 +227,16 @@
         0,

         {

 

-	/* Procedure get_lastCheckPeriodMinutes */

+	/* Procedure get_updaterVersion */

 

 

-	/* Procedure get_status */

+	/* Procedure get_source */

 

 

-	/* Procedure get_stateValue */

+	/* Procedure get_appId */

+

+

+	/* Procedure get_version */

 

 			0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

@@ -234,28 +244,33 @@
 /*  6 */	NdrFcShort( 0x7 ),	/* 7 */

 /*  8 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 10 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 12 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 14 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 12 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 14 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

 /* 16 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 18 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 18 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 20 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 22 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 24 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter minutes */

+	/* Parameter version */

 

 

-	/* Parameter __MIDL__IAppCommandWeb0000 */

+	/* Parameter __MIDL__IPolicyStatusValue0000 */

 

 

-	/* Parameter __MIDL__ICurrentState0000 */

+	/* Parameter __MIDL__IAppWeb0000 */

 

-/* 26 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Parameter __MIDL__IAppVersionWeb0000 */

+

+/* 26 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 28 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 30 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 30 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

 

 	/* Return value */

 

@@ -270,10 +285,10 @@
 /* 36 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_value */

+	/* Procedure get_exitCode */

 

 

-	/* Procedure get_availableVersion */

+	/* Procedure get_packageCount */

 

 /* 38 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

@@ -281,24 +296,25 @@
 /* 44 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 46 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 48 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 50 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 52 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 50 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 52 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

 /* 54 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 56 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 56 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 58 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 60 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 62 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter __MIDL__IPolicyStatusValue0001 */

+	/* Parameter __MIDL__IAppCommandWeb0001 */

 

 

-	/* Parameter __MIDL__ICurrentState0001 */

+	/* Parameter count */

 

-/* 64 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 64 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 66 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 68 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 68 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -310,17 +326,17 @@
 /* 74 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_bytesDownloaded */

+	/* Procedure get_packageWeb */

 

 /* 76 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 78 */	NdrFcLong( 0x0 ),	/* 0 */

 /* 82 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 84 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 86 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 88 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 90 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 84 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 86 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 88 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 90 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 92 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 94 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -328,18 +344,146 @@
 /* 98 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 100 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter __MIDL__ICurrentState0002 */

+	/* Parameter index */

 

-/* 102 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 102 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 104 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 106 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter package */

+

+/* 108 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 110 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 112 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

 	/* Return value */

 

-/* 108 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 110 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 112 */	0x8,		/* FC_LONG */

+/* 114 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 116 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 118 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_lastCheckPeriodMinutes */

+

+

+	/* Procedure get_status */

+

+

+	/* Procedure get_stateValue */

+

+/* 120 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 122 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 126 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 128 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 130 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 132 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 134 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 136 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 138 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 140 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 144 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter minutes */

+

+

+	/* Parameter __MIDL__IAppCommandWeb0000 */

+

+

+	/* Parameter __MIDL__ICurrentState0000 */

+

+/* 146 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 148 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 150 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+

+	/* Return value */

+

+

+	/* Return value */

+

+/* 152 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 154 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 156 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_value */

+

+

+	/* Procedure get_availableVersion */

+

+/* 158 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 160 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 164 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 166 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 168 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 170 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 172 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 174 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 176 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 178 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 180 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 182 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter __MIDL__IPolicyStatusValue0001 */

+

+

+	/* Parameter __MIDL__ICurrentState0001 */

+

+/* 184 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 186 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 188 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+

+	/* Return value */

+

+/* 190 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 192 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 194 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_bytesDownloaded */

+

+/* 196 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 198 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 202 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 204 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 208 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 210 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 212 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 214 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 216 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 218 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 220 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter __MIDL__ICurrentState0002 */

+

+/* 222 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 224 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 226 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 228 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 230 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 232 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheSizeLimitMBytes */

@@ -347,30 +491,30 @@
 

 	/* Procedure get_totalBytesToDownload */

 

-/* 114 */	0x33,		/* FC_AUTO_HANDLE */

+/* 234 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 116 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 120 */	NdrFcShort( 0xa ),	/* 10 */

-/* 122 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 124 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 126 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 128 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 236 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 240 */	NdrFcShort( 0xa ),	/* 10 */

+/* 242 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 244 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 246 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 248 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 130 */	0xa,		/* 10 */

+/* 250 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 132 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 134 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 136 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 138 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 252 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 256 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 258 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter limit */

 

 

 	/* Parameter __MIDL__ICurrentState0003 */

 

-/* 140 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 142 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 144 */	0x8,		/* FC_LONG */

+/* 260 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 262 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 264 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -378,9 +522,9 @@
 

 	/* Return value */

 

-/* 146 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 148 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 150 */	0x8,		/* FC_LONG */

+/* 266 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 268 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 270 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheExpirationTimeDays */

@@ -388,30 +532,30 @@
 

 	/* Procedure get_downloadTimeRemainingMs */

 

-/* 152 */	0x33,		/* FC_AUTO_HANDLE */

+/* 272 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 154 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 158 */	NdrFcShort( 0xb ),	/* 11 */

-/* 160 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 162 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 164 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 166 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 274 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 278 */	NdrFcShort( 0xb ),	/* 11 */

+/* 280 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 282 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 284 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 286 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 168 */	0xa,		/* 10 */

+/* 288 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 170 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 172 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 174 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 176 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 290 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 292 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 294 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 296 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter days */

 

 

 	/* Parameter __MIDL__ICurrentState0004 */

 

-/* 178 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 180 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 182 */	0x8,		/* FC_LONG */

+/* 298 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 300 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 302 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -419,41 +563,41 @@
 

 	/* Return value */

 

-/* 184 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 186 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 188 */	0x8,		/* FC_LONG */

+/* 304 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 306 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 308 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nextRetryTime */

 

-/* 190 */	0x33,		/* FC_AUTO_HANDLE */

+/* 310 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 192 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 196 */	NdrFcShort( 0xc ),	/* 12 */

-/* 198 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 200 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 202 */	NdrFcShort( 0x2c ),	/* 44 */

-/* 204 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 312 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 316 */	NdrFcShort( 0xc ),	/* 12 */

+/* 318 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 320 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 322 */	NdrFcShort( 0x2c ),	/* 44 */

+/* 324 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 206 */	0xa,		/* 10 */

+/* 326 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 208 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 210 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 212 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 214 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 328 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 330 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 332 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 334 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0005 */

 

-/* 216 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 218 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 220 */	0xb,		/* FC_HYPER */

+/* 336 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 338 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 340 */	0xb,		/* FC_HYPER */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 222 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 224 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 226 */	0x8,		/* FC_LONG */

+/* 342 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 344 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 346 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_length */

@@ -461,30 +605,30 @@
 

 	/* Procedure get_installProgress */

 

-/* 228 */	0x33,		/* FC_AUTO_HANDLE */

+/* 348 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 230 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 234 */	NdrFcShort( 0xd ),	/* 13 */

-/* 236 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 238 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 240 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 242 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 350 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 354 */	NdrFcShort( 0xd ),	/* 13 */

+/* 356 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 358 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 360 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 362 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 244 */	0xa,		/* 10 */

+/* 364 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 246 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 248 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 250 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 252 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 366 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 368 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 370 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 372 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter index */

 

 

 	/* Parameter __MIDL__ICurrentState0006 */

 

-/* 254 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 256 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 258 */	0x8,		/* FC_LONG */

+/* 374 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 376 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 378 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -492,437 +636,437 @@
 

 	/* Return value */

 

-/* 260 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 262 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 264 */	0x8,		/* FC_LONG */

+/* 380 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 382 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 384 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installTimeRemainingMs */

 

-/* 266 */	0x33,		/* FC_AUTO_HANDLE */

+/* 386 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 268 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 272 */	NdrFcShort( 0xe ),	/* 14 */

-/* 274 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 276 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 278 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 280 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 388 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 392 */	NdrFcShort( 0xe ),	/* 14 */

+/* 394 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 396 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 398 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 400 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 282 */	0xa,		/* 10 */

+/* 402 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 284 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 286 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 288 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 290 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 404 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 406 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 410 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0007 */

 

-/* 292 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 294 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 296 */	0x8,		/* FC_LONG */

+/* 412 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 414 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 416 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 298 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 300 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 302 */	0x8,		/* FC_LONG */

+/* 418 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 420 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 422 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_isCanceled */

 

-/* 304 */	0x33,		/* FC_AUTO_HANDLE */

+/* 424 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 306 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 310 */	NdrFcShort( 0xf ),	/* 15 */

-/* 312 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 314 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 316 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 318 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 426 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 430 */	NdrFcShort( 0xf ),	/* 15 */

+/* 432 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 434 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 436 */	NdrFcShort( 0x22 ),	/* 34 */

+/* 438 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 320 */	0xa,		/* 10 */

+/* 440 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 322 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 324 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 326 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 328 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 442 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 444 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 446 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 448 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter is_canceled */

 

-/* 330 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 332 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 334 */	0x6,		/* FC_SHORT */

+/* 450 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 452 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 454 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 336 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 338 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 340 */	0x8,		/* FC_LONG */

+/* 456 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 458 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 460 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_errorCode */

 

-/* 342 */	0x33,		/* FC_AUTO_HANDLE */

+/* 462 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 344 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 348 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 350 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 352 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 354 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 356 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 464 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 468 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 470 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 472 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 474 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 476 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 358 */	0xa,		/* 10 */

+/* 478 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 360 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 362 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 364 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 366 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 480 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 482 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 484 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 486 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0008 */

 

-/* 368 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 370 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 372 */	0x8,		/* FC_LONG */

+/* 488 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 490 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 492 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 374 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 376 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 378 */	0x8,		/* FC_LONG */

+/* 494 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 496 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 498 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_extraCode1 */

 

-/* 380 */	0x33,		/* FC_AUTO_HANDLE */

+/* 500 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 382 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 386 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 388 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 390 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 392 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 394 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 502 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 506 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 508 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 510 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 512 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 514 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 396 */	0xa,		/* 10 */

+/* 516 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 398 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 400 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 402 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 404 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 518 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 520 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 522 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 524 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0009 */

 

-/* 406 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 408 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 410 */	0x8,		/* FC_LONG */

+/* 526 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 528 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 530 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 412 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 414 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 416 */	0x8,		/* FC_LONG */

+/* 532 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 534 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 536 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_completionMessage */

 

-/* 418 */	0x33,		/* FC_AUTO_HANDLE */

+/* 538 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 420 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 424 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 426 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 428 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 430 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 432 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 540 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 544 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 546 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 548 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 550 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 552 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 434 */	0xa,		/* 10 */

+/* 554 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 436 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 438 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 440 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 442 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 556 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 558 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 560 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 562 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0010 */

 

-/* 444 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 446 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 448 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 564 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 566 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 568 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 450 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 452 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 454 */	0x8,		/* FC_LONG */

+/* 570 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 572 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 574 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installerResultCode */

 

-/* 456 */	0x33,		/* FC_AUTO_HANDLE */

+/* 576 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 458 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 462 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 464 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 466 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 468 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 470 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 578 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 582 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 584 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 586 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 588 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 590 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 472 */	0xa,		/* 10 */

+/* 592 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 474 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 476 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 478 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 480 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 594 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 596 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 598 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 600 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0011 */

 

-/* 482 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 484 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 486 */	0x8,		/* FC_LONG */

+/* 602 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 604 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 606 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 488 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 490 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 492 */	0x8,		/* FC_LONG */

+/* 608 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 610 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 612 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installerResultExtraCode1 */

 

-/* 494 */	0x33,		/* FC_AUTO_HANDLE */

+/* 614 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 496 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 500 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 502 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 504 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 506 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 508 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 616 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 620 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 622 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 624 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 626 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 628 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 510 */	0xa,		/* 10 */

+/* 630 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 512 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 514 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 516 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 518 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 632 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 636 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 638 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0012 */

 

-/* 520 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 522 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 524 */	0x8,		/* FC_LONG */

+/* 640 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 642 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 644 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 526 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 528 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 530 */	0x8,		/* FC_LONG */

+/* 646 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 648 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 650 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallLaunchCommandLine */

 

-/* 532 */	0x33,		/* FC_AUTO_HANDLE */

+/* 652 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 534 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 538 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 540 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 542 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 544 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 546 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 654 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 658 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 660 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 662 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 664 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 666 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 548 */	0xa,		/* 10 */

+/* 668 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 550 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 552 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 554 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 556 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 670 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 672 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 674 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 676 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0013 */

 

-/* 558 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 560 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 562 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 678 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 680 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 682 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 564 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 566 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 568 */	0x8,		/* FC_LONG */

+/* 684 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 686 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 688 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallUrl */

 

-/* 570 */	0x33,		/* FC_AUTO_HANDLE */

+/* 690 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 572 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 576 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 578 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 580 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 582 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 584 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 692 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 696 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 698 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 700 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 702 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 704 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 586 */	0xa,		/* 10 */

+/* 706 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 588 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 590 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 592 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 594 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 708 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 710 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 712 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 714 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0014 */

 

-/* 596 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 598 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 600 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 716 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 718 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 720 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 602 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 604 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 606 */	0x8,		/* FC_LONG */

+/* 722 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 724 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 726 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallAction */

 

-/* 608 */	0x33,		/* FC_AUTO_HANDLE */

+/* 728 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 610 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 614 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 616 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 618 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 620 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 622 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 730 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 734 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 736 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 738 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 740 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 742 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 624 */	0xa,		/* 10 */

+/* 744 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 628 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 630 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 632 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 746 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 748 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 750 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 752 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0015 */

 

-/* 634 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 636 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 638 */	0x8,		/* FC_LONG */

+/* 754 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 756 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 758 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 640 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 642 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 644 */	0x8,		/* FC_LONG */

+/* 760 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 762 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 764 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createAppBundleWeb */

 

-/* 646 */	0x33,		/* FC_AUTO_HANDLE */

+/* 766 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 648 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 652 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 654 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 656 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 658 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 660 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 768 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 772 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 774 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 776 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 778 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 780 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 662 */	0xa,		/* 10 */

+/* 782 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 664 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 666 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 668 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 784 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 786 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 788 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 790 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter app_bundle_web */

 

-/* 672 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 674 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 676 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 792 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 794 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 796 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 678 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 680 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 682 */	0x8,		/* FC_LONG */

+/* 798 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 800 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 802 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createApp */

 

-/* 684 */	0x33,		/* FC_AUTO_HANDLE */

+/* 804 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 686 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 690 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 692 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 694 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 696 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 698 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 806 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 810 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 812 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 814 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 816 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 818 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x5,		/* 5 */

-/* 700 */	0xa,		/* 10 */

+/* 820 */	0xa,		/* 10 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 702 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 704 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 706 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 708 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 822 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 824 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 826 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 828 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter app_guid */

 

-/* 710 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 712 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 714 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 830 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 832 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 834 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter brand_code */

 

-/* 716 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 718 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 720 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 836 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 838 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 840 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter language */

 

-/* 722 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 724 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 726 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 842 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 844 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 846 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter ap */

 

-/* 728 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 730 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 732 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 848 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 850 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 852 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 734 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 736 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 738 */	0x8,		/* FC_LONG */

+/* 854 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 856 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 858 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createInstalledApp */

 

-/* 740 */	0x33,		/* FC_AUTO_HANDLE */

+/* 860 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 742 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 746 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 748 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 750 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 752 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 754 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 862 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 866 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 868 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 870 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 872 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 874 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 756 */	0xa,		/* 10 */

+/* 876 */	0xa,		/* 10 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 758 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 760 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 762 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 764 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 878 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 880 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 882 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 884 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter app_id */

 

-/* 766 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 768 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 770 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 886 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 888 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 890 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 772 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 774 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 776 */	0x8,		/* FC_LONG */

+/* 892 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 894 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 896 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure refreshPolicies */

@@ -930,30 +1074,30 @@
 

 	/* Procedure createAllInstalledApps */

 

-/* 778 */	0x33,		/* FC_AUTO_HANDLE */

+/* 898 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 780 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 784 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 786 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 788 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 790 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 792 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 900 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 904 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 906 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 908 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 910 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 912 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 794 */	0xa,		/* 10 */

+/* 914 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 796 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 798 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 800 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 802 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 916 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 918 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 920 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 922 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 804 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 806 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 808 */	0x8,		/* FC_LONG */

+/* 924 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 926 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 928 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_conflictSource */

@@ -961,544 +1105,427 @@
 

 	/* Procedure get_displayLanguage */

 

-/* 810 */	0x33,		/* FC_AUTO_HANDLE */

+/* 930 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 812 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 816 */	NdrFcShort( 0xa ),	/* 10 */

-/* 818 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 820 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 822 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 824 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 932 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 936 */	NdrFcShort( 0xa ),	/* 10 */

+/* 938 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 940 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 942 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 944 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 826 */	0xa,		/* 10 */

+/* 946 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 828 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 830 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 832 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 834 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 948 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 950 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 952 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 954 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IPolicyStatusValue0002 */

 

 

 	/* Parameter __MIDL__IAppBundleWeb0000 */

 

-/* 836 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 838 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 840 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 956 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 958 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 960 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 842 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 844 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 846 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure put_displayLanguage */

-

-/* 848 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 850 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 854 */	NdrFcShort( 0xb ),	/* 11 */

-/* 856 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 858 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 860 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 862 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 864 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 866 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 868 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 870 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 872 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter __MIDL__IAppBundleWeb0001 */

-

-/* 874 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 876 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 878 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Return value */

-

-/* 880 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 882 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 884 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure put_parentHWND */

-

-/* 886 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 888 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 892 */	NdrFcShort( 0xc ),	/* 12 */

-/* 894 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 896 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 898 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 900 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 902 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 904 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 906 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 908 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 910 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter hwnd */

-

-/* 912 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 914 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 916 */	0xb9,		/* FC_UINT3264 */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 918 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 920 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 922 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_appWeb */

-

-/* 924 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 926 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 930 */	NdrFcShort( 0xe ),	/* 14 */

-/* 932 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 934 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 936 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 938 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 940 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 942 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 944 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 946 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 948 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter index */

-

-/* 950 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 952 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 954 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter app_web */

-

-/* 956 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 958 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 960 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

 /* 962 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 964 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 964 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 966 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure initialize */

+	/* Procedure put_displayLanguage */

 

 /* 968 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 970 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 974 */	NdrFcShort( 0xf ),	/* 15 */

-/* 976 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 974 */	NdrFcShort( 0xb ),	/* 11 */

+/* 976 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 978 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 980 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 982 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x1,		/* 1 */

+/* 982 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x2,		/* 2 */

 /* 984 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 986 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 988 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 988 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 990 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 992 */	NdrFcShort( 0x0 ),	/* 0 */

 

+	/* Parameter __MIDL__IAppBundleWeb0001 */

+

+/* 994 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 996 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 998 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

 	/* Return value */

 

-/* 994 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 996 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 998 */	0x8,		/* FC_LONG */

+/* 1000 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1002 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1004 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure put_parentHWND */

+

+/* 1006 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1008 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1012 */	NdrFcShort( 0xc ),	/* 12 */

+/* 1014 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1016 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1018 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1020 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 1022 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1024 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1026 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1028 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1030 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter hwnd */

+

+/* 1032 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1034 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1036 */	0xb9,		/* FC_UINT3264 */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 1038 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1040 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1042 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_appWeb */

+

+/* 1044 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1046 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1050 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1052 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1054 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1056 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1058 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 1060 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1062 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1064 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1066 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1068 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter index */

+

+/* 1070 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1072 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1074 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter app_web */

+

+/* 1076 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1078 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1080 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1082 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1084 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1086 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure initialize */

+

+/* 1088 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1090 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1094 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1096 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1098 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1100 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1102 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x1,		/* 1 */

+/* 1104 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1106 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1108 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1110 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1112 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Return value */

+

+/* 1114 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1116 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1118 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure checkForUpdate */

 

-/* 1000 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1120 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1002 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1006 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1008 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1010 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1012 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1014 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1122 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1126 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1128 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1130 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1132 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1134 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1016 */	0xa,		/* 10 */

+/* 1136 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1018 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1020 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1022 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1024 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1138 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1140 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1144 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1026 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1028 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1030 */	0x8,		/* FC_LONG */

+/* 1146 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1148 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1150 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure download */

 

-/* 1032 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1152 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1034 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1038 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 1040 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1042 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1044 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1046 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1154 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1158 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 1160 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1162 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1164 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1166 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1048 */	0xa,		/* 10 */

+/* 1168 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1050 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1052 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1054 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1170 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1172 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1174 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1176 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1058 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1060 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1062 */	0x8,		/* FC_LONG */

+/* 1178 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1180 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1182 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure install */

 

-/* 1064 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1184 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1066 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1070 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 1072 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1074 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1076 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1078 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1186 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1190 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 1192 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1194 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1196 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1198 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1080 */	0xa,		/* 10 */

+/* 1200 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1082 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1084 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1086 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1088 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1202 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1204 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1208 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1090 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1092 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1094 */	0x8,		/* FC_LONG */

+/* 1210 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1212 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1214 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure pause */

 

-/* 1096 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1216 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1098 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1102 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 1104 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1106 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1108 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1110 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1218 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1222 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 1224 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1226 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1228 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1230 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1112 */	0xa,		/* 10 */

+/* 1232 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1114 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1116 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1118 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1120 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1234 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1236 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1238 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1240 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1122 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1124 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1126 */	0x8,		/* FC_LONG */

+/* 1242 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1244 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1246 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure resume */

 

-/* 1128 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1248 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1130 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1134 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 1136 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1138 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1140 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1142 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1250 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1254 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 1256 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1258 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1260 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1262 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1144 */	0xa,		/* 10 */

+/* 1264 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1146 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1148 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1150 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1152 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1266 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1268 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1270 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1272 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1154 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1156 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1158 */	0x8,		/* FC_LONG */

+/* 1274 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1276 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1278 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure cancel */

 

-/* 1160 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1280 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1162 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1166 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 1168 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1170 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1172 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1174 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1282 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1286 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 1288 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1290 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1292 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1294 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1176 */	0xa,		/* 10 */

+/* 1296 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1178 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1180 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1182 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1184 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Return value */

-

-/* 1186 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1188 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1190 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure downloadPackage */

-

-/* 1192 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1194 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1198 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 1200 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1202 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1204 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1206 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1208 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1210 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1212 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1214 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1216 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter app_id */

-

-/* 1218 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1220 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1222 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter package_name */

-

-/* 1224 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1226 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1228 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Return value */

-

-/* 1230 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1232 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1234 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_currentState */

-

-/* 1236 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1238 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1242 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 1244 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1246 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1248 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1250 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1252 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1254 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1256 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1258 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1260 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter current_state */

-

-/* 1262 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 1264 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1266 */	NdrFcShort( 0x3fe ),	/* Type Offset=1022 */

-

-	/* Return value */

-

-/* 1268 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1270 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1272 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_updaterVersion */

-

-

-	/* Procedure get_source */

-

-

-	/* Procedure get_appId */

-

-/* 1274 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1276 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1280 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 1282 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1284 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1286 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1288 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1290 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1292 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1294 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1296 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1298 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter version */

-

-

-	/* Parameter __MIDL__IPolicyStatusValue0000 */

-

-

-	/* Parameter __MIDL__IAppWeb0000 */

-

-/* 1300 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1302 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1304 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

-

-	/* Return value */

-

-

-	/* Return value */

-

+/* 1300 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1302 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1304 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

 /* 1306 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1308 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1308 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 1310 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_currentVersionWeb */

+	/* Procedure downloadPackage */

 

 /* 1312 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1314 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1318 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1320 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1318 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 1320 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 1322 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1324 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1326 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 1326 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 1328 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1330 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1332 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1332 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1334 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1336 */	NdrFcShort( 0x0 ),	/* 0 */

 

+	/* Parameter app_id */

+

+/* 1338 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1340 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1342 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter package_name */

+

+/* 1344 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1346 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1348 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Return value */

+

+/* 1350 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1352 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1354 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentState */

+

+/* 1356 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1358 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1362 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 1364 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1366 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1368 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1370 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1372 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1374 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1376 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1378 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1380 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter current_state */

+

+/* 1382 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 1384 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1386 */	NdrFcShort( 0x3fe ),	/* Type Offset=1022 */

+

+	/* Return value */

+

+/* 1388 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1390 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1392 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentVersionWeb */

+

+/* 1394 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1396 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1400 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1402 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1404 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1406 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1408 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1410 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1412 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1414 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1416 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1418 */	NdrFcShort( 0x0 ),	/* 0 */

+

 	/* Parameter current */

 

-/* 1338 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1340 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1342 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

-/* 1344 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1346 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1348 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_nextVersionWeb */

-

-/* 1350 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1352 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1356 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1358 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1360 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1362 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1364 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1366 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1368 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1370 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1372 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1374 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter next */

-

-/* 1376 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1378 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1380 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

-/* 1382 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1384 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1386 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_command */

-

-/* 1388 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1390 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1394 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1396 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1398 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1400 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1402 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1404 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1406 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1408 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1410 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1412 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter command_id */

-

-/* 1414 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1416 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1418 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter command */

-

 /* 1420 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1422 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1424 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 1422 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1424 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 1426 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1428 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1428 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 1430 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure cancel */

+	/* Procedure get_nextVersionWeb */

 

 /* 1432 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1434 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1438 */	NdrFcShort( 0xb ),	/* 11 */

-/* 1440 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1438 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1440 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 1442 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1444 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1446 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x1,		/* 1 */

+/* 1446 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

 /* 1448 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 1450 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -1506,186 +1533,222 @@
 /* 1454 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1456 */	NdrFcShort( 0x0 ),	/* 0 */

 

+	/* Parameter next */

+

+/* 1458 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1460 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1462 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

 	/* Return value */

 

-/* 1458 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1460 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1462 */	0x8,		/* FC_LONG */

+/* 1464 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1466 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1468 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_command */

+

+/* 1470 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1472 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1476 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1478 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1480 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1482 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1484 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 1486 */	0xa,		/* 10 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+/* 1488 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1490 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1492 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1494 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter command_id */

+

+/* 1496 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1498 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1500 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter command */

+

+/* 1502 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1504 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1506 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1508 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1510 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1512 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure cancel */

+

+/* 1514 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1516 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1520 */	NdrFcShort( 0xb ),	/* 11 */

+/* 1522 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1524 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1526 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1528 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x1,		/* 1 */

+/* 1530 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1532 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1534 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1536 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1538 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Return value */

+

+/* 1540 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1542 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1544 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_currentState */

 

-/* 1464 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1546 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1466 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1470 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1472 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1474 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1476 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1478 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1548 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1552 */	NdrFcShort( 0xc ),	/* 12 */

+/* 1554 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1556 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1558 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1560 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1480 */	0xa,		/* 10 */

+/* 1562 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1482 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1484 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1486 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1488 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1564 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1566 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1568 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1570 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter current_state */

 

-/* 1490 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1492 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1494 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 1572 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1574 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1576 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 1496 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1498 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1500 */	0x8,		/* FC_LONG */

+/* 1578 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1580 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1582 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure launch */

 

-/* 1502 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1584 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1504 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1508 */	NdrFcShort( 0xd ),	/* 13 */

-/* 1510 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1512 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1514 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1516 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1586 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1590 */	NdrFcShort( 0xd ),	/* 13 */

+/* 1592 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1594 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1596 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1598 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1518 */	0xa,		/* 10 */

+/* 1600 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1520 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1522 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1524 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1526 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1602 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1604 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1606 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1608 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1528 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1530 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1532 */	0x8,		/* FC_LONG */

+/* 1610 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1612 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1614 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure uninstall */

 

-/* 1534 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1616 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1536 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1540 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1542 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1544 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1546 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1548 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1618 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1622 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1624 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1626 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1628 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1630 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1550 */	0xa,		/* 10 */

+/* 1632 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1552 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1554 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1556 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1558 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1636 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1638 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1640 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1560 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1562 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1564 */	0x8,		/* FC_LONG */

+/* 1642 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1644 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1646 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_serverInstallDataIndex */

 

-/* 1566 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1648 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1568 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1572 */	NdrFcShort( 0xf ),	/* 15 */

-/* 1574 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1576 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1578 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1580 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1650 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1654 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1656 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1658 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1660 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1662 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1582 */	0xa,		/* 10 */

+/* 1664 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1584 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1586 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1588 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1590 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1666 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1668 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1672 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IAppWeb0001 */

 

-/* 1592 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1594 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1596 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1674 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1676 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1678 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1598 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1600 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1602 */	0x8,		/* FC_LONG */

+/* 1680 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1682 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1684 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure put_serverInstallDataIndex */

 

-/* 1604 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1686 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1606 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1610 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1612 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1614 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1616 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1618 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1688 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1692 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1694 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1696 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1698 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1700 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1620 */	0xa,		/* 10 */

+/* 1702 */	0xa,		/* 10 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1622 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1624 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1628 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1704 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1706 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1708 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1710 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IAppWeb0002 */

 

-/* 1630 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1632 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1634 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 1712 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1714 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1716 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 1636 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1638 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1640 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_exitCode */

-

-/* 1642 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1644 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1648 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1650 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1652 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1654 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1656 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 1658 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1660 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1662 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1664 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1666 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter __MIDL__IAppCommandWeb0001 */

-

-/* 1668 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1670 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1672 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1674 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1676 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1678 */	0x8,		/* FC_LONG */

+/* 1718 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1720 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1722 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_downloadPreferenceGroupPolicy */

@@ -1693,217 +1756,179 @@
 

 	/* Procedure get_output */

 

-/* 1680 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1724 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1682 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1686 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1688 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1690 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1692 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1694 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1726 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1730 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1732 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1734 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1736 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1738 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1696 */	0xa,		/* 10 */

+/* 1740 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1698 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1700 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1702 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1704 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1742 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1744 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1746 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1748 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter pref */

 

 

 	/* Parameter __MIDL__IAppCommandWeb0002 */

 

-/* 1706 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1708 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1710 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1750 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1752 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1754 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 1712 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1714 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1716 */	0x8,		/* FC_LONG */

+/* 1756 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1758 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1760 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure execute */

 

-/* 1718 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1762 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1720 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1724 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1726 */	NdrFcShort( 0x58 ),	/* X64 Stack size/offset = 88 */

-/* 1728 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1730 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1732 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1764 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1768 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1770 */	NdrFcShort( 0x58 ),	/* X64 Stack size/offset = 88 */

+/* 1772 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1774 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1776 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0xa,		/* 10 */

-/* 1734 */	0xa,		/* 10 */

+/* 1778 */	0xa,		/* 10 */

 			0x85,		/* Ext Flags:  new corr desc, srv corr check, has big byval param */

-/* 1736 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1738 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1740 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1742 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1780 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1782 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1784 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1786 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter substitution1 */

 

-/* 1744 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1746 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1748 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1788 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1790 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1792 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution2 */

 

-/* 1750 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1752 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1754 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1794 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1796 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1798 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution3 */

 

-/* 1756 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1758 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1760 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1800 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1802 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1804 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution4 */

 

-/* 1762 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1764 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1766 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1806 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1808 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1810 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution5 */

 

-/* 1768 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1770 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1772 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1812 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1814 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 1816 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution6 */

 

-/* 1774 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1776 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 1778 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1818 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1820 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 1822 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution7 */

 

-/* 1780 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1782 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 1784 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1824 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1826 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 1828 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution8 */

 

-/* 1786 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1788 */	NdrFcShort( 0x40 ),	/* X64 Stack size/offset = 64 */

-/* 1790 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1830 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1832 */	NdrFcShort( 0x40 ),	/* X64 Stack size/offset = 64 */

+/* 1834 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Parameter substitution9 */

 

-/* 1792 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1794 */	NdrFcShort( 0x48 ),	/* X64 Stack size/offset = 72 */

-/* 1796 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

+/* 1836 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1838 */	NdrFcShort( 0x48 ),	/* X64 Stack size/offset = 72 */

+/* 1840 */	NdrFcShort( 0x410 ),	/* Type Offset=1040 */

 

 	/* Return value */

 

-/* 1798 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1800 */	NdrFcShort( 0x50 ),	/* X64 Stack size/offset = 80 */

-/* 1802 */	0x8,		/* FC_LONG */

+/* 1842 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1844 */	NdrFcShort( 0x50 ),	/* X64 Stack size/offset = 80 */

+/* 1846 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_updatesSuppressedTimes */

 

-/* 1804 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1848 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1806 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1810 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1812 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 1814 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1816 */	NdrFcShort( 0x76 ),	/* 118 */

-/* 1818 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1850 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1854 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1856 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 1858 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1860 */	NdrFcShort( 0x76 ),	/* 118 */

+/* 1862 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x5,		/* 5 */

-/* 1820 */	0xa,		/* 10 */

+/* 1864 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1822 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1824 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1826 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1828 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1866 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1868 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1870 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1872 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter start_hour */

 

-/* 1830 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1832 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1834 */	0x8,		/* FC_LONG */

+/* 1874 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1876 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1878 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter start_min */

 

-/* 1836 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1838 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1840 */	0x8,		/* FC_LONG */

+/* 1880 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1882 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1884 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter duration_min */

 

-/* 1842 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1844 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1846 */	0x8,		/* FC_LONG */

+/* 1886 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1888 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1890 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter are_updates_suppressed */

 

-/* 1848 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1850 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1852 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1854 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1856 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1858 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_effectivePolicyForAppInstalls */

-

-/* 1860 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1862 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1866 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1868 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1870 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1872 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1874 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1876 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1878 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1880 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1882 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1884 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter app_id */

-

-/* 1886 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1888 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1890 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter policy */

-

 /* 1892 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1894 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1896 */	0x8,		/* FC_LONG */

+/* 1894 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1896 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 1898 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1900 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1900 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

 /* 1902 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_effectivePolicyForAppUpdates */

+	/* Procedure get_effectivePolicyForAppInstalls */

 

 /* 1904 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1906 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1910 */	NdrFcShort( 0xd ),	/* 13 */

+/* 1910 */	NdrFcShort( 0xc ),	/* 12 */

 /* 1912 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 1914 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1916 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -1936,20 +1961,20 @@
 /* 1946 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetVersionPrefix */

+	/* Procedure get_effectivePolicyForAppUpdates */

 

 /* 1948 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1950 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1954 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1954 */	NdrFcShort( 0xd ),	/* 13 */

 /* 1956 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 1958 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1960 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1962 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+/* 1960 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1962 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 1964 */	0xa,		/* 10 */

-			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

-/* 1966 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+/* 1966 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1968 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1970 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1972 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -1960,11 +1985,12 @@
 /* 1976 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 1978 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter prefix */

+	/* Parameter policy */

 

-/* 1980 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1980 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 1982 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1984 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1984 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -1973,20 +1999,20 @@
 /* 1990 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRollbackToTargetVersionAllowed */

+	/* Procedure get_targetVersionPrefix */

 

 /* 1992 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1994 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1998 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1998 */	NdrFcShort( 0xe ),	/* 14 */

 /* 2000 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2002 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2004 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 2006 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2004 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2006 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2008 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2010 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

+/* 2010 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2012 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2014 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2016 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -1997,12 +2023,11 @@
 /* 2020 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2022 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter rollback_allowed */

+	/* Parameter prefix */

 

-/* 2024 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2024 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 2026 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2028 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2028 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

@@ -2011,181 +2036,181 @@
 /* 2034 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hasConflict */

+	/* Procedure get_isRollbackToTargetVersionAllowed */

 

 /* 2036 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2038 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2042 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2044 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2042 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2044 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2046 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2048 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 2050 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 2050 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 2052 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2054 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2056 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2058 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2060 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter has_conflict */

+	/* Parameter app_id */

 

-/* 2062 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2062 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

 /* 2064 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2066 */	0x6,		/* FC_SHORT */

+/* 2066 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter rollback_allowed */

+

+/* 2068 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2070 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2072 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2068 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2070 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2072 */	0x8,		/* FC_LONG */

+/* 2074 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2076 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2078 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_hasConflict */

+

+/* 2080 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2082 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2086 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 2088 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2090 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2092 */	NdrFcShort( 0x22 ),	/* 34 */

+/* 2094 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 2096 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2098 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2100 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2104 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter has_conflict */

+

+/* 2106 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2108 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2110 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 2112 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2114 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2116 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_conflictValue */

 

-/* 2074 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2118 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2076 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2080 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2082 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2084 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2086 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2088 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2120 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2124 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2126 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2128 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2130 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2132 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2090 */	0xa,		/* 10 */

+/* 2134 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2092 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2094 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2096 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2098 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2136 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2138 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2140 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2142 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IPolicyStatusValue0003 */

 

-/* 2100 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2102 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2104 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 2144 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2146 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2148 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2106 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2108 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2110 */	0x8,		/* FC_LONG */

+/* 2150 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2152 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2154 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_lastCheckedTime */

 

-/* 2112 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2156 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2114 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2118 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2120 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2122 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2124 */	NdrFcShort( 0x2c ),	/* 44 */

-/* 2126 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2158 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2162 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2164 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2166 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2168 */	NdrFcShort( 0x2c ),	/* 44 */

+/* 2170 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2128 */	0xa,		/* 10 */

+/* 2172 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2130 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2132 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2134 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2136 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2174 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2176 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2178 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2180 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter last_checked */

 

-/* 2138 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2140 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2142 */	0xc,		/* FC_DOUBLE */

+/* 2182 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2184 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2186 */	0xc,		/* FC_DOUBLE */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2144 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2146 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2148 */	0x8,		/* FC_LONG */

+/* 2188 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2190 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2192 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_lastCheckPeriodMinutes */

 

-/* 2150 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2194 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2152 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2156 */	NdrFcShort( 0xa ),	/* 10 */

-/* 2158 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2160 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2162 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2164 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2196 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2200 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2202 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2204 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2206 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2208 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2166 */	0xa,		/* 10 */

+/* 2210 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2168 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2170 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2172 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2174 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter value */

-

-/* 2176 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2178 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2180 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

-

-	/* Return value */

-

-/* 2182 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2184 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2186 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_updatesSuppressedTimes */

-

-/* 2188 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2190 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2194 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2196 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2198 */	NdrFcShort( 0x1a ),	/* 26 */

-/* 2200 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2202 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2204 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2206 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2208 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2210 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2212 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2214 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2216 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2218 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2214 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2216 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2218 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

-

-	/* Parameter are_updates_suppressed */

-

-/* 2220 */	NdrFcShort( 0x148 ),	/* Flags:  in, base type, simple ref, */

-/* 2222 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2224 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2220 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2222 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2224 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

 /* 2226 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2228 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2228 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 2230 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_downloadPreferenceGroupPolicy */

+	/* Procedure get_updatesSuppressedTimes */

 

 /* 2232 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2234 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2238 */	NdrFcShort( 0xc ),	/* 12 */

-/* 2240 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2242 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2238 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2240 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2242 */	NdrFcShort( 0x1a ),	/* 26 */

 /* 2244 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2246 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 2248 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2250 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2199,211 +2224,212 @@
 /* 2260 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2262 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

+	/* Parameter are_updates_suppressed */

+

+/* 2264 */	NdrFcShort( 0x148 ),	/* Flags:  in, base type, simple ref, */

+/* 2266 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2268 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 2264 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2266 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2268 */	0x8,		/* FC_LONG */

+/* 2270 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2272 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2274 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_downloadPreferenceGroupPolicy */

+

+/* 2276 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2278 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2282 */	NdrFcShort( 0xc ),	/* 12 */

+/* 2284 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2286 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2288 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2290 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 2292 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2294 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2296 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2298 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2300 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter value */

+

+/* 2302 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2304 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2306 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+

+	/* Return value */

+

+/* 2308 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2310 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2312 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheSizeLimitMBytes */

 

-/* 2270 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2314 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2272 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2276 */	NdrFcShort( 0xd ),	/* 13 */

-/* 2278 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2280 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2282 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2284 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2316 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2320 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2322 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2324 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2326 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2328 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2286 */	0xa,		/* 10 */

+/* 2330 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2288 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2290 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2292 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2294 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2332 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2334 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2336 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2338 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2296 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2298 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2300 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2340 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2342 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2344 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2302 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2304 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2306 */	0x8,		/* FC_LONG */

+/* 2346 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2348 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2350 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheExpirationTimeDays */

 

-/* 2308 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2352 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2310 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2314 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2316 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2318 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2320 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2322 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2354 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2358 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2360 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2362 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2364 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2366 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2324 */	0xa,		/* 10 */

+/* 2368 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2326 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2328 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2330 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2332 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2370 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2372 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2374 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2376 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2334 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2336 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2338 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2378 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2380 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2382 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2340 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2342 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2344 */	0x8,		/* FC_LONG */

+/* 2384 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2386 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2388 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyMode */

 

-/* 2346 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2390 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2348 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2352 */	NdrFcShort( 0xf ),	/* 15 */

-/* 2354 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2356 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2358 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2360 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2392 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2396 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2398 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2400 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2402 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2404 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2362 */	0xa,		/* 10 */

+/* 2406 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2364 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2366 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2368 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2370 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2410 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2412 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2414 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2372 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2374 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2376 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2416 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2418 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2420 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2378 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2380 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2382 */	0x8,		/* FC_LONG */

+/* 2422 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2424 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2426 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyPacUrl */

 

-/* 2384 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2428 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2386 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2390 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2392 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2394 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2396 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2398 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2430 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2434 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2436 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2438 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2440 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2442 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2400 */	0xa,		/* 10 */

+/* 2444 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2402 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2404 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2406 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2446 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2448 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2450 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2452 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2410 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2412 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2414 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

+/* 2454 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2456 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2458 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2416 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2418 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2420 */	0x8,		/* FC_LONG */

+/* 2460 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2462 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2464 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyServer */

 

-/* 2422 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2466 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2424 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2428 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 2430 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2432 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2434 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2436 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2468 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2472 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 2474 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2476 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2478 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2480 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2438 */	0xa,		/* 10 */

+/* 2482 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2440 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2442 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2444 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2446 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter value */

-

-/* 2448 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2450 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2452 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

-

-	/* Return value */

-

-/* 2454 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2456 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2458 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_effectivePolicyForAppInstalls */

-

-/* 2460 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2462 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2466 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 2468 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2470 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2472 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2474 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2476 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2478 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2480 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2482 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2484 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter app_id */

-

-/* 2486 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 2488 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2490 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 2486 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2488 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2490 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

 /* 2492 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2494 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2494 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2496 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

 /* 2498 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2500 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2500 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 2502 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_effectivePolicyForAppUpdates */

+	/* Procedure get_effectivePolicyForAppInstalls */

 

 /* 2504 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2506 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2510 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 2510 */	NdrFcShort( 0x12 ),	/* 18 */

 /* 2512 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2514 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2516 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2435,12 +2461,12 @@
 /* 2546 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetVersionPrefix */

+	/* Procedure get_effectivePolicyForAppUpdates */

 

 /* 2548 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2550 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2554 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 2554 */	NdrFcShort( 0x13 ),	/* 19 */

 /* 2556 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2558 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2560 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2472,12 +2498,12 @@
 /* 2590 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRollbackToTargetVersionAllowed */

+	/* Procedure get_targetVersionPrefix */

 

 /* 2592 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2594 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2598 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 2598 */	NdrFcShort( 0x14 ),	/* 20 */

 /* 2600 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2602 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2604 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2509,12 +2535,12 @@
 /* 2634 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetChannel */

+	/* Procedure get_isRollbackToTargetVersionAllowed */

 

 /* 2636 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2638 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2642 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2642 */	NdrFcShort( 0x15 ),	/* 21 */

 /* 2644 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2646 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2648 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2546,30 +2572,29 @@
 /* 2678 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_forceInstallApps */

+	/* Procedure get_targetChannel */

 

 /* 2680 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2682 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2686 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 2686 */	NdrFcShort( 0x16 ),	/* 22 */

 /* 2688 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2690 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2690 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2692 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2694 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2694 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2696 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2698 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2700 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2700 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2702 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2704 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter is_machine */

+	/* Parameter app_id */

 

-/* 2706 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2706 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

 /* 2708 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2710 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2710 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter value */

 

@@ -2584,17 +2609,17 @@
 /* 2722 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchCmdLine */

+	/* Procedure get_forceInstallApps */

 

 /* 2724 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2726 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2730 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2732 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2734 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2730 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 2732 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2734 */	NdrFcShort( 0x6 ),	/* 6 */

 /* 2736 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2738 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 2738 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 2740 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2742 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2602,68 +2627,68 @@
 /* 2746 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2748 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cmd_line */

+	/* Parameter is_machine */

 

-/* 2750 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2750 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2752 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2754 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+/* 2754 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

+	/* Parameter value */

+

+/* 2756 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2758 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2760 */	NdrFcShort( 0x41e ),	/* Type Offset=1054 */

 

 	/* Return value */

 

-/* 2756 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2758 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2760 */	0x8,		/* FC_LONG */

+/* 2762 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2764 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2766 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchBrowser */

+	/* Procedure LaunchCmdLine */

 

-/* 2762 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2768 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2764 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2768 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2770 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2772 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2774 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2776 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2778 */	0xa,		/* 10 */

+/* 2770 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2774 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 2776 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2778 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2780 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2782 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 2784 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2780 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2782 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2784 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2786 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2788 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2790 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2792 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter browser_type */

-

-/* 2788 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2790 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2792 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter url */

+	/* Parameter cmd_line */

 

 /* 2794 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2796 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2796 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2798 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

 	/* Return value */

 

 /* 2800 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2802 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2802 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 2804 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchCmdElevated */

+	/* Procedure LaunchBrowser */

 

 /* 2806 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2808 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2812 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 2814 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2812 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 2814 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2816 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2818 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2818 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2820 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x5,		/* 5 */

+			0x3,		/* 3 */

 /* 2822 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2824 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2671,89 +2696,127 @@
 /* 2828 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2830 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter app_guid */

+	/* Parameter browser_type */

 

-/* 2832 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2832 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2834 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2836 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+/* 2836 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter cmd_id */

+	/* Parameter url */

 

 /* 2838 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 2840 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 2842 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

-	/* Parameter caller_proc_id */

+	/* Return value */

 

-/* 2844 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2844 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 2846 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 2848 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure LaunchCmdElevated */

+

+/* 2850 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2852 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2856 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2858 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2860 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2862 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2864 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x5,		/* 5 */

+/* 2866 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2868 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2870 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2872 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2874 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter app_guid */

+

+/* 2876 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2878 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2880 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+

+	/* Parameter cmd_id */

+

+/* 2882 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2884 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2886 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+

+	/* Parameter caller_proc_id */

+

+/* 2888 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2890 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2892 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Parameter proc_handle */

 

-/* 2850 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2852 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2854 */	0xb9,		/* FC_UINT3264 */

+/* 2894 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2896 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2898 */	0xb9,		/* FC_UINT3264 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2856 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2858 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2860 */	0x8,		/* FC_LONG */

+/* 2900 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2902 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2904 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure LaunchCmdLineEx */

 

-/* 2862 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2906 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2864 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2868 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2870 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 2872 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2874 */	NdrFcShort( 0x5c ),	/* 92 */

-/* 2876 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2908 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2912 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2914 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2916 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2918 */	NdrFcShort( 0x5c ),	/* 92 */

+/* 2920 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x5,		/* 5 */

-/* 2878 */	0xa,		/* 10 */

+/* 2922 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2880 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2882 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2884 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2886 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2924 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2926 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2928 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2930 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter cmd_line */

 

-/* 2888 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2890 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2892 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

+/* 2932 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2934 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2936 */	NdrFcShort( 0x43a ),	/* Type Offset=1082 */

 

 	/* Parameter server_proc_id */

 

-/* 2894 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2896 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2898 */	0x8,		/* FC_LONG */

+/* 2938 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2940 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2942 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter proc_handle */

 

-/* 2900 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2902 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2904 */	0xb9,		/* FC_UINT3264 */

+/* 2944 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2946 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2948 */	0xb9,		/* FC_UINT3264 */

 			0x0,		/* 0 */

 

 	/* Parameter stdout_handle */

 

-/* 2906 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2908 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2910 */	0xb9,		/* FC_UINT3264 */

+/* 2950 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2952 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2954 */	0xb9,		/* FC_UINT3264 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2912 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2914 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2916 */	0x8,		/* FC_LONG */

+/* 2956 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2958 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2960 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 			0x0

@@ -2766,68 +2829,68 @@
         {

 			NdrFcShort( 0x0 ),	/* 0 */

 /*  2 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/*  4 */	0x8,		/* FC_LONG */

-			0x5c,		/* FC_PAD */

-/*  6 */	

 			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/*  8 */	NdrFcShort( 0x1c ),	/* Offset= 28 (36) */

-/* 10 */	

+/*  4 */	NdrFcShort( 0x1c ),	/* Offset= 28 (32) */

+/*  6 */	

 			0x13, 0x0,	/* FC_OP */

-/* 12 */	NdrFcShort( 0xe ),	/* Offset= 14 (26) */

-/* 14 */	

+/*  8 */	NdrFcShort( 0xe ),	/* Offset= 14 (22) */

+/* 10 */	

 			0x1b,		/* FC_CARRAY */

 			0x1,		/* 1 */

-/* 16 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 18 */	0x9,		/* Corr desc: FC_ULONG */

+/* 12 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 14 */	0x9,		/* Corr desc: FC_ULONG */

 			0x0,		/*  */

-/* 20 */	NdrFcShort( 0xfffc ),	/* -4 */

-/* 22 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

-/* 24 */	0x6,		/* FC_SHORT */

+/* 16 */	NdrFcShort( 0xfffc ),	/* -4 */

+/* 18 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 20 */	0x6,		/* FC_SHORT */

 			0x5b,		/* FC_END */

-/* 26 */	

+/* 22 */	

 			0x17,		/* FC_CSTRUCT */

 			0x3,		/* 3 */

-/* 28 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 30 */	NdrFcShort( 0xfff0 ),	/* Offset= -16 (14) */

-/* 32 */	0x8,		/* FC_LONG */

+/* 24 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 26 */	NdrFcShort( 0xfff0 ),	/* Offset= -16 (10) */

+/* 28 */	0x8,		/* FC_LONG */

 			0x8,		/* FC_LONG */

-/* 34 */	0x5c,		/* FC_PAD */

+/* 30 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 36 */	0xb4,		/* FC_USER_MARSHAL */

+/* 32 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

+/* 34 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 36 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 38 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 40 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 42 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 44 */	NdrFcShort( 0xffde ),	/* Offset= -34 (10) */

+/* 40 */	NdrFcShort( 0xffde ),	/* Offset= -34 (6) */

+/* 42 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 44 */	0x8,		/* FC_LONG */

+			0x5c,		/* FC_PAD */

 /* 46 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 48 */	0xb,		/* FC_HYPER */

-			0x5c,		/* FC_PAD */

-/* 50 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 52 */	0x6,		/* FC_SHORT */

-			0x5c,		/* FC_PAD */

-/* 54 */	

 			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 56 */	NdrFcShort( 0x2 ),	/* Offset= 2 (58) */

-/* 58 */	

+/* 48 */	NdrFcShort( 0x2 ),	/* Offset= 2 (50) */

+/* 50 */	

 			0x2f,		/* FC_IP */

 			0x5a,		/* FC_CONSTANT_IID */

-/* 60 */	NdrFcLong( 0x20400 ),	/* 132096 */

-/* 64 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 66 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 68 */	0xc0,		/* 192 */

+/* 52 */	NdrFcLong( 0x20400 ),	/* 132096 */

+/* 56 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 58 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 60 */	0xc0,		/* 192 */

 			0x0,		/* 0 */

-/* 70 */	0x0,		/* 0 */

+/* 62 */	0x0,		/* 0 */

 			0x0,		/* 0 */

-/* 72 */	0x0,		/* 0 */

+/* 64 */	0x0,		/* 0 */

 			0x0,		/* 0 */

-/* 74 */	0x0,		/* 0 */

+/* 66 */	0x0,		/* 0 */

 			0x46,		/* 70 */

+/* 68 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 70 */	0xb,		/* FC_HYPER */

+			0x5c,		/* FC_PAD */

+/* 72 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 74 */	0x6,		/* FC_SHORT */

+			0x5c,		/* FC_PAD */

 /* 76 */	

 			0x12, 0x0,	/* FC_UP */

-/* 78 */	NdrFcShort( 0xffcc ),	/* Offset= -52 (26) */

+/* 78 */	NdrFcShort( 0xffc8 ),	/* Offset= -56 (22) */

 /* 80 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

 /* 82 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2871,11 +2934,11 @@
 /* 166 */	NdrFcLong( 0x7 ),	/* 7 */

 /* 170 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */

 /* 172 */	NdrFcLong( 0x8 ),	/* 8 */

-/* 176 */	NdrFcShort( 0xff5a ),	/* Offset= -166 (10) */

+/* 176 */	NdrFcShort( 0xff56 ),	/* Offset= -170 (6) */

 /* 178 */	NdrFcLong( 0xd ),	/* 13 */

 /* 182 */	NdrFcShort( 0xdc ),	/* Offset= 220 (402) */

 /* 184 */	NdrFcLong( 0x9 ),	/* 9 */

-/* 188 */	NdrFcShort( 0xff7e ),	/* Offset= -130 (58) */

+/* 188 */	NdrFcShort( 0xff76 ),	/* Offset= -138 (50) */

 /* 190 */	NdrFcLong( 0x2000 ),	/* 8192 */

 /* 194 */	NdrFcShort( 0xe2 ),	/* Offset= 226 (420) */

 /* 196 */	NdrFcLong( 0x24 ),	/* 36 */

@@ -3009,7 +3072,7 @@
 /* 510 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

 /* 512 */	

 			0x13, 0x0,	/* FC_OP */

-/* 514 */	NdrFcShort( 0xfe18 ),	/* Offset= -488 (26) */

+/* 514 */	NdrFcShort( 0xfe14 ),	/* Offset= -492 (22) */

 /* 516 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

 /* 518 */	

@@ -3065,7 +3128,7 @@
 /* 586 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

 /* 588 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 590 */	NdrFcShort( 0xfdec ),	/* Offset= -532 (58) */

+/* 590 */	NdrFcShort( 0xfde4 ),	/* Offset= -540 (50) */

 /* 592 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

 /* 594 */	

@@ -3370,13 +3433,13 @@
 /* 958 */	NdrFcShort( 0xfdce ),	/* Offset= -562 (396) */

 /* 960 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

-/* 962 */	NdrFcShort( 0xfc48 ),	/* Offset= -952 (10) */

+/* 962 */	NdrFcShort( 0xfc44 ),	/* Offset= -956 (6) */

 /* 964 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

 /* 966 */	NdrFcShort( 0xfdcc ),	/* Offset= -564 (402) */

 /* 968 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

-/* 970 */	NdrFcShort( 0xfc70 ),	/* Offset= -912 (58) */

+/* 970 */	NdrFcShort( 0xfc68 ),	/* Offset= -920 (50) */

 /* 972 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

 /* 974 */	NdrFcShort( 0xfdd6 ),	/* Offset= -554 (420) */

@@ -3516,6 +3579,80 @@
    GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */

 

 

+/* Object interface: IAppVersionWeb, ver. 0.0,

+   GUID={0xAA10D17D,0x7A09,0x48AC,{0xB1,0xE4,0xF1,0x24,0x93,0x7E,0x3D,0x26}} */

+

+#pragma code_seg(".orpc")

+static const unsigned short IAppVersionWeb_FormatStringOffsetTable[] =

+    {

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    0,

+    38,

+    76

+    };

+

+static const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo =

+    {

+    &Object_StubDesc,

+    updater_legacy_idl__MIDL_ProcFormatString.Format,

+    &IAppVersionWeb_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0

+    };

+

+

+static const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo = 

+    {

+    &Object_StubDesc,

+    0,

+    updater_legacy_idl__MIDL_ProcFormatString.Format,

+    &IAppVersionWeb_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0,

+    0};

+CINTERFACE_PROXY_VTABLE(10) _IAppVersionWebProxyVtbl = 

+{

+    &IAppVersionWeb_ProxyInfo,

+    &IID_IAppVersionWeb,

+    IUnknown_QueryInterface_Proxy,

+    IUnknown_AddRef_Proxy,

+    IUnknown_Release_Proxy ,

+    0 /* IDispatch::GetTypeInfoCount */ ,

+    0 /* IDispatch::GetTypeInfo */ ,

+    0 /* IDispatch::GetIDsOfNames */ ,

+    0 /* IDispatch_Invoke_Proxy */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_version */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageCount */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageWeb */

+};

+

+

+static const PRPC_STUB_FUNCTION IAppVersionWeb_table[] =

+{

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2

+};

+

+CInterfaceStubVtbl _IAppVersionWebStubVtbl =

+{

+    &IID_IAppVersionWeb,

+    &IAppVersionWeb_ServerInfo,

+    10,

+    &IAppVersionWeb_table[-3],

+    CStdStubBuffer_DELEGATING_METHODS

+};

+

+

 /* Object interface: ICurrentState, ver. 0.0,

    GUID={0xA643508B,0xB1E3,0x4457,{0x97,0x69,0x32,0xC9,0x53,0xBD,0x1D,0x57}} */

 

@@ -3526,23 +3663,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    38,

-    76,

-    114,

-    152,

-    190,

-    228,

-    266,

-    304,

-    342,

-    380,

-    418,

-    456,

-    494,

-    532,

-    570,

-    608

+    120,

+    158,

+    196,

+    234,

+    272,

+    310,

+    348,

+    386,

+    424,

+    462,

+    500,

+    538,

+    576,

+    614,

+    652,

+    690,

+    728

     };

 

 static const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo =

@@ -3642,7 +3779,7 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    646

+    766

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3Web_ProxyInfo =

@@ -3710,23 +3847,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    684,

-    740,

-    778,

-    810,

-    848,

-    886,

-    228,

-    924,

+    804,

+    860,

+    898,

+    930,

     968,

-    1000,

-    1032,

-    1064,

-    1096,

-    1128,

-    1160,

-    1192,

-    1236

+    1006,

+    348,

+    1044,

+    1088,

+    1120,

+    1152,

+    1184,

+    1216,

+    1248,

+    1280,

+    1312,

+    1356

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppBundleWeb_ProxyInfo =

@@ -3826,16 +3963,16 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1274,

-    1312,

-    1350,

-    1388,

+    0,

+    1394,

     1432,

-    1464,

-    1502,

-    1534,

-    1566,

-    1604

+    1470,

+    1514,

+    1546,

+    1584,

+    1616,

+    1648,

+    1686

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppWeb_ProxyInfo =

@@ -3921,10 +4058,10 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    1642,

-    1680,

-    1718

+    120,

+    38,

+    1724,

+    1762

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppCommandWeb_ProxyInfo =

@@ -3998,15 +4135,15 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    1804,

-    1680,

-    114,

-    152,

-    1860,

+    120,

+    1848,

+    1724,

+    234,

+    272,

     1904,

     1948,

-    1992

+    1992,

+    2036

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus_ProxyInfo =

@@ -4090,11 +4227,11 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1274,

-    38,

-    2036,

-    810,

-    2074

+    0,

+    158,

+    2080,

+    930,

+    2118

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatusValue_ProxyInfo =

@@ -4170,22 +4307,22 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1274,

-    2112,

-    778,

-    2150,

-    2188,

+    0,

+    2156,

+    898,

+    2194,

     2232,

-    2270,

-    2308,

-    2346,

-    2384,

-    2422,

-    2460,

+    2276,

+    2314,

+    2352,

+    2390,

+    2428,

+    2466,

     2504,

     2548,

     2592,

-    2636

+    2636,

+    2680

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus2_ProxyInfo =

@@ -4283,23 +4420,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1274,

-    2112,

-    778,

-    2150,

-    2188,

+    0,

+    2156,

+    898,

+    2194,

     2232,

-    2270,

-    2308,

-    2346,

-    2384,

-    2422,

-    2460,

+    2276,

+    2314,

+    2352,

+    2390,

+    2428,

+    2466,

     2504,

     2548,

     2592,

     2636,

-    2680

+    2680,

+    2724

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus3_ProxyInfo =

@@ -4395,9 +4532,9 @@
 #pragma code_seg(".orpc")

 static const unsigned short IProcessLauncher_FormatStringOffsetTable[] =

     {

-    2724,

-    2762,

-    2806

+    2768,

+    2806,

+    2850

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher_ProxyInfo =

@@ -4449,10 +4586,10 @@
 #pragma code_seg(".orpc")

 static const unsigned short IProcessLauncher2_FormatStringOffsetTable[] =

     {

-    2724,

-    2762,

+    2768,

     2806,

-    2862

+    2850,

+    2906

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher2_ProxyInfo =

@@ -4530,6 +4667,7 @@
     ( CInterfaceProxyVtbl *) &_IGoogleUpdate3WebProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IPolicyStatus3ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IPolicyStatusProxyVtbl,

+    ( CInterfaceProxyVtbl *) &_IAppVersionWebProxyVtbl,

     ( CInterfaceProxyVtbl *) &_ICurrentStateProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IProcessLauncher2ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAppBundleWebProxyVtbl,

@@ -4546,6 +4684,7 @@
     ( CInterfaceStubVtbl *) &_IGoogleUpdate3WebStubVtbl,

     ( CInterfaceStubVtbl *) &_IPolicyStatus3StubVtbl,

     ( CInterfaceStubVtbl *) &_IPolicyStatusStubVtbl,

+    ( CInterfaceStubVtbl *) &_IAppVersionWebStubVtbl,

     ( CInterfaceStubVtbl *) &_ICurrentStateStubVtbl,

     ( CInterfaceStubVtbl *) &_IProcessLauncher2StubVtbl,

     ( CInterfaceStubVtbl *) &_IAppBundleWebStubVtbl,

@@ -4562,6 +4701,7 @@
     "IGoogleUpdate3Web",

     "IPolicyStatus3",

     "IPolicyStatus",

+    "IAppVersionWeb",

     "ICurrentState",

     "IProcessLauncher2",

     "IAppBundleWeb",

@@ -4579,6 +4719,7 @@
     &IID_IDispatch,

     &IID_IDispatch,

     &IID_IDispatch,

+    &IID_IDispatch,

     0,

     &IID_IDispatch,

     &IID_IDispatch,

@@ -4593,11 +4734,11 @@
 {

     IID_BS_LOOKUP_SETUP

 

-    IID_BS_LOOKUP_INITIAL_TEST( _updater_legacy_idl, 11, 8 )

+    IID_BS_LOOKUP_INITIAL_TEST( _updater_legacy_idl, 12, 8 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 4 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 2 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 1 )

-    IID_BS_LOOKUP_RETURN_RESULT( _updater_legacy_idl, 11, *pIndex )

+    IID_BS_LOOKUP_RETURN_RESULT( _updater_legacy_idl, 12, *pIndex )

     

 }

 

@@ -4608,7 +4749,7 @@
     (const PCInterfaceName * ) & _updater_legacy_idl_InterfaceNamesList,

     (const IID ** ) & _updater_legacy_idl_BaseIIDList,

     & _updater_legacy_idl_IID_Lookup, 

-    11,

+    12,

     2,

     0, /* table of [async_uuid] interfaces */

     0, /* Filler1 */

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h
index 5857e98..4d69fc1 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.h
@@ -53,6 +53,13 @@
 

 /* Forward Declarations */ 

 

+#ifndef __IAppVersionWeb_FWD_DEFINED__

+#define __IAppVersionWeb_FWD_DEFINED__

+typedef interface IAppVersionWeb IAppVersionWeb;

+

+#endif 	/* __IAppVersionWeb_FWD_DEFINED__ */

+

+

 #ifndef __ICurrentState_FWD_DEFINED__

 #define __ICurrentState_FWD_DEFINED__

 typedef interface ICurrentState ICurrentState;

@@ -202,6 +209,13 @@
 #endif 	/* __ProcessLauncherClass_FWD_DEFINED__ */

 

 

+#ifndef __IAppVersionWeb_FWD_DEFINED__

+#define __IAppVersionWeb_FWD_DEFINED__

+typedef interface IAppVersionWeb IAppVersionWeb;

+

+#endif 	/* __IAppVersionWeb_FWD_DEFINED__ */

+

+

 #ifndef __ICurrentState_FWD_DEFINED__

 #define __ICurrentState_FWD_DEFINED__

 typedef interface ICurrentState ICurrentState;

@@ -326,6 +340,168 @@
 extern RPC_IF_HANDLE __MIDL_itf_updater_legacy_idl_0000_0000_v0_0_c_ifspec;

 extern RPC_IF_HANDLE __MIDL_itf_updater_legacy_idl_0000_0000_v0_0_s_ifspec;

 

+#ifndef __IAppVersionWeb_INTERFACE_DEFINED__

+#define __IAppVersionWeb_INTERFACE_DEFINED__

+

+/* interface IAppVersionWeb */

+/* [unique][helpstring][uuid][dual][object] */ 

+

+

+EXTERN_C const IID IID_IAppVersionWeb;

+

+#if defined(__cplusplus) && !defined(CINTERFACE)

+    

+    MIDL_INTERFACE("AA10D17D-7A09-48AC-B1E4-F124937E3D26")

+    IAppVersionWeb : public IDispatch

+    {

+    public:

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_version( 

+            /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000) = 0;

+        

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageCount( 

+            /* [retval][out] */ long *count) = 0;

+        

+        virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageWeb( 

+            /* [in] */ long index,

+            /* [retval][out] */ IDispatch **package) = 0;

+        

+    };

+    

+    

+#else 	/* C style interface */

+

+    typedef struct IAppVersionWebVtbl

+    {

+        BEGIN_INTERFACE

+        

+        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)

+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 

+            IAppVersionWeb * This,

+            /* [in] */ REFIID riid,

+            /* [annotation][iid_is][out] */ 

+            _COM_Outptr_  void **ppvObject);

+        

+        DECLSPEC_XFGVIRT(IUnknown, AddRef)

+        ULONG ( STDMETHODCALLTYPE *AddRef )( 

+            IAppVersionWeb * This);

+        

+        DECLSPEC_XFGVIRT(IUnknown, Release)

+        ULONG ( STDMETHODCALLTYPE *Release )( 

+            IAppVersionWeb * This);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetTypeInfoCount)

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 

+            IAppVersionWeb * This,

+            /* [out] */ UINT *pctinfo);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetTypeInfo)

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 

+            IAppVersionWeb * This,

+            /* [in] */ UINT iTInfo,

+            /* [in] */ LCID lcid,

+            /* [out] */ ITypeInfo **ppTInfo);

+        

+        DECLSPEC_XFGVIRT(IDispatch, GetIDsOfNames)

+        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 

+            IAppVersionWeb * This,

+            /* [in] */ REFIID riid,

+            /* [size_is][in] */ LPOLESTR *rgszNames,

+            /* [range][in] */ UINT cNames,

+            /* [in] */ LCID lcid,

+            /* [size_is][out] */ DISPID *rgDispId);

+        

+        DECLSPEC_XFGVIRT(IDispatch, Invoke)

+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 

+            IAppVersionWeb * This,

+            /* [annotation][in] */ 

+            _In_  DISPID dispIdMember,

+            /* [annotation][in] */ 

+            _In_  REFIID riid,

+            /* [annotation][in] */ 

+            _In_  LCID lcid,

+            /* [annotation][in] */ 

+            _In_  WORD wFlags,

+            /* [annotation][out][in] */ 

+            _In_  DISPPARAMS *pDispParams,

+            /* [annotation][out] */ 

+            _Out_opt_  VARIANT *pVarResult,

+            /* [annotation][out] */ 

+            _Out_opt_  EXCEPINFO *pExcepInfo,

+            /* [annotation][out] */ 

+            _Out_opt_  UINT *puArgErr);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_version)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_version )( 

+            IAppVersionWeb * This,

+            /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_packageCount)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageCount )( 

+            IAppVersionWeb * This,

+            /* [retval][out] */ long *count);

+        

+        DECLSPEC_XFGVIRT(IAppVersionWeb, get_packageWeb)

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageWeb )( 

+            IAppVersionWeb * This,

+            /* [in] */ long index,

+            /* [retval][out] */ IDispatch **package);

+        

+        END_INTERFACE

+    } IAppVersionWebVtbl;

+

+    interface IAppVersionWeb

+    {

+        CONST_VTBL struct IAppVersionWebVtbl *lpVtbl;

+    };

+

+    

+

+#ifdef COBJMACROS

+

+

+#define IAppVersionWeb_QueryInterface(This,riid,ppvObject)	\

+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

+

+#define IAppVersionWeb_AddRef(This)	\

+    ( (This)->lpVtbl -> AddRef(This) ) 

+

+#define IAppVersionWeb_Release(This)	\

+    ( (This)->lpVtbl -> Release(This) ) 

+

+

+#define IAppVersionWeb_GetTypeInfoCount(This,pctinfo)	\

+    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) 

+

+#define IAppVersionWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\

+    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) 

+

+#define IAppVersionWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\

+    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) 

+

+#define IAppVersionWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\

+    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) 

+

+

+#define IAppVersionWeb_get_version(This,__MIDL__IAppVersionWeb0000)	\

+    ( (This)->lpVtbl -> get_version(This,__MIDL__IAppVersionWeb0000) ) 

+

+#define IAppVersionWeb_get_packageCount(This,count)	\

+    ( (This)->lpVtbl -> get_packageCount(This,count) ) 

+

+#define IAppVersionWeb_get_packageWeb(This,index,package)	\

+    ( (This)->lpVtbl -> get_packageWeb(This,index,package) ) 

+

+#endif /* COBJMACROS */

+

+

+#endif 	/* C style interface */

+

+

+

+

+#endif 	/* __IAppVersionWeb_INTERFACE_DEFINED__ */

+

+

 #ifndef __ICurrentState_INTERFACE_DEFINED__

 #define __ICurrentState_INTERFACE_DEFINED__

 

@@ -2767,6 +2943,7 @@
 

 

 

+

 EXTERN_C const IID LIBID_UpdaterLegacyLib;

 

 EXTERN_C const CLSID CLSID_GoogleUpdate3WebUserClass;

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb
index 12927c6d..3a068fea 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl.tlb
Binary files differ
diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c
index a2f894e..0029c11 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_i.c
@@ -67,6 +67,9 @@
 

 #endif // !_MIDL_USE_GUIDDEF_

 

+MIDL_DEFINE_GUID(IID, IID_IAppVersionWeb,0xAA10D17D,0x7A09,0x48AC,0xB1,0xE4,0xF1,0x24,0x93,0x7E,0x3D,0x26);

+

+

 MIDL_DEFINE_GUID(IID, IID_ICurrentState,0xA643508B,0xB1E3,0x4457,0x97,0x69,0x32,0xC9,0x53,0xBD,0x1D,0x57);

 

 

diff --git a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_p.c b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_p.c
index 0ace28d8..1ac100e 100644
--- a/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_p.c
+++ b/third_party/win_build_output/midl/chrome/updater/app/server/win/x86/updater_legacy_idl_p.c
@@ -50,7 +50,7 @@
 #include "updater_legacy_idl.h"

 

 #define TYPE_FORMAT_STRING_SIZE   1131                              

-#define PROC_FORMAT_STRING_SIZE   2773                              

+#define PROC_FORMAT_STRING_SIZE   2815                              

 #define EXPR_FORMAT_STRING_SIZE   1                                 

 #define TRANSMIT_AS_TABLE_SIZE    0            

 #define WIRE_MARSHAL_TABLE_SIZE   2            

@@ -138,6 +138,13 @@
 extern const MIDL_STUB_DESC Object_StubDesc;

 

 

+extern const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo;

+extern const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo;

+

+

+extern const MIDL_STUB_DESC Object_StubDesc;

+

+

 extern const MIDL_SERVER_INFO ICurrentState_ServerInfo;

 extern const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo;

 

@@ -231,13 +238,16 @@
         0,

         {

 

-	/* Procedure get_lastCheckPeriodMinutes */

+	/* Procedure get_updaterVersion */

 

 

-	/* Procedure get_status */

+	/* Procedure get_source */

 

 

-	/* Procedure get_stateValue */

+	/* Procedure get_appId */

+

+

+	/* Procedure get_version */

 

 			0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

@@ -245,27 +255,32 @@
 /*  6 */	NdrFcShort( 0x7 ),	/* 7 */

 /*  8 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 10 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 12 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 14 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 12 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 14 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

 /* 16 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 18 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 18 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 20 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 22 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter minutes */

+	/* Parameter version */

 

 

-	/* Parameter __MIDL__IAppCommandWeb0000 */

+	/* Parameter __MIDL__IPolicyStatusValue0000 */

 

 

-	/* Parameter __MIDL__ICurrentState0000 */

+	/* Parameter __MIDL__IAppWeb0000 */

 

-/* 24 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Parameter __MIDL__IAppVersionWeb0000 */

+

+/* 24 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 26 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 28 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 28 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

 

 	/* Return value */

 

@@ -280,10 +295,10 @@
 /* 34 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_value */

+	/* Procedure get_exitCode */

 

 

-	/* Procedure get_availableVersion */

+	/* Procedure get_packageCount */

 

 /* 36 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

@@ -291,23 +306,24 @@
 /* 42 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 44 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 46 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 48 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 50 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 48 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 50 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

 /* 52 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 54 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 54 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 56 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 58 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter __MIDL__IPolicyStatusValue0001 */

+	/* Parameter __MIDL__IAppCommandWeb0001 */

 

 

-	/* Parameter __MIDL__ICurrentState0001 */

+	/* Parameter count */

 

-/* 60 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 60 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 62 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 64 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 64 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -319,35 +335,160 @@
 /* 70 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_bytesDownloaded */

+	/* Procedure get_packageWeb */

 

 /* 72 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 74 */	NdrFcLong( 0x0 ),	/* 0 */

 /* 78 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 80 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 82 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 84 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 86 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 80 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 82 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 84 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 86 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 88 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 90 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 92 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 94 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter __MIDL__ICurrentState0002 */

+	/* Parameter index */

 

-/* 96 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 96 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 98 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 100 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter package */

+

+/* 102 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 104 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 106 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

 	/* Return value */

 

-/* 102 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 104 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 106 */	0x8,		/* FC_LONG */

+/* 108 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 110 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 112 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_lastCheckPeriodMinutes */

+

+

+	/* Procedure get_status */

+

+

+	/* Procedure get_stateValue */

+

+/* 114 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 116 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 120 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 122 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 124 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 126 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 128 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 130 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 132 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 134 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 136 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter minutes */

+

+

+	/* Parameter __MIDL__IAppCommandWeb0000 */

+

+

+	/* Parameter __MIDL__ICurrentState0000 */

+

+/* 138 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 140 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 142 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+

+	/* Return value */

+

+

+	/* Return value */

+

+/* 144 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 146 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 148 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_value */

+

+

+	/* Procedure get_availableVersion */

+

+/* 150 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 152 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 156 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 158 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 160 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 162 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 164 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 166 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 168 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 170 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 172 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter __MIDL__IPolicyStatusValue0001 */

+

+

+	/* Parameter __MIDL__ICurrentState0001 */

+

+/* 174 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 176 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 178 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+

+	/* Return value */

+

+/* 180 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 182 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 184 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_bytesDownloaded */

+

+/* 186 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 188 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 192 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 194 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 196 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 198 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 200 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 202 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 204 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 208 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter __MIDL__ICurrentState0002 */

+

+/* 210 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 212 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 214 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 216 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 218 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 220 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheSizeLimitMBytes */

@@ -355,29 +496,29 @@
 

 	/* Procedure get_totalBytesToDownload */

 

-/* 108 */	0x33,		/* FC_AUTO_HANDLE */

+/* 222 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 110 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 114 */	NdrFcShort( 0xa ),	/* 10 */

-/* 116 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 118 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 120 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 122 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 224 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 228 */	NdrFcShort( 0xa ),	/* 10 */

+/* 230 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 232 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 234 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 236 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 124 */	0x8,		/* 8 */

+/* 238 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 126 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 128 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 130 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 240 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 242 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 244 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter limit */

 

 

 	/* Parameter __MIDL__ICurrentState0003 */

 

-/* 132 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 134 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 136 */	0x8,		/* FC_LONG */

+/* 246 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 248 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 250 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -385,9 +526,9 @@
 

 	/* Return value */

 

-/* 138 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 140 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 142 */	0x8,		/* FC_LONG */

+/* 252 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 254 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 256 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheExpirationTimeDays */

@@ -395,29 +536,29 @@
 

 	/* Procedure get_downloadTimeRemainingMs */

 

-/* 144 */	0x33,		/* FC_AUTO_HANDLE */

+/* 258 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 146 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 150 */	NdrFcShort( 0xb ),	/* 11 */

-/* 152 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 154 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 156 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 158 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 260 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 264 */	NdrFcShort( 0xb ),	/* 11 */

+/* 266 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 268 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 270 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 272 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 160 */	0x8,		/* 8 */

+/* 274 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 162 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 164 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 166 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 276 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 278 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 280 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter days */

 

 

 	/* Parameter __MIDL__ICurrentState0004 */

 

-/* 168 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 170 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 172 */	0x8,		/* FC_LONG */

+/* 282 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 284 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 286 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -425,40 +566,40 @@
 

 	/* Return value */

 

-/* 174 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 176 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 178 */	0x8,		/* FC_LONG */

+/* 288 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 290 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 292 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nextRetryTime */

 

-/* 180 */	0x33,		/* FC_AUTO_HANDLE */

+/* 294 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 182 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 186 */	NdrFcShort( 0xc ),	/* 12 */

-/* 188 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 190 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 192 */	NdrFcShort( 0x2c ),	/* 44 */

-/* 194 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 296 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 300 */	NdrFcShort( 0xc ),	/* 12 */

+/* 302 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 304 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 306 */	NdrFcShort( 0x2c ),	/* 44 */

+/* 308 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 196 */	0x8,		/* 8 */

+/* 310 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 198 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 200 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 202 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 312 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 314 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 316 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0005 */

 

-/* 204 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 206 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 208 */	0xb,		/* FC_HYPER */

+/* 318 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 320 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 322 */	0xb,		/* FC_HYPER */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 210 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 212 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 214 */	0x8,		/* FC_LONG */

+/* 324 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 326 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 328 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_length */

@@ -466,29 +607,29 @@
 

 	/* Procedure get_installProgress */

 

-/* 216 */	0x33,		/* FC_AUTO_HANDLE */

+/* 330 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 218 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 222 */	NdrFcShort( 0xd ),	/* 13 */

-/* 224 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 226 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 228 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 230 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 332 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 336 */	NdrFcShort( 0xd ),	/* 13 */

+/* 338 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 340 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 342 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 344 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 232 */	0x8,		/* 8 */

+/* 346 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 234 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 236 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 238 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 348 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 350 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 352 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter index */

 

 

 	/* Parameter __MIDL__ICurrentState0006 */

 

-/* 240 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 242 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 244 */	0x8,		/* FC_LONG */

+/* 354 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 356 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 358 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -496,424 +637,424 @@
 

 	/* Return value */

 

-/* 246 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 248 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 250 */	0x8,		/* FC_LONG */

+/* 360 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 362 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 364 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installTimeRemainingMs */

 

-/* 252 */	0x33,		/* FC_AUTO_HANDLE */

+/* 366 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 254 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 258 */	NdrFcShort( 0xe ),	/* 14 */

-/* 260 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 262 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 264 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 266 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 368 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 372 */	NdrFcShort( 0xe ),	/* 14 */

+/* 374 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 376 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 378 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 380 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 268 */	0x8,		/* 8 */

+/* 382 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 270 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 272 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 274 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 384 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 386 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 388 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0007 */

 

-/* 276 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 278 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 280 */	0x8,		/* FC_LONG */

+/* 390 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 392 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 394 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 282 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 284 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 286 */	0x8,		/* FC_LONG */

+/* 396 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 398 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 400 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_isCanceled */

 

-/* 288 */	0x33,		/* FC_AUTO_HANDLE */

+/* 402 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 290 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 294 */	NdrFcShort( 0xf ),	/* 15 */

-/* 296 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 298 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 300 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 302 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 404 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 408 */	NdrFcShort( 0xf ),	/* 15 */

+/* 410 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 412 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 414 */	NdrFcShort( 0x22 ),	/* 34 */

+/* 416 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 304 */	0x8,		/* 8 */

+/* 418 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 306 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 308 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 420 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 422 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 424 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter is_canceled */

 

-/* 312 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 314 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 316 */	0x6,		/* FC_SHORT */

+/* 426 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 428 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 430 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 318 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 320 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 322 */	0x8,		/* FC_LONG */

+/* 432 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 434 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 436 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_errorCode */

 

-/* 324 */	0x33,		/* FC_AUTO_HANDLE */

+/* 438 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 326 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 330 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 332 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 334 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 336 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 338 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 440 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 444 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 446 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 448 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 450 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 452 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 340 */	0x8,		/* 8 */

+/* 454 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 342 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 344 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 456 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 458 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 460 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0008 */

 

-/* 348 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 350 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 352 */	0x8,		/* FC_LONG */

+/* 462 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 464 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 466 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 354 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 356 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 358 */	0x8,		/* FC_LONG */

+/* 468 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 470 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 472 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_extraCode1 */

 

-/* 360 */	0x33,		/* FC_AUTO_HANDLE */

+/* 474 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 362 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 366 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 368 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 370 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 372 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 374 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 476 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 480 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 482 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 484 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 486 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 488 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 376 */	0x8,		/* 8 */

+/* 490 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 378 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 380 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 382 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 492 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 494 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 496 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0009 */

 

-/* 384 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 386 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 388 */	0x8,		/* FC_LONG */

+/* 498 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 500 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 502 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 390 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 392 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 394 */	0x8,		/* FC_LONG */

+/* 504 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 506 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 508 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_completionMessage */

 

-/* 396 */	0x33,		/* FC_AUTO_HANDLE */

+/* 510 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 398 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 402 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 404 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 406 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 408 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 410 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 512 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 516 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 518 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 520 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 522 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 524 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 412 */	0x8,		/* 8 */

+/* 526 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 414 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 416 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 418 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 528 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 530 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 532 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0010 */

 

-/* 420 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 422 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 424 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 534 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 536 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 538 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 426 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 428 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 430 */	0x8,		/* FC_LONG */

+/* 540 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 542 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 544 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installerResultCode */

 

-/* 432 */	0x33,		/* FC_AUTO_HANDLE */

+/* 546 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 434 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 438 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 440 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 442 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 444 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 446 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 548 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 552 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 554 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 556 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 558 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 560 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 448 */	0x8,		/* 8 */

+/* 562 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 450 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 452 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 454 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 564 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 566 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 568 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0011 */

 

-/* 456 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 458 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 460 */	0x8,		/* FC_LONG */

+/* 570 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 572 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 574 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 462 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 464 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 466 */	0x8,		/* FC_LONG */

+/* 576 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 578 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 580 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_installerResultExtraCode1 */

 

-/* 468 */	0x33,		/* FC_AUTO_HANDLE */

+/* 582 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 470 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 474 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 476 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 478 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 480 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 482 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 584 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 588 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 590 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 592 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 594 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 596 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 484 */	0x8,		/* 8 */

+/* 598 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 486 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 488 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 490 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 600 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 602 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 604 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0012 */

 

-/* 492 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 494 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 496 */	0x8,		/* FC_LONG */

+/* 606 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 608 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 610 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 498 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 500 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 502 */	0x8,		/* FC_LONG */

+/* 612 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 614 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 616 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallLaunchCommandLine */

 

-/* 504 */	0x33,		/* FC_AUTO_HANDLE */

+/* 618 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 506 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 510 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 512 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 514 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 516 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 518 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 620 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 624 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 626 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 628 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 630 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 632 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 520 */	0x8,		/* 8 */

+/* 634 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 522 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 524 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 526 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 636 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 638 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 640 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0013 */

 

-/* 528 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 530 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 532 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 642 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 644 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 646 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 534 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 536 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 538 */	0x8,		/* FC_LONG */

+/* 648 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 650 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 652 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallUrl */

 

-/* 540 */	0x33,		/* FC_AUTO_HANDLE */

+/* 654 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 542 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 546 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 548 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 550 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 552 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 554 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 656 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 660 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 662 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 664 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 666 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 668 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 556 */	0x8,		/* 8 */

+/* 670 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 558 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 560 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 562 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 672 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 674 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 676 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0014 */

 

-/* 564 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 566 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 568 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 678 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 680 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 682 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 570 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 572 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 574 */	0x8,		/* FC_LONG */

+/* 684 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 686 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 688 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_postInstallAction */

 

-/* 576 */	0x33,		/* FC_AUTO_HANDLE */

+/* 690 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 578 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 582 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 584 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 586 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 588 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 590 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 692 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 696 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 698 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 700 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 702 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 704 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 592 */	0x8,		/* 8 */

+/* 706 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 594 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 596 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 598 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 708 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 710 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 712 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__ICurrentState0015 */

 

-/* 600 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 602 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 604 */	0x8,		/* FC_LONG */

+/* 714 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 716 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 718 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 606 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 608 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 610 */	0x8,		/* FC_LONG */

+/* 720 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 722 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 724 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createAppBundleWeb */

 

-/* 612 */	0x33,		/* FC_AUTO_HANDLE */

+/* 726 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 614 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 618 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 620 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 622 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 624 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 626 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 728 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 732 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 734 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 736 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 738 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 740 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 628 */	0x8,		/* 8 */

+/* 742 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 630 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 632 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 744 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 746 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 748 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter app_bundle_web */

 

-/* 636 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 638 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 640 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 750 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 752 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 754 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 642 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 644 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 646 */	0x8,		/* FC_LONG */

+/* 756 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 758 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 760 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createApp */

 

-/* 648 */	0x33,		/* FC_AUTO_HANDLE */

+/* 762 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 650 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 654 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 656 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 658 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 660 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 662 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 764 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 768 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 770 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 772 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 774 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 776 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x5,		/* 5 */

-/* 664 */	0x8,		/* 8 */

+/* 778 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 666 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 668 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 780 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 782 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 784 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter app_guid */

 

-/* 672 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 674 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 676 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 786 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 788 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 790 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter brand_code */

 

-/* 678 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 680 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 682 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 792 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 794 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 796 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter language */

 

-/* 684 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 686 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 688 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 798 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 800 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 802 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter ap */

 

-/* 690 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 692 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 694 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 804 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 806 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 808 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 696 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 698 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 700 */	0x8,		/* FC_LONG */

+/* 810 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 812 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 814 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure createInstalledApp */

 

-/* 702 */	0x33,		/* FC_AUTO_HANDLE */

+/* 816 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 704 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 708 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 710 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 712 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 714 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 716 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 818 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 822 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 824 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 826 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 828 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 830 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 718 */	0x8,		/* 8 */

+/* 832 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 720 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 722 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 724 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 834 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 836 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 838 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter app_id */

 

-/* 726 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 728 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 730 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 840 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 842 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 844 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 732 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 734 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 736 */	0x8,		/* FC_LONG */

+/* 846 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 848 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 850 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure refreshPolicies */

@@ -921,29 +1062,29 @@
 

 	/* Procedure createAllInstalledApps */

 

-/* 738 */	0x33,		/* FC_AUTO_HANDLE */

+/* 852 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 740 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 744 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 746 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 748 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 750 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 752 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 854 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 858 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 860 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 862 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 864 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 866 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 754 */	0x8,		/* 8 */

+/* 868 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 756 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 758 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 760 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 870 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 872 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 874 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 762 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 764 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 766 */	0x8,		/* FC_LONG */

+/* 876 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 878 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 880 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_conflictSource */

@@ -951,707 +1092,628 @@
 

 	/* Procedure get_displayLanguage */

 

-/* 768 */	0x33,		/* FC_AUTO_HANDLE */

+/* 882 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 770 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 774 */	NdrFcShort( 0xa ),	/* 10 */

-/* 776 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 778 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 780 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 782 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 884 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 888 */	NdrFcShort( 0xa ),	/* 10 */

+/* 890 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 892 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 894 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 896 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 784 */	0x8,		/* 8 */

+/* 898 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 786 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 788 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 790 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 900 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 902 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 904 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IPolicyStatusValue0002 */

 

 

 	/* Parameter __MIDL__IAppBundleWeb0000 */

 

-/* 792 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 794 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 796 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 906 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 908 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 910 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 798 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 800 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 802 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure put_displayLanguage */

-

-/* 804 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 806 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 810 */	NdrFcShort( 0xb ),	/* 11 */

-/* 812 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 814 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 816 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 818 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 820 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 822 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 824 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 826 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter __MIDL__IAppBundleWeb0001 */

-

-/* 828 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 830 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 832 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Return value */

-

-/* 834 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 836 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 838 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure put_parentHWND */

-

-/* 840 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 842 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 846 */	NdrFcShort( 0xc ),	/* 12 */

-/* 848 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 850 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 852 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 854 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 856 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 858 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 860 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 862 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter hwnd */

-

-/* 864 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 866 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 868 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 870 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 872 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 874 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_appWeb */

-

-/* 876 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 878 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 882 */	NdrFcShort( 0xe ),	/* 14 */

-/* 884 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 886 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 888 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 890 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 892 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 894 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 896 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 898 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter index */

-

-/* 900 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 902 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 904 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter app_web */

-

-/* 906 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 908 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 910 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

 /* 912 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 914 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 914 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 916 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure initialize */

+	/* Procedure put_displayLanguage */

 

 /* 918 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 920 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 924 */	NdrFcShort( 0xf ),	/* 15 */

-/* 926 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 924 */	NdrFcShort( 0xb ),	/* 11 */

+/* 926 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 928 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 930 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 932 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x1,		/* 1 */

+/* 932 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x2,		/* 2 */

 /* 934 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 936 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 938 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 938 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 940 */	NdrFcShort( 0x0 ),	/* 0 */

 

+	/* Parameter __MIDL__IAppBundleWeb0001 */

+

+/* 942 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 944 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 946 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

 	/* Return value */

 

-/* 942 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 944 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 946 */	0x8,		/* FC_LONG */

+/* 948 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 950 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 952 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure put_parentHWND */

+

+/* 954 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 956 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 960 */	NdrFcShort( 0xc ),	/* 12 */

+/* 962 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 964 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 966 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 968 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 970 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 972 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 974 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 976 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter hwnd */

+

+/* 978 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 980 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 982 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 984 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 986 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 988 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_appWeb */

+

+/* 990 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 992 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 996 */	NdrFcShort( 0xe ),	/* 14 */

+/* 998 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1000 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1002 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1004 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 1006 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1008 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1010 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1012 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter index */

+

+/* 1014 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1016 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1018 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter app_web */

+

+/* 1020 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1022 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1024 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1026 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1028 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1030 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure initialize */

+

+/* 1032 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1034 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1038 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1040 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1042 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1044 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1046 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x1,		/* 1 */

+/* 1048 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1050 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1052 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1054 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Return value */

+

+/* 1056 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1058 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1060 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure checkForUpdate */

 

-/* 948 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1062 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 950 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 954 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 956 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 958 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 960 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 962 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1064 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1068 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1070 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1072 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1074 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1076 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 964 */	0x8,		/* 8 */

+/* 1078 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 966 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 968 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 970 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1080 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1082 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1084 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 972 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 974 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 976 */	0x8,		/* FC_LONG */

+/* 1086 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1088 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1090 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure download */

 

-/* 978 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1092 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 980 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 984 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 986 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 988 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 990 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 992 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1094 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1098 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 1100 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1104 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1106 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 994 */	0x8,		/* 8 */

+/* 1108 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 996 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 998 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1000 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1110 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1112 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1114 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1002 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1004 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1006 */	0x8,		/* FC_LONG */

+/* 1116 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1118 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1120 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure install */

 

-/* 1008 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1122 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1010 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1014 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 1016 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1018 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1020 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1022 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1124 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1128 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 1130 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1132 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1134 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1136 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1024 */	0x8,		/* 8 */

+/* 1138 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1026 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1028 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1030 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1140 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1144 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1032 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1034 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1036 */	0x8,		/* FC_LONG */

+/* 1146 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1148 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1150 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure pause */

 

-/* 1038 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1152 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1040 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1044 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 1046 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1048 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1050 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1052 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1154 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1158 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 1160 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1162 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1164 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1166 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1054 */	0x8,		/* 8 */

+/* 1168 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1056 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1058 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1060 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1170 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1172 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1174 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1062 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1064 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1066 */	0x8,		/* FC_LONG */

+/* 1176 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1178 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1180 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure resume */

 

-/* 1068 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1182 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1070 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1074 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 1076 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1078 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1080 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1082 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1184 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1188 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 1190 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1192 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1194 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1196 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1084 */	0x8,		/* 8 */

+/* 1198 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1086 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1088 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1090 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1200 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1202 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1204 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1092 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1094 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1096 */	0x8,		/* FC_LONG */

+/* 1206 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1208 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1210 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure cancel */

 

-/* 1098 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1212 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1100 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1104 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 1106 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1108 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1110 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1112 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1214 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1218 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 1220 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1222 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1224 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1226 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1114 */	0x8,		/* 8 */

+/* 1228 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1116 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1118 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1120 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Return value */

-

-/* 1122 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1124 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1126 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure downloadPackage */

-

-/* 1128 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1130 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1134 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 1136 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1138 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1140 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1142 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1144 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1146 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1148 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1150 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter app_id */

-

-/* 1152 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1154 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1156 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter package_name */

-

-/* 1158 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1160 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1162 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Return value */

-

-/* 1164 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1166 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1168 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_currentState */

-

-/* 1170 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1172 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1176 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 1178 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1180 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1182 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1184 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1186 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1188 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1190 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1192 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter current_state */

-

-/* 1194 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 1196 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1198 */	NdrFcShort( 0x430 ),	/* Type Offset=1072 */

-

-	/* Return value */

-

-/* 1200 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1202 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1204 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_updaterVersion */

-

-

-	/* Procedure get_source */

-

-

-	/* Procedure get_appId */

-

-/* 1206 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1208 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1212 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 1214 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1216 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1218 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1220 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1222 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1224 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1226 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1228 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter version */

-

-

-	/* Parameter __MIDL__IPolicyStatusValue0000 */

-

-

-	/* Parameter __MIDL__IAppWeb0000 */

-

-/* 1230 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1232 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1234 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

-

-	/* Return value */

-

-

-	/* Return value */

-

+/* 1230 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1232 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1234 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

 /* 1236 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1238 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1238 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 1240 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_currentVersionWeb */

+	/* Procedure downloadPackage */

 

 /* 1242 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1244 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1248 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1250 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1248 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 1250 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 1252 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1254 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1256 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 1256 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 1258 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1260 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1262 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1262 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1264 */	NdrFcShort( 0x0 ),	/* 0 */

 

+	/* Parameter app_id */

+

+/* 1266 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1268 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1270 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter package_name */

+

+/* 1272 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1274 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1276 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Return value */

+

+/* 1278 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1280 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1282 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentState */

+

+/* 1284 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1286 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1290 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 1292 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1294 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1296 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1298 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1300 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1302 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1304 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1306 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter current_state */

+

+/* 1308 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 1310 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1312 */	NdrFcShort( 0x430 ),	/* Type Offset=1072 */

+

+	/* Return value */

+

+/* 1314 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1316 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1318 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentVersionWeb */

+

+/* 1320 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1322 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1326 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1328 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1330 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1332 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1334 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1336 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1338 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1340 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1342 */	NdrFcShort( 0x0 ),	/* 0 */

+

 	/* Parameter current */

 

-/* 1266 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1268 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1270 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

-/* 1272 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1274 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1276 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_nextVersionWeb */

-

-/* 1278 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1280 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1284 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1286 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1288 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1290 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1292 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

-/* 1294 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1296 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1298 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1300 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter next */

-

-/* 1302 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1304 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1306 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

-

-	/* Return value */

-

-/* 1308 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1310 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1312 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_command */

-

-/* 1314 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1316 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1320 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1322 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1324 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1326 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1328 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1330 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1332 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1334 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1336 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter command_id */

-

-/* 1338 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1340 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1342 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter command */

-

 /* 1344 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1346 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1348 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 1346 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1348 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 1350 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1352 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1352 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 1354 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure cancel */

+	/* Procedure get_nextVersionWeb */

 

 /* 1356 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1358 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1362 */	NdrFcShort( 0xb ),	/* 11 */

-/* 1364 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1362 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1364 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 1366 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1368 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1370 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x1,		/* 1 */

+/* 1370 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

 /* 1372 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 1374 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1376 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1378 */	NdrFcShort( 0x0 ),	/* 0 */

 

+	/* Parameter next */

+

+/* 1380 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1382 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1384 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

 	/* Return value */

 

-/* 1380 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1382 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1384 */	0x8,		/* FC_LONG */

+/* 1386 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1388 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1390 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_command */

+

+/* 1392 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1394 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1398 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1400 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1402 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1404 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1406 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 1408 */	0x8,		/* 8 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+/* 1410 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1412 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1414 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter command_id */

+

+/* 1416 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1418 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1420 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter command */

+

+/* 1422 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1424 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1426 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+

+	/* Return value */

+

+/* 1428 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1430 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1432 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure cancel */

+

+/* 1434 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1436 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1440 */	NdrFcShort( 0xb ),	/* 11 */

+/* 1442 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1444 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1446 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1448 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x1,		/* 1 */

+/* 1450 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1452 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1454 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1456 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Return value */

+

+/* 1458 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1460 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1462 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_currentState */

 

-/* 1386 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1464 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1388 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1392 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1394 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1396 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1398 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1400 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1466 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1470 */	NdrFcShort( 0xc ),	/* 12 */

+/* 1472 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1474 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1476 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1478 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1402 */	0x8,		/* 8 */

+/* 1480 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1404 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1406 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1482 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1484 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1486 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter current_state */

 

-/* 1410 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 1412 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1414 */	NdrFcShort( 0x36 ),	/* Type Offset=54 */

+/* 1488 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 1490 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1492 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 1416 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1418 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1420 */	0x8,		/* FC_LONG */

+/* 1494 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1496 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1498 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure launch */

 

-/* 1422 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1500 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1424 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1428 */	NdrFcShort( 0xd ),	/* 13 */

-/* 1430 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1432 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1434 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1436 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1502 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1506 */	NdrFcShort( 0xd ),	/* 13 */

+/* 1508 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1510 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1512 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1514 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1438 */	0x8,		/* 8 */

+/* 1516 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1440 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1442 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1444 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1518 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1520 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1522 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1446 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1448 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1450 */	0x8,		/* FC_LONG */

+/* 1524 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1526 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1528 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure uninstall */

 

-/* 1452 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1530 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1454 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1458 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1460 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1462 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1464 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1466 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1532 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1536 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1538 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1540 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1542 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1544 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x1,		/* 1 */

-/* 1468 */	0x8,		/* 8 */

+/* 1546 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1470 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1472 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1474 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1548 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1550 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1552 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Return value */

 

-/* 1476 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1478 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1480 */	0x8,		/* FC_LONG */

+/* 1554 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1556 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1558 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_serverInstallDataIndex */

 

-/* 1482 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1560 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1484 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1488 */	NdrFcShort( 0xf ),	/* 15 */

-/* 1490 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1492 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1494 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1496 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1562 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1566 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1568 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1570 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1572 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1574 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1498 */	0x8,		/* 8 */

+/* 1576 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1500 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1502 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1504 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1578 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1580 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1582 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IAppWeb0001 */

 

-/* 1506 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1508 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1510 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1584 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1586 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1588 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1512 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1514 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1516 */	0x8,		/* FC_LONG */

+/* 1590 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1592 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1594 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure put_serverInstallDataIndex */

 

-/* 1518 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1596 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1520 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1524 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1526 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1528 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1530 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1532 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1598 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1602 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1604 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1606 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1608 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1610 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1534 */	0x8,		/* 8 */

+/* 1612 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1536 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1538 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1540 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1614 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1616 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1618 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IAppWeb0002 */

 

-/* 1542 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1544 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1546 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 1620 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1622 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1624 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Return value */

 

-/* 1548 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1550 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1552 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_exitCode */

-

-/* 1554 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1556 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1560 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1562 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1564 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1566 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1568 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 1570 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1572 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1574 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1576 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter __MIDL__IAppCommandWeb0001 */

-

-/* 1578 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1580 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1582 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1584 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1586 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1588 */	0x8,		/* FC_LONG */

+/* 1626 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1628 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1630 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_downloadPreferenceGroupPolicy */

@@ -1659,213 +1721,176 @@
 

 	/* Procedure get_output */

 

-/* 1590 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1632 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1592 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1596 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1598 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1600 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1602 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1604 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1634 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1638 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1640 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1642 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1644 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1646 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1606 */	0x8,		/* 8 */

+/* 1648 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1608 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1610 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1612 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1650 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1652 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1654 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter pref */

 

 

 	/* Parameter __MIDL__IAppCommandWeb0002 */

 

-/* 1614 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1616 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1618 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1656 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1658 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1660 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 1620 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1622 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1624 */	0x8,		/* FC_LONG */

+/* 1662 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1664 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1666 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure execute */

 

-/* 1626 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1668 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1628 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1632 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1634 */	NdrFcShort( 0x98 ),	/* x86 Stack size/offset = 152 */

-/* 1636 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1638 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1640 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1670 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1674 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1676 */	NdrFcShort( 0x98 ),	/* x86 Stack size/offset = 152 */

+/* 1678 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1680 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1682 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0xa,		/* 10 */

-/* 1642 */	0x8,		/* 8 */

+/* 1684 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1644 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1646 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1648 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1686 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1688 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1690 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter substitution1 */

 

-/* 1650 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1652 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1654 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1692 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1694 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1696 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution2 */

 

-/* 1656 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1658 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1660 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1698 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1700 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1702 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution3 */

 

-/* 1662 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1664 */	NdrFcShort( 0x24 ),	/* x86 Stack size/offset = 36 */

-/* 1666 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1704 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1706 */	NdrFcShort( 0x24 ),	/* x86 Stack size/offset = 36 */

+/* 1708 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution4 */

 

-/* 1668 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1670 */	NdrFcShort( 0x34 ),	/* x86 Stack size/offset = 52 */

-/* 1672 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1710 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1712 */	NdrFcShort( 0x34 ),	/* x86 Stack size/offset = 52 */

+/* 1714 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution5 */

 

-/* 1674 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1676 */	NdrFcShort( 0x44 ),	/* x86 Stack size/offset = 68 */

-/* 1678 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1716 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1718 */	NdrFcShort( 0x44 ),	/* x86 Stack size/offset = 68 */

+/* 1720 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution6 */

 

-/* 1680 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1682 */	NdrFcShort( 0x54 ),	/* x86 Stack size/offset = 84 */

-/* 1684 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1722 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1724 */	NdrFcShort( 0x54 ),	/* x86 Stack size/offset = 84 */

+/* 1726 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution7 */

 

-/* 1686 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1688 */	NdrFcShort( 0x64 ),	/* x86 Stack size/offset = 100 */

-/* 1690 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1728 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1730 */	NdrFcShort( 0x64 ),	/* x86 Stack size/offset = 100 */

+/* 1732 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution8 */

 

-/* 1692 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1694 */	NdrFcShort( 0x74 ),	/* x86 Stack size/offset = 116 */

-/* 1696 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1734 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1736 */	NdrFcShort( 0x74 ),	/* x86 Stack size/offset = 116 */

+/* 1738 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Parameter substitution9 */

 

-/* 1698 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1700 */	NdrFcShort( 0x84 ),	/* x86 Stack size/offset = 132 */

-/* 1702 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

+/* 1740 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1742 */	NdrFcShort( 0x84 ),	/* x86 Stack size/offset = 132 */

+/* 1744 */	NdrFcShort( 0x43e ),	/* Type Offset=1086 */

 

 	/* Return value */

 

-/* 1704 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1706 */	NdrFcShort( 0x94 ),	/* x86 Stack size/offset = 148 */

-/* 1708 */	0x8,		/* FC_LONG */

+/* 1746 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1748 */	NdrFcShort( 0x94 ),	/* x86 Stack size/offset = 148 */

+/* 1750 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_updatesSuppressedTimes */

 

-/* 1710 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1752 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1712 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1716 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1718 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 1720 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1722 */	NdrFcShort( 0x76 ),	/* 118 */

-/* 1724 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1754 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1758 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1760 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 1762 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1764 */	NdrFcShort( 0x76 ),	/* 118 */

+/* 1766 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x5,		/* 5 */

-/* 1726 */	0x8,		/* 8 */

+/* 1768 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1728 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1730 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1732 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1770 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1772 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1774 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter start_hour */

 

-/* 1734 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1736 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1738 */	0x8,		/* FC_LONG */

+/* 1776 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1778 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1780 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter start_min */

 

-/* 1740 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1742 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1744 */	0x8,		/* FC_LONG */

+/* 1782 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1784 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1786 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter duration_min */

 

-/* 1746 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1748 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1750 */	0x8,		/* FC_LONG */

+/* 1788 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1790 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1792 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter are_updates_suppressed */

 

-/* 1752 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1754 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1756 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1758 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1760 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1762 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_effectivePolicyForAppInstalls */

-

-/* 1764 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1766 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1770 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1772 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1774 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1776 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1778 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 1780 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1782 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1784 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1786 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter app_id */

-

-/* 1788 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1790 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1792 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

-

-	/* Parameter policy */

-

 /* 1794 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1796 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1798 */	0x8,		/* FC_LONG */

+/* 1796 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1798 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 1800 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1802 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1802 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

 /* 1804 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_effectivePolicyForAppUpdates */

+	/* Procedure get_effectivePolicyForAppInstalls */

 

 /* 1806 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1808 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1812 */	NdrFcShort( 0xd ),	/* 13 */

+/* 1812 */	NdrFcShort( 0xc ),	/* 12 */

 /* 1814 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 1816 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1818 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -1897,20 +1922,20 @@
 /* 1846 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetVersionPrefix */

+	/* Procedure get_effectivePolicyForAppUpdates */

 

 /* 1848 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1850 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1854 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1854 */	NdrFcShort( 0xd ),	/* 13 */

 /* 1856 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 1858 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1860 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1862 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+/* 1860 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1862 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 1864 */	0x8,		/* 8 */

-			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

-/* 1866 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+/* 1866 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1868 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1870 */	NdrFcShort( 0x0 ),	/* 0 */

 

@@ -1920,11 +1945,12 @@
 /* 1874 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 1876 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter prefix */

+	/* Parameter policy */

 

-/* 1878 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1878 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 1880 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1882 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 1882 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -1933,20 +1959,20 @@
 /* 1888 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRollbackToTargetVersionAllowed */

+	/* Procedure get_targetVersionPrefix */

 

 /* 1890 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1892 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1896 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1896 */	NdrFcShort( 0xe ),	/* 14 */

 /* 1898 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 1900 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1902 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 1904 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1902 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1904 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 1906 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1908 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

+/* 1908 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1910 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1912 */	NdrFcShort( 0x0 ),	/* 0 */

 

@@ -1956,12 +1982,11 @@
 /* 1916 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 1918 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

-	/* Parameter rollback_allowed */

+	/* Parameter prefix */

 

-/* 1920 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1920 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 1922 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1924 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 1924 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

@@ -1970,176 +1995,176 @@
 /* 1930 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hasConflict */

+	/* Procedure get_isRollbackToTargetVersionAllowed */

 

 /* 1932 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1934 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1938 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1940 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1938 */	NdrFcShort( 0xf ),	/* 15 */

+/* 1940 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 1942 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1944 */	NdrFcShort( 0x22 ),	/* 34 */

-/* 1946 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 1946 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 1948 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1950 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1952 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1952 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1954 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter has_conflict */

+	/* Parameter app_id */

 

-/* 1956 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1956 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

 /* 1958 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1960 */	0x6,		/* FC_SHORT */

+/* 1960 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+

+	/* Parameter rollback_allowed */

+

+/* 1962 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1964 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1966 */	0x6,		/* FC_SHORT */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1962 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1964 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1966 */	0x8,		/* FC_LONG */

+/* 1968 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1970 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1972 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_hasConflict */

+

+/* 1974 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1976 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1980 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1982 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1984 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1986 */	NdrFcShort( 0x22 ),	/* 34 */

+/* 1988 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 1990 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1992 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1994 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1996 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter has_conflict */

+

+/* 1998 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2000 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2002 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 2004 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2006 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2008 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_conflictValue */

 

-/* 1968 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2010 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1970 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1974 */	NdrFcShort( 0xb ),	/* 11 */

-/* 1976 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1978 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1980 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1982 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2012 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2016 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2018 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2020 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2022 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2024 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1984 */	0x8,		/* 8 */

+/* 2026 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1986 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1988 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1990 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2028 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2030 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2032 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter __MIDL__IPolicyStatusValue0003 */

 

-/* 1992 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1994 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1996 */	NdrFcShort( 0x24 ),	/* Type Offset=36 */

+/* 2034 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2036 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2038 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1998 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2000 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2002 */	0x8,		/* FC_LONG */

+/* 2040 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2042 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2044 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_lastCheckedTime */

 

-/* 2004 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2046 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2006 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2010 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2012 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2014 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2016 */	NdrFcShort( 0x2c ),	/* 44 */

-/* 2018 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2048 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2052 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2054 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2058 */	NdrFcShort( 0x2c ),	/* 44 */

+/* 2060 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2020 */	0x8,		/* 8 */

+/* 2062 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2022 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2024 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2026 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2064 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2066 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2068 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter last_checked */

 

-/* 2028 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2030 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2032 */	0xc,		/* FC_DOUBLE */

+/* 2070 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2072 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2074 */	0xc,		/* FC_DOUBLE */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2034 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2036 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2038 */	0x8,		/* FC_LONG */

+/* 2076 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2078 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2080 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_lastCheckPeriodMinutes */

 

-/* 2040 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2082 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2042 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2046 */	NdrFcShort( 0xa ),	/* 10 */

-/* 2048 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2050 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2052 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2054 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2084 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2088 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2090 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2092 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2094 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2096 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2056 */	0x8,		/* 8 */

+/* 2098 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2058 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2060 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2062 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2100 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2104 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2064 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2066 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2068 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

-

-	/* Return value */

-

-/* 2070 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2072 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2074 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_updatesSuppressedTimes */

-

-/* 2076 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2078 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2082 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2084 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2086 */	NdrFcShort( 0x1a ),	/* 26 */

-/* 2088 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2090 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2092 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2094 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2096 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2098 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter value */

-

-/* 2100 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2102 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2104 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

-

-	/* Parameter are_updates_suppressed */

-

-/* 2106 */	NdrFcShort( 0x148 ),	/* Flags:  in, base type, simple ref, */

-/* 2108 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2110 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2106 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2108 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2110 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

 /* 2112 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2114 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2114 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 2116 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_downloadPreferenceGroupPolicy */

+	/* Procedure get_updatesSuppressedTimes */

 

 /* 2118 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2120 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2124 */	NdrFcShort( 0xc ),	/* 12 */

-/* 2126 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2128 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2124 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2126 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2128 */	NdrFcShort( 0x1a ),	/* 26 */

 /* 2130 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2132 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 2134 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2136 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2152,205 +2177,206 @@
 /* 2144 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 2146 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

+	/* Parameter are_updates_suppressed */

+

+/* 2148 */	NdrFcShort( 0x148 ),	/* Flags:  in, base type, simple ref, */

+/* 2150 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2152 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 2148 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2150 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2152 */	0x8,		/* FC_LONG */

+/* 2154 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2156 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2158 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_downloadPreferenceGroupPolicy */

+

+/* 2160 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2162 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2166 */	NdrFcShort( 0xc ),	/* 12 */

+/* 2168 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2170 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2172 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2174 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 2176 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2178 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2180 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2182 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter value */

+

+/* 2184 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2186 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2188 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

+

+	/* Return value */

+

+/* 2190 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2192 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2194 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheSizeLimitMBytes */

 

-/* 2154 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2196 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2156 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2160 */	NdrFcShort( 0xd ),	/* 13 */

-/* 2162 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2164 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2166 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2168 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2198 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2202 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2204 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2208 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2210 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2170 */	0x8,		/* 8 */

+/* 2212 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2172 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2174 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2176 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2214 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2216 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2218 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2178 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2180 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2182 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

+/* 2220 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2222 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2224 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

-/* 2184 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2186 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2188 */	0x8,		/* FC_LONG */

+/* 2226 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2228 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2230 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_packageCacheExpirationTimeDays */

 

-/* 2190 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2232 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2192 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2196 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2198 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2200 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2202 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2204 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2234 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2238 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2240 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2242 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2244 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2246 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2206 */	0x8,		/* 8 */

+/* 2248 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2208 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2210 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2212 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2250 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2252 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2254 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2214 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2216 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2218 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

+/* 2256 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2258 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2260 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

-/* 2220 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2222 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2224 */	0x8,		/* FC_LONG */

+/* 2262 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2264 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2266 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyMode */

 

-/* 2226 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2268 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2228 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2232 */	NdrFcShort( 0xf ),	/* 15 */

-/* 2234 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2236 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2238 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2240 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2270 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2274 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2276 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2278 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2280 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2282 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2242 */	0x8,		/* 8 */

+/* 2284 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2244 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2246 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2248 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2286 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2288 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2290 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2250 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2252 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2254 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

+/* 2292 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2294 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2296 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

-/* 2256 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2258 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2260 */	0x8,		/* FC_LONG */

+/* 2298 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2300 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2302 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyPacUrl */

 

-/* 2262 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2304 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2264 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2268 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2270 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2272 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2274 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2276 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2306 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2310 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2312 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2314 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2316 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2318 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2278 */	0x8,		/* 8 */

+/* 2320 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2280 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2282 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2284 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2322 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2324 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2326 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 2286 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2288 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2290 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

+/* 2328 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2330 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2332 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

-/* 2292 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2294 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2296 */	0x8,		/* FC_LONG */

+/* 2334 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2336 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2338 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_proxyServer */

 

-/* 2298 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2340 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2300 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2304 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 2306 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2308 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2310 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2312 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2342 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2346 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 2348 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2350 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2352 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2354 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2314 */	0x8,		/* 8 */

+/* 2356 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2316 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2318 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2320 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter value */

-

-/* 2322 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2324 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2326 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

-

-	/* Return value */

-

-/* 2328 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2330 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2332 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_effectivePolicyForAppInstalls */

-

-/* 2334 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2336 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2340 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 2342 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2344 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2346 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2348 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2350 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2352 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2354 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2356 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter app_id */

-

-/* 2358 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 2360 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2362 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

+/* 2358 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2360 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2362 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

 /* 2364 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 2366 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2366 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 2368 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

 /* 2370 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2372 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2372 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 2374 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_effectivePolicyForAppUpdates */

+	/* Procedure get_effectivePolicyForAppInstalls */

 

 /* 2376 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2378 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2382 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 2382 */	NdrFcShort( 0x12 ),	/* 18 */

 /* 2384 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2386 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2388 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2381,12 +2407,12 @@
 /* 2416 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetVersionPrefix */

+	/* Procedure get_effectivePolicyForAppUpdates */

 

 /* 2418 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2420 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2424 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 2424 */	NdrFcShort( 0x13 ),	/* 19 */

 /* 2426 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2428 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2430 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2417,12 +2443,12 @@
 /* 2458 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRollbackToTargetVersionAllowed */

+	/* Procedure get_targetVersionPrefix */

 

 /* 2460 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2462 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2466 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 2466 */	NdrFcShort( 0x14 ),	/* 20 */

 /* 2468 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2470 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2472 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2453,12 +2479,12 @@
 /* 2500 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_targetChannel */

+	/* Procedure get_isRollbackToTargetVersionAllowed */

 

 /* 2502 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2504 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2508 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2508 */	NdrFcShort( 0x15 ),	/* 21 */

 /* 2510 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2512 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2514 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2489,29 +2515,28 @@
 /* 2542 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_forceInstallApps */

+	/* Procedure get_targetChannel */

 

 /* 2544 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2546 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2550 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 2550 */	NdrFcShort( 0x16 ),	/* 22 */

 /* 2552 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2554 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2554 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2556 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2558 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2558 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2560 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2562 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2564 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2564 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2566 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter is_machine */

+	/* Parameter app_id */

 

-/* 2568 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2568 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

 /* 2570 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2572 */	0x6,		/* FC_SHORT */

-			0x0,		/* 0 */

+/* 2572 */	NdrFcShort( 0x50 ),	/* Type Offset=80 */

 

 	/* Parameter value */

 

@@ -2526,172 +2551,209 @@
 /* 2584 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchCmdLine */

+	/* Procedure get_forceInstallApps */

 

 /* 2586 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2588 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2592 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2594 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2596 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2592 */	NdrFcShort( 0x17 ),	/* 23 */

+/* 2594 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2596 */	NdrFcShort( 0x6 ),	/* 6 */

 /* 2598 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2600 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 2600 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 2602 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2604 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2606 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2608 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cmd_line */

+	/* Parameter is_machine */

 

-/* 2610 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2610 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2612 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2614 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

+/* 2614 */	0x6,		/* FC_SHORT */

+			0x0,		/* 0 */

+

+	/* Parameter value */

+

+/* 2616 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 2618 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2620 */	NdrFcShort( 0x44c ),	/* Type Offset=1100 */

 

 	/* Return value */

 

-/* 2616 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2618 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2620 */	0x8,		/* FC_LONG */

+/* 2622 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2624 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2626 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchBrowser */

+	/* Procedure LaunchCmdLine */

 

-/* 2622 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2628 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2624 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2628 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2630 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2632 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2634 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2636 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2638 */	0x8,		/* 8 */

+/* 2630 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2634 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 2636 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2638 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2640 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2642 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 2644 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2640 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2642 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2644 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2646 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2648 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2650 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter browser_type */

-

-/* 2646 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2648 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2650 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter url */

+	/* Parameter cmd_line */

 

 /* 2652 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2654 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2654 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 2656 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

 

 	/* Return value */

 

 /* 2658 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2660 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2660 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 2662 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure LaunchCmdElevated */

+	/* Procedure LaunchBrowser */

 

 /* 2664 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2666 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2670 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 2672 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2670 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 2672 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2674 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2676 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2676 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2678 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

-			0x5,		/* 5 */

+			0x3,		/* 3 */

 /* 2680 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2682 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2684 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2686 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter app_guid */

+	/* Parameter browser_type */

 

-/* 2688 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2688 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2690 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2692 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

+/* 2692 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter cmd_id */

+	/* Parameter url */

 

 /* 2694 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 2696 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 2698 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

 

-	/* Parameter caller_proc_id */

+	/* Return value */

 

-/* 2700 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2700 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 2702 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 2704 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure LaunchCmdElevated */

+

+/* 2706 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2708 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2712 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2714 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2716 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2718 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2720 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+			0x5,		/* 5 */

+/* 2722 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2724 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2726 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2728 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter app_guid */

+

+/* 2730 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2732 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2734 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

+

+	/* Parameter cmd_id */

+

+/* 2736 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2738 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2740 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

+

+	/* Parameter caller_proc_id */

+

+/* 2742 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2744 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2746 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Parameter proc_handle */

 

-/* 2706 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2708 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2710 */	0x8,		/* FC_LONG */

+/* 2748 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2750 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2752 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2712 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2714 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2716 */	0x8,		/* FC_LONG */

+/* 2754 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2756 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2758 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure LaunchCmdLineEx */

 

-/* 2718 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2760 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2720 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2724 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2726 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 2728 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2730 */	NdrFcShort( 0x5c ),	/* 92 */

-/* 2732 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2762 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2766 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2768 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2770 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2772 */	NdrFcShort( 0x5c ),	/* 92 */

+/* 2774 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x5,		/* 5 */

-/* 2734 */	0x8,		/* 8 */

+/* 2776 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2736 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2738 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2740 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2778 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2780 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2782 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter cmd_line */

 

-/* 2742 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2744 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2746 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

+/* 2784 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2786 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2788 */	NdrFcShort( 0x468 ),	/* Type Offset=1128 */

 

 	/* Parameter server_proc_id */

 

-/* 2748 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2750 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2752 */	0x8,		/* FC_LONG */

+/* 2790 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2792 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2794 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter proc_handle */

 

-/* 2754 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2756 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2758 */	0x8,		/* FC_LONG */

+/* 2796 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2798 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2800 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter stdout_handle */

 

-/* 2760 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2762 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2764 */	0x8,		/* FC_LONG */

+/* 2802 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2804 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2806 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2766 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2768 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2770 */	0x8,		/* FC_LONG */

+/* 2808 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2810 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2812 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 			0x0

@@ -2704,68 +2766,68 @@
         {

 			NdrFcShort( 0x0 ),	/* 0 */

 /*  2 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/*  4 */	0x8,		/* FC_LONG */

-			0x5c,		/* FC_PAD */

-/*  6 */	

 			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/*  8 */	NdrFcShort( 0x1c ),	/* Offset= 28 (36) */

-/* 10 */	

+/*  4 */	NdrFcShort( 0x1c ),	/* Offset= 28 (32) */

+/*  6 */	

 			0x13, 0x0,	/* FC_OP */

-/* 12 */	NdrFcShort( 0xe ),	/* Offset= 14 (26) */

-/* 14 */	

+/*  8 */	NdrFcShort( 0xe ),	/* Offset= 14 (22) */

+/* 10 */	

 			0x1b,		/* FC_CARRAY */

 			0x1,		/* 1 */

-/* 16 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 18 */	0x9,		/* Corr desc: FC_ULONG */

+/* 12 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 14 */	0x9,		/* Corr desc: FC_ULONG */

 			0x0,		/*  */

-/* 20 */	NdrFcShort( 0xfffc ),	/* -4 */

-/* 22 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

-/* 24 */	0x6,		/* FC_SHORT */

+/* 16 */	NdrFcShort( 0xfffc ),	/* -4 */

+/* 18 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 20 */	0x6,		/* FC_SHORT */

 			0x5b,		/* FC_END */

-/* 26 */	

+/* 22 */	

 			0x17,		/* FC_CSTRUCT */

 			0x3,		/* 3 */

-/* 28 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 30 */	NdrFcShort( 0xfff0 ),	/* Offset= -16 (14) */

-/* 32 */	0x8,		/* FC_LONG */

+/* 24 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 26 */	NdrFcShort( 0xfff0 ),	/* Offset= -16 (10) */

+/* 28 */	0x8,		/* FC_LONG */

 			0x8,		/* FC_LONG */

-/* 34 */	0x5c,		/* FC_PAD */

+/* 30 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 36 */	0xb4,		/* FC_USER_MARSHAL */

+/* 32 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

+/* 34 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 36 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 38 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 40 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 42 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 44 */	NdrFcShort( 0xffde ),	/* Offset= -34 (10) */

+/* 40 */	NdrFcShort( 0xffde ),	/* Offset= -34 (6) */

+/* 42 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 44 */	0x8,		/* FC_LONG */

+			0x5c,		/* FC_PAD */

 /* 46 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 48 */	0xb,		/* FC_HYPER */

-			0x5c,		/* FC_PAD */

-/* 50 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 52 */	0x6,		/* FC_SHORT */

-			0x5c,		/* FC_PAD */

-/* 54 */	

 			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 56 */	NdrFcShort( 0x2 ),	/* Offset= 2 (58) */

-/* 58 */	

+/* 48 */	NdrFcShort( 0x2 ),	/* Offset= 2 (50) */

+/* 50 */	

 			0x2f,		/* FC_IP */

 			0x5a,		/* FC_CONSTANT_IID */

-/* 60 */	NdrFcLong( 0x20400 ),	/* 132096 */

-/* 64 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 66 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 68 */	0xc0,		/* 192 */

+/* 52 */	NdrFcLong( 0x20400 ),	/* 132096 */

+/* 56 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 58 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 60 */	0xc0,		/* 192 */

 			0x0,		/* 0 */

-/* 70 */	0x0,		/* 0 */

+/* 62 */	0x0,		/* 0 */

 			0x0,		/* 0 */

-/* 72 */	0x0,		/* 0 */

+/* 64 */	0x0,		/* 0 */

 			0x0,		/* 0 */

-/* 74 */	0x0,		/* 0 */

+/* 66 */	0x0,		/* 0 */

 			0x46,		/* 70 */

+/* 68 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 70 */	0xb,		/* FC_HYPER */

+			0x5c,		/* FC_PAD */

+/* 72 */	

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 74 */	0x6,		/* FC_SHORT */

+			0x5c,		/* FC_PAD */

 /* 76 */	

 			0x12, 0x0,	/* FC_UP */

-/* 78 */	NdrFcShort( 0xffcc ),	/* Offset= -52 (26) */

+/* 78 */	NdrFcShort( 0xffc8 ),	/* Offset= -56 (22) */

 /* 80 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

 /* 82 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2809,11 +2871,11 @@
 /* 166 */	NdrFcLong( 0x7 ),	/* 7 */

 /* 170 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */

 /* 172 */	NdrFcLong( 0x8 ),	/* 8 */

-/* 176 */	NdrFcShort( 0xff5a ),	/* Offset= -166 (10) */

+/* 176 */	NdrFcShort( 0xff56 ),	/* Offset= -170 (6) */

 /* 178 */	NdrFcLong( 0xd ),	/* 13 */

 /* 182 */	NdrFcShort( 0xdc ),	/* Offset= 220 (402) */

 /* 184 */	NdrFcLong( 0x9 ),	/* 9 */

-/* 188 */	NdrFcShort( 0xff7e ),	/* Offset= -130 (58) */

+/* 188 */	NdrFcShort( 0xff76 ),	/* Offset= -138 (50) */

 /* 190 */	NdrFcLong( 0x2000 ),	/* 8192 */

 /* 194 */	NdrFcShort( 0xe2 ),	/* Offset= 226 (420) */

 /* 196 */	NdrFcLong( 0x24 ),	/* 36 */

@@ -2955,7 +3017,7 @@
 /* 516 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 518 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 520 */	0x13, 0x0,	/* FC_OP */

-/* 522 */	NdrFcShort( 0xfe10 ),	/* Offset= -496 (26) */

+/* 522 */	NdrFcShort( 0xfe0c ),	/* Offset= -500 (22) */

 /* 524 */	

 			0x5b,		/* FC_END */

 

@@ -3022,7 +3084,7 @@
 /* 600 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

 /* 602 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 604 */	NdrFcShort( 0xfdde ),	/* Offset= -546 (58) */

+/* 604 */	NdrFcShort( 0xfdd6 ),	/* Offset= -554 (50) */

 /* 606 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

 /* 608 */	

@@ -3379,13 +3441,13 @@
 /* 1008 */	NdrFcShort( 0xfd9c ),	/* Offset= -612 (396) */

 /* 1010 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

-/* 1012 */	NdrFcShort( 0xfc16 ),	/* Offset= -1002 (10) */

+/* 1012 */	NdrFcShort( 0xfc12 ),	/* Offset= -1006 (6) */

 /* 1014 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

 /* 1016 */	NdrFcShort( 0xfd9a ),	/* Offset= -614 (402) */

 /* 1018 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

-/* 1020 */	NdrFcShort( 0xfc3e ),	/* Offset= -962 (58) */

+/* 1020 */	NdrFcShort( 0xfc36 ),	/* Offset= -970 (50) */

 /* 1022 */	

 			0x13, 0x10,	/* FC_OP [pointer_deref] */

 /* 1024 */	NdrFcShort( 0xfda4 ),	/* Offset= -604 (420) */

@@ -3518,6 +3580,80 @@
    GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */

 

 

+/* Object interface: IAppVersionWeb, ver. 0.0,

+   GUID={0xAA10D17D,0x7A09,0x48AC,{0xB1,0xE4,0xF1,0x24,0x93,0x7E,0x3D,0x26}} */

+

+#pragma code_seg(".orpc")

+static const unsigned short IAppVersionWeb_FormatStringOffsetTable[] =

+    {

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    0,

+    36,

+    72

+    };

+

+static const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo =

+    {

+    &Object_StubDesc,

+    updater_legacy_idl__MIDL_ProcFormatString.Format,

+    &IAppVersionWeb_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0

+    };

+

+

+static const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo = 

+    {

+    &Object_StubDesc,

+    0,

+    updater_legacy_idl__MIDL_ProcFormatString.Format,

+    &IAppVersionWeb_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0,

+    0};

+CINTERFACE_PROXY_VTABLE(10) _IAppVersionWebProxyVtbl = 

+{

+    &IAppVersionWeb_ProxyInfo,

+    &IID_IAppVersionWeb,

+    IUnknown_QueryInterface_Proxy,

+    IUnknown_AddRef_Proxy,

+    IUnknown_Release_Proxy ,

+    0 /* IDispatch::GetTypeInfoCount */ ,

+    0 /* IDispatch::GetTypeInfo */ ,

+    0 /* IDispatch::GetIDsOfNames */ ,

+    0 /* IDispatch_Invoke_Proxy */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_version */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageCount */ ,

+    (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageWeb */

+};

+

+

+static const PRPC_STUB_FUNCTION IAppVersionWeb_table[] =

+{

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2

+};

+

+CInterfaceStubVtbl _IAppVersionWebStubVtbl =

+{

+    &IID_IAppVersionWeb,

+    &IAppVersionWeb_ServerInfo,

+    10,

+    &IAppVersionWeb_table[-3],

+    CStdStubBuffer_DELEGATING_METHODS

+};

+

+

 /* Object interface: ICurrentState, ver. 0.0,

    GUID={0xA643508B,0xB1E3,0x4457,{0x97,0x69,0x32,0xC9,0x53,0xBD,0x1D,0x57}} */

 

@@ -3528,23 +3664,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    36,

-    72,

-    108,

-    144,

-    180,

-    216,

-    252,

-    288,

-    324,

-    360,

-    396,

-    432,

-    468,

-    504,

-    540,

-    576

+    114,

+    150,

+    186,

+    222,

+    258,

+    294,

+    330,

+    366,

+    402,

+    438,

+    474,

+    510,

+    546,

+    582,

+    618,

+    654,

+    690

     };

 

 static const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo =

@@ -3644,7 +3780,7 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    612

+    726

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3Web_ProxyInfo =

@@ -3712,23 +3848,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    648,

-    702,

-    738,

-    768,

-    804,

-    840,

-    216,

-    876,

+    762,

+    816,

+    852,

+    882,

     918,

-    948,

-    978,

-    1008,

-    1038,

-    1068,

-    1098,

-    1128,

-    1170

+    954,

+    330,

+    990,

+    1032,

+    1062,

+    1092,

+    1122,

+    1152,

+    1182,

+    1212,

+    1242,

+    1284

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppBundleWeb_ProxyInfo =

@@ -3828,16 +3964,16 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1206,

-    1242,

-    1278,

-    1314,

+    0,

+    1320,

     1356,

-    1386,

-    1422,

-    1452,

-    1482,

-    1518

+    1392,

+    1434,

+    1464,

+    1500,

+    1530,

+    1560,

+    1596

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppWeb_ProxyInfo =

@@ -3923,10 +4059,10 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    1554,

-    1590,

-    1626

+    114,

+    36,

+    1632,

+    1668

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAppCommandWeb_ProxyInfo =

@@ -4000,15 +4136,15 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    0,

-    1710,

-    1590,

-    108,

-    144,

-    1764,

+    114,

+    1752,

+    1632,

+    222,

+    258,

     1806,

     1848,

-    1890

+    1890,

+    1932

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus_ProxyInfo =

@@ -4092,11 +4228,11 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1206,

-    36,

-    1932,

-    768,

-    1968

+    0,

+    150,

+    1974,

+    882,

+    2010

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatusValue_ProxyInfo =

@@ -4172,22 +4308,22 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1206,

-    2004,

-    738,

-    2040,

-    2076,

+    0,

+    2046,

+    852,

+    2082,

     2118,

-    2154,

-    2190,

-    2226,

-    2262,

-    2298,

-    2334,

+    2160,

+    2196,

+    2232,

+    2268,

+    2304,

+    2340,

     2376,

     2418,

     2460,

-    2502

+    2502,

+    2544

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus2_ProxyInfo =

@@ -4285,23 +4421,23 @@
     (unsigned short) -1,

     (unsigned short) -1,

     (unsigned short) -1,

-    1206,

-    2004,

-    738,

-    2040,

-    2076,

+    0,

+    2046,

+    852,

+    2082,

     2118,

-    2154,

-    2190,

-    2226,

-    2262,

-    2298,

-    2334,

+    2160,

+    2196,

+    2232,

+    2268,

+    2304,

+    2340,

     2376,

     2418,

     2460,

     2502,

-    2544

+    2544,

+    2586

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IPolicyStatus3_ProxyInfo =

@@ -4397,9 +4533,9 @@
 #pragma code_seg(".orpc")

 static const unsigned short IProcessLauncher_FormatStringOffsetTable[] =

     {

-    2586,

-    2622,

-    2664

+    2628,

+    2664,

+    2706

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher_ProxyInfo =

@@ -4451,10 +4587,10 @@
 #pragma code_seg(".orpc")

 static const unsigned short IProcessLauncher2_FormatStringOffsetTable[] =

     {

-    2586,

-    2622,

+    2628,

     2664,

-    2718

+    2706,

+    2760

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher2_ProxyInfo =

@@ -4532,6 +4668,7 @@
     ( CInterfaceProxyVtbl *) &_IGoogleUpdate3WebProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IPolicyStatus3ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IPolicyStatusProxyVtbl,

+    ( CInterfaceProxyVtbl *) &_IAppVersionWebProxyVtbl,

     ( CInterfaceProxyVtbl *) &_ICurrentStateProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IProcessLauncher2ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAppBundleWebProxyVtbl,

@@ -4548,6 +4685,7 @@
     ( CInterfaceStubVtbl *) &_IGoogleUpdate3WebStubVtbl,

     ( CInterfaceStubVtbl *) &_IPolicyStatus3StubVtbl,

     ( CInterfaceStubVtbl *) &_IPolicyStatusStubVtbl,

+    ( CInterfaceStubVtbl *) &_IAppVersionWebStubVtbl,

     ( CInterfaceStubVtbl *) &_ICurrentStateStubVtbl,

     ( CInterfaceStubVtbl *) &_IProcessLauncher2StubVtbl,

     ( CInterfaceStubVtbl *) &_IAppBundleWebStubVtbl,

@@ -4564,6 +4702,7 @@
     "IGoogleUpdate3Web",

     "IPolicyStatus3",

     "IPolicyStatus",

+    "IAppVersionWeb",

     "ICurrentState",

     "IProcessLauncher2",

     "IAppBundleWeb",

@@ -4581,6 +4720,7 @@
     &IID_IDispatch,

     &IID_IDispatch,

     &IID_IDispatch,

+    &IID_IDispatch,

     0,

     &IID_IDispatch,

     &IID_IDispatch,

@@ -4595,11 +4735,11 @@
 {

     IID_BS_LOOKUP_SETUP

 

-    IID_BS_LOOKUP_INITIAL_TEST( _updater_legacy_idl, 11, 8 )

+    IID_BS_LOOKUP_INITIAL_TEST( _updater_legacy_idl, 12, 8 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 4 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 2 )

     IID_BS_LOOKUP_NEXT_TEST( _updater_legacy_idl, 1 )

-    IID_BS_LOOKUP_RETURN_RESULT( _updater_legacy_idl, 11, *pIndex )

+    IID_BS_LOOKUP_RETURN_RESULT( _updater_legacy_idl, 12, *pIndex )

     

 }

 

@@ -4610,7 +4750,7 @@
     (const PCInterfaceName * ) & _updater_legacy_idl_InterfaceNamesList,

     (const IID ** ) & _updater_legacy_idl_BaseIIDList,

     & _updater_legacy_idl_IID_Lookup, 

-    11,

+    12,

     2,

     0, /* table of [async_uuid] interfaces */

     0, /* Filler1 */

diff --git a/tools/android/build_speed/benchmark.py b/tools/android/build_speed/benchmark.py
index c75af77c..01e556e1 100755
--- a/tools/android/build_speed/benchmark.py
+++ b/tools/android/build_speed/benchmark.py
@@ -72,7 +72,7 @@
 ]
 
 _TARGETS = {
-    'bundle': 'chrome_modern_public_bundle',
+    'bundle': 'monochrome_public_bundle',
     'apk': 'chrome_public_apk',
 }
 
diff --git a/tools/clang/scripts/apply_edits.py b/tools/clang/scripts/apply_edits.py
index 6512f03..ed7696b 100755
--- a/tools/clang/scripts/apply_edits.py
+++ b/tools/clang/scripts/apply_edits.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython3
 # Copyright 2013 The Chromium Authors
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
diff --git a/tools/clang/scripts/run_tool.py b/tools/clang/scripts/run_tool.py
index 34f8e1c..cff6384 100755
--- a/tools/clang/scripts/run_tool.py
+++ b/tools/clang/scripts/run_tool.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython3
 # Copyright 2013 The Chromium Authors
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index bb44b93..e36403c 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -761,24 +761,24 @@
     },
 
     'chromium.webrtc': {
-      'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64',
-      'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot',
-      'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot',
-      'WebRTC Chromium Win Builder': 'release_bot_minimal_symbols_no_com_init_hooks_with_codecs',
+      'WebRTC Chromium Android Builder': 'android_debug_static_bot_arm64_reclient',
+      'WebRTC Chromium Linux Builder': 'gpu_tests_release_bot_reclient',
+      'WebRTC Chromium Mac Builder': 'gpu_tests_release_bot_reclient',
+      'WebRTC Chromium Win Builder': 'release_bot_minimal_symbols_no_com_init_hooks_with_codecs_reclient',
     },
 
     'chromium.webrtc.fyi': {
-      'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols',
-      'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot',
-      'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64',
-      'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot',
-      'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot',
-      'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot',
-      'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot',
-      'WebRTC Chromium FYI Win Builder': 'release_bot_minimal_symbols_no_com_init_hooks_with_codecs',
-      'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_no_com_init_hooks_with_codecs',
-      'WebRTC Chromium FYI ios-device': 'ios_device_release_compile_only',
-      'WebRTC Chromium FYI ios-simulator': 'ios_simulator_debug_static_bot_xctest',
+      'WebRTC Chromium FYI Android Builder': 'android_release_bot_minimal_symbols_reclient',
+      'WebRTC Chromium FYI Android Builder (dbg)': 'android_debug_static_bot_reclient',
+      'WebRTC Chromium FYI Android Builder ARM64 (dbg)': 'android_debug_static_bot_arm64_reclient',
+      'WebRTC Chromium FYI Linux Builder': 'gpu_tests_release_bot_reclient',
+      'WebRTC Chromium FYI Linux Builder (dbg)': 'debug_bot_reclient',
+      'WebRTC Chromium FYI Mac Builder': 'gpu_tests_release_bot_reclient',
+      'WebRTC Chromium FYI Mac Builder (dbg)': 'debug_bot_reclient',
+      'WebRTC Chromium FYI Win Builder': 'release_bot_minimal_symbols_no_com_init_hooks_with_codecs_reclient',
+      'WebRTC Chromium FYI Win Builder (dbg)': 'debug_bot_no_com_init_hooks_with_codecs_reclient',
+      'WebRTC Chromium FYI ios-device': 'ios_device_release_compile_only_reclient',
+      'WebRTC Chromium FYI ios-simulator': 'ios_simulator_debug_static_bot_xctest_reclient',
     },
 
     'chromium.win': {
@@ -1552,12 +1552,12 @@
       'android', 'debug_bot_reclient', 'android_external', 'android_fastbuild',
     ],
 
-    'android_debug_static_bot': [
-      'android', 'debug_static_bot',
+    'android_debug_static_bot_arm64_reclient': [
+      'android', 'debug_static_bot_reclient', 'arm64',
     ],
 
-    'android_debug_static_bot_arm64': [
-      'android', 'debug_static_bot', 'arm64',
+    'android_debug_static_bot_reclient': [
+      'android', 'debug_static_bot_reclient',
     ],
 
     'android_debug_static_bot_x64_reclient_webview_trichrome_webview_shell': [
@@ -1637,6 +1637,10 @@
       'strip_debug_info', 'webview_monochrome',
     ],
 
+    'android_release_bot_minimal_symbols_reclient': [
+      'android', 'release_bot_reclient', 'minimal_symbols', 'strip_debug_info',
+    ],
+
     'android_release_bot_minimal_symbols_x64_fastbuild_webview_trichrome_reclient': [
       'android', 'release_bot_reclient', 'minimal_symbols', 'x64',
       'strip_debug_info', 'android_fastbuild', 'webview_trichrome',
@@ -2525,8 +2529,8 @@
       'debug_bot_local_build',
     ],
 
-    'debug_bot_no_com_init_hooks_with_codecs': [
-      'debug_bot', 'no_com_init_hooks', 'chrome_with_codecs'
+    'debug_bot_no_com_init_hooks_with_codecs_reclient': [
+      'debug_bot_reclient', 'no_com_init_hooks', 'chrome_with_codecs'
     ],
 
     'debug_bot_reclient': [
@@ -3529,8 +3533,8 @@
       'release_bot', 'minimal_symbols', 'no_clang', 'no_goma',
     ],
 
-    'release_bot_minimal_symbols_no_com_init_hooks_with_codecs': [
-      'release_bot', 'minimal_symbols', 'no_com_init_hooks', 'chrome_with_codecs'
+    'release_bot_minimal_symbols_no_com_init_hooks_with_codecs_reclient': [
+      'release_bot_reclient', 'minimal_symbols', 'no_com_init_hooks', 'chrome_with_codecs'
     ],
 
     'release_bot_minimal_symbols_reclient': [
diff --git a/tools/mb/mb_config_expectations/chromium.webrtc.fyi.json b/tools/mb/mb_config_expectations/chromium.webrtc.fyi.json
index aca6c87..cf3f578 100644
--- a/tools/mb/mb_config_expectations/chromium.webrtc.fyi.json
+++ b/tools/mb/mb_config_expectations/chromium.webrtc.fyi.json
@@ -10,7 +10,7 @@
       "strip_debug_info": true,
       "symbol_level": 1,
       "target_os": "android",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Android Builder (dbg)": {
@@ -22,7 +22,7 @@
       "proprietary_codecs": true,
       "symbol_level": 1,
       "target_os": "android",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Android Builder ARM64 (dbg)": {
@@ -35,7 +35,7 @@
       "symbol_level": 1,
       "target_cpu": "arm64",
       "target_os": "android",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Linux Builder": {
@@ -45,7 +45,7 @@
       "is_component_build": false,
       "is_debug": false,
       "proprietary_codecs": true,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Linux Builder (dbg)": {
@@ -53,7 +53,7 @@
       "is_component_build": true,
       "is_debug": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Mac Builder": {
@@ -63,7 +63,7 @@
       "is_component_build": false,
       "is_debug": false,
       "proprietary_codecs": true,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Mac Builder (dbg)": {
@@ -71,7 +71,7 @@
       "is_component_build": true,
       "is_debug": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Win Builder": {
@@ -83,7 +83,7 @@
       "is_debug": false,
       "proprietary_codecs": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI Win Builder (dbg)": {
@@ -94,7 +94,7 @@
       "is_debug": true,
       "proprietary_codecs": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI ios-device": {
@@ -108,7 +108,7 @@
       "target_cpu": "arm64",
       "target_environment": "device",
       "target_os": "ios",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium FYI ios-simulator": {
@@ -120,7 +120,7 @@
       "target_cpu": "x64",
       "target_environment": "simulator",
       "target_os": "ios",
-      "use_goma": true
+      "use_remoteexec": true
     }
   }
 }
\ No newline at end of file
diff --git a/tools/mb/mb_config_expectations/chromium.webrtc.json b/tools/mb/mb_config_expectations/chromium.webrtc.json
index 12b6cfde..5b77589 100644
--- a/tools/mb/mb_config_expectations/chromium.webrtc.json
+++ b/tools/mb/mb_config_expectations/chromium.webrtc.json
@@ -9,7 +9,7 @@
       "symbol_level": 1,
       "target_cpu": "arm64",
       "target_os": "android",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium Linux Builder": {
@@ -19,7 +19,7 @@
       "is_component_build": false,
       "is_debug": false,
       "proprietary_codecs": true,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium Mac Builder": {
@@ -29,7 +29,7 @@
       "is_component_build": false,
       "is_debug": false,
       "proprietary_codecs": true,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "WebRTC Chromium Win Builder": {
@@ -41,7 +41,7 @@
       "is_debug": false,
       "proprietary_codecs": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   }
 }
\ No newline at end of file
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 28eb69dc..7b42d05 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -18070,15 +18070,6 @@
   </description>
 </action>
 
-<action name="MobileBookmarkManagerMultipleEntriesOpened">
-  <owner>wylieb@chromium.org</owner>
-  <owner>chrome-collections@google.com</owner>
-  <description>
-    Recorded when multi-selection is opened from the bookmark manager. Possible
-    that the selection is only 1 bookmark.
-  </description>
-</action>
-
 <action name="MobileBookmarkManagerOpen">
   <owner>ianwen@chromium.org</owner>
   <description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 956d9ad..4ddc1f7 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -24168,6 +24168,8 @@
   <int value="44" label="Partial width custom tab CTF_PARTIAL_SIDE_SHEET"/>
   <int value="45" label="Break point EXTRA_ACTIVITY_SIDE_SHEET_BREAKPOINT_DP"/>
   <int value="46" label="Initial width EXTRA_INITIAL_ACTIVITY_WIDTH_PX"/>
+  <int value="47"
+      label="Maximize button EXTRA_ACTIVITY_SIDE_SHEET_ENABLE_MAXIMIZATION"/>
 </enum>
 
 <enum name="CustomTabsParallelRequestStatusOnStart">
@@ -42130,6 +42132,7 @@
   <int value="4457"
       label="ServiceWorkerBypassFetchHandlerForMainResourceByOriginTrial"/>
   <int value="4458" label="V8RegExpUnicodeSetIncompatibilitiesWithUnicodeMode"/>
+  <int value="4459" label="FedCmAutoReauthn"/>
 </enum>
 
 <enum name="FeaturePolicyAllowlistType">
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
index 8deb8b04..06c8a042 100644
--- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml
+++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -753,39 +753,6 @@
   </token>
 </histogram>
 
-<histogram
-    name="Bookmarks.MultipleOpened.OpenBookmarkTimeInterval2.{BookmarkType}"
-    units="ms" expires_after="2023-06-25">
-  <owner>wylieb@chromium.org</owner>
-  <owner>chrome-collections@google.com</owner>
-  <component>UI&gt;Browser&gt;Bookmarks</component>
-  <summary>
-    Records the time interval between the time the bookmark was added/opened.
-
-    Recorded when multi-selection is opened from the bookmark manager. Possible
-    that the selection is only 1 bookmark.
-  </summary>
-  <token key="BookmarkType">
-    <variant name="Normal" summary="a normal bookmark."/>
-    <variant name="Partner" summary="a partner bookmark."/>
-    <variant name="ReadingList" summary="a reading list article."/>
-  </token>
-</histogram>
-
-<histogram name="Bookmarks.MultipleOpened.OpenBookmarkType" enum="BookmarkType"
-    expires_after="2023-06-25">
-  <owner>wylieb@chromium.org</owner>
-  <owner>chrome-collections@google.com</owner>
-  <component>UI&gt;Browser&gt;Bookmarks</component>
-  <summary>
-    Logs whether the bookmark entry is a user bookmark or a partner bookmark
-    when it is opened.
-
-    Recorded when multi-selection is opened from the bookmark manager. Possible
-    that the selection is only 1 bookmark.
-  </summary>
-</histogram>
-
 <histogram name="Bookmarks.OnFaviconsChangedIconURL" enum="BooleanHit"
     expires_after="M77">
   <owner>pkotwicz@chromium.org</owner>
@@ -814,9 +781,8 @@
 </histogram>
 
 <histogram name="Bookmarks.OpenBookmarkTimeInterval2.{BookmarkType}" units="ms"
-    expires_after="2023-06-25">
-  <owner>wylieb@chromium.org</owner>
-  <owner>chrome-collections@google.com</owner>
+    expires_after="2022-02-15">
+  <owner>dtrainor@chromium.org</owner>
   <component>UI&gt;Browser&gt;Bookmarks</component>
   <summary>
     A new version of Bookmarks.OpenBookmarkTimeInterval.{BookmarkType}, to rule
@@ -831,8 +797,7 @@
 
 <histogram name="Bookmarks.OpenBookmarkType" enum="BookmarkType"
     expires_after="2023-06-25">
-  <owner>wylieb@chromium.org</owner>
-  <owner>chrome-collections@google.com</owner>
+  <owner>wychen@chromium.org</owner>
   <component>UI&gt;Browser&gt;Bookmarks</component>
   <summary>
     Logs whether the bookmark entry is a user bookmark or a partner bookmark
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml
index de9cfc4..88efa314 100644
--- a/tools/metrics/histograms/metadata/net/histograms.xml
+++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -203,7 +203,7 @@
 </histogram>
 
 <histogram name="Net.AlternateProtocolBrokenLocation"
-    enum="BrokenAlternateProtocolLocation" expires_after="2023-02-19">
+    enum="BrokenAlternateProtocolLocation" expires_after="2023-08-19">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml
index 5bae3ec..8611cd6 100644
--- a/tools/metrics/histograms/metadata/settings/histograms.xml
+++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -284,7 +284,7 @@
 </histogram>
 
 <histogram name="Settings.PrivacyGuide.CanShowNTPPromo" enum="Boolean"
-    expires_after="2023-03-19">
+    expires_after="2023-07-30">
   <owner>msramek@chromium.org</owner>
   <owner>rainhard@chromium.org</owner>
   <owner>chrome-friendly-settings@google.com</owner>
@@ -306,7 +306,7 @@
 </histogram>
 
 <histogram name="Settings.PrivacyGuide.FlowLength" units="steps"
-    expires_after="2023-07-26">
+    expires_after="2023-07-30">
   <owner>rainhard@chromium.org</owner>
   <owner>msramek@chromium.org</owner>
   <owner>chrome-friendly-settings@google.com</owner>
@@ -318,7 +318,7 @@
 </histogram>
 
 <histogram name="Settings.PrivacyGuide.NextNavigation"
-    enum="SettingsPrivacyGuideInteractions" expires_after="2023-06-04">
+    enum="SettingsPrivacyGuideInteractions" expires_after="2023-07-30">
   <owner>harrisonsean@chromium.org</owner>
   <owner>rainhard@chromium.org</owner>
   <owner>chrome-friendly-settings@google.com</owner>
@@ -328,7 +328,7 @@
 </histogram>
 
 <histogram name="Settings.PrivacyGuide.SettingsStates"
-    enum="SettingsPrivacyGuideSettingsStates" expires_after="2023-03-19">
+    enum="SettingsPrivacyGuideSettingsStates" expires_after="2023-07-30">
   <owner>harrisonsean@chromium.org</owner>
   <owner>rainhard@chromium.org</owner>
   <owner>chrome-friendly-settings@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml
index 678c652..6852af3 100644
--- a/tools/metrics/histograms/metadata/signin/histograms.xml
+++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -239,7 +239,7 @@
 </histogram>
 
 <histogram base="true" name="Signin.AndroidGetAccountsTime" units="ms"
-    expires_after="2023-03-05">
+    expires_after="2023-06-05">
   <owner>alexilin@chromium.org</owner>
   <owner>bsazonov@chromium.org</owner>
   <summary>
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv
index 487bfcf..dffbf79 100644
--- a/tools/perf/benchmark.csv
+++ b/tools/perf/benchmark.csv
@@ -55,7 +55,6 @@
 rendering.desktop.notracing,"jonross@chromium.org, chrome-gpu-metrics@google.com",Internals>GPU>Metrics,https://bit.ly/rendering-benchmarks,"motionmark,motionmark_ramp"
 rendering.mobile,"jonross@chromium.org, chrome-gpu-metrics@google.com",Internals>GPU>Metrics,https://bit.ly/rendering-benchmarks,"backdrop_filter,fastpath,gpu_rasterization,image_decoding,key_idle_power,key_noop,key_silk,maps,motionmark,motionmark_ramp,pathological_mobile_sites,representative_mac_desktop,representative_mobile,representative_win_desktop,required_webgl,simple_canvas,simple_mobile_sites,throughput_test,top_real_world_desktop,top_real_world_mobile,tough_animation,tough_canvas,tough_compositor,tough_filters,tough_path_rendering,tough_pinch_zoom_mobile,tough_scheduling,tough_scrollbar_scrolling,tough_scrolling,tough_texture_upload,tough_webgl,use_fake_camera_device"
 rendering.mobile.notracing,"jonross@chromium.org, chrome-gpu-metrics@google.com",Internals>GPU>Metrics,https://bit.ly/rendering-benchmarks,"motionmark,motionmark_ramp"
-resource_sizes_chrome_modern_public_minimal_apks,"agrieve@chromium.org, jbudorick@chromium.org",Build,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py,
 resource_sizes_chromecast,"juke@chromium.org, eliribble@chromium.org",Chromecast,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py,
 resource_sizes_lacros_chrome,"erikchen@chromium.org, huangs@chromium.org",OS>LaCrOS,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py,
 resource_sizes_monochrome_minimal_apks,"agrieve@chromium.org, jbudorick@chromium.org",Build,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py,
diff --git a/tools/perf/contrib/vr_benchmarks/BUILD.gn b/tools/perf/contrib/vr_benchmarks/BUILD.gn
index cd53fa7..a37aea9 100644
--- a/tools/perf/contrib/vr_benchmarks/BUILD.gn
+++ b/tools/perf/contrib/vr_benchmarks/BUILD.gn
@@ -33,7 +33,7 @@
       "//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk",
     ]
 
-    data_deps += [ "//chrome/android:chrome_modern_public_bundle" ]
+    data_deps += [ "//chrome/android:monochrome_public_bundle" ]
   }
 
   if (is_win) {
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index 7368c87..d2f9c0c 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -468,14 +468,6 @@
                 },
             },
             {
-                'name': 'resource_sizes_chrome_modern_public_minimal_apks',
-                'isolate': 'resource_sizes_chrome_modern_public_minimal_apks',
-                'type': TEST_TYPES.GENERIC,
-                'resultdb': {
-                    'has_native_resultdb_integration': True,
-                },
-            },
-            {
                 'name': 'resource_sizes_trichrome_google',
                 'isolate': 'resource_sizes_trichrome_google',
                 'type': TEST_TYPES.GENERIC,
@@ -561,14 +553,6 @@
                 },
             },
             {
-                'name': 'resource_sizes_chrome_modern_public_minimal_apks',
-                'isolate': 'resource_sizes_chrome_modern_public_minimal_apks',
-                'type': TEST_TYPES.GENERIC,
-                'resultdb': {
-                    'has_native_resultdb_integration': True,
-                },
-            },
-            {
                 'name': 'resource_sizes_trichrome',
                 'isolate': 'resource_sizes_trichrome',
                 'type': TEST_TYPES.GENERIC,
@@ -1610,7 +1594,6 @@
 
 
 OTHER_BENCHMARKS = {
-    'resource_sizes_chrome_modern_public_minimal_apks': RESOURCE_SIZES_METADATA,
     'resource_sizes_monochrome_minimal_apks': RESOURCE_SIZES_METADATA,
     'resource_sizes_monochrome_public_minimal_apks': RESOURCE_SIZES_METADATA,
     'resource_sizes_trichrome': RESOURCE_SIZES_METADATA,
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index eee87c34..4e4aeb7 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "4a5fe0dbde2818c8752df7a36cd8f60c052e8f56",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/656582b37c3b7214e3b20aba8fd74d41b35a7160/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/a352070f45024ce07dfec791a89ed2af785ce46c/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/accessibility/platform/ax_platform_node_delegate.cc b/ui/accessibility/platform/ax_platform_node_delegate.cc
index 3f6b2a4..d096658 100644
--- a/ui/accessibility/platform/ax_platform_node_delegate.cc
+++ b/ui/accessibility/platform/ax_platform_node_delegate.cc
@@ -858,8 +858,9 @@
   std::vector<ax::mojom::Action> supported_actions;
 
   // The default action must be listed at index 0.
-  // TODO(crbug.com/1370076): Find out why some nodes do not expose a
-  // default action (HasDefaultActionVerb() is false).
+  // TODO(crbug.com/1370076): Do this only if (HasDefaultActionVerb()), After
+  // some time tracking the DCHECK at
+  // BrowserAccessibilityManager::DoDefaultAction()
   supported_actions.push_back(ax::mojom::Action::kDoDefault);
 
   // Users expect to be able to bring a context menu on any object via e.g.
diff --git a/ui/android/java/src/org/chromium/ui/UiUtils.java b/ui/android/java/src/org/chromium/ui/UiUtils.java
index f12a0f1..a5d4982 100644
--- a/ui/android/java/src/org/chromium/ui/UiUtils.java
+++ b/ui/android/java/src/org/chromium/ui/UiUtils.java
@@ -5,6 +5,7 @@
 package org.chromium.ui;
 
 import android.content.Context;
+import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -363,15 +364,26 @@
      * Gets a drawable from the resources and applies the specified tint to it. Uses Support Library
      * for vector drawables and tinting on older Android versions.
      * @param drawableId The resource id for the drawable.
-     * @param tintColorId The resource id for the color or ColorStateList.
+     * @param tintColorId The resource id for the color to build ColorStateList with.
      */
     public static Drawable getTintedDrawable(
             Context context, @DrawableRes int drawableId, @ColorRes int tintColorId) {
+        return getTintedDrawable(
+                context, drawableId, AppCompatResources.getColorStateList(context, tintColorId));
+    }
+
+    /**
+     * Gets a drawable from the resources and applies the specified tint to it. Uses Support Library
+     * for vector drawables and tinting on older Android versions.
+     * @param drawableId The resource id for the drawable.
+     * @param colorStateList The color state list to apply to the drawable.
+     */
+    public static Drawable getTintedDrawable(
+            Context context, @DrawableRes int drawableId, ColorStateList list) {
         Drawable drawable = AppCompatResources.getDrawable(context, drawableId);
         assert drawable != null;
         drawable = DrawableCompat.wrap(drawable).mutate();
-        DrawableCompat.setTintList(
-                drawable, AppCompatResources.getColorStateList(context, tintColorId));
+        DrawableCompat.setTintList(drawable, list);
         return drawable;
     }
 
diff --git a/ui/base/interaction/element_tracker.h b/ui/base/interaction/element_tracker.h
index 1770627..0f8549960 100644
--- a/ui/base/interaction/element_tracker.h
+++ b/ui/base/interaction/element_tracker.h
@@ -270,6 +270,14 @@
 #define DEFINE_CUSTOM_ELEMENT_EVENT_TYPE(EventName) \
   DEFINE_ELEMENT_IDENTIFIER_VALUE(EventName)
 
+// Macros for declaring custom class element event type. Put the DECLARE call in
+// your .h file in your class declaration, and the DEFINE in the corresponding
+// .cc file.
+#define DECLARE_CLASS_CUSTOM_ELEMENT_EVENT_TYPE(EventName) \
+  DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(EventName)
+#define DEFINE_CLASS_CUSTOM_ELEMENT_EVENT_TYPE(ClassName, EventName) \
+  DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(ClassName, EventName)
+
 // This produces a unique, mangled name that can safely be used in tests
 // without having to worry about global name collisions. For production code,
 // use DECLARE/DEFINE above instead.
diff --git a/ui/base/interaction/element_tracker_unittest.cc b/ui/base/interaction/element_tracker_unittest.cc
index 0bcbe3a..b5d562a 100644
--- a/ui/base/interaction/element_tracker_unittest.cc
+++ b/ui/base/interaction/element_tracker_unittest.cc
@@ -29,6 +29,11 @@
 const ElementContext kElementContext1(1);
 const ElementContext kElementContext2(2);
 
+struct EventTestStruct {
+  DECLARE_CLASS_CUSTOM_ELEMENT_EVENT_TYPE(kCustomEventType2);
+};
+DEFINE_CLASS_CUSTOM_ELEMENT_EVENT_TYPE(EventTestStruct, kCustomEventType2);
+
 }  // namespace
 
 TEST(TrackedElementTest, IsATest) {
@@ -455,6 +460,20 @@
           e1.get(), kCustomEventType1));
 }
 
+TEST(ElementTrackerTest, AddClassCustomEventCallback) {
+  UNCALLED_MOCK_CALLBACK(ElementTracker::Callback, callback);
+  auto subscription =
+      ElementTracker::GetElementTracker()->AddCustomEventCallback(
+          EventTestStruct::kCustomEventType2, kElementContext1, callback.Get());
+  test::TestElementPtr e1 = std::make_unique<test::TestElement>(
+      kElementIdentifier1, kElementContext1);
+  e1->Show();
+  EXPECT_CALL_IN_SCOPE(
+      callback, Run(e1.get()),
+      ElementTracker::GetFrameworkDelegate()->NotifyCustomEvent(
+          e1.get(), EventTestStruct::kCustomEventType2));
+}
+
 TEST(ElementTrackerTest, MultipleCustomEventCallbacks) {
   // We will test that custom events work with multiple event types, including
   // in the edge case that the event type is the same as an element identifier
diff --git a/ui/color/color_id.h b/ui/color/color_id.h
index 48be4182..27a29103 100644
--- a/ui/color/color_id.h
+++ b/ui/color/color_id.h
@@ -349,9 +349,11 @@
   E_CPONLY(kColorTextfieldBackgroundDisabled) \
   E_CPONLY(kColorTextfieldForeground) \
   E_CPONLY(kColorTextfieldForegroundDisabled) \
+  E_CPONLY(kColorTextfieldForegroundInvalid) \
   E_CPONLY(kColorTextfieldForegroundPlaceholder) \
   E_CPONLY(kColorTextfieldSelectionBackground) \
   E_CPONLY(kColorTextfieldSelectionForeground) \
+  E_CPONLY(kColorTextfieldInvalidOutline) \
   E_CPONLY(kColorThrobber) \
   E_CPONLY(kColorThrobberPreconnect) \
   E_CPONLY(kColorToggleButtonShadow) \
diff --git a/ui/color/material_ui_color_mixer.cc b/ui/color/material_ui_color_mixer.cc
index dd6ed03..7940e31 100644
--- a/ui/color/material_ui_color_mixer.cc
+++ b/ui/color/material_ui_color_mixer.cc
@@ -47,6 +47,14 @@
   mixer[kColorSliderThumbMinimal] = {kColorSysSecondary};
   mixer[kColorSliderTrack] = {kColorSysOnPrimary};
   mixer[kColorSliderTrackMinimal] = {kColorSysOnSecondary};
+  mixer[kColorTextfieldBackground] = {kColorSysSurface};
+  mixer[kColorTextfieldBackgroundDisabled] = {kColorSysSurface};
+  mixer[kColorTextfieldForeground] = {kColorSysOnSurface};
+  mixer[kColorTextfieldForegroundInvalid] = {
+      BlendForMinContrast(kColorSysError, kColorTextfieldBackground)};
+  mixer[kColorTextfieldForegroundDisabled] = {kColorSysStateDisabled};
+  mixer[kColorTextfieldForegroundPlaceholder] = {kColorSysOnSurface};
+  mixer[kColorTextfieldInvalidOutline] = {kColorTextfieldForegroundInvalid};
   mixer[kColorToggleButtonShadow] = {kColorSysOutline};
   mixer[kColorToggleButtonThumbOff] = {kColorSysOutline};
   mixer[kColorToggleButtonThumbOn] = {kColorSysOnPrimary};
diff --git a/ui/color/ui_color_mixer.cc b/ui/color/ui_color_mixer.cc
index 45bea447..96f5280 100644
--- a/ui/color/ui_color_mixer.cc
+++ b/ui/color/ui_color_mixer.cc
@@ -252,11 +252,13 @@
   mixer[kColorTextfieldBackground] = {kColorEndpointBackground};
   mixer[kColorTextfieldBackgroundDisabled] = {kColorPrimaryBackground};
   mixer[kColorTextfieldForeground] = {kColorPrimaryForeground};
+  mixer[kColorTextfieldForegroundInvalid] = {kColorTextfieldForeground};
   mixer[kColorTextfieldForegroundDisabled] = {kColorDisabledForeground};
   mixer[kColorTextfieldForegroundPlaceholder] = {
       kColorTextfieldForegroundDisabled};
   mixer[kColorTextfieldSelectionBackground] = {kColorTextSelectionBackground};
   mixer[kColorTextfieldSelectionForeground] = {kColorTextSelectionForeground};
+  mixer[kColorTextfieldInvalidOutline] = {kColorAlertHighSeverity};
   mixer[kColorThrobber] = {kColorAccent};
   mixer[kColorThrobberPreconnect] = {kColorSubtleAccent};
   mixer[kColorToggleButtonShadow] = {kColorMidground};
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index 67ac6ca..5cff889 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -459,19 +459,8 @@
     "//base",
     "//skia",
   ]
-  if (is_mac) {
-    sources += [
-      "hdr_metadata_mac.h",
-      "hdr_metadata_mac.mm",
-      "mac/display_icc_profiles.cc",
-      "mac/display_icc_profiles.h",
-    ]
-    frameworks = [
-      "CoreFoundation.framework",
-      "CoreGraphics.framework",
-    ]
-  }
-  if (use_blink && is_ios) {
+
+  if (is_apple && use_blink) {
     sources += [
       "hdr_metadata_mac.h",
       "hdr_metadata_mac.mm",
@@ -480,6 +469,12 @@
       "CoreFoundation.framework",
       "CoreGraphics.framework",
     ]
+    if (is_mac) {
+      sources += [
+        "mac/display_icc_profiles.cc",
+        "mac/display_icc_profiles.h",
+      ]
+    }
   }
   defines = [ "COLOR_SPACE_IMPLEMENTATION" ]
 }
diff --git a/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.cc b/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.cc
index faafbc0..c3a7bec 100644
--- a/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.cc
+++ b/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.cc
@@ -201,6 +201,12 @@
   return binding;
 }
 
+// static
+bool NativePixmapEGLX11Binding::CanImportNativeGLXPixmap() {
+  auto* conn = x11::Connection::Get();
+  return conn->dri3().present() && conn->glx().present();
+}
+
 bool NativePixmapEGLX11Binding::BindTexture(GLenum target, GLuint texture_id) {
   gl::ScopedTextureBinder binder(base::strict_cast<unsigned int>(target),
                                  base::strict_cast<unsigned int>(texture_id));
diff --git a/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h b/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h
index c3d04b4..b39f50d 100644
--- a/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h
+++ b/ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h
@@ -32,6 +32,8 @@
       GLenum target,
       GLuint texture_id);
 
+  static bool CanImportNativeGLXPixmap();
+
   // NativePixmapGLBinding:
   GLuint GetInternalFormat() override;
   GLenum GetDataType() override;
diff --git a/ui/ozone/platform/x11/x11_surface_factory.cc b/ui/ozone/platform/x11/x11_surface_factory.cc
index 1d966a6..3538b61e 100644
--- a/ui/ozone/platform/x11/x11_surface_factory.cc
+++ b/ui/ozone/platform/x11/x11_surface_factory.cc
@@ -29,9 +29,33 @@
 namespace ui {
 namespace {
 
+enum class NativePixmapSupportType {
+  // Importing native pixmaps not supported.
+  kNone,
+
+  // Native pixmaps are imported directly into EGL using the
+  // EGL_EXT_image_dma_buf_import extension.
+  kDMABuf,
+
+  // Native pixmaps are first imported as X11 pixmaps using DRI3 and then into
+  // EGL. Using pixmap imports is currently not supported.
+  kX11Pixmap,
+};
+
+NativePixmapSupportType GetNativePixmapSupportType() {
+  if (gl::GLSurfaceEGL::GetGLDisplayEGL()
+          ->ext->b_EGL_EXT_image_dma_buf_import) {
+    return NativePixmapSupportType::kDMABuf;
+  } else if (NativePixmapEGLX11Binding::CanImportNativeGLXPixmap()) {
+    return NativePixmapSupportType::kX11Pixmap;
+  } else {
+    return NativePixmapSupportType::kNone;
+  }
+}
+
 class GLOzoneEGLX11 : public GLOzoneEGL {
  public:
-  GLOzoneEGLX11() = default;
+  GLOzoneEGLX11() : support_type_(GetNativePixmapSupportType()) {}
 
   GLOzoneEGLX11(const GLOzoneEGLX11&) = delete;
   GLOzoneEGLX11& operator=(const GLOzoneEGLX11&) = delete;
@@ -46,8 +70,9 @@
   }
 
   bool CanImportNativePixmap() override {
-    return gl::GLSurfaceEGL::GetGLDisplayEGL()
-        ->ext->b_EGL_EXT_image_dma_buf_import;
+    // TODO(crbug.com/1236697): enable X11Pixmap support when the Vaapi
+    // pipeline supports it.
+    return support_type_ == NativePixmapSupportType::kDMABuf;
   }
 
   std::unique_ptr<NativePixmapGLBinding> ImportNativePixmap(
@@ -58,9 +83,19 @@
       const gfx::ColorSpace& color_space,
       GLenum target,
       GLuint texture_id) override {
-    return NativePixmapEGLBinding::Create(pixmap, plane_format, plane,
-                                          plane_size, color_space, target,
-                                          texture_id);
+    switch (support_type_) {
+      case NativePixmapSupportType::kDMABuf: {
+        return NativePixmapEGLBinding::Create(pixmap, plane_format, plane,
+                                              plane_size, color_space, target,
+                                              texture_id);
+      }
+      case NativePixmapSupportType::kX11Pixmap: {
+        return NativePixmapEGLX11Binding::Create(
+            pixmap, plane_format, plane_size, target, texture_id);
+      }
+      default:
+        return nullptr;
+    }
   }
 
   scoped_refptr<gl::GLSurface> CreateViewGLSurface(
@@ -115,6 +150,7 @@
   }
 
  private:
+  const NativePixmapSupportType support_type_;
   bool is_swiftshader_ = false;
 };
 
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn
index 468359e..10781785 100644
--- a/ui/views/BUILD.gn
+++ b/ui/views/BUILD.gn
@@ -100,6 +100,7 @@
     "animation/square_ink_drop_ripple.h",
     "animation/widget_fade_animator.h",
     "background.h",
+    "badge_painter.h",
     "border.h",
     "bubble/bubble_border.h",
     "bubble/bubble_border_arrow_utils.h",
@@ -113,6 +114,7 @@
     "color_chooser/color_chooser_listener.h",
     "context_menu_controller.h",
     "controls/animated_image_view.h",
+    "controls/badge.h",
     "controls/button/button.h",
     "controls/button/button_controller.h",
     "controls/button/button_controller_delegate.h",
@@ -158,7 +160,6 @@
     "controls/menu/menu_scroll_view_container.h",
     "controls/menu/menu_separator.h",
     "controls/menu/menu_types.h",
-    "controls/menu/new_badge.h",
     "controls/menu/submenu_view.h",
     "controls/message_box_view.h",
     "controls/native/native_view_host.h",
@@ -331,6 +332,7 @@
     "animation/square_ink_drop_ripple.cc",
     "animation/widget_fade_animator.cc",
     "background.cc",
+    "badge_painter.cc",
     "border.cc",
     "bubble/bubble_border.cc",
     "bubble/bubble_border_arrow_utils.cc",
@@ -344,6 +346,7 @@
     "cascading_property.cc",
     "context_menu_controller.cc",
     "controls/animated_image_view.cc",
+    "controls/badge.cc",
     "controls/button/button.cc",
     "controls/button/button_controller.cc",
     "controls/button/checkbox.cc",
@@ -385,7 +388,6 @@
     "controls/menu/menu_runner_impl_adapter.cc",
     "controls/menu/menu_scroll_view_container.cc",
     "controls/menu/menu_separator.cc",
-    "controls/menu/new_badge.cc",
     "controls/menu/submenu_view.cc",
     "controls/message_box_view.cc",
     "controls/native/native_view_host.cc",
diff --git a/ui/views/badge_painter.cc b/ui/views/badge_painter.cc
new file mode 100644
index 0000000..75f077f
--- /dev/null
+++ b/ui/views/badge_painter.cc
@@ -0,0 +1,89 @@
+// Copyright 2020 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/views/badge_painter.h"
+
+#include <algorithm>
+
+#include "base/i18n/rtl.h"
+#include "ui/color/color_id.h"
+#include "ui/color/color_provider.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/font_list.h"
+#include "ui/gfx/geometry/insets.h"
+#include "ui/gfx/text_constants.h"
+#include "ui/gfx/text_utils.h"
+#include "ui/views/view.h"
+
+namespace views {
+
+namespace {
+
+// Returns the appropriate font to use for the badge based on the font
+// currently being used to render the title of the menu item.
+gfx::FontList DeriveBadgeFont(const gfx::FontList& primary_font) {
+  // Preferred font is slightly smaller and slightly more bold than the title
+  // font. The size change is required to make it look correct in the badge; we
+  // add a small degree of bold to prevent color smearing/blurring due to font
+  // smoothing. This ensures readability on all platforms and in both light and
+  // dark modes.
+  return primary_font.Derive(BadgePainter::kBadgeFontSizeAdjustment,
+                             gfx::Font::NORMAL, gfx::Font::Weight::MEDIUM);
+}
+
+// Returns the highlight rect for the badge given the font and text rect
+// for the badge text.
+gfx::Rect GetBadgeRectOutsetAroundText(const gfx::FontList& badge_font,
+                                       const gfx::Rect& badge_text_rect) {
+  gfx::Rect badge_rect = badge_text_rect;
+  badge_rect.Inset(-gfx::AdjustVisualBorderForFont(
+      badge_font, gfx::Insets(BadgePainter::kBadgeInternalPadding)));
+  return badge_rect;
+}
+
+}  // namespace
+
+// static
+void BadgePainter::PaintBadge(gfx::Canvas* canvas,
+                              const View* view,
+                              int unmirrored_badge_left_x,
+                              int text_top_y,
+                              const std::u16string& text,
+                              const gfx::FontList& primary_font) {
+  gfx::FontList badge_font = DeriveBadgeFont(primary_font);
+
+  // Calculate bounding box for badge text.
+  unmirrored_badge_left_x += kBadgeInternalPadding;
+  text_top_y += gfx::GetFontCapHeightCenterOffset(primary_font, badge_font);
+  gfx::Rect badge_text_bounds(gfx::Point(unmirrored_badge_left_x, text_top_y),
+                              gfx::GetStringSize(text, badge_font));
+  if (base::i18n::IsRTL()) {
+    badge_text_bounds.set_x(view->GetMirroredXForRect(badge_text_bounds));
+  }
+
+  // Render the badge itself.
+  cc::PaintFlags flags;
+  const ui::ColorProvider* color_provider = view->GetColorProvider();
+  const SkColor background_color =
+      color_provider->GetColor(ui::kColorButtonBackgroundProminent);
+  flags.setColor(background_color);
+  canvas->DrawRoundRect(
+      GetBadgeRectOutsetAroundText(badge_font, badge_text_bounds),
+      kBadgeCornerRadius, flags);
+
+  // Render the badge text.
+  const SkColor foreground_color =
+      color_provider->GetColor(ui::kColorButtonForegroundProminent);
+  canvas->DrawStringRect(text, badge_font, foreground_color, badge_text_bounds);
+}
+
+// static
+gfx::Size BadgePainter::GetBadgeSize(const std::u16string& text,
+                                     const gfx::FontList& primary_font) {
+  gfx::FontList badge_font = DeriveBadgeFont(primary_font);
+  const gfx::Size text_size = gfx::GetStringSize(text, badge_font);
+  return GetBadgeRectOutsetAroundText(badge_font, gfx::Rect(text_size)).size();
+}
+
+}  // namespace views
diff --git a/ui/views/badge_painter.h b/ui/views/badge_painter.h
new file mode 100644
index 0000000..800f3e9
--- /dev/null
+++ b/ui/views/badge_painter.h
@@ -0,0 +1,78 @@
+// Copyright 2020 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_BADGE_PAINTER_H_
+#define UI_VIEWS_BADGE_PAINTER_H_
+
+#include <string>
+
+#include "ui/views/views_export.h"
+
+namespace gfx {
+class Canvas;
+class FontList;
+class Size;
+}  // namespace gfx
+
+namespace views {
+
+class View;
+
+// Painter that paints a badge on the canvas of any other view.
+// Provides static methods only;
+class VIEWS_EXPORT BadgePainter {
+ public:
+  // This is a utility class and should not be instantiated.
+  BadgePainter() = delete;
+
+  // Draws the badge on `canvas`. `unmirrored_badge_left_x` is the
+  // leading edge of the badge, not mirrored for RTL. `text_top_y` is the
+  // top of the text the badge should align with, and `primary_font` is the font
+  // of that text.
+  //
+  // You can call this method from any View to draw the badge directly onto the
+  // view as part of OnPaint() or a similar method.
+  static void PaintBadge(gfx::Canvas* canvas,
+                         const View* view,
+                         int unmirrored_badge_left_x,
+                         int text_top_y,
+                         const std::u16string& text,
+                         const gfx::FontList& primary_font);
+
+  // Returns the space required for the badge itself, not counting leading
+  // or trailing margin. It is recommended to leave a margin of
+  // BadgePainter::kBadgeHorizontalMargin between the badge and any other text
+  // or image elements.
+  static gfx::Size GetBadgeSize(const std::u16string& text,
+                                const gfx::FontList& primary_font);
+
+  // Layout Constants
+  //
+  // Note that there are a few differences between Views and Mac constants here
+  // that are due to the fact that the rendering is different and therefore
+  // tweaks to the spacing need to be made to achieve the same visual result.
+
+  // Difference in the font size (in pixels) between menu label font and
+  // badge font size.
+  static constexpr int kBadgeFontSizeAdjustment = -1;
+
+  // Space between primary text and badge.
+  static constexpr int kBadgeHorizontalMargin = 8;
+
+  // Highlight padding around text.
+  static constexpr int kBadgeInternalPadding = 4;
+  static constexpr int kBadgeInternalPaddingTopMac = 1;
+
+  // The baseline offset of the badge image to the menu text baseline.
+  static constexpr int kBadgeBaselineOffsetMac = -4;
+
+  // The corner radius of the rounded rect for the badge.
+  static constexpr int kBadgeCornerRadius = 3;
+  static_assert(kBadgeCornerRadius <= kBadgeInternalPadding,
+                "Badge corner radius should not exceed padding.");
+};
+
+}  // namespace views
+
+#endif  // UI_VIEWS_BADGE_PAINTER_H_
diff --git a/ui/views/controls/badge.cc b/ui/views/controls/badge.cc
new file mode 100644
index 0000000..89bd3d3
--- /dev/null
+++ b/ui/views/controls/badge.cc
@@ -0,0 +1,40 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/views/controls/badge.h"
+
+#include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/views/badge_painter.h"
+#include "ui/views/controls/label.h"
+
+namespace views {
+
+Badge::Badge(const std::u16string& text) : text_(text) {}
+
+Badge::~Badge() = default;
+
+std::u16string Badge::GetText() const {
+  return text_;
+}
+
+void Badge::SetText(const std::u16string& text) {
+  text_ = text;
+
+  OnPropertyChanged(&text_, kPropertyEffectsPreferredSizeChanged);
+}
+
+gfx::Size Badge::CalculatePreferredSize() const {
+  return BadgePainter::GetBadgeSize(text_, Label::GetDefaultFontList());
+}
+
+void Badge::OnPaint(gfx::Canvas* canvas) {
+  BadgePainter::PaintBadge(canvas, this, 0, 0, text_,
+                           Label::GetDefaultFontList());
+}
+
+BEGIN_METADATA(Badge, View)
+ADD_PROPERTY_METADATA(std::u16string, Text)
+END_METADATA
+
+}  // namespace views
diff --git a/ui/views/controls/badge.h b/ui/views/controls/badge.h
new file mode 100644
index 0000000..b58cdcbc
--- /dev/null
+++ b/ui/views/controls/badge.h
@@ -0,0 +1,46 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_CONTROLS_BADGE_H_
+#define UI_VIEWS_CONTROLS_BADGE_H_
+
+#include "ui/views/metadata/view_factory.h"
+#include "ui/views/view.h"
+#include "ui/views/views_export.h"
+
+namespace views {
+
+// A badge that displays a small piece of infromational text on a square blue
+// background.
+class VIEWS_EXPORT Badge : public View {
+ public:
+  METADATA_HEADER(Badge);
+
+  explicit Badge(const std::u16string& text = std::u16string());
+
+  Badge(const Badge&) = delete;
+  Badge& operator=(const Badge&) = delete;
+
+  ~Badge() override;
+
+  std::u16string GetText() const;
+  void SetText(const std::u16string& text);
+
+  // View:
+  gfx::Size CalculatePreferredSize() const override;
+  void OnPaint(gfx::Canvas* canvas) override;
+
+ private:
+  std::u16string text_;
+};
+
+BEGIN_VIEW_BUILDER(VIEWS_EXPORT, Badge, View)
+VIEW_BUILDER_PROPERTY(std::u16string, Text)
+END_VIEW_BUILDER
+
+}  // namespace views
+
+DEFINE_VIEW_BUILDER(VIEWS_EXPORT, Badge)
+
+#endif  // UI_VIEWS_CONTROLS_BADGE_H_
diff --git a/ui/views/controls/menu/menu_controller_cocoa_delegate_impl.mm b/ui/views/controls/menu/menu_controller_cocoa_delegate_impl.mm
index 9f7fc0d8..55ce3c2 100644
--- a/ui/views/controls/menu/menu_controller_cocoa_delegate_impl.mm
+++ b/ui/views/controls/menu/menu_controller_cocoa_delegate_impl.mm
@@ -16,7 +16,7 @@
 #include "ui/gfx/mac/coordinate_conversion.h"
 #include "ui/gfx/platform_font_mac.h"
 #include "ui/strings/grit/ui_strings.h"
-#include "ui/views/controls/menu/new_badge.h"
+#include "ui/views/badge_painter.h"
 
 namespace {
 
@@ -34,7 +34,7 @@
   // both light and dark modes.
   gfx::Font badge_font = gfx::Font(
       new gfx::PlatformFontMac(gfx::PlatformFontMac::SystemFontType::kMenu));
-  badge_font = badge_font.Derive(views::NewBadge::kNewBadgeFontSizeAdjustment,
+  badge_font = badge_font.Derive(views::BadgePainter::kBadgeFontSizeAdjustment,
                                  gfx::Font::NORMAL, gfx::Font::Weight::MEDIUM);
 
   DCHECK(color_provider);
@@ -56,9 +56,9 @@
   badge_size.width = trunc(badge_size.width);
   badge_size.height = trunc(badge_size.height);
 
-  badge_size.width += 2 * views::NewBadge::kNewBadgeInternalPadding +
-                      2 * views::NewBadge::kNewBadgeHorizontalMargin;
-  badge_size.height += views::NewBadge::kNewBadgeInternalPaddingTopMac;
+  badge_size.width += 2 * views::BadgePainter::kBadgeInternalPadding +
+                      2 * views::BadgePainter::kBadgeHorizontalMargin;
+  badge_size.height += views::BadgePainter::kBadgeInternalPaddingTopMac;
 
   // 3. Craft the image.
 
@@ -67,11 +67,11 @@
              flipped:NO
       drawingHandler:^(NSRect dest_rect) {
         NSRect badge_frame = NSInsetRect(
-            dest_rect, views::NewBadge::kNewBadgeHorizontalMargin, 0);
+            dest_rect, views::BadgePainter::kBadgeHorizontalMargin, 0);
         NSBezierPath* rounded_badge_rect = [NSBezierPath
             bezierPathWithRoundedRect:badge_frame
-                              xRadius:views::NewBadge::kNewBadgeCornerRadius
-                              yRadius:views::NewBadge::kNewBadgeCornerRadius];
+                              xRadius:views::BadgePainter::kBadgeCornerRadius
+                              yRadius:views::BadgePainter::kBadgeCornerRadius];
         DCHECK(color_provider);
         NSColor* badge_color = skia::SkColorToSRGBNSColor(
             color_provider->GetColor(ui::kColorButtonBackgroundProminent));
@@ -79,9 +79,9 @@
         [rounded_badge_rect fill];
 
         NSPoint badge_text_location = NSMakePoint(
-            NSMinX(badge_frame) + views::NewBadge::kNewBadgeInternalPadding,
+            NSMinX(badge_frame) + views::BadgePainter::kBadgeInternalPadding,
             NSMinY(badge_frame) +
-                views::NewBadge::kNewBadgeInternalPaddingTopMac);
+                views::BadgePainter::kBadgeInternalPaddingTopMac);
         [badge_attr_string drawAtPoint:badge_text_location];
 
         return YES;
@@ -146,7 +146,7 @@
 }
 
 - (NSPoint)cellBaselineOffset {
-  return NSMakePoint(0, views::NewBadge::kNewBadgeBaselineOffsetMac);
+  return NSMakePoint(0, views::BadgePainter::kBadgeBaselineOffsetMac);
 }
 
 - (NSSize)cellSize {
diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc
index 5cef5b6..d49c73d 100644
--- a/ui/views/controls/menu/menu_item_view.cc
+++ b/ui/views/controls/menu/menu_item_view.cc
@@ -24,7 +24,6 @@
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/accessibility/platform/ax_platform_node.h"
-#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/base/models/menu_model.h"
@@ -41,7 +40,7 @@
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/text_utils.h"
 #include "ui/native_theme/native_theme.h"
-#include "ui/strings/grit/ui_strings.h"
+#include "ui/views/badge_painter.h"
 #include "ui/views/controls/button/menu_button.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/controls/menu/menu_config.h"
@@ -49,7 +48,6 @@
 #include "ui/views/controls/menu/menu_image_util.h"
 #include "ui/views/controls/menu/menu_scroll_view_container.h"
 #include "ui/views/controls/menu/menu_separator.h"
-#include "ui/views/controls/menu/new_badge.h"
 #include "ui/views/controls/menu/submenu_view.h"
 #include "ui/views/controls/separator.h"
 #include "ui/views/style/typography.h"
@@ -339,7 +337,7 @@
 
   if (is_new_feature) {
     accessible_name.push_back(' ');
-    accessible_name.append(NewBadge::GetNewBadgeAccessibleDescription());
+    accessible_name.append(GetNewBadgeAccessibleDescription());
   }
 
   return accessible_name;
@@ -830,6 +828,10 @@
   return GetVisible() && (ignore_enabled || GetEnabled());
 }
 
+std::u16string MenuItemView::GetNewBadgeAccessibleDescription() {
+  return l10n_util::GetStringUTF16(IDS_NEW_BADGE_SCREEN_READER_MESSAGE);
+}
+
 MenuItemView::MenuItemView(MenuItemView* parent,
                            int command,
                            MenuItemView::Type type)
@@ -1053,11 +1055,11 @@
   PaintMinorIconAndText(canvas, colors.minor_fg_color);
 
   if (ShouldShowNewBadge()) {
-    NewBadge::DrawNewBadge(canvas, this,
-                           label_start +
-                               gfx::GetStringWidth(title(), font_list) +
-                               NewBadge::kNewBadgeHorizontalMargin,
-                           top_margin, font_list);
+    BadgePainter::PaintBadge(canvas, this,
+                             label_start +
+                                 gfx::GetStringWidth(title(), font_list) +
+                                 BadgePainter::kBadgeHorizontalMargin,
+                             top_margin, new_badge_text_, font_list);
   }
 }
 
@@ -1340,8 +1342,8 @@
 
   if (ShouldShowNewBadge())
     dimensions.minor_text_width +=
-        NewBadge::GetNewBadgeSize(font_list).width() +
-        2 * NewBadge::kNewBadgeHorizontalMargin;
+        views::BadgePainter::GetBadgeSize(new_badge_text_, font_list).width() +
+        2 * BadgePainter::kBadgeHorizontalMargin;
 
   // Determine the height to use.
   int label_text_height = secondary_title().empty() ? font_list.GetHeight()
diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h
index e71603f2..46da203 100644
--- a/ui/views/controls/menu/menu_item_view.h
+++ b/ui/views/controls/menu/menu_item_view.h
@@ -15,10 +15,12 @@
 #include "build/build_config.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/menu_separator_types.h"
 #include "ui/base/themed_vector_icon.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/image/image_skia.h"
+#include "ui/strings/grit/ui_strings.h"
 #include "ui/views/controls/menu/menu_controller.h"
 #include "ui/views/controls/menu/menu_types.h"
 #include "ui/views/view.h"
@@ -375,6 +377,8 @@
     return last_paint_as_selected_;
   }
 
+  static std::u16string GetNewBadgeAccessibleDescription();
+
  protected:
   // Creates a MenuItemView. This is used by the various AddXXX methods.
   MenuItemView(MenuItemView* parent, int command, Type type);
@@ -670,6 +674,9 @@
   // `update_selection_based_state_in_view_herarchy_changed_` is set to false
   // and SetIconView() explicitly calls UpdateSelectionBasedStateIfChanged().
   bool update_selection_based_state_in_view_herarchy_changed_ = true;
+
+  const std::u16string new_badge_text_ =
+      l10n_util::GetStringUTF16(IDS_NEW_BADGE);
 };
 
 }  // namespace views
diff --git a/ui/views/controls/menu/menu_runner_impl_cocoa.mm b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
index 9ad468f..1319c56 100644
--- a/ui/views/controls/menu/menu_runner_impl_cocoa.mm
+++ b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
@@ -28,7 +28,6 @@
 #include "ui/views/controls/menu/menu_config.h"
 #import "ui/views/controls/menu/menu_controller_cocoa_delegate_impl.h"
 #include "ui/views/controls/menu/menu_runner_impl_adapter.h"
-#include "ui/views/controls/menu/new_badge.h"
 #include "ui/views/interaction/element_tracker_views.h"
 #include "ui/views/views_features.h"
 #include "ui/views/widget/widget.h"
diff --git a/ui/views/controls/menu/new_badge.cc b/ui/views/controls/menu/new_badge.cc
deleted file mode 100644
index 494562112..0000000
--- a/ui/views/controls/menu/new_badge.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/controls/menu/new_badge.h"
-
-#include <algorithm>
-
-#include "base/i18n/rtl.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/color/color_id.h"
-#include "ui/color/color_provider.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/font_list.h"
-#include "ui/gfx/geometry/insets.h"
-#include "ui/gfx/text_constants.h"
-#include "ui/gfx/text_utils.h"
-#include "ui/strings/grit/ui_strings.h"
-#include "ui/views/view.h"
-
-namespace views {
-
-namespace {
-
-// Returns the appropriate font to use for the "new" badge based on the font
-// currently being used to render the title of the menu item.
-gfx::FontList DeriveNewBadgeFont(const gfx::FontList& primary_font) {
-  // Preferred font is slightly smaller and slightly more bold than the title
-  // font. The size change is required to make it look correct in the badge; we
-  // add a small degree of bold to prevent color smearing/blurring due to font
-  // smoothing. This ensures readability on all platforms and in both light and
-  // dark modes.
-  return primary_font.Derive(NewBadge::kNewBadgeFontSizeAdjustment,
-                             gfx::Font::NORMAL, gfx::Font::Weight::MEDIUM);
-}
-
-// Returns the highlight rect for the "new" badge given the font and text rect
-// for the badge text.
-gfx::Rect GetNewBadgeRectOutsetAroundText(const gfx::FontList& badge_font,
-                                          const gfx::Rect& badge_text_rect) {
-  gfx::Rect badge_rect = badge_text_rect;
-  badge_rect.Inset(-gfx::AdjustVisualBorderForFont(
-      badge_font, gfx::Insets(NewBadge::kNewBadgeInternalPadding)));
-  return badge_rect;
-}
-
-}  // namespace
-
-// static
-void NewBadge::DrawNewBadge(gfx::Canvas* canvas,
-                            const View* view,
-                            int unmirrored_badge_left_x,
-                            int text_top_y,
-                            const gfx::FontList& primary_font) {
-  gfx::FontList badge_font = DeriveNewBadgeFont(primary_font);
-  const std::u16string new_text = l10n_util::GetStringUTF16(IDS_NEW_BADGE);
-
-  // Calculate bounding box for badge text.
-  unmirrored_badge_left_x += kNewBadgeInternalPadding;
-  text_top_y += gfx::GetFontCapHeightCenterOffset(primary_font, badge_font);
-  gfx::Rect badge_text_bounds(gfx::Point(unmirrored_badge_left_x, text_top_y),
-                              gfx::GetStringSize(new_text, badge_font));
-  if (base::i18n::IsRTL())
-    badge_text_bounds.set_x(view->GetMirroredXForRect(badge_text_bounds));
-
-  // Render the badge itself.
-  cc::PaintFlags new_flags;
-  const ui::ColorProvider* color_provider = view->GetColorProvider();
-  const SkColor background_color =
-      color_provider->GetColor(ui::kColorButtonBackgroundProminent);
-  new_flags.setColor(background_color);
-  canvas->DrawRoundRect(
-      GetNewBadgeRectOutsetAroundText(badge_font, badge_text_bounds),
-      kNewBadgeCornerRadius, new_flags);
-
-  // Render the badge text.
-  const SkColor foreground_color =
-      color_provider->GetColor(ui::kColorButtonForegroundProminent);
-  canvas->DrawStringRect(new_text, badge_font, foreground_color,
-                         badge_text_bounds);
-}
-
-// static
-gfx::Size NewBadge::GetNewBadgeSize(const gfx::FontList& primary_font) {
-  const std::u16string new_text = l10n_util::GetStringUTF16(IDS_NEW_BADGE);
-  gfx::FontList badge_font = DeriveNewBadgeFont(primary_font);
-  const gfx::Size text_size = gfx::GetStringSize(new_text, badge_font);
-  return GetNewBadgeRectOutsetAroundText(badge_font, gfx::Rect(text_size))
-      .size();
-}
-
-// static
-std::u16string NewBadge::GetNewBadgeAccessibleDescription() {
-  return l10n_util::GetStringUTF16(IDS_NEW_BADGE_SCREEN_READER_MESSAGE);
-}
-
-}  // namespace views
diff --git a/ui/views/controls/menu/new_badge.h b/ui/views/controls/menu/new_badge.h
deleted file mode 100644
index 9245edcd4..0000000
--- a/ui/views/controls/menu/new_badge.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_VIEWS_CONTROLS_MENU_NEW_BADGE_H_
-#define UI_VIEWS_CONTROLS_MENU_NEW_BADGE_H_
-
-#include <string>
-
-#include "ui/views/views_export.h"
-
-namespace gfx {
-class Canvas;
-class FontList;
-class Size;
-}  // namespace gfx
-
-namespace views {
-
-class View;
-
-// Represents a "New" badge that can be inserted into any other view as part of
-// a new feature promotion. Provides static methods only;
-class VIEWS_EXPORT NewBadge {
- public:
-  // This is a utility class and should not be instantiated.
-  NewBadge() = delete;
-
-  // Draws the "new" badge on |canvas|. |unmirrored_badge_left_x| is the
-  // leading edge of the badge, not mirrored for RTL. |text_top_y| is the
-  // top of the text the badge should align with, and |primary_font| is the font
-  // of that text.
-  //
-  // You can call this method from any View to draw the badge directly onto the
-  // view as part of OnPaint() or a similar method, so you don't necessarily
-  // have to instantiate a NewBadge view to get this functionality.
-  static void DrawNewBadge(gfx::Canvas* canvas,
-                           const View* view,
-                           int unmirrored_badge_left_x,
-                           int text_top_y,
-                           const gfx::FontList& primary_font);
-
-  // Returns the space required for the "new" badge itself, not counting leading
-  // or trailing margin. It is recommended to leave a margin of
-  // NewBadge::kNewBadgeHorizontalMargin between the badge and any other text
-  // or image elements.
-  static gfx::Size GetNewBadgeSize(const gfx::FontList& primary_font);
-
-  // Gets the accessible description of the new badge, which can be added to
-  // tooltip/screen reader text.
-  static std::u16string GetNewBadgeAccessibleDescription();
-
-  // Layout Constants
-  //
-  // Note that there are a few differences between Views and Mac constants here
-  // that are due to the fact that the rendering is different and therefore
-  // tweaks to the spacing need to be made to achieve the same visual result.
-
-  // Difference in the font size (in pixels) between menu label font and "new"
-  // badge font size.
-  static constexpr int kNewBadgeFontSizeAdjustment = -1;
-
-  // Space between primary text and "new" badge.
-  static constexpr int kNewBadgeHorizontalMargin = 8;
-
-  // Highlight padding around "new" text.
-  static constexpr int kNewBadgeInternalPadding = 4;
-  static constexpr int kNewBadgeInternalPaddingTopMac = 1;
-
-  // The baseline offset of the "new" badge image to the menu text baseline.
-  static constexpr int kNewBadgeBaselineOffsetMac = -4;
-
-  // The corner radius of the rounded rect for the "new" badge.
-  static constexpr int kNewBadgeCornerRadius = 3;
-  static_assert(kNewBadgeCornerRadius <= kNewBadgeInternalPadding,
-                "New badge corner radius should not exceed padding.");
-};
-
-}  // namespace views
-
-#endif  // UI_VIEWS_CONTROLS_MENU_NEW_BADGE_H_
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index f41c809..98753af10 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -2441,7 +2441,7 @@
       extra_insets_.right() + provider->GetDistanceMetric(
                                   DISTANCE_TEXTFIELD_HORIZONTAL_TEXT_PADDING)));
   if (invalid_) {
-    border->SetColorId(ui::kColorAlertHighSeverity);
+    border->SetColorId(ui::kColorTextfieldInvalidOutline);
   }
   border->SetCornerRadius(GetCornerRadius());
   View::SetBorder(std::move(border));
@@ -2509,8 +2509,13 @@
 }
 
 int Textfield::GetTextStyle() const {
-  return (GetReadOnly() || !GetEnabled()) ? style::STYLE_DISABLED
-                                          : style::STYLE_PRIMARY;
+  if (GetReadOnly() || !GetEnabled()) {
+    return style::STYLE_DISABLED;
+  } else if (GetInvalid()) {
+    return style::STYLE_INVALID;
+  } else {
+    return style::STYLE_PRIMARY;
+  }
 }
 
 void Textfield::PaintTextAndCursor(gfx::Canvas* canvas) {
diff --git a/ui/views/examples/BUILD.gn b/ui/views/examples/BUILD.gn
index 05338165..0575fdcd 100644
--- a/ui/views/examples/BUILD.gn
+++ b/ui/views/examples/BUILD.gn
@@ -17,6 +17,8 @@
     "animation_example.h",
     "ax_example.cc",
     "ax_example.h",
+    "badge_example.cc",
+    "badge_example.h",
     "box_layout_example.cc",
     "box_layout_example.h",
     "bubble_example.cc",
diff --git a/ui/views/examples/badge_example.cc b/ui/views/examples/badge_example.cc
new file mode 100644
index 0000000..e6dcea2
--- /dev/null
+++ b/ui/views/examples/badge_example.cc
@@ -0,0 +1,80 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/views/examples/badge_example.h"
+
+#include <memory>
+#include <set>
+#include <utility>
+
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/views/controls/badge.h"
+#include "ui/views/controls/button/button.h"
+#include "ui/views/controls/button/md_text_button.h"
+#include "ui/views/controls/link.h"
+#include "ui/views/controls/menu/menu_item_view.h"
+#include "ui/views/examples/grit/views_examples_resources.h"
+#include "ui/views/layout/box_layout_view.h"
+#include "ui/views/metadata/view_factory.h"
+#include "ui/views/view.h"
+#include "ui/views/widget/widget.h"
+
+using l10n_util::GetStringUTF16;
+using l10n_util::GetStringUTF8;
+
+namespace views::examples {
+
+BadgeExample::BadgeExample()
+    : ExampleBase(GetStringUTF8(IDS_BADGE_SELECT_LABEL).c_str()) {}
+
+BadgeExample::~BadgeExample() = default;
+
+void BadgeExample::CreateExampleView(View* container) {
+  container->SetUseDefaultFillLayout(true);
+
+  auto show_menu = [](BadgeExample* example) {
+    // Create a menu item view.
+    auto* menu_item_view = new views::MenuItemView(&example->menu_delegate_);
+
+    // Add items to the context menu.
+    menu_item_view->AppendMenuItem(1, GetStringUTF16(IDS_BADGE_MENU_ITEM_1));
+    menu_item_view->AppendMenuItem(2, GetStringUTF16(IDS_BADGE_MENU_ITEM_2));
+    // Enable the "New" Badge.
+    menu_item_view->AppendMenuItem(3, GetStringUTF16(IDS_BADGE_MENU_ITEM_3))
+        ->set_is_new(true);
+
+    example->menu_runner_ = std::make_unique<MenuRunner>(menu_item_view, 0);
+
+    View* menu_button = example->menu_button_;
+    gfx::Point screen_loc;
+    views::View::ConvertPointToScreen(menu_button, &screen_loc);
+    gfx::Rect bounds(screen_loc, menu_button->size());
+
+    example->menu_runner_->RunMenuAt(menu_button->GetWidget(), nullptr, bounds,
+                                     MenuAnchorPosition::kTopLeft,
+                                     ui::MENU_SOURCE_NONE);
+  };
+
+  auto view =
+      Builder<BoxLayoutView>()
+          .SetOrientation(BoxLayout::Orientation::kVertical)
+          .SetInsideBorderInsets(gfx::Insets(10))
+          .SetBetweenChildSpacing(10)
+          .SetCrossAxisAlignment(BoxLayout::CrossAxisAlignment::kStart)
+          .AddChildren(
+              Builder<BoxLayoutView>().SetBetweenChildSpacing(10).AddChildren(
+                  Builder<Link>().SetText(GetStringUTF16(IDS_BADGE_LINK_TEXT)),
+                  Builder<Badge>().SetText(
+                      GetStringUTF16(IDS_BADGE_BADGE_TEXT))),
+              Builder<MdTextButton>()
+                  .CopyAddressTo(&menu_button_)
+                  .SetText(GetStringUTF16(IDS_BADGE_MENU_BUTTON))
+                  .SetCallback(
+                      base::BindRepeating(show_menu, base::Unretained(this))))
+          .Build();
+
+  container->AddChildView(std::move(view));
+}
+
+}  // namespace views::examples
diff --git a/ui/views/examples/badge_example.h b/ui/views/examples/badge_example.h
new file mode 100644
index 0000000..c4fcbdc
--- /dev/null
+++ b/ui/views/examples/badge_example.h
@@ -0,0 +1,38 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_EXAMPLES_BADGE_EXAMPLE_H_
+#define UI_VIEWS_EXAMPLES_BADGE_EXAMPLE_H_
+
+#include <memory>
+
+#include "ui/views/controls/menu/menu_delegate.h"
+#include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/examples/example_base.h"
+
+namespace views::examples {
+
+// BadgeExample demonstrates how to use the generic views::Badge and
+// the New Badge in a MenuItemView.
+class VIEWS_EXAMPLES_EXPORT BadgeExample : public ExampleBase {
+ public:
+  BadgeExample();
+
+  BadgeExample(const BadgeExample&) = delete;
+  BadgeExample& operator=(const BadgeExample&) = delete;
+
+  ~BadgeExample() override;
+
+  // ExampleBase:
+  void CreateExampleView(View* container) override;
+
+ private:
+  std::unique_ptr<MenuRunner> menu_runner_;
+  MenuDelegate menu_delegate_;
+  raw_ptr<View> menu_button_;
+};
+
+}  // namespace views::examples
+
+#endif  // UI_VIEWS_EXAMPLES_BADGE_EXAMPLE_H_
diff --git a/ui/views/examples/create_examples.cc b/ui/views/examples/create_examples.cc
index c9d1d0e..b524934 100644
--- a/ui/views/examples/create_examples.cc
+++ b/ui/views/examples/create_examples.cc
@@ -11,6 +11,7 @@
 #include "ui/views/examples/animated_image_view_example.h"
 #include "ui/views/examples/animation_example.h"
 #include "ui/views/examples/ax_example.h"
+#include "ui/views/examples/badge_example.h"
 #include "ui/views/examples/box_layout_example.h"
 #include "ui/views/examples/bubble_example.h"
 #include "ui/views/examples/button_example.h"
@@ -59,6 +60,7 @@
   examples.push_back(std::make_unique<AnimatedImageViewExample>());
   examples.push_back(std::make_unique<AnimationExample>());
   examples.push_back(std::make_unique<AxExample>());
+  examples.push_back(std::make_unique<BadgeExample>());
   examples.push_back(std::make_unique<BoxLayoutExample>());
   examples.push_back(std::make_unique<BubbleExample>());
   examples.push_back(std::make_unique<ButtonExample>());
diff --git a/ui/views/examples/views_examples_resources.grd b/ui/views/examples/views_examples_resources.grd
index f6510c6..ba3057df 100644
--- a/ui/views/examples/views_examples_resources.grd
+++ b/ui/views/examples/views_examples_resources.grd
@@ -14,6 +14,35 @@
         Abort Animation
       </message>
 
+      <!-- badge example -->
+      <message translateable="false" name="IDS_BADGE_SELECT_LABEL">
+        Badge
+      </message>
+
+      <message translateable="false" name="IDS_BADGE_MENU_ITEM_1">
+        Cut
+      </message>
+
+      <message translateable="false" name="IDS_BADGE_MENU_ITEM_2">
+        Copy
+      </message>
+
+      <message translateable="false" name="IDS_BADGE_MENU_ITEM_3">
+        Magic Command
+      </message>
+
+      <message translateable="false" name="IDS_BADGE_MENU_BUTTON">
+        Show a Menu
+      </message>
+
+      <message translateable="false" name="IDS_BADGE_LINK_TEXT">
+        Fancy Feature
+      </message>
+
+      <message translateable="false" name="IDS_BADGE_BADGE_TEXT">
+        Try this out!
+      </message>
+
       <!-- button example -->
       <message translateable="false" name="IDS_BUTTON_IMAGE_BUTTON_AX_LABEL">
         Close Button
diff --git a/ui/views/style/typography.h b/ui/views/style/typography.h
index 7813368..12371f1 100644
--- a/ui/views/style/typography.h
+++ b/ui/views/style/typography.h
@@ -105,6 +105,9 @@
   // surrounding STYLE_SECONDARY text.
   STYLE_EMPHASIZED_SECONDARY,
 
+  // Style for invalid text. Can be either primary or solid red color.
+  STYLE_INVALID,
+
   // The style used for links. Usually a solid shade of blue.
   STYLE_LINK,
 
diff --git a/ui/views/style/typography_provider.cc b/ui/views/style/typography_provider.cc
index 3d686955..819f27e 100644
--- a/ui/views/style/typography_provider.cc
+++ b/ui/views/style/typography_provider.cc
@@ -145,7 +145,9 @@
       }
       break;
     case style::CONTEXT_TEXTFIELD:
-      return ui::kColorTextfieldForeground;
+      return style == style::STYLE_INVALID
+                 ? ui::kColorTextfieldForegroundInvalid
+                 : ui::kColorTextfieldForeground;
     case style::CONTEXT_MENU:
     case style::CONTEXT_TOUCH_MENU:
       return GetMenuColorId(style);
diff --git a/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.html b/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.html
index 5149deb..9dfd4ee 100644
--- a/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.html
+++ b/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.html
@@ -32,6 +32,7 @@
     white-space: var(--cr-input-error-white-space);
   }
 
+  :host([invalid]) #label,
   :host([invalid]) #footerContainer {
     color: var(--cr-input-error-color);
   }
@@ -87,7 +88,8 @@
       value="{{value::input}}" aria-label$="[[label]]"
       on-focus="onInputFocusChange_" on-blur="onInputFocusChange_"
       on-change="onInputChange_" disabled="[[disabled]]"
-      maxlength$="[[maxlength]]" readonly$="[[readonly]]"></textarea>
+      maxlength$="[[maxlength]]" readonly$="[[readonly]]"
+      required$="[[required]]"></textarea>
   <div id="underline"></div>
 </div>
 <div id="footerContainer" class="cr-row">
diff --git a/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.ts b/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.ts
index beeefb8..23ed829 100644
--- a/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.ts
+++ b/ui/webui/resources/cr_elements/cr_textarea/cr_textarea.ts
@@ -58,6 +58,13 @@
         observer: 'onDisabledChanged_',
       },
 
+      /** Whether the text area is required. */
+      required: {
+        type: Boolean,
+        value: false,
+        reflectToAttribute: true,
+      },
+
       /** Maximum length (in characters) of the text area. */
       maxlength: {
         type: Number,
@@ -140,6 +147,7 @@
   override autofocus: boolean;
   disabled: boolean;
   readonly: boolean;
+  required: boolean;
   rows: number;
   label: string;
   value: string;
diff --git a/weblayer/browser/safe_browsing/weblayer_ping_manager_browsertest.cc b/weblayer/browser/safe_browsing/weblayer_ping_manager_browsertest.cc
index 62f5800..38eba53 100644
--- a/weblayer/browser/safe_browsing/weblayer_ping_manager_browsertest.cc
+++ b/weblayer/browser/safe_browsing/weblayer_ping_manager_browsertest.cc
@@ -33,9 +33,7 @@
  public:
   WeblayerPingManagerTest() {
     feature_list_.InitWithFeatures(
-        {safe_browsing::kSafeBrowsingRemoveCookiesInAuthRequests,
-         safe_browsing::kSafeBrowsingCsbrrWithToken},
-        {});
+        {safe_browsing::kSafeBrowsingRemoveCookiesInAuthRequests}, {});
   }
 
  protected:
@@ -45,7 +43,6 @@
                                   bool expect_cookies_removed);
 
   base::test::ScopedFeatureList feature_list_;
-  bool is_csbrr_token_feature_enabled_ = true;
   bool is_remove_cookies_feature_enabled_ = true;
 
  private:
@@ -58,22 +55,10 @@
   RemoveCookiesFeatureDisabledWeblayerPingManagerTest() {
     feature_list_.Reset();
     feature_list_.InitWithFeatures(
-        {safe_browsing::kSafeBrowsingCsbrrWithToken},
         {safe_browsing::kSafeBrowsingRemoveCookiesInAuthRequests});
     is_remove_cookies_feature_enabled_ = false;
   }
 };
-class CsbrrTokenFeatureDisabledWeblayerPingManagerTest
-    : public WeblayerPingManagerTest {
- public:
-  CsbrrTokenFeatureDisabledWeblayerPingManagerTest() {
-    feature_list_.Reset();
-    feature_list_.InitWithFeatures(
-        {safe_browsing::kSafeBrowsingRemoveCookiesInAuthRequests},
-        {safe_browsing::kSafeBrowsingCsbrrWithToken});
-    is_csbrr_token_feature_enabled_ = false;
-  }
-};
 class IncognitoModeWeblayerPingManagerTest : public WeblayerPingManagerTest {
  public:
   IncognitoModeWeblayerPingManagerTest() { SetShellStartsInIncognitoMode(); }
@@ -199,18 +184,6 @@
                              /*expect_access_token=*/false,
                              /*expect_cookies_removed=*/false);
 }
-// TODO(crbug.com/1296615): remove test case,
-// CsbrrTokenFeatureDisabledWeblayerPingManagerTest class, and
-// is_csbrr_token_feature_enabled_ property when deprecating
-// kSafeBrowsingCsbrrWithToken feature
-IN_PROC_BROWSER_TEST_F(
-    CsbrrTokenFeatureDisabledWeblayerPingManagerTest,
-    ReportThreatDetailsWithoutAccessToken_CsbrrTokenFeatureDisabled) {
-  RunReportThreatDetailsTest(/*is_enhanced_protection=*/true,
-                             /*is_signed_in=*/true,
-                             /*expect_access_token=*/false,
-                             /*expect_cookies_removed=*/false);
-}
 
 IN_PROC_BROWSER_TEST_F(WeblayerPingManagerTest, ReportSafeBrowsingHit) {
   safe_browsing::HitReport hit_report;
diff --git a/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc b/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc
index e10d665..a5b5892 100644
--- a/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc
+++ b/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc
@@ -8,7 +8,6 @@
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/safe_browsing/content/browser/web_ui/safe_browsing_ui.h"
 #include "components/safe_browsing/core/browser/ping_manager.h"
-#include "components/safe_browsing/core/common/features.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "weblayer/browser/browser_context_impl.h"
 #include "weblayer/browser/browser_process.h"
@@ -64,9 +63,7 @@
     content::BrowserContext* context) const {
   PrefService* pref_service =
       static_cast<BrowserContextImpl*>(context)->pref_service();
-  return base::FeatureList::IsEnabled(
-             safe_browsing::kSafeBrowsingCsbrrWithToken) &&
-         safe_browsing::IsEnhancedProtectionEnabled(*pref_service) &&
+  return safe_browsing::IsEnhancedProtectionEnabled(*pref_service) &&
          // TODO(crbug.com/1171215): Change this to production mechanism for
          // enabling Gaia-keyed client reports once that mechanism is
          // determined.