diff --git a/DEPS b/DEPS
index 7f7e48d8..f80f8a4 100644
--- a/DEPS
+++ b/DEPS
@@ -126,11 +126,11 @@
   # 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': 'e59d40e0bcab551b47d5c009f8b4d9a94b53e0fb',
+  'skia_revision': '706a7cd1e8269039c7a9a3f66f0334673bb1e8dd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '37a08a2a6e599bb0a432f117b0bd3cba2e4dccfe',
+  'v8_revision': 'b3e709a8d204ef93262ebeba15f504fbe080facc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -138,15 +138,15 @@
   # 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': 'f256339a19591e6a9286ba306d667cbb6c3c9a4d',
+  'angle_revision': '2b0553ce59c368b6f3e0c4a10a058f8f1addf35c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '7fb0b73b1aa74b33c08258cef1fe800dc8a94e26',
+  'swiftshader_revision': '9686153413f37c9150e511ee19b6e3fb94d7c98f',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '762247be1246942790637504f6a726f522a3b399',
+  'pdfium_revision': '471510ee209e8763f1ec3e7424def974bd59c3b0',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -186,7 +186,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'd77957d206cc21a12ebc213cd1239fcb0e5cc5be',
+  'catapult_revision': '8bfeef929cbe262c6987b70706a22750d2b201cb',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -729,7 +729,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '43ecc6793a5c6b4962df615e644a2a79014b339c',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '6b5dce0608657cbf19a6a5ed409a95defcbec4da',
       'condition': 'checkout_linux',
   },
 
@@ -1293,7 +1293,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@de578cdd6b58dab6721679f2a5f56f87c7e0e3ce',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@295aca65583b50d01a6232df43e3359dd95f3bd3',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/browser/surfaces_instance.cc b/android_webview/browser/surfaces_instance.cc
index 5b3a948a..b9b0c80 100644
--- a/android_webview/browser/surfaces_instance.cc
+++ b/android_webview/browser/surfaces_instance.cc
@@ -28,6 +28,7 @@
 #include "gpu/command_buffer/service/shared_context_state.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
+#include "ui/gfx/presentation_feedback.h"
 #include "ui/gfx/transform.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_share_group.h"
@@ -228,6 +229,8 @@
   display_->Resize(viewport);
   display_->DrawAndSwap();
   display_->DidReceiveSwapBuffersAck();
+  display_->DidReceivePresentationFeedback(gfx::PresentationFeedback(
+      base::TimeTicks::Now(), base::TimeDelta(), 0 /* flags */));
 }
 
 void SurfacesInstance::AddChildId(const viz::SurfaceId& child_id) {
diff --git a/apps/saved_files_service_unittest.cc b/apps/saved_files_service_unittest.cc
index 3d7c373c..d0679e9 100644
--- a/apps/saved_files_service_unittest.cc
+++ b/apps/saved_files_service_unittest.cc
@@ -29,7 +29,7 @@
 namespace {
 
 std::string GenerateId(int i) {
-  return base::IntToString(i) + ":filename.ext";
+  return base::NumberToString(i) + ":filename.ext";
 }
 
 }  // namespace
diff --git a/ash/metrics/demo_session_metrics_recorder.cc b/ash/metrics/demo_session_metrics_recorder.cc
index 2689f69..ca1230ac8 100644
--- a/ash/metrics/demo_session_metrics_recorder.cc
+++ b/ash/metrics/demo_session_metrics_recorder.cc
@@ -98,27 +98,43 @@
   return DemoModeApp::kOtherArcApp;
 }
 
+AppType GetAppType(const aura::Window* window) {
+  return static_cast<AppType>(window->GetProperty(aura::client::kAppType));
+}
+
+bool IsArcWindow(const aura::Window* window) {
+  return (GetAppType(window) == AppType::ARC_APP);
+}
+
 const std::string* GetArcPackageName(const aura::Window* window) {
+  DCHECK(IsArcWindow(window));
   return window->GetProperty(kArcPackageNameKey);
 }
 
+bool CanGetAppFromWindow(const aura::Window* window) {
+  // For ARC apps we can only get the App if the package
+  // name is not null.
+  if (IsArcWindow(window)) {
+    return GetArcPackageName(window) != nullptr;
+  }
+  // We can always get the App for non-ARC windows.
+  return true;
+}
+
 const ShelfID GetShelfID(const aura::Window* window) {
   return ShelfID::Deserialize(window->GetProperty(kShelfIDKey));
 }
 
-AppType GetAppType(const aura::Window* window) {
-  return static_cast<AppType>(window->GetProperty(aura::client::kAppType));
-}
-
 // Maps the app-like thing in |window| to a DemoModeApp value for metrics.
 DemoModeApp GetAppFromWindow(const aura::Window* window) {
+  DCHECK(CanGetAppFromWindow(window));
+
   AppType app_type = GetAppType(window);
   if (app_type == AppType::ARC_APP) {
     // The ShelfID app id isn't used to identify ARC++ apps since it's a hash of
     // both the package name and the activity.
     const std::string* package_name = GetArcPackageName(window);
-    return package_name ? GetAppFromPackageName(*package_name)
-                        : DemoModeApp::kOtherArcApp;
+    return GetAppFromPackageName(*package_name);
   }
 
   std::string app_id = GetShelfID(window).app_id;
@@ -150,6 +166,49 @@
 }  // namespace
 
 // Observes for changes in a window's ArcPackageName property for the purpose of
+// logging  of active app samples.
+class DemoSessionMetricsRecorder::ActiveAppArcPackageNameObserver
+    : public aura::WindowObserver {
+ public:
+  explicit ActiveAppArcPackageNameObserver(
+      DemoSessionMetricsRecorder* metrics_recorder)
+      : metrics_recorder_(metrics_recorder), scoped_observer_(this) {}
+
+  // aura::WindowObserver
+  void OnWindowPropertyChanged(aura::Window* window,
+                               const void* key,
+                               intptr_t old) override {
+    if (key != kArcPackageNameKey)
+      return;
+
+    const std::string* package_name = GetArcPackageName(window);
+
+    if (package_name) {
+      metrics_recorder_->RecordActiveAppSample(
+          GetAppFromPackageName(*package_name));
+    } else {
+      VLOG(1) << "Got null ARC package name";
+    }
+
+    scoped_observer_.Remove(window);
+  }
+
+  void OnWindowDestroyed(aura::Window* window) override {
+    if (scoped_observer_.IsObserving(window))
+      scoped_observer_.Remove(window);
+  }
+
+  void ObserveWindow(aura::Window* window) { scoped_observer_.Add(window); }
+
+ private:
+  DemoSessionMetricsRecorder* metrics_recorder_;
+  ScopedObserver<aura::Window, ActiveAppArcPackageNameObserver>
+      scoped_observer_;
+
+  DISALLOW_COPY_AND_ASSIGN(ActiveAppArcPackageNameObserver);
+};
+
+// Observes changes in a window's ArcPackageName property for the purpose of
 // logging of unique launches of ARC apps.
 class DemoSessionMetricsRecorder::UniqueAppsLaunchedArcPackageNameObserver
     : public aura::WindowObserver {
@@ -167,21 +226,22 @@
 
     const std::string* package_name = GetArcPackageName(window);
 
-    if (package_name != nullptr) {
+    if (package_name) {
       metrics_recorder_->RecordAppLaunch(*package_name, AppType::ARC_APP);
     } else {
       VLOG(1) << "Got null ARC package name";
     }
 
-    window->RemoveObserver(this);
+    scoped_observer_.Remove(window);
+  }
+
+  void OnWindowDestroyed(aura::Window* window) override {
+    if (scoped_observer_.IsObserving(window))
+      scoped_observer_.Remove(window);
   }
 
   void ObserveWindow(aura::Window* window) { scoped_observer_.Add(window); }
 
-  void OnWindowDestroyed(aura::Window* window) override {
-    window->RemoveObserver(this);
-  }
-
  private:
   DemoSessionMetricsRecorder* metrics_recorder_;
   ScopedObserver<aura::Window, UniqueAppsLaunchedArcPackageNameObserver>
@@ -195,7 +255,9 @@
     : timer_(std::move(timer)),
       observer_(this),
       unique_apps_arc_package_name_observer_(
-          std::make_unique<UniqueAppsLaunchedArcPackageNameObserver>(this)) {
+          std::make_unique<UniqueAppsLaunchedArcPackageNameObserver>(this)),
+      active_app_arc_package_name_observer_(
+          std::make_unique<ActiveAppArcPackageNameObserver>(this)) {
   // Outside of tests, use a normal repeating timer.
   if (!timer_.get())
     timer_ = std::make_unique<base::RepeatingTimer>();
@@ -311,6 +373,10 @@
                 &DemoSessionMetricsRecorder::TakeSampleOrPause);
 }
 
+void DemoSessionMetricsRecorder::RecordActiveAppSample(DemoModeApp app) {
+  unreported_samples_.push_back(app);
+}
+
 void DemoSessionMetricsRecorder::TakeSampleOrPause() {
   // After enough inactive time, assume the user left.
   if (++periods_since_activity_ > kMaxPeriodsWithoutActivity) {
@@ -320,15 +386,21 @@
     return;
   }
 
-  const aura::Window* window =
-      Shell::Get()->activation_client()->GetActiveWindow();
+  aura::Window* window = Shell::Get()->activation_client()->GetActiveWindow();
   if (!window)
     return;
 
+  // If there is no ARC package name available, set up a listener
+  // to be informed when it is available.
+  if (IsArcWindow(window) && !CanGetAppFromWindow(window)) {
+    active_app_arc_package_name_observer_->ObserveWindow(window);
+    return;
+  }
+
   DemoModeApp app = window->type() == aura::client::WINDOW_TYPE_NORMAL
                         ? GetAppFromWindow(window)
                         : DemoModeApp::kOtherWindow;
-  unreported_samples_.push_back(app);
+  RecordActiveAppSample(app);
 }
 
 void DemoSessionMetricsRecorder::ReportSamples() {
diff --git a/ash/metrics/demo_session_metrics_recorder.h b/ash/metrics/demo_session_metrics_recorder.h
index a92a803..639383f 100644
--- a/ash/metrics/demo_session_metrics_recorder.h
+++ b/ash/metrics/demo_session_metrics_recorder.h
@@ -91,6 +91,9 @@
   // Emits histograms for recorded samples.
   void ReportSamples();
 
+  // Records |app| as being seen while sampling all active apps.
+  void RecordActiveAppSample(DemoModeApp app);
+
   // Indicates whether the specified app_id should be recorded for
   // the unique-apps-launched stat.
   bool ShouldRecordAppLaunch(const std::string& app_id);
@@ -123,11 +126,15 @@
   ScopedObserver<ui::UserActivityDetector, DemoSessionMetricsRecorder>
       observer_;
 
+  class ActiveAppArcPackageNameObserver;
   class UniqueAppsLaunchedArcPackageNameObserver;
 
   std::unique_ptr<UniqueAppsLaunchedArcPackageNameObserver>
       unique_apps_arc_package_name_observer_;
 
+  std::unique_ptr<ActiveAppArcPackageNameObserver>
+      active_app_arc_package_name_observer_;
+
   DISALLOW_COPY_AND_ASSIGN(DemoSessionMetricsRecorder);
 };
 
diff --git a/ash/metrics/demo_session_metrics_recorder_unittest.cc b/ash/metrics/demo_session_metrics_recorder_unittest.cc
index 26b9c6c..e44ded46 100644
--- a/ash/metrics/demo_session_metrics_recorder_unittest.cc
+++ b/ash/metrics/demo_session_metrics_recorder_unittest.cc
@@ -239,6 +239,54 @@
   histogram_tester_->ExpectTotalCount("DemoMode.ActiveApp", 10);
 }
 
+// Verify samples are correct when multiple windows types become active.
+TEST_F(DemoSessionMetricsRecorderTest, ActiveAppAfterDelayedArcPackageName) {
+  // Create an ARC window with an empty package name.
+  std::unique_ptr<aura::Window> arc_window = CreateArcWindow("");
+
+  wm::ActivateWindow(arc_window.get());
+  FireTimer();
+  SendUserActivity();
+
+  // There should be no app activity recorded yet, because there was
+  // no package name in the ARC window.
+  histogram_tester_->ExpectTotalCount("DemoMode.ActiveApp", 0);
+
+  // Set the package name after window creation/activation.
+  arc_window->SetProperty(kArcPackageNameKey,
+                          new std::string("com.google.Photos"));
+
+  // Trigger sample reporting by sending user activity.
+  SendUserActivity();
+
+  histogram_tester_->ExpectBucketCount(
+      "DemoMode.ActiveApp",
+      DemoSessionMetricsRecorder::DemoModeApp::kGooglePhotos, 1);
+
+  // Set the package name again.  The count shouldn't change because
+  // after getting the package name once, we stop observing the
+  // window.
+  arc_window->SetProperty(kArcPackageNameKey,
+                          new std::string("com.google.Photos"));
+  // Trigger sample reporting by sending user activity.
+  SendUserActivity();
+
+  histogram_tester_->ExpectBucketCount(
+      "DemoMode.ActiveApp",
+      DemoSessionMetricsRecorder::DemoModeApp::kGooglePhotos, 1);
+
+  // Delete the window.
+  arc_window.reset();
+
+  // Trigger sample reporting by sending user activity.
+  SendUserActivity();
+
+  // The count should not be affected.
+  histogram_tester_->ExpectBucketCount(
+      "DemoMode.ActiveApp",
+      DemoSessionMetricsRecorder::DemoModeApp::kGooglePhotos, 1);
+}
+
 // Verify popup windows are categorized as kOtherWindow.
 TEST_F(DemoSessionMetricsRecorderTest, PopupWindows) {
   std::unique_ptr<aura::Window> chrome_app_window =
@@ -516,6 +564,14 @@
   arc_window_1->SetProperty(kArcPackageNameKey,
                             new std::string("com.google.Photos"));
 
+  // Set the package name again. This shouldn't cause a double-recording
+  // of the stat.
+  arc_window_1->SetProperty(kArcPackageNameKey,
+                            new std::string("com.google.Photos"));
+
+  // Delete the window.
+  arc_window_1.reset();
+
   std::unique_ptr<aura::Window> arc_window_2 =
       CreateArcWindow("com.google.Maps");
   wm::ActivateWindow(arc_window_2.get());
diff --git a/ash/public/cpp/shelf_struct_mojom_traits.h b/ash/public/cpp/shelf_struct_mojom_traits.h
index 3f6dad6c..093f9e8 100644
--- a/ash/public/cpp/shelf_struct_mojom_traits.h
+++ b/ash/public/cpp/shelf_struct_mojom_traits.h
@@ -160,6 +160,8 @@
         return ash::mojom::ShelfLaunchSource::APP_LIST;
       case ash::LAUNCH_FROM_APP_LIST_SEARCH:
         return ash::mojom::ShelfLaunchSource::APP_LIST_SEARCH;
+      case ash::LAUNCH_FROM_SHELF:
+        return ash::mojom::ShelfLaunchSource::SHELF;
     }
     NOTREACHED();
     return ash::mojom::ShelfLaunchSource::UNKNOWN;
@@ -177,6 +179,9 @@
       case ash::mojom::ShelfLaunchSource::APP_LIST_SEARCH:
         *out = ash::LAUNCH_FROM_APP_LIST_SEARCH;
         return true;
+      case ash::mojom::ShelfLaunchSource::SHELF:
+        *out = ash::LAUNCH_FROM_SHELF;
+        return true;
     }
     NOTREACHED();
     return false;
diff --git a/ash/public/cpp/shelf_types.h b/ash/public/cpp/shelf_types.h
index ed21eaf..fdf2c1f2 100644
--- a/ash/public/cpp/shelf_types.h
+++ b/ash/public/cpp/shelf_types.h
@@ -78,7 +78,7 @@
 
 // Source of the launch or activation request, for tracking.
 enum ShelfLaunchSource {
-  // The item was launched from an unknown source (ie. not the app list).
+  // The item was launched from an unknown source.
   LAUNCH_FROM_UNKNOWN,
 
   // The item was launched from a generic app list view.
@@ -86,6 +86,9 @@
 
   // The item was launched from an app list search view.
   LAUNCH_FROM_APP_LIST_SEARCH,
+
+  // The item was launched from the shelf itself.
+  LAUNCH_FROM_SHELF,
 };
 
 // The actions that may be performed when a shelf item is selected.
diff --git a/ash/public/interfaces/shelf.mojom b/ash/public/interfaces/shelf.mojom
index 8bb2c6f..b048e03 100644
--- a/ash/public/interfaces/shelf.mojom
+++ b/ash/public/interfaces/shelf.mojom
@@ -46,9 +46,10 @@
 // Source of the launch or activation request, for tracking.
 // These values match ash::ShelfLaunchSource.
 enum ShelfLaunchSource {
-  UNKNOWN,          // The item was launched from outside the app list.
+  UNKNOWN,          // The item was launched from elsewhere.
   APP_LIST,         // The item was launched from a generic app list view.
   APP_LIST_SEARCH,  // The item was launched from an app list search view.
+  SHELF,            // The item was launched from the shelf.
 };
 
 // The Shelf controller allows clients (eg. Chrome) to control the ash shelf.
diff --git a/ash/shelf/app_list_shelf_item_delegate_unittest.cc b/ash/shelf/app_list_shelf_item_delegate_unittest.cc
index 8f1d785d..96d55ee 100644
--- a/ash/shelf/app_list_shelf_item_delegate_unittest.cc
+++ b/ash/shelf/app_list_shelf_item_delegate_unittest.cc
@@ -51,7 +51,7 @@
       ui::EventType::ET_MOUSE_PRESSED, ui::VKEY_UNKNOWN, ui::EF_NONE);
   delegate()->ItemSelected(
       std::move(test_event), GetPrimaryDisplay().id(),
-      ShelfLaunchSource::LAUNCH_FROM_UNKNOWN,
+      ShelfLaunchSource::LAUNCH_FROM_SHELF,
       base::BindOnce(
           [](ash::ShelfAction, base::Optional<ash::MenuItemList>) {}));
   ASSERT_TRUE(wm::GetWindowState(w1.get())->IsMinimized());
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc
index ad6ce8d..a2a91716 100644
--- a/ash/shelf/shelf.cc
+++ b/ash/shelf/shelf.cc
@@ -106,7 +106,7 @@
   ShelfItemDelegate* item_delegate = shelf_model->GetShelfItemDelegate(item.id);
   std::unique_ptr<ui::Event> event = std::make_unique<ui::KeyEvent>(
       ui::ET_KEY_RELEASED, ui::VKEY_UNKNOWN, ui::EF_NONE);
-  item_delegate->ItemSelected(std::move(event), display_id, LAUNCH_FROM_UNKNOWN,
+  item_delegate->ItemSelected(std::move(event), display_id, LAUNCH_FROM_SHELF,
                               base::DoNothing());
 }
 
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 43aba252..8b4e6b0 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -684,7 +684,7 @@
   // Notify the item of its selection; handle the result in AfterItemSelected.
   item_awaiting_response_ = item.id;
   model_->GetShelfItemDelegate(item.id)->ItemSelected(
-      ui::Event::Clone(event), GetDisplayIdForView(this), LAUNCH_FROM_UNKNOWN,
+      ui::Event::Clone(event), GetDisplayIdForView(this), LAUNCH_FROM_SHELF,
       base::BindOnce(&ShelfView::AfterItemSelected, weak_factory_.GetWeakPtr(),
                      item, sender, base::Passed(ui::Event::Clone(event)),
                      ink_drop));
diff --git a/base/android/java/src/org/chromium/base/LocaleUtils.java b/base/android/java/src/org/chromium/base/LocaleUtils.java
index 05d39029a..a993647 100644
--- a/base/android/java/src/org/chromium/base/LocaleUtils.java
+++ b/base/android/java/src/org/chromium/base/LocaleUtils.java
@@ -172,6 +172,29 @@
     }
 
     /**
+     * Extracts language from a language tag.
+     * @param languageTag language tag of the form xx-XX or xx.
+     * @return the xx part of the language tag.
+     */
+    public static String toLanguage(String languageTag) {
+        int pos = languageTag.indexOf('-');
+        if (pos < 0) {
+            return languageTag;
+        }
+        return languageTag.substring(0, pos);
+    }
+
+    /** @return true if the language is supported by Chrome. */
+    public static boolean isLanguageSupported(String language) {
+        for (String languageTag : BuildConfig.COMPRESSED_LOCALES) {
+            if (toLanguage(languageTag).equals(language)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
      * @return a comma separated language tags string that represents a default locale.
      *         Each language tag is well-formed IETF BCP 47 language tag with language and country
      *         code.
diff --git a/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java b/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java
index fc37a1f..37db141 100644
--- a/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java
+++ b/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java
@@ -259,4 +259,16 @@
         locale = new Locale("en");
         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
     }
+
+    // Test for toLanguage.
+    @Test
+    @SmallTest
+    public void testToLanguage() {
+        Assert.assertEquals("en", LocaleUtils.toLanguage("en-US"));
+        Assert.assertEquals("en", LocaleUtils.toLanguage("en"));
+        Assert.assertEquals("", LocaleUtils.toLanguage("-"));
+        Assert.assertEquals("", LocaleUtils.toLanguage("-US"));
+        Assert.assertEquals("", LocaleUtils.toLanguage(""));
+        Assert.assertEquals("fil", LocaleUtils.toLanguage("fil"));
+    }
 }
diff --git a/base/task/task_scheduler/scheduler_worker_pool_impl.cc b/base/task/task_scheduler/scheduler_worker_pool_impl.cc
index e4253a8b..34d6de2 100644
--- a/base/task/task_scheduler/scheduler_worker_pool_impl.cc
+++ b/base/task/task_scheduler/scheduler_worker_pool_impl.cc
@@ -919,39 +919,33 @@
   DCHECK_CALLED_ON_VALID_THREAD(worker_thread_checker_);
   DCHECK(worker_only().is_running_task);
 
-  bool must_schedule_adjust_max_tasks = false;
   SchedulerWorkerActionExecutor executor(outer_);
-  {
-    AutoSchedulerLock auto_lock(outer_->lock_);
+  AutoSchedulerLock auto_lock(outer_->lock_);
 
-    DCHECK(!incremented_max_tasks_since_blocked_);
-    DCHECK(read_worker().may_block_start_time.is_null());
-    incremented_max_tasks_since_blocked_ = true;
-    outer_->IncrementMaxTasksLockRequired(
-        read_worker().is_running_best_effort_task);
+  DCHECK(!incremented_max_tasks_since_blocked_);
+  DCHECK(read_worker().may_block_start_time.is_null());
+  incremented_max_tasks_since_blocked_ = true;
+  outer_->IncrementMaxTasksLockRequired(
+      read_worker().is_running_best_effort_task);
 
-    // If the number of workers was less than the old max tasks, PostTask
-    // would've handled creating extra workers during WakeUpOneWorker.
-    // Therefore, we don't need to do anything here.
-    if (outer_->workers_.size() < outer_->max_tasks_ - 1)
-      return;
+  // If the number of workers was less than the old max tasks, PostTask would've
+  // handled creating extra workers during WakeUpOneWorker. Therefore, we don't
+  // need to do anything here.
+  if (outer_->workers_.size() < outer_->max_tasks_ - 1)
+    return;
 
-    if (outer_->priority_queue_.IsEmpty()) {
-      outer_->MaintainAtLeastOneIdleWorkerLockRequired(&executor);
-    } else {
-      // TODO(crbug.com/757897): We may create extra workers in this case:
-      // |workers.size()| was equal to the old |max_tasks_|, we had multiple
-      // ScopedBlockingCalls in parallel and we had work on the PQ.
-      outer_->WakeUpOneWorkerLockRequired(&executor);
-    }
-
-    must_schedule_adjust_max_tasks =
-        outer_->MustScheduleAdjustMaxTasksLockRequired();
+  if (outer_->priority_queue_.IsEmpty()) {
+    outer_->MaintainAtLeastOneIdleWorkerLockRequired(&executor);
+  } else {
+    // TODO(crbug.com/757897): We may create extra workers in this case:
+    // |workers.size()| was equal to the old |max_tasks_|, we had multiple
+    // ScopedBlockingCalls in parallel and we had work on the PQ.
+    outer_->WakeUpOneWorkerLockRequired(&executor);
   }
-  // TODO(crbug.com/813857): This can be better handled in the PostTask()
-  // codepath. We really only should do this if there are tasks pending.
-  if (must_schedule_adjust_max_tasks)
-    outer_->ScheduleAdjustMaxTasks();
+
+  // Entering a WILL_BLOCK ScopedBlockingCall is not expected to require
+  // AdjustMaxTasks() to be scheduled.
+  DCHECK(!outer_->MustScheduleAdjustMaxTasksLockRequired());
 }
 
 bool SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::
diff --git a/ui/android/build/create_ui_locale_resources.py b/build/android/gyp/create_ui_locale_resources.py
similarity index 80%
rename from ui/android/build/create_ui_locale_resources.py
rename to build/android/gyp/create_ui_locale_resources.py
index d62f636..97868cb 100755
--- a/ui/android/build/create_ui_locale_resources.py
+++ b/build/android/gyp/create_ui_locale_resources.py
@@ -20,8 +20,10 @@
 import sys
 import zipfile
 
-sys.path.insert(0, os.path.join(
-    os.path.dirname(__file__), '..', '..', '..', 'build', 'android', 'gyp'))
+sys.path.insert(
+    0,
+    os.path.join(
+        os.path.dirname(__file__), '..', '..', '..', 'build', 'android', 'gyp'))
 
 from util import build_utils
 from util import resource_utils
@@ -50,20 +52,21 @@
     zip_path = 'values-%s/strings.xml' % android_locale
   else:
     zip_path = 'values/strings.xml'
-  build_utils.AddToZipHermetic(out_zip, zip_path, data=locale_data,
-                               compress=False)
+  build_utils.AddToZipHermetic(
+      out_zip, zip_path, data=locale_data, compress=False)
 
 
 def main():
   parser = argparse.ArgumentParser(
-      description=__doc__,
-      formatter_class=argparse.RawDescriptionHelpFormatter)
+      description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
 
   build_utils.AddDepfileOption(parser)
-  parser.add_argument('--locale-list', required=True,
-                      help='GN-list of Chrome-specific locale names.')
-  parser.add_argument('--output-zip', required=True,
-                      help='Output zip archive path.')
+  parser.add_argument(
+      '--locale-list',
+      required=True,
+      help='GN-list of Chrome-specific locale names.')
+  parser.add_argument(
+      '--output-zip', required=True, help='Output zip archive path.')
 
   args = parser.parse_args()
 
@@ -83,5 +86,6 @@
   if args.depfile:
     build_utils.WriteDepfile(args.depfile, args.output_zip)
 
+
 if __name__ == '__main__':
   main()
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 9cb11ab8..4743b20 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -4231,3 +4231,41 @@
     }
   }
 }
+
+# Generate an Android resources target that contains localized strings
+# describing the current locale used by the Android framework to display
+# UI strings. These are used by
+# org.chromium.chrome.browser.ChromeLocalizationUtils.
+#
+# Variables:
+#    ui_locales: List of Chromium locale names to generate resources for.
+#
+template("generate_ui_locale_resources") {
+  _generating_target_name = "${target_name}__generate"
+  _rebased_output_zip_path = rebase_path(target_gen_dir, root_gen_dir)
+  _output_zip = "${root_out_dir}/resource_zips/${_rebased_output_zip_path}/" +
+                "${target_name}.zip"
+
+  _locales = invoker.ui_locales
+  _depfile = "$target_gen_dir/$target_name.d"
+
+  action(_generating_target_name) {
+    script = "//build/android/gyp/create_ui_locale_resources.py"
+    depfile = _depfile
+    outputs = [
+      _output_zip,
+    ]
+    args = [
+      "--locale-list=$_locales",
+      "--depfile",
+      rebase_path(_depfile, root_build_dir),
+      "--output-zip",
+      rebase_path(_output_zip, root_build_dir),
+    ]
+  }
+
+  android_generated_resources(target_name) {
+    generating_target_name = ":$_generating_target_name"
+    generated_resources_zip = _output_zip
+  }
+}
diff --git a/build/config/gcc/BUILD.gn b/build/config/gcc/BUILD.gn
index 5499644..28b0bf7 100644
--- a/build/config/gcc/BUILD.gn
+++ b/build/config/gcc/BUILD.gn
@@ -65,11 +65,10 @@
 config("rpath_for_built_shared_libraries") {
   if (!is_android) {
     # Note: Android doesn't support rpath.
-    rpath_link = "."
     if (current_toolchain != default_toolchain || gcc_target_rpath == "") {
       ldflags = [
         # Want to pass "\$". GN will re-escape as required for ninja.
-        "-Wl,-rpath=\$ORIGIN/${rpath_link}",
+        "-Wl,-rpath=\$ORIGIN/.",
       ]
     } else {
       ldflags = [ "-Wl,-rpath=${gcc_target_rpath}" ]
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index b314812..84c781a 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-7f1a007213780da98da29a3c80afc84e4f896e79
\ No newline at end of file
+e9b630cce9b6602293613dd32852599dbc48198e
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index abe730e..ff2878ec 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-88f471b1f1b5b6a38a905f77ca2ff8d40cf6a9ed
\ No newline at end of file
+2a404570a08c9e1687c7b896cb63af773fc88b42
\ No newline at end of file
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py
index cd45024..32a0ea4a 100755
--- a/build/fuchsia/test_runner.py
+++ b/build/fuchsia/test_runner.py
@@ -21,8 +21,11 @@
 from run_package import RunPackage, RunPackageArgs
 
 DEFAULT_TEST_CONCURRENCY = 4
+# TODO(https://crbug.com/930182): Migrate off of deprecated global storage.
 TEST_RESULT_PATH = '/data/test_summary.json'
+TEST_RESULT_SCP_PATH = '/data/deprecated-global-persistent-storage/test_summary.json'
 TEST_FILTER_PATH = '/data/test_filter.txt'
+TEST_FILTER_SCP_PATH = '/data/deprecated-global-persistent-storage/test_filter.txt'
 
 def main():
   parser = argparse.ArgumentParser()
@@ -103,7 +106,7 @@
     target.Start()
 
     if args.test_launcher_filter_file:
-      target.PutFile(args.test_launcher_filter_file, TEST_FILTER_PATH)
+      target.PutFile(args.test_launcher_filter_file, TEST_FILTER_SCP_PATH)
       child_args.append('--test-launcher-filter-file=' + TEST_FILTER_PATH)
 
     test_server = None
@@ -119,7 +122,7 @@
       test_server.Stop()
 
     if args.test_launcher_summary_output:
-      target.GetFile(TEST_RESULT_PATH, args.test_launcher_summary_output)
+      target.GetFile(TEST_RESULT_SCP_PATH, args.test_launcher_summary_output)
 
     return returncode
 
diff --git a/cc/test/skia_common.cc b/cc/test/skia_common.cc
index e942b7a..0efdbef 100644
--- a/cc/test/skia_common.cc
+++ b/cc/test/skia_common.cc
@@ -171,19 +171,19 @@
   for (size_t pos = json.find(kSkottieWidthToken); pos != std::string::npos;
        pos = json.find(kSkottieWidthToken)) {
     json.replace(pos, strlen(kSkottieWidthToken),
-                 base::IntToString(size.width()));
+                 base::NumberToString(size.width()));
   }
 
   for (size_t pos = json.find(kSkottieHeightToken); pos != std::string::npos;
        pos = json.find(kSkottieHeightToken)) {
     json.replace(pos, strlen(kSkottieHeightToken),
-                 base::IntToString(size.height()));
+                 base::NumberToString(size.height()));
   }
 
   for (size_t pos = json.find(kSkottieDurationToken); pos != std::string::npos;
        pos = json.find(kSkottieDurationToken)) {
     json.replace(pos, strlen(kSkottieDurationToken),
-                 base::IntToString(duration_secs * kFps));
+                 base::NumberToString(duration_secs * kFps));
   }
 
   return base::MakeRefCounted<SkottieWrapper>(
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 7eee69f..781a2066 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1648,22 +1648,18 @@
 void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) {
   TRACE_EVENT0("cc", "LayerTreeHostImpl::NotifyTileStateChanged");
 
-  if (active_tree_) {
-    LayerImpl* layer_impl =
-        active_tree_->FindActiveTreeLayerById(tile->layer_id());
-    if (layer_impl)
-      layer_impl->NotifyTileStateChanged(tile);
-  }
+  LayerImpl* layer_impl = nullptr;
 
-  if (pending_tree_) {
-    LayerImpl* layer_impl =
-        pending_tree_->FindPendingTreeLayerById(tile->layer_id());
-    if (layer_impl)
-      layer_impl->NotifyTileStateChanged(tile);
-  }
+  // We must have a pending or active tree layer here, since the layer is
+  // guaranteed to outlive its tiles.
+  if (tile->tiling()->tree() == WhichTree::PENDING_TREE)
+    layer_impl = pending_tree_->FindPendingTreeLayerById(tile->layer_id());
+  else
+    layer_impl = active_tree_->FindActiveTreeLayerById(tile->layer_id());
 
-  // Check for a non-null active tree to avoid doing this during shutdown.
-  if (active_tree_ && !client_->IsInsideDraw() && tile->required_for_draw()) {
+  layer_impl->NotifyTileStateChanged(tile);
+
+  if (!client_->IsInsideDraw() && tile->required_for_draw()) {
     // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this
     // redraw will make those tiles be displayed.
     SetNeedsRedraw();
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index bbdc75f..1f18015 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -9033,5 +9033,65 @@
 
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestRequestForceSendMetadata);
 
+class LayerTreeHostTestPartialTileDamage : public LayerTreeHostTest {
+ public:
+  LayerTreeHostTestPartialTileDamage()
+      : partial_damage_(20, 20, 45, 60), layer_size_(512, 512) {}
+
+  void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+  void AfterTest() override {}
+
+  void InitializeSettings(LayerTreeSettings* settings) override {
+    settings->default_tile_size = gfx::Size(256, 256);
+  }
+
+  void SetupTree() override {
+    content_layer_client_.set_bounds(layer_size_);
+    content_layer_client_.set_fill_with_nonsolid_color(true);
+    layer_tree_host()->SetRootLayer(
+        FakePictureLayer::Create(&content_layer_client_));
+    layer_tree_host()->root_layer()->SetBounds(layer_size_);
+    LayerTreeTest::SetupTree();
+  }
+
+  void DoPartialTileInvalidation() {
+    layer_tree_host()->root_layer()->SetNeedsDisplayRect(partial_damage_);
+  }
+
+  void DisplayReceivedCompositorFrameOnThread(
+      const viz::CompositorFrame& frame) override {
+    frame_count_on_impl_thread_++;
+    gfx::Rect frame_damage = frame.render_pass_list.back()->damage_rect;
+
+    switch (frame_count_on_impl_thread_) {
+      case 1:
+        // We have the first frame, which should damage everything. Schedule
+        // another which partially damages one of tiles.
+        MainThreadTaskRunner()->PostTask(
+            FROM_HERE,
+            base::BindOnce(
+                &LayerTreeHostTestPartialTileDamage::DoPartialTileInvalidation,
+                base::Unretained(this)));
+        EXPECT_EQ(frame_damage, gfx::Rect(layer_size_));
+        break;
+      case 2:
+        EXPECT_EQ(frame_damage, partial_damage_);
+        EndTest();
+    }
+  }
+
+ protected:
+  const gfx::Rect partial_damage_;
+  const gfx::Size layer_size_;
+
+  // Main thread.
+  FakeContentLayerClient content_layer_client_;
+
+  // Impl thread.
+  int frame_count_on_impl_thread_ = 0;
+};
+
+MULTI_THREAD_TEST_F(LayerTreeHostTestPartialTileDamage);
+
 }  // namespace
 }  // namespace cc
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 44ad8773..56fd3bb 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -90,6 +90,10 @@
               [ "manifest_package=$trichrome_library_package" ]
 }
 
+generate_ui_locale_resources("ui_locale_string_resources") {
+  ui_locales = locales
+}
+
 android_resources("chrome_app_java_resources") {
   resource_dirs = [
     "java/res",
@@ -106,6 +110,7 @@
 
   deps = [
     ":chrome_strings_grd",
+    ":ui_locale_string_resources",
     "//chrome/android/webapk/libs/common:splash_resources",
     "//chrome/app:java_strings_grd",
     "//components/autofill/android:autofill_java_resources",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index 72f8c07..d0bd7b2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -1500,13 +1500,6 @@
 
             mComponent.resolveContextualSuggestionsCoordinator();
         }
-
-        // TODO(yusufo) : Move the condition here to FeatureUtils and the resolution to a
-        //  ChromeTabbedActivity specific place.
-        if (!isTablet() && !SysUtils.isLowEndDevice()
-                && ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID)) {
-            mComponent.resolveTabGridCoordinator();
-        }
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
index 0b5dafc..dd496cc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
@@ -35,6 +35,8 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 
+import java.util.Locale;
+
 /**
  * Tracks the foreground session state for the Chrome activities.
  */
@@ -133,6 +135,7 @@
         UmaUtils.recordForegroundStartTime();
         updatePasswordEchoState();
         FontSizePrefs.getInstance(mApplication).onSystemFontScaleChanged();
+        recordWhetherSystemAndAppLanguagesDiffer();
         updateAcceptLanguages();
         mVariationsSession.start(mApplication);
         mPowerBroadcastReceiver.onForegroundSessionStart();
@@ -248,6 +251,22 @@
     }
 
     /**
+     * Records whether Chrome was started in a language other than the system language but we
+     * support the system language. That can happen if the user changes the system language and the
+     * required language split cannot be installed in time.
+     */
+    private void recordWhetherSystemAndAppLanguagesDiffer() {
+        String uiLanguage =
+                LocaleUtils.toLanguage(ChromeLocalizationUtils.getUiLocaleStringForCompressedPak());
+        String systemLanguage =
+                LocaleUtils.toLanguage(LocaleUtils.toLanguageTag(Locale.getDefault()));
+        boolean isWrongLanguage = !systemLanguage.equals(uiLanguage)
+                && LocaleUtils.isLanguageSupported(systemLanguage);
+        RecordHistogram.recordBooleanHistogram(
+                "Android.Language.WrongLanguageAfterResume", isWrongLanguage);
+    }
+
+    /**
      * @return The PowerBroadcastReceiver for the browser process.
      */
     @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java
new file mode 100644
index 0000000..2f53c4c1
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java
@@ -0,0 +1,34 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// 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;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.chrome.R;
+
+/**
+ * This class provides the locale related methods for Chrome.
+ */
+public class ChromeLocalizationUtils {
+    /**
+     * @return the current Chromium locale used to display UI elements.
+     *
+     * This matches what the Android framework resolves localized string resources to, using the
+     * system locale and the application's resources. For example, if the system uses a locale
+     * that is not supported by Chromium resources (e.g. 'fur-rIT'), Android will likely fallback
+     * to 'en-rUS' strings when Resources.getString() is called, and this method will return the
+     * matching Chromium name (i.e. 'en-US').
+     *
+     * Using this value is necessary to ensure that the strings accessed from the locale .pak files
+     * from C++ match the resources displayed by the Java-based UI views.
+     */
+    public static String getUiLocaleStringForCompressedPak() {
+        return ContextUtils.getApplicationContext().getResources().getString(
+                R.string.current_detected_ui_locale_name);
+    }
+
+    private ChromeLocalizationUtils() {
+        /* cannot be instantiated */
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 3a54e26..14368f2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -645,6 +645,10 @@
                 UsageStatsService.getInstance().createPageViewObserver(mTabModelSelectorImpl, this);
             }
 
+            if (FeatureUtilities.isGridTabSwitcherEnabled(this)) {
+                getComponent().resolveGridTabSwitcherCoordinator();
+            }
+
             super.finishNativeInitialization();
         } finally {
             TraceEvent.end("ChromeTabbedActivity.finishNativeInitialization");
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java b/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java
index c3ee20b..cc47e66 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java
@@ -6,7 +6,7 @@
 
 import org.chromium.chrome.browser.contextual_suggestions.ContextualSuggestionsCoordinator;
 import org.chromium.chrome.browser.contextual_suggestions.ContextualSuggestionsModule;
-import org.chromium.chrome.browser.tasks.tab_list_ui.TabGridCoordinator;
+import org.chromium.chrome.browser.tasks.tab_list_ui.GridTabSwitcherCoordinator;
 
 import dagger.Subcomponent;
 
@@ -20,5 +20,5 @@
 
     // Temporary getters for DI migration process.
     ContextualSuggestionsCoordinator resolveContextualSuggestionsCoordinator();
-    TabGridCoordinator resolveTabGridCoordinator();
+    GridTabSwitcherCoordinator resolveGridTabSwitcherCoordinator();
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
index cb77242..0eca769 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
@@ -16,6 +16,7 @@
 import org.chromium.base.CommandLine;
 import org.chromium.base.ContentUriUtils;
 import org.chromium.base.ContextUtils;
+import org.chromium.base.LocaleUtils;
 import org.chromium.base.Log;
 import org.chromium.base.PathUtils;
 import org.chromium.base.SysUtils;
@@ -28,6 +29,7 @@
 import org.chromium.base.task.AsyncTask;
 import org.chromium.chrome.browser.AppHooks;
 import org.chromium.chrome.browser.ChromeApplication;
+import org.chromium.chrome.browser.ChromeLocalizationUtils;
 import org.chromium.chrome.browser.ChromeStrictMode;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.FileProviderHelper;
@@ -257,7 +259,8 @@
         // Check to see if we need to extract any new resources from the APK. This could
         // be on first run when we need to extract all the .pak files we need, or after
         // the user has switched locale, in which case we want new locale resources.
-        ResourceExtractor.get().startExtractingResources();
+        ResourceExtractor.get().startExtractingResources(LocaleUtils.toLanguage(
+                ChromeLocalizationUtils.getUiLocaleStringForCompressedPak()));
 
         mPostInflationStartupComplete = true;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java
index ea63751..a085395f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java
@@ -103,5 +103,8 @@
 
     Notification buildWithBigTextStyle(String bigText);
 
+    @Deprecated
     Notification build();
+
+    ChromeNotification buildChromeNotification();
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java
index df09a54..cdfd21754 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java
@@ -349,4 +349,10 @@
     public Notification build() {
         return mBuilder.build();
     }
+
+    @Override
+    public ChromeNotification buildChromeNotification() {
+        assert mMetadata != null;
+        return new ChromeNotification(build(), mMetadata);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java
index bfa7d8a..8375669 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java
@@ -289,4 +289,10 @@
     public Notification build() {
         return mBuilder.build();
     }
+
+    @Override
+    public ChromeNotification buildChromeNotification() {
+        assert mMetadata != null;
+        return new ChromeNotification(build(), mMetadata);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java
index d6a69a1..aeaec77c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java
@@ -40,9 +40,13 @@
     @TargetApi(Build.VERSION_CODES.O)
     void deleteNotificationChannel(String id);
 
+    @Deprecated
     void notify(int id, Notification notification);
+    @Deprecated
     void notify(String tag, int id, Notification notification);
 
+    void notify(ChromeNotification notification);
+
     @TargetApi(Build.VERSION_CODES.O)
     NotificationChannel getNotificationChannel(String channelId);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java
index ce84f25..b7f4035 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java
@@ -100,6 +100,13 @@
         mNotificationManager.notify(tag, id, notification);
     }
 
+    @Override
+    public void notify(ChromeNotification notification) {
+        assert notification.getMetadata() != null;
+        mNotificationManager.notify(notification.getMetadata().tag, notification.getMetadata().id,
+                notification.getNotification());
+    }
+
     @TargetApi(Build.VERSION_CODES.O)
     @Override
     public NotificationChannel getNotificationChannel(String channelId) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java
index c2820ad2..2ada247 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java
@@ -19,6 +19,7 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.IntentHandler;
@@ -340,9 +341,11 @@
     }
 
     private static void reportCompleteNotificationAction(@NotificationAction int action) {
-        RecordHistogram.recordEnumeratedHistogram(
-                "OfflinePages.AutoFetch.CompleteNotificationAction", action,
-                NotificationAction.NUM_ENTRIES);
+        // Native may or may not be running, so use CachedMetrics.EnumeratedHistogramSample.
+        EnumeratedHistogramSample sample =
+                new EnumeratedHistogramSample("OfflinePages.AutoFetch.CompleteNotificationAction",
+                        NotificationAction.NUM_ENTRIES);
+        sample.record(action);
     }
 
     private static boolean isShowingInProgressNotification() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java
index 9cc5902..8ff1a73 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java
@@ -129,7 +129,6 @@
      * Sets both lines of the Omnibox suggestion based on an Answers in Suggest result.
      */
     private void setStateForSuggestion(PropertyModel model, SuggestionAnswer answer) {
-        float density = mContext.getResources().getDisplayMetrics().density;
         SuggestionAnswer.ImageLine firstLine = answer.getFirstLine();
         SuggestionAnswer.ImageLine secondLine = answer.getSecondLine();
         int numAnswerLines = parseNumAnswerLines(secondLine.getTextFields());
@@ -140,7 +139,7 @@
         if (mEnableNewAnswerLayout) {
             details = AnswerTextNewLayout.from(mContext, answer);
         } else {
-            details = AnswerTextClassic.from(mContext, answer, density);
+            details = AnswerTextClassic.from(mContext, answer);
         }
 
         model.set(SuggestionViewProperties.TEXT_LINE_1_SIZING,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java
index f6e0944..748dda6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java
@@ -20,10 +20,23 @@
  * AnswerText specifies details to be presented in a single line of omnibox suggestion.
  */
 abstract class AnswerText {
-    Context mContext;
+    final Context mContext;
+    /** Density of current display. */
+    final float mDensity;
     /** Content of the line of text in omnibox suggestion. */
     SpannableStringBuilder mText;
-    /** Max height of the text. */
+    /**
+     * Height of the mText.
+     * Each AnswerText can be a combination of multiple text styles (both sizes and colors).
+     * This height holds either
+     * - running maximum (during build phase)
+     * - final maximum (after build phase)
+     * height of the text contained in mText.
+     * Note: since all our AnswerTexts always use the largest text as the very first span of the
+     * whole content, it is safe to assume that this field contains the height of the largest text
+     * element in all cases, except when computing styles for the first span (= during the very
+     * first call to getAppearanceForText()).
+     */
     int mHeightSp;
     /** Whether content can wrap around to present more details. */
     int mMaxLines;
@@ -35,6 +48,7 @@
      */
     AnswerText(Context context) {
         mContext = context;
+        mDensity = context.getResources().getDisplayMetrics().density;
     }
 
     /**
@@ -47,6 +61,10 @@
         mText = new SpannableStringBuilder();
         mMaxLines = 1;
 
+        // This method also computes height of the entire text span.
+        // Ensure we're not rebuilding or appending once AnswerText has been constructed.
+        assert mHeightSp == 0;
+
         List<SuggestionAnswer.TextField> textFields = line.getTextFields();
         for (int i = 0; i < textFields.size(); i++) {
             appendAndStyleText(textFields.get(i));
@@ -73,10 +91,12 @@
     @SuppressWarnings("deprecation") // Update usage of Html.fromHtml when API min is 24
     private void appendAndStyleText(SuggestionAnswer.TextField textField) {
         MetricAffectingSpan[] styles = getAppearanceForText(textField.getType());
+        // Determine the maximum height of the TextAppearanceSpans that are applied for this field.
         for (MetricAffectingSpan style : styles) {
             if (!(style instanceof TextAppearanceSpan)) continue;
             TextAppearanceSpan textStyle = (TextAppearanceSpan) style;
-            if (mHeightSp < textStyle.getTextSize()) mHeightSp = textStyle.getTextSize();
+            int textHeightSp = (int) (textStyle.getTextSize() / mDensity);
+            if (mHeightSp < textHeightSp) mHeightSp = textHeightSp;
         }
 
         // Unescape HTML entities (e.g. "&quot;", "&gt;").
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java
index 5293077d..77903e2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java
@@ -21,7 +21,6 @@
  */
 class AnswerTextClassic extends AnswerText {
     private static final String TAG = "AnswerTextClassic";
-    private final float mDensity;
 
     /**
      * Convert SuggestionAnswer to array of elements that directly translate to user-presented
@@ -29,15 +28,13 @@
      *
      * @param context Current context.
      * @param answer Specifies answer to be converted.
-     * @param density Screen density which will be used to properly size and layout images and top-
-     *                aligned text.
      * @return array of AnswerText elements to use to construct suggestion item.
      */
-    static AnswerText[] from(Context context, SuggestionAnswer answer, final float density) {
+    static AnswerText[] from(Context context, SuggestionAnswer answer) {
         AnswerText[] result = new AnswerText[2];
 
-        result[0] = new AnswerTextClassic(context, answer.getFirstLine(), density);
-        result[1] = new AnswerTextClassic(context, answer.getSecondLine(), density);
+        result[0] = new AnswerTextClassic(context, answer.getFirstLine());
+        result[1] = new AnswerTextClassic(context, answer.getSecondLine());
 
         // Trim number of presented query lines.
         result[0].mMaxLines = 1;
@@ -50,11 +47,9 @@
      *
      * @param context Current context.
      * @param line Suggestion line that will be converted to Answer Text.
-     * @param density Screen density.
      */
-    AnswerTextClassic(Context context, SuggestionAnswer.ImageLine line, float density) {
+    AnswerTextClassic(Context context, SuggestionAnswer.ImageLine line) {
         super(context);
-        mDensity = density;
         build(line);
     }
 
@@ -72,8 +67,8 @@
             case AnswerTextType.TOP_ALIGNED:
                 TextAppearanceSpan style = new TextAppearanceSpan(
                         mContext, R.style.TextAppearance_OmniboxAnswerTextSmall);
-                return new MetricAffectingSpan[] {
-                        style, new TopAlignedSpan(style.getTextSize(), mHeightSp, mDensity)};
+                return new MetricAffectingSpan[] {style,
+                        new TopAlignedSpan(style.getTextSize(), (int) (mHeightSp * mDensity))};
 
             case AnswerTextType.DESCRIPTION_NEGATIVE:
                 res = R.style.TextAppearance_OmniboxAnswerDescriptionNegative;
@@ -124,23 +119,20 @@
      * the top of the ascent).
      */
     private static class TopAlignedSpan extends MetricAffectingSpan {
-        private final int mTextHeightSp;
-        private final int mMaxTextHeightSp;
-        private final float mDensity;
+        private final int mTextHeightPx;
+        private final int mMaxTextHeightPx;
 
         private Integer mBaselineShift;
 
         /**
          * Constructor for TopAlignedSpan.
          *
-         * @param textHeightSp The total height in SP of the text covered by this span.
-         * @param maxTextHeightSp The total height in SP of the text we wish to top-align with.
-         * @param density The display density.
+         * @param textHeightPx The total height in pixels of the text covered by this span.
+         * @param maxTextHeightPx The total height in pixels of the text we wish to top-align with.
          */
-        public TopAlignedSpan(int textHeightSp, int maxTextHeightSp, float density) {
-            mTextHeightSp = textHeightSp;
-            mMaxTextHeightSp = maxTextHeightSp;
-            mDensity = density;
+        public TopAlignedSpan(int textHeightPx, int maxTextHeightPx) {
+            mTextHeightPx = textHeightPx;
+            mMaxTextHeightPx = maxTextHeightPx;
         }
 
         @Override
@@ -160,8 +152,8 @@
             Paint.FontMetrics metrics = tp.getFontMetrics();
             float ascentProportion = metrics.ascent / (metrics.top - metrics.bottom);
 
-            int textAscentPx = (int) (mTextHeightSp * ascentProportion * mDensity);
-            int maxTextAscentPx = (int) (mMaxTextHeightSp * ascentProportion * mDensity);
+            int textAscentPx = (int) (mTextHeightPx * ascentProportion);
+            int maxTextAscentPx = (int) (mMaxTextHeightPx * ascentProportion);
 
             mBaselineShift = -(maxTextAscentPx - textAscentPx); // Up is -y.
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java
index 2e3774a..23f714be 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java
@@ -91,6 +91,10 @@
             themeColor = getDefaultColor();
         }
 
+        if (mTab.getActivity() != null && mTab.getActivity().isTablet()) {
+            themeColor = getDefaultColor();
+        }
+
         if (mTab.isNativePage()) themeColor = getDefaultColor();
         if (mTab.isShowingInterstitialPage()) themeColor = getDefaultColor();
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java
new file mode 100644
index 0000000..fbffc87f
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java
@@ -0,0 +1,71 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// 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.tasks.tab_list_ui;
+
+import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT;
+
+import android.content.Context;
+
+import org.chromium.chrome.browser.compositor.CompositorViewHolder;
+import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
+import org.chromium.chrome.browser.dependency_injection.ActivityScope;
+import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher;
+import org.chromium.chrome.browser.lifecycle.Destroyable;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.toolbar.ToolbarManager;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+/**
+ * Parent coordinator that is responsible for showing a grid of tabs for the main TabSwitcher UI.
+ */
+@ActivityScope
+public class GridTabSwitcherCoordinator implements Destroyable {
+    private final PropertyModelChangeProcessor mContainerViewChangeProcessor;
+    private final ActivityLifecycleDispatcher mLifecycleDispatcher;
+    private final TabGridCoordinator mTabGridCoordinator;
+    private final GridTabSwitcherMediator mMediator;
+
+    @Inject
+    public GridTabSwitcherCoordinator(@Named(ACTIVITY_CONTEXT) Context context,
+            ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager,
+            TabModelSelector tabModelSelector, TabContentManager tabContentManager,
+            CompositorViewHolder compositorViewHolder) {
+        PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS);
+
+        mTabGridCoordinator = new TabGridCoordinator(
+                context, toolbarManager, tabModelSelector, tabContentManager, compositorViewHolder);
+
+        mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel,
+                mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind);
+
+        mMediator = new GridTabSwitcherMediator(this, containerViewModel, tabModelSelector);
+        toolbarManager.overrideTabSwitcherBehavior(
+                mMediator.getTabSwitcherButtonClickListener(), mMediator);
+
+        mLifecycleDispatcher = lifecycleDispatcher;
+        mLifecycleDispatcher.register(this);
+    }
+
+    /**
+     * Reset the tab grid with the given {@link TabModel}. Can be null.
+     * @param tabModel The current {@link TabModel} to show the tabs for in the grid.
+     */
+    void resetWithTabModel(TabModel tabModel) {
+        mTabGridCoordinator.resetWithTabModel(tabModel);
+    }
+
+    @Override
+    public void destroy() {
+        mTabGridCoordinator.destroy();
+        mContainerViewChangeProcessor.destroy();
+        mMediator.destroy();
+        mLifecycleDispatcher.unregister(this);
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java
new file mode 100644
index 0000000..dfb9902
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java
@@ -0,0 +1,143 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// 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.tasks.tab_list_ui;
+
+import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO;
+import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE;
+import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER;
+
+import android.view.View;
+
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver;
+import org.chromium.ui.modelutil.PropertyModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The Mediator that is responsible for resetting the tab grid based on visibility and model
+ * changes.
+ */
+class GridTabSwitcherMediator
+        implements OverviewModeBehavior, TabListRecyclerView.VisibilityListener {
+    private final GridTabSwitcherCoordinator mCoordinator;
+    private final PropertyModel mContainerViewModel;
+    private final TabModelSelector mTabModelSelector;
+    private final TabModelSelectorTabModelObserver mTabModelObserver;
+    private final List<OverviewModeObserver> mObservers = new ArrayList<>();
+
+    /**
+     * Basic constructor for the Mediator.
+     * @param coordinator The {@link GridTabSwitcherCoordinator} that owns this Mediator.
+     * @param containerViewModel The {@link PropertyModel} to keep state on the View containing the
+     *         grid.
+     * @param tabModelSelector {@link TabModelSelector} to observer for model and selection changes.
+     */
+    GridTabSwitcherMediator(GridTabSwitcherCoordinator coordinator,
+            PropertyModel containerViewModel, TabModelSelector tabModelSelector) {
+        mCoordinator = coordinator;
+        mContainerViewModel = containerViewModel;
+        mTabModelSelector = tabModelSelector;
+
+        mTabModelObserver = new TabModelSelectorTabModelObserver(mTabModelSelector) {
+            /**
+             * In cases where a didSelectTab was due to closing a tab, we don't change tab grid
+             * visibility.
+             */
+            private boolean mShouldIgnoreNextSelect;
+
+            @Override
+            public void didSelectTab(Tab tab, int type, int lastId) {
+                if (mShouldIgnoreNextSelect) {
+                    mShouldIgnoreNextSelect = false;
+                    return;
+                }
+                setVisibility(false);
+            }
+
+            @Override
+            public void willCloseTab(Tab tab, boolean animate) {
+                // Needed to handle the extra select for closing the currently selected tab.
+                mShouldIgnoreNextSelect = true;
+            }
+
+            @Override
+            public void didCloseTab(int tabId, boolean incognito) {
+                // Handles most of the tab closes.
+                mShouldIgnoreNextSelect = true;
+            }
+        };
+
+        mContainerViewModel.set(VISIBILITY_LISTENER, this);
+        mContainerViewModel.set(IS_INCOGNITO, mTabModelSelector.getCurrentModel().isIncognito());
+    }
+
+    /**
+     * @return The {@link android.view.View.OnClickListener} to override for the tab switcher
+     *         button.
+     */
+    View.OnClickListener getTabSwitcherButtonClickListener() {
+        return view -> setVisibility(!mContainerViewModel.get(IS_VISIBLE));
+    }
+
+    private void setVisibility(boolean isVisible) {
+        if (isVisible) mCoordinator.resetWithTabModel(mTabModelSelector.getCurrentModel());
+        mContainerViewModel.set(IS_VISIBLE, isVisible);
+    }
+
+    @Override
+    public boolean overviewVisible() {
+        return mContainerViewModel.get(IS_VISIBLE);
+    }
+
+    @Override
+    public void addOverviewModeObserver(OverviewModeObserver listener) {
+        mObservers.add(listener);
+    }
+
+    @Override
+    public void removeOverviewModeObserver(OverviewModeObserver listener) {
+        mObservers.remove(listener);
+    }
+
+    @Override
+    public void startedShowing() {
+        for (OverviewModeObserver observer : mObservers) {
+            observer.onOverviewModeStartedShowing(true);
+        }
+    }
+
+    @Override
+    public void finishedShowing() {
+        for (OverviewModeObserver observer : mObservers) {
+            observer.onOverviewModeFinishedShowing();
+        }
+    }
+
+    @Override
+    public void startedHiding() {
+        for (OverviewModeObserver observer : mObservers) {
+            observer.onOverviewModeStartedHiding(true, false);
+        }
+    }
+
+    @Override
+    public void finishedHiding() {
+        mCoordinator.resetWithTabModel(null);
+        for (OverviewModeObserver observer : mObservers) {
+            observer.onOverviewModeFinishedHiding();
+        }
+    }
+
+    /**
+     * Destroy any members that needs clean up.
+     */
+    public void destroy() {
+        mTabModelObserver.destroy();
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java
index 2987ca6..36efa28e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java
@@ -6,6 +6,7 @@
 
 import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO;
 import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE;
+import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER;
 
 import org.chromium.chrome.browser.util.ColorUtils;
 import org.chromium.ui.modelutil.PropertyKey;
@@ -29,6 +30,8 @@
         } else if (IS_INCOGNITO == propertyKey) {
             view.setBackgroundColor(
                     ColorUtils.getDefaultThemeColor(view.getResources(), model.get(IS_INCOGNITO)));
+        } else if (VISIBILITY_LISTENER == propertyKey) {
+            view.setVisibilityListener(model.get(VISIBILITY_LISTENER));
         }
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java
index 2639ca3..ae2a563 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java
@@ -4,8 +4,6 @@
 
 package org.chromium.chrome.browser.tasks.tab_list_ui;
 
-import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT;
-
 import android.content.Context;
 import android.support.v7.widget.GridLayoutManager;
 import android.view.LayoutInflater;
@@ -13,37 +11,27 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.compositor.CompositorViewHolder;
 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
-import org.chromium.chrome.browser.dependency_injection.ActivityScope;
-import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.lifecycle.Destroyable;
+import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.toolbar.ToolbarManager;
 import org.chromium.ui.modelutil.PropertyKey;
 import org.chromium.ui.modelutil.PropertyModel;
-import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
 import org.chromium.ui.modelutil.RecyclerViewAdapter;
 import org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase;
 
-import javax.inject.Inject;
-import javax.inject.Named;
-
 /**
  * Coordinator for showing a grid of tabs.
  */
-@ActivityScope
 public class TabGridCoordinator implements Destroyable {
     private static final int GRID_LAYOUT_SPAN_COUNT = 2;
 
-    private final PropertyModelChangeProcessor mContainerViewChangeProcessor;
     private final SimpleRecyclerViewMcpBase<PropertyModel, TabGridViewHolder, PropertyKey>
             mModelChangeProcessor;
     private final TabListMediator mMediator;
     private final TabListRecyclerView mRecyclerView;
-    private final ActivityLifecycleDispatcher mLifecycleDispatcher;
 
-    @Inject
-    TabGridCoordinator(@Named(ACTIVITY_CONTEXT) Context context,
-            ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager,
+    TabGridCoordinator(Context context, ToolbarManager toolbarManager,
             TabModelSelector tabModelSelector, TabContentManager tabContentManager,
             CompositorViewHolder compositorViewHolder) {
         TabListModel tabListModel = new TabListModel();
@@ -59,15 +47,24 @@
         mRecyclerView.setLayoutManager(new GridLayoutManager(context, GRID_LAYOUT_SPAN_COUNT));
         mRecyclerView.setHasFixedSize(true);
 
-        PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS);
-        mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(
-                containerViewModel, mRecyclerView, TabGridContainerViewBinder::bind);
+        mMediator = new TabListMediator(
+                tabListModel, context, toolbarManager, tabModelSelector, tabContentManager);
+    }
 
-        mMediator = new TabListMediator(containerViewModel, tabListModel, context, toolbarManager,
-                tabModelSelector, tabContentManager);
+    /**
+     * @return The container {@link android.support.v7.widget.RecyclerView} that is showing the tab
+     *         grid.
+     */
+    public TabListRecyclerView getContainerView() {
+        return mRecyclerView;
+    }
 
-        mLifecycleDispatcher = lifecycleDispatcher;
-        mLifecycleDispatcher.register(this);
+    /**
+     * Reset the tab grid with the given {@link TabModel}. Can be null.
+     * @param tabModel The current {@link TabModel} to show the tabs for in the grid.
+     */
+    public void resetWithTabModel(TabModel tabModel) {
+        mMediator.resetWithTabModel(tabModel);
     }
 
     /**
@@ -75,8 +72,6 @@
      */
     @Override
     public void destroy() {
-        mContainerViewChangeProcessor.destroy();
         mMediator.destroy();
-        mLifecycleDispatcher.unregister(this);
     }
 }
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java
index d57ac938..cc5de2e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java
@@ -14,5 +14,10 @@
     public static final PropertyModel.WritableBooleanPropertyKey IS_INCOGNITO =
             new PropertyModel.WritableBooleanPropertyKey();
 
-    public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO};
+    public static final PropertyModel
+            .WritableObjectPropertyKey<TabListRecyclerView.VisibilityListener> VISIBILITY_LISTENER =
+            new PropertyModel.WritableObjectPropertyKey<>();
+
+    public static final PropertyKey[] ALL_KEYS =
+            new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO, VISIBILITY_LISTENER};
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java
index 5dc7ca6..aecf30b3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java
@@ -4,9 +4,6 @@
 
 package org.chromium.chrome.browser.tasks.tab_list_ui;
 
-import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO;
-import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE;
-
 import android.content.Context;
 import android.graphics.Bitmap;
 
@@ -25,6 +22,8 @@
 import org.chromium.chrome.browser.toolbar.ToolbarManager;
 import org.chromium.ui.modelutil.PropertyModel;
 
+import java.util.ArrayList;
+
 /**
  * Mediator for business logic for the tab grid. This class should be initialized with a list of
  * tabs and a TabModel to observe for changes and should not have any logic around what the list
@@ -35,7 +34,6 @@
     private final int mFaviconSize;
     private final FaviconHelper mFaviconHelper = new FaviconHelper();
     private final TabListModel mModel;
-    private final PropertyModel mContainerViewModel;
     private final TabModelSelector mTabModelSelector;
     private final TabContentManager mTabContentManager;
 
@@ -45,9 +43,6 @@
             mTabModelSelector.getCurrentModel().setIndex(
                     TabModelUtils.getTabIndexById(mTabModelSelector.getCurrentModel(), tabId),
                     TabSelectionType.FROM_USER);
-            if (mTabModelSelector.getCurrentTabId() == tabId) {
-                mContainerViewModel.set(IS_VISIBLE, false);
-            }
         }
     };
 
@@ -85,7 +80,6 @@
     /**
      * Construct the Mediator with the given Models and observing hooks from the given
      * ChromeActivity.
-     * @param containerViewModel The {@link PropertyModel} to keep state about the container view.
      * @param model The Model to keep state about a list of {@link Tab}s.
      * @param context The context to use for accessing {@link android.content.res.Resources}
      * @param toolbarManager {@link ToolbarManager} to send any signals about overriding behavior.
@@ -93,9 +87,8 @@
      *                                                 the tabs concerned.
      * @param tabContentManager {@link TabContentManager} to provide screenshot related details.
      */
-    public TabListMediator(PropertyModel containerViewModel, TabListModel model, Context context,
-            ToolbarManager toolbarManager, TabModelSelector tabModelSelector,
-            TabContentManager tabContentManager) {
+    public TabListMediator(TabListModel model, Context context, ToolbarManager toolbarManager,
+            TabModelSelector tabModelSelector, TabContentManager tabContentManager) {
         mFaviconSize = context.getResources().getDimensionPixelSize(R.dimen.tab_grid_favicon_size);
 
         mTabModelSelector = tabModelSelector;
@@ -110,7 +103,6 @@
                     mModel.get(mModel.indexFromId(lastId)).set(TabProperties.IS_SELECTED, false);
                 }
                 mModel.get(mModel.indexFromId(tab.getId())).set(TabProperties.IS_SELECTED, true);
-                mContainerViewModel.set(IS_VISIBLE, false);
             }
 
             @Override
@@ -123,25 +115,16 @@
                 mModel.removeAt(mModel.indexFromId(tabId));
             }
         };
-
-        // TODO(yusufo): Move the calls below to a parent component, and change resetWithTabModel to
-        // take a List of Tabs, so that this class stays oblivious to switcher button related
-        // logistics. Also lazily initialize TabGridComponent on button click once there are two
-        // components.
-        mContainerViewModel = containerViewModel;
-        toolbarManager.overrideTabSwitcherBehavior(view
-                -> mContainerViewModel.set(IS_VISIBLE, !mContainerViewModel.get(IS_VISIBLE)),
-                null);
-
-        resetWithTabModel(mTabModelSelector.getCurrentModel());
     }
 
     /**
      * Initialize the component with a list of tabs to show in a grid.
      */
     public void resetWithTabModel(TabModel tabModel) {
-        mContainerViewModel.set(IS_INCOGNITO, tabModel.isIncognito());
-
+        mModel.set(new ArrayList<>());
+        if (tabModel == null) {
+            return;
+        }
         int selectedIndex = tabModel.index();
         for (int i = 0; i < tabModel.getCount(); i++) {
             addTabInfoToModel(tabModel.getTabAt(i), i == selectedIndex);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java
index b75ebb76..616556d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java
@@ -19,7 +19,7 @@
     /**
      * Convert the given tab ID to an index to match during partial updates.
      * @param tabId The tab ID to search for.
-     * @return The index within the model {@link org.chromium.chrome.browser.modelutil.SimpleList}.
+     * @return The index within the model {@link org.chromium.ui.modelutil.SimpleList}.
      */
     public int indexFromId(int tabId) {
         for (int i = 0; i < size(); i++) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java
index f1149a51..ae5213f3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java
@@ -21,14 +21,55 @@
 class TabListRecyclerView extends RecyclerView {
     public static final long BASE_ANIMATION_DURATION_MS = 218;
 
+    /**
+     * An interface to listen to visibility related changes on this {@link RecyclerView}.
+     */
+    interface VisibilityListener {
+        /**
+         * Called before the animation to show the tab list has started.
+         */
+        void startedShowing();
+
+        /**
+         * Called when the animation to show the tab list is finished.
+         */
+        void finishedShowing();
+
+        /**
+         * Called before the animation to hide the tab list has started.
+         */
+        void startedHiding();
+
+        /**
+         * Called when the animation to show the tab list is finished.
+         */
+        void finishedHiding();
+    }
+
     private ValueAnimator mFadeInAnimator;
     private ValueAnimator mFadeOutAnimator;
+    private VisibilityListener mListener;
 
+    /**
+     * Basic constructor to use during inflation from xml.
+     */
     public TabListRecyclerView(Context context, AttributeSet attributeSet) {
         super(context, attributeSet);
     }
 
+    /**
+     * Set the {@link VisibilityListener} that will listen on granular visibility events.
+     * @param listener The {@link VisibilityListener} to use.
+     */
+    void setVisibilityListener(VisibilityListener listener) {
+        mListener = listener;
+    }
+
+    /**
+     * Start showing the tab list.
+     */
     void startShowing() {
+        mListener.startedShowing();
         cancelAllAnimations();
         setAlpha(0);
         setVisibility(View.VISIBLE);
@@ -36,9 +77,19 @@
         mFadeInAnimator.setInterpolator(BakedBezierInterpolator.FADE_IN_CURVE);
         mFadeInAnimator.setDuration(BASE_ANIMATION_DURATION_MS);
         mFadeInAnimator.start();
+        mFadeInAnimator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mListener.finishedShowing();
+            }
+        });
     }
 
+    /**
+     * Start hiding the tab list.
+     */
     void startHiding() {
+        mListener.startedHiding();
         cancelAllAnimations();
         mFadeOutAnimator = ObjectAnimator.ofFloat(this, View.ALPHA, 0);
         mFadeOutAnimator.setInterpolator(BakedBezierInterpolator.FADE_OUT_CURVE);
@@ -47,6 +98,7 @@
             @Override
             public void onAnimationEnd(Animator animation) {
                 setVisibility(View.INVISIBLE);
+                mListener.finishedHiding();
             }
         });
         mFadeOutAnimator.start();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java
index 42601766..470f60c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java
@@ -45,7 +45,7 @@
     private boolean mHighlightingMenu;
     private PulseDrawable mHighlightDrawable;
 
-    private boolean mShowMenuBadge;
+    private boolean mSuppressAppMenuUpdateBadge;
     private AnimatorSet mMenuBadgeAnimatorSet;
     private boolean mIsMenuBadgeAnimationRunning;
 
@@ -82,17 +82,13 @@
     }
 
     /**
-     * Sets the update badge to visible if the update state requires it.
+     * Sets the update badge to visible.
      *
      * @param visible Whether the update badge should be visible. Always sets visibility to GONE
      *                if the update type does not require a badge.
      * TODO(crbug.com/865801): Clean this up when MenuButton and UpdateMenuItemHelper is MVCed.
      */
-    private void setUpdateBadgeVisibilityIfValidState(boolean visible) {
-        MenuButtonState buttonState = UpdateMenuItemHelper.getInstance().getUiState().buttonState;
-
-        visible &= buttonState != null;
-
+    private void setUpdateBadgeVisibility(boolean visible) {
         mUpdateBadgeView.setVisibility(visible ? View.VISIBLE : View.GONE);
         if (visible) updateImageResources();
         updateContentDescription(visible);
@@ -111,12 +107,43 @@
      * Show the update badge on the app menu button.
      * @param animate Whether to animate the showing of the update badge.
      */
-    public void showAppMenuUpdateBadge(boolean animate) {
-        if (mUpdateBadgeView == null) return;
-        mShowMenuBadge = true;
-        updateImageResources();
+    public void showAppMenuUpdateBadgeIfAvailable(boolean animate) {
+        if (mUpdateBadgeView == null || mMenuImageButton == null || mSuppressAppMenuUpdateBadge
+                || !isBadgeAvailable()) {
+            return;
+        }
 
-        setAppMenuUpdateBadgeToVisible(animate);
+        updateImageResources();
+        updateContentDescription(true);
+        if (!animate || mIsMenuBadgeAnimationRunning) {
+            setUpdateBadgeVisibility(true);
+            return;
+        }
+
+        // Set initial states.
+        mUpdateBadgeView.setAlpha(0.f);
+        mUpdateBadgeView.setVisibility(View.VISIBLE);
+
+        mMenuBadgeAnimatorSet = createShowUpdateBadgeAnimation(mMenuImageButton, mUpdateBadgeView);
+
+        mMenuBadgeAnimatorSet.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationStart(Animator animation) {
+                mIsMenuBadgeAnimationRunning = true;
+            }
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mIsMenuBadgeAnimationRunning = false;
+            }
+
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                mIsMenuBadgeAnimationRunning = false;
+            }
+        });
+
+        mMenuBadgeAnimatorSet.start();
     }
 
     /**
@@ -124,13 +151,11 @@
      * @param animate Whether to animate the hiding of the update badge.
      */
     public void removeAppMenuUpdateBadge(boolean animate) {
-        if (mUpdateBadgeView == null) return;
-        boolean wasShowingMenuBadge = mShowMenuBadge;
-        mShowMenuBadge = false;
+        if (mUpdateBadgeView == null || !isShowingAppMenuUpdateBadge()) return;
         updateContentDescription(false);
 
-        if (!animate || !wasShowingMenuBadge) {
-            setUpdateBadgeVisibilityIfValidState(false);
+        if (!animate) {
+            setUpdateBadgeVisibility(false);
             return;
         }
 
@@ -164,48 +189,27 @@
     }
 
     /**
+     * @param suppress Whether to prevent the update badge from being show. This is currently only
+     *                 used to prevent the badge from being shown in the tablet tab switcher.
+     */
+    public void setAppMenuUpdateBadgeSuppressed(boolean suppress) {
+        mSuppressAppMenuUpdateBadge = suppress;
+        if (mSuppressAppMenuUpdateBadge) {
+            removeAppMenuUpdateBadge(false);
+        } else {
+            showAppMenuUpdateBadgeIfAvailable(false);
+        }
+    }
+
+    /**
      * @return Whether the update badge is showing.
      */
     public boolean isShowingAppMenuUpdateBadge() {
         return mUpdateBadgeView.getVisibility() == View.VISIBLE;
     }
 
-    /**
-     * Sets the update badge visibility to VISIBLE and sets the menu button image to the badged
-     * bitmap.
-     */
-    private void setAppMenuUpdateBadgeToVisible(boolean animate) {
-        if (mUpdateBadgeView == null || mMenuImageButton == null) return;
-        updateContentDescription(true);
-        if (!animate || mIsMenuBadgeAnimationRunning) {
-            setUpdateBadgeVisibilityIfValidState(true);
-            return;
-        }
-
-        // Set initial states.
-        mUpdateBadgeView.setAlpha(0.f);
-        mUpdateBadgeView.setVisibility(View.VISIBLE);
-
-        mMenuBadgeAnimatorSet = createShowUpdateBadgeAnimation(mMenuImageButton, mUpdateBadgeView);
-
-        mMenuBadgeAnimatorSet.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                mIsMenuBadgeAnimationRunning = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mIsMenuBadgeAnimationRunning = false;
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mIsMenuBadgeAnimationRunning = false;
-            }
-        });
-
-        mMenuBadgeAnimatorSet.start();
+    private static boolean isBadgeAvailable() {
+        return UpdateMenuItemHelper.getInstance().getUiState().buttonState != null;
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 914e950..cc55ab0e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -114,6 +114,7 @@
 import org.chromium.ui.AsyncViewProvider;
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.base.PageTransition;
+import org.chromium.ui.widget.Toast;
 import org.chromium.ui.widget.ViewRectProvider;
 
 import java.lang.annotation.Retention;
@@ -779,6 +780,8 @@
                 mActivity.getActivityTabProvider(), homeButtonListener, searchAcceleratorListener,
                 shareButtonListener);
         if (mAppMenuButtonHelper != null) mAppMenuButtonHelper.setMenuShowsFromBottom(true);
+        Toast.setGlobalExtraYOffset(
+                mActivity.getResources().getDimensionPixelSize(R.dimen.bottom_toolbar_height));
     }
 
     /** Record that homepage button was used for IPH reasons */
@@ -1049,6 +1052,9 @@
         assert mInitializedWithNative;
 
         mToolbar.setTabSwitcherClickListener(newClickListener);
+        mOverviewModeBehavior.removeOverviewModeObserver(mOverviewModeObserver);
+        mOverviewModeBehavior = overviewModeBehavior;
+        mOverviewModeBehavior.addOverviewModeObserver(mOverviewModeObserver);
         if (mBottomToolbarCoordinator != null) {
             mBottomToolbarCoordinator.overrideTabSwitcherBehavior(
                     newClickListener, overviewModeBehavior);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java
index 3f5b91c..7ac1780 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java
@@ -151,7 +151,8 @@
      */
     public void overrideTabSwitcherBehavior(
             OnClickListener newClickListener, OverviewModeBehavior overviewModeBehavior) {
-        mBrowsingModeCoordinator.overrideTabSwitcherBehavior(newClickListener, null);
+        mBrowsingModeCoordinator.overrideTabSwitcherBehavior(
+                newClickListener, overviewModeBehavior);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java
index 54de0d12..c0dc643 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java
@@ -157,7 +157,7 @@
      * Show the update badge over the bottom toolbar's app menu.
      */
     public void showAppMenuUpdateBadge() {
-        mMenuButton.showAppMenuUpdateBadge(true);
+        mMenuButton.showAppMenuUpdateBadgeIfAvailable(true);
     }
 
     /**
@@ -198,6 +198,7 @@
     public void overrideTabSwitcherBehavior(
             OnClickListener newClickListener, OverviewModeBehavior overviewModeBehavior) {
         mTabSwitcherButtonCoordinator.setTabSwitcherListener(newClickListener);
+        mMediator.setOverviewModeBehavior(overviewModeBehavior);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
index 2ee9e23..afa8098 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
@@ -105,6 +105,9 @@
     }
 
     void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {
+        if (mOverviewModeBehavior != null) {
+            mOverviewModeBehavior.removeOverviewModeObserver(this);
+        }
         mOverviewModeBehavior = overviewModeBehavior;
         mOverviewModeBehavior.addOverviewModeObserver(this);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java
index 5da40aa0..890e5af 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java
@@ -93,7 +93,8 @@
             mNewTabButton.setOnClickListener(this);
         }
 
-        if (usingHorizontalTabSwitcher()
+        if ((usingHorizontalTabSwitcher()
+                    || FeatureUtilities.isGridTabSwitcherEnabled(getContext()))
                 && PrefServiceBridge.getInstance().isIncognitoModeEnabled()) {
             updateTabSwitchingElements(true);
         }
@@ -293,7 +294,8 @@
     }
 
     private int getToolbarColorForCurrentState() {
-        if (DeviceClassManager.enableAccessibilityLayout()) {
+        if (DeviceClassManager.enableAccessibilityLayout()
+                || FeatureUtilities.isGridTabSwitcherEnabled(getContext())) {
             int colorId = mIsIncognito ? R.color.incognito_modern_primary_color
                                        : R.color.modern_primary_color;
             return ApiCompatibilityUtils.getColor(getResources(), colorId);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
index 5c87dc8b..519589a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -757,7 +757,12 @@
 
     void showAppMenuUpdateBadge(boolean animate) {
         if (mMenuButtonWrapper == null) return;
-        mMenuButtonWrapper.showAppMenuUpdateBadge(animate);
+        mMenuButtonWrapper.showAppMenuUpdateBadgeIfAvailable(animate);
+    }
+
+    void setAppMenuUpdateBadgeSuppressed(boolean suppress) {
+        if (mMenuButtonWrapper == null) return;
+        mMenuButtonWrapper.setAppMenuUpdateBadgeSuppressed(suppress);
     }
 
     boolean isShowingAppMenuUpdateBadge() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
index 5814bb8..66aceff 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
@@ -79,7 +79,6 @@
 
     private NewTabPage mVisibleNtp;
 
-    private boolean mWasAppMenuUpdateBadgeShowing;
     /**
      * Constructs a ToolbarTablet object.
      * @param context The Context in which this View object is created.
@@ -467,13 +466,12 @@
             mForwardButton.setEnabled(false);
             mReloadButton.setEnabled(false);
             mLocationBar.getContainerView().setVisibility(View.INVISIBLE);
-            mWasAppMenuUpdateBadgeShowing = isShowingAppMenuUpdateBadge();
-            if (mWasAppMenuUpdateBadgeShowing) removeAppMenuUpdateBadge(false);
+            setAppMenuUpdateBadgeSuppressed(true);
         } else {
             mIsInTabSwitcherMode = false;
             mLocationBar.getContainerView().setVisibility(View.VISIBLE);
 
-            if (mWasAppMenuUpdateBadgeShowing) showAppMenuUpdateBadge(false);
+            setAppMenuUpdateBadgeSuppressed(false);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
index 583ce3be..b3137f8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -25,6 +25,7 @@
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.firstrun.FirstRunUtils;
 import org.chromium.chrome.browser.locale.LocaleManager;
 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
@@ -472,6 +473,18 @@
     }
 
     /**
+     * @param activityContext The context for the containing {@link android.app.Activity}.
+     * @return Whether the Grid Tab Switcher UI is enabled and available for use.
+     */
+    public static boolean isGridTabSwitcherEnabled(Context activityContext) {
+        // TODO(yusufo): AccessibilityLayout check should not be here and the flow should support
+        // changing that setting while Chrome is alive.
+        return !DeviceFormFactor.isNonMultiDisplayContextOnTablet(activityContext)
+                && !SysUtils.isLowEndDevice() && !DeviceClassManager.enableAccessibilityLayout()
+                && ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID);
+    }
+
+    /**
      * @return Whether this device is running Android Go. This is assumed when we're running Android
      * O or later and we're on a low-end device.
      */
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index f842104..96ae8d0 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -11,6 +11,7 @@
   "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java",
   "java/src/org/chromium/chrome/browser/ActivityTabProvider.java",
   "java/src/org/chromium/chrome/browser/ActivityTabTaskDescriptionHelper.java",
+  "java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java",
   "java/src/org/chromium/chrome/browser/ActivityTaskDescriptionIconGenerator.java",
   "java/src/org/chromium/chrome/browser/AfterStartupTaskUtils.java",
   "java/src/org/chromium/chrome/browser/AppHooks.java",
@@ -1596,6 +1597,8 @@
   "java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java",
   "java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java",
   "java/src/org/chromium/chrome/browser/tasks/TasksUma.java",
+  "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java",
+  "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java",
   "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java",
   "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java",
   "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewBinder.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java
index cb21477..41a4eb1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java
@@ -6,7 +6,6 @@
 
 import android.app.Notification;
 import android.app.NotificationChannel;
-import android.app.NotificationManager;
 import android.content.Context;
 import android.os.Build;
 import android.support.test.InstrumentationRegistry;
@@ -33,14 +32,13 @@
 public class ChromeNotificationBuilderTest {
     private static final int TEST_NOTIFICATION_ID = 101;
 
-    private NotificationManager mNotificationManager;
+    private NotificationManagerProxy mNotificationManager;
 
     @Before
     public void setUp() {
         Context context = InstrumentationRegistry.getTargetContext();
 
-        mNotificationManager =
-                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+        mNotificationManager = new NotificationManagerProxyImpl(context);
 
         // Don't rely on channels already being registered.
         clearNotificationChannels(mNotificationManager);
@@ -52,7 +50,7 @@
         mNotificationManager.cancelAll();
     }
 
-    private static void clearNotificationChannels(NotificationManager notificationManager) {
+    private static void clearNotificationChannels(NotificationManagerProxy notificationManager) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             for (NotificationChannel channel : notificationManager.getNotificationChannels()) {
                 if (!channel.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) {
@@ -72,7 +70,6 @@
         Notification notification = notificationBuilder.setContentTitle("Title")
                                             .setSmallIcon(R.drawable.ic_chrome)
                                             .build();
-
         mNotificationManager.notify(TEST_NOTIFICATION_ID, notification);
     }
 
@@ -89,4 +86,21 @@
 
         mNotificationManager.notify(TEST_NOTIFICATION_ID, notification);
     }
-}
\ No newline at end of file
+
+    @MediumTest
+    @Test
+    public void buildChromeNotification() {
+        ChromeNotificationBuilder builder =
+                NotificationBuilderFactory.createChromeNotificationBuilder(true,
+                        ChannelDefinitions.ChannelId.BROWSER, null,
+                        new NotificationMetadata(
+                                NotificationUmaTracker.SystemNotificationType.BROWSER_ACTIONS, null,
+                                TEST_NOTIFICATION_ID));
+
+        ChromeNotification notification = builder.setContentTitle("Title")
+                                                  .setSmallIcon(R.drawable.ic_chrome)
+                                                  .buildChromeNotification();
+
+        mNotificationManager.notify(notification);
+    }
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java
index 61797bec..68953da 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java
@@ -9,6 +9,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.Build;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.MediumTest;
 import android.support.test.uiautomator.By;
@@ -24,7 +25,7 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisabledTest;
+import org.chromium.base.test.util.MinAndroidSdkLevel;
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeSwitches;
@@ -99,7 +100,7 @@
     @Test
     @MediumTest
     @RetryOnFailure
-    @DisabledTest
+    @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
     public void testContentIntentInterception() {
         // Send notification.
         NotificationManager notificationManager =
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index f24f352..72fd468 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -763,6 +763,8 @@
     "memory_details_win.cc",
     "metrics/antivirus_metrics_provider_win.cc",
     "metrics/antivirus_metrics_provider_win.h",
+    "metrics/bluetooth_available_utility.cc",
+    "metrics/bluetooth_available_utility.h",
     "metrics/browser_window_histogram_helper.cc",
     "metrics/browser_window_histogram_helper.h",
     "metrics/chrome_browser_main_extra_parts_metrics.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index ed91404..3fd72ca1 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1317,10 +1317,6 @@
      flag_descriptions::kHyperlinkAuditingDescription, kOsAll,
      SINGLE_DISABLE_VALUE_TYPE(switches::kNoPings)},
 #if defined(OS_ANDROID)
-    {"contextual-search", flag_descriptions::kContextualSearchName,
-     flag_descriptions::kContextualSearchDescription, kOsAndroid,
-     ENABLE_DISABLE_VALUE_TYPE(switches::kEnableContextualSearch,
-                               switches::kDisableContextualSearch)},
     {"contextual-search-ml-tap-suppression",
      flag_descriptions::kContextualSearchMlTapSuppressionName,
      flag_descriptions::kContextualSearchMlTapSuppressionDescription,
@@ -3650,13 +3646,6 @@
      flag_descriptions::kEnableLazyFrameLoadingDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kLazyFrameLoading)},
 
-#if defined(OS_CHROMEOS)
-    {"enable-settings-shortcut-search",
-     flag_descriptions::kEnableSettingsShortcutSearchName,
-     flag_descriptions::kEnableSettingsShortcutSearchDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(app_list_features::kEnableSettingsShortcutSearch)},
-#endif  // OS_CHROMEOS
-
     {"autofill-cache-query-responses",
      flag_descriptions::kAutofillCacheQueryResponsesName,
      flag_descriptions::kAutofillCacheQueryResponsesDescription, kOsAll,
@@ -4312,6 +4301,11 @@
      FEATURE_VALUE_TYPE(features::kWebContentsOcclusion)},
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
 
+    {"enable-webrtc-hw-vp9-encoding",
+     flag_descriptions::kWebrtcHwVP9EncodingName,
+     flag_descriptions::kWebrtcHwVP9EncodingDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(features::kWebRtcHWVP9Encoding)},
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 8b8b370..50199ca8 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -2214,6 +2214,7 @@
     "child_accounts/usage_time_limit_processor_unittest.cc",
     "child_accounts/usage_time_state_notifier_unittest.cc",
     "crostini/crostini_manager_unittest.cc",
+    "crostini/crostini_package_service_unittest.cc",
     "crostini/crostini_share_path_unittest.cc",
     "crostini/crosvm_metrics_unittest.cc",
     "crostini/crosvm_process_list_unittest.cc",
diff --git a/chrome/browser/chromeos/crostini/crostini_manager.cc b/chrome/browser/chromeos/crostini/crostini_manager.cc
index 1cddd80..5074217 100644
--- a/chrome/browser/chromeos/crostini/crostini_manager.cc
+++ b/chrome/browser/chromeos/crostini/crostini_manager.cc
@@ -352,6 +352,13 @@
 
   void SetUpLxdContainerUserFinished(CrostiniResult result) {
     DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+    // The restarter shouldn't outlive the CrostiniManager but it can when
+    // skip_restart_for_testing is set.
+    if (!crostini_manager_) {
+      LOG(ERROR) << "CrostiniManager deleted";
+      return;
+    }
+
     // Tell observers.
     for (auto& observer : observer_list_) {
       observer.OnContainerSetup(result);
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service.cc b/chrome/browser/chromeos/crostini/crostini_package_service.cc
index c9ca0c63..2ee85530 100644
--- a/chrome/browser/chromeos/crostini/crostini_package_service.cc
+++ b/chrome/browser/chromeos/crostini/crostini_package_service.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/no_destructor.h"
+#include "base/stl_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
@@ -117,6 +118,11 @@
   manager->RemoveLinuxPackageOperationProgressObserver(this);
 }
 
+void CrostiniPackageService::SetNotificationStateChangeCallbackForTesting(
+    StateChangeCallback state_change_callback) {
+  testing_state_change_callback_ = std::move(state_change_callback);
+}
+
 void CrostiniPackageService::NotificationCompleted(
     CrostiniPackageNotification* notification) {
   for (auto it = finished_notifications_.begin();
@@ -147,6 +153,9 @@
     const std::string& container_name,
     const std::string& package_path,
     CrostiniManager::InstallLinuxPackageCallback callback) {
+  const ContainerIdentifier container_id(vm_name, container_name);
+  containers_with_pending_installs_.insert(container_id);
+
   CrostiniManager::GetForProfile(profile_)->InstallLinuxPackage(
       vm_name, container_name, package_path,
       base::BindOnce(&CrostiniPackageService::OnInstallLinuxPackage,
@@ -213,8 +222,8 @@
 
 bool CrostiniPackageService::ContainerHasRunningOperation(
     const ContainerIdentifier& container_id) const {
-  return running_notifications_.find(container_id) !=
-         running_notifications_.end();
+  return base::ContainsKey(running_notifications_, container_id) ||
+         base::ContainsKey(containers_with_pending_installs_, container_id);
 }
 
 void CrostiniPackageService::CreateRunningNotification(
@@ -279,6 +288,9 @@
       StartQueuedUninstall(container_id);
     }
   }
+  if (testing_state_change_callback_) {
+    testing_state_change_callback_.Run(status);
+  }
 }
 
 void CrostiniPackageService::OnGetLinuxPackageInfo(
@@ -295,9 +307,18 @@
     CrostiniManager::InstallLinuxPackageCallback callback,
     CrostiniResult result) {
   std::move(callback).Run(result);
-  if (result != CrostiniResult::SUCCESS)
-    return;
   const ContainerIdentifier container_id(vm_name, container_name);
+  containers_with_pending_installs_.erase(container_id);
+  if (result != CrostiniResult::SUCCESS) {
+    // We never show a notification for this failed install, so this is our only
+    // chance to kick off uninstalled queued behind the install.
+    auto queued_iter = queued_uninstalls_.find(container_id);
+    if (queued_iter != queued_uninstalls_.end() &&
+        !queued_iter->second.empty()) {
+      StartQueuedUninstall(container_id);
+    }
+    return;
+  }
   CreateRunningNotification(
       container_id,
       CrostiniPackageNotification::NotificationType::PACKAGE_INSTALL,
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service.h b/chrome/browser/chromeos/crostini/crostini_package_service.h
index 749e5ad..9ee6b49 100644
--- a/chrome/browser/chromeos/crostini/crostini_package_service.h
+++ b/chrome/browser/chromeos/crostini/crostini_package_service.h
@@ -8,10 +8,12 @@
 #include <map>
 #include <memory>
 #include <queue>
+#include <set>
 #include <string>
 #include <utility>
 #include <vector>
 
+#include "base/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/crostini/crostini_manager.h"
 #include "chrome/browser/chromeos/crostini/crostini_package_notification.h"
@@ -24,11 +26,19 @@
 class CrostiniPackageService : public KeyedService,
                                public LinuxPackageOperationProgressObserver {
  public:
+  using StateChangeCallback =
+      base::RepeatingCallback<void(PackageOperationStatus)>;
+
   static CrostiniPackageService* GetForProfile(Profile* profile);
 
   explicit CrostiniPackageService(Profile* profile);
   ~CrostiniPackageService() override;
 
+  // For testing: Set a callback that will be called each time a notification
+  // is set to a new state.
+  void SetNotificationStateChangeCallbackForTesting(
+      StateChangeCallback state_change_callback);
+
   // KeyedService:
   void Shutdown() override;
 
@@ -147,6 +157,11 @@
   std::map<ContainerIdentifier, std::unique_ptr<CrostiniPackageNotification>>
       running_notifications_;
 
+  // Containers that have an install waiting for its initial response. We don't
+  // display notifications for these, but they still need to cause uninstalls
+  // to queue.
+  std::set<ContainerIdentifier> containers_with_pending_installs_;
+
   // Uninstalls we want to run when the current one is done.
   std::map<ContainerIdentifier, std::queue<QueuedUninstall>> queued_uninstalls_;
 
@@ -156,6 +171,9 @@
   std::vector<std::unique_ptr<CrostiniPackageNotification>>
       finished_notifications_;
 
+  // Called each time a notification is set to a new state.
+  StateChangeCallback testing_state_change_callback_;
+
   int next_notification_id_ = 0;
 
   base::WeakPtrFactory<CrostiniPackageService> weak_ptr_factory_;
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc b/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc
new file mode 100644
index 0000000..26a03498
--- /dev/null
+++ b/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc
@@ -0,0 +1,1803 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/crostini/crostini_package_service.h"
+
+#include <memory>
+#include <string>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/task/post_task.h"
+#include "base/threading/platform_thread.h"
+#include "chrome/browser/chromeos/crostini/crostini_registry_service.h"
+#include "chrome/browser/chromeos/crostini/crostini_registry_service_factory.h"
+#include "chrome/browser/chromeos/crostini/crostini_test_helper.h"
+#include "chrome/browser/chromeos/crostini/crostini_util.h"
+#include "chrome/browser/notifications/notification_display_service_factory.h"
+#include "chrome/browser/notifications/notification_display_service_tester.h"
+#include "chrome/grit/generated_resources.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chromeos/dbus/cros_disks_client.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/fake_cicerone_client.h"
+#include "chromeos/dbus/vm_applications/apps.pb.h"
+#include "chromeos/disks/disk_mount_manager.h"
+#include "chromeos/disks/mock_disk_mount_manager.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace crostini {
+
+namespace {
+
+using ::chromeos::DBusMethodCallback;
+using ::chromeos::DBusThreadManager;
+using ::chromeos::FakeCiceroneClient;
+using ::chromeos::disks::MockDiskMountManager;
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::IsEmpty;
+using ::testing::MakeMatcher;
+using ::testing::Matcher;
+using ::testing::MatcherInterface;
+using ::testing::MatchResultListener;
+using ::testing::UnorderedElementsAre;
+using ::vm_tools::cicerone::InstallLinuxPackageProgressSignal;
+using ::vm_tools::cicerone::InstallLinuxPackageRequest;
+using ::vm_tools::cicerone::InstallLinuxPackageResponse;
+using ::vm_tools::cicerone::LinuxPackageInfoRequest;
+using ::vm_tools::cicerone::LinuxPackageInfoResponse;
+using ::vm_tools::cicerone::UninstallPackageOwningFileRequest;
+using ::vm_tools::cicerone::UninstallPackageOwningFileResponse;
+using ::vm_tools::cicerone::UninstallPackageProgressSignal;
+
+// IDs, etc of apps that are always registered during tests.
+// These are on the default VM / default container.
+constexpr char kDefaultAppFileId[] = "default_file_id";
+constexpr char kDefaultAppName[] = "The Default";
+constexpr char kSecondAppFileId[] = "second_file_id";
+constexpr char kSecondAppName[] = "Another Fine App";
+constexpr char kThirdAppFileId[] = "third_file_id";
+constexpr char kThirdAppName[] = "Yet Another App";
+// Different VM name, but container name is the default.
+constexpr char kDifferentVmAppFileId[] = "different_vm_app";
+constexpr char kDifferentVmAppName[] = "I'm in a VM!";
+constexpr char kDifferentVmApp2FileId[] = "different_vm_app_2";
+constexpr char kDifferentVmApp2Name[] = "I'm in a VM also";
+constexpr char kDifferentVmVmName[] = "second_vm_name";
+// Default VM name, but container name is different.
+constexpr char kDifferentContainerAppFileId[] = "different_container_app";
+constexpr char kDifferentContainerAppName[] =
+    "Just Over The Container Boundary";
+constexpr char kDifferentContainerApp2FileId[] = "different_container_app_2";
+constexpr char kDifferentContainerApp2Name[] = "Severe Lack of Containers";
+constexpr char kDifferentContainerContainerName[] = "second_container_name";
+constexpr char kPackageFilePath[] = "/tmp/nethack.deb";
+
+// Callback for RunUntilUninstallRequestMade.
+void CaptureUninstallRequestParametersAndQuitLoop(
+    base::RepeatingClosure quit_closure,
+    UninstallPackageOwningFileRequest* request_output,
+    DBusMethodCallback<UninstallPackageOwningFileResponse>* callback_output,
+    const UninstallPackageOwningFileRequest& request_input,
+    DBusMethodCallback<UninstallPackageOwningFileResponse> callback_input) {
+  *request_output = request_input;
+  if (callback_output != nullptr) {
+    *callback_output = std::move(callback_input);
+  }
+  std::move(quit_closure).Run();
+}
+
+// Run until |fake_cicerone_client_|'s UninstallPackageOwningFile is called.
+// |request| and |callback| are filled in with the parameters to
+// CiceroneClient::UninstallPackageOwningFile.
+void RunUntilUninstallRequestMade(
+    FakeCiceroneClient* fake_cicerone_client,
+    UninstallPackageOwningFileRequest* request,
+    DBusMethodCallback<UninstallPackageOwningFileResponse>* callback) {
+  base::RunLoop run_loop;
+  fake_cicerone_client->SetOnUninstallPackageOwningFileCallback(
+      base::BindRepeating(&CaptureUninstallRequestParametersAndQuitLoop,
+                          run_loop.QuitClosure(), base::Unretained(request),
+                          base::Unretained(callback)));
+  run_loop.Run();
+
+  // Callback isn't valid after end of function.
+  fake_cicerone_client->SetOnUninstallPackageOwningFileCallback(
+      base::NullCallback());
+}
+
+// Callback used for InstallLinuxPackage
+void RecordInstallResult(CrostiniResult* record_location,
+                         CrostiniResult result) {
+  *record_location = result;
+}
+
+// Callback used for GetLinuxPackageInfo.
+void RecordPackageInfoResult(LinuxPackageInfo* record_location,
+                             const LinuxPackageInfo& result) {
+  *record_location = result;
+}
+
+class CrostiniPackageServiceTest : public testing::Test {
+ public:
+  CrostiniPackageServiceTest()
+      : kDefaultAppId(CrostiniTestHelper::GenerateAppId(kDefaultAppFileId)),
+        kSecondAppId(CrostiniTestHelper::GenerateAppId(kSecondAppFileId)),
+        kThirdAppId(CrostiniTestHelper::GenerateAppId(kThirdAppFileId)),
+        kDifferentVmAppId(
+            CrostiniTestHelper::GenerateAppId(kDifferentVmAppFileId,
+                                              kDifferentVmVmName,
+                                              kCrostiniDefaultContainerName)),
+        kDifferentVmApp2Id(
+            CrostiniTestHelper::GenerateAppId(kDifferentVmApp2FileId,
+                                              kDifferentVmVmName,
+                                              kCrostiniDefaultContainerName)),
+        kDifferentContainerAppId(CrostiniTestHelper::GenerateAppId(
+            kDifferentContainerAppFileId,
+            kCrostiniDefaultVmName,
+            kDifferentContainerContainerName)),
+        kDifferentContainerApp2Id(CrostiniTestHelper::GenerateAppId(
+            kDifferentContainerApp2FileId,
+            kCrostiniDefaultVmName,
+            kDifferentContainerContainerName)) {}
+
+  void SetUp() override {
+    DBusThreadManager::Initialize();
+    fake_cicerone_client_ = static_cast<FakeCiceroneClient*>(
+        DBusThreadManager::Get()->GetCiceroneClient());
+    ASSERT_TRUE(fake_cicerone_client_);
+
+    mock_disk_mount_manager_ = new MockDiskMountManager;
+    ON_CALL(*mock_disk_mount_manager_, MountPath(_, _, _, _, _, _))
+        .WillByDefault(Invoke(
+            this,
+            &CrostiniPackageServiceTest::HandleDiskMountManagerMountPath));
+    chromeos::disks::DiskMountManager::InitializeForTesting(
+        mock_disk_mount_manager_);
+    test_browser_thread_bundle_ =
+        std::make_unique<content::TestBrowserThreadBundle>(
+            base::test::ScopedTaskEnvironment::MainThreadType::UI,
+            base::test::ScopedTaskEnvironment::ExecutionMode::ASYNC,
+            content::TestBrowserThreadBundle::REAL_IO_THREAD);
+    profile_ = std::make_unique<TestingProfile>();
+    crostini_test_helper_ =
+        std::make_unique<CrostiniTestHelper>(profile_.get());
+    notification_display_service_tester_ =
+        std::make_unique<NotificationDisplayServiceTester>(profile_.get());
+    notification_display_service_ =
+        static_cast<StubNotificationDisplayService*>(
+            NotificationDisplayServiceFactory::GetForProfile(profile_.get()));
+    ASSERT_TRUE(notification_display_service_);
+    service_ = std::make_unique<CrostiniPackageService>(profile_.get());
+
+    CrostiniManager::GetForProfile(profile_.get())
+        ->set_skip_restart_for_testing();
+
+    CreateDefaultAppRegistration();
+    CreateSecondAppRegistration();
+    CreateThirdAppRegistration();
+    CreateDifferentVmAppRegistration();
+    CreateDifferentContainerAppRegistration();
+  }
+
+  void TearDown() override {
+    service_.reset();
+    notification_display_service_tester_.reset();
+    crostini_test_helper_.reset();
+    profile_.reset();
+    test_browser_thread_bundle_.reset();
+    chromeos::disks::DiskMountManager::Shutdown();
+    mock_disk_mount_manager_ = nullptr;  // Destroyed in Shutdown()
+    DBusThreadManager::Shutdown();
+  }
+
+ protected:
+  const std::string kDefaultAppId;  // App_id for app with kDefaultAppFileId.
+  const std::string kSecondAppId;   // App_id for app with kSecondAppFileId.
+  const std::string kThirdAppId;    // App_id for app with kThirdAppFileId.
+  const std::string kDifferentVmAppId;          // App_id for app with
+                                                // kDifferentVmAppFileId.
+  const std::string kDifferentVmApp2Id;         // App_id for app with
+                                                // kDifferentVmApp2FileId.
+  const std::string kDifferentContainerAppId;   // App_id for app with
+                                                // kDifferentContainerAppFileId.
+  const std::string kDifferentContainerApp2Id;  // App_id for app with
+                                                // kDifferentContainerApp2FileId
+
+  // Called when our MockDiskMountManager has its MountPath called. Needed so
+  // that CrostiniManager::CrostiniRestarter::OnMountEvent gets called properly
+  // after CrostiniManager::CrostiniRestarter::GetContainerSshKeysFinished.
+  void HandleDiskMountManagerMountPath(
+      const std::string& source_path,
+      const std::string& source_format,
+      const std::string& mount_label,
+      const std::vector<std::string>& mount_options,
+      chromeos::MountType type,
+      chromeos::MountAccessMode access_mode) {
+    if (mock_disk_mount_manager_) {
+      chromeos::disks::DiskMountManager::MountPointInfo info(
+          source_path, "/tmp/fake_mount_path", type,
+          chromeos::disks::MOUNT_CONDITION_NONE);
+      base::PostTaskWithTraits(
+          FROM_HERE, {content::BrowserThread::UI},
+          base::BindOnce(&MockDiskMountManager::NotifyMountEvent,
+                         base::Unretained(mock_disk_mount_manager_),
+                         chromeos::disks::DiskMountManager::MOUNTING,
+                         chromeos::MOUNT_ERROR_NONE, info));
+    }
+  }
+
+  UninstallPackageProgressSignal MakeUninstallSignal(
+      const UninstallPackageOwningFileRequest& request) {
+    UninstallPackageProgressSignal signal;
+    signal.set_vm_name(request.vm_name());
+    signal.set_container_name(request.container_name());
+    signal.set_owner_id(request.owner_id());
+    return signal;
+  }
+
+  InstallLinuxPackageProgressSignal MakeInstallSignal(
+      const InstallLinuxPackageRequest& request) {
+    InstallLinuxPackageProgressSignal signal;
+    signal.set_vm_name(request.vm_name());
+    signal.set_container_name(request.container_name());
+    signal.set_owner_id(request.owner_id());
+    return signal;
+  }
+
+  // Closes the notification as if the user had clicked 'close'.
+  void CloseNotification(const message_center::Notification& notification) {
+    notification_display_service_->RemoveNotification(
+        NotificationHandler::Type::TRANSIENT, notification.id(),
+        true /*by_user*/, false /*silent*/);
+  }
+
+  // Start an uninstall and then sent a single uninstall signal with the given
+  // status and (optional) progress. If |request_out| is not nullptr, the
+  // request sent by the service will be copied to |*request_out|.
+  void StartAndSignalUninstall(
+      UninstallPackageProgressSignal::Status signal_status,
+      int progress_percent = 0,
+      const char* const expected_desktop_file_id = kDefaultAppFileId,
+      UninstallPackageOwningFileRequest* request_out = nullptr) {
+    UninstallPackageOwningFileRequest request;
+    DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+    RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+    EXPECT_EQ(request.desktop_file_id(), expected_desktop_file_id);
+
+    // It's illegal to send a signal unless the response was STARTED. So assume
+    // that any test calling this function wants us to give a STARTED response.
+    UninstallPackageOwningFileResponse response;
+    response.set_status(UninstallPackageOwningFileResponse::STARTED);
+    std::move(callback).Run(response);
+
+    UninstallPackageProgressSignal signal = MakeUninstallSignal(request);
+    signal.set_status(signal_status);
+    switch (signal_status) {
+      case UninstallPackageProgressSignal::UNINSTALLING:
+        signal.set_progress_percent(progress_percent);
+        break;
+      case UninstallPackageProgressSignal::FAILED:
+        signal.set_failure_details("Oh no not again");
+        break;
+      case UninstallPackageProgressSignal::SUCCEEDED:
+        break;
+      default:
+        NOTREACHED();
+    }
+    fake_cicerone_client_->UninstallPackageProgress(signal);
+
+    if (request_out != nullptr) {
+      *request_out = request;
+    }
+  }
+
+  // Start an install and then sent a single install signal with the given
+  // status and (optional) progress.
+  void StartAndSignalInstall(
+      InstallLinuxPackageProgressSignal::Status signal_status,
+      int progress_percent = 0) {
+    base::RunLoop().RunUntilIdle();
+
+    InstallLinuxPackageProgressSignal signal = MakeInstallSignal(
+        fake_cicerone_client_->get_most_recent_install_linux_package_request());
+    signal.set_status(signal_status);
+    switch (signal_status) {
+      case InstallLinuxPackageProgressSignal::DOWNLOADING:
+      case InstallLinuxPackageProgressSignal::INSTALLING:
+        signal.set_progress_percent(progress_percent);
+        break;
+
+      case InstallLinuxPackageProgressSignal::FAILED:
+        signal.set_failure_details("Wouldn't be prudent");
+        break;
+
+      case InstallLinuxPackageProgressSignal::SUCCEEDED:
+        break;
+
+      default:
+        NOTREACHED();
+    }
+    fake_cicerone_client_->InstallLinuxPackageProgress(signal);
+  }
+
+  // Owned by DBusThreadManager
+  FakeCiceroneClient* fake_cicerone_client_ = nullptr;
+
+  // Owned by chromeos::disks::DiskMountManager
+  MockDiskMountManager* mock_disk_mount_manager_ = nullptr;
+
+  std::unique_ptr<content::TestBrowserThreadBundle> test_browser_thread_bundle_;
+  std::unique_ptr<TestingProfile> profile_;
+  std::unique_ptr<CrostiniTestHelper> crostini_test_helper_;
+  std::unique_ptr<NotificationDisplayServiceTester>
+      notification_display_service_tester_;
+  StubNotificationDisplayService* notification_display_service_;
+  std::unique_ptr<CrostiniPackageService> service_;
+
+ private:
+  // Helper to set up an App proto with a single name.
+  vm_tools::apps::App BasicApp(const std::string& desktop_file_id,
+                               const std::string& name,
+                               const std::string& package_id) {
+    vm_tools::apps::App app;
+    app.set_desktop_file_id(desktop_file_id);
+    app.mutable_name()->add_values()->set_value(name);
+    app.set_no_display(false);
+    app.set_package_id(package_id);
+    return app;
+  }
+
+  // Create a registration in CrostiniRegistryService for an app with app_id
+  // kDefaultAppId and desktop file ID kDefaultAppFileId.
+  void CreateDefaultAppRegistration() {
+    auto app = BasicApp(kDefaultAppFileId, kDefaultAppName, "123-thing");
+    crostini_test_helper_->AddApp(app);
+  }
+
+  // Create a registration in CrostiniRegistryService for an app with app_id
+  // kSecondAppId and desktop file ID kSecondAppFileId.
+  void CreateSecondAppRegistration() {
+    auto app = BasicApp(kSecondAppFileId, kSecondAppName, "abc-another");
+    crostini_test_helper_->AddApp(app);
+  }
+
+  // Create a registration in CrostiniRegistryService for an app with app_id
+  // kThirdAppId and desktop file ID kThirdAppFileId.
+  void CreateThirdAppRegistration() {
+    auto app = BasicApp(kThirdAppFileId, kThirdAppName, "yanpi");
+    crostini_test_helper_->AddApp(app);
+  }
+
+  // Create a registration in CrostiniRegistryService for apps with app_id
+  // kDifferentVmAppId and kDifferentVmApp2Id inside kDifferentVmVmName.
+  void CreateDifferentVmAppRegistration() {
+    // CrostiniTestHelper doesn't directly allow apps to be added for VMs other
+    // than the default VM.
+    vm_tools::apps::ApplicationList app_list;
+    app_list.set_vm_name(kDifferentVmVmName);
+    app_list.set_container_name(kCrostiniDefaultContainerName);
+    *app_list.add_apps() =
+        BasicApp(kDifferentVmAppFileId, kDifferentVmAppName, "pack5");
+    *app_list.add_apps() =
+        BasicApp(kDifferentVmApp2FileId, kDifferentVmApp2Name, "pack5-2");
+    crostini::CrostiniRegistryServiceFactory::GetForProfile(profile_.get())
+        ->UpdateApplicationList(app_list);
+  }
+
+  // Create a registration in CrostiniRegistryService for apps with app_id
+  // kDifferentContainerAppId and kDifferentContainerApp2Id inside
+  // kDifferentContainerContainerName.
+  void CreateDifferentContainerAppRegistration() {
+    // CrostiniTestHelper doesn't directly allow apps to be added for containers
+    // other than the default container.
+    vm_tools::apps::ApplicationList app_list;
+    app_list.set_vm_name(kCrostiniDefaultVmName);
+    app_list.set_container_name(kDifferentContainerContainerName);
+    *app_list.add_apps() = BasicApp(kDifferentContainerAppFileId,
+                                    kDifferentContainerAppName, "pack7");
+    *app_list.add_apps() = BasicApp(kDifferentContainerApp2FileId,
+                                    kDifferentContainerApp2Name, "pack7-2");
+    crostini::CrostiniRegistryServiceFactory::GetForProfile(profile_.get())
+        ->UpdateApplicationList(app_list);
+  }
+};
+
+// A way of referring to one of the various app ids in parameters.
+enum KnownApp {
+  DEFAULT_APP,
+  SECOND_APP,
+  THIRD_APP,
+  DIFFERENT_VM,
+  DIFFERENT_VM_2,
+  DIFFERENT_CONTAINER,
+  DIFFERENT_CONTAINER_2
+};
+
+// Returns the app name for one of the known apps.
+base::string16 GetAppName(KnownApp app) {
+  switch (app) {
+    case DEFAULT_APP:
+      return base::ASCIIToUTF16(kDefaultAppName);
+    case SECOND_APP:
+      return base::ASCIIToUTF16(kSecondAppName);
+    case THIRD_APP:
+      return base::ASCIIToUTF16(kThirdAppName);
+    case DIFFERENT_VM:
+      return base::ASCIIToUTF16(kDifferentVmAppName);
+    case DIFFERENT_VM_2:
+      return base::ASCIIToUTF16(kDifferentVmApp2Name);
+    case DIFFERENT_CONTAINER:
+      return base::ASCIIToUTF16(kDifferentContainerAppName);
+    case DIFFERENT_CONTAINER_2:
+      return base::ASCIIToUTF16(kDifferentContainerApp2Name);
+    default:
+      NOTREACHED();
+  }
+}
+
+// This is a wrapper around message_center::Notification, allowing us to print
+// them nicely. Otherwise, UnorderedElementsAre has failures that look like
+// Actual: { 680-byte object <68-98 31-13 AC-7F 00-00 00-00 00-00 AB-AB AB-AB
+//           80-AC 97-F1 06-23 00-00 1C-00 00-00 00-00 00-00 20-00 00-00 00-00
+//           00-80 80-49 9F-F1 06-23 00-00 0B-00 00-00 00-00 00-00 10-00 00-00
+//           00-00 00-80 ... 00-00 00-00 00-00 00-00 D2-67 19-FF 00-00 00-00
+//           00-75 59-F1 00-00 00-00 03-00 00-00 AB-AB AB-AB E0-40 92-F1 06-23
+//           00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00
+//           00-00 00-00> }
+class PrintableNotification {
+ public:
+  explicit PrintableNotification(const message_center::Notification& base)
+      : display_source_(base.display_source()),
+        title_(base.title()),
+        message_(base.message()),
+        progress_(base.progress()) {}
+
+  const base::string16& display_source() const { return display_source_; }
+  const base::string16& title() const { return title_; }
+  const base::string16& message() const { return message_; }
+  int progress() const { return progress_; }
+
+ private:
+  const base::string16 display_source_;
+  const base::string16 title_;
+  const base::string16 message_;
+  const int progress_;
+};
+
+std::ostream& operator<<(std::ostream& os,
+                         const PrintableNotification& notification) {
+  os << "source: \"" << notification.display_source() << "\", title: \""
+     << notification.title() << "\", message: \"" << notification.message()
+     << "\", progress: " << notification.progress();
+  return os;
+}
+
+// Short-named conversion functions to avoid adding more noise than necessary
+// to EXPECT_THAT calls.
+PrintableNotification Printable(const message_center::Notification& base) {
+  return PrintableNotification(base);
+}
+
+std::vector<PrintableNotification> Printable(
+    const std::vector<message_center::Notification>& base) {
+  std::vector<PrintableNotification> result;
+  result.reserve(base.size());
+  for (const message_center::Notification& base_notification : base) {
+    result.push_back(PrintableNotification(base_notification));
+  }
+  return result;
+}
+
+class NotificationMatcher : public MatcherInterface<PrintableNotification> {
+ public:
+  NotificationMatcher(const base::string16& expected_source,
+                      const base::string16& expected_title,
+                      const base::string16& expected_message)
+      : expected_source_(expected_source),
+        expected_title_(expected_title),
+        check_message_(true),
+        expected_message_(expected_message),
+        check_progress_(false),
+        expected_progress_(-1) {}
+  NotificationMatcher(const base::string16& expected_source,
+                      const base::string16& expected_title,
+                      int expected_progress)
+      : expected_source_(expected_source),
+        expected_title_(expected_title),
+        check_message_(false),
+        expected_message_(),
+        check_progress_(true),
+        expected_progress_(expected_progress) {}
+
+  bool MatchAndExplain(PrintableNotification notification,
+                       MatchResultListener* listener) const override {
+    bool has_mismatch = false;
+    if (notification.display_source() != expected_source_) {
+      *listener << "notification source: " << notification.display_source()
+                << "\ndoes not equal expected source: " << expected_source_;
+      has_mismatch = true;
+    }
+    if (notification.title() != expected_title_) {
+      if (has_mismatch) {
+        *listener << "\nand\n";
+      }
+      *listener << "notification title: " << notification.title()
+                << "\ndoes not equal expected title: " << expected_title_;
+      has_mismatch = true;
+    }
+    if (check_message_ && (notification.message() != expected_message_)) {
+      if (has_mismatch) {
+        *listener << "\nand\n";
+      }
+      *listener << "notification message: " << notification.message()
+                << "\ndoes not equal expected message: " << expected_message_;
+      has_mismatch = true;
+    }
+    if (check_progress_ && (notification.progress() != expected_progress_)) {
+      if (has_mismatch) {
+        *listener << "\nand\n";
+      }
+      *listener << "notification progress: " << notification.progress()
+                << "\ndoes not equal expected progress: " << expected_progress_;
+      has_mismatch = true;
+    }
+    return !has_mismatch;
+  }
+
+  void DescribeTo(std::ostream* os) const override {
+    *os << "has notification source \"" << expected_source_ << "\" and title \""
+        << expected_title_ << "\"";
+    if (check_message_) {
+      *os << " and message \"" << expected_message_ << "\"";
+    }
+    if (check_progress_) {
+      *os << " and progress " << expected_progress_;
+    }
+  }
+
+  void DescribeNegationTo(std::ostream* os) const override {
+    *os << "does not have notification source \"" << expected_source_
+        << "\" or does not have title \"" << expected_title_ << "\"";
+    if (check_message_) {
+      *os << " or does not have message \"" << expected_message_ << "\"";
+    }
+    if (check_progress_) {
+      *os << " or does not have progress " << expected_progress_;
+    }
+  }
+
+ private:
+  const base::string16 expected_source_;
+  const base::string16 expected_title_;
+  const bool check_message_;
+  const base::string16 expected_message_;
+  const bool check_progress_;
+  const int expected_progress_;
+};
+
+Matcher<PrintableNotification> IsUninstallSuccessNotification(
+    KnownApp app = DEFAULT_APP) {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringFUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_COMPLETED_TITLE,
+          GetAppName(app)),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_COMPLETED_MESSAGE)));
+}
+
+Matcher<PrintableNotification> IsUninstallFailedNotification(
+    KnownApp app = DEFAULT_APP) {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringFUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_ERROR_TITLE,
+          GetAppName(app)),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_ERROR_MESSAGE)));
+}
+
+Matcher<PrintableNotification> IsUninstallProgressNotification(
+    int expected_progress,
+    KnownApp app = DEFAULT_APP) {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringFUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_IN_PROGRESS_TITLE,
+          GetAppName(app)),
+      expected_progress));
+}
+
+Matcher<PrintableNotification> IsUninstallQueuedNotification(
+    KnownApp app = DEFAULT_APP) {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringFUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_QUEUED_TITLE,
+          GetAppName(app)),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_QUEUED_MESSAGE)));
+}
+
+Matcher<PrintableNotification> IsInstallProgressNotification(
+    int expected_progress) {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_IN_PROGRESS_TITLE),
+      expected_progress));
+}
+
+Matcher<PrintableNotification> IsInstallSuccessNotification() {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_COMPLETED_TITLE),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_COMPLETED_MESSAGE)));
+}
+
+Matcher<PrintableNotification> IsInstallFailedNotification() {
+  return MakeMatcher(new NotificationMatcher(
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_DISPLAY_SOURCE),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_ERROR_TITLE),
+      l10n_util::GetStringUTF16(
+          IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_ERROR_MESSAGE)));
+}
+
+TEST_F(CrostiniPackageServiceTest, BasicUninstallMakesValidUninstallRequest) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+}
+
+TEST_F(CrostiniPackageServiceTest, DifferentVmMakesValidUninstallRequest) {
+  service_->QueueUninstallApplication(kDifferentVmAppId);
+
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  EXPECT_EQ(request.vm_name(), kDifferentVmVmName);
+  EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.desktop_file_id(), kDifferentVmAppFileId);
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       DifferentContainerMakesValidUninstallRequest) {
+  service_->QueueUninstallApplication(kDifferentContainerAppId);
+
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request.container_name(), kDifferentContainerContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.desktop_file_id(), kDifferentContainerAppFileId);
+}
+
+TEST_F(CrostiniPackageServiceTest, BasicUninstallDisplaysNotification) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       FailedUninstallResponseDisplaysFailedNotification) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+
+  // Tell service the uninstall failed.
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::FAILED);
+  response.set_failure_reason("I prefer not to");
+  std::move(callback).Run(response);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       BlockedUninstallResponseDisplaysFailedNotification) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+
+  // Tell service the uninstall failed.
+  UninstallPackageOwningFileResponse response;
+  response.set_status(
+      UninstallPackageOwningFileResponse::BLOCKING_OPERATION_IN_PROGRESS);
+  response.set_failure_reason("Hahaha NO");
+  std::move(callback).Run(response);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       FailedUninstallSignalDisplaysFailedNotification) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  StartAndSignalUninstall(UninstallPackageProgressSignal::FAILED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallDisplaysProgressNotificationBeforeResponse) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallDisplaysProgressNotificationBeforeSignal) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback).Run(response);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallDisplaysProgressNotificationAfterProgressSignal) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING,
+                          23 /*progress_percent*/);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(23)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallDisplaysSuccessNotificationAfterProgressThenSuccess) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING,
+                          50 /*progress_percent*/, kDefaultAppFileId, &request);
+
+  UninstallPackageProgressSignal signal_success = MakeUninstallSignal(request);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallDisplaysFailureNotificationAfterProgressThenFailure) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING,
+                          50 /*progress_percent*/, kDefaultAppFileId, &request);
+
+  UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request);
+  signal_failure.set_status(UninstallPackageProgressSignal::FAILED);
+  signal_failure.set_failure_details("I prefer not to");
+  fake_cicerone_client_->UninstallPackageProgress(signal_failure);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest, SecondUninstallDisplaysQueuedNotification) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallQueuedNotification(SECOND_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest, SecondUninstallStartsWhenFirstCompletes) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallProgressNotification(0, SECOND_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest, SecondUninstallStartsWhenFirstFails) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  StartAndSignalUninstall(UninstallPackageProgressSignal::FAILED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification(DEFAULT_APP),
+                           IsUninstallProgressNotification(0, SECOND_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       AfterSecondInstallStartsProgressAppliesToSecond) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  // Uninstall the first.
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  // Start uninstalling the second
+  StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING,
+                          46 /*progress_percent*/, kSecondAppFileId);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallProgressNotification(46, SECOND_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest, BothUninstallsEventuallyComplete) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  // Uninstall the first.
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  // Uninstall the second.
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED,
+                          0 /*progress_percent*/, kSecondAppFileId);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallSuccessNotification(SECOND_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest, QueuedUninstallsProcessedInFifoOrder) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+  service_->QueueUninstallApplication(kThirdAppId);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallQueuedNotification(SECOND_APP),
+                           IsUninstallQueuedNotification(THIRD_APP)));
+
+  // Finish the first; second should start.
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallProgressNotification(0, SECOND_APP),
+                           IsUninstallQueuedNotification(THIRD_APP)));
+
+  // Finish the second, third should start.
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED,
+                          0 /*progress_percent*/, kSecondAppFileId);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallSuccessNotification(SECOND_APP),
+                           IsUninstallProgressNotification(0, THIRD_APP)));
+
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED,
+                          0 /*progress_percent*/, kThirdAppFileId);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallSuccessNotification(SECOND_APP),
+                           IsUninstallSuccessNotification(THIRD_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest, ClosingSuccessNotificationWorks) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 1U);
+  EXPECT_THAT(Printable(notifications[0]), IsUninstallSuccessNotification());
+  CloseNotification(notifications[0]);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+}
+
+TEST_F(CrostiniPackageServiceTest, ClosingFailureNotificationWorks) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  StartAndSignalUninstall(UninstallPackageProgressSignal::FAILED);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 1U);
+  EXPECT_THAT(Printable(notifications[0]), IsUninstallFailedNotification());
+  CloseNotification(notifications[0]);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       ClosedInProgressNotificationDoesNotReopenOnProgress) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback).Run(response);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 1U);
+  EXPECT_THAT(Printable(notifications[0]), IsUninstallProgressNotification(0));
+  CloseNotification(notifications[0]);
+
+  UninstallPackageProgressSignal signal_progress = MakeUninstallSignal(request);
+  signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING);
+  signal_progress.set_progress_percent(50);
+  fake_cicerone_client_->UninstallPackageProgress(signal_progress);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       ClosedInProgressNotificationReopensOnSuccess) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback).Run(response);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 1U);
+  EXPECT_THAT(Printable(notifications[0]), IsUninstallProgressNotification(0));
+  CloseNotification(notifications[0]);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+
+  UninstallPackageProgressSignal signal_success = MakeUninstallSignal(request);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       ClosedInProgressNotificationReopensOnFailure) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback).Run(response);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 1U);
+  EXPECT_THAT(Printable(notifications[0]), IsUninstallProgressNotification(0));
+  CloseNotification(notifications[0]);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+
+  UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request);
+  signal_failure.set_status(UninstallPackageProgressSignal::FAILED);
+  signal_failure.set_failure_details("I prefer not to");
+  fake_cicerone_client_->UninstallPackageProgress(signal_failure);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       ClosedQueuedNotificationDoesNotReopenOnProgress) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 2U);
+  EXPECT_THAT(Printable(notifications[1]),
+              IsUninstallQueuedNotification(SECOND_APP));
+  CloseNotification(notifications[1]);
+
+  // Complete Uninstall 1
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  // Uninstall 2 is now started, but we don't see a notification.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       ClosedQueuedNotificationDoesNotReopenOnFurtherProgress) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 2U);
+  EXPECT_THAT(Printable(notifications[1]),
+              IsUninstallQueuedNotification(SECOND_APP));
+  CloseNotification(notifications[1]);
+
+  // Complete Uninstall 1
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  // Start Uninstall 2
+  StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING,
+                          50 /*progress_percent*/, kSecondAppFileId);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       ClosedQueuedNotificationReopensOnCompletion) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  service_->QueueUninstallApplication(kSecondAppId);
+
+  std::vector<message_center::Notification> notifications =
+      notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT);
+  ASSERT_EQ(notifications.size(), 2U);
+  EXPECT_THAT(Printable(notifications[1]),
+              IsUninstallQueuedNotification(SECOND_APP));
+  CloseNotification(notifications[1]);
+
+  // Complete Uninstall 1
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED);
+
+  // Complete Uninstall 2
+  StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED,
+                          0 /*progress_percent*/, kSecondAppFileId);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallSuccessNotification(SECOND_APP)));
+}
+
+TEST_F(CrostiniPackageServiceTest, UninstallsOnDifferentVmsDoNotInterfere) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+  EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+
+  service_->QueueUninstallApplication(kDifferentVmAppId);
+  UninstallPackageOwningFileRequest request_different_vm;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback_different_vm;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request_different_vm,
+                               &callback_different_vm);
+  EXPECT_EQ(request_different_vm.vm_name(), kDifferentVmVmName);
+  EXPECT_EQ(request_different_vm.desktop_file_id(), kDifferentVmAppFileId);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallProgressNotification(0, DIFFERENT_VM)));
+
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback).Run(response);
+  UninstallPackageProgressSignal signal_progress = MakeUninstallSignal(request);
+  signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING);
+  signal_progress.set_progress_percent(60);
+  fake_cicerone_client_->UninstallPackageProgress(signal_progress);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(60, DEFAULT_APP),
+                           IsUninstallProgressNotification(0, DIFFERENT_VM)));
+
+  std::move(callback_different_vm).Run(response);
+  signal_progress = MakeUninstallSignal(request_different_vm);
+  signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING);
+  signal_progress.set_progress_percent(40);
+  fake_cicerone_client_->UninstallPackageProgress(signal_progress);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(60, DEFAULT_APP),
+                           IsUninstallProgressNotification(40, DIFFERENT_VM)));
+
+  UninstallPackageProgressSignal signal_success =
+      MakeUninstallSignal(request_different_vm);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(60, DEFAULT_APP),
+                           IsUninstallSuccessNotification(DIFFERENT_VM)));
+
+  UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request);
+  signal_failure.set_status(UninstallPackageProgressSignal::FAILED);
+  signal_failure.set_failure_details("Nope");
+  fake_cicerone_client_->UninstallPackageProgress(signal_failure);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallFailedNotification(DEFAULT_APP),
+                           IsUninstallSuccessNotification(DIFFERENT_VM)));
+}
+
+TEST_F(CrostiniPackageServiceTest, UninstallsOnDifferentVmsHaveSeparateQueues) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  UninstallPackageOwningFileRequest request_default;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback_default;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request_default,
+                               &callback_default);
+  EXPECT_EQ(request_default.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request_default.desktop_file_id(), kDefaultAppFileId);
+
+  service_->QueueUninstallApplication(kDifferentVmAppId);
+  UninstallPackageOwningFileRequest request_different_vm;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback_different_vm;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request_different_vm,
+                               &callback_different_vm);
+  EXPECT_EQ(request_different_vm.vm_name(), kDifferentVmVmName);
+  EXPECT_EQ(request_different_vm.desktop_file_id(), kDifferentVmAppFileId);
+
+  service_->QueueUninstallApplication(kSecondAppId);
+  service_->QueueUninstallApplication(kDifferentVmApp2Id);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallProgressNotification(0, DIFFERENT_VM),
+                           IsUninstallQueuedNotification(SECOND_APP),
+                           IsUninstallQueuedNotification(DIFFERENT_VM_2)));
+
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::FAILED);
+  std::move(callback_different_vm).Run(response);
+
+  // Even though kSecondAppId was queued first, kDifferentVmApp2Id is moved
+  // to progress state, because it's on a different queue.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallFailedNotification(DIFFERENT_VM),
+                           IsUninstallQueuedNotification(SECOND_APP),
+                           IsUninstallProgressNotification(0, DIFFERENT_VM_2)));
+
+  UninstallPackageOwningFileRequest request_different_vm_2;
+  DBusMethodCallback<UninstallPackageOwningFileResponse>
+      callback_different_vm_2;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request_different_vm_2,
+                               &callback_different_vm_2);
+  EXPECT_EQ(request_different_vm_2.vm_name(), kDifferentVmVmName);
+  EXPECT_EQ(request_different_vm_2.desktop_file_id(), kDifferentVmApp2FileId);
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback_different_vm_2).Run(response);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallFailedNotification(DIFFERENT_VM),
+                           IsUninstallQueuedNotification(SECOND_APP),
+                           IsUninstallProgressNotification(0, DIFFERENT_VM_2)));
+
+  UninstallPackageProgressSignal signal_success =
+      MakeUninstallSignal(request_different_vm_2);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  // Even though the task finished on VM 2, SECOND_APP does not start
+  // uninstalling because it is on a different queue.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP),
+                           IsUninstallFailedNotification(DIFFERENT_VM),
+                           IsUninstallQueuedNotification(SECOND_APP),
+                           IsUninstallSuccessNotification(DIFFERENT_VM_2)));
+
+  std::move(callback_default).Run(response);
+  signal_success = MakeUninstallSignal(request_default);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  // Only when the uninstall on the default VM is done does SECOND_APP start
+  // uninstalling.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP),
+                           IsUninstallFailedNotification(DIFFERENT_VM),
+                           IsUninstallProgressNotification(0, SECOND_APP),
+                           IsUninstallSuccessNotification(DIFFERENT_VM_2)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallsOnDifferentContainersDoNotInterfere) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  UninstallPackageOwningFileRequest request;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback);
+  EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+
+  service_->QueueUninstallApplication(kDifferentContainerAppId);
+  UninstallPackageOwningFileRequest request_different_container;
+  DBusMethodCallback<UninstallPackageOwningFileResponse>
+      callback_different_container;
+  RunUntilUninstallRequestMade(fake_cicerone_client_,
+                               &request_different_container,
+                               &callback_different_container);
+  EXPECT_EQ(request_different_container.container_name(),
+            kDifferentContainerContainerName);
+  EXPECT_EQ(request_different_container.desktop_file_id(),
+            kDifferentContainerAppFileId);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(0, DEFAULT_APP),
+          IsUninstallProgressNotification(0, DIFFERENT_CONTAINER)));
+
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback).Run(response);
+  UninstallPackageProgressSignal signal_progress = MakeUninstallSignal(request);
+  signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING);
+  signal_progress.set_progress_percent(60);
+  fake_cicerone_client_->UninstallPackageProgress(signal_progress);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(60, DEFAULT_APP),
+          IsUninstallProgressNotification(0, DIFFERENT_CONTAINER)));
+
+  std::move(callback_different_container).Run(response);
+  signal_progress = MakeUninstallSignal(request_different_container);
+  signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING);
+  signal_progress.set_progress_percent(40);
+  fake_cicerone_client_->UninstallPackageProgress(signal_progress);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(60, DEFAULT_APP),
+          IsUninstallProgressNotification(40, DIFFERENT_CONTAINER)));
+
+  UninstallPackageProgressSignal signal_success =
+      MakeUninstallSignal(request_different_container);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(60, DEFAULT_APP),
+          IsUninstallSuccessNotification(DIFFERENT_CONTAINER)));
+
+  UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request);
+  signal_failure.set_status(UninstallPackageProgressSignal::FAILED);
+  signal_failure.set_failure_details("Nope");
+  fake_cicerone_client_->UninstallPackageProgress(signal_failure);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallFailedNotification(DEFAULT_APP),
+          IsUninstallSuccessNotification(DIFFERENT_CONTAINER)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       UninstallsOnDifferentContainersHaveSeparateQueues) {
+  service_->QueueUninstallApplication(kDefaultAppId);
+  UninstallPackageOwningFileRequest request_default;
+  DBusMethodCallback<UninstallPackageOwningFileResponse> callback_default;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request_default,
+                               &callback_default);
+  EXPECT_EQ(request_default.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request_default.desktop_file_id(), kDefaultAppFileId);
+
+  service_->QueueUninstallApplication(kDifferentContainerAppId);
+  UninstallPackageOwningFileRequest request_different_container;
+  DBusMethodCallback<UninstallPackageOwningFileResponse>
+      callback_different_container;
+  RunUntilUninstallRequestMade(fake_cicerone_client_,
+                               &request_different_container,
+                               &callback_different_container);
+  EXPECT_EQ(request_different_container.container_name(),
+            kDifferentContainerContainerName);
+  EXPECT_EQ(request_different_container.desktop_file_id(),
+            kDifferentContainerAppFileId);
+
+  service_->QueueUninstallApplication(kSecondAppId);
+  service_->QueueUninstallApplication(kDifferentContainerApp2Id);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(0, DEFAULT_APP),
+          IsUninstallProgressNotification(0, DIFFERENT_CONTAINER),
+          IsUninstallQueuedNotification(SECOND_APP),
+          IsUninstallQueuedNotification(DIFFERENT_CONTAINER_2)));
+
+  UninstallPackageOwningFileResponse response;
+  response.set_status(UninstallPackageOwningFileResponse::FAILED);
+  std::move(callback_different_container).Run(response);
+
+  // Even though kSecondAppId was queued first, kDifferentContainerApp2Id is
+  // moved to progress state, because it's on a different queue.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(0, DEFAULT_APP),
+          IsUninstallFailedNotification(DIFFERENT_CONTAINER),
+          IsUninstallQueuedNotification(SECOND_APP),
+          IsUninstallProgressNotification(0, DIFFERENT_CONTAINER_2)));
+
+  UninstallPackageOwningFileRequest request_different_container_2;
+  DBusMethodCallback<UninstallPackageOwningFileResponse>
+      callback_different_container_2;
+  RunUntilUninstallRequestMade(fake_cicerone_client_,
+                               &request_different_container_2,
+                               &callback_different_container_2);
+  EXPECT_EQ(request_different_container_2.container_name(),
+            kDifferentContainerContainerName);
+  EXPECT_EQ(request_different_container_2.desktop_file_id(),
+            kDifferentContainerApp2FileId);
+  response.set_status(UninstallPackageOwningFileResponse::STARTED);
+  std::move(callback_different_container_2).Run(response);
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(0, DEFAULT_APP),
+          IsUninstallFailedNotification(DIFFERENT_CONTAINER),
+          IsUninstallQueuedNotification(SECOND_APP),
+          IsUninstallProgressNotification(0, DIFFERENT_CONTAINER_2)));
+
+  UninstallPackageProgressSignal signal_success =
+      MakeUninstallSignal(request_different_container_2);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  // Even though the task finished on container 2, SECOND_APP does not start
+  // uninstalling because it is on a different queue.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallProgressNotification(0, DEFAULT_APP),
+          IsUninstallFailedNotification(DIFFERENT_CONTAINER),
+          IsUninstallQueuedNotification(SECOND_APP),
+          IsUninstallSuccessNotification(DIFFERENT_CONTAINER_2)));
+
+  std::move(callback_default).Run(response);
+  signal_success = MakeUninstallSignal(request_default);
+  signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED);
+  fake_cicerone_client_->UninstallPackageProgress(signal_success);
+
+  // Only when the uninstall on the default container is done does SECOND_APP
+  // start uninstalling.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(
+          IsUninstallSuccessNotification(DEFAULT_APP),
+          IsUninstallFailedNotification(DIFFERENT_CONTAINER),
+          IsUninstallProgressNotification(0, SECOND_APP),
+          IsUninstallSuccessNotification(DIFFERENT_CONTAINER_2)));
+}
+
+TEST_F(CrostiniPackageServiceTest, InstallSendsValidRequest) {
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kDifferentVmVmName, kDifferentContainerContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(result, CrostiniResult::SUCCESS);
+  const vm_tools::cicerone::InstallLinuxPackageRequest& request =
+      fake_cicerone_client_->get_most_recent_install_linux_package_request();
+
+  EXPECT_EQ(request.vm_name(), kDifferentVmVmName);
+  EXPECT_EQ(request.container_name(), kDifferentContainerContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.file_path(), kPackageFilePath);
+}
+
+TEST_F(CrostiniPackageServiceTest, InstallDisplaysProgressNotificationOnStart) {
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(result, CrostiniResult::SUCCESS);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallProgressNotification(0)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       InstallUpdatesProgressNotificationOnDownloadingSignal) {
+  service_->InstallLinuxPackage(kCrostiniDefaultVmName,
+                                kCrostiniDefaultContainerName, kPackageFilePath,
+                                base::DoNothing());
+  StartAndSignalInstall(InstallLinuxPackageProgressSignal::DOWNLOADING,
+                        44 /*progress_percent*/);
+
+  // 22 = 44/2
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallProgressNotification(22)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       InstallUpdatesProgressNotificationOnInstallingSignal) {
+  service_->InstallLinuxPackage(kCrostiniDefaultVmName,
+                                kCrostiniDefaultContainerName, kPackageFilePath,
+                                base::DoNothing());
+  StartAndSignalInstall(InstallLinuxPackageProgressSignal::INSTALLING,
+                        44 /*progress_percent*/);
+
+  // 72 = 44/2 + 50
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallProgressNotification(72)));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       InstallDisplaysSuccessNotificationOnSuccessSignal) {
+  service_->InstallLinuxPackage(kCrostiniDefaultVmName,
+                                kCrostiniDefaultContainerName, kPackageFilePath,
+                                base::DoNothing());
+  StartAndSignalInstall(InstallLinuxPackageProgressSignal::SUCCEEDED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallSuccessNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       InstallDisplaysNoNotificationOnFailedResponse) {
+  InstallLinuxPackageResponse response;
+  response.set_status(InstallLinuxPackageResponse::FAILED);
+  response.set_failure_reason("No such file");
+  fake_cicerone_client_->set_install_linux_package_response(response);
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(result, CrostiniResult::INSTALL_LINUX_PACKAGE_FAILED);
+  // Failures from the original Cicerone call are reported via the callback not
+  // a notification popup.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       InstallDisplaysNoNotificationOnOtherInstallActiveResponse) {
+  InstallLinuxPackageResponse response;
+  response.set_status(InstallLinuxPackageResponse::INSTALL_ALREADY_ACTIVE);
+  fake_cicerone_client_->set_install_linux_package_response(response);
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(result, CrostiniResult::BLOCKING_OPERATION_ALREADY_ACTIVE);
+  // Failures from the original Cicerone call are reported via the callback not
+  // a notification popup.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      IsEmpty());
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       InstallDisplaysFailureNotificationOnFailedSignal) {
+  service_->InstallLinuxPackage(kCrostiniDefaultVmName,
+                                kCrostiniDefaultContainerName, kPackageFilePath,
+                                base::DoNothing());
+  StartAndSignalInstall(InstallLinuxPackageProgressSignal::FAILED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallFailedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest, UninstallsQueuesBehindStartingUpInstall) {
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  // Install doesn't show a notification until it gets a response, but uninstall
+  // still shows a queued notification.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallQueuedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest, InstallRunsInFrontOfQueuedUninstall) {
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  service_->QueueUninstallApplication(kDefaultAppId);
+  base::RunLoop().RunUntilIdle();
+
+  // Ensure the install started, not the uninstall.
+  EXPECT_EQ(result, CrostiniResult::SUCCESS);
+  const vm_tools::cicerone::InstallLinuxPackageRequest& request =
+      fake_cicerone_client_->get_most_recent_install_linux_package_request();
+  EXPECT_EQ(request.file_path(), kPackageFilePath);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallProgressNotification(0),
+                           IsUninstallQueuedNotification()));
+}
+
+TEST_F(CrostiniPackageServiceTest, QueuedUninstallRunsAfterCompletedInstall) {
+  CrostiniResult result = CrostiniResult::UNKNOWN_ERROR;
+  service_->InstallLinuxPackage(
+      kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath,
+      base::BindOnce(&RecordInstallResult, base::Unretained(&result)));
+  service_->QueueUninstallApplication(kDefaultAppId);
+  StartAndSignalInstall(InstallLinuxPackageProgressSignal::SUCCEEDED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallSuccessNotification(),
+                           IsUninstallProgressNotification(0)));
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       QueuedUninstallRunsAfterFailedToStartInstall) {
+  InstallLinuxPackageResponse response;
+  response.set_status(InstallLinuxPackageResponse::FAILED);
+  response.set_failure_reason("No such file");
+  fake_cicerone_client_->set_install_linux_package_response(response);
+  service_->InstallLinuxPackage(kCrostiniDefaultVmName,
+                                kCrostiniDefaultContainerName, kPackageFilePath,
+                                base::DoNothing());
+  service_->QueueUninstallApplication(kDefaultAppId);
+
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  // Install never brings up a notification because the response was 'failed',
+  // but the queued uninstall starts running.
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsUninstallProgressNotification(0)));
+
+  EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+}
+
+TEST_F(CrostiniPackageServiceTest,
+       QueuedUninstallRunsAfterFailedInstallSignal) {
+  service_->InstallLinuxPackage(kCrostiniDefaultVmName,
+                                kCrostiniDefaultContainerName, kPackageFilePath,
+                                base::DoNothing());
+  service_->QueueUninstallApplication(kDefaultAppId);
+  StartAndSignalInstall(InstallLinuxPackageProgressSignal::FAILED);
+
+  EXPECT_THAT(
+      Printable(notification_display_service_->GetDisplayedNotificationsForType(
+          NotificationHandler::Type::TRANSIENT)),
+      UnorderedElementsAre(IsInstallFailedNotification(),
+                           IsUninstallProgressNotification(0)));
+  UninstallPackageOwningFileRequest request;
+  RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr);
+
+  EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName);
+  EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId);
+}
+
+TEST_F(CrostiniPackageServiceTest, GetLinuxPackageInfoSendsCorrectRequest) {
+  service_->GetLinuxPackageInfo(kDifferentVmVmName,
+                                kDifferentContainerContainerName,
+                                kPackageFilePath, base::DoNothing());
+
+  base::RunLoop().RunUntilIdle();
+
+  const LinuxPackageInfoRequest& request =
+      fake_cicerone_client_->get_most_recent_linux_package_info_request();
+  EXPECT_EQ(request.vm_name(), kDifferentVmVmName);
+  EXPECT_EQ(request.container_name(), kDifferentContainerContainerName);
+  EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get()));
+  EXPECT_EQ(request.file_path(), kPackageFilePath);
+}
+
+TEST_F(CrostiniPackageServiceTest, GetLinuxPackageInfoReturnsInfoOnSuccess) {
+  LinuxPackageInfoResponse response;
+  response.set_success(true);
+  response.set_package_id("nethack;3.6.1;x64;some data");
+  response.set_license("ngpl");
+  response.set_description("Explore the Dungeon!");
+  response.set_project_url("https://www.nethack.org/");
+  response.set_size(548422342432);
+  response.set_summary("Fight! Run! Win!");
+  fake_cicerone_client_->set_linux_package_info_response(response);
+
+  LinuxPackageInfo result;
+  service_->GetLinuxPackageInfo(
+      kDifferentVmVmName, kDifferentContainerContainerName, kPackageFilePath,
+      base::BindOnce(&RecordPackageInfoResult, base::Unretained(&result)));
+
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_TRUE(result.success);
+  EXPECT_EQ(result.name, "nethack");
+  EXPECT_EQ(result.version, "3.6.1");
+  EXPECT_EQ(result.summary, response.summary());
+  EXPECT_EQ(result.description, response.description());
+}
+
+TEST_F(CrostiniPackageServiceTest, GetLinuxPackageInfoReturnsFailureOnFailure) {
+  LinuxPackageInfoResponse response;
+  response.set_success(false);
+  fake_cicerone_client_->set_linux_package_info_response(response);
+
+  LinuxPackageInfo result;
+  service_->GetLinuxPackageInfo(
+      kDifferentVmVmName, kDifferentContainerContainerName, kPackageFilePath,
+      base::BindOnce(&RecordPackageInfoResult, base::Unretained(&result)));
+
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_FALSE(result.success);
+}
+
+}  // namespace
+
+}  // namespace crostini
diff --git a/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc b/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc
index 0f026c7e..51d309e 100644
--- a/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc
+++ b/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc
@@ -493,7 +493,8 @@
   DISALLOW_COPY_AND_ASSIGN(AutoLaunchedKioskTest);
 };
 
-IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, PRE_CrashRestore) {
+// TODO(crbug.com/930345): Disabled due to flakiness.
+IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, DISABLED_PRE_CrashRestore) {
   // Verify that Chrome hasn't already exited, e.g. in order to apply user
   // session flags.
   ASSERT_FALSE(termination_observer_->terminated());
@@ -516,7 +517,8 @@
   ASSERT_TRUE(CloseAppWindow(kTestKioskApp));
 }
 
-IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, CrashRestore) {
+// TODO(crbug.com/930345): Disabled due to flakiness.
+IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, DISABLED_CrashRestore) {
   // Verify that Chrome hasn't already exited, e.g. in order to apply user
   // session flags.
   ASSERT_FALSE(termination_observer_->terminated());
diff --git a/chrome/browser/chromeos/smb_client/smb_service.cc b/chrome/browser/chromeos/smb_client/smb_service.cc
index b2fcaf63..82bdedab 100644
--- a/chrome/browser/chromeos/smb_client/smb_service.cc
+++ b/chrome/browser/chromeos/smb_client/smb_service.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/post_task.h"
+#include "base/time/default_tick_clock.h"
 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
@@ -108,8 +109,11 @@
 
 bool SmbService::service_should_run_ = false;
 
-SmbService::SmbService(Profile* profile)
-    : provider_id_(ProviderId::CreateFromNativeId("smb")), profile_(profile) {
+SmbService::SmbService(Profile* profile,
+                       std::unique_ptr<base::TickClock> tick_clock)
+    : provider_id_(ProviderId::CreateFromNativeId("smb")),
+      profile_(profile),
+      tick_clock_(std::move(tick_clock)) {
   service_should_run_ = IsEnabledByFlag() && IsAllowedByPolicy();
   if (service_should_run_) {
     StartSetup();
diff --git a/chrome/browser/chromeos/smb_client/smb_service.h b/chrome/browser/chromeos/smb_client/smb_service.h
index 49857e74..e2a1f0e 100644
--- a/chrome/browser/chromeos/smb_client/smb_service.h
+++ b/chrome/browser/chromeos/smb_client/smb_service.h
@@ -14,6 +14,7 @@
 #include "base/files/file.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
 #include "chrome/browser/chromeos/file_system_provider/provider_interface.h"
 #include "chrome/browser/chromeos/file_system_provider/service.h"
@@ -51,7 +52,7 @@
   using StartReadDirIfSuccessfulCallback =
       base::OnceCallback<void(bool should_retry_start_read_dir)>;
 
-  explicit SmbService(Profile* profile);
+  SmbService(Profile* profile, std::unique_ptr<base::TickClock> tick_clock);
   ~SmbService() override;
 
   // Gets the singleton instance for the |context|.
@@ -239,6 +240,7 @@
   static bool service_should_run_;
   const ProviderId provider_id_;
   Profile* profile_;
+  std::unique_ptr<base::TickClock> tick_clock_;
   std::unique_ptr<TempFileManager> temp_file_manager_;
   std::unique_ptr<SmbShareFinder> share_finder_;
   // |mount_id| -> |reply|. Stored callbacks to run after updating credential.
diff --git a/chrome/browser/chromeos/smb_client/smb_service_factory.cc b/chrome/browser/chromeos/smb_client/smb_service_factory.cc
index c4acd5e..cba5962f 100644
--- a/chrome/browser/chromeos/smb_client/smb_service_factory.cc
+++ b/chrome/browser/chromeos/smb_client/smb_service_factory.cc
@@ -4,6 +4,9 @@
 
 #include "chrome/browser/chromeos/smb_client/smb_service_factory.h"
 
+#include <memory>
+
+#include "base/time/default_tick_clock.h"
 #include "chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.h"
 #include "chrome/browser/chromeos/file_system_provider/service_factory.h"
 #include "chrome/browser/chromeos/smb_client/smb_service.h"
@@ -43,7 +46,8 @@
 
 KeyedService* SmbServiceFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
-  return new SmbService(Profile::FromBrowserContext(profile));
+  return new SmbService(Profile::FromBrowserContext(profile),
+                        std::make_unique<base::DefaultTickClock>());
 }
 
 content::BrowserContext* SmbServiceFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
index 4eb39d5..608709d0 100644
--- a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
+++ b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
@@ -9,6 +9,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/test/simple_test_tick_clock.h"
 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
 #include "chrome/browser/chromeos/file_system_provider/fake_registry.h"
 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
@@ -52,7 +53,8 @@
         std::make_unique<file_system_provider::FakeRegistry>());
 
     // Create smb service.
-    smb_service_ = std::make_unique<SmbService>(profile_);
+    smb_service_ = std::make_unique<SmbService>(
+        profile_, std::make_unique<base::SimpleTestTickClock>());
   }
 
   ~SmbServiceTest() override {}
diff --git a/chrome/browser/devtools/devtools_ui_bindings.cc b/chrome/browser/devtools/devtools_ui_bindings.cc
index 6d24f15..4de19d7 100644
--- a/chrome/browser/devtools/devtools_ui_bindings.cc
+++ b/chrome/browser/devtools/devtools_ui_bindings.cc
@@ -427,7 +427,6 @@
   void RenderProcessGone(base::TerminationStatus status) override;
   void ReadyToCommitNavigation(
       content::NavigationHandle* navigation_handle) override;
-  void DocumentAvailableInMainFrame() override;
   void DocumentOnLoadCompletedInMainFrame() override;
   void DidFinishNavigation(
       content::NavigationHandle* navigation_handle) override;
@@ -496,11 +495,6 @@
 }
 
 void DevToolsUIBindings::FrontendWebContentsObserver::
-    DocumentAvailableInMainFrame() {
-  devtools_bindings_->DocumentAvailableInMainFrame();
-}
-
-void DevToolsUIBindings::FrontendWebContentsObserver::
     DocumentOnLoadCompletedInMainFrame() {
   devtools_bindings_->DocumentOnLoadCompletedInMainFrame();
 }
@@ -533,7 +527,6 @@
       delegate_(new DefaultBindingsDelegate(web_contents_)),
       devices_updates_enabled_(false),
       frontend_loaded_(false),
-      reloading_(false),
       weak_factory_(this) {
   g_devtools_ui_bindings_instances.Get().push_back(this);
   frontend_contents_observer_.reset(new FrontendWebContentsObserver(this));
@@ -601,7 +594,7 @@
 void DevToolsUIBindings::DispatchProtocolMessage(
     content::DevToolsAgentHost* agent_host, const std::string& message) {
   DCHECK(agent_host == agent_host_.get());
-  if (!frontend_host_ || reloading_)
+  if (!frontend_host_)
     return;
 
   if (message.length() < kMaxMessageChunkSize) {
@@ -1073,7 +1066,7 @@
 
 void DevToolsUIBindings::DispatchProtocolMessageFromDevToolsFrontend(
     const std::string& message) {
-  if (agent_host_.get() && !reloading_)
+  if (agent_host_.get())
     agent_host_->DispatchProtocolMessage(this, message);
 }
 
@@ -1317,11 +1310,6 @@
   InnerAttach();
 }
 
-void DevToolsUIBindings::Reload() {
-  reloading_ = true;
-  web_contents_->GetController().Reload(content::ReloadType::NORMAL, false);
-}
-
 void DevToolsUIBindings::Detach() {
   if (agent_host_.get())
     agent_host_->DetachClient(this);
@@ -1361,6 +1349,10 @@
 void DevToolsUIBindings::ReadyToCommitNavigation(
     content::NavigationHandle* navigation_handle) {
   if (navigation_handle->IsInMainFrame()) {
+    if (frontend_loaded_ && agent_host_.get()) {
+      agent_host_->DetachClient(this);
+      InnerAttach();
+    }
     if (!IsValidFrontendURL(navigation_handle->GetURL())) {
       LOG(ERROR) << "Attempt to navigate to an invalid DevTools front-end URL: "
                  << navigation_handle->GetURL().spec();
@@ -1397,16 +1389,6 @@
   content::DevToolsFrontendHost::SetupExtensionsAPI(frame, script);
 }
 
-void DevToolsUIBindings::DocumentAvailableInMainFrame() {
-  if (!reloading_)
-    return;
-  reloading_ = false;
-  if (agent_host_.get()) {
-    agent_host_->DetachClient(this);
-    InnerAttach();
-  }
-}
-
 void DevToolsUIBindings::DocumentOnLoadCompletedInMainFrame() {
   // In the DEBUG_DEVTOOLS mode, the DocumentOnLoadCompletedInMainFrame event
   // arrives before the LoadCompleted event, thus it should not trigger the
diff --git a/chrome/browser/devtools/devtools_ui_bindings.h b/chrome/browser/devtools/devtools_ui_bindings.h
index 35ea228f..a2216423 100644
--- a/chrome/browser/devtools/devtools_ui_bindings.h
+++ b/chrome/browser/devtools/devtools_ui_bindings.h
@@ -85,7 +85,6 @@
                           const base::Value* arg2,
                           const base::Value* arg3);
   void AttachTo(const scoped_refptr<content::DevToolsAgentHost>& agent_host);
-  void Reload();
   void Detach();
   bool IsAttachedTo(content::DevToolsAgentHost* agent_host);
 
@@ -180,7 +179,6 @@
                               const base::ListValue& targets);
 
   void ReadyToCommitNavigation(content::NavigationHandle* navigation_handle);
-  void DocumentAvailableInMainFrame();
   void DocumentOnLoadCompletedInMainFrame();
   void DidNavigateMainFrame();
   void FrontendLoaded();
@@ -239,7 +237,6 @@
 
   bool devices_updates_enabled_;
   bool frontend_loaded_;
-  bool reloading_;
   std::unique_ptr<DevToolsTargetsUIHandler> remote_targets_handler_;
   std::unique_ptr<PortForwardingStatusSerializer> port_status_serializer_;
   PrefChangeRegistrar pref_change_registrar_;
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc
index 6d8ed78..d81cc18 100644
--- a/chrome/browser/devtools/devtools_window.cc
+++ b/chrome/browser/devtools/devtools_window.cc
@@ -1127,7 +1127,8 @@
     modified.referrer = content::Referrer();
     return inspected_web_contents->OpenURL(modified);
   }
-  bindings_->Reload();
+  main_web_contents_->GetController().Reload(content::ReloadType::NORMAL,
+                                             false);
   return main_web_contents_;
 }
 
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 3490851..dec1c95 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -403,27 +403,27 @@
   },
   {
     "name": "contextual-search",
-    // "owners": [ "your-team" ],
-    "expiry_milestone": 76
+    "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ],
+    "expiry_milestone": 74
   },
   {
     "name": "contextual-search-ml-tap-suppression",
-    // "owners": [ "your-team" ],
+    "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ],
     "expiry_milestone": 76
   },
   {
     "name": "contextual-search-ranker-query",
-    // "owners": [ "your-team" ],
+    "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ],
     "expiry_milestone": 76
   },
   {
     "name": "contextual-search-second-tap",
-    // "owners": [ "your-team" ],
+    "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ],
     "expiry_milestone": 76
   },
   {
     "name": "contextual-search-unity-integration",
-    // "owners": [ "your-team" ],
+    "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ],
     "expiry_milestone": 76
   },
   {
@@ -1133,7 +1133,7 @@
   },
   {
     "name": "enable-ephemeral-tab",
-    // "owners": [ "your-team" ],
+    "owners": [ "donnd", "jinsukkim" ],
     "expiry_milestone": 76
   },
   {
@@ -1230,7 +1230,7 @@
   },
   {
     "name": "enable-gesture-navigation",
-    // "owners": [ "jinsukkim@chromium.org" ],
+    "owners": [ "jinsukkim@chromium.org" ],
     "expiry_milestone": 76
   },
   {
@@ -1720,11 +1720,6 @@
     "expiry_milestone": 73
   },
   {
-    "name": "enable-settings-shortcut-search",
-    // "owners": [ "your-team" ],
-    "expiry_milestone": 76
-  },
-  {
     "name": "enable-shill-sandboxing",
     // "owners": [ "your-team" ],
     "expiry_milestone": 76
@@ -2017,6 +2012,11 @@
     "expiry_milestone": 76
   },
   {
+    "name": "enable-webrtc-hw-vp9-encoding",
+    "owners": [ "hiroh", "chromeos-video-eng@google.com" ],
+    "expiry_milestone": 76
+  },
+  {
     "name": "enable-webrtc-hybrid-agc",
     // "owners": [ "your-team" ],
     "expiry_milestone": 76
@@ -2872,6 +2872,8 @@
   {
     "name": "show-taps",
     "owners": [ "//ash/OWNERS" ],
+    // This is a debug flag, so that video bug reports can show input taps to
+    // aid in getting clear bug reports.
     "expiry_milestone": -1
   },
   {
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 337bff01..f9dd47655 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2115,6 +2115,10 @@
 const char kWebrtcHwVP8EncodingDescription[] =
     "Support in WebRTC for encoding vp8 video streams using platform hardware.";
 
+const char kWebrtcHwVP9EncodingName[] = "WebRTC hardware vp9 video encoding";
+const char kWebrtcHwVP9EncodingDescription[] =
+    "Support in WebRTC for encoding vp9 video streams using platform hardware.";
+
 const char kWebrtcNewEncodeCpuLoadEstimatorName[] =
     "WebRTC new encode cpu load estimator";
 const char kWebrtcNewEncodeCpuLoadEstimatorDescription[] =
@@ -2310,10 +2314,6 @@
     "learning.  The \"Contextual Search Ranker prediction\" flag must also be "
     "enabled!";
 
-const char kContextualSearchName[] = "Contextual Search";
-const char kContextualSearchDescription[] =
-    "Whether or not Contextual Search is enabled.";
-
 const char kContextualSearchRankerQueryName[] =
     "Contextual Search Ranker prediction";
 const char kContextualSearchRankerQueryDescription[] =
@@ -3328,11 +3328,6 @@
 const char kEnablePlayStoreSearchDescription[] =
     "Enable Play Store search in launcher.";
 
-const char kEnableSettingsShortcutSearchName[] =
-    "Enable Settings shortcut search";
-const char kEnableSettingsShortcutSearchDescription[] =
-    "Enable Settings shortcut search in launcher.";
-
 const char kEnableStylusVirtualKeyboardName[] =
     "Enable stylus virtual keyboard";
 const char kEnableStylusVirtualKeyboardDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index fe02ca6..a2163f5 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1258,6 +1258,9 @@
 extern const char kWebrtcHwVP8EncodingName[];
 extern const char kWebrtcHwVP8EncodingDescription[];
 
+extern const char kWebrtcHwVP9EncodingName[];
+extern const char kWebrtcHwVP9EncodingDescription[];
+
 extern const char kWebrtcNewEncodeCpuLoadEstimatorName[];
 extern const char kWebrtcNewEncodeCpuLoadEstimatorDescription[];
 
@@ -1369,9 +1372,6 @@
 extern const char kContextualSearchMlTapSuppressionName[];
 extern const char kContextualSearchMlTapSuppressionDescription[];
 
-extern const char kContextualSearchName[];
-extern const char kContextualSearchDescription[];
-
 extern const char kContextualSearchRankerQueryName[];
 extern const char kContextualSearchRankerQueryDescription[];
 
@@ -1997,9 +1997,6 @@
 extern const char kEnablePlayStoreSearchName[];
 extern const char kEnablePlayStoreSearchDescription[];
 
-extern const char kEnableSettingsShortcutSearchName[];
-extern const char kEnableSettingsShortcutSearchDescription[];
-
 extern const char kEnableStylusVirtualKeyboardName[];
 extern const char kEnableStylusVirtualKeyboardDescription[];
 
diff --git a/chrome/browser/mac/bluetooth_utility.h b/chrome/browser/mac/bluetooth_utility.h
index df54d35e..8f4f559 100644
--- a/chrome/browser/mac/bluetooth_utility.h
+++ b/chrome/browser/mac/bluetooth_utility.h
@@ -17,6 +17,7 @@
   // On OSX 10.6, if the Link Manager Protocol version supports Low Energy,
   // there is no further indication of whether Low Energy is supported.
   BLUETOOTH_AVAILABLE_LE_UNKNOWN = 4,
+  BLUETOOTH_NOT_SUPPORTED = 5,
   BLUETOOTH_AVAILABILITY_COUNT,
 };
 
diff --git a/chrome/browser/metrics/bluetooth_available_utility.cc b/chrome/browser/metrics/bluetooth_available_utility.cc
new file mode 100644
index 0000000..1f6c2239
--- /dev/null
+++ b/chrome/browser/metrics/bluetooth_available_utility.cc
@@ -0,0 +1,79 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/metrics/bluetooth_available_utility.h"
+
+#include "base/bind.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/task/post_task.h"
+#include "build/build_config.h"
+#include "chrome/browser/mac/bluetooth_utility.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
+#include "device/bluetooth/bluetooth_adapter.h"
+#include "device/bluetooth/bluetooth_adapter_factory.h"
+
+#if defined(OS_LINUX)
+#include "device/bluetooth/dbus/bluez_dbus_manager.h"
+#endif  // defined(OS_LINUX)
+
+namespace bluetooth_utility {
+
+void ReportAvailability(BluetoothAvailability availability) {
+  UMA_HISTOGRAM_ENUMERATION("Bluetooth.Availability", availability,
+                            BLUETOOTH_AVAILABILITY_COUNT);
+}
+
+void OnGetAdapter(scoped_refptr<device::BluetoothAdapter> adapter) {
+  if (!adapter->IsPresent()) {
+    ReportAvailability(BLUETOOTH_NOT_AVAILABLE);
+    return;
+  }
+
+  if (!device::BluetoothAdapterFactory::Get().IsLowEnergySupported()) {
+    ReportAvailability(BLUETOOTH_AVAILABLE_WITHOUT_LE);
+    return;
+  }
+
+  ReportAvailability(BLUETOOTH_AVAILABLE_WITH_LE);
+}
+
+void ReportBluetoothAvailability() {
+#if defined(OS_MACOSX)
+  // TODO(kenrb): This is separate from other platforms because we get a
+  // little bit of extra information from the Mac-specific code. It might not
+  // be worth having the extra code path, and we should consider whether to
+  // combine them (https://crbug.com/907279).
+  bluetooth_utility::BluetoothAvailability availability =
+      bluetooth_utility::GetBluetoothAvailability();
+  UMA_HISTOGRAM_ENUMERATION("Bluetooth.Availability", availability,
+                            bluetooth_utility::BLUETOOTH_AVAILABILITY_COUNT);
+  return;
+#endif  // defined(OS_MACOSX)
+
+  // GetAdapter must be called on the UI thread, because it creates a
+  // WeakPtr, which is checked from that thread on future calls.
+  if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
+    base::PostTaskWithTraits(
+        FROM_HERE,
+        {content::BrowserThread::UI, base::TaskPriority::BEST_EFFORT},
+        base::BindOnce(&ReportBluetoothAvailability));
+    return;
+  }
+
+#if defined(OS_LINUX)
+  // This is for tests that have not initialized bluez or dbus thread manager.
+  // Outside of tests these are initialized earlier during browser startup.
+  if (!bluez::BluezDBusManager::IsInitialized())
+    return;
+#endif  // defined(OS_LINUX)
+
+  if (!device::BluetoothAdapterFactory::Get().IsBluetoothSupported())
+    ReportAvailability(BLUETOOTH_NOT_SUPPORTED);
+
+  device::BluetoothAdapterFactory::Get().GetAdapter(
+      base::BindOnce(&OnGetAdapter));
+}
+
+}  // namespace bluetooth_utility
diff --git a/chrome/browser/metrics/bluetooth_available_utility.h b/chrome/browser/metrics/bluetooth_available_utility.h
new file mode 100644
index 0000000..dfa79b4
--- /dev/null
+++ b/chrome/browser/metrics/bluetooth_available_utility.h
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_METRICS_BLUETOOTH_AVAILABLE_UTILITY_H_
+#define CHROME_BROWSER_METRICS_BLUETOOTH_AVAILABLE_UTILITY_H_
+
+namespace bluetooth_utility {
+
+// Reports the bluetooth availability of the system's hardware.
+// This currently only works on ChromeOS and Windows. For Bluetooth
+// availability on OS X, see chrome/browser/mac/bluetooth_utility.h.
+void ReportBluetoothAvailability();
+
+}  // namespace bluetooth_utility
+
+#endif  // CHROME_BROWSER_METRICS_BLUETOOTH_AVAILABLE_UTILITY_H_
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
index 85b818a..3ae4f3c 100644
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -21,7 +21,7 @@
 #include "chrome/browser/about_flags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_browser_main.h"
-#include "chrome/browser/mac/bluetooth_utility.h"
+#include "chrome/browser/metrics/bluetooth_available_utility.h"
 #include "chrome/browser/shell_integration.h"
 #include "chrome/browser/vr/service/xr_runtime_manager.h"
 #include "components/flags_ui/pref_service_flags_storage.h"
@@ -201,13 +201,13 @@
                         base::TimeTicks::IsHighResolution());
 #endif  // defined(OS_WIN)
 
-#if defined(OS_MACOSX)
-  bluetooth_utility::BluetoothAvailability availability =
-      bluetooth_utility::GetBluetoothAvailability();
-  UMA_HISTOGRAM_ENUMERATION("OSX.BluetoothAvailability",
-                            availability,
-                            bluetooth_utility::BLUETOOTH_AVAILABILITY_COUNT);
-#endif  // defined(OS_MACOSX)
+  // TODO(kenrb): Reporting Bluetooth availability is disabled on Windows
+  // because initializing the Bluetooth adapter causes too much jank.
+  // Re-enable when that is resolved.
+  // See https://crbug.com/929375.
+#if !defined(OS_WIN)
+  bluetooth_utility::ReportBluetoothAvailability();
+#endif
 
   // Record whether Chrome is the default browser or not.
   shell_integration::DefaultWebClientState default_state =
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc
index a9c302e..ecfbd5f 100644
--- a/chrome/browser/net/network_context_configuration_browsertest.cc
+++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -1576,8 +1576,14 @@
 
 // Test that when there's a proxy configuration at startup, the initial requests
 // use that configuration.
+// Flaky on CrOS only. http://crbug.com/922876
+#if defined(OS_CHROMEOS)
+#define MAYBE_TestInitialProxyConfig DISABLED_TestInitialProxyConfig
+#else
+#define MAYBE_TestInitialProxyConfig TestInitialProxyConfig
+#endif
 IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationProxyOnStartBrowserTest,
-                       TestInitialProxyConfig) {
+                       MAYBE_TestInitialProxyConfig) {
   if (IsRestartStateWithInProcessNetworkService())
     return;
   TestProxyConfigured(/*expect_success=*/true);
@@ -1882,10 +1888,20 @@
 // tested, and a suffix of "/0" if the network service is disabled, "/1" if it's
 // enabled, and "/2" if it's enabled and restarted.
 
+#if defined(OS_CHROMEOS)
+// There's an extra network change event on ChromeOS, likely from
+// NetworkChangeNotifierChromeos that makes these tests flaky on ChromeOS when
+// there's an out of process network stack.
+//
+// TODO(https://crbug.com/927293): Fix that, and enable these tests on ChromeOS.
+#define TEST_CASES(network_context_type) \
+  TestCase({NetworkServiceState::kDisabled, network_context_type})
+#else  // !defined(OS_CHROMEOS)
 #define TEST_CASES(network_context_type)                               \
   TestCase({NetworkServiceState::kDisabled, network_context_type}),    \
       TestCase({NetworkServiceState::kEnabled, network_context_type}), \
       TestCase({NetworkServiceState::kRestarted, network_context_type})
+#endif  // !defined(OS_CHROMEOS)
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 #define INSTANTIATE_EXTENSION_TESTS(TestFixture)                        \
diff --git a/chrome/browser/performance_monitor/system_monitor.cc b/chrome/browser/performance_monitor/system_monitor.cc
index 16964989..8832f44 100644
--- a/chrome/browser/performance_monitor/system_monitor.cc
+++ b/chrome/browser/performance_monitor/system_monitor.cc
@@ -67,7 +67,7 @@
 }
 
 void SystemMonitor::SystemObserver::OnFreePhysicalMemoryMbSample(
-    base::Optional<int> free_phys_memory_mb) {
+    int free_phys_memory_mb) {
   NOTREACHED();
 }
 
diff --git a/chrome/browser/performance_monitor/system_monitor.h b/chrome/browser/performance_monitor/system_monitor.h
index ece4fdf..6594bc02 100644
--- a/chrome/browser/performance_monitor/system_monitor.h
+++ b/chrome/browser/performance_monitor/system_monitor.h
@@ -10,7 +10,6 @@
 #include "base/containers/flat_map.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/optional.h"
 #include "base/sequence_checker.h"
 #include "base/task/post_task.h"
 #include "base/time/time.h"
@@ -70,10 +69,8 @@
 
     ~SystemObserver() override = default;
 
-    // Reports the amount of free physical memory, in MB. |free_phys_memory_mb|
-    // can be equal to nullopt if the monitor failed to retrieve this value.
-    virtual void OnFreePhysicalMemoryMbSample(
-        base::Optional<int> free_phys_memory_mb);
+    // Reports the amount of free physical memory, in MB.
+    virtual void OnFreePhysicalMemoryMbSample(int free_phys_memory_mb);
   };
   using ObserverToFrequenciesMap =
       base::flat_map<SystemObserver*, SystemObserver::MetricRefreshFrequencies>;
@@ -113,9 +110,9 @@
   template <typename T>
   struct MetricAndRefreshReason {
     MetricAndRefreshReason() {}
-    MetricAndRefreshReason(base::Optional<T> value, SamplingFrequency reason)
+    MetricAndRefreshReason(T value, SamplingFrequency reason)
         : metric_value(value), refresh_reason(reason) {}
-    base::Optional<T> metric_value = base::nullopt;
+    T metric_value = {};
     SamplingFrequency refresh_reason = SamplingFrequency::kNoSampling;
   };
 
diff --git a/chrome/browser/performance_monitor/system_monitor_helper_win.cc b/chrome/browser/performance_monitor/system_monitor_helper_win.cc
index 6cd6f6c7..2974d42 100644
--- a/chrome/browser/performance_monitor/system_monitor_helper_win.cc
+++ b/chrome/browser/performance_monitor/system_monitor_helper_win.cc
@@ -54,10 +54,13 @@
   if ((refresh_time - last_phys_memory_refresh_default_freq_) >=
       kRefreshIntervalPhysMemoryMbRegFreq) {
     last_phys_memory_refresh_default_freq_ = refresh_time;
-    metrics.free_phys_memory_mb =
-        SystemMonitorHelper::MetricAndRefreshReason<int>(
-            GetFreePhysMemoryMb(),
-            SystemMonitor::SamplingFrequency::kDefaultFrequency);
+    auto free_phys_memory = GetFreePhysMemoryMb();
+    if (free_phys_memory) {
+      metrics.free_phys_memory_mb =
+          SystemMonitorHelper::MetricAndRefreshReason<int>(
+              free_phys_memory.value(),
+              SystemMonitor::SamplingFrequency::kDefaultFrequency);
+    }
   }
 
   return metrics;
diff --git a/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc b/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc
index 05fe0687..9b9f892 100644
--- a/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc
+++ b/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc
@@ -30,7 +30,7 @@
       {.free_phys_memory_mb_frequency =
            SystemMonitor::SamplingFrequency::kDefaultFrequency},
       base::TimeTicks::Now());
-  EXPECT_NE(base::nullopt, refreshed_metrics.free_phys_memory_mb.metric_value);
+  EXPECT_GT(refreshed_metrics.free_phys_memory_mb.metric_value, 0);
 }
 
 }  // namespace
diff --git a/chrome/browser/performance_monitor/system_monitor_unittest.cc b/chrome/browser/performance_monitor/system_monitor_unittest.cc
index ff50804a..bb3c5be 100644
--- a/chrome/browser/performance_monitor/system_monitor_unittest.cc
+++ b/chrome/browser/performance_monitor/system_monitor_unittest.cc
@@ -27,8 +27,7 @@
 class MockMetricsMonitorObserver : public SystemObserver {
  public:
   ~MockMetricsMonitorObserver() override {}
-  MOCK_METHOD1(OnFreePhysicalMemoryMbSample,
-               void(base::Optional<int> free_phys_memory_mb));
+  MOCK_METHOD1(OnFreePhysicalMemoryMbSample, void(int free_phys_memory_mb));
 };
 
 class TestSystemMonitorHelper : public SystemMonitorHelper {
@@ -152,8 +151,7 @@
   system_monitor_->AddOrUpdateObserver(&mock_observer_2, {});
 
   // Ensure that we get several samples to verify that the timer logic works.
-  EXPECT_CALL(mock_observer_1,
-              OnFreePhysicalMemoryMbSample(::testing::Optional(42)))
+  EXPECT_CALL(mock_observer_1, OnFreePhysicalMemoryMbSample(::testing::Eq(42)))
       .Times(2);
 
   // The second observer shouldn't be called.
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
index dc73d30..1e0834a 100644
--- a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
+++ b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
@@ -1829,7 +1829,6 @@
 
   content::WebContents* active_web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
-
   ASSERT_NE(nullptr, active_web_contents);
 
   ASSERT_TRUE(content::ExecuteScript(active_web_contents, "video.play();"));
@@ -2571,21 +2570,3 @@
             content::TitleWatcher(active_web_contents, expected_title)
                 .WaitAndGetTitle());
 }
-
-// Tests that exiting Picture-in-Picture when the video has no source fires the
-// event and resolves the callback.
-IN_PROC_BROWSER_TEST_F(PictureInPictureWindowControllerBrowserTest,
-                       ExitFireEventAndCallbackWhenNoSource) {
-  LoadTabAndEnterPictureInPicture(browser());
-
-  content::WebContents* active_web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-  ASSERT_TRUE(content::ExecuteScript(active_web_contents,
-                                     "video.src=''; exitPictureInPicture();"));
-
-  // 'left' is sent when the first video leaves Picture-in-Picture.
-  base::string16 expected_title = base::ASCIIToUTF16("left");
-  EXPECT_EQ(expected_title,
-            content::TitleWatcher(active_web_contents, expected_title)
-                .WaitAndGetTitle());
-}
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
index 06a49c1..9871636 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
@@ -71,6 +71,11 @@
           return reason == StateChangeReason::SYSTEM_MEMORY_PRESSURE ||
                  reason == StateChangeReason::EXTENSION_INITIATED;
         }
+        case LifecycleUnitState::FROZEN: {
+          // Render-initiated freezing, which happens when freezing a page
+          // through ChromeDriver.
+          return reason == StateChangeReason::RENDERER_INITIATED;
+        }
         default:
           return false;
       }
diff --git a/chrome/browser/resources/bookmarks/item.html b/chrome/browser/resources/bookmarks/item.html
index 62e4512e..d5e5f2a 100644
--- a/chrome/browser/resources/bookmarks/item.html
+++ b/chrome/browser/resources/bookmarks/item.html
@@ -1,8 +1,9 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
+<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
+<link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html">
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="import" href="chrome://resources/html/icon.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
 <link rel="import" href="actions.html">
 <link rel="import" href="shared_style.html">
 <link rel="import" href="store_client.html">
@@ -10,7 +11,7 @@
 
 <dom-module id="bookmarks-item">
   <template>
-    <style include="shared-style">
+    <style include="shared-style cr-icons">
       :host {
         align-items: center;
         color: inherit;
@@ -68,10 +69,14 @@
         flex: none;
       }
 
-      .more-vert-button {
+      cr-icon-button {
         margin-inline-end: 12px;
       }
 
+      :host-context([dark]):host([is-selected-item_]) cr-icon-button {
+        --cr-icon-button-ripple-color: var(--google-grey-700);
+      }
+
       :host(:focus) {
         z-index: 1;
       }
@@ -83,19 +88,13 @@
     <div id="website-url" class="elided-text" title="[[item_.url]]">
       [[item_.url]]
     </div>
-    <paper-icon-button-light class="more-vert-button">
-      <button id="menuButton"
-          tabindex$="[[ironListTabIndex]]"
-          title="$i18n{moreActionsButtonTitle}"
-          aria-label$="[[getButtonAriaLabel_(item_)]]"
-          on-click="onMenuButtonClick_"
-          on-dblclick="onMenuButtonDblClick_"
-          aria-haspopup="menu">
-        <div></div>
-        <div></div>
-        <div></div>
-      </button>
-    </paper-icon-button-light>
+    <cr-icon-button class$="[[crIcon_]]"
+        id="menuButton"
+        tabindex="[[ironListTabIndex]]"
+        title="$i18n{moreActionsButtonTitle}"
+        aria-label$="[[getButtonAriaLabel_(item_)]]"
+        on-click="onMenuButtonClick_"
+        aria-haspopup="menu"></cr-icon-button>
   </template>
   <script src="item.js"></script>
 </dom-module>
diff --git a/chrome/browser/resources/bookmarks/item.js b/chrome/browser/resources/bookmarks/item.js
index b69ff0ba..18fb94f0 100644
--- a/chrome/browser/resources/bookmarks/item.js
+++ b/chrome/browser/resources/bookmarks/item.js
@@ -15,7 +15,12 @@
       observer: 'onItemIdChanged_',
     },
 
-    ironListTabIndex: String,
+    ironListTabIndex: Number,
+
+    crIcon_: {
+      type: String,
+      value: 'icon-more-vert',
+    },
 
     /** @private {BookmarkNode} */
     item_: {
@@ -27,6 +32,7 @@
     isSelectedItem_: {
       type: Boolean,
       reflectToAttribute: true,
+      observer: 'onIsSelectedItemChanged_',
     },
 
     /** @private */
@@ -98,14 +104,6 @@
     });
   },
 
-  /**
-   * @param {Event} e
-   * @private
-   */
-  onMenuButtonDblClick_: function(e) {
-    e.stopPropagation();
-  },
-
   /** @private */
   selectThisItem_: function() {
     this.dispatch(bookmarks.actions.selectItem(this.itemId, this.getState(), {
@@ -116,6 +114,12 @@
   },
 
   /** @private */
+  onIsSelectedItemChanged_: function() {
+    this.crIcon_ = this.isSelectedItem_ ? 'icon-more-vert-light-mode' :
+        'icon-more-vert';
+  },
+
+  /** @private */
   onItemIdChanged_: function() {
     // TODO(tsergeant): Add a histogram to measure whether this assertion fails
     // for real users.
diff --git a/chrome/browser/resources/bookmarks/list.js b/chrome/browser/resources/bookmarks/list.js
index a8b37df..c8c05bd8 100644
--- a/chrome/browser/resources/bookmarks/list.js
+++ b/chrome/browser/resources/bookmarks/list.js
@@ -162,7 +162,8 @@
   onOpenCommandMenu_: function(e) {
     // If the item is not visible, scroll to it before rendering the menu.
     if (e.source == MenuSource.ITEM) {
-      this.scrollToId_(/** @type {BookmarksItemElement} */ (e.path[0]).itemId);
+      this.scrollToId_(
+          /** @type {BookmarksItemElement} */ (e.composedPath()[0]).itemId);
     }
   },
 
@@ -260,8 +261,13 @@
     }
 
     // Prevent the iron-list from changing focus on enter.
-    if (e.path[0] instanceof HTMLButtonElement && e.key == 'Enter') {
-      handled = true;
+    if (e.key == 'Enter') {
+      if (e.composedPath()[0].tagName == 'CR-ICON-BUTTON') {
+        return;
+      }
+      if (e.composedPath()[0] instanceof HTMLButtonElement) {
+        handled = true;
+      }
     }
 
     if (!handled) {
diff --git a/chrome/browser/resources/bookmarks/shared_style.html b/chrome/browser/resources/bookmarks/shared_style.html
index 8df3d77c..e2a3a53 100644
--- a/chrome/browser/resources/bookmarks/shared_style.html
+++ b/chrome/browser/resources/bookmarks/shared_style.html
@@ -5,18 +5,6 @@
 <dom-module id="shared-style">
   <template>
     <style include="cr-shared-style">
-      paper-icon-button-light.more-vert-button > button {
-        padding: 8px;
-      }
-
-      paper-icon-button-light.more-vert-button div {
-        border: 2px solid currentcolor;
-        border-radius: 2px;
-        margin: 1px 8px;
-        pointer-events: none;
-        transform: scale(0.8);
-      }
-
       hr {
         background: rgba(0, 0, 0, 0.11);
         border-width: 0;
diff --git a/chrome/browser/resources/bookmarks/toolbar.html b/chrome/browser/resources/bookmarks/toolbar.html
index 846d53c..715f1e9 100644
--- a/chrome/browser/resources/bookmarks/toolbar.html
+++ b/chrome/browser/resources/bookmarks/toolbar.html
@@ -1,8 +1,9 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
+<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
+<link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="shared_style.html">
 <link rel="import" href="strings.html">
 
@@ -14,16 +15,23 @@
         position: relative;
       }
 
-      paper-icon-button-light.more-actions {
-        margin: 4px;
-      }
-
       cr-toolbar {
         flex: 1;
         --cr-toolbar-field-margin:
             calc(var(--sidebar-width) + var(--splitter-width));
       }
 
+      cr-icon-button {
+        --cr-icon-button-color: white;
+        --cr-icon-button-ripple-color: white;
+        display: inline-block;
+        margin: 4px;
+      }
+
+      :host-context([dark]) cr-icon-button {
+        --cr-icon-button-color: var(--google-grey-200);
+      }
+
       :host(:not([narrow_])) cr-toolbar-selection-overlay {
         --selection-overlay-padding: var(--card-padding-side);
         --cr-toolbar-field-margin: var(--sidebar-width);
@@ -36,16 +44,11 @@
         search-prompt="$i18n{searchPrompt}"
         narrow="{{narrow_}}"
         on-search-changed="onSearchChanged_">
-      <paper-icon-button-light class="more-actions more-vert-button">
-        <button id="menuButton"
+      <cr-icon-button iron-icon="cr:more-vert"
+            id="menuButton"
             title="$i18n{organizeButtonTitle}"
             on-click="onMenuButtonOpenTap_"
-            aria-haspopup="menu">
-          <div></div>
-          <div></div>
-          <div></div>
-        </button>
-      </paper-icon-button-light>
+            aria-haspopup="menu"></cr-icon-button>
     </cr-toolbar>
     <cr-toolbar-selection-overlay show="[[showSelectionOverlay]]"
         delete-label="$i18n{delete}"
diff --git a/chrome/browser/resources/chromeos/login/md_login_shared.js b/chrome/browser/resources/chromeos/login/cr_ui.js
similarity index 91%
rename from chrome/browser/resources/chromeos/login/md_login_shared.js
rename to chrome/browser/resources/chromeos/login/cr_ui.js
index f8f1f0b1..f5eb50b 100644
--- a/chrome/browser/resources/chromeos/login/md_login_shared.js
+++ b/chrome/browser/resources/chromeos/login/cr_ui.js
@@ -1,35 +1,13 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 /**
- * @fileoverview Common OOBE controller methods. This method is shared between
- * OOBE, login, and the lock screen. Add only methods that need to be shared
- * between all *three* screens here, as each additional method increases the
- * time it takes to show the lock screen.
- *
- * If a method needs to be shared between the oobe and login screens, add it to
- * login_non_lock_shared.js.
+ * @fileoverview Common OOBE controller methods for use in OOBE and login.
+ * This file is shared between OOBE and login. Add only methods that need to be
+ * shared between all *two* screens here.
  */
 
-// <include src="test_util.js">
-// <include src="../../../../../ui/login/screen.js">
-// <include src="screen_context.js">
-// <include src="../user_images_grid.js">
-// <include src="apps_menu.js">
-// <include src="../../../../../ui/login/bubble.js">
-// <include src="../../../../../ui/login/display_manager.js">
-// <include src="md_header_bar.js">
-// <include src="md_top_header_bar.js">
-// <include src="demo_mode_test_helper.js">
-
-// <include
-// src="../../../../../ui/login/account_picker/md_screen_account_picker.js">
-
-// <include src="../../../../../ui/login/login_ui_tools.js">
-// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js">
-// <include src="../../../../../ui/login/resource_loader.js">
-
 cr.define('cr.ui', function() {
   var DisplayManager = cr.ui.login.DisplayManager;
 
diff --git a/chrome/browser/resources/chromeos/login/login_non_lock_shared.html b/chrome/browser/resources/chromeos/login/login_non_lock_shared.html
deleted file mode 100644
index c9d33d6e..0000000
--- a/chrome/browser/resources/chromeos/login/login_non_lock_shared.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-This file is included for OOBE and login. If a file is also needed by the lock
-screen, it should be added to login_shared.html
--->
-
-<link rel="stylesheet" href="api_keys_notice.css">
-
-<link rel="stylesheet" href="oobe_screen_enable_debugging.css">
-<link rel="stylesheet" href="oobe_screen_eula_installation_settings_overlay.css">
-<link rel="stylesheet" href="oobe_screen_welcome.css">
-<link rel="stylesheet" href="oobe_screen_reset.css">
-<link rel="stylesheet" href="oobe_screen_autolaunch.css">
-<link rel="stylesheet" href="oobe_screen_enable_kiosk.css">
-<link rel="stylesheet" href="oobe_screen_terms_of_service.css">
-<link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css">
-<link rel="stylesheet" href="oobe_screen_user_image.css">
-<link rel="stylesheet" href="oobe_screen_supervision_transition.css">
-
-<link rel="stylesheet" href="screen_app_launch_splash.css">
-<link rel="stylesheet" href="screen_arc_kiosk_splash.css">
-<link rel="stylesheet" href="screen_arc_terms_of_service.css">
-<link rel="stylesheet" href="screen_gaia_signin.css">
-<link rel="stylesheet" href="screen_error_message.css">
-<link rel="stylesheet" href="screen_tpm_error.css">
-<link rel="stylesheet" href="screen_password_changed.css">
-<link rel="stylesheet" href="screen_wrong_hwid.css">
-<link rel="stylesheet" href="screen_confirm_password.css">
-<link rel="stylesheet" href="screen_fatal_error.css">
-<link rel="stylesheet" href="screen_device_disabled.css">
-<link rel="stylesheet" href="screen_unrecoverable_cryptohome_error.css">
-<link rel="stylesheet" href="screen_active_directory_password_change.css">
-<link rel="stylesheet" href="screen_update_required.css">
-
-<script src="chrome://oobe/keyboard_utils.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/login_non_lock_shared.js b/chrome/browser/resources/chromeos/login/login_non_lock_shared.js
deleted file mode 100644
index 52b983c..0000000
--- a/chrome/browser/resources/chromeos/login/login_non_lock_shared.js
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Shared data between oobe and the login screens. These files
- * are *not* used in the lock screen. If a file should also be used in the lock
- * screen, added it to login_shared.js.
- */
-
-// <include src="oobe_screen_reset.js">
-// <include src="oobe_screen_autolaunch.js">
-// <include src="oobe_screen_enable_kiosk.js">
-// <include src="oobe_screen_terms_of_service.js">
-// <include src="oobe_screen_user_image.js">
-// <include src="oobe_screen_supervision_transition.js">
-// <include src="oobe_screen_assistant_optin_flow.js">
-// <include src="oobe_select.js">
-
-// <include src="screen_app_launch_splash.js">
-// <include src="screen_arc_kiosk_splash.js">
-// <include src="screen_arc_terms_of_service.js">
-// <include src="screen_error_message.js">
-// <include src="screen_gaia_signin.js">
-// <include src="screen_password_changed.js">
-// <include src="screen_tpm_error.js">
-// <include src="screen_wrong_hwid.js">
-// <include src="screen_confirm_password.js">
-// <include src="screen_fatal_error.js">
-// <include src="screen_device_disabled.js">
-// <include src="screen_unrecoverable_cryptohome_error.js">
-// <include src="screen_active_directory_password_change.js">
-// <include src="screen_encryption_migration.js">
-// <include src="screen_update_required.js">
-// <include src="screen_sync_consent.js">
-// <include src="screen_fingerprint_setup.js">
-// <include src="screen_recommend_apps.js">
-// <include src="screen_app_downloading.js">
-// <include src="screen_discover.js">
-// <include src="screen_marketing_opt_in.js">
-// <include src="screen_multidevice_setup.js">
-
-// <include src="../../gaia_auth_host/authenticator.js">
-
-// Register assets for async loading.
-[{
-  id: SCREEN_OOBE_ENROLLMENT,
-  html: [{url: 'chrome://oobe/enrollment.html', targetID: 'inner-container'}],
-  css: ['chrome://oobe/enrollment.css'],
-  js: ['chrome://oobe/enrollment.js']
-}].forEach(cr.ui.login.ResourceLoader.registerAssets);
-
-(function() {
-'use strict';
-
-document.addEventListener('DOMContentLoaded', function() {
-  // Immediately load async assets.
-  cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() {
-    // This screen is async-loaded so we manually trigger i18n processing.
-    i18nTemplate.process($('oauth-enrollment'), loadTimeData);
-    // Delayed binding since this isn't defined yet.
-    login.OAuthEnrollmentScreen.register();
-  });
-});
-})();
diff --git a/chrome/browser/resources/chromeos/login/login_screens.html b/chrome/browser/resources/chromeos/login/login_screens.html
deleted file mode 100644
index f20bdae..0000000
--- a/chrome/browser/resources/chromeos/login/login_screens.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<include src="oobe_screen_reset.html">
-<include src="oobe_screen_autolaunch.html">
-<include src="oobe_screen_enable_kiosk.html">
-<include src="oobe_screen_terms_of_service.html">
-<include src="oobe_screen_user_image.html">
-<include src="oobe_screen_supervision_transition.html">
-<include src="oobe_screen_assistant_optin_flow.html">
-<include src="../../../../../ui/login/account_picker/screen_account_picker.html">
-<include src="screen_arc_terms_of_service.html">
-<include src="screen_error_message.html">
-<include src="screen_gaia_signin.html">
-<include src="screen_password_changed.html">
-<include src="screen_tpm_error.html">
-<include src="screen_wrong_hwid.html">
-<include src="screen_app_launch_splash.html">
-<include src="screen_arc_kiosk_splash.html">
-<include src="screen_confirm_password.html">
-<include src="screen_fatal_error.html">
-<include src="screen_device_disabled.html">
-<include src="screen_unrecoverable_cryptohome_error.html">
-<include src="screen_active_directory_password_change.html">
-<include src="screen_encryption_migration.html">
-<include src="screen_update_required.html">
-<include src="screen_sync_consent.html">
-<include src="screen_fingerprint_setup.html">
-<include src="screen_recommend_apps.html">
-<include src="screen_app_downloading.html">
-<include src="screen_discover.html">
-<include src="screen_marketing_opt_in.html">
-<include src="screen_multidevice_setup.html">
diff --git a/chrome/browser/resources/chromeos/login/md_login.html b/chrome/browser/resources/chromeos/login/md_login.html
index a2d6179..d73973df 100644
--- a/chrome/browser/resources/chromeos/login/md_login.html
+++ b/chrome/browser/resources/chromeos/login/md_login.html
@@ -7,8 +7,76 @@
 <meta charset="utf-8">
 <meta name="google" value="notranslate">
 <title i18n-content="title"></title>
-<include src="md_login_shared.html">
-<include src="login_non_lock_shared.html">
+<!-- This must be the first import in all login pages. -->
+<link rel="import" href="chrome://resources/html/polymer.html">
+
+<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html">
+<link rel="stylesheet" href="chrome://resources/css/butter_bar.css">
+<link rel="stylesheet" href="chrome://resources/css/dialogs.css">
+<link rel="stylesheet" href="chrome://resources/css/list.css">
+<link rel="stylesheet" href="chrome://resources/css/menu_button.css">
+<link rel="stylesheet" href="chrome://resources/css/menu.css">
+<link rel="stylesheet" href="chrome://resources/css/spinner.css">
+<link rel="stylesheet" href="chrome://resources/css/throbber.css">
+<link rel="stylesheet" href="chrome://resources/css/widgets.css">
+<link rel="stylesheet" href="apps_menu.css">
+<link rel="stylesheet" href="../../../../../ui/login/bubble.css">
+<link rel="stylesheet" href="md_header_bar.css">
+<link rel="stylesheet" href="md_top_header_bar.css">
+<link rel="stylesheet" href="../../../../../ui/login/oobe.css">
+<link rel="stylesheet" href="oobe_popup_overlay.css">
+<link rel="stylesheet" href="oobe_screen.css">
+<link rel="stylesheet" href="../../../../../ui/login/md_screen_container.css">
+<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_screen_account_picker.css">
+<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_user_pod_row.css">
+<script src="chrome://resources/js/cr.js"></script>
+<script src="chrome://resources/js/event_tracker.js"></script>
+<script src="chrome://resources/js/cr/event_target.js"></script>
+<script src="chrome://resources/js/cr/ui.js"></script>
+<script src="chrome://resources/js/cr/ui/touch_handler.js"></script>
+<script src="chrome://resources/js/cr/ui/array_data_model.js"></script>
+<script src="chrome://resources/js/cr/ui/dialogs.js"></script>
+<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script>
+<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script>
+<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script>
+<script src="chrome://resources/js/cr/ui/list_item.js"></script>
+<script src="chrome://resources/js/cr/ui/list.js"></script>
+<script src="chrome://resources/js/cr/ui/grid.js"></script>
+<script src="chrome://resources/js/cr/ui/position_util.js"></script>
+<script src="chrome://resources/js/cr/ui/menu_item.js"></script>
+<script src="chrome://resources/js/cr/ui/menu.js"></script>
+<script src="chrome://resources/js/cr/ui/menu_button.js"></script>
+<script src="chrome://resources/js/load_time_data.js"></script>
+<script src="chrome://resources/js/promise_resolver.js"></script>
+<script src="chrome://resources/js/util.js"></script>
+<script src="chrome://oobe/strings.js"></script>
+<link rel="stylesheet" href="api_keys_notice.css">
+<link rel="stylesheet" href="oobe_screen_enable_debugging.css">
+<link rel="stylesheet" href="oobe_screen_eula_installation_settings_overlay.css">
+<link rel="stylesheet" href="oobe_screen_welcome.css">
+<link rel="stylesheet" href="oobe_screen_reset.css">
+<link rel="stylesheet" href="oobe_screen_autolaunch.css">
+<link rel="stylesheet" href="oobe_screen_enable_kiosk.css">
+<link rel="stylesheet" href="oobe_screen_terms_of_service.css">
+<link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css">
+<link rel="stylesheet" href="oobe_screen_user_image.css">
+<link rel="stylesheet" href="oobe_screen_supervision_transition.css">
+<link rel="stylesheet" href="screen_app_launch_splash.css">
+<link rel="stylesheet" href="screen_arc_kiosk_splash.css">
+<link rel="stylesheet" href="screen_arc_terms_of_service.css">
+<link rel="stylesheet" href="screen_gaia_signin.css">
+<link rel="stylesheet" href="screen_error_message.css">
+<link rel="stylesheet" href="screen_tpm_error.css">
+<link rel="stylesheet" href="screen_password_changed.css">
+<link rel="stylesheet" href="screen_wrong_hwid.css">
+<link rel="stylesheet" href="screen_confirm_password.css">
+<link rel="stylesheet" href="screen_fatal_error.css">
+<link rel="stylesheet" href="screen_device_disabled.css">
+<link rel="stylesheet" href="screen_unrecoverable_cryptohome_error.css">
+<link rel="stylesheet" href="screen_active_directory_password_change.css">
+<link rel="stylesheet" href="screen_update_required.css">
+
+<script src="chrome://oobe/keyboard_utils.js"></script>
 <include src="notification_card.html">
 <script src="chrome://oobe/login.js"></script>
 </head>
diff --git a/chrome/browser/resources/chromeos/login/md_login.js b/chrome/browser/resources/chromeos/login/md_login.js
index 9fc51d7..d373973 100644
--- a/chrome/browser/resources/chromeos/login/md_login.js
+++ b/chrome/browser/resources/chromeos/login/md_login.js
@@ -8,8 +8,79 @@
 
 var isMd = true;
 
-// <include src="md_login_shared.js">
-// <include src="login_non_lock_shared.js">
+// <include src="test_util.js">
+// <include src="../../../../../ui/login/screen.js">
+// <include src="screen_context.js">
+// <include src="../user_images_grid.js">
+// <include src="apps_menu.js">
+// <include src="../../../../../ui/login/bubble.js">
+// <include src="../../../../../ui/login/display_manager.js">
+// <include src="md_header_bar.js">
+// <include src="md_top_header_bar.js">
+// <include src="demo_mode_test_helper.js">
+
+// <include
+// src="../../../../../ui/login/account_picker/md_screen_account_picker.js">
+
+// <include src="../../../../../ui/login/login_ui_tools.js">
+// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js">
+// <include src="../../../../../ui/login/resource_loader.js">
+// <include src="cr_ui.js">
+// <include src="oobe_screen_reset.js">
+// <include src="oobe_screen_autolaunch.js">
+// <include src="oobe_screen_enable_kiosk.js">
+// <include src="oobe_screen_terms_of_service.js">
+// <include src="oobe_screen_user_image.js">
+// <include src="oobe_screen_supervision_transition.js">
+// <include src="oobe_screen_assistant_optin_flow.js">
+// <include src="oobe_select.js">
+
+// <include src="screen_app_launch_splash.js">
+// <include src="screen_arc_kiosk_splash.js">
+// <include src="screen_arc_terms_of_service.js">
+// <include src="screen_error_message.js">
+// <include src="screen_gaia_signin.js">
+// <include src="screen_password_changed.js">
+// <include src="screen_tpm_error.js">
+// <include src="screen_wrong_hwid.js">
+// <include src="screen_confirm_password.js">
+// <include src="screen_fatal_error.js">
+// <include src="screen_device_disabled.js">
+// <include src="screen_unrecoverable_cryptohome_error.js">
+// <include src="screen_active_directory_password_change.js">
+// <include src="screen_encryption_migration.js">
+// <include src="screen_update_required.js">
+// <include src="screen_sync_consent.js">
+// <include src="screen_fingerprint_setup.js">
+// <include src="screen_recommend_apps.js">
+// <include src="screen_app_downloading.js">
+// <include src="screen_discover.js">
+// <include src="screen_marketing_opt_in.js">
+// <include src="screen_multidevice_setup.js">
+
+// <include src="../../gaia_auth_host/authenticator.js">
+
+// Register assets for async loading.
+[{
+  id: SCREEN_OOBE_ENROLLMENT,
+  html: [{url: 'chrome://oobe/enrollment.html', targetID: 'inner-container'}],
+  css: ['chrome://oobe/enrollment.css'],
+  js: ['chrome://oobe/enrollment.js']
+}].forEach(cr.ui.login.ResourceLoader.registerAssets);
+
+(function() {
+'use strict';
+
+document.addEventListener('DOMContentLoaded', function() {
+  // Immediately load async assets.
+  cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() {
+    // This screen is async-loaded so we manually trigger i18n processing.
+    i18nTemplate.process($('oauth-enrollment'), loadTimeData);
+    // Delayed binding since this isn't defined yet.
+    login.OAuthEnrollmentScreen.register();
+  });
+});
+})();
 // <include src="notification_card.js">
 
 /**
diff --git a/chrome/browser/resources/chromeos/login/md_login_shared.html b/chrome/browser/resources/chromeos/login/md_login_shared.html
deleted file mode 100644
index 14783f5..0000000
--- a/chrome/browser/resources/chromeos/login/md_login_shared.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-This file is included for OOBE, login, and the lock screen. Only files which are
-needed by all three scenarios should be included here. If a file should only be
-shared between OOBE and login, add it to login_non_lock_shared.html.
-
-Any additional include increases the lock screen initialization time.
--->
-
-<!-- This must be the first import in all login pages. -->
-<link rel="import" href="chrome://resources/html/polymer.html">
-
-<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html">
-
-<link rel="stylesheet" href="chrome://resources/css/butter_bar.css">
-<link rel="stylesheet" href="chrome://resources/css/dialogs.css">
-<link rel="stylesheet" href="chrome://resources/css/list.css">
-<link rel="stylesheet" href="chrome://resources/css/menu_button.css">
-<link rel="stylesheet" href="chrome://resources/css/menu.css">
-<link rel="stylesheet" href="chrome://resources/css/spinner.css">
-<link rel="stylesheet" href="chrome://resources/css/throbber.css">
-<link rel="stylesheet" href="chrome://resources/css/widgets.css">
-
-<link rel="stylesheet" href="apps_menu.css">
-<link rel="stylesheet" href="../../../../../ui/login/bubble.css">
-<link rel="stylesheet" href="md_header_bar.css">
-<link rel="stylesheet" href="md_top_header_bar.css">
-<link rel="stylesheet" href="../../../../../ui/login/oobe.css">
-<link rel="stylesheet" href="oobe_popup_overlay.css">
-<link rel="stylesheet" href="oobe_screen.css">
-
-<link rel="stylesheet" href="../../../../../ui/login/md_screen_container.css">
-<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_screen_account_picker.css">
-<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_user_pod_row.css">
-
-<script src="chrome://resources/js/cr.js"></script>
-<script src="chrome://resources/js/event_tracker.js"></script>
-<script src="chrome://resources/js/cr/event_target.js"></script>
-<script src="chrome://resources/js/cr/ui.js"></script>
-<script src="chrome://resources/js/cr/ui/touch_handler.js"></script>
-<script src="chrome://resources/js/cr/ui/array_data_model.js"></script>
-<script src="chrome://resources/js/cr/ui/dialogs.js"></script>
-<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script>
-<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script>
-<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script>
-<script src="chrome://resources/js/cr/ui/list_item.js"></script>
-<script src="chrome://resources/js/cr/ui/list.js"></script>
-<script src="chrome://resources/js/cr/ui/grid.js"></script>
-<script src="chrome://resources/js/cr/ui/position_util.js"></script>
-<script src="chrome://resources/js/cr/ui/menu_item.js"></script>
-<script src="chrome://resources/js/cr/ui/menu.js"></script>
-<script src="chrome://resources/js/cr/ui/menu_button.js"></script>
-<script src="chrome://resources/js/load_time_data.js"></script>
-<script src="chrome://resources/js/promise_resolver.js"></script>
-<script src="chrome://resources/js/util.js"></script>
-<script src="chrome://oobe/strings.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/oobe.html b/chrome/browser/resources/chromeos/login/oobe.html
index 0cac1fe..2cc1b66 100644
--- a/chrome/browser/resources/chromeos/login/oobe.html
+++ b/chrome/browser/resources/chromeos/login/oobe.html
@@ -7,8 +7,83 @@
 <meta charset="utf-8">
 <meta name="google" value="notranslate">
 <title i18n-content="title"></title>
-<include src="md_login_shared.html">
-<include src="login_non_lock_shared.html">
+<!-- This must be the first import in all login pages. -->
+<link rel="import" href="chrome://resources/html/polymer.html">
+
+<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html">
+
+<link rel="stylesheet" href="chrome://resources/css/butter_bar.css">
+<link rel="stylesheet" href="chrome://resources/css/dialogs.css">
+<link rel="stylesheet" href="chrome://resources/css/list.css">
+<link rel="stylesheet" href="chrome://resources/css/menu_button.css">
+<link rel="stylesheet" href="chrome://resources/css/menu.css">
+<link rel="stylesheet" href="chrome://resources/css/spinner.css">
+<link rel="stylesheet" href="chrome://resources/css/throbber.css">
+<link rel="stylesheet" href="chrome://resources/css/widgets.css">
+
+<link rel="stylesheet" href="apps_menu.css">
+<link rel="stylesheet" href="../../../../../ui/login/bubble.css">
+<link rel="stylesheet" href="md_header_bar.css">
+<link rel="stylesheet" href="md_top_header_bar.css">
+<link rel="stylesheet" href="../../../../../ui/login/oobe.css">
+<link rel="stylesheet" href="oobe_popup_overlay.css">
+<link rel="stylesheet" href="oobe_screen.css">
+
+<link rel="stylesheet" href="../../../../../ui/login/md_screen_container.css">
+<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_screen_account_picker.css">
+<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_user_pod_row.css">
+
+<script src="chrome://resources/js/cr.js"></script>
+<script src="chrome://resources/js/event_tracker.js"></script>
+<script src="chrome://resources/js/cr/event_target.js"></script>
+<script src="chrome://resources/js/cr/ui.js"></script>
+<script src="chrome://resources/js/cr/ui/touch_handler.js"></script>
+<script src="chrome://resources/js/cr/ui/array_data_model.js"></script>
+<script src="chrome://resources/js/cr/ui/dialogs.js"></script>
+<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script>
+<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script>
+<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script>
+<script src="chrome://resources/js/cr/ui/list_item.js"></script>
+<script src="chrome://resources/js/cr/ui/list.js"></script>
+<script src="chrome://resources/js/cr/ui/grid.js"></script>
+<script src="chrome://resources/js/cr/ui/position_util.js"></script>
+<script src="chrome://resources/js/cr/ui/menu_item.js"></script>
+<script src="chrome://resources/js/cr/ui/menu.js"></script>
+<script src="chrome://resources/js/cr/ui/menu_button.js"></script>
+<script src="chrome://resources/js/load_time_data.js"></script>
+<script src="chrome://resources/js/promise_resolver.js"></script>
+<script src="chrome://resources/js/util.js"></script>
+<script src="chrome://oobe/strings.js"></script>
+<link rel="stylesheet" href="api_keys_notice.css">
+
+<link rel="stylesheet" href="oobe_screen_enable_debugging.css">
+<link rel="stylesheet" href="oobe_screen_eula_installation_settings_overlay.css">
+<link rel="stylesheet" href="oobe_screen_welcome.css">
+<link rel="stylesheet" href="oobe_screen_reset.css">
+<link rel="stylesheet" href="oobe_screen_autolaunch.css">
+<link rel="stylesheet" href="oobe_screen_enable_kiosk.css">
+<link rel="stylesheet" href="oobe_screen_terms_of_service.css">
+<link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css">
+<link rel="stylesheet" href="oobe_screen_user_image.css">
+<link rel="stylesheet" href="oobe_screen_supervision_transition.css">
+
+<link rel="stylesheet" href="screen_app_launch_splash.css">
+<link rel="stylesheet" href="screen_arc_kiosk_splash.css">
+<link rel="stylesheet" href="screen_arc_terms_of_service.css">
+<link rel="stylesheet" href="screen_gaia_signin.css">
+<link rel="stylesheet" href="screen_error_message.css">
+<link rel="stylesheet" href="screen_tpm_error.css">
+<link rel="stylesheet" href="screen_password_changed.css">
+<link rel="stylesheet" href="screen_wrong_hwid.css">
+<link rel="stylesheet" href="screen_confirm_password.css">
+<link rel="stylesheet" href="screen_fatal_error.css">
+<link rel="stylesheet" href="screen_device_disabled.css">
+<link rel="stylesheet" href="screen_unrecoverable_cryptohome_error.css">
+<link rel="stylesheet" href="screen_active_directory_password_change.css">
+<link rel="stylesheet" href="screen_update_required.css">
+
+<script src="chrome://oobe/keyboard_utils.js"></script>
+
 <link rel="import" href="chrome://resources/html/polymer.html">
 <link rel="import" href="chrome://oobe/custom_elements.html">
 <link rel="stylesheet" href="accessibility_menu.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js
index b84d189c..c8b9b96f 100644
--- a/chrome/browser/resources/chromeos/login/oobe.js
+++ b/chrome/browser/resources/chromeos/login/oobe.js
@@ -7,8 +7,79 @@
  * This is the main code for the OOBE WebUI implementation.
  */
 
-// <include src="md_login_shared.js">
-// <include src="login_non_lock_shared.js">
+// <include src="test_util.js">
+// <include src="../../../../../ui/login/screen.js">
+// <include src="screen_context.js">
+// <include src="../user_images_grid.js">
+// <include src="apps_menu.js">
+// <include src="../../../../../ui/login/bubble.js">
+// <include src="../../../../../ui/login/display_manager.js">
+// <include src="md_header_bar.js">
+// <include src="md_top_header_bar.js">
+// <include src="demo_mode_test_helper.js">
+
+// <include
+// src="../../../../../ui/login/account_picker/md_screen_account_picker.js">
+
+// <include src="../../../../../ui/login/login_ui_tools.js">
+// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js">
+// <include src="../../../../../ui/login/resource_loader.js">
+// <include src="cr_ui.js">
+// <include src="oobe_screen_reset.js">
+// <include src="oobe_screen_autolaunch.js">
+// <include src="oobe_screen_enable_kiosk.js">
+// <include src="oobe_screen_terms_of_service.js">
+// <include src="oobe_screen_user_image.js">
+// <include src="oobe_screen_supervision_transition.js">
+// <include src="oobe_screen_assistant_optin_flow.js">
+// <include src="oobe_select.js">
+
+// <include src="screen_app_launch_splash.js">
+// <include src="screen_arc_kiosk_splash.js">
+// <include src="screen_arc_terms_of_service.js">
+// <include src="screen_error_message.js">
+// <include src="screen_gaia_signin.js">
+// <include src="screen_password_changed.js">
+// <include src="screen_tpm_error.js">
+// <include src="screen_wrong_hwid.js">
+// <include src="screen_confirm_password.js">
+// <include src="screen_fatal_error.js">
+// <include src="screen_device_disabled.js">
+// <include src="screen_unrecoverable_cryptohome_error.js">
+// <include src="screen_active_directory_password_change.js">
+// <include src="screen_encryption_migration.js">
+// <include src="screen_update_required.js">
+// <include src="screen_sync_consent.js">
+// <include src="screen_fingerprint_setup.js">
+// <include src="screen_recommend_apps.js">
+// <include src="screen_app_downloading.js">
+// <include src="screen_discover.js">
+// <include src="screen_marketing_opt_in.js">
+// <include src="screen_multidevice_setup.js">
+
+// <include src="../../gaia_auth_host/authenticator.js">
+
+// Register assets for async loading.
+[{
+  id: SCREEN_OOBE_ENROLLMENT,
+  html: [{url: 'chrome://oobe/enrollment.html', targetID: 'inner-container'}],
+  css: ['chrome://oobe/enrollment.css'],
+  js: ['chrome://oobe/enrollment.js']
+}].forEach(cr.ui.login.ResourceLoader.registerAssets);
+
+(function() {
+'use strict';
+
+document.addEventListener('DOMContentLoaded', function() {
+  // Immediately load async assets.
+  cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() {
+    // This screen is async-loaded so we manually trigger i18n processing.
+    i18nTemplate.process($('oauth-enrollment'), loadTimeData);
+    // Delayed binding since this isn't defined yet.
+    login.OAuthEnrollmentScreen.register();
+  });
+});
+})();
 // <include src="oobe_screen_auto_enrollment_check.js">
 // <include src="oobe_screen_demo_setup.js">
 // <include src="oobe_screen_demo_preferences.js">
diff --git a/chrome/browser/resources/cryptotoken/cryptotokenbackground.js b/chrome/browser/resources/cryptotoken/cryptotokenbackground.js
index 610f3dc..111d18f 100644
--- a/chrome/browser/resources/cryptotoken/cryptotokenbackground.js
+++ b/chrome/browser/resources/cryptotoken/cryptotokenbackground.js
@@ -77,6 +77,15 @@
  * @param {*} response The response to return.
  */
 function sendResponseToActiveTabOnly(request, sender, sendResponse, response) {
+  // For WebAuthn-proxied requests on Windows, dismissing the native Windows
+  // UI after a timeout races with the error being returned here. Hence, skip
+  // the focus check for all timeouts.
+  if (response.responseData &&
+      response.responseData.errorCode == ErrorCodes.TIMEOUT) {
+    defaultResponseCallback(request, sendResponse, response);
+    return;
+  }
+
   tabInForeground(sender.tab.id).then(function(result) {
     // If the tab is no longer in the foreground, drop the result: the user
     // is no longer interacting with the tab that originated the request.
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index 3ff9488..a155b2f40 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -462,6 +462,10 @@
  * @private
  */
 function sendThemeInfoToEditCustomLinkIframe() {
+  if (!configData.isGooglePage) {
+    return;
+  }
+
   const info = getThemeBackgroundInfo();
   if (!info) {
     return;
diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js
index 68bd88f..2bf2bbd0 100644
--- a/chrome/browser/resources/settings/languages_page/languages.js
+++ b/chrome/browser/resources/settings/languages_page/languages.js
@@ -986,7 +986,10 @@
    * @return {!chrome.languageSettingsPrivate.Language|undefined}
    */
   getLanguage: function(languageCode) {
-    return this.supportedLanguageMap_.get(languageCode);
+    // If a languageCode is not found, try language without location.
+    return this.supportedLanguageMap_.get(languageCode) ||
+        this.supportedLanguageMap_.get(
+            this.getLanguageCodeWithoutRegion(languageCode));
   },
 
   /**
diff --git a/chrome/browser/resources/settings/people_page/change_picture.html b/chrome/browser/resources/settings/people_page/change_picture.html
index 941efeb..002b1f13 100644
--- a/chrome/browser/resources/settings/people_page/change_picture.html
+++ b/chrome/browser/resources/settings/people_page/change_picture.html
@@ -38,6 +38,7 @@
         top: calc(var(--cr-settings-header-height) +
                   var(--title-padding) +
                   var(--title-height));
+        user-select: none;
       }
 
       #picturePane {
diff --git a/chrome/browser/resources/settings/search_settings.js b/chrome/browser/resources/settings/search_settings.js
index 1d3cc52..3a11f43 100644
--- a/chrome/browser/resources/settings/search_settings.js
+++ b/chrome/browser/resources/settings/search_settings.js
@@ -33,6 +33,7 @@
     'CONTENT',
     'CR-ACTION-MENU',
     'CR-DIALOG',
+    'CR-ICON-BUTTON',
     'CR-SLIDER',
     'DIALOG',
     'IMG',
diff --git a/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py b/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py
index 2c69d28..46aeced 100755
--- a/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py
+++ b/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py
@@ -11,6 +11,10 @@
 import os
 import sys
 
+# Subdirectory to be copied to Google Cloud Storage. Contains a copy of the
+# generated proto under a versioned directory.
+GS_COPY_DIR = "gs_copy"
+
 # Import the binary proto generator. Walks up to the root of the source tree
 # which is six directories above, and finds the protobufs directory from there.
 proto_generator_path = os.path.normpath(os.path.join(os.path.abspath(__file__),
@@ -18,6 +22,11 @@
 sys.path.insert(0, proto_generator_path)
 from binary_proto_generator import BinaryProtoGenerator
 
+def MakeSubDirs(outfile):
+  """ Make the subdirectories needed to create file |outfile| """
+  dirname = os.path.dirname(outfile)
+  if not os.path.exists(dirname):
+    os.makedirs(dirname)
 
 class SSLErrorAssistantProtoGenerator(BinaryProtoGenerator):
   def ImportProtoModule(self):
@@ -38,7 +47,21 @@
   def ProcessPb(self, opts, pb):
     binary_pb_str = pb.SerializeToString()
     outfile = os.path.join(opts.outdir, opts.outbasename)
-    open(outfile, 'wb').write(binary_pb_str)
+
+    # Write two copies of the proto:
+    # 1. Under the root of the gen directory for .grd files to refer to
+    #    (./ssl_error_assistant/ssl_error_assistant.pb)
+    # 2. Under a versioned directory for the proto pusher to refer to
+    #    (./ssl_error_assistant/gs_copy/<version>/all/ssl_error_assistant.pb)
+    outfile = os.path.join(opts.outdir, opts.outbasename)
+    with open(outfile, 'wb') as f:
+      f.write(binary_pb_str)
+
+    outfile_copy = os.path.join(opts.outdir, GS_COPY_DIR, str(pb.version_id),
+                                "all", opts.outbasename)
+    MakeSubDirs(outfile_copy)
+    with open(outfile_copy, 'wb') as f:
+      f.write(binary_pb_str)
 
 
 def main():
diff --git a/chrome/browser/resources/ssl/ssl_error_assistant/push_proto.py b/chrome/browser/resources/ssl/ssl_error_assistant/push_proto.py
new file mode 100755
index 0000000..b7727ee
--- /dev/null
+++ b/chrome/browser/resources/ssl/ssl_error_assistant/push_proto.py
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Build and push the {vers}/all/ssl_error_assistant.pb file to GCS so
+# that the component update system will pick it up and push it to users.
+# See README.md before running this.
+#
+# Requires ninja and gsutil to be in the user's path.
+
+import optparse
+import os
+import shutil
+import subprocess
+import sys
+
+
+DEST_BUCKET = 'gs://chrome-components-ssl-error-assistant'
+RESOURCE_SUBDIR = 'chrome/browser/resources/ssl/ssl_error_assistant'
+
+# Subdirectory to be copied to Google Cloud Storage. Contains a copy of the
+# generated proto under a versioned directory.
+GS_COPY_DIR = "gs_copy"
+
+# TODO(meacer): This is pretty much a duplicate of
+#               chrome/browser/safe_browsing/push_file_type_proto.py. Consider
+#               refactoring and reusing code.
+def main():
+  parser = optparse.OptionParser()
+  parser.add_option('-d', '--dir',
+                    help='An up-to-date GN/Ninja build directory, '
+                    'such as ./out/Debug')
+
+  (opts, _) = parser.parse_args()
+  if opts.dir is None:
+    parser.print_help()
+    return 1
+
+  # Clear out the target dir before we build so we can be sure we've got
+  # the freshest version.
+  target_dir = os.path.join(opts.dir, "gen", RESOURCE_SUBDIR)
+  if os.path.isdir(target_dir):
+    shutil.rmtree(target_dir)
+
+  gn_command = ['ninja',
+                '-C', opts.dir,
+                RESOURCE_SUBDIR + ':make_ssl_error_assistant_protobuf']
+  print "Running the following"
+  print "   " + (' '.join(gn_command))
+  if subprocess.call(gn_command):
+    print "Ninja failed."
+    return 1
+
+  # Use the versioned files under the copy directory to push to the GCS bucket.
+  copy_dir = os.path.join(target_dir, GS_COPY_DIR)
+  os.chdir(copy_dir)
+
+  # Sanity check that there is a versioned copy under the directory.
+  dirs = os.listdir('.')
+  assert len(dirs) == 1 and dirs[0].isdigit(), (
+      "There must be a single versioned dir under " + copy_dir)
+
+  # Push the files with their directories, in the form
+  #   {vers}/{platform}/download_file_types.pb
+  # Don't overwrite existing files, in case we forgot to increment the
+  # version.
+  version_dir = dirs[0]
+  command = ['gsutil', 'cp', '-Rn', version_dir, DEST_BUCKET]
+
+  print '\nGoing to run the following command'
+  print '   ', ' '.join(command)
+  print '\nIn directory'
+  print '   ', copy_dir
+  print '\nWhich should push the following files'
+  expected_files = [os.path.join(dp, f) for dp, _, fn in
+                    os.walk(version_dir) for f in fn]
+  for f in expected_files:
+    print '   ', f
+
+  shall = raw_input('\nAre you sure (y/N) ').lower() == 'y'
+  if not shall:
+    print 'aborting'
+    return 1
+  return subprocess.call(command)
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/chrome/browser/sessions/session_service_unittest.cc b/chrome/browser/sessions/session_service_unittest.cc
index 81b2f19c..f4fa62a 100644
--- a/chrome/browser/sessions/session_service_unittest.cc
+++ b/chrome/browser/sessions/session_service_unittest.cc
@@ -681,7 +681,7 @@
   for (int i = 0; i < 5; ++i) {
     SerializedNavigationEntry nav =
         SerializedNavigationEntryTestHelper::CreateNavigation(
-            base_url + base::IntToString(i), "a");
+            base_url + base::NumberToString(i), "a");
     nav.set_index(i);
     UpdateNavigation(window_id, tab_id, nav, (i == 3));
   }
@@ -714,11 +714,11 @@
   sessions::SessionTab* tab = windows[0]->tabs[0].get();
   ASSERT_EQ(1, tab->current_navigation_index);
   EXPECT_EQ(3U, tab->navigations.size());
-  EXPECT_EQ(GURL(base_url + base::IntToString(0)),
+  EXPECT_EQ(GURL(base_url + base::NumberToString(0)),
             tab->navigations[0].virtual_url());
-  EXPECT_EQ(GURL(base_url + base::IntToString(3)),
+  EXPECT_EQ(GURL(base_url + base::NumberToString(3)),
             tab->navigations[1].virtual_url());
-  EXPECT_EQ(GURL(base_url + base::IntToString(4)),
+  EXPECT_EQ(GURL(base_url + base::NumberToString(4)),
             tab->navigations[2].virtual_url());
 }
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 3251029..6aaf3df9 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -2644,6 +2644,8 @@
       "views/omnibox/omnibox_text_view.h",
       "views/omnibox/omnibox_view_views.cc",
       "views/omnibox/omnibox_view_views.h",
+      "views/omnibox/remove_suggestion_bubble.cc",
+      "views/omnibox/remove_suggestion_bubble.h",
       "views/omnibox/rounded_omnibox_results_frame.cc",
       "views/omnibox/rounded_omnibox_results_frame.h",
       "views/overlay/back_to_tab_image_button.cc",
diff --git a/chrome/browser/ui/ash/launcher/launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
index 087f6f4..bf468a3 100644
--- a/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
+++ b/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
@@ -93,7 +93,7 @@
     case ash::MENU_OPEN_NEW:
       // Use a copy of the id to avoid crashes, as this menu's owner will be
       // destroyed if LaunchApp replaces the ShelfItemDelegate instance.
-      controller_->LaunchApp(ash::ShelfID(item_.id), ash::LAUNCH_FROM_UNKNOWN,
+      controller_->LaunchApp(ash::ShelfID(item_.id), ash::LAUNCH_FROM_SHELF,
                              ui::EF_NONE, display_id_);
       break;
     case ash::MENU_CLOSE:
diff --git a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
index c47c0ca..a8201af 100644
--- a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
+++ b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
@@ -249,7 +249,8 @@
   AppLaunchParams params = CreateAppLaunchParamsWithEventFlags(
       profile_, extension, event_flags, extensions::SOURCE_APP_LAUNCHER,
       display_id);
-  if (source != ash::LAUNCH_FROM_UNKNOWN &&
+  if ((source == ash::LAUNCH_FROM_APP_LIST ||
+       source == ash::LAUNCH_FROM_APP_LIST_SEARCH) &&
       app_id == extensions::kWebStoreAppId) {
     // Get the corresponding source string.
     std::string source_value = GetSourceFromAppListSource(source);
diff --git a/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc b/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc
index 12f81403..a6c79f7 100644
--- a/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc
+++ b/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc
@@ -53,7 +53,7 @@
   iph_service_->TabReopened();
 
   if (command_id == AppMenuModel::kMinRecentTabsCommandId) {
-    DCHECK_EQ(StepAtDismissal::kBubbleShown, promo_step_);
+    DCHECK_EQ(StepAtDismissal::kMenuOpened, promo_step_);
     promo_step_ = StepAtDismissal::kTabReopened;
   }
 }
@@ -71,6 +71,9 @@
   // Close the promo bubble since it doesn't automatically close on click.
   promo_bubble_->GetWidget()->Close();
 
+  // Stop showing promo on app menu button.
+  browser_view_->toolbar()->app_menu_button()->SetPromoFeature(base::nullopt);
+
   promo_step_ = StepAtDismissal::kMenuOpened;
 }
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index 61802883..cab2fb66 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -13,6 +13,7 @@
 #include "base/macros.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/omnibox/omnibox_theme.h"
@@ -35,6 +36,7 @@
 #include "ui/base/theme_provider.h"
 #include "ui/events/event.h"
 #include "ui/gfx/paint_vector_icon.h"
+#include "ui/views/controls/menu/menu_runner.h"
 
 #if defined(OS_WIN)
 #include "base/win/atl.h"
@@ -59,6 +61,14 @@
       omnibox::kKeywordSearchIcon, GetLayoutConstant(LOCATION_BAR_ICON_SIZE),
       GetColor(OmniboxPart::RESULTS_ICON)));
   keyword_view_->icon()->SizeToPreferredSize();
+
+  if (base::FeatureList::IsEnabled(
+          omnibox::kOmniboxContextMenuForSuggestions)) {
+    // TODO(tommycli): Replace this with the real translated string from UX.
+    context_menu_contents_.AddItem(COMMAND_REMOVE_SUGGESTION,
+                                   base::ASCIIToUTF16("Remove suggestion..."));
+    set_context_menu_controller(this);
+  }
 }
 
 OmniboxResultView::~OmniboxResultView() {}
@@ -387,6 +397,44 @@
   SchedulePaint();
 }
 
+void OmniboxResultView::ShowContextMenuForView(views::View* source,
+                                               const gfx::Point& point,
+                                               ui::MenuSourceType source_type) {
+  // Deferred unhover of the result until the context menu is closed.
+  // If the mouse is still over the result when the context menu is closed, the
+  // View will receive an OnMouseMoved call anyways, which sets hover to true.
+  base::RepeatingClosure set_hovered_false = base::BindRepeating(
+      &OmniboxResultView::SetHovered, weak_factory_.GetWeakPtr(), false);
+
+  context_menu_runner_ = std::make_unique<views::MenuRunner>(
+      &context_menu_contents_,
+      views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU,
+      set_hovered_false);
+  context_menu_runner_->RunMenuAt(GetWidget(), nullptr,
+                                  gfx::Rect(point, gfx::Size()),
+                                  views::MENU_ANCHOR_TOPLEFT, source_type);
+
+  // Opening the context menu unsets the hover state, but we still want the
+  // result 'hovered' as long as the context menu is open.
+  SetHovered(true);
+}
+
+// ui::SimpleMenuModel::Delegate overrides:
+bool OmniboxResultView::IsCommandIdChecked(int command_id) const {
+  return false;
+}
+
+bool OmniboxResultView::IsCommandIdEnabled(int command_id) const {
+  DCHECK_EQ(COMMAND_REMOVE_SUGGESTION, command_id);
+  return match_.SupportsDeletion();
+}
+
+void OmniboxResultView::ExecuteCommand(int command_id, int event_flags) {
+  DCHECK_EQ(COMMAND_REMOVE_SUGGESTION, command_id);
+
+  // TODO(tommycli): Launch modal bubble to confirm removing the suggestion.
+}
+
 void OmniboxResultView::ProvideButtonFocusHint() {
   suggestion_tab_switch_button_->ProvideFocusHint();
 }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.h b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
index 19153bd..848803d0 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
@@ -10,14 +10,17 @@
 #include <utility>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "components/omnibox/browser/autocomplete_match.h"
 #include "components/omnibox/browser/suggestion_answer.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/models/simple_menu_model.h"
 #include "ui/base/window_open_disposition.h"
 #include "ui/gfx/animation/animation_delegate.h"
 #include "ui/gfx/animation/slide_animation.h"
 #include "ui/gfx/font_list.h"
 #include "ui/gfx/geometry/rect.h"
+#include "ui/views/context_menu_controller.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/view.h"
@@ -33,9 +36,15 @@
 class Image;
 }
 
+namespace views {
+class MenuRunner;
+}
+
 class OmniboxResultView : public views::View,
                           private gfx::AnimationDelegate,
-                          public views::ButtonListener {
+                          public views::ButtonListener,
+                          public views::ContextMenuController,
+                          public ui::SimpleMenuModel::Delegate {
  public:
   OmniboxResultView(OmniboxPopupContentsView* model, int model_index);
   ~OmniboxResultView() override;
@@ -86,7 +95,20 @@
   gfx::Size CalculatePreferredSize() const override;
   void OnNativeThemeChanged(const ui::NativeTheme* theme) override;
 
+  // views::ContextMenuController:
+  void ShowContextMenuForView(views::View* source,
+                              const gfx::Point& point,
+                              ui::MenuSourceType source_type) override;
+
+  // ui::SimpleMenuModel::Delegate overrides:
+  bool IsCommandIdChecked(int command_id) const override;
+  bool IsCommandIdEnabled(int command_id) const override;
+  void ExecuteCommand(int command_id, int event_flags) override;
+
  private:
+  // TODO(tommycli): This will be removed once we get final strings from UX.
+  enum CommandID { COMMAND_REMOVE_SUGGESTION };
+
   // Returns the height of the text portion of the result view.
   int GetTextHeight() const;
 
@@ -120,11 +142,17 @@
   // For sliding in the keyword search.
   std::unique_ptr<gfx::SlideAnimation> animation_;
 
+  // Context menu related members.
+  ui::SimpleMenuModel context_menu_contents_{this};
+  std::unique_ptr<views::MenuRunner> context_menu_runner_;
+
   // Weak pointers for easy reference.
   OmniboxMatchCellView* suggestion_view_;  // The leading (or left) view.
   OmniboxMatchCellView* keyword_view_;     // The trailing (or right) view.
   std::unique_ptr<OmniboxTabSwitchButton> suggestion_tab_switch_button_;
 
+  base::WeakPtrFactory<OmniboxResultView> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(OmniboxResultView);
 };
 
diff --git a/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.cc b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.cc
new file mode 100644
index 0000000..49b8b774
--- /dev/null
+++ b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.cc
@@ -0,0 +1,71 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/omnibox/browser/autocomplete_match.h"
+#include "components/strings/grit/components_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/views/bubble/bubble_dialog_delegate_view.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/layout/box_layout.h"
+
+namespace {
+
+class RemoveSuggestionBubbleDialogDelegateView
+    : public views::BubbleDialogDelegateView {
+ public:
+  RemoveSuggestionBubbleDialogDelegateView(views::View* anchor_view,
+                                           const AutocompleteMatch& match,
+                                           base::OnceClosure remove_closure)
+      : views::BubbleDialogDelegateView(anchor_view,
+                                        views::BubbleBorder::TOP_LEFT),
+        match_(match),
+        remove_closure_(std::move(remove_closure)) {
+    auto* layout_manager = SetLayoutManager(
+        std::make_unique<views::BoxLayout>(views::BoxLayout::kVertical));
+    layout_manager->set_cross_axis_alignment(
+        views::BoxLayout::CROSS_AXIS_ALIGNMENT_START);
+    // TODO(tommycli): Replace this with the real translated string from UX.
+    AddChildView(new views::Label(
+        base::ASCIIToUTF16("Remove suggestion from history?")));
+  }
+
+  // views::DialogDelegateView:
+  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override {
+    // TODO(tommycli): Replace this with the real translated string from UX.
+    if (button == ui::DIALOG_BUTTON_OK)
+      return base::ASCIIToUTF16("Remove");
+
+    return l10n_util::GetStringUTF16(IDS_CANCEL);
+  }
+  bool Accept() override {
+    std::move(remove_closure_).Run();
+    return true;
+  }
+
+  // views::WidgetDelegate:
+  ui::ModalType GetModalType() const override { return ui::MODAL_TYPE_WINDOW; }
+  base::string16 GetWindowTitle() const override { return match_.contents; }
+
+ private:
+  AutocompleteMatch match_;
+  base::OnceClosure remove_closure_;
+};
+
+}  // namespace
+
+void ShowRemoveSuggestion(views::View* anchor_view,
+                          const AutocompleteMatch& match,
+                          base::OnceClosure remove_closure) {
+  views::BubbleDialogDelegateView::CreateBubble(
+      new RemoveSuggestionBubbleDialogDelegateView(anchor_view, match,
+                                                   std::move(remove_closure)))
+      ->Show();
+}
diff --git a/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h
new file mode 100644
index 0000000..21a4f209
--- /dev/null
+++ b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h
@@ -0,0 +1,23 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_OMNIBOX_REMOVE_SUGGESTION_BUBBLE_H_
+#define CHROME_BROWSER_UI_VIEWS_OMNIBOX_REMOVE_SUGGESTION_BUBBLE_H_
+
+#include "base/callback_forward.h"
+
+struct AutocompleteMatch;
+
+namespace views {
+class View;
+}
+
+// Shows a confirmation bubble to remove a suggestion represented by |match|.
+// If the user clicks Remove, then |remove_closure| is executed, and the bubble
+// is closed.
+void ShowRemoveSuggestion(views::View* anchor_view,
+                          const AutocompleteMatch& match,
+                          base::OnceClosure remove_closure);
+
+#endif  // CHROME_BROWSER_UI_VIEWS_OMNIBOX_REMOVE_SUGGESTION_BUBBLE_H_
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
index a5b1590f..21904b5 100644
--- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc
+++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -815,7 +815,7 @@
     else
       target_tabstrip->GetWidget()->SetCapture(attached_tabstrip_);
 
-#if !defined(OS_LINUX)
+#if !defined(OS_LINUX) || defined(OS_CHROMEOS)
     // EndMoveLoop is going to snap the window back to its original location.
     // Hide it so users don't see this. Hiding a window in Linux aura causes
     // it to lose capture so skip it.
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
index af922e1..4a025ea 100644
--- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
+++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
@@ -32,12 +32,16 @@
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/theme_provider.h"
 #include "ui/base/ui_base_features.h"
+#include "ui/compositor/paint_recorder.h"
+#include "ui/gfx/animation/animation_delegate.h"
+#include "ui/gfx/animation/throb_animation.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/animation/ink_drop.h"
 #include "ui/views/animation/ink_drop_highlight.h"
+#include "ui/views/animation/ink_drop_mask.h"
 #include "ui/views/animation/ink_drop_state.h"
 #include "ui/views/controls/button/label_button_border.h"
 #include "ui/views/metrics.h"
@@ -58,6 +62,65 @@
 // maybe move this into theme system.
 constexpr SkColor kFeaturePromoHighlightColor = gfx::kGoogleBlue600;
 
+// Cycle duration of ink drop pulsing animation used for in-product help.
+constexpr base::TimeDelta kFeaturePromoPulseDuration =
+    base::TimeDelta::FromMilliseconds(800);
+
+// Max inset for pulsing animation.
+constexpr float kFeaturePromoPulseInsetDip = 3.0f;
+
+// An InkDropMask used to animate the size of the BrowserAppMenuButton's ink
+// drop. This is used when showing in-product help.
+class PulsingInkDropMask : public gfx::AnimationDelegate,
+                           public views::InkDropMask {
+ public:
+  PulsingInkDropMask(const gfx::Size& layer_size,
+                     float normal_corner_radius,
+                     float max_inset)
+      : views::InkDropMask(layer_size),
+        normal_corner_radius_(normal_corner_radius),
+        max_inset_(max_inset),
+        throb_animation_(this) {
+    throb_animation_.SetThrobDuration(
+        kFeaturePromoPulseDuration.InMilliseconds());
+    throb_animation_.StartThrobbing(-1);
+  }
+
+ private:
+  // views::InkDropMask:
+  void OnPaintLayer(const ui::PaintContext& context) override {
+    cc::PaintFlags flags;
+    flags.setStyle(cc::PaintFlags::kFill_Style);
+    flags.setAntiAlias(true);
+
+    ui::PaintRecorder recorder(context, layer()->size());
+
+    gfx::RectF bounds(layer()->bounds());
+
+    const float current_inset =
+        throb_animation_.CurrentValueBetween(0.0f, max_inset_);
+    bounds.Inset(gfx::InsetsF(current_inset));
+    const float corner_radius = normal_corner_radius_ - current_inset;
+
+    recorder.canvas()->DrawRoundRect(bounds, corner_radius, flags);
+  }
+
+  // gfx::AnimationDelegate:
+  void AnimationProgressed(const gfx::Animation* animation) override {
+    DCHECK_EQ(animation, &throb_animation_);
+    layer()->SchedulePaint(gfx::Rect(layer()->size()));
+  }
+
+  // Normal corner radius of the ink drop without animation. This is also the
+  // corner radius at the largest instant of the animation.
+  const float normal_corner_radius_;
+
+  // Max inset, used at the smallest instant of the animation.
+  const float max_inset_;
+
+  gfx::ThrobAnimation throb_animation_;
+};
+
 }  // namespace
 #endif
 
@@ -106,11 +169,30 @@
     return;
 
   promo_feature_ = promo_feature;
-  // We override GetInkDropBaseColor below when |promo_feature_| is non-null.
-  // This sets the ink drop into the activated state, which will highlight it in
-  // the desired color.
-  GetInkDrop()->AnimateToState(promo_feature_ ? views::InkDropState::ACTIVATED
-                                              : views::InkDropState::HIDDEN);
+
+  // We override GetInkDropBaseColor() and CreateInkDropMask(), returning the
+  // promo values if we are showing an in-product help promo. Calling
+  // HostSizeChanged() will force the new mask and color to be fetched.
+  //
+  // TODO(collinbaker): Consider adding explicit way to recreate mask instead of
+  // relying on HostSizeChanged() to do so.
+  GetInkDrop()->HostSizeChanged(size());
+
+  views::InkDropState next_state;
+  if (promo_feature_ || IsMenuShowing()) {
+    // If we are showing a promo, we must use the ACTIVATED state to show the
+    // highlight. Otherwise, if the menu is currently showing, we need to keep
+    // the ink drop in the ACTIVATED state.
+    next_state = views::InkDropState::ACTIVATED;
+  } else {
+    // If we are not showing a promo and the menu is hidden, we use the
+    // DEACTIVATED state.
+    next_state = views::InkDropState::DEACTIVATED;
+    // TODO(collinbaker): this is brittle since we don't know if something else
+    // should keep this ACTIVATED or in some other state. Consider adding code
+    // to track the correct state and restore to that.
+  }
+  GetInkDrop()->AnimateToState(next_state);
 
   UpdateIcon();
   SchedulePaint();
@@ -293,6 +375,20 @@
   return CreateToolbarInkDropHighlight(this);
 }
 
+std::unique_ptr<views::InkDropMask> BrowserAppMenuButton::CreateInkDropMask()
+    const {
+#if BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+  if (promo_feature_) {
+    const float corner_radius = height() / 2.0f;
+    return std::make_unique<PulsingInkDropMask>(ink_drop_container()->size(),
+                                                corner_radius,
+                                                kFeaturePromoPulseInsetDip);
+  }
+#endif
+
+  return AppMenuButton::CreateInkDropMask();
+}
+
 SkColor BrowserAppMenuButton::GetInkDropBaseColor() const {
 #if BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
   if (promo_feature_)
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h b/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
index 3d5b959a..6414e67 100644
--- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
+++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
@@ -83,6 +83,7 @@
   int OnPerformDrop(const ui::DropTargetEvent& event) override;
   std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
       const override;
+  std::unique_ptr<views::InkDropMask> CreateInkDropMask() const override;
   SkColor GetInkDropBaseColor() const override;
 
   AppMenuIconController::TypeAndSeverity type_and_severity_{
diff --git a/chrome/browser/unified_consent/unified_consent_browsertest.cc b/chrome/browser/unified_consent/unified_consent_browsertest.cc
index 4b25f2f..5c10df77 100644
--- a/chrome/browser/unified_consent/unified_consent_browsertest.cc
+++ b/chrome/browser/unified_consent/unified_consent_browsertest.cc
@@ -96,18 +96,9 @@
       metrics::SettingsHistogramValue::kNone, 0);
   histogram_tester_.ExpectBucketCount(
       "UnifiedConsent.SyncAndGoogleServicesSettings",
-      metrics::SettingsHistogramValue::kAllServicesWereEnabled, 1);
-  histogram_tester_.ExpectBucketCount(
-      "UnifiedConsent.SyncAndGoogleServicesSettings",
       metrics::SettingsHistogramValue::kUrlKeyedAnonymizedDataCollection, 1);
-  histogram_tester_.ExpectBucketCount(
-      "UnifiedConsent.SyncAndGoogleServicesSettings",
-      metrics::SettingsHistogramValue::kSafeBrowsingExtendedReporting, 0);
-  histogram_tester_.ExpectBucketCount(
-      "UnifiedConsent.SyncAndGoogleServicesSettings",
-      metrics::SettingsHistogramValue::kSpellCheck, 0);
   histogram_tester_.ExpectTotalCount(
-      "UnifiedConsent.SyncAndGoogleServicesSettings", 2);
+      "UnifiedConsent.SyncAndGoogleServicesSettings", 1);
 }
 
 }  // namespace
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index e1ed9233..52f91f4 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -707,16 +707,10 @@
 // Android authentication account type for SPNEGO authentication
 const char kAuthAndroidNegotiateAccountType[] = "auth-spnego-account-type";
 
-// Disables Contextual Search.
-const char kDisableContextualSearch[] = "disable-contextual-search";
-
 // Enable the accessibility tab switcher.
 const char kEnableAccessibilityTabSwitcher[] =
     "enable-accessibility-tab-switcher";
 
-// Enables Contextual Search.
-const char kEnableContextualSearch[] = "enable-contextual-search";
-
 // Enables a hung renderer InfoBar allowing the user to close or wait on
 // unresponsive web content.
 const char kEnableHungRendererInfoBar[] = "enable-hung-renderer-infobar";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 88f94861..12d77455 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -208,9 +208,7 @@
 
 #if defined(OS_ANDROID)
 extern const char kAuthAndroidNegotiateAccountType[];
-extern const char kDisableContextualSearch[];
 extern const char kEnableAccessibilityTabSwitcher[];
-extern const char kEnableContextualSearch[];
 extern const char kEnableHungRendererInfoBar[];
 extern const char kForceShowUpdateMenuBadge[];
 extern const char kForceShowUpdateMenuItemCustomSummary[];
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java
index a68335b..c46f166f 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java
@@ -11,6 +11,7 @@
 import android.os.Build;
 import android.support.annotation.Nullable;
 
+import org.chromium.chrome.browser.notifications.ChromeNotification;
 import org.chromium.chrome.browser.notifications.NotificationManagerProxy;
 
 import java.util.ArrayList;
@@ -115,6 +116,12 @@
         mMutationCount++;
     }
 
+    @Override
+    public void notify(ChromeNotification notification) {
+        notify(notification.getMetadata().tag, notification.getMetadata().id,
+                notification.getNotification());
+    }
+
     private static String makeKey(int id, @Nullable String tag) {
         String key = Integer.toString(id);
         if (tag != null) key += KEY_SEPARATOR + tag;
diff --git a/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js b/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js
index 6743624..8329647a 100644
--- a/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js
+++ b/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js
@@ -279,17 +279,13 @@
     test('simple keyboard selection', function() {
       let focusedItem = items[0];
       assertEquals('0', focusedItem.getAttribute('tabindex'));
-      assertEquals(
-          '0',
-          focusedItem.$$('.more-vert-button button').getAttribute('tabindex'));
+      assertEquals(0, focusedItem.$.menuButton.tabIndex);
       focusedItem.focus();
 
       keydown(focusedItem, 'ArrowDown');
       focusedItem = items[1];
       assertEquals('0', focusedItem.getAttribute('tabindex'));
-      assertEquals(
-          '0',
-          focusedItem.$$('.more-vert-button button').getAttribute('tabindex'));
+      assertEquals(0, focusedItem.$.menuButton.tabIndex);
       assertDeepEquals(['3'], normalizeIterable(store.data.selection.items));
 
       keydown(focusedItem, 'ArrowUp');
@@ -444,10 +440,10 @@
       // Iron-list attempts to focus the whole <bookmarks-item> when pressing
       // enter on the menu button. This checks that we block this behavior
       // during keydown on <bookmarks-list>.
-      const button = items[0].$$('.more-vert-button button');
+      const button = items[0].$.menuButton;
       button.focus();
       keydown(button, 'Enter');
-
+      commandManager.closeCommandMenu();
       assertEquals(button, items[0].root.activeElement);
     });
   });
diff --git a/chrome/test/data/webui/bookmarks/item_test.js b/chrome/test/data/webui/bookmarks/item_test.js
index 5cca4e7..2f0837c 100644
--- a/chrome/test/data/webui/bookmarks/item_test.js
+++ b/chrome/test/data/webui/bookmarks/item_test.js
@@ -41,7 +41,7 @@
   });
 
   test('pressing the menu button selects the item', function() {
-    MockInteractions.tap(item.$$('.more-vert-button'));
+    item.$.menuButton.click();
     assertDeepEquals(
         bookmarks.actions.selectItem('2', store.data, {
           clear: true,
diff --git a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js
index 7bcafd2..2462a811 100644
--- a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js
+++ b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js
@@ -425,6 +425,29 @@
   mocha.run();
 });
 
+/**
+ * @constructor
+ * @extends {CrElementsBrowserTest}
+ */
+function CrElementsIconButtonTest() {}
+
+CrElementsIconButtonTest.prototype = {
+  __proto__: CrElementsBrowserTest.prototype,
+
+  /** @override */
+  browsePreload:
+      'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html',
+
+  /** @override */
+  extraLibraries: CrElementsBrowserTest.prototype.extraLibraries.concat([
+    '../settings/test_util.js',
+    'cr_icon_button_tests.js',
+  ]),
+};
+
+TEST_F('CrElementsIconButtonTest', 'All', function() {
+  mocha.run();
+});
 
 GEN('#if defined(OS_CHROMEOS)');
 /**
diff --git a/chrome/test/data/webui/cr_elements/cr_icon_button_tests.js b/chrome/test/data/webui/cr_elements/cr_icon_button_tests.js
new file mode 100644
index 0000000..09136368
--- /dev/null
+++ b/chrome/test/data/webui/cr_elements/cr_icon_button_tests.js
@@ -0,0 +1,83 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+suite('cr-icon-button', function() {
+  let button;
+
+  setup(async () => {
+    PolymerTest.clearBody();
+    button = document.createElement('cr-icon-button');
+    document.body.appendChild(button);
+    await PolymerTest.flushTasks();
+  });
+
+  test('enabled/disabled', () => {
+    assertEquals('0', button.getAttribute('tabindex'));
+    assertEquals('false', button.getAttribute('aria-disabled'));
+    button.disabled = true;
+    assertEquals('-1', button.getAttribute('tabindex'));
+    assertEquals('true', button.getAttribute('aria-disabled'));
+  });
+
+  test('focus', () => {
+    if (cr.isMac) {
+      return;
+    }
+    button.focus();
+    assertTrue(button.getRipple().holdDown);
+    button.disabled = true;
+    assertFalse(button.getRipple().holdDown);
+  });
+
+  test('iron-icon is created, reused and removed based on |ironIcon|', () => {
+    assertFalse(!!button.$$('iron-icon'));
+    button.ironIcon = 'icon-key';
+    assertTrue(!!button.$$('iron-icon'));
+    button.$$('iron-icon').icon = 'icon-key';
+    button.ironIcon = 'another-icon-key';
+    assertEquals(1, button.shadowRoot.querySelectorAll('iron-icon').length);
+    button.$$('iron-icon').icon = 'another-icon-key';
+    button.ironIcon = '';
+    assertFalse(!!button.$$('iron-icon'));
+  });
+
+  test('enter emits click event', async () => {
+    const wait = test_util.eventToPromise('click', button);
+    MockInteractions.pressAndReleaseKeyOn(button, -1, [], 'Enter');
+    await wait;
+  });
+
+  test('space emits click event', async () => {
+    const wait = test_util.eventToPromise('click', button);
+    MockInteractions.pressAndReleaseKeyOn(button, -1, [], ' ');
+    await wait;
+  });
+
+  test('disabled prevents UI and programmatic clicks', async () => {
+    let clickCount = 0;
+    const clickHandler = () => {
+      clickCount++;
+    };
+    button.addEventListener('click', clickHandler);
+
+    button.disabled = true;
+    await PolymerTest.flushTasks();
+    MockInteractions.pressAndReleaseKeyOn(button, -1, [], 'Enter');
+    MockInteractions.pressAndReleaseKeyOn(button, -1, [], ' ');
+    MockInteractions.downAndUp(button);
+    button.click();
+    await PolymerTest.flushTasks();
+    assertEquals(0, clickCount);
+
+    button.disabled = false;
+    await PolymerTest.flushTasks();
+    MockInteractions.pressAndReleaseKeyOn(button, -1, [], 'Enter');
+    MockInteractions.pressAndReleaseKeyOn(button, -1, [], ' ');
+    MockInteractions.downAndUp(button);
+    button.click();
+    await PolymerTest.flushTasks();
+    assertEquals(4, clickCount);
+    button.removeEventListener('click', clickHandler);
+  });
+});
diff --git a/chrome/test/data/webui/settings/search_settings_test.js b/chrome/test/data/webui/settings/search_settings_test.js
index ee3ee262..dfa8bbbc 100644
--- a/chrome/test/data/webui/settings/search_settings_test.js
+++ b/chrome/test/data/webui/settings/search_settings_test.js
@@ -108,6 +108,7 @@
       document.body.innerHTML = `<settings-section hidden-by-search>
              <cr-action-menu>${text}</cr-action-menu>
              <cr-dialog>${text}</cr-dialog>
+             <cr-icon-button>${text}</cr-icon-button>
              <cr-slider>${text}</cr-slider>
              <dialog>${text}</dialog>
              <iron-icon>${text}</iron-icon>
diff --git a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
index 56b2da9..f00a481 100644
--- a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
+++ b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
@@ -1081,9 +1081,9 @@
       case rsaKey: {
         rv = l10n_util::GetStringFUTF8(
             IDS_CERT_RSA_PUBLIC_KEY_DUMP_FORMAT,
-            base::UintToString16(key->u.rsa.modulus.len * 8),
+            base::NumberToString16(key->u.rsa.modulus.len * 8),
             base::UTF8ToUTF16(ProcessRawBytes(&key->u.rsa.modulus)),
-            base::UintToString16(key->u.rsa.publicExponent.len * 8),
+            base::NumberToString16(key->u.rsa.publicExponent.len * 8),
             base::UTF8ToUTF16(ProcessRawBytes(&key->u.rsa.publicExponent)));
         break;
       }
diff --git a/chromecast/browser/android/cast_content_window_android.cc b/chromecast/browser/android/cast_content_window_android.cc
index 000da0f..e056bb4 100644
--- a/chromecast/browser/android/cast_content_window_android.cc
+++ b/chromecast/browser/android/cast_content_window_android.cc
@@ -114,6 +114,11 @@
       env, java_window_, static_cast<int>(visibility_priority));
 }
 
+void CastContentWindowAndroid::SetActivityContext(
+    base::Value activity_context) {}
+
+void CastContentWindowAndroid::SetHostContext(base::Value host_context) {}
+
 void CastContentWindowAndroid::NotifyVisibilityChange(
     VisibilityType visibility_type) {
   delegate_->OnVisibilityChange(visibility_type);
diff --git a/chromecast/browser/android/cast_content_window_android.h b/chromecast/browser/android/cast_content_window_android.h
index 79459199..ec1f320 100644
--- a/chromecast/browser/android/cast_content_window_android.h
+++ b/chromecast/browser/android/cast_content_window_android.h
@@ -34,6 +34,8 @@
   void RevokeScreenAccess() override;
   void EnableTouchInput(bool enabled) override;
   void RequestVisibility(VisibilityPriority visibility_priority) override;
+  void SetActivityContext(base::Value activity_context) override;
+  void SetHostContext(base::Value host_context) override;
   void NotifyVisibilityChange(VisibilityType visibility_type) override;
   void RequestMoveOut() override;
 
diff --git a/chromecast/browser/cast_content_window.h b/chromecast/browser/cast_content_window.h
index c5a6c81..712f3a2 100644
--- a/chromecast/browser/cast_content_window.h
+++ b/chromecast/browser/cast_content_window.h
@@ -194,6 +194,15 @@
   // change.
   virtual void RequestVisibility(VisibilityPriority visibility_priority) = 0;
 
+  // Provide activity-related metadata. This data should include information
+  // that is common for all activities, such as type.
+  // TODO(seantopping): Define a schema for this data.
+  virtual void SetActivityContext(base::Value activity_context) = 0;
+
+  // Use this to stash custom data for this class. This data will be visible to
+  // the window manager.
+  virtual void SetHostContext(base::Value host_context) = 0;
+
   // Notify the window that its visibility type has changed. This should only
   // ever be called by the window manager.
   // TODO(seantopping): Make this private to the window manager.
diff --git a/chromecast/browser/cast_content_window_aura.cc b/chromecast/browser/cast_content_window_aura.cc
index 5598bf4..d0eeff3 100644
--- a/chromecast/browser/cast_content_window_aura.cc
+++ b/chromecast/browser/cast_content_window_aura.cc
@@ -153,6 +153,10 @@
 void CastContentWindowAura::RequestVisibility(
     VisibilityPriority visibility_priority){};
 
+void CastContentWindowAura::SetActivityContext(base::Value activity_context) {}
+
+void CastContentWindowAura::SetHostContext(base::Value host_context) {}
+
 void CastContentWindowAura::NotifyVisibilityChange(
     VisibilityType visibility_type) {
   delegate_->OnVisibilityChange(visibility_type);
diff --git a/chromecast/browser/cast_content_window_aura.h b/chromecast/browser/cast_content_window_aura.h
index 0548ec8a..7ce1a23 100644
--- a/chromecast/browser/cast_content_window_aura.h
+++ b/chromecast/browser/cast_content_window_aura.h
@@ -37,6 +37,8 @@
   void GrantScreenAccess() override;
   void RevokeScreenAccess() override;
   void RequestVisibility(VisibilityPriority visibility_priority) override;
+  void SetActivityContext(base::Value activity_context) override;
+  void SetHostContext(base::Value host_context) override;
   void NotifyVisibilityChange(VisibilityType visibility_type) override;
   void RequestMoveOut() override;
   void EnableTouchInput(bool enabled) override;
diff --git a/chromecast/browser/cast_web_view.h b/chromecast/browser/cast_web_view.h
index 87f50a68..ef1139d 100644
--- a/chromecast/browser/cast_web_view.h
+++ b/chromecast/browser/cast_web_view.h
@@ -120,10 +120,6 @@
                                 CastWindowManager::WindowId z_order,
                                 VisibilityPriority initial_priority) = 0;
 
-  // Sets the activity context exposed to web view and content window. The exact
-  // format of context is defined by each activity.
-  virtual void SetContext(base::Value context) = 0;
-
   // Allows the page to be shown on the screen. The page cannot be shown on the
   // screen until this is called.
   virtual void GrantScreenAccess() = 0;
diff --git a/chromecast/browser/cast_web_view_default.cc b/chromecast/browser/cast_web_view_default.cc
index ee3ce58..5dc61d5 100644
--- a/chromecast/browser/cast_web_view_default.cc
+++ b/chromecast/browser/cast_web_view_default.cc
@@ -145,8 +145,6 @@
   web_contents_->Focus();
 }
 
-void CastWebViewDefault::SetContext(base::Value context) {}
-
 void CastWebViewDefault::GrantScreenAccess() {
   window_->GrantScreenAccess();
 }
diff --git a/chromecast/browser/cast_web_view_default.h b/chromecast/browser/cast_web_view_default.h
index f87f9a08..01d34d9 100644
--- a/chromecast/browser/cast_web_view_default.h
+++ b/chromecast/browser/cast_web_view_default.h
@@ -50,7 +50,6 @@
   void InitializeWindow(CastWindowManager* window_manager,
                         CastWindowManager::WindowId z_order,
                         VisibilityPriority initial_priority) override;
-  void SetContext(base::Value context) override;
   void GrantScreenAccess() override;
   void RevokeScreenAccess() override;
 
diff --git a/chromecast/browser/cast_web_view_extension.cc b/chromecast/browser/cast_web_view_extension.cc
index 742b7594..6f5a53f 100644
--- a/chromecast/browser/cast_web_view_extension.cc
+++ b/chromecast/browser/cast_web_view_extension.cc
@@ -69,8 +69,6 @@
   web_contents()->Focus();
 }
 
-void CastWebViewExtension::SetContext(base::Value context) {}
-
 void CastWebViewExtension::GrantScreenAccess() {
   window_->GrantScreenAccess();
 }
diff --git a/chromecast/browser/cast_web_view_extension.h b/chromecast/browser/cast_web_view_extension.h
index 5bb68b61..ff4c14d 100644
--- a/chromecast/browser/cast_web_view_extension.h
+++ b/chromecast/browser/cast_web_view_extension.h
@@ -51,7 +51,6 @@
   void InitializeWindow(CastWindowManager* window_manager,
                         CastWindowManager::WindowId z_order,
                         VisibilityPriority initial_priority) override;
-  void SetContext(base::Value context) override;
   void GrantScreenAccess() override;
   void RevokeScreenAccess() override;
 
diff --git a/chromeos/dbus/fake_cicerone_client.cc b/chromeos/dbus/fake_cicerone_client.cc
index b672f8c..7e8dc9c 100644
--- a/chromeos/dbus/fake_cicerone_client.cc
+++ b/chromeos/dbus/fake_cicerone_client.cc
@@ -114,6 +114,7 @@
 void FakeCiceroneClient::GetLinuxPackageInfo(
     const vm_tools::cicerone::LinuxPackageInfoRequest& request,
     DBusMethodCallback<vm_tools::cicerone::LinuxPackageInfoResponse> callback) {
+  most_recent_linux_package_info_request_ = request;
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
       base::BindOnce(std::move(callback), get_linux_package_info_response_));
@@ -123,18 +124,28 @@
     const vm_tools::cicerone::InstallLinuxPackageRequest& request,
     DBusMethodCallback<vm_tools::cicerone::InstallLinuxPackageResponse>
         callback) {
+  most_recent_install_linux_package_request_ = request;
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
       base::BindOnce(std::move(callback), install_linux_package_response_));
 }
 
+void FakeCiceroneClient::SetOnUninstallPackageOwningFileCallback(
+    UninstallPackageOwningFileCallback callback) {
+  uninstall_package_owning_file_callback_ = std::move(callback);
+}
+
 void FakeCiceroneClient::UninstallPackageOwningFile(
     const vm_tools::cicerone::UninstallPackageOwningFileRequest& request,
     DBusMethodCallback<vm_tools::cicerone::UninstallPackageOwningFileResponse>
         callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback),
-                                uninstall_package_owning_file_response_));
+  if (uninstall_package_owning_file_callback_) {
+    uninstall_package_owning_file_callback_.Run(request, std::move(callback));
+  } else {
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback),
+                                  uninstall_package_owning_file_response_));
+  }
 }
 
 void FakeCiceroneClient::WaitForServiceToBeAvailable(
@@ -278,4 +289,18 @@
   }
 }
 
+void FakeCiceroneClient::InstallLinuxPackageProgress(
+    const vm_tools::cicerone::InstallLinuxPackageProgressSignal& signal) {
+  for (auto& observer : observer_list_) {
+    observer.OnInstallLinuxPackageProgress(signal);
+  }
+}
+
+void FakeCiceroneClient::UninstallPackageProgress(
+    const vm_tools::cicerone::UninstallPackageProgressSignal& signal) {
+  for (auto& observer : observer_list_) {
+    observer.OnUninstallPackageProgress(signal);
+  }
+}
+
 }  // namespace chromeos
diff --git a/chromeos/dbus/fake_cicerone_client.h b/chromeos/dbus/fake_cicerone_client.h
index 4454cea..2b6cc20 100644
--- a/chromeos/dbus/fake_cicerone_client.h
+++ b/chromeos/dbus/fake_cicerone_client.h
@@ -15,6 +15,10 @@
 class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient
     : public CiceroneClient {
  public:
+  using UninstallPackageOwningFileCallback = base::RepeatingCallback<void(
+      const vm_tools::cicerone::UninstallPackageOwningFileRequest&,
+      DBusMethodCallback<
+          vm_tools::cicerone::UninstallPackageOwningFileResponse>)>;
   FakeCiceroneClient();
   ~FakeCiceroneClient() override;
 
@@ -86,9 +90,15 @@
       DBusMethodCallback<vm_tools::cicerone::InstallLinuxPackageResponse>
           callback) override;
 
+  // Sets a callback to be called during any call to UninstallPackageOwningFile.
+  void SetOnUninstallPackageOwningFileCallback(
+      UninstallPackageOwningFileCallback callback);
+
   // Fake version of the method that uninstalls an application inside a running
-  // Container. |callback| is called after the method call finishes. This does
-  // not cause progress events to be fired.
+  // Container. If SetOnUninstallPackageOwningFileCallback has been called, it
+  // just triggers that callback. Otherwise, it generates a task to call
+  // |callback| with the response from
+  // set_uninstall_package_owning_file_response.
   void UninstallPackageOwningFile(
       const vm_tools::cicerone::UninstallPackageOwningFileRequest& request,
       DBusMethodCallback<vm_tools::cicerone::UninstallPackageOwningFileResponse>
@@ -216,12 +226,22 @@
     container_app_icon_response_ = container_app_icon_response;
   }
 
+  const vm_tools::cicerone::LinuxPackageInfoRequest&
+  get_most_recent_linux_package_info_request() const {
+    return most_recent_linux_package_info_request_;
+  }
+
   void set_linux_package_info_response(
       const vm_tools::cicerone::LinuxPackageInfoResponse&
           get_linux_package_info_response) {
     get_linux_package_info_response_ = get_linux_package_info_response;
   }
 
+  const vm_tools::cicerone::InstallLinuxPackageRequest&
+  get_most_recent_install_linux_package_request() const {
+    return most_recent_install_linux_package_request_;
+  }
+
   void set_install_linux_package_response(
       const vm_tools::cicerone::InstallLinuxPackageResponse&
           install_linux_package_response) {
@@ -284,6 +304,10 @@
       const vm_tools::cicerone::ExportLxdContainerProgressSignal& signal);
   void NotifyImportLxdContainerProgress(
       const vm_tools::cicerone::ImportLxdContainerProgressSignal& signal);
+  void InstallLinuxPackageProgress(
+      const vm_tools::cicerone::InstallLinuxPackageProgressSignal& signal);
+  void UninstallPackageProgress(
+      const vm_tools::cicerone::UninstallPackageProgressSignal& signal);
 
  protected:
   void Init(dbus::Bus* bus) override {}
@@ -310,7 +334,11 @@
   vm_tools::cicerone::LaunchContainerApplicationResponse
       launch_container_application_response_;
   vm_tools::cicerone::ContainerAppIconResponse container_app_icon_response_;
+  vm_tools::cicerone::LinuxPackageInfoRequest
+      most_recent_linux_package_info_request_;
   vm_tools::cicerone::LinuxPackageInfoResponse get_linux_package_info_response_;
+  vm_tools::cicerone::InstallLinuxPackageRequest
+      most_recent_install_linux_package_request_;
   vm_tools::cicerone::InstallLinuxPackageResponse
       install_linux_package_response_;
   vm_tools::cicerone::UninstallPackageOwningFileResponse
@@ -325,6 +353,8 @@
   vm_tools::cicerone::ExportLxdContainerResponse export_lxd_container_response_;
   vm_tools::cicerone::ImportLxdContainerResponse import_lxd_container_response_;
 
+  UninstallPackageOwningFileCallback uninstall_package_owning_file_callback_;
+
   base::ObserverList<Observer>::Unchecked observer_list_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeCiceroneClient);
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn
index 010123e8..915c034 100644
--- a/components/crash/content/app/BUILD.gn
+++ b/components/crash/content/app/BUILD.gn
@@ -198,6 +198,7 @@
     ]
 
     deps = [
+      "//components/gwp_asan/crash_handler",
       "//third_party/crashpad/crashpad/handler:handler",
     ]
 
diff --git a/components/crash/content/app/chrome_crashpad_handler.cc b/components/crash/content/app/chrome_crashpad_handler.cc
index ac121e2..24a8388 100644
--- a/components/crash/content/app/chrome_crashpad_handler.cc
+++ b/components/crash/content/app/chrome_crashpad_handler.cc
@@ -2,8 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
+#include "components/gwp_asan/crash_handler/crash_handler.h"
 #include "third_party/crashpad/crashpad/handler/handler_main.h"
+#include "third_party/crashpad/crashpad/handler/user_stream_data_source.h"
 
 int main(int argc, char* argv[]) {
-  return crashpad::HandlerMain(argc, argv, nullptr);
+  crashpad::UserStreamDataSources user_stream_data_sources;
+  user_stream_data_sources.push_back(
+      std::make_unique<gwp_asan::UserStreamDataSource>());
+
+  return crashpad::HandlerMain(argc, argv, &user_stream_data_sources);
 }
diff --git a/components/gwp_asan/BUILD.gn b/components/gwp_asan/BUILD.gn
index b3540ff..5176c8c 100644
--- a/components/gwp_asan/BUILD.gn
+++ b/components/gwp_asan/BUILD.gn
@@ -2,14 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//components/gwp_asan/buildflags/buildflags.gni")
-
 source_set("unit_tests") {
   testonly = true
   deps = [
     "//components/gwp_asan/common:unit_tests",
   ]
-  if (enable_gwp_asan) {
+  if (is_win || is_mac) {
     deps += [
       "//components/gwp_asan/client:unit_tests",
       "//components/gwp_asan/crash_handler:unit_tests",
diff --git a/components/gwp_asan/buildflags/buildflags.gni b/components/gwp_asan/buildflags/buildflags.gni
index b2d23454..3cb25db9 100644
--- a/components/gwp_asan/buildflags/buildflags.gni
+++ b/components/gwp_asan/buildflags/buildflags.gni
@@ -2,7 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/allocator.gni")
+
 declare_args() {
   # Is the GWP-ASan client enabled for chrome/ on a given platform.
-  enable_gwp_asan = is_win || is_mac
+  enable_gwp_asan = (is_win || is_mac) && use_allocator_shim
 }
diff --git a/components/gwp_asan/client/guarded_page_allocator.cc b/components/gwp_asan/client/guarded_page_allocator.cc
index a50d076d..d511bdf 100644
--- a/components/gwp_asan/client/guarded_page_allocator.cc
+++ b/components/gwp_asan/client/guarded_page_allocator.cc
@@ -4,6 +4,7 @@
 
 #include "components/gwp_asan/client/guarded_page_allocator.h"
 
+#include <algorithm>
 #include <iterator>
 #include <memory>
 
diff --git a/components/gwp_asan/client/guarded_page_allocator.h b/components/gwp_asan/client/guarded_page_allocator.h
index e7e3cf6..523b3b0b 100644
--- a/components/gwp_asan/client/guarded_page_allocator.h
+++ b/components/gwp_asan/client/guarded_page_allocator.h
@@ -7,6 +7,7 @@
 
 #include <array>
 #include <atomic>
+#include <limits>
 #include <memory>
 
 #include "base/compiler_specific.h"
@@ -128,12 +129,12 @@
   // Required for a singleton to access the constructor.
   friend base::NoDestructor<GuardedPageAllocator>;
 
-  DISALLOW_COPY_AND_ASSIGN(GuardedPageAllocator);
-
   friend class GuardedPageAllocatorTest;
   FRIEND_TEST_ALL_PREFIXES(GuardedPageAllocatorTest,
                            GetNearestValidPageEdgeCases);
   FRIEND_TEST_ALL_PREFIXES(GuardedPageAllocatorTest, GetErrorTypeEdgeCases);
+
+  DISALLOW_COPY_AND_ASSIGN(GuardedPageAllocator);
 };
 
 }  // namespace internal
diff --git a/components/gwp_asan/client/guarded_page_allocator_unittest.cc b/components/gwp_asan/client/guarded_page_allocator_unittest.cc
index 9a22e810..2a17c1a 100644
--- a/components/gwp_asan/client/guarded_page_allocator_unittest.cc
+++ b/components/gwp_asan/client/guarded_page_allocator_unittest.cc
@@ -6,6 +6,8 @@
 
 #include <array>
 #include <set>
+#include <utility>
+#include <vector>
 
 #include "base/bits.h"
 #include "base/process/process_metrics.h"
diff --git a/components/gwp_asan/client/sampling_allocator_shims.cc b/components/gwp_asan/client/sampling_allocator_shims.cc
index c02bab6b..5651bd2 100644
--- a/components/gwp_asan/client/sampling_allocator_shims.cc
+++ b/components/gwp_asan/client/sampling_allocator_shims.cc
@@ -4,6 +4,8 @@
 
 #include "components/gwp_asan/client/sampling_allocator_shims.h"
 
+#include <algorithm>
+
 #include "base/allocator/allocator_shim.h"
 #include "base/allocator/buildflags.h"
 #include "base/compiler_specific.h"
diff --git a/components/gwp_asan/crash_handler/crash_analyzer.cc b/components/gwp_asan/crash_handler/crash_analyzer.cc
index c963c8ce..0644caedc 100644
--- a/components/gwp_asan/crash_handler/crash_analyzer.cc
+++ b/components/gwp_asan/crash_handler/crash_analyzer.cc
@@ -4,9 +4,9 @@
 
 #include "components/gwp_asan/crash_handler/crash_analyzer.h"
 
-#include <algorithm>
-
 #include <stddef.h>
+#include <algorithm>
+#include <string>
 
 #include "base/logging.h"
 #include "base/process/process_metrics.h"
diff --git a/components/gwp_asan/crash_handler/crash_handler.cc b/components/gwp_asan/crash_handler/crash_handler.cc
index ad2216e..925ebde 100644
--- a/components/gwp_asan/crash_handler/crash_handler.cc
+++ b/components/gwp_asan/crash_handler/crash_handler.cc
@@ -5,6 +5,8 @@
 #include "components/gwp_asan/crash_handler/crash_handler.h"
 
 #include <stddef.h>
+#include <memory>
+#include <string>
 
 #include "base/compiler_specific.h"
 #include "base/logging.h"
@@ -25,7 +27,7 @@
 class BufferExtensionStreamDataSource final
     : public crashpad::MinidumpUserExtensionStreamDataSource {
  public:
-  BufferExtensionStreamDataSource(uint32_t stream_type, Crash& crash);
+  BufferExtensionStreamDataSource(uint32_t stream_type, const Crash& crash);
 
   size_t StreamDataSize() override;
   bool ReadStreamData(Delegate* delegate) override;
@@ -38,7 +40,7 @@
 
 BufferExtensionStreamDataSource::BufferExtensionStreamDataSource(
     uint32_t stream_type,
-    Crash& crash)
+    const Crash& crash)
     : crashpad::MinidumpUserExtensionStreamDataSource(stream_type) {
   bool result = crash.SerializeToString(&data_);
   DCHECK(result);
diff --git a/components/gwp_asan/crash_handler/crash_handler_unittest.cc b/components/gwp_asan/crash_handler/crash_handler_unittest.cc
index 82e4537..33c1c860 100644
--- a/components/gwp_asan/crash_handler/crash_handler_unittest.cc
+++ b/components/gwp_asan/crash_handler/crash_handler_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "components/gwp_asan/crash_handler/crash_handler.h"
 
+#include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
diff --git a/components/leveldb_proto/internal/unique_proto_database.h b/components/leveldb_proto/internal/unique_proto_database.h
index 6469f655..ffac63d 100644
--- a/components/leveldb_proto/internal/unique_proto_database.h
+++ b/components/leveldb_proto/internal/unique_proto_database.h
@@ -146,7 +146,6 @@
 
 template <typename T>
 UniqueProtoDatabase<T>::~UniqueProtoDatabase() {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (db_.get() &&
       !db_wrapper_->task_runner()->DeleteSoon(FROM_HERE, db_.release())) {
     DLOG(WARNING) << "Proto database will not be deleted.";
diff --git a/components/metrics/persisted_logs.cc b/components/metrics/persisted_logs.cc
index 1a820bf2..15ef46b 100644
--- a/components/metrics/persisted_logs.cc
+++ b/components/metrics/persisted_logs.cc
@@ -151,13 +151,6 @@
 }
 
 void PersistedLogs::PersistUnsentLogs() const {
-  // TODO(crbug.com/859477): The hypothesis is that a large part of crashes in
-  // base::ValueInternalCleanup() are caused by a not yet initialized local
-  // state.
-  CHECK_NE(PrefService::PrefInitializationStatus::INITIALIZATION_STATUS_WAITING,
-           local_state_->GetInitializationStatus());
-  CHECK_NE(PrefService::PrefInitializationStatus::INITIALIZATION_STATUS_ERROR,
-           local_state_->GetInitializationStatus());
   ListPrefUpdate update(local_state_, pref_name_);
   // TODO(crbug.com/859477): Verify that the preference has been properly
   // registered.
diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc
index 616b42d..0ac063a2 100644
--- a/components/omnibox/browser/autocomplete_result.cc
+++ b/components/omnibox/browser/autocomplete_result.cc
@@ -449,7 +449,8 @@
     std::pair<GURL, bool> p = GetMatchComparisonFields(*i);
     url_to_matches[p].push_back(i);
   }
-  // Find best default, and non-default, match in each group.
+
+  // For each group of duplicate matches, choose the one that's considered best.
   for (auto& group : url_to_matches) {
     const auto& key = group.first;
     const GURL& gurl = key.first;
@@ -458,36 +459,21 @@
     if (gurl.is_empty() || duplicate_matches.size() == 1)
       continue;
 
-    auto best_match = duplicate_matches.end();
-    auto best_default = duplicate_matches.end();
-    for (auto match = duplicate_matches.begin();
-         match != duplicate_matches.end(); ++match) {
-      if ((*match)->allowed_to_be_default_match) {
-        if (best_default == duplicate_matches.end() ||
-            IsBetterMatch(**match, **best_default, page_classification)) {
-          best_default = match;
-        }
-      }
-      if (best_match == duplicate_matches.end() ||
-          IsBetterMatch(**match, **best_match, page_classification)) {
-        best_match = match;
-      }
+    // Find the best match.
+    auto best_match = duplicate_matches.begin();
+    for (auto i = std::next(best_match); i != duplicate_matches.end(); ++i) {
+      best_match = BetterMatch(i, best_match, page_classification);
     }
-    if (best_match != best_default && best_default != duplicate_matches.end()) {
-      (*best_default)
-          ->RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom,
-                                 (*best_default)->relevance);
-      (*best_default)->relevance = (*best_match)->relevance;
-      best_match = best_default;
-    }
-    // Rotate best first if necessary, so we know to keep it.
+
+    // Rotate the chosen match to be first, if necessary, so we know to keep it.
     if (best_match != duplicate_matches.begin()) {
       duplicate_matches.splice(duplicate_matches.begin(), duplicate_matches,
                                best_match);
     }
+
+    // For each duplicate match, append its duplicates to that of the best
+    // match, then append it, before we erase it.
     for (auto i = std::next(best_match); i != duplicate_matches.end(); ++i) {
-      // For each duplicate match, append its duplicates to that of the best
-      // match, then append it, before we erase it.
       (*best_match)->duplicate_matches.insert(
           (*best_match)->duplicate_matches.end(),
           (*i)->duplicate_matches.begin(),
@@ -495,6 +481,7 @@
       (*best_match)->duplicate_matches.push_back(**i);
     }
   }
+
   // Erase duplicate matches.
   matches->erase(
       std::remove_if(
@@ -538,41 +525,78 @@
 }
 
 // static
-bool AutocompleteResult::IsBetterMatch(
-    AutocompleteMatch& first,
-    AutocompleteMatch& second,
+std::list<ACMatches::iterator>::iterator AutocompleteResult::BetterMatch(
+    std::list<ACMatches::iterator>::iterator first,
+    std::list<ACMatches::iterator>::iterator second,
     metrics::OmniboxEventProto::PageClassification page_classification) {
+  std::list<ACMatches::iterator>::iterator preferred_match;
+  std::list<ACMatches::iterator>::iterator non_preferred_match;
   // This object implements greater than.
   CompareWithDemoteByType<AutocompleteMatch> compare_demote_by_type(
       page_classification);
 
-  if (first.type == ACMatchType::SEARCH_SUGGEST_ENTITY &&
-      second.type != ACMatchType::SEARCH_SUGGEST_ENTITY) {
-    // If |first| is an entity suggestion and |second| isn't, |first| is
-    // considered better. If its type-adjusted relevance is lower, boost it to
-    // the value of |second|.
-    if (compare_demote_by_type(second, first)) {
-      first.RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom,
-                                 first.relevance);
-      first.relevance = second.relevance;
+  // The following logic enforces two constraints we care about regarding the
+  // the characteristics of the candidate matches.
+  //
+  // Entity suggestions:
+  //   Entity suggestions are always preferred over non-entity suggestions,
+  //   assuming both candidates have the same fill_into_edit value. In these
+  //   cases, because the fill_into_edit value is the same in both and the
+  //   selection of the entity suggestion appears to the user as simply a
+  //   "promotion" of an equivalent suggestion by adding additional decoration,
+  //   the entity suggestion is allowed to inherit the
+  //   allowed_to_be_default_match and inline_autocompletion values from the
+  //   other suggestion.
+  //
+  // allowed_to_be_default_match:
+  //   A suggestion that is allowed to be the default match is always preferred
+  //   over one that is not.
+  //
+  // Note that together these two constraints enforce an overall constraint,
+  // that if either candidate has allowed_to_be_default_match = true, the match
+  // which is preferred will always have allowed_to_be_default_match = true.
+  if ((*first)->type == ACMatchType::SEARCH_SUGGEST_ENTITY &&
+      (*second)->type != ACMatchType::SEARCH_SUGGEST_ENTITY &&
+      (*first)->fill_into_edit == (*second)->fill_into_edit) {
+    preferred_match = first;
+    non_preferred_match = second;
+    if ((*non_preferred_match)->allowed_to_be_default_match) {
+      (*preferred_match)->allowed_to_be_default_match = true;
+      (*preferred_match)->inline_autocompletion =
+          (*non_preferred_match)->inline_autocompletion;
     }
-    return true;
-  } else if (first.type != ACMatchType::SEARCH_SUGGEST_ENTITY &&
-             second.type == ACMatchType::SEARCH_SUGGEST_ENTITY) {
-    // Likewise, if |second| is an entity suggestion and |first| isn't, first
-    // is not considered better, even if it has a higher type-adjusted
-    // relevance. If it does have a higher relevance, boost |second|.
-    if (compare_demote_by_type(first, second)) {
-      second.RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom,
-                                  second.relevance);
-      second.relevance = first.relevance;
+  } else if ((*first)->type != ACMatchType::SEARCH_SUGGEST_ENTITY &&
+             (*second)->type == ACMatchType::SEARCH_SUGGEST_ENTITY &&
+             (*first)->fill_into_edit == (*second)->fill_into_edit) {
+    preferred_match = second;
+    non_preferred_match = first;
+    if ((*non_preferred_match)->allowed_to_be_default_match) {
+      (*preferred_match)->allowed_to_be_default_match = true;
+      (*preferred_match)->inline_autocompletion =
+          (*non_preferred_match)->inline_autocompletion;
     }
-    return false;
+  } else if ((*first)->allowed_to_be_default_match &&
+             !(*second)->allowed_to_be_default_match) {
+    preferred_match = first;
+    non_preferred_match = second;
+  } else if ((*second)->allowed_to_be_default_match &&
+             !(*first)->allowed_to_be_default_match) {
+    preferred_match = second;
+    non_preferred_match = first;
+  } else {
+    // By default, simply prefer the match with the higher type-adjusted score.
+    return compare_demote_by_type(**first, **second) ? first : second;
   }
 
-  // In the case that both values are entity suggestions or both aren't, |first|
-  // is simply considered better if it's type-adjusted relevance is higher.
-  return compare_demote_by_type(first, second);
+  // If a match is preferred despite having a lower score, boost its score
+  // to that of the other match.
+  if (compare_demote_by_type(**non_preferred_match, **preferred_match)) {
+    (*preferred_match)
+        ->RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom,
+                               (*preferred_match)->relevance);
+    (*preferred_match)->relevance = (*non_preferred_match)->relevance;
+  }
+  return preferred_match;
 }
 
 // static
diff --git a/components/omnibox/browser/autocomplete_result.h b/components/omnibox/browser/autocomplete_result.h
index 747b278..b234c48 100644
--- a/components/omnibox/browser/autocomplete_result.h
+++ b/components/omnibox/browser/autocomplete_result.h
@@ -7,6 +7,7 @@
 
 #include <stddef.h>
 
+#include <list>
 #include <map>
 
 #include "base/macros.h"
@@ -138,21 +139,6 @@
 
  private:
   FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, ConvertsOpenTabsCorrectly);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchEntityWithHigherRelevance);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchEntityWithLowerRelevance);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchEntityWithEqualRelevance);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchNonEntityWithHigherRelevance);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchNonEntityWithLowerRelevance);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchNonEntityWithEqualRelevance);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, IsBetterMatchBothEntities);
-  FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest,
-                           IsBetterMatchBothNonEntities);
 
   typedef std::map<AutocompleteProvider*, ACMatches> ProviderToMatches;
 
@@ -164,14 +150,13 @@
   typedef ACMatches::iterator::difference_type matches_difference_type;
 #endif
 
-  // Returns true if |first| is preferred over |second| based on the type and
-  // relevance (as adjusted by the context of the match type and page type). If
-  // one candidate is preferred over another despite having lower type-adjusted
-  // relevance, copies the relevance from the higher relevance match into the
-  // lower.
-  static bool IsBetterMatch(
-      AutocompleteMatch& first,
-      AutocompleteMatch& second,
+  // Examines |first| and |second| and returns the one that is preferred based
+  // on the constraints we want to enforce when deduping. Note that this may
+  // modify the relevance, allowed_to_be_default_match, or inline_autocompletion
+  // values of the returned match.
+  static std::list<ACMatches::iterator>::iterator BetterMatch(
+      std::list<ACMatches::iterator>::iterator first,
+      std::list<ACMatches::iterator>::iterator second,
       metrics::OmniboxEventProto::PageClassification page_classification);
 
   // Returns true if |matches| contains a match with the same destination as
diff --git a/components/omnibox/browser/autocomplete_result_unittest.cc b/components/omnibox/browser/autocomplete_result_unittest.cc
index a164f7c05..1203bac 100644
--- a/components/omnibox/browser/autocomplete_result_unittest.cc
+++ b/components/omnibox/browser/autocomplete_result_unittest.cc
@@ -803,9 +803,12 @@
   ASSERT_EQ(3U, result.size());
   EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec());
   EXPECT_EQ(1100, result.match_at(0)->relevance);
+  EXPECT_TRUE(result.match_at(0)->allowed_to_be_default_match);
   EXPECT_EQ(GetProvider(4), result.match_at(0)->provider);
   EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec());
+  EXPECT_FALSE(result.match_at(1)->allowed_to_be_default_match);
   EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec());
+  EXPECT_FALSE(result.match_at(2)->allowed_to_be_default_match);
 }
 
 TEST_F(AutocompleteResultTest, SortAndCullPromoteUnconsecutiveMatches) {
@@ -841,6 +844,118 @@
   EXPECT_EQ("http://e/", result.match_at(4)->destination_url.spec());
 }
 
+struct EntityTestData {
+  AutocompleteMatchType::Type type;
+  std::string destination_url;
+  int relevance;
+  bool allowed_to_be_default_match;
+  std::string fill_into_edit;
+  std::string inline_autocompletion;
+};
+
+void PopulateEntityTestCases(std::vector<EntityTestData>& test_cases,
+                             ACMatches* matches) {
+  for (const auto& test_case : test_cases) {
+    AutocompleteMatch match;
+    match.type = test_case.type;
+    match.destination_url = GURL(test_case.destination_url);
+    match.relevance = test_case.relevance;
+    match.allowed_to_be_default_match = test_case.allowed_to_be_default_match;
+    match.fill_into_edit = base::UTF8ToUTF16(test_case.fill_into_edit);
+    match.inline_autocompletion =
+        base::UTF8ToUTF16(test_case.inline_autocompletion);
+    matches->push_back(match);
+  }
+}
+
+TEST_F(AutocompleteResultTest, SortAndCullPreferEntities) {
+  // clang-format off
+  std::vector<EntityTestData> test_cases = {
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST,
+      "http://search/?q=foo", 1100, false, "foo", ""
+    },
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST_ENTITY,
+      "http://search/?q=foo", 1000, false, "foo", ""
+    },
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST,
+      "http://search/?q=foo", 900, true, "foo", "oo"
+    },
+    // This match will be the first result but it won't affect the entity
+    // deduping because it has a different URL.
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED,
+      "http://search/?q=bar", 1200, true, "foo", "oo"
+    },
+  };
+  // clang-format on
+  ACMatches matches;
+  PopulateEntityTestCases(test_cases, &matches);
+
+  AutocompleteInput input(base::ASCIIToUTF16("f"),
+                          metrics::OmniboxEventProto::OTHER,
+                          TestSchemeClassifier());
+  AutocompleteResult result;
+  result.AppendMatches(input, matches);
+  result.SortAndCull(input, template_url_service_.get());
+
+  // The first result will be the personalized suggestion.
+  EXPECT_EQ(2UL, result.size());
+  EXPECT_EQ(AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED,
+            result.match_at(0)->type);
+  EXPECT_EQ(1200, result.match_at(0)->relevance);
+
+  // The second result will be the result of deduping the other three.
+  // The chosen match should be the entity suggestion and it should have been
+  // promoted to receive the first match's relevance and the last match's
+  // allowed_to_be_default_match and inline_autocompletion values.
+  EXPECT_EQ(AutocompleteMatchType::SEARCH_SUGGEST_ENTITY,
+            result.match_at(1)->type);
+  EXPECT_EQ(1100, result.match_at(1)->relevance);
+  EXPECT_TRUE(result.match_at(1)->allowed_to_be_default_match);
+  EXPECT_EQ(base::ASCIIToUTF16("oo"),
+            result.match_at(1)->inline_autocompletion);
+}
+
+TEST_F(AutocompleteResultTest, SortAndCullPreferEntitiesFillIntoEditMustMatch) {
+  // clang-format off
+  std::vector<EntityTestData> test_cases = {
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED,
+      "http://search/?q=foo", 1100, false, "foo", ""
+    },
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST_ENTITY,
+      "http://search/?q=foo", 1000, false, "foobar", ""
+    },
+    {
+      AutocompleteMatchType::SEARCH_SUGGEST,
+      "http://search/?q=foo", 900, true, "foo", "oo"
+    },
+  };
+  // clang-format on
+  ACMatches matches;
+  PopulateEntityTestCases(test_cases, &matches);
+
+  AutocompleteInput input(base::ASCIIToUTF16("f"),
+                          metrics::OmniboxEventProto::OTHER,
+                          TestSchemeClassifier());
+  AutocompleteResult result;
+  result.AppendMatches(input, matches);
+  result.SortAndCull(input, template_url_service_.get());
+
+  // The entity suggestion won't be chosen in this case because it has a non-
+  // matching value for fill_into_edit.
+  EXPECT_EQ(1UL, result.size());
+  EXPECT_EQ(AutocompleteMatchType::SEARCH_SUGGEST, result.match_at(0)->type);
+  EXPECT_EQ(1100, result.match_at(0)->relevance);
+  EXPECT_TRUE(result.match_at(0)->allowed_to_be_default_match);
+  EXPECT_EQ(base::ASCIIToUTF16("oo"),
+            result.match_at(0)->inline_autocompletion);
+}
+
 TEST_F(AutocompleteResultTest, SortAndCullPromoteDuplicateSearchURLs) {
   // Register a template URL that corresponds to 'foo' search engine.
   TemplateURLData url_data;
@@ -1002,166 +1117,6 @@
   EXPECT_FALSE(result.match_at(2)->has_tab_match);
 }
 
-namespace {
-
-void CheckRelevanceExpectations(const AutocompleteMatch& first,
-                                const AutocompleteMatch& second,
-                                int first_expected_relevance,
-                                int second_expected_relevance,
-                                const char* first_expected_boosted_from,
-                                const char* second_expected_boosted_from) {
-  EXPECT_EQ(first_expected_relevance, first.relevance);
-  EXPECT_EQ(second_expected_relevance, second.relevance);
-  EXPECT_EQ(std::string(first_expected_boosted_from),
-            first.GetAdditionalInfo(kACMatchPropertyScoreBoostedFrom));
-  EXPECT_EQ(std::string(second_expected_boosted_from),
-            second.GetAdditionalInfo(kACMatchPropertyScoreBoostedFrom));
-}
-
-}  // namespace
-
-TEST_F(AutocompleteResultTest, IsBetterMatchEntityWithHigherRelevance) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  first.relevance = 1000;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  second.relevance = 600;
-
-  // Expect the entity suggestion to be better and its relevance unchanged.
-  // HOME_PAGE is used here because it doesn't trigger the special logic in
-  // OmniboxFieldTrial::GetDemotionsByType. There should otherwise be no
-  // demotions since the field trial params are cleared in the test setup.
-  EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second,
-                                                OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 600, "", "");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchEntityWithLowerRelevance) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  first.relevance = 600;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  second.relevance = 1000;
-
-  // Expect the entity suggestion to be better and its relevance to have been
-  // boosted to that of the non-entity suggestion.
-  EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second,
-                                                OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 1000, "600", "");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchEntityWithEqualRelevance) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  first.relevance = 1000;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  second.relevance = 1000;
-
-  // Expect the entity suggestion to be better and the relevance scores
-  // unchanged.
-  EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second,
-                                                OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 1000, "", "");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchNonEntityWithHigherRelevance) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  first.relevance = 1000;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  second.relevance = 600;
-
-  // Expect the non-entity suggestion to *not* be better and the relevance of
-  // the entity suggestion to have been boosted.
-  EXPECT_FALSE(AutocompleteResult::IsBetterMatch(first, second,
-                                                 OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 1000, "", "600");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchNonEntityWithLowerRelevance) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  first.relevance = 600;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  second.relevance = 1000;
-
-  // Expect the non-entity suggestion to *not* be better and the relevance
-  // scores unchanged.
-  EXPECT_FALSE(AutocompleteResult::IsBetterMatch(first, second,
-                                                 OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 600, 1000, "", "");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchNonEntityWithEqualRelevance) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  first.relevance = 1000;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  second.relevance = 1000;
-
-  // Expect the non-entity suggestion to *not* be better and the relevance
-  // scores unchanged.
-  EXPECT_FALSE(AutocompleteResult::IsBetterMatch(first, second,
-                                                 OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 1000, "", "");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchBothEntities) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  first.relevance = 1000;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY;
-  second.relevance = 600;
-
-  // Expect the first suggestion to be better since its relevance is higher and
-  // the relevance scores unchanged.
-  EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second,
-                                                OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 600, "", "");
-
-  // Expect the reversed condition to be false and the relevance scores
-  // unchanged.
-  EXPECT_FALSE(AutocompleteResult::IsBetterMatch(second, first,
-                                                 OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 600, "", "");
-}
-
-TEST_F(AutocompleteResultTest, IsBetterMatchBothNonEntities) {
-  AutocompleteMatch first;
-  first.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  first.relevance = 1000;
-
-  AutocompleteMatch second;
-  second.type = AutocompleteMatchType::SEARCH_SUGGEST;
-  second.relevance = 600;
-
-  // Expect the first suggestion to be better since its relevance is higher and
-  // the relevance scores unchanged.
-  EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second,
-                                                OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 600, "", "");
-
-  // Expect the reversed condition to be false and the relevance scores
-  // unchanged.
-  EXPECT_FALSE(AutocompleteResult::IsBetterMatch(second, first,
-                                                 OmniboxEventProto::HOME_PAGE));
-  CheckRelevanceExpectations(first, second, 1000, 600, "", "");
-}
-
 TEST_F(AutocompleteResultTest, PedalSuggestionsCantBeDefaultMatch) {
   TestData data[] = {
       {1, 1, 500, true},
diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc
index db2c4b8d..e99cc442c 100644
--- a/components/omnibox/browser/omnibox_field_trial.cc
+++ b/components/omnibox/browser/omnibox_field_trial.cc
@@ -153,6 +153,12 @@
                           OmniboxFieldTrial::PedalSuggestionMode::DEDICATED,
                           &kPedalSuggestionModeOptions};
 
+// Feature used to show a context menu for suggestions when the user
+// right-clicks a suggestion in the omnibox dropdown. It's currently disabled
+// by default during development, but will eventually be enabled by default.
+const base::Feature kOmniboxContextMenuForSuggestions{
+    "OmniboxContextMenuForSuggestions", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Feature used to enable clipboard provider, which provides the user with
 // suggestions of the URL in the user's clipboard (if any) upon omnibox focus.
 const base::Feature kEnableClipboardProvider {
diff --git a/components/omnibox/browser/omnibox_field_trial.h b/components/omnibox/browser/omnibox_field_trial.h
index 5a576a9..6058d8c3 100644
--- a/components/omnibox/browser/omnibox_field_trial.h
+++ b/components/omnibox/browser/omnibox_field_trial.h
@@ -39,6 +39,7 @@
 extern const base::Feature kOmniboxReverseTabSwitchLogic;
 extern const base::Feature kExperimentalKeywordMode;
 extern const base::Feature kOmniboxPedalSuggestions;
+extern const base::Feature kOmniboxContextMenuForSuggestions;
 extern const base::Feature kEnableClipboardProvider;
 extern const base::Feature kEnableClipboardProviderTextSuggestions;
 extern const base::Feature kEnableClipboardProviderImageSuggestions;
diff --git a/components/prefs/pref_registry_simple.cc b/components/prefs/pref_registry_simple.cc
index feb090f..bab05dd5 100644
--- a/components/prefs/pref_registry_simple.cc
+++ b/components/prefs/pref_registry_simple.cc
@@ -55,15 +55,6 @@
   RegisterPreference(path, std::move(default_value), flags);
 }
 
-void PrefRegistrySimple::RegisterListPref(
-    const std::string& path,
-    std::unique_ptr<base::Value> default_value,
-    uint32_t flags) {
-  DCHECK(default_value);
-  RegisterListPref(
-      path, base::Value::FromUniquePtrValue(std::move(default_value)), flags);
-}
-
 void PrefRegistrySimple::RegisterDictionaryPref(const std::string& path,
                                                 uint32_t flags) {
   RegisterPreference(path, base::Value(base::Value::Type::DICTIONARY), flags);
@@ -75,15 +66,6 @@
   RegisterPreference(path, std::move(default_value), flags);
 }
 
-void PrefRegistrySimple::RegisterDictionaryPref(
-    const std::string& path,
-    std::unique_ptr<base::Value> default_value,
-    uint32_t flags) {
-  DCHECK(default_value);
-  RegisterDictionaryPref(
-      path, base::Value::FromUniquePtrValue(std::move(default_value)), flags);
-}
-
 void PrefRegistrySimple::RegisterInt64Pref(const std::string& path,
                                            int64_t default_value,
                                            uint32_t flags) {
diff --git a/components/prefs/pref_registry_simple.h b/components/prefs/pref_registry_simple.h
index c1677ce..b167e94 100644
--- a/components/prefs/pref_registry_simple.h
+++ b/components/prefs/pref_registry_simple.h
@@ -54,11 +54,6 @@
                         base::Value default_value,
                         uint32_t flags = NO_REGISTRATION_FLAGS);
 
-  // Deprecated: prefer to use the version that takes a base::Value by value.
-  void RegisterListPref(const std::string& path,
-                        std::unique_ptr<base::Value> default_value,
-                        uint32_t flags = NO_REGISTRATION_FLAGS);
-
   void RegisterDictionaryPref(const std::string& path,
                               uint32_t flags = NO_REGISTRATION_FLAGS);
 
@@ -66,11 +61,6 @@
                               base::Value default_value,
                               uint32_t flags = NO_REGISTRATION_FLAGS);
 
-  // Deprecated: prefer to use the version that takes a base::Value by value.
-  void RegisterDictionaryPref(const std::string& path,
-                              std::unique_ptr<base::Value> default_value,
-                              uint32_t flags = NO_REGISTRATION_FLAGS);
-
   void RegisterInt64Pref(const std::string& path,
                          int64_t default_value,
                          uint32_t flags = NO_REGISTRATION_FLAGS);
diff --git a/components/unified_consent/pref_names.cc b/components/unified_consent/pref_names.cc
index e242092..1f74743 100644
--- a/components/unified_consent/pref_names.cc
+++ b/components/unified_consent/pref_names.cc
@@ -7,16 +7,7 @@
 namespace unified_consent {
 namespace prefs {
 
-// Boolean indicating whether all unified consent services were ever enabled
-// because the user opted into unified consent. This pref is used during
-// rollback to disable off-by-default services.
-const char kAllUnifiedConsentServicesWereEnabled[] =
-    "unified_consent.all_services_were_enabled";
-
-// Integer indicating the migration state of unified consent, defined in
-// unified_consent::MigrationState.
 const char kUnifiedConsentMigrationState[] = "unified_consent.migration_state";
-
 const char kUrlKeyedAnonymizedDataCollectionEnabled[] =
     "url_keyed_anonymized_data_collection.enabled";
 
diff --git a/components/unified_consent/pref_names.h b/components/unified_consent/pref_names.h
index 534f9d14b..5220958 100644
--- a/components/unified_consent/pref_names.h
+++ b/components/unified_consent/pref_names.h
@@ -8,8 +8,12 @@
 namespace unified_consent {
 namespace prefs {
 
-extern const char kAllUnifiedConsentServicesWereEnabled[];
+// Integer indicating the migration state of unified consent, defined in
+// unified_consent::MigrationState.
 extern const char kUnifiedConsentMigrationState[];
+
+// Boolean indicating whether anonymized URL-keyed data data collection is
+// enabled.
 extern const char kUrlKeyedAnonymizedDataCollectionEnabled[];
 
 }  // namespace prefs
diff --git a/components/unified_consent/unified_consent_metrics.cc b/components/unified_consent/unified_consent_metrics.cc
index 45707e86..b03867c 100644
--- a/components/unified_consent/unified_consent_metrics.cc
+++ b/components/unified_consent/unified_consent_metrics.cc
@@ -50,12 +50,7 @@
 }  // namespace
 
 void RecordSettingsHistogram(PrefService* pref_service) {
-  bool metric_recorded = false;
-
-  metric_recorded |= RecordSettingsHistogramFromPref(
-      prefs::kAllUnifiedConsentServicesWereEnabled, pref_service,
-      metrics::SettingsHistogramValue::kAllServicesWereEnabled);
-  metric_recorded |= RecordSettingsHistogramFromPref(
+  bool metric_recorded = RecordSettingsHistogramFromPref(
       prefs::kUrlKeyedAnonymizedDataCollectionEnabled, pref_service,
       metrics::SettingsHistogramValue::kUrlKeyedAnonymizedDataCollection);
   if (!metric_recorded)
diff --git a/components/unified_consent/unified_consent_service.cc b/components/unified_consent/unified_consent_service.cc
index 5792d4d0..6fc8b603 100644
--- a/components/unified_consent/unified_consent_service.cc
+++ b/components/unified_consent/unified_consent_service.cc
@@ -47,8 +47,6 @@
   registry->RegisterIntegerPref(
       prefs::kUnifiedConsentMigrationState,
       static_cast<int>(MigrationState::kNotInitialized));
-  registry->RegisterBooleanPref(prefs::kAllUnifiedConsentServicesWereEnabled,
-                                false);
 }
 
 // static
@@ -66,22 +64,14 @@
   // Clear all unified consent prefs.
   user_pref_service->ClearPref(prefs::kUrlKeyedAnonymizedDataCollectionEnabled);
   user_pref_service->ClearPref(prefs::kUnifiedConsentMigrationState);
-  user_pref_service->ClearPref(prefs::kAllUnifiedConsentServicesWereEnabled);
 }
 
 void UnifiedConsentService::EnableGoogleServices() {
   DCHECK(identity_manager_->HasPrimaryAccount());
-  DCHECK_LT(MigrationState::kNotInitialized, GetMigrationState());
+  DCHECK_EQ(MigrationState::kCompleted, GetMigrationState());
 
-  if (GetMigrationState() != MigrationState::kCompleted) {
-    // If the user opted into unified consent, the migration is completed.
-    SetMigrationState(MigrationState::kCompleted);
-  }
-
-  // Enable all Google services except sync.
   pref_service_->SetBoolean(prefs::kUrlKeyedAnonymizedDataCollectionEnabled,
                             true);
-  pref_service_->SetBoolean(prefs::kAllUnifiedConsentServicesWereEnabled, true);
 }
 
 void UnifiedConsentService::Shutdown() {
@@ -91,13 +81,10 @@
 
 void UnifiedConsentService::OnPrimaryAccountCleared(
     const AccountInfo& account_info) {
-  pref_service_->SetBoolean(prefs::kAllUnifiedConsentServicesWereEnabled,
-                            false);
-
-  // By design, signing out of Chrome automatically disables off-by-default
-  // services.
+  // By design, clearing the primary account disables URL-keyed data collection.
   pref_service_->SetBoolean(prefs::kUrlKeyedAnonymizedDataCollectionEnabled,
                             false);
+
   if (GetMigrationState() != MigrationState::kCompleted) {
     // When the user signs out, the migration is complete.
     SetMigrationState(MigrationState::kCompleted);
diff --git a/components/unified_consent/unified_consent_service_unittest.cc b/components/unified_consent/unified_consent_service_unittest.cc
index dd3a25f..1c8e6864 100644
--- a/components/unified_consent/unified_consent_service_unittest.cc
+++ b/components/unified_consent/unified_consent_service_unittest.cc
@@ -82,11 +82,6 @@
         new unified_consent::ScopedUnifiedConsent(feature_state));
   }
 
-  bool AreAllGoogleServicesEnabled() {
-    return pref_service_.GetBoolean(
-        prefs::kUrlKeyedAnonymizedDataCollectionEnabled);
-  }
-
   unified_consent::MigrationState GetMigrationState() {
     int migration_state_int =
         pref_service_.GetInteger(prefs::kUnifiedConsentMigrationState);
@@ -115,11 +110,11 @@
   identity_test_environment_.SetPrimaryAccount("testaccount");
   EXPECT_FALSE(pref_service_.GetBoolean(
       prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
-  EXPECT_FALSE(AreAllGoogleServicesEnabled());
 
   // Enable services and check expectations.
   consent_service_->EnableGoogleServices();
-  EXPECT_TRUE(AreAllGoogleServicesEnabled());
+  EXPECT_TRUE(pref_service_.GetBoolean(
+      prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
 }
 
 TEST_F(UnifiedConsentServiceTest, EnableServices_WithUnsupportedService) {
@@ -127,11 +122,11 @@
   identity_test_environment_.SetPrimaryAccount("testaccount");
   EXPECT_FALSE(pref_service_.GetBoolean(
       prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
-  EXPECT_FALSE(AreAllGoogleServicesEnabled());
 
   // Enable services and check expectations.
   consent_service_->EnableGoogleServices();
-  EXPECT_TRUE(AreAllGoogleServicesEnabled());
+  EXPECT_TRUE(pref_service_.GetBoolean(
+      prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
 }
 
 TEST_F(UnifiedConsentServiceTest, Migration_UpdateSettings) {
@@ -160,12 +155,12 @@
 
   // Precondition: Enable unified consent.
   consent_service_->EnableGoogleServices();
-  EXPECT_TRUE(AreAllGoogleServicesEnabled());
+  EXPECT_TRUE(pref_service_.GetBoolean(
+      prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
 
   // Clearing primary account revokes unfied consent and a couple of other
   // non-personalized services.
   identity_test_environment_.ClearPrimaryAccount();
-  EXPECT_FALSE(AreAllGoogleServicesEnabled());
   EXPECT_FALSE(pref_service_.GetBoolean(
       prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
 }
@@ -187,10 +182,11 @@
   CreateConsentService();
   consent_service_->EnableGoogleServices();
   // Check expectations after opt-in.
-  EXPECT_TRUE(AreAllGoogleServicesEnabled());
+  EXPECT_TRUE(pref_service_.GetBoolean(
+      prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
   EXPECT_EQ(unified_consent::MigrationState::kCompleted, GetMigrationState());
-  EXPECT_TRUE(
-      pref_service_.GetBoolean(prefs::kAllUnifiedConsentServicesWereEnabled));
+  EXPECT_TRUE(pref_service_.GetBoolean(
+      prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
 
   consent_service_->Shutdown();
   consent_service_.reset();
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.cc b/components/viz/service/display_embedder/skia_output_surface_impl.cc
index 7cee2bd..484bc1e 100644
--- a/components/viz/service/display_embedder/skia_output_surface_impl.cc
+++ b/components/viz/service/display_embedder/skia_output_surface_impl.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/callback_helpers.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -679,25 +680,30 @@
         base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(event)));
   }
 
-  auto did_swap_buffer_complete_callback = base::BindRepeating(
-      &SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_);
-  did_swap_buffer_complete_callback = CreateSafeCallback(
-      client_thread_task_runner_, did_swap_buffer_complete_callback);
-  auto buffer_presented_callback =
-      base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_);
-  buffer_presented_callback =
-      CreateSafeCallback(client_thread_task_runner_, buffer_presented_callback);
-  auto context_lost_callback =
-      base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_);
-  context_lost_callback =
-      CreateSafeCallback(client_thread_task_runner_, context_lost_callback);
-
   if (task_executor_) {
+    // When |task_executor_| is not nullptr, DidSwapBuffersComplete(),
+    // BufferPresented(), ContextList() are not expected to be called by this
+    // class. The SurfacesInstance will do it.
     impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
         task_executor_.get(), gl_surface_, std::move(shared_context_state_),
-        sequence_->GetSequenceId(), did_swap_buffer_complete_callback,
-        buffer_presented_callback, context_lost_callback);
+        sequence_->GetSequenceId(),
+        base::DoNothing::Repeatedly<gpu::SwapBuffersCompleteParams,
+                                    const gfx::Size&>(),
+        base::DoNothing::Repeatedly<const gfx::PresentationFeedback&>(),
+        base::DoNothing::Repeatedly<>());
   } else {
+    auto did_swap_buffer_complete_callback = base::BindRepeating(
+        &SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_);
+    did_swap_buffer_complete_callback = CreateSafeCallback(
+        client_thread_task_runner_, did_swap_buffer_complete_callback);
+    auto buffer_presented_callback =
+        base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_);
+    buffer_presented_callback = CreateSafeCallback(client_thread_task_runner_,
+                                                   buffer_presented_callback);
+    auto context_lost_callback =
+        base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_);
+    context_lost_callback =
+        CreateSafeCallback(client_thread_task_runner_, context_lost_callback);
     impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
         gpu_service_, surface_handle_, did_swap_buffer_complete_callback,
         buffer_presented_callback, context_lost_callback);
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc
index a91f40e..102a73d 100644
--- a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc
+++ b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc
@@ -8,6 +8,7 @@
 
 #include "base/atomic_sequence_num.h"
 #include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/callback_helpers.h"
 #include "base/synchronization/waitable_event.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
@@ -171,7 +172,7 @@
 
 void SkiaOutputSurfaceImplNonDDL::SetNeedsSwapSizeNotifications(
     bool needs_swap_size_notifications) {
-  needs_swap_size_notifications_ = needs_swap_size_notifications;
+  NOTIMPLEMENTED();
 }
 
 SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintCurrentFrame() {
@@ -296,13 +297,8 @@
 
 void SkiaOutputSurfaceImplNonDDL::SkiaSwapBuffers(OutputSurfaceFrame frame) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  gpu::SwapBuffersCompleteParams params;
-  params.swap_response.swap_start = base::TimeTicks::Now();
-  params.swap_response.result = gl_surface_->SwapBuffers(base::BindOnce(
-      &SkiaOutputSurfaceImplNonDDL::BufferPresented, base::Unretained(this)));
-  params.swap_response.swap_end = base::TimeTicks::Now();
-
-  DidSwapBuffersComplete(params, gfx::Size());
+  gl_surface_->SwapBuffers(
+      base::DoNothing::Once<const gfx::PresentationFeedback&>());
 }
 
 SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintRenderPass(
@@ -431,27 +427,6 @@
                                   metadata.resource_format, backend_texture);
 }
 
-void SkiaOutputSurfaceImplNonDDL::DidSwapBuffersComplete(
-    const gpu::SwapBuffersCompleteParams& params,
-    const gfx::Size& pixel_size) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(client_);
-
-  DCHECK(params.texture_in_use_responses.empty());
-  DCHECK(params.ca_layer_params.is_empty);
-
-  client_->DidReceiveSwapBuffersAck();
-  if (needs_swap_size_notifications_)
-    client_->DidSwapWithSize(pixel_size);
-}
-
-void SkiaOutputSurfaceImplNonDDL::BufferPresented(
-    const gfx::PresentationFeedback& feedback) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(client_);
-  client_->DidReceivePresentationFeedback(feedback);
-}
-
 void SkiaOutputSurfaceImplNonDDL::ContextLost() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   for (auto& observer : observers_)
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h
index 903b658..ca5662de 100644
--- a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h
+++ b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h
@@ -21,13 +21,8 @@
 class GLSurface;
 }
 
-namespace gfx {
-struct PresentationFeedback;
-}
-
 namespace gpu {
 class MailboxManager;
-struct SwapBuffersCompleteParams;
 class SyncPointClientState;
 class SyncPointManager;
 class SyncPointOrderData;
@@ -112,9 +107,6 @@
   bool GetGrBackendTexture(const ResourceMetadata& metadata,
                            GrBackendTexture* backend_texture);
 
-  void DidSwapBuffersComplete(const gpu::SwapBuffersCompleteParams& params,
-                              const gfx::Size& pixel_size);
-  void BufferPresented(const gfx::PresentationFeedback& feedback);
   void ContextLost();
 
   uint64_t sync_fence_release_ = 0;
@@ -139,9 +131,6 @@
   // The current render pass id set by BeginPaintRenderPass.
   RenderPassId current_render_pass_id_ = 0;
 
-  // Whether to send OutputSurfaceClient::DidSwapWithSize notifications.
-  bool needs_swap_size_notifications_ = false;
-
   // Observers for context lost.
   base::ObserverList<ContextLostObserver>::Unchecked observers_;
 
diff --git a/components/zucchini/rel32_utils.h b/components/zucchini/rel32_utils.h
index 7a01230..ff9e7127 100644
--- a/components/zucchini/rel32_utils.h
+++ b/components/zucchini/rel32_utils.h
@@ -5,18 +5,22 @@
 #ifndef COMPONENTS_ZUCCHINI_REL32_UTILS_H_
 #define COMPONENTS_ZUCCHINI_REL32_UTILS_H_
 
+#include <algorithm>
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
 #include "base/optional.h"
 #include "components/zucchini/address_translator.h"
+#include "components/zucchini/arm_utils.h"
 #include "components/zucchini/buffer_view.h"
 #include "components/zucchini/image_utils.h"
+#include "components/zucchini/io_utils.h"
 
 namespace zucchini {
 
-// A visitor that emits References (locations and target) from a specified
-// portion of an x86 / x64 image, given a list of valid locations.
+// Reader that emits x86 / x64 References (locations and target) from a list of
+// valid locations, constrained by a portion of an image.
 class Rel32ReaderX86 : public ReferenceReader {
  public:
   // |image| is an image containing x86 / x64 code in [|lo|, |hi|).
@@ -45,7 +49,7 @@
   DISALLOW_COPY_AND_ASSIGN(Rel32ReaderX86);
 };
 
-// Writer for x86 / x64 rel32 references.
+// Writer for x86 / x64 rel32 References.
 class Rel32WriterX86 : public ReferenceWriter {
  public:
   // |image| wraps the raw bytes of a binary in which rel32 references will be
@@ -65,6 +69,114 @@
   DISALLOW_COPY_AND_ASSIGN(Rel32WriterX86);
 };
 
+// Reader that emits x86 / x64 References (locations and target) of a spcific
+// type from a list of valid locations, constrained by a portion of an image.
+template <class ADDR_TRAITS>
+class Rel32ReaderArm : public ReferenceReader {
+ public:
+  using CODE_T = typename ADDR_TRAITS::code_t;
+
+  Rel32ReaderArm(const AddressTranslator& translator,
+                 ConstBufferView view,
+                 const std::vector<offset_t>& rel32_locations,
+                 offset_t lo,
+                 offset_t hi)
+      : view_(view),
+        offset_to_rva_(translator),
+        rva_to_offset_(translator),
+        hi_(hi) {
+    cur_it_ =
+        std::lower_bound(rel32_locations.begin(), rel32_locations.end(), lo);
+    rel32_end_ = rel32_locations.end();
+  }
+
+  base::Optional<Reference> GetNext() override {
+    while (cur_it_ < rel32_end_ && *cur_it_ < hi_) {
+      offset_t location = *(cur_it_++);
+      CODE_T code = ADDR_TRAITS::Fetch(view_, location);
+      rva_t instr_rva = offset_to_rva_.Convert(location);
+      rva_t target_rva = kInvalidRva;
+      if (ADDR_TRAITS::Read(instr_rva, code, &target_rva)) {
+        offset_t target = rva_to_offset_.Convert(target_rva);
+        if (target != kInvalidOffset)
+          return Reference{location, target};
+      }
+    }
+    return base::nullopt;
+  }
+
+ private:
+  ConstBufferView view_;
+  AddressTranslator::OffsetToRvaCache offset_to_rva_;
+  AddressTranslator::RvaToOffsetCache rva_to_offset_;
+  std::vector<offset_t>::const_iterator cur_it_;
+  std::vector<offset_t>::const_iterator rel32_end_;
+  offset_t hi_;
+
+  DISALLOW_COPY_AND_ASSIGN(Rel32ReaderArm);
+};
+
+// Writer for ARM rel32 References of a specific type.
+template <class ADDR_TRAITS>
+class Rel32WriterArm : public ReferenceWriter {
+ public:
+  using CODE_T = typename ADDR_TRAITS::code_t;
+
+  Rel32WriterArm(const AddressTranslator& translator,
+                 MutableBufferView mutable_view)
+      : mutable_view_(mutable_view), offset_to_rva_(translator) {}
+
+  void PutNext(Reference ref) override {
+    CODE_T code = ADDR_TRAITS::Fetch(mutable_view_, ref.location);
+    rva_t instr_rva = offset_to_rva_.Convert(ref.location);
+    rva_t target_rva = offset_to_rva_.Convert(ref.target);
+    if (ADDR_TRAITS::Write(instr_rva, target_rva, &code)) {
+      ADDR_TRAITS::Store(mutable_view_, ref.location, code);
+    } else {
+      LOG(ERROR) << "Write error: " << AsHex<8>(ref.location) << ": "
+                 << AsHex<static_cast<int>(sizeof(CODE_T)) * 2>(code)
+                 << " <= " << AsHex<8>(target_rva) << ".";
+    }
+  }
+
+ private:
+  MutableBufferView mutable_view_;
+  AddressTranslator::OffsetToRvaCache offset_to_rva_;
+
+  DISALLOW_COPY_AND_ASSIGN(Rel32WriterArm);
+};
+
+// Type for specialized versions of ArmCopyDisp().
+// TODO(etiennep/huangs): Fold ReferenceByteMixer into Disassembler and remove
+//     direct function pointer usage.
+typedef bool (*ArmCopyDispFun)(ConstBufferView src_view,
+                               offset_t src_idx,
+                               MutableBufferView dst_view,
+                               offset_t dst_idx);
+
+// Copier that makes |*dst_it| similar to |*src_it| (both assumed to point to
+// rel32 instructions of type ADDR_TRAITS) by copying the displacement (i.e.,
+// payload bits) from |src_it| to |dst_it|. If successful, updates |*dst_it|,
+// and returns true. Otherwise returns false. Note that alignment is not an
+// issue since the displacement is not translated to target RVA!
+template <class ADDR_TRAITS>
+bool ArmCopyDisp(ConstBufferView src_view,
+                 offset_t src_idx,
+                 MutableBufferView dst_view,
+                 offset_t dst_idx) {
+  using CODE_T = typename ADDR_TRAITS::code_t;
+  CODE_T src_code = ADDR_TRAITS::Fetch(src_view, src_idx);
+  arm_disp_t disp = 0;
+  if (ADDR_TRAITS::Decode(src_code, &disp)) {
+    CODE_T dst_code = ADDR_TRAITS::Fetch(dst_view, dst_idx);
+    if (ADDR_TRAITS::Encode(disp, &dst_code)) {
+      ADDR_TRAITS::Store(dst_view, dst_idx, dst_code);
+      return true;
+    }
+  }
+  return false;
+}
+
 }  // namespace zucchini
 
 #endif  // COMPONENTS_ZUCCHINI_REL32_UTILS_H_
diff --git a/components/zucchini/rel32_utils_unittest.cc b/components/zucchini/rel32_utils_unittest.cc
index 29e8560..e3d34f4 100644
--- a/components/zucchini/rel32_utils_unittest.cc
+++ b/components/zucchini/rel32_utils_unittest.cc
@@ -7,11 +7,13 @@
 #include <stdint.h>
 
 #include <memory>
+#include <utility>
 #include <vector>
 
 #include "base/optional.h"
 #include "base/test/gtest_util.h"
 #include "components/zucchini/address_translator.h"
+#include "components/zucchini/arm_utils.h"
 #include "components/zucchini/image_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -31,7 +33,7 @@
 
 // Checks that |reader| emits and only emits |expected_refs|, in order.
 void CheckReader(const std::vector<Reference>& expected_refs,
-                 ReferenceReader* reader) {
+                 std::unique_ptr<ReferenceReader> reader) {
   for (Reference expected_ref : expected_refs) {
     auto ref = reader->GetNext();
     EXPECT_TRUE(ref.has_value());
@@ -40,6 +42,31 @@
   EXPECT_EQ(base::nullopt, reader->GetNext());  // Nothing should be left.
 }
 
+// Copies displacements from |bytes1| to |bytes2| and checks results against
+// |bytes_exp_1_to_2|. Then repeats for |*bytes2| , |*byte1|, and
+// |bytes_exp_2_to_1|. Empty expected bytes mean failure is expected. The copy
+// function is specified by |copier|.
+void CheckCopy(const std::vector<uint8_t>& bytes_exp_1_to_2,
+               const std::vector<uint8_t>& bytes_exp_2_to_1,
+               const std::vector<uint8_t>& bytes1,
+               const std::vector<uint8_t>& bytes2,
+               ArmCopyDispFun copier) {
+  auto run_test = [&copier](const std::vector<uint8_t>& bytes_exp,
+                            const std::vector<uint8_t>& bytes_in,
+                            std::vector<uint8_t> bytes_out) {
+    ConstBufferView buffer_in(&bytes_in[0], bytes_in.size());
+    MutableBufferView buffer_out(&bytes_out[0], bytes_out.size());
+    if (bytes_exp.empty()) {
+      EXPECT_FALSE(copier(buffer_in, 0U, buffer_out, 0U));
+    } else {
+      EXPECT_TRUE(copier(buffer_in, 0U, buffer_out, 0U));
+      EXPECT_EQ(bytes_exp, bytes_out);
+    }
+  };
+  run_test(bytes_exp_1_to_2, bytes1, bytes2);
+  run_test(bytes_exp_2_to_1, bytes2, bytes1);
+}
+
 }  // namespace
 
 TEST(Rel32UtilsTest, Rel32ReaderX86) {
@@ -64,24 +91,24 @@
   std::vector<offset_t> rel32_locations = {0x0008U, 0x0010U, 0x0018U, 0x001CU};
 
   // Generate everything.
-  Rel32ReaderX86 reader1(buffer, 0x0000U, 0x0020U, &rel32_locations,
-                         translator);
+  auto reader1 = std::make_unique<Rel32ReaderX86>(buffer, 0x0000U, 0x0020U,
+                                                  &rel32_locations, translator);
   CheckReader({{0x0008U, 0x0010U},
                {0x0010U, 0x0014U},
                {0x0018U, 0x0010U},
                {0x001CU, 0x0004U}},
-              &reader1);
+              std::move(reader1));
 
   // Exclude last.
-  Rel32ReaderX86 reader2(buffer, 0x0000U, 0x001CU, &rel32_locations,
-                         translator);
+  auto reader2 = std::make_unique<Rel32ReaderX86>(buffer, 0x0000U, 0x001CU,
+                                                  &rel32_locations, translator);
   CheckReader({{0x0008U, 0x0010U}, {0x0010U, 0x0014U}, {0x0018U, 0x0010U}},
-              &reader2);
+              std::move(reader2));
 
   // Only find one.
-  Rel32ReaderX86 reader3(buffer, 0x000CU, 0x0018U, &rel32_locations,
-                         translator);
-  CheckReader({{0x0010U, 0x0014U}}, &reader3);
+  auto reader3 = std::make_unique<Rel32ReaderX86>(buffer, 0x000CU, 0x0018U,
+                                                  &rel32_locations, translator);
+  CheckReader({{0x0010U, 0x0014U}}, std::move(reader3));
 }
 
 TEST(Rel32UtilsTest, Rel32WriterX86) {
@@ -118,4 +145,392 @@
             bytes);
 }
 
+TEST(Rel32UtilsTest, Rel32ReaderArm_Arm32) {
+  constexpr offset_t kTestImageSize = 0x00100000U;
+  constexpr rva_t kRvaBegin = 0x00030000U;
+  TestAddressTranslator translator(kTestImageSize, kRvaBegin);
+
+  // A24.
+  std::vector<uint8_t> bytes = {
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030000: (Filler)
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030004: (Filler)
+      0x00, 0x00, 0x00, 0xEA,  // 00030008: B   00030010 ; A24
+      0xFF, 0xFF, 0xFF, 0xFF,  // 0003000C: (Filler)
+      0xFF, 0xFF, 0xFF, 0xEB,  // 00030010: BL  00030014 ; A24
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030014: (Filler)
+      0xFC, 0xFF, 0xFF, 0xEB,  // 00030018: BL  00030010 ; A24
+      0xF8, 0xFF, 0xFF, 0xEA,  // 0003001C: B   00030004 ; A24
+  };
+  ConstBufferView region(&bytes[0], bytes.size());
+  // Specify rel32 locations directly, instead of parsing.
+  std::vector<offset_t> rel32_locations_A24 = {0x0008U, 0x0010U, 0x0018U,
+                                               0x001CU};
+
+  // Generate everything.
+  auto reader1 =
+      std::make_unique<Rel32ReaderArm<Arm32Rel32Translator::AddrTraits_A24>>(
+          translator, region, rel32_locations_A24, 0x0000U, 0x0020U);
+  CheckReader({{0x0008U, 0x0010U},
+               {0x0010U, 0x0014U},
+               {0x0018U, 0x0010U},
+               {0x001CU, 0x0004U}},
+              std::move(reader1));
+
+  // Exclude last.
+  auto reader2 =
+      std::make_unique<Rel32ReaderArm<Arm32Rel32Translator::AddrTraits_A24>>(
+          translator, region, rel32_locations_A24, 0x0000U, 0x001CU);
+  CheckReader({{0x0008U, 0x0010U}, {0x0010U, 0x0014U}, {0x0018U, 0x0010U}},
+              std::move(reader2));
+
+  // Only find one.
+  auto reader3 =
+      std::make_unique<Rel32ReaderArm<Arm32Rel32Translator::AddrTraits_A24>>(
+          translator, region, rel32_locations_A24, 0x000CU, 0x0018U);
+  CheckReader({{0x0010U, 0x0014U}}, std::move(reader3));
+}
+
+TEST(Rel32UtilsTest, Rel32WriterArm_Arm32_Easy) {
+  constexpr offset_t kTestImageSize = 0x00100000U;
+  constexpr rva_t kRvaBegin = 0x00030000U;
+  TestAddressTranslator translator(kTestImageSize, kRvaBegin);
+
+  std::vector<uint8_t> bytes = {
+      0xFF, 0xFF,              // 00030000: (Filler)
+      0x01, 0xDE,              // 00030002: B   00030008 ; T8
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030004: (Filler)
+      0x01, 0xE0,              // 00030008: B   0003000E ; T11
+      0xFF, 0xFF,              // 0003000A: (Filler)
+      0x80, 0xF3, 0x00, 0x80,  // 0003000C: B   00030010 ; T20
+  };
+  MutableBufferView region(&bytes[0], bytes.size());
+
+  auto writer1 =
+      std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T8>>(
+          translator, region);
+  writer1->PutNext({0x0002U, 0x0004U});
+  EXPECT_EQ(0xFF, bytes[0x02]);  // 00030002: B   00030004 ; T8
+  EXPECT_EQ(0xDE, bytes[0x03]);
+
+  writer1->PutNext({0x0002U, 0x000AU});
+  EXPECT_EQ(0x02, bytes[0x02]);  // 00030002: B   0003000A ; T8
+  EXPECT_EQ(0xDE, bytes[0x03]);
+
+  auto writer2 =
+      std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T11>>(
+          translator, region);
+  writer2->PutNext({0x0008U, 0x0008U});
+  EXPECT_EQ(0xFE, bytes[0x08]);  // 00030008: B   00030008 ; T11
+  EXPECT_EQ(0xE7, bytes[0x09]);
+  writer2->PutNext({0x0008U, 0x0010U});
+  EXPECT_EQ(0x02, bytes[0x08]);  // 00030008: B   00030010 ; T11
+  EXPECT_EQ(0xE0, bytes[0x09]);
+
+  auto writer3 =
+      std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T20>>(
+          translator, region);
+  writer3->PutNext({0x000CU, 0x000AU});
+  EXPECT_EQ(0xBF, bytes[0x0C]);  // 0003000C: B   0003000A ; T20
+  EXPECT_EQ(0xF7, bytes[0x0D]);
+  EXPECT_EQ(0xFD, bytes[0x0E]);
+  EXPECT_EQ(0xAF, bytes[0x0F]);
+  writer3->PutNext({0x000CU, 0x0010U});
+  EXPECT_EQ(0x80, bytes[0x0C]);  // 0003000C: B   00030010 ; T20
+  EXPECT_EQ(0xF3, bytes[0x0D]);
+  EXPECT_EQ(0x00, bytes[0x0E]);
+  EXPECT_EQ(0x80, bytes[0x0F]);
+}
+
+TEST(Rel32UtilsTest, Rel32WriterArm_Arm32_Hard) {
+  constexpr offset_t kTestImageSize = 0x10000000U;
+  constexpr rva_t kRvaBegin = 0x0C030000U;
+  TestAddressTranslator translator(kTestImageSize, kRvaBegin);
+
+  std::vector<uint8_t> bytes = {
+      0xFF, 0xFF,              // 0C030000: (Filler)
+      0x00, 0xF0, 0x00, 0xB8,  // 0C030002: B   0C030006 ; T24
+      0xFF, 0xFF, 0xFF, 0xFF,  // 0C030006: (Filler)
+      0x00, 0xF0, 0x7A, 0xE8,  // 0C03000A: BLX 0C030100 ; T24
+      0xFF, 0xFF,              // 0C03000E: (Filler)
+      0x00, 0xF0, 0x7A, 0xE8,  // 0C030010: BLX 0C030108 ; T24
+  };
+  MutableBufferView region(&bytes[0], bytes.size());
+
+  auto writer =
+      std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T24>>(
+          translator, region);
+  writer->PutNext({0x0002U, 0x0000U});
+  EXPECT_EQ(0xFF, bytes[0x02]);  // 0C030002: B   0C030000 ; T24
+  EXPECT_EQ(0xF7, bytes[0x03]);
+  EXPECT_EQ(0xFD, bytes[0x04]);
+  EXPECT_EQ(0xBF, bytes[0x05]);
+  writer->PutNext({0x0002U, 0x0008U});
+  EXPECT_EQ(0x00, bytes[0x02]);  // 0C030002: B   0C030008 ; T24
+  EXPECT_EQ(0xF0, bytes[0x03]);
+  EXPECT_EQ(0x01, bytes[0x04]);
+  EXPECT_EQ(0xB8, bytes[0x05]);
+
+  // BLX complication, with location that's not 4-byte aligned.
+  writer->PutNext({0x000AU, 0x0010U});
+  EXPECT_EQ(0x00, bytes[0x0A]);  // 0C03000A: BLX 0C030010 ; T24
+  EXPECT_EQ(0xF0, bytes[0x0B]);
+  EXPECT_EQ(0x02, bytes[0x0C]);
+  EXPECT_EQ(0xE8, bytes[0x0D]);
+  writer->PutNext({0x000AU, 0x0100U});
+  EXPECT_EQ(0x00, bytes[0x0A]);  // 0C03000A: BLX 0C030100 ; T24
+  EXPECT_EQ(0xF0, bytes[0x0B]);
+  EXPECT_EQ(0x7A, bytes[0x0C]);
+  EXPECT_EQ(0xE8, bytes[0x0D]);
+  writer->PutNext({0x000AU, 0x0000U});
+  EXPECT_EQ(0xFF, bytes[0x0A]);  // 0C03000A: BLX 0C030000 ; T24
+  EXPECT_EQ(0xF7, bytes[0x0B]);
+  EXPECT_EQ(0xFA, bytes[0x0C]);
+  EXPECT_EQ(0xEF, bytes[0x0D]);
+
+  // BLX complication, with location that's 4-byte aligned.
+  writer->PutNext({0x0010U, 0x0010U});
+  EXPECT_EQ(0xFF, bytes[0x10]);  // 0C030010: BLX 0C030010 ; T24
+  EXPECT_EQ(0xF7, bytes[0x11]);
+  EXPECT_EQ(0xFE, bytes[0x12]);
+  EXPECT_EQ(0xEF, bytes[0x13]);
+  writer->PutNext({0x0010U, 0x0108U});
+  EXPECT_EQ(0x00, bytes[0x10]);  // 0C030010: BLX 0C030108 ; T24
+  EXPECT_EQ(0xF0, bytes[0x11]);
+  EXPECT_EQ(0x7A, bytes[0x12]);
+  EXPECT_EQ(0xE8, bytes[0x13]);
+}
+
+// Test BLX encoding A2, which is an ARM instruction that switches to THUMB2,
+// and therefore should have 2-byte alignment.
+TEST(Rel32UtilsTest, Arm32SwitchToThumb2) {
+  constexpr offset_t kTestImageSize = 0x10000000U;
+  constexpr rva_t kRvaBegin = 0x08030000U;
+  TestAddressTranslator translator(kTestImageSize, kRvaBegin);
+
+  std::vector<uint8_t> bytes = {
+      0xFF, 0xFF, 0x00, 0x00,  // 08030000: (Filler)
+      0x00, 0x00, 0x00, 0xFA,  // 08030004: BLX 0803000C ; A24
+  };
+  MutableBufferView region(&bytes[0], bytes.size());
+
+  auto writer =
+      std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_A24>>(
+          translator, region);
+
+  // To location that's 4-byte aligned.
+  writer->PutNext({0x0004U, 0x0100U});
+  EXPECT_EQ(0x3D, bytes[0x04]);  // 08030004: BLX 08030100 ; A24
+  EXPECT_EQ(0x00, bytes[0x05]);
+  EXPECT_EQ(0x00, bytes[0x06]);
+  EXPECT_EQ(0xFA, bytes[0x07]);
+
+  // To location that's 2-byte aligned but not 4-byte aligned.
+  writer->PutNext({0x0004U, 0x0052U});
+  EXPECT_EQ(0x11, bytes[0x04]);  // 08030004: BLX 08030052 ; A24
+  EXPECT_EQ(0x00, bytes[0x05]);
+  EXPECT_EQ(0x00, bytes[0x06]);
+  EXPECT_EQ(0xFB, bytes[0x07]);
+
+  // Clean slate code.
+  writer->PutNext({0x0004U, 0x000CU});
+  EXPECT_EQ(0x00, bytes[0x04]);  // 08030004: BLX 0803000C ; A24
+  EXPECT_EQ(0x00, bytes[0x05]);
+  EXPECT_EQ(0x00, bytes[0x06]);
+  EXPECT_EQ(0xFA, bytes[0x07]);
+}
+
+TEST(Rel32UtilsTest, ArmCopyDisp_Arm32) {
+  std::vector<uint8_t> expect_fail;
+
+  // Successful A24.
+  ArmCopyDispFun copier_A24 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_A24>;
+  CheckCopy({0x12, 0x34, 0x56, 0xEB},  // 00000100: BL     0158D150
+            {0xA0, 0xC0, 0x0E, 0x2A},  // 00000100: BCS    003B0388
+            {0x12, 0x34, 0x56, 0x2A},  // 00000100: BCS    0158D150
+            {0xA0, 0xC0, 0x0E, 0xEB},  // 00000100: BL     003B0388
+            copier_A24);
+
+  // Successful T8.
+  ArmCopyDispFun copier_T8 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T8>;
+  CheckCopy({0x12, 0xD5},  // 00000100: BPL    00000128
+            {0xAB, 0xD8},  // 00000100: BHI    0000005A
+            {0x12, 0xD8},  // 00000100: BHI    00000128
+            {0xAB, 0xD5},  // 00000100: BPL    0000005A
+            copier_T8);
+
+  // Successful T11.
+  ArmCopyDispFun copier_T11 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T11>;
+  CheckCopy({0xF5, 0xE0},  // 00000100: B      000002EE
+            {0x12, 0xE7},  // 00000100: B      FFFFFF28
+            {0xF5, 0xE0},  // 00000100: B      000002EE
+            {0x12, 0xE7},  // 00000100: B      FFFFFF28
+            copier_T11);
+
+  // Failure if wrong copier is used.
+  CheckCopy(expect_fail, expect_fail, {0xF5, 0xE0}, {0x12, 0xE7}, copier_T8);
+
+  // Successful T20.
+  ArmCopyDispFun copier_T20 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T20>;
+  CheckCopy({0x41, 0xF2, 0xA5, 0x88},  // 00000100: BLS.W   0008124E
+            {0x04, 0xF3, 0x3C, 0xA2},  // 00000100: BGT.W   0004457C
+            {0x01, 0xF3, 0xA5, 0x88},  // 00000100: BGT.W   0008124E
+            {0x44, 0xF2, 0x3C, 0xA2},  // 00000100: BLS.W   0004457C
+            copier_T20);
+  CheckCopy({0x7F, 0xF6, 0xFF, 0xAF},  // 00000100: BLS.W   00000102
+            {0x00, 0xF3, 0x00, 0x80},  // 00000100: BGT.W   00000104
+            {0x3F, 0xF7, 0xFF, 0xAF},  // 00000100: BGT.W   00000102
+            {0x40, 0xF2, 0x00, 0x80},  // 00000100: BLS.W   00000104
+            copier_T20);
+
+  // Failure if wrong copier is used.
+  CheckCopy(expect_fail, expect_fail, {0x41, 0xF2, 0xA5, 0x88},
+            {0x84, 0xF3, 0x3C, 0xA2}, copier_A24);
+
+  // T24: Mix B encoding T4 and BL encoding T1.
+  ArmCopyDispFun copier_T24 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T24>;
+  CheckCopy({0xFF, 0xF7, 0xFF, 0xFF},  // 00000100: BL      00000102
+            {0x00, 0xF0, 0x00, 0x90},  // 00000100: B.W     00C00104
+            {0xFF, 0xF7, 0xFF, 0xBF},  // 00000100: B.W     00000102
+            {0x00, 0xF0, 0x00, 0xD0},  // 00000100: BL      00C00104
+            copier_T24);
+
+  // Mix B encoding T4 and BLX encoding T2. Note that the forward direction
+  // fails because B's target is invalid for BLX! It's possible to do "best
+  // effort" copying to reduce diff -- but right now we're not doing this.
+  CheckCopy(expect_fail, {0x00, 0xF0, 0x00, 0x90},  // 00000100: B.W 00C00104
+            {0xFF, 0xF7, 0xFF, 0xBF},  // 00000100: B.W     00000102
+            {0x00, 0xF0, 0x00, 0xC0},  // 00000100: BLX     00C00104
+            copier_T24);
+  // Success if ow B's target is valid for BLX.
+  CheckCopy({0xFF, 0xF7, 0xFE, 0xEF},  // 00000100: BLX     00000100
+            {0x00, 0xF0, 0x00, 0x90},  // 00000100: B.W     00C00104
+            {0xFF, 0xF7, 0xFE, 0xBF},  // 00000100: B.W     00000100
+            {0x00, 0xF0, 0x00, 0xC0},  // 00000100: BLX     00C00104
+            copier_T24);
+}
+
+TEST(Rel32UtilsTest, Rel32ReaderArm_AArch64) {
+  constexpr offset_t kTestImageSize = 0x00100000U;
+  constexpr rva_t kRvaBegin = 0x00030000U;
+  TestAddressTranslator translator(kTestImageSize, kRvaBegin);
+
+  std::vector<uint8_t> bytes = {
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030000: (Filler)
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030004: (Filler)
+      0x02, 0x00, 0x00, 0x14,  // 00030008: B    00030010 ; Immd26
+      0xFF, 0xFF, 0xFF, 0xFF,  // 0003000C: (Filler)
+      0x25, 0x00, 0x00, 0x35,  // 00030010: CBNZ R5,00030014 ; Immd19
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030014: (Filler)
+      0xCA, 0xFF, 0xFF, 0x54,  // 00030018: BGE  00030010 ; Immd19
+      0x4C, 0xFF, 0x8F, 0x36,  // 0003001C: TBZ  X12,#17,00030004 ; Immd14
+  };
+  MutableBufferView region(&bytes[0], bytes.size());
+
+  // Generate Immd26. We specify rel32 locations directly.
+  std::vector<offset_t> rel32_locations_Immd26 = {0x0008U};
+  auto reader1 = std::make_unique<
+      Rel32ReaderArm<AArch64Rel32Translator::AddrTraits_Immd26>>(
+      translator, region, rel32_locations_Immd26, 0x0000U, 0x0020U);
+  CheckReader({{0x0008U, 0x0010U}}, std::move(reader1));
+
+  // Generate Immd19.
+  std::vector<offset_t> rel32_locations_Immd19 = {0x0010U, 0x0018U};
+  auto reader2 = std::make_unique<
+      Rel32ReaderArm<AArch64Rel32Translator::AddrTraits_Immd19>>(
+      translator, region, rel32_locations_Immd19, 0x0000U, 0x0020U);
+  CheckReader({{0x0010U, 0x0014U}, {0x0018U, 0x0010U}}, std::move(reader2));
+
+  // Generate Immd14.
+  std::vector<offset_t> rel32_locations_Immd14 = {0x001CU};
+  auto reader3 = std::make_unique<
+      Rel32ReaderArm<AArch64Rel32Translator::AddrTraits_Immd14>>(
+      translator, region, rel32_locations_Immd14, 0x0000U, 0x0020U);
+  CheckReader({{0x001CU, 0x0004U}}, std::move(reader3));
+}
+
+TEST(Rel32UtilsTest, Rel32WriterArm_AArch64) {
+  constexpr offset_t kTestImageSize = 0x00100000U;
+  constexpr rva_t kRvaBegin = 0x00030000U;
+  TestAddressTranslator translator(kTestImageSize, kRvaBegin);
+
+  std::vector<uint8_t> bytes = {
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030000: (Filler)
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030004: (Filler)
+      0x02, 0x00, 0x00, 0x14,  // 00030008: B    00030010 ; Immd26
+      0xFF, 0xFF, 0xFF, 0xFF,  // 0003000C: (Filler)
+      0x25, 0x00, 0x00, 0x35,  // 00030010: CBNZ R5,00030014 ; Immd19
+      0xFF, 0xFF, 0xFF, 0xFF,  // 00030014: (Filler)
+      0xCA, 0xFF, 0xFF, 0x54,  // 00030018: BGE  00030010 ; Immd19
+      0x4C, 0xFF, 0x8F, 0x36,  // 0003001C: TBZ  X12,#17,00030004 ; Immd14
+  };
+  MutableBufferView region(&bytes[0], bytes.size());
+
+  auto writer1 = std::make_unique<
+      Rel32WriterArm<AArch64Rel32Translator::AddrTraits_Immd26>>(translator,
+                                                                 region);
+  writer1->PutNext({0x0008U, 0x0000U});
+  EXPECT_EQ(0xFE, bytes[0x08]);  // 00030008: B    00030000 ; Immd26
+  EXPECT_EQ(0xFF, bytes[0x09]);
+  EXPECT_EQ(0xFF, bytes[0x0A]);
+  EXPECT_EQ(0x17, bytes[0x0B]);
+
+  auto writer2 = std::make_unique<
+      Rel32WriterArm<AArch64Rel32Translator::AddrTraits_Immd19>>(translator,
+                                                                 region);
+  writer2->PutNext({0x0010U, 0x0000U});
+  EXPECT_EQ(0x85, bytes[0x10]);  // 00030010: CBNZ R5,00030000 ; Immd19
+  EXPECT_EQ(0xFF, bytes[0x11]);
+  EXPECT_EQ(0xFF, bytes[0x12]);
+  EXPECT_EQ(0x35, bytes[0x13]);
+  writer2->PutNext({0x0018U, 0x001CU});
+  EXPECT_EQ(0x2A, bytes[0x18]);  // 00030018: BGE  0003001C ; Immd19
+  EXPECT_EQ(0x00, bytes[0x19]);
+  EXPECT_EQ(0x00, bytes[0x1A]);
+  EXPECT_EQ(0x54, bytes[0x1B]);
+
+  auto writer3 = std::make_unique<
+      Rel32WriterArm<AArch64Rel32Translator::AddrTraits_Immd14>>(translator,
+                                                                 region);
+  writer3->PutNext({0x001CU, 0x0010U});
+  EXPECT_EQ(0xAC, bytes[0x1C]);  // 0003001C: TBZ  X12,#17,00030010 ; Immd14
+  EXPECT_EQ(0xFF, bytes[0x1D]);
+  EXPECT_EQ(0x8F, bytes[0x1E]);
+  EXPECT_EQ(0x36, bytes[0x1F]);
+}
+
+TEST(Rel32UtilsTest, ArmCopyDisp_AArch64) {
+  std::vector<uint8_t> expect_fail;
+
+  // Successful Imm26.
+  ArmCopyDispFun copier_Immd26 =
+      ArmCopyDisp<AArch64Rel32Translator::AddrTraits_Immd26>;
+  CheckCopy({0x12, 0x34, 0x56, 0x94},  // 00000100: BL     0158D148
+            {0xA1, 0xC0, 0x0E, 0x17},  // 00000100: B      FC3B0384
+            {0x12, 0x34, 0x56, 0x14},  // 00000100: B      0158D148
+            {0xA1, 0xC0, 0x0E, 0x97},  // 00000100: BL     FC3B0384
+            copier_Immd26);
+
+  // Successful Imm19.
+  ArmCopyDispFun copier_Immd19 =
+      ArmCopyDisp<AArch64Rel32Translator::AddrTraits_Immd19>;
+  CheckCopy({0x24, 0x12, 0x34, 0x54},  // 00000100: BMI    00068344
+            {0xD7, 0xA5, 0xFC, 0xB4},  // 00000100: CBZ    X23,FFFF95B8
+            {0x37, 0x12, 0x34, 0xB4},  // 00000100: CBZ    X23,00068344
+            {0xC4, 0xA5, 0xFC, 0x54},  // 00000100: BMI    FFFF95B8
+            copier_Immd19);
+
+  // Successful Imm14.
+  ArmCopyDispFun copier_Immd14 =
+      ArmCopyDisp<AArch64Rel32Translator::AddrTraits_Immd14>;
+  CheckCopy({0x00, 0x00, 0x00, 0x36},  // 00000100: TBZ    X0,#0,00000100
+            {0xFF, 0xFF, 0xFF, 0xB7},  // 00000100: TBNZ   ZR,#63,000000FC
+            {0x1F, 0x00, 0xF8, 0xB7},  // 00000100: TBNZ   ZR,#63,00000100
+            {0xE0, 0xFF, 0x07, 0x36},  // 00000100: TBZ    X0,#0,000000FC
+            copier_Immd14);
+
+  // Failure if wrong copier is used.
+  CheckCopy(expect_fail, expect_fail, {0x1F, 0x00, 0xF8, 0xB7},
+            {0xE0, 0xFF, 0x07, 0x36}, copier_Immd26);
+}
+
 }  // namespace zucchini
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 46d8b92c..9bcbb0a 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1288,8 +1288,6 @@
     "permissions/permission_service_impl.h",
     "picture_in_picture/overlay_surface_embedder.cc",
     "picture_in_picture/overlay_surface_embedder.h",
-    "picture_in_picture/picture_in_picture_service_impl.cc",
-    "picture_in_picture/picture_in_picture_service_impl.h",
     "picture_in_picture/picture_in_picture_window_controller_impl.cc",
     "picture_in_picture/picture_in_picture_window_controller_impl.h",
     "portal/portal.cc",
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index ff6f11d..12d8e998 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -1981,6 +1981,69 @@
   EXPECT_EQ(kContentsLength, end_offset);
 }
 
+IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
+                       DISABLED_TestSetSelectionRanges) {
+  Microsoft::WRL::ComPtr<IAccessibleText> input_text;
+  SetUpInputField(&input_text);
+  Microsoft::WRL::ComPtr<IAccessible2_4> ax_input;
+  ASSERT_HRESULT_SUCCEEDED(input_text.CopyTo(IID_PPV_ARGS(&ax_input)));
+
+  LONG n_ranges = 1;
+  IA2Range* ranges =
+      reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range)));
+  ranges[0].anchor = ax_input.Get();
+  ranges[0].anchorOffset = -1;
+  ranges[0].active = ax_input.Get();
+  ranges[0].activeOffset = kContentsLength;
+  EXPECT_HRESULT_FAILED(ax_input->setSelectionRanges(n_ranges, ranges));
+  ranges[0].anchorOffset = 0;
+  ranges[0].activeOffset = kContentsLength + 1;
+  EXPECT_HRESULT_FAILED(ax_input->setSelectionRanges(n_ranges, ranges));
+
+  ranges[0].activeOffset = kContentsLength;
+  AccessibilityNotificationWaiter waiter(
+      shell()->web_contents(), ui::kAXModeComplete,
+      ax::mojom::Event::kTextSelectionChanged);
+  EXPECT_HRESULT_SUCCEEDED(ax_input->setSelectionRanges(n_ranges, ranges));
+  waiter.WaitForNotification();
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+  n_ranges = 0;
+
+  HRESULT hr = ax_input->get_selectionRanges(&ranges, &n_ranges);
+  EXPECT_EQ(S_OK, hr);
+  EXPECT_EQ(1, n_ranges);
+  ASSERT_NE(nullptr, ranges);
+  EXPECT_EQ(ax_input.Get(), ranges[0].anchor);
+  EXPECT_EQ(0, ranges[0].anchorOffset);
+  EXPECT_EQ(ax_input.Get(), ranges[0].active);
+  EXPECT_EQ(kContentsLength, ranges[0].activeOffset);
+
+  n_ranges = 1;
+  ranges =
+      reinterpret_cast<IA2Range*>(CoTaskMemRealloc(ranges, sizeof(IA2Range)));
+  ranges[0].anchor = ax_input.Get();
+  ranges[0].anchorOffset = kContentsLength;
+  ranges[0].active = ax_input.Get();
+  ranges[0].activeOffset = 1;
+  EXPECT_HRESULT_SUCCEEDED(ax_input->setSelectionRanges(n_ranges, ranges));
+  waiter.WaitForNotification();
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+  n_ranges = 0;
+
+  hr = ax_input->get_selectionRanges(&ranges, &n_ranges);
+  EXPECT_EQ(S_OK, hr);
+  EXPECT_EQ(1, n_ranges);
+  ASSERT_NE(nullptr, ranges);
+  EXPECT_EQ(ax_input.Get(), ranges[0].anchor);
+  EXPECT_EQ(kContentsLength, ranges[0].anchorOffset);
+  EXPECT_EQ(ax_input.Get(), ranges[0].active);
+  EXPECT_EQ(1, ranges[0].activeOffset);
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+}
+
 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestMultiLineSetSelection) {
   Microsoft::WRL::ComPtr<IAccessibleText> textarea_text;
   SetUpTextareaField(&textarea_text);
@@ -2022,6 +2085,69 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
+                       DISABLED_TestMultiLineSetSelectionRanges) {
+  Microsoft::WRL::ComPtr<IAccessibleText> textarea_text;
+  SetUpTextareaField(&textarea_text);
+  Microsoft::WRL::ComPtr<IAccessible2_4> ax_textarea;
+  ASSERT_HRESULT_SUCCEEDED(textarea_text.CopyTo(IID_PPV_ARGS(&ax_textarea)));
+
+  LONG n_ranges = 1;
+  IA2Range* ranges =
+      reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range)));
+  ranges[0].anchor = ax_textarea.Get();
+  ranges[0].anchorOffset = -1;
+  ranges[0].active = ax_textarea.Get();
+  ranges[0].activeOffset = kContentsLength;
+  EXPECT_HRESULT_FAILED(ax_textarea->setSelectionRanges(n_ranges, ranges));
+  ranges[0].anchorOffset = 0;
+  ranges[0].activeOffset = kContentsLength + 1;
+  EXPECT_HRESULT_FAILED(ax_textarea->setSelectionRanges(n_ranges, ranges));
+
+  ranges[0].activeOffset = kContentsLength;
+  AccessibilityNotificationWaiter waiter(
+      shell()->web_contents(), ui::kAXModeComplete,
+      ax::mojom::Event::kTextSelectionChanged);
+  EXPECT_HRESULT_SUCCEEDED(ax_textarea->setSelectionRanges(n_ranges, ranges));
+  waiter.WaitForNotification();
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+  n_ranges = 0;
+
+  HRESULT hr = ax_textarea->get_selectionRanges(&ranges, &n_ranges);
+  EXPECT_EQ(S_OK, hr);
+  EXPECT_EQ(1, n_ranges);
+  ASSERT_NE(nullptr, ranges);
+  EXPECT_EQ(ax_textarea.Get(), ranges[0].anchor);
+  EXPECT_EQ(0, ranges[0].anchorOffset);
+  EXPECT_EQ(ax_textarea.Get(), ranges[0].active);
+  EXPECT_EQ(kContentsLength, ranges[0].activeOffset);
+
+  n_ranges = 1;
+  ranges =
+      reinterpret_cast<IA2Range*>(CoTaskMemRealloc(ranges, sizeof(IA2Range)));
+  ranges[0].anchor = ax_textarea.Get();
+  ranges[0].anchorOffset = kContentsLength - 1;
+  ranges[0].active = ax_textarea.Get();
+  ranges[0].activeOffset = 0;
+  EXPECT_HRESULT_SUCCEEDED(ax_textarea->setSelectionRanges(n_ranges, ranges));
+  waiter.WaitForNotification();
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+  n_ranges = 0;
+
+  hr = ax_textarea->get_selectionRanges(&ranges, &n_ranges);
+  EXPECT_EQ(S_OK, hr);
+  EXPECT_EQ(1, n_ranges);
+  ASSERT_NE(nullptr, ranges);
+  EXPECT_EQ(ax_textarea.Get(), ranges[0].anchor);
+  EXPECT_EQ(kContentsLength - 1, ranges[0].anchorOffset);
+  EXPECT_EQ(ax_textarea.Get(), ranges[0].active);
+  EXPECT_EQ(0, ranges[0].activeOffset);
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
                        TestStaticTextSetSelection) {
   Microsoft::WRL::ComPtr<IAccessibleText> paragraph_text;
   SetUpSampleParagraph(&paragraph_text);
@@ -2060,6 +2186,73 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
+                       DISABLED_TestStaticTextSetSelectionRanges) {
+  Microsoft::WRL::ComPtr<IAccessibleText> paragraph_text;
+  SetUpSampleParagraph(&paragraph_text);
+  Microsoft::WRL::ComPtr<IAccessible2_4> ax_paragraph;
+  ASSERT_HRESULT_SUCCEEDED(paragraph_text.CopyTo(IID_PPV_ARGS(&ax_paragraph)));
+
+  LONG child_count = 0;
+  ASSERT_HRESULT_SUCCEEDED(ax_paragraph->get_accChildCount(&child_count));
+  ASSERT_LT(0, child_count);
+
+  LONG n_ranges = 1;
+  IA2Range* ranges =
+      reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range)));
+  ranges[0].anchor = ax_paragraph.Get();
+  ranges[0].anchorOffset = -1;
+  ranges[0].active = ax_paragraph.Get();
+  ranges[0].activeOffset = child_count;
+  EXPECT_HRESULT_FAILED(ax_paragraph->setSelectionRanges(n_ranges, ranges));
+  ranges[0].anchorOffset = 0;
+  ranges[0].activeOffset = child_count + 1;
+  EXPECT_HRESULT_FAILED(ax_paragraph->setSelectionRanges(n_ranges, ranges));
+
+  ranges[0].activeOffset = child_count;
+  AccessibilityNotificationWaiter waiter(
+      shell()->web_contents(), ui::kAXModeComplete,
+      ax::mojom::Event::kDocumentSelectionChanged);
+  EXPECT_HRESULT_SUCCEEDED(ax_paragraph->setSelectionRanges(n_ranges, ranges));
+  waiter.WaitForNotification();
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+  n_ranges = 0;
+
+  HRESULT hr = ax_paragraph->get_selectionRanges(&ranges, &n_ranges);
+  EXPECT_EQ(S_OK, hr);
+  EXPECT_EQ(1, n_ranges);
+  ASSERT_NE(nullptr, ranges);
+  EXPECT_EQ(ax_paragraph.Get(), ranges[0].anchor);
+  EXPECT_EQ(0, ranges[0].anchorOffset);
+  EXPECT_EQ(ax_paragraph.Get(), ranges[0].active);
+  EXPECT_EQ(child_count, ranges[0].activeOffset);
+
+  n_ranges = 1;
+  ranges =
+      reinterpret_cast<IA2Range*>(CoTaskMemRealloc(ranges, sizeof(IA2Range)));
+  ranges[0].anchor = ax_paragraph.Get();
+  ranges[0].anchorOffset = child_count - 1;
+  ranges[0].active = ax_paragraph.Get();
+  ranges[0].activeOffset = 0;
+  EXPECT_HRESULT_SUCCEEDED(ax_paragraph->setSelectionRanges(n_ranges, ranges));
+  waiter.WaitForNotification();
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+  n_ranges = 0;
+
+  hr = ax_paragraph->get_selectionRanges(&ranges, &n_ranges);
+  EXPECT_EQ(S_OK, hr);
+  EXPECT_EQ(1, n_ranges);
+  ASSERT_NE(nullptr, ranges);
+  EXPECT_EQ(ax_paragraph.Get(), ranges[0].anchor);
+  EXPECT_EQ(kContentsLength - 1, ranges[0].anchorOffset);
+  EXPECT_EQ(ax_paragraph.Get(), ranges[0].active);
+  EXPECT_EQ(0, ranges[0].activeOffset);
+  CoTaskMemFree(ranges);
+  ranges = nullptr;
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
                        TestTextAtOffsetWithInvalidArguments) {
   Microsoft::WRL::ComPtr<IAccessibleText> input_text;
   SetUpInputField(&input_text);
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 8ca8828b..4cbb5aa 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -1231,6 +1231,9 @@
     case ax::mojom::Action::kScrollToMakeVisible:
       manager_->ScrollToMakeVisible(*this, data.target_rect);
       return true;
+    case ax::mojom::Action::kSetSelection:
+      manager_->SetSelection(data);
+      return true;
     case ax::mojom::Action::kSetValue:
       manager_->SetValue(*this, data.value);
       return true;
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 0116955..d719009d 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -667,7 +667,15 @@
   delegate_->AccessibilityPerformAction(action_data);
 }
 
-void BrowserAccessibilityManager::SetSelection(AXPlatformRange range) {
+void BrowserAccessibilityManager::SetSelection(
+    const ui::AXActionData& action_data) {
+  if (!delegate_)
+    return;
+  delegate_->AccessibilityPerformAction(action_data);
+}
+
+void BrowserAccessibilityManager::SetSelection(
+    const BrowserAccessibilityRange& range) {
   if (!delegate_ || range.IsNull())
     return;
 
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index a1a0472..84bbe6e0 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -113,6 +113,12 @@
 
 // Manages a tree of BrowserAccessibility objects.
 class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeObserver {
+ protected:
+  using BrowserAccessibilityPositionInstance =
+      BrowserAccessibilityPosition::AXPositionInstance;
+  using BrowserAccessibilityRange =
+      ui::AXRange<BrowserAccessibilityPositionInstance::element_type>;
+
  public:
   // Creates the platform-specific BrowserAccessibilityManager, but
   // with no parent window pointer. Only useful for unit tests.
@@ -220,10 +226,8 @@
   void SetFocus(const BrowserAccessibility& node);
   void SetScrollOffset(const BrowserAccessibility& node, gfx::Point offset);
   void SetValue(const BrowserAccessibility& node, const std::string& value);
-  void SetSelection(
-      ui::AXRange<
-          BrowserAccessibilityPosition::AXPositionInstance::element_type>
-          range);
+  void SetSelection(const ui::AXActionData& action_data);
+  void SetSelection(const BrowserAccessibilityRange& range);
   void ShowContextMenu(const BrowserAccessibility& node);
 
   // Retrieve the bounds of the parent View in screen coordinates.
@@ -385,11 +389,6 @@
   void CacheHitTestResult(BrowserAccessibility* hit_test_result);
 
  protected:
-  using BrowserAccessibilityPositionInstance =
-      BrowserAccessibilityPosition::AXPositionInstance;
-  using AXPlatformRange =
-      ui::AXRange<BrowserAccessibilityPositionInstance::element_type>;
-
   BrowserAccessibilityManager(
       BrowserAccessibilityDelegate* delegate,
       BrowserAccessibilityFactory* factory);
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 62c0957..36b893e 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -73,7 +73,6 @@
 #include "content/browser/permissions/permission_controller_impl.h"
 #include "content/browser/permissions/permission_service_context.h"
 #include "content/browser/permissions/permission_service_impl.h"
-#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
 #include "content/browser/portal/portal.h"
 #include "content/browser/presentation/presentation_service_impl.h"
 #include "content/browser/quota_dispatcher_host.h"
@@ -4084,9 +4083,6 @@
 
   registry_->AddInterface(base::BindRepeating(&WakeLockServiceImpl::Create,
                                               base::Unretained(this)));
-
-  registry_->AddInterface(base::BindRepeating(
-      &PictureInPictureServiceImpl::Create, base::Unretained(this)));
 }
 
 void RenderFrameHostImpl::ResetWaitingState() {
@@ -5657,7 +5653,7 @@
 }
 
 void RenderFrameHostImpl::CreateDedicatedWorkerHostFactory(
-    blink::mojom::DedicatedWorkerFactoryRequest request) {
+    blink::mojom::DedicatedWorkerHostFactoryRequest request) {
   content::CreateDedicatedWorkerHostFactory(process_->GetID(), routing_id_,
                                             last_committed_origin_,
                                             std::move(request));
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index deb7dc5..5c720af 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -72,7 +72,7 @@
 #include "third_party/blink/public/mojom/frame/navigation_initiator.mojom.h"
 #include "third_party/blink/public/mojom/presentation/presentation.mojom.h"
 #include "third_party/blink/public/mojom/serial/serial.mojom.h"
-#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom.h"
+#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom.h"
 #include "third_party/blink/public/platform/modules/bluetooth/web_bluetooth.mojom.h"
 #include "third_party/blink/public/platform/modules/webauthn/authenticator.mojom.h"
 #include "third_party/blink/public/platform/web_focus_type.h"
@@ -1285,7 +1285,7 @@
   void CreateWebSocket(network::mojom::WebSocketRequest request);
 
   void CreateDedicatedWorkerHostFactory(
-      blink::mojom::DedicatedWorkerFactoryRequest request);
+      blink::mojom::DedicatedWorkerHostFactoryRequest request);
 
   // Callback for connection error on the media::mojom::InterfaceFactory client.
   void OnMediaInterfaceFactoryConnectionError();
diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc
index 740bdc6..6e29f3c 100644
--- a/content/browser/media/media_web_contents_observer.cc
+++ b/content/browser/media/media_web_contents_observer.cc
@@ -77,6 +77,11 @@
     picture_in_picture_allowed_in_fullscreen_.reset();
     fullscreen_player_.reset();
   }
+
+  // Usually the frame will exit PIP before it is deleted but for OOPIF, it
+  // seems that the player never notifies the browser process.
+  if (pip_player_ && pip_player_->render_frame_host == render_frame_host)
+    ExitPictureInPictureInternal();
 }
 
 void MediaWebContentsObserver::MaybeUpdateAudibleState() {
@@ -115,6 +120,15 @@
   return fullscreen_player_;
 }
 
+const base::Optional<WebContentsObserver::MediaPlayerId>&
+MediaWebContentsObserver::GetPictureInPictureVideoMediaPlayerId() const {
+  return pip_player_;
+}
+
+void MediaWebContentsObserver::ResetPictureInPictureVideoMediaPlayerId() {
+  pip_player_.reset();
+}
+
 bool MediaWebContentsObserver::OnMessageReceived(
     const IPC::Message& msg,
     RenderFrameHost* render_frame_host) {
@@ -134,8 +148,16 @@
     IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaSizeChanged,
                         OnMediaSizeChanged)
     IPC_MESSAGE_HANDLER(
+        MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted,
+        OnPictureInPictureModeStarted)
+    IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded,
+                        OnPictureInPictureModeEnded)
+    IPC_MESSAGE_HANDLER(
         MediaPlayerDelegateHostMsg_OnSetPictureInPictureCustomControls,
         OnSetPictureInPictureCustomControls)
+    IPC_MESSAGE_HANDLER(
+        MediaPlayerDelegateHostMsg_OnPictureInPictureSurfaceChanged,
+        OnPictureInPictureSurfaceChanged)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   return handled;
@@ -165,6 +187,16 @@
   return MediaPlayerEntryExists(player_id, active_audio_players_);
 }
 
+void MediaWebContentsObserver::OnPictureInPictureWindowResize(
+    const gfx::Size& window_size) {
+  DCHECK(pip_player_.has_value());
+
+  pip_player_->render_frame_host->Send(
+      new MediaPlayerDelegateMsg_OnPictureInPictureWindowResize(
+          pip_player_->render_frame_host->GetRoutingID(),
+          pip_player_->delegate_id, window_size));
+}
+
 void MediaWebContentsObserver::OnMediaDestroyed(
     RenderFrameHost* render_frame_host,
     int delegate_id) {
@@ -180,6 +212,16 @@
   const bool removed_video =
       RemoveMediaPlayerEntry(player_id, &active_video_players_);
 
+  if (!web_contents()->IsBeingDestroyed() && pip_player_ == player_id) {
+    PictureInPictureWindowControllerImpl* pip_controller =
+        PictureInPictureWindowControllerImpl::FromWebContents(
+            web_contents_impl());
+    if (pip_controller) {
+      pip_controller->UpdatePlaybackState(false /* is not playing */,
+                                          reached_end_of_stream);
+    }
+  }
+
   if (removed_audio || removed_video) {
     // Notify observers the player has been "paused".
     web_contents_impl()->MediaStoppedPlaying(
@@ -221,6 +263,16 @@
     return;
   }
 
+  if (!web_contents()->IsBeingDestroyed() && pip_player_ == id) {
+    PictureInPictureWindowControllerImpl* pip_controller =
+        PictureInPictureWindowControllerImpl::FromWebContents(
+            web_contents_impl());
+    if (pip_controller) {
+      pip_controller->UpdatePlaybackState(true /* is not playing */,
+                                          false /* reached_end_of_stream */);
+    }
+  }
+
   // Notify observers of the new player.
   web_contents_impl()->MediaStartedPlaying(
       WebContentsObserver::MediaPlayerInfo(has_video, has_audio), id);
@@ -265,6 +317,41 @@
   web_contents_impl()->MediaResized(size, id);
 }
 
+void MediaWebContentsObserver::OnPictureInPictureModeStarted(
+    RenderFrameHost* render_frame_host,
+    int delegate_id,
+    const viz::SurfaceId& surface_id,
+    const gfx::Size& natural_size,
+    int request_id,
+    bool show_play_pause_button) {
+  DCHECK(surface_id.is_valid());
+  pip_player_ = MediaPlayerId(render_frame_host, delegate_id);
+
+  gfx::Size window_size =
+      web_contents_impl()->EnterPictureInPicture(surface_id, natural_size);
+
+  if (auto* pip_controller =
+          PictureInPictureWindowControllerImpl::FromWebContents(
+              web_contents_impl()))
+    pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button);
+
+  render_frame_host->Send(
+      new MediaPlayerDelegateMsg_OnPictureInPictureModeStarted_ACK(
+          render_frame_host->GetRoutingID(), delegate_id, request_id,
+          window_size));
+}
+
+void MediaWebContentsObserver::OnPictureInPictureModeEnded(
+    RenderFrameHost* render_frame_host,
+    int delegate_id,
+    int request_id) {
+  ExitPictureInPictureInternal();
+
+  render_frame_host->Send(
+      new MediaPlayerDelegateMsg_OnPictureInPictureModeEnded_ACK(
+          render_frame_host->GetRoutingID(), delegate_id, request_id));
+}
+
 void MediaWebContentsObserver::OnSetPictureInPictureCustomControls(
     RenderFrameHost* render_frame_host,
     int delegate_id,
@@ -276,6 +363,26 @@
     pip_controller->SetPictureInPictureCustomControls(controls);
 }
 
+void MediaWebContentsObserver::OnPictureInPictureSurfaceChanged(
+    RenderFrameHost* render_frame_host,
+    int delegate_id,
+    const viz::SurfaceId& surface_id,
+    const gfx::Size& natural_size,
+    bool show_play_pause_button) {
+  DCHECK(surface_id.is_valid());
+
+  pip_player_ = MediaPlayerId(render_frame_host, delegate_id);
+
+  // The PictureInPictureWindowController instance may not have been created by
+  // the embedder.
+  if (auto* pip_controller =
+          PictureInPictureWindowControllerImpl::FromWebContents(
+              web_contents_impl())) {
+    pip_controller->EmbedSurface(surface_id, natural_size);
+    pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button);
+  }
+}
+
 void MediaWebContentsObserver::ClearWakeLocks(
     RenderFrameHost* render_frame_host) {
   std::set<MediaPlayerId> video_players;
@@ -375,6 +482,16 @@
   player_map->erase(it);
 }
 
+void MediaWebContentsObserver::ExitPictureInPictureInternal() {
+  DCHECK(pip_player_);
+
+  web_contents_impl()->ExitPictureInPicture();
+
+  // Reset must happen after notifying the WebContents because it may interact
+  // with it.
+  ResetPictureInPictureVideoMediaPlayerId();
+}
+
 WebContentsImpl* MediaWebContentsObserver::web_contents_impl() const {
   return static_cast<WebContentsImpl*>(web_contents());
 }
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h
index 788c018..d1eb2af 100644
--- a/content/browser/media/media_web_contents_observer.h
+++ b/content/browser/media/media_web_contents_observer.h
@@ -34,6 +34,10 @@
 class Size;
 }  // namespace size
 
+namespace viz {
+class SurfaceId;
+}  // namespace viz
+
 namespace content {
 
 class AudibleMetrics;
@@ -68,6 +72,14 @@
   // Gets the MediaPlayerId of the fullscreen video if it exists.
   const base::Optional<MediaPlayerId>& GetFullscreenVideoMediaPlayerId() const;
 
+  // Gets the MediaPlayerId of the picture in picture video if it exists.
+  const base::Optional<MediaPlayerId>& GetPictureInPictureVideoMediaPlayerId()
+      const;
+
+  // Reset the MediaPlayerId of the picture in picture video when user closes
+  // Picture-in-Picture window manually.
+  void ResetPictureInPictureVideoMediaPlayerId();
+
   // WebContentsObserver implementation.
   void WebContentsDestroyed() override;
   void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
@@ -84,6 +96,11 @@
   // Returns whether or not the given player id is active.
   bool IsPlayerActive(const MediaPlayerId& player_id) const;
 
+  // Called by the Picture-in-Picture controller when the associated window is
+  // resized. |window_size| represents the new size of the window. It MUST be
+  // called when there is a player in Picture-in-Picture.
+  void OnPictureInPictureWindowResize(const gfx::Size& window_size);
+
   bool has_audio_wake_lock_for_testing() const {
     return has_audio_wake_lock_for_testing_;
   }
@@ -118,10 +135,24 @@
   void OnMediaMutedStatusChanged(RenderFrameHost* render_frame_host,
                                  int delegate_id,
                                  bool muted);
+  void OnPictureInPictureModeStarted(RenderFrameHost* render_frame_host,
+                                     int delegate_id,
+                                     const viz::SurfaceId&,
+                                     const gfx::Size& natural_size,
+                                     int request_id,
+                                     bool show_play_pause_button);
+  void OnPictureInPictureModeEnded(RenderFrameHost* render_frame_host,
+                                   int delegate_id,
+                                   int request_id);
   void OnSetPictureInPictureCustomControls(
       RenderFrameHost* render_frame_host,
       int delegate_id,
       const std::vector<blink::PictureInPictureControlInfo>& controls);
+  void OnPictureInPictureSurfaceChanged(RenderFrameHost*,
+                                        int delegate_id,
+                                        const viz::SurfaceId&,
+                                        const gfx::Size&,
+                                        bool show_play_pause_button);
 
   // Clear |render_frame_host|'s tracking entry for its WakeLocks.
   void ClearWakeLocks(RenderFrameHost* render_frame_host);
@@ -145,6 +176,10 @@
                                    ActiveMediaPlayerMap* player_map,
                                    std::set<MediaPlayerId>* removed_players);
 
+  // Internal method to exit Picture-in-Picture from an event received from the
+  // renderer process.
+  void ExitPictureInPictureInternal();
+
   // Convenience method that casts web_contents() to a WebContentsImpl*.
   WebContentsImpl* web_contents_impl() const;
 
@@ -156,6 +191,7 @@
   ActiveMediaPlayerMap active_video_players_;
   device::mojom::WakeLockPtr audio_wake_lock_;
   base::Optional<MediaPlayerId> fullscreen_player_;
+  base::Optional<MediaPlayerId> pip_player_;
   base::Optional<bool> picture_in_picture_allowed_in_fullscreen_;
   bool has_audio_wake_lock_for_testing_ = false;
 
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl.cc
deleted file mode 100644
index 4d3bc41b..0000000
--- a/content/browser/picture_in_picture/picture_in_picture_service_impl.cc
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
-
-#include <utility>
-
-#include "content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h"
-#include "content/browser/web_contents/web_contents_impl.h"
-
-namespace content {
-
-// static
-void PictureInPictureServiceImpl::Create(
-    RenderFrameHost* render_frame_host,
-    blink::mojom::PictureInPictureServiceRequest request) {
-  DCHECK(render_frame_host);
-  new PictureInPictureServiceImpl(render_frame_host, std::move(request));
-}
-
-// static
-PictureInPictureServiceImpl* PictureInPictureServiceImpl::CreateForTesting(
-    RenderFrameHost* render_frame_host,
-    blink::mojom::PictureInPictureServiceRequest request) {
-  return new PictureInPictureServiceImpl(render_frame_host, std::move(request));
-}
-
-void PictureInPictureServiceImpl::StartSession(
-    uint32_t player_id,
-    const base::Optional<viz::SurfaceId>& surface_id,
-    const gfx::Size& natural_size,
-    bool show_play_pause_button,
-    StartSessionCallback callback) {
-  player_id_ = MediaPlayerId(render_frame_host_, player_id);
-
-  auto* pip_controller = GetController();
-  if (pip_controller)
-    pip_controller->set_service(this);
-
-  gfx::Size window_size = web_contents_impl()->EnterPictureInPicture(
-      surface_id.value(), natural_size);
-
-  if (pip_controller)
-    pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button);
-
-  std::move(callback).Run(window_size);
-}
-
-void PictureInPictureServiceImpl::EndSession(EndSessionCallback callback) {
-  DCHECK(player_id_);
-
-  ExitPictureInPictureInternal();
-
-  std::move(callback).Run();
-}
-
-void PictureInPictureServiceImpl::UpdateSession(
-    uint32_t player_id,
-    const base::Optional<viz::SurfaceId>& surface_id,
-    const gfx::Size& natural_size,
-    bool show_play_pause_button) {
-  player_id_ = MediaPlayerId(render_frame_host_, player_id);
-
-  // The PictureInPictureWindowController instance may not have been created by
-  // the embedder.
-  if (auto* pip_controller = GetController()) {
-    pip_controller->EmbedSurface(surface_id.value(), natural_size);
-    pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button);
-    pip_controller->set_service(this);
-  }
-}
-
-void PictureInPictureServiceImpl::SetDelegate(
-    blink::mojom::PictureInPictureDelegatePtr delegate) {
-  delegate.set_connection_error_handler(
-      base::BindOnce(&PictureInPictureServiceImpl::OnDelegateDisconnected,
-                     // delegate is held by |this|.
-                     base::Unretained(this)));
-
-  if (delegate_)
-    mojo::ReportBadMessage("SetDelegate() should only be called once.");
-
-  delegate_ = std::move(delegate);
-}
-
-void PictureInPictureServiceImpl::NotifyWindowResized(const gfx::Size& size) {
-  if (delegate_)
-    delegate_->PictureInPictureWindowSizeChanged(size);
-}
-
-PictureInPictureServiceImpl::PictureInPictureServiceImpl(
-    RenderFrameHost* render_frame_host,
-    blink::mojom::PictureInPictureServiceRequest request)
-    : FrameServiceBase(render_frame_host, std::move(request)),
-      render_frame_host_(render_frame_host) {}
-
-PictureInPictureServiceImpl::~PictureInPictureServiceImpl() {
-  if (player_id_)
-    ExitPictureInPictureInternal();
-  if (GetController())
-    GetController()->set_service(nullptr);
-}
-
-PictureInPictureWindowControllerImpl*
-PictureInPictureServiceImpl::GetController() {
-  return PictureInPictureWindowControllerImpl::GetOrCreateForWebContents(
-      web_contents_impl());
-}
-
-void PictureInPictureServiceImpl::OnDelegateDisconnected() {
-  delegate_ = nullptr;
-}
-
-void PictureInPictureServiceImpl::ExitPictureInPictureInternal() {
-  web_contents_impl()->ExitPictureInPicture();
-
-  // Reset must happen after notifying the WebContents because it may interact
-  // with it.
-  player_id_.reset();
-
-  if (auto* controller = GetController())
-    controller->set_service(nullptr);
-}
-
-WebContentsImpl* PictureInPictureServiceImpl::web_contents_impl() {
-  return static_cast<WebContentsImpl*>(web_contents());
-}
-
-}  // namespace content
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl.h b/content/browser/picture_in_picture/picture_in_picture_service_impl.h
deleted file mode 100644
index 28710e3..0000000
--- a/content/browser/picture_in_picture/picture_in_picture_service_impl.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_SERVICE_IMPL_H_
-#define CONTENT_BROWSER_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_SERVICE_IMPL_H_
-
-#include "base/containers/unique_ptr_adapters.h"
-#include "content/common/content_export.h"
-#include "content/public/browser/frame_service_base.h"
-#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom.h"
-
-namespace content {
-
-class PictureInPictureWindowControllerImpl;
-
-// Receives Picture-in-Picture messages from a given RenderFrame. There is one
-// PictureInPictureServiceImpl per RenderFrameHost. It talks directly to the
-// PictureInPictureWindowControllerImpl. Only one service interacts with the
-// window at a given time.
-class CONTENT_EXPORT PictureInPictureServiceImpl final
-    : public content::FrameServiceBase<blink::mojom::PictureInPictureService> {
- public:
-  static void Create(RenderFrameHost*,
-                     blink::mojom::PictureInPictureServiceRequest);
-  static PictureInPictureServiceImpl* CreateForTesting(
-      RenderFrameHost*,
-      blink::mojom::PictureInPictureServiceRequest);
-
-  // PictureInPictureService implementation.
-  void StartSession(uint32_t player_id,
-                    const base::Optional<viz::SurfaceId>& surface_id,
-                    const gfx::Size& natural_size,
-                    bool show_play_pause_button,
-                    StartSessionCallback) final;
-  void EndSession(EndSessionCallback) final;
-  void UpdateSession(uint32_t player_id,
-                     const base::Optional<viz::SurfaceId>& surface_id,
-                     const gfx::Size& natural_size,
-                     bool show_play_pause_button) final;
-  void SetDelegate(blink::mojom::PictureInPictureDelegatePtr) final;
-
-  void NotifyWindowResized(const gfx::Size&);
-
-  // Returns the player that is currently in Picture-in-Picture in the context
-  // of the frame associated with the service. Returns nullopt if there are
-  // none.
-  const base::Optional<MediaPlayerId>& player_id() const { return player_id_; }
-  void ResetPlayerId() { player_id_.reset(); }
-
- private:
-  PictureInPictureServiceImpl(RenderFrameHost*,
-                              blink::mojom::PictureInPictureServiceRequest);
-  ~PictureInPictureServiceImpl() override;
-
-  // Returns the PictureInPictureWindowControllerImpl associated with the
-  // WebContents. Can be null.
-  PictureInPictureWindowControllerImpl* GetController();
-
-  // Callack run when the delegate is disconnected. Only one delegate should be
-  // set at any given time.
-  void OnDelegateDisconnected();
-
-  // Implementation of ExitPictureInPicture without callback handling.
-  void ExitPictureInPictureInternal();
-
-  WebContentsImpl* web_contents_impl();
-
-  blink::mojom::PictureInPictureDelegatePtr delegate_ = nullptr;
-  RenderFrameHost* render_frame_host_ = nullptr;
-  base::Optional<MediaPlayerId> player_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(PictureInPictureServiceImpl);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_SERVICE_IMPL_H_
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
deleted file mode 100644
index 4c8a5b723..0000000
--- a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
-
-#include <memory>
-#include <utility>
-#include <vector>
-
-#include "content/common/media/media_player_delegate_messages.h"
-#include "content/public/browser/overlay_window.h"
-#include "content/public/browser/web_contents_delegate.h"
-#include "content/test/test_content_browser_client.h"
-#include "content/test/test_render_frame_host.h"
-#include "content/test/test_render_view_host.h"
-#include "content/test/test_web_contents.h"
-#include "mojo/public/cpp/bindings/interface_ptr.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace content {
-
-class PictureInPictureDelegate : public WebContentsDelegate {
- public:
-  PictureInPictureDelegate() = default;
-
-  MOCK_METHOD3(EnterPictureInPicture,
-               gfx::Size(WebContents*,
-                         const viz::SurfaceId&,
-                         const gfx::Size&));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(PictureInPictureDelegate);
-};
-
-class TestOverlayWindow : public OverlayWindow {
- public:
-  TestOverlayWindow() = default;
-  ~TestOverlayWindow() override{};
-
-  static std::unique_ptr<OverlayWindow> Create(
-      PictureInPictureWindowController* controller) {
-    return std::unique_ptr<OverlayWindow>(new TestOverlayWindow());
-  }
-
-  bool IsActive() const override { return false; }
-  void Close() override {}
-  void Show() override {}
-  void Hide() override {}
-  void SetPictureInPictureCustomControls(
-      const std::vector<blink::PictureInPictureControlInfo>& controls)
-      override {}
-  bool IsVisible() const override { return false; }
-  bool IsAlwaysOnTop() const override { return false; }
-  ui::Layer* GetLayer() override { return nullptr; }
-  gfx::Rect GetBounds() const override { return gfx::Rect(); }
-  void UpdateVideoSize(const gfx::Size& natural_size) override {}
-  void SetPlaybackState(PlaybackState playback_state) override {}
-  void SetAlwaysHidePlayPauseButton(bool is_visible) override {}
-  ui::Layer* GetWindowBackgroundLayer() override { return nullptr; }
-  ui::Layer* GetVideoLayer() override { return nullptr; }
-  gfx::Rect GetVideoBounds() override { return gfx::Rect(); }
-  void SetSkipAdButtonVisibility(bool is_visible) override {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow);
-};
-
-class PictureInPictureTestBrowserClient : public TestContentBrowserClient {
- public:
-  PictureInPictureTestBrowserClient() = default;
-  ~PictureInPictureTestBrowserClient() override = default;
-
-  std::unique_ptr<OverlayWindow> CreateWindowForPictureInPicture(
-      PictureInPictureWindowController* controller) override {
-    return TestOverlayWindow::Create(controller);
-  }
-};
-
-class PictureInPictureServiceImplTest : public RenderViewHostImplTestHarness {
- public:
-  void SetUp() override {
-    RenderViewHostImplTestHarness::SetUp();
-    // WebUIControllerFactory::RegisterFactory(
-    //     ContentWebUIControllerFactory::GetInstance());
-
-    SetBrowserClientForTesting(&browser_client_);
-
-    TestRenderFrameHost* render_frame_host = contents()->GetMainFrame();
-    render_frame_host->InitializeRenderFrameIfNeeded();
-
-    contents()->SetDelegate(&delegate_);
-
-    blink::mojom::PictureInPictureServiceRequest request;
-    service_impl_ = PictureInPictureServiceImpl::CreateForTesting(
-        render_frame_host, std::move(request));
-  }
-
-  void TearDown() override {
-    // WebUIControllerFactory::UnregisterFactoryForTesting(
-    //     ContentWebUIControllerFactory::GetInstance());
-    RenderViewHostImplTestHarness::TearDown();
-  }
-
-  PictureInPictureServiceImpl& service() { return *service_impl_; }
-
-  PictureInPictureDelegate& delegate() { return delegate_; }
-
- private:
-  PictureInPictureTestBrowserClient browser_client_;
-  PictureInPictureDelegate delegate_;
-  // Will be deleted when the frame is destroyed.
-  PictureInPictureServiceImpl* service_impl_;
-};
-
-TEST_F(PictureInPictureServiceImplTest, EnterPictureInPicture) {
-  const int kPlayerVideoOnlyId = 30;
-
-  // If Picture-in-Picture was never triggered, the media player id would not be
-  // set.
-  EXPECT_FALSE(service().player_id().has_value());
-
-  viz::SurfaceId surface_id =
-      viz::SurfaceId(viz::FrameSinkId(1, 1),
-                     viz::LocalSurfaceId(
-                         11, base::UnguessableToken::Deserialize(0x111111, 0)));
-
-  EXPECT_CALL(delegate(),
-              EnterPictureInPicture(contents(), surface_id, gfx::Size(42, 42)));
-
-  service().StartSession(kPlayerVideoOnlyId, surface_id, gfx::Size(42, 42),
-                         true /* show_play_pause_button */, base::DoNothing());
-  EXPECT_TRUE(service().player_id().has_value());
-  EXPECT_EQ(kPlayerVideoOnlyId, service().player_id()->delegate_id);
-
-  // Picture-in-Picture media player id should not be reset when the media is
-  // destroyed (e.g. video stops playing). This allows the Picture-in-Picture
-  // window to continue to control the media.
-  contents()->GetMainFrame()->OnMessageReceived(
-      MediaPlayerDelegateHostMsg_OnMediaDestroyed(
-          contents()->GetMainFrame()->GetRoutingID(), kPlayerVideoOnlyId));
-  EXPECT_TRUE(service().player_id().has_value());
-}
-
-}  // namespace content
diff --git a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc
index 01f7ae73..a0096ef 100644
--- a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc
+++ b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc
@@ -10,7 +10,6 @@
 #include "content/browser/media/media_web_contents_observer.h"
 #include "content/browser/media/session/media_session_impl.h"
 #include "content/browser/picture_in_picture/overlay_surface_embedder.h"
-#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/common/media/media_player_delegate_messages.h"
 #include "content/public/browser/content_browser_client.h"
@@ -58,8 +57,7 @@
 
 PictureInPictureWindowControllerImpl::PictureInPictureWindowControllerImpl(
     WebContents* initiator)
-    : WebContentsObserver(initiator),
-      initiator_(static_cast<WebContentsImpl* const>(initiator)) {
+    : initiator_(static_cast<WebContentsImpl* const>(initiator)) {
   DCHECK(initiator_);
 
   media_web_contents_observer_ = initiator_->media_web_contents_observer();
@@ -128,7 +126,9 @@
   // surface id was updated for the same video, this is a no-op. This could
   // be updated for a different video if another media player on the same
   // |initiator_| enters Picture-in-Picture mode.
-  UpdateMediaPlayerId();
+  media_player_id_ =
+      media_web_contents_observer_->GetPictureInPictureVideoMediaPlayerId();
+  UpdatePlaybackState(IsPlayerActive(), !media_player_id_.has_value());
 
   window_->UpdateVideoSize(natural_size);
 
@@ -142,9 +142,9 @@
 }
 
 void PictureInPictureWindowControllerImpl::UpdateLayerBounds() {
-  if (media_player_id_.has_value() && service_ && window_ &&
-      window_->IsVisible()) {
-    service_->NotifyWindowResized(window_->GetBounds().size());
+  if (media_player_id_.has_value() && window_ && window_->IsVisible()) {
+    media_web_contents_observer_->OnPictureInPictureWindowResize(
+        window_->GetBounds().size());
   }
 
   if (embedder_)
@@ -152,12 +152,10 @@
 }
 
 bool PictureInPictureWindowControllerImpl::IsPlayerActive() {
-  if (!media_player_id_.has_value())
-    media_player_id_ = service_ ? service_->player_id() : base::nullopt;
-
-  // At creation time, the player id may not be set.
-  if (!media_player_id_.has_value())
-    return false;
+  if (!media_player_id_.has_value()) {
+    media_player_id_ =
+        media_web_contents_observer_->GetPictureInPictureVideoMediaPlayerId();
+  }
 
   return media_player_id_.has_value() &&
          media_web_contents_observer_->IsPlayerActive(*media_player_id_);
@@ -221,11 +219,6 @@
           media_player_id_->delegate_id, control_id));
 }
 
-void PictureInPictureWindowControllerImpl::UpdateMediaPlayerId() {
-  media_player_id_ = service_ ? service_->player_id() : base::nullopt;
-  UpdatePlaybackState(IsPlayerActive(), !media_player_id_.has_value());
-}
-
 void PictureInPictureWindowControllerImpl::SetAlwaysHidePlayPauseButton(
     bool is_visible) {
   always_hide_play_pause_button_ = is_visible;
@@ -261,33 +254,6 @@
   window_->SetSkipAdButtonVisibility(media_session_action_skip_ad_handled_);
 }
 
-void PictureInPictureWindowControllerImpl::MediaStartedPlaying(
-    const MediaPlayerInfo&,
-    const MediaPlayerId& media_player_id) {
-  if (initiator_->IsBeingDestroyed())
-    return;
-
-  if (media_player_id_ != media_player_id)
-    return;
-
-  UpdatePlaybackState(true /* is_playing */, false /* reached_end_of_stream */);
-}
-
-void PictureInPictureWindowControllerImpl::MediaStoppedPlaying(
-    const MediaPlayerInfo&,
-    const MediaPlayerId& media_player_id,
-    WebContentsObserver::MediaStoppedReason reason) {
-  if (initiator_->IsBeingDestroyed())
-    return;
-
-  if (media_player_id_ != media_player_id)
-    return;
-
-  UpdatePlaybackState(
-      false /* is_playing */,
-      reason == WebContentsObserver::MediaStoppedReason::kReachedEndOfStream);
-}
-
 void PictureInPictureWindowControllerImpl::OnLeavingPictureInPicture(
     bool should_pause_video,
     bool should_reset_pip_player) {
@@ -303,12 +269,8 @@
         new MediaPlayerDelegateMsg_EndPictureInPictureMode(
             media_player_id_->render_frame_host->GetRoutingID(),
             media_player_id_->delegate_id));
-
-    if (should_reset_pip_player) {
-      DCHECK(service_);
-      service_->ResetPlayerId();
-      media_player_id_.reset();
-    }
+    if (should_reset_pip_player)
+      media_web_contents_observer_->ResetPictureInPictureVideoMediaPlayerId();
   }
 }
 
diff --git a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
index 91701f7..f44a7ca 100644
--- a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
+++ b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
@@ -14,11 +14,10 @@
 
 namespace content {
 
-class MediaWebContentsObserver;
 class OverlaySurfaceEmbedder;
-class PictureInPictureServiceImpl;
 class WebContents;
 class WebContentsImpl;
+class MediaWebContentsObserver;
 
 // TODO(thakis,mlamouri): PictureInPictureWindowControllerImpl isn't
 // CONTENT_EXPORT'd because it creates complicated build issues with
@@ -28,8 +27,7 @@
 // work with it. https://crbug.com/589840.
 class PictureInPictureWindowControllerImpl
     : public PictureInPictureWindowController,
-      public WebContentsUserData<PictureInPictureWindowControllerImpl>,
-      public WebContentsObserver {
+      public WebContentsUserData<PictureInPictureWindowControllerImpl> {
  public:
   // Gets a reference to the controller associated with |initiator| and creates
   // one if it does not exist. The returned pointer is guaranteed to be
@@ -64,22 +62,6 @@
   CONTENT_EXPORT void MediaSessionActionsChanged(
       const std::set<media_session::mojom::MediaSessionAction>& actions);
 
-  // WebContentsObserver:
-  void MediaStartedPlaying(const MediaPlayerInfo&,
-                           const MediaPlayerId&) override;
-  void MediaStoppedPlaying(const MediaPlayerInfo&,
-                           const MediaPlayerId&,
-                           WebContentsObserver::MediaStoppedReason) override;
-
-  // TODO(mlamouri): temporary method used because of the media player id is
-  // stored in a different location from the one that is used to update the
-  // state of this object.
-  void UpdateMediaPlayerId();
-
-  void set_service(PictureInPictureServiceImpl* service) {
-    service_ = service;
-  };
-
  private:
   friend class WebContentsUserData<PictureInPictureWindowControllerImpl>;
 
@@ -107,7 +89,6 @@
 
   std::unique_ptr<OverlayWindow> window_;
   std::unique_ptr<OverlaySurfaceEmbedder> embedder_;
-  // TODO(929156): remove this as it should be accessible via `web_contents()`.
   WebContentsImpl* const initiator_;
 
   // Used to determine the state of the media player and route messages to
@@ -128,11 +109,6 @@
   // Session API in UpdatePlayPauseButtonVisibility().
   bool always_hide_play_pause_button_ = false;
 
-  // Service currently associated with the Picture-in-Picture window. The
-  // service makes the bridge with the renderer process by sending enter/exit
-  // requests. It is also holding the Picture-in-Picture MediaPlayerId.
-  PictureInPictureServiceImpl* service_ = nullptr;
-
   WEB_CONTENTS_USER_DATA_KEY_DECL();
 
   DISALLOW_COPY_AND_ASSIGN(PictureInPictureWindowControllerImpl);
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 74e086c0..58b809a1a 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -26,6 +26,7 @@
 #include "content/browser/webui/web_ui_controller_factory_registry.h"
 #include "content/common/frame_messages.h"
 #include "content/common/input/synthetic_web_input_event_builders.h"
+#include "content/common/media/media_player_delegate_messages.h"
 #include "content/common/view_messages.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/global_request_id.h"
@@ -34,6 +35,7 @@
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
+#include "content/public/browser/overlay_window.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/ssl_host_state_delegate.h"
 #include "content/public/browser/storage_partition.h"
@@ -3240,6 +3242,113 @@
   EXPECT_EQ(SK_ColorGREEN, observer.last_theme_color());
 }
 
+class PictureInPictureDelegate : public WebContentsDelegate {
+ public:
+  PictureInPictureDelegate() = default;
+
+  MOCK_METHOD3(EnterPictureInPicture,
+               gfx::Size(content::WebContents* web_contents,
+                         const viz::SurfaceId&,
+                         const gfx::Size&));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PictureInPictureDelegate);
+};
+
+class TestOverlayWindow : public OverlayWindow {
+ public:
+  TestOverlayWindow() = default;
+  ~TestOverlayWindow() override{};
+
+  static std::unique_ptr<OverlayWindow> Create(
+      PictureInPictureWindowController* controller) {
+    return std::unique_ptr<OverlayWindow>(new TestOverlayWindow());
+  }
+
+  bool IsActive() const override { return false; }
+  void Close() override {}
+  void Show() override {}
+  void Hide() override {}
+  void SetPictureInPictureCustomControls(
+      const std::vector<blink::PictureInPictureControlInfo>& controls)
+      override {}
+  bool IsVisible() const override { return false; }
+  bool IsAlwaysOnTop() const override { return false; }
+  ui::Layer* GetLayer() override { return nullptr; }
+  gfx::Rect GetBounds() const override { return gfx::Rect(); }
+  void UpdateVideoSize(const gfx::Size& natural_size) override {}
+  void SetPlaybackState(PlaybackState playback_state) override {}
+  void SetAlwaysHidePlayPauseButton(bool is_visible) override {}
+  void SetSkipAdButtonVisibility(bool is_visible) override {}
+  ui::Layer* GetWindowBackgroundLayer() override { return nullptr; }
+  ui::Layer* GetVideoLayer() override { return nullptr; }
+  gfx::Rect GetVideoBounds() override { return gfx::Rect(); }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow);
+};
+
+class PictureInPictureTestBrowserClient : public TestContentBrowserClient {
+ public:
+  PictureInPictureTestBrowserClient()
+      : original_browser_client_(SetBrowserClientForTesting(this)) {}
+
+  ~PictureInPictureTestBrowserClient() override {
+    SetBrowserClientForTesting(original_browser_client_);
+  }
+
+  std::unique_ptr<OverlayWindow> CreateWindowForPictureInPicture(
+      PictureInPictureWindowController* controller) override {
+    return TestOverlayWindow::Create(controller);
+  }
+
+ private:
+  ContentBrowserClient* original_browser_client_;
+};
+
+TEST_F(WebContentsImplTest, EnterPictureInPicture) {
+  PictureInPictureTestBrowserClient browser_client;
+  SetBrowserClientForTesting(&browser_client);
+
+  const int kPlayerVideoOnlyId = 30; /* arbitrary and used for tests */
+
+  PictureInPictureDelegate delegate;
+  contents()->SetDelegate(&delegate);
+
+  MediaWebContentsObserver* observer =
+      contents()->media_web_contents_observer();
+  TestRenderFrameHost* rfh = main_test_rfh();
+  rfh->InitializeRenderFrameIfNeeded();
+
+  // If Picture-in-Picture was never triggered, the media player id would not be
+  // set.
+  EXPECT_FALSE(observer->GetPictureInPictureVideoMediaPlayerId().has_value());
+
+  viz::SurfaceId surface_id =
+      viz::SurfaceId(viz::FrameSinkId(1, 1),
+                     viz::LocalSurfaceId(
+                         11, base::UnguessableToken::Deserialize(0x111111, 0)));
+
+  EXPECT_CALL(delegate,
+              EnterPictureInPicture(contents(), surface_id, gfx::Size(42, 42)));
+
+  rfh->OnMessageReceived(
+      MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted(
+          rfh->GetRoutingID(), kPlayerVideoOnlyId, surface_id /* surface_id */,
+          gfx::Size(42, 42) /* natural_size */, 1 /* request_id */,
+          true /* show_play_pause_button */));
+  EXPECT_TRUE(observer->GetPictureInPictureVideoMediaPlayerId().has_value());
+  EXPECT_EQ(kPlayerVideoOnlyId,
+            observer->GetPictureInPictureVideoMediaPlayerId()->delegate_id);
+
+  // Picture-in-Picture media player id should not be reset when the media is
+  // destroyed (e.g. video stops playing). This allows the Picture-in-Picture
+  // window to continue to control the media.
+  rfh->OnMessageReceived(MediaPlayerDelegateHostMsg_OnMediaDestroyed(
+      rfh->GetRoutingID(), kPlayerVideoOnlyId));
+  EXPECT_TRUE(observer->GetPictureInPictureVideoMediaPlayerId().has_value());
+}
+
 TEST_F(WebContentsImplTest, ParseDownloadHeaders) {
   download::DownloadUrlParameters::RequestHeadersType request_headers =
       WebContentsImpl::ParseDownloadHeaders("A: 1\r\nB: 2\r\nC: 3\r\n\r\n");
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index 54cfcb2..2d2dcc1 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/json/json_parser.h"
 #include "base/json/json_writer.h"
 #include "base/run_loop.h"
+#include "base/system/sys_info.h"
 #include "base/test/gtest_util.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_mock_time_task_runner.h"
@@ -979,15 +980,25 @@
   }
 }
 
+#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_CHROMEOS)
 TEST_F(AuthenticatorImplTest, TestCableDiscoveryByDefault) {
   auto authenticator = ConnectToAuthenticator();
 
   // caBLE should be enabled by default if BLE is supported.
+  bool should_be_enabled =
+      device::BluetoothAdapterFactory::Get().IsLowEnergySupported();
+
+#if defined(OS_CHROMEOS)
+  // Test only valid if truly running on instance of ChromeOS.
+  should_be_enabled = should_be_enabled && base::SysInfo::IsRunningOnChromeOS();
+#endif  // defined(OS_CHROMEOS)
+
   EXPECT_EQ(
-      device::BluetoothAdapterFactory::Get().IsLowEnergySupported(),
+      should_be_enabled,
       SupportsTransportProtocol(
           device::FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy));
 }
+#endif  // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_CHROMEOS)
 
 TEST_F(AuthenticatorImplTest, TestCableDiscoveryDisabledWithFlag) {
   DisableFeature(features::kWebAuthCable);
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc
index b9c3c567..d0eae9e 100644
--- a/content/browser/worker_host/dedicated_worker_host.cc
+++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -68,7 +68,7 @@
       const GURL& script_url,
       const url::Origin& request_initiator_origin,
       blink::mojom::BlobURLTokenPtr blob_url_token,
-      blink::mojom::DedicatedWorkerFactoryClientPtr client) {
+      blink::mojom::DedicatedWorkerHostFactoryClientPtr client) {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     DCHECK(blink::features::IsPlzDedicatedWorkerEnabled());
 
@@ -116,7 +116,7 @@
   }
 
   void DidLoadDedicatedWorker(
-      blink::mojom::DedicatedWorkerFactoryClientPtr client,
+      blink::mojom::DedicatedWorkerHostFactoryClientPtr client,
       blink::mojom::ServiceWorkerProviderInfoForWorkerPtr
           service_worker_provider_info,
       network::mojom::URLLoaderFactoryAssociatedPtrInfo
@@ -238,7 +238,7 @@
   }
 
   void CreateDedicatedWorker(
-      blink::mojom::DedicatedWorkerFactoryRequest request) {
+      blink::mojom::DedicatedWorkerHostFactoryRequest request) {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     CreateDedicatedWorkerHostFactory(process_id_, ancestor_render_frame_id_,
                                      origin_, std::move(request));
@@ -262,18 +262,19 @@
 
 // A factory for creating DedicatedWorkerHosts. Its lifetime is managed by
 // the renderer over mojo via a StrongBinding. This lives on the UI thread.
-class DedicatedWorkerFactoryImpl : public blink::mojom::DedicatedWorkerFactory {
+class DedicatedWorkerHostFactoryImpl
+    : public blink::mojom::DedicatedWorkerHostFactory {
  public:
-  DedicatedWorkerFactoryImpl(int process_id,
-                             int ancestor_render_frame_id,
-                             const url::Origin& parent_context_origin)
+  DedicatedWorkerHostFactoryImpl(int process_id,
+                                 int ancestor_render_frame_id,
+                                 const url::Origin& parent_context_origin)
       : process_id_(process_id),
         ancestor_render_frame_id_(ancestor_render_frame_id),
         parent_context_origin_(parent_context_origin) {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
   }
 
-  // blink::mojom::DedicatedWorkerFactory:
+  // blink::mojom::DedicatedWorkerHostFactory:
   void CreateDedicatedWorker(
       const url::Origin& origin,
       service_manager::mojom::InterfaceProviderRequest request) override {
@@ -283,9 +284,10 @@
       return;
     }
 
-    // TODO(crbug.com/729021): Once |parent_context_origin_| is no longer races
-    // with the request for |DedicatedWorkerFactory|, enforce that the worker's
-    // origin either matches the creating document's origin, or is unique.
+    // TODO(crbug.com/729021): Once |parent_context_origin_| no longer races
+    // with the request for |DedicatedWorkerHostFactory|, enforce that
+    // the worker's origin either matches the origin of the creating context
+    // (Document or DedicatedWorkerGlobalScope), or is unique.
     mojo::MakeStrongBinding(std::make_unique<DedicatedWorkerHost>(
                                 process_id_, ancestor_render_frame_id_, origin),
                             FilterRendererExposedInterfaces(
@@ -298,7 +300,7 @@
       const GURL& script_url,
       const url::Origin& request_initiator_origin,
       blink::mojom::BlobURLTokenPtr blob_url_token,
-      blink::mojom::DedicatedWorkerFactoryClientPtr client) override {
+      blink::mojom::DedicatedWorkerHostFactoryClientPtr client) override {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     if (!blink::features::IsPlzDedicatedWorkerEnabled()) {
       mojo::ReportBadMessage("DWH_BROWSER_SCRIPT_FETCH_DISABLED");
@@ -306,9 +308,9 @@
     }
 
     // TODO(crbug.com/729021): Once |parent_context_origin_| no longer races
-    // with the request for |DedicatedWorkerFactory|, enforce that the worker's
-    // origin either matches the origin of the creating context (Document or
-    // DedicatedWorkerGlobalScope), or is unique.
+    // with the request for |DedicatedWorkerHostFactory|, enforce that
+    // the worker's origin either matches the origin of the creating context
+    // (Document or DedicatedWorkerGlobalScope), or is unique.
     auto host = std::make_unique<DedicatedWorkerHost>(
         process_id_, ancestor_render_frame_id_, request_initiator_origin);
     auto* host_raw = host.get();
@@ -328,7 +330,7 @@
   const int ancestor_render_frame_id_;
   const url::Origin parent_context_origin_;
 
-  DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerFactoryImpl);
+  DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerHostFactoryImpl);
 };
 
 }  // namespace
@@ -337,9 +339,9 @@
     int process_id,
     int ancestor_render_frame_id,
     const url::Origin& origin,
-    blink::mojom::DedicatedWorkerFactoryRequest request) {
+    blink::mojom::DedicatedWorkerHostFactoryRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  mojo::MakeStrongBinding(std::make_unique<DedicatedWorkerFactoryImpl>(
+  mojo::MakeStrongBinding(std::make_unique<DedicatedWorkerHostFactoryImpl>(
                               process_id, ancestor_render_frame_id, origin),
                           std::move(request));
 }
diff --git a/content/browser/worker_host/dedicated_worker_host.h b/content/browser/worker_host/dedicated_worker_host.h
index e25d8bac..a6cb121 100644
--- a/content/browser/worker_host/dedicated_worker_host.h
+++ b/content/browser/worker_host/dedicated_worker_host.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_BROWSER_WORKER_HOST_DEDICATED_WORKER_HOST_H_
 #define CONTENT_BROWSER_WORKER_HOST_DEDICATED_WORKER_HOST_H_
 
-#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom.h"
+#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom.h"
 
 namespace url {
 class Origin;
@@ -13,12 +13,13 @@
 
 namespace content {
 
-// Creates a host for a dedicated worker. This must be called on the UI thread.
+// Creates a host factory for a dedicated worker. This must be called on the UI
+// thread.
 void CreateDedicatedWorkerHostFactory(
     int process_id,
     int parent_render_frame_id,
     const url::Origin& origin,
-    blink::mojom::DedicatedWorkerFactoryRequest request);
+    blink::mojom::DedicatedWorkerHostFactoryRequest request);
 
 }  // namespace content
 
diff --git a/content/common/media/media_player_delegate_messages.h b/content/common/media/media_player_delegate_messages.h
index 4870d5b2..b482679ef 100644
--- a/content/common/media/media_player_delegate_messages.h
+++ b/content/common/media/media_player_delegate_messages.h
@@ -76,6 +76,23 @@
                     int /* delegate_id, distinguishes instances */,
                     std::string /* control_id */)
 
+IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_OnPictureInPictureWindowResize,
+                    int /* delegate_id, distinguishes instances */,
+                    gfx::Size /* window_size */)
+
+// ----------------------------------------------------------------------------
+// Messages from the browser to the renderer acknowledging changes happened.
+// ----------------------------------------------------------------------------
+
+IPC_MESSAGE_ROUTED3(MediaPlayerDelegateMsg_OnPictureInPictureModeStarted_ACK,
+                    int /* delegate id */,
+                    int /* request_id */,
+                    gfx::Size /* window_size */)
+
+IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_OnPictureInPictureModeEnded_ACK,
+                    int /* delegate id */,
+                    int /* request_id */)
+
 // ----------------------------------------------------------------------------
 // Messages from the renderer notifying the browser of playback state changes.
 // ----------------------------------------------------------------------------
@@ -107,6 +124,23 @@
                     int /* delegate_id, distinguishes instances */,
                     gfx::Size /* new size of video */)
 
+IPC_MESSAGE_ROUTED5(MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted,
+                    int /* delegate id */,
+                    viz::SurfaceId /* surface_id */,
+                    gfx::Size /* natural_size */,
+                    int /* request_id */,
+                    bool /* show_play_pause_button */)
+
+IPC_MESSAGE_ROUTED2(MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded,
+                    int /* delegate id */,
+                    int /* request_id */)
+
+IPC_MESSAGE_ROUTED4(MediaPlayerDelegateHostMsg_OnPictureInPictureSurfaceChanged,
+                    int /* delegate id */,
+                    viz::SurfaceId /* surface_id */,
+                    gfx::Size /* natural_size */,
+                    bool /* show_play_pause_button */)
+
 IPC_MESSAGE_ROUTED2(
     MediaPlayerDelegateHostMsg_OnSetPictureInPictureCustomControls,
     int /* delegate id */,
diff --git a/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java
index 2c9ed9df..fc024927e 100644
--- a/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java
@@ -443,7 +443,7 @@
     @Override
     public void initChromiumBrowserProcessForTests() {
         ResourceExtractor resourceExtractor = ResourceExtractor.get();
-        resourceExtractor.startExtractingResources();
+        resourceExtractor.startExtractingResources("en");
         resourceExtractor.waitForCompletion();
         nativeSetCommandLineFlags(false);
     }
diff --git a/content/public/app/content_browser_manifest.cc b/content/public/app/content_browser_manifest.cc
index 880f44a..cf6cf19 100644
--- a/content/public/app/content_browser_manifest.cc
+++ b/content/public/app/content_browser_manifest.cc
@@ -174,7 +174,7 @@
               "navigation:dedicated_worker", "renderer",
               std::set<const char*>{
                   "blink.mojom.CacheStorage",
-                  "blink.mojom.DedicatedWorkerFactory",
+                  "blink.mojom.DedicatedWorkerHostFactory",
                   "blink.mojom.FileSystemManager", "blink.mojom.IDBFactory",
                   "blink.mojom.IdleManager", "blink.mojom.LockManager",
                   "blink.mojom.NotificationService",
@@ -213,7 +213,7 @@
                   "blink.mojom.ContactsManager",
                   "blink.mojom.CredentialManager",
                   "blink.mojom.DisplayCutoutHost",
-                  "blink.mojom.DedicatedWorkerFactory",
+                  "blink.mojom.DedicatedWorkerHostFactory",
                   "blink.mojom.FileChooser",
                   "blink.mojom.FileSystemManager",
                   "blink.mojom.GeolocationService",
@@ -227,7 +227,6 @@
                   "blink.mojom.MediaSessionService",
                   "blink.mojom.NotificationService",
                   "blink.mojom.PermissionService",
-                  "blink.mojom.PictureInPictureService",
                   "blink.mojom.Portal",
                   "blink.mojom.PrefetchURLLoaderService",
                   "blink.mojom.PresentationService",
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index bc88ea5c..336f080 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -547,8 +547,14 @@
 // Controls whether CTAP2 devices can communicate via the WebAuthentication API
 // using pairingless BLE protocol.
 // https://w3c.github.io/webauthn
-const base::Feature kWebAuthCable{"WebAuthenticationCable",
-                                  base::FEATURE_ENABLED_BY_DEFAULT};
+const base::Feature kWebAuthCable {
+  "WebAuthenticationCable",
+#if defined(OS_LINUX)
+      base::FEATURE_DISABLED_BY_DEFAULT
+#else
+      base::FEATURE_ENABLED_BY_DEFAULT
+#endif
+};
 
 // Controls whether AuthenticatorAttestationResponse contains a getTransports
 // member to return the set of transports supported by an authenticator.
@@ -587,6 +593,16 @@
 #endif
 };
 
+// Enables HW VP9 encoding on Android.
+const base::Feature kWebRtcHWVP9Encoding {
+  "WebRtcHWVP9Encoding",
+#if defined(OS_ANDROID)
+      base::FEATURE_DISABLED_BY_DEFAULT
+#else
+      base::FEATURE_DISABLED_BY_DEFAULT
+#endif
+};
+
 // Enables negotiation of experimental multiplex codec in SDP.
 const base::Feature kWebRtcMultiplexCodec{"WebRTC-MultiplexCodec",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index dc30463..5778c77a 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -132,6 +132,7 @@
 CONTENT_EXPORT extern const base::Feature kWebRtcEcdsaDefault;
 CONTENT_EXPORT extern const base::Feature kWebRtcHWH264Encoding;
 CONTENT_EXPORT extern const base::Feature kWebRtcHWVP8Encoding;
+CONTENT_EXPORT extern const base::Feature kWebRtcHWVP9Encoding;
 CONTENT_EXPORT extern const base::Feature kWebRtcMultiplexCodec;
 CONTENT_EXPORT extern const base::Feature kWebRtcScreenshareSwEncoding;
 CONTENT_EXPORT extern const base::Feature kWebRtcUseEchoCanceller3;
diff --git a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java
index 35a5e74f..65a9219 100644
--- a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java
+++ b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java
@@ -61,7 +61,7 @@
             try {
                 // Extract compressed resource paks.
                 ResourceExtractor resourceExtractor = ResourceExtractor.get();
-                resourceExtractor.startExtractingResources();
+                resourceExtractor.startExtractingResources("en");
                 resourceExtractor.waitForCompletion();
 
                 BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER)
diff --git a/content/renderer/gpu_benchmarking_extension.cc b/content/renderer/gpu_benchmarking_extension.cc
index 5d2a760..7e43978 100644
--- a/content/renderer/gpu_benchmarking_extension.cc
+++ b/content/renderer/gpu_benchmarking_extension.cc
@@ -554,9 +554,16 @@
       .SetMethod("printPagesToSkPictures",
                  &GpuBenchmarking::PrintPagesToSkPictures)
       .SetMethod("printPagesToXPS", &GpuBenchmarking::PrintPagesToXPS)
-      .SetValue("DEFAULT_INPUT", 0)
-      .SetValue("TOUCH_INPUT", 1)
-      .SetValue("MOUSE_INPUT", 2)
+      .SetValue("DEFAULT_INPUT",
+                static_cast<int>(SyntheticGestureParams::DEFAULT_INPUT))
+      .SetValue("TOUCH_INPUT",
+                static_cast<int>(SyntheticGestureParams::TOUCH_INPUT))
+      .SetValue("MOUSE_INPUT",
+                static_cast<int>(SyntheticGestureParams::MOUSE_INPUT))
+      .SetValue("TOUCHPAD_INPUT",
+                static_cast<int>(SyntheticGestureParams::TOUCHPAD_INPUT))
+      .SetValue("PEN_INPUT",
+                static_cast<int>(SyntheticGestureParams::PEN_INPUT))
       .SetMethod("gestureSourceTypeSupported",
                  &GpuBenchmarking::GestureSourceTypeSupported)
       .SetMethod("smoothScrollBy", &GpuBenchmarking::SmoothScrollBy)
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc
index d7d9255c..f6dbb40 100644
--- a/content/renderer/media/renderer_webmediaplayer_delegate.cc
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc
@@ -120,6 +120,30 @@
                                                            delegate_id, muted));
 }
 
+void RendererWebMediaPlayerDelegate::DidPictureInPictureModeStart(
+    int delegate_id,
+    const viz::SurfaceId& surface_id,
+    const gfx::Size& natural_size,
+    blink::WebMediaPlayer::PipWindowOpenedCallback callback,
+    bool show_play_pause_button) {
+  int request_id = next_picture_in_picture_callback_id_++;
+  enter_picture_in_picture_callback_map_.insert(
+      std::make_pair(request_id, std::move(callback)));
+  Send(new MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted(
+      routing_id(), delegate_id, surface_id, natural_size, request_id,
+      show_play_pause_button));
+}
+
+void RendererWebMediaPlayerDelegate::DidPictureInPictureModeEnd(
+    int delegate_id,
+    base::OnceClosure callback) {
+  int request_id = next_picture_in_picture_callback_id_++;
+  exit_picture_in_picture_callback_map_.insert(
+      std::make_pair(request_id, std::move(callback)));
+  Send(new MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded(
+      routing_id(), delegate_id, request_id));
+}
+
 void RendererWebMediaPlayerDelegate::DidSetPictureInPictureCustomControls(
     int delegate_id,
     const std::vector<blink::PictureInPictureControlInfo>& controls) {
@@ -127,6 +151,24 @@
       routing_id(), delegate_id, controls));
 }
 
+void RendererWebMediaPlayerDelegate::DidPictureInPictureSurfaceChange(
+    int delegate_id,
+    const viz::SurfaceId& surface_id,
+    const gfx::Size& natural_size,
+    bool show_play_pause_button) {
+  Send(new MediaPlayerDelegateHostMsg_OnPictureInPictureSurfaceChanged(
+      routing_id(), delegate_id, surface_id, natural_size,
+      show_play_pause_button));
+}
+
+void RendererWebMediaPlayerDelegate::
+    RegisterPictureInPictureWindowResizeCallback(
+        int player_id,
+        blink::WebMediaPlayer::PipWindowResizedCallback callback) {
+  picture_in_picture_window_resize_observer_ =
+      std::make_pair(player_id, std::move(callback));
+}
+
 void RendererWebMediaPlayerDelegate::DidPause(int player_id) {
   DVLOG(2) << __func__ << "(" << player_id << ")";
   DCHECK(id_map_.Lookup(player_id));
@@ -249,6 +291,13 @@
                         OnPictureInPictureModeEnded)
     IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_ClickPictureInPictureControl,
                         OnPictureInPictureControlClicked)
+    IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_OnPictureInPictureModeEnded_ACK,
+                        OnPictureInPictureModeEndedAck)
+    IPC_MESSAGE_HANDLER(
+        MediaPlayerDelegateMsg_OnPictureInPictureModeStarted_ACK,
+        OnPictureInPictureModeStartedAck)
+    IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_OnPictureInPictureWindowResize,
+                        OnPictureInPictureWindowResize)
     IPC_MESSAGE_UNHANDLED(return false)
   IPC_END_MESSAGE_MAP()
   return true;
@@ -368,6 +417,39 @@
     observer->OnPictureInPictureControlClicked(control_id);
 }
 
+void RendererWebMediaPlayerDelegate::OnPictureInPictureModeEndedAck(
+    int player_id,
+    int request_id) {
+  auto iter = exit_picture_in_picture_callback_map_.find(request_id);
+  DCHECK(iter != exit_picture_in_picture_callback_map_.end());
+
+  std::move(iter->second).Run();
+  exit_picture_in_picture_callback_map_.erase(iter);
+}
+
+void RendererWebMediaPlayerDelegate::OnPictureInPictureModeStartedAck(
+    int player_id,
+    int request_id,
+    const gfx::Size& window_size) {
+  auto iter = enter_picture_in_picture_callback_map_.find(request_id);
+  DCHECK(iter != enter_picture_in_picture_callback_map_.end());
+
+  std::move(iter->second).Run(blink::WebSize(window_size));
+  enter_picture_in_picture_callback_map_.erase(iter);
+}
+
+void RendererWebMediaPlayerDelegate::OnPictureInPictureWindowResize(
+    int player_id,
+    const gfx::Size& window_size) {
+  if (!picture_in_picture_window_resize_observer_ ||
+      picture_in_picture_window_resize_observer_->first != player_id) {
+    return;
+  }
+
+  picture_in_picture_window_resize_observer_->second.Run(
+      blink::WebSize(window_size));
+}
+
 void RendererWebMediaPlayerDelegate::ScheduleUpdateTask() {
   if (!pending_update_task_) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.h b/content/renderer/media/renderer_webmediaplayer_delegate.h
index 1f7242c3..ad78d316 100644
--- a/content/renderer/media/renderer_webmediaplayer_delegate.h
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.h
@@ -65,9 +65,23 @@
       blink::WebFullscreenVideoStatus fullscreen_video_status) override;
   void DidPlayerSizeChange(int delegate_id, const gfx::Size& size) override;
   void DidPlayerMutedStatusChange(int delegate_id, bool muted) override;
+  void DidPictureInPictureModeStart(
+      int delegate_id,
+      const viz::SurfaceId&,
+      const gfx::Size&,
+      blink::WebMediaPlayer::PipWindowOpenedCallback,
+      bool show_play_pause_button) override;
+  void DidPictureInPictureModeEnd(int delegate_id, base::OnceClosure) override;
   void DidSetPictureInPictureCustomControls(
       int delegate_id,
       const std::vector<blink::PictureInPictureControlInfo>& controls) override;
+  void DidPictureInPictureSurfaceChange(int delegate_id,
+                                        const viz::SurfaceId&,
+                                        const gfx::Size&,
+                                        bool show_play_pause_button) override;
+  void RegisterPictureInPictureWindowResizeCallback(
+      int player_id,
+      blink::WebMediaPlayer::PipWindowResizedCallback) override;
 
   // content::RenderFrameObserver overrides.
   void WasHidden() override;
@@ -100,6 +114,11 @@
   void OnPictureInPictureModeEnded(int player_id);
   void OnPictureInPictureControlClicked(int player_id,
                                         const std::string& control_id);
+  void OnPictureInPictureModeEndedAck(int player_id, int request_id);
+  void OnPictureInPictureModeStartedAck(int player_id,
+                                        int request_id,
+                                        const gfx::Size&);
+  void OnPictureInPictureWindowResize(int player_id, const gfx::Size&);
 
   // Schedules UpdateTask() to run soon.
   void ScheduleUpdateTask();
@@ -166,6 +185,35 @@
   // when the idle cleanup timer should be fired more aggressively.
   bool is_jelly_bean_;
 
+  // Map associating a callback with a request sent to the browser process. The
+  // index is used as a unique request id that is passed to the browser process
+  // and will then ACK with the same id which will be used to run the right
+  // callback.
+  using ExitPictureInPictureCallbackMap =
+      base::flat_map<int, base::OnceClosure>;
+  ExitPictureInPictureCallbackMap exit_picture_in_picture_callback_map_;
+
+  // Map associating a callback with a request sent to the browser process. The
+  // index is used as a unique request id that is passed to the browser process
+  // and will then ACK with the same id which will be used to run the right
+  // callback.
+  using EnterPictureInPictureCallbackMap =
+      base::flat_map<int, blink::WebMediaPlayer::PipWindowOpenedCallback>;
+  EnterPictureInPictureCallbackMap enter_picture_in_picture_callback_map_;
+
+  // Counter that is used to use unique request id associated with
+  // picture-in-picture callbacks. It is incremented every time it is used.
+  int next_picture_in_picture_callback_id_ = 0;
+
+  // Associating a player id and a Picture-in-Picture window resize callback.
+  // It holds the callback alive and guarantees that the notification sent from
+  // the browser proccess matches the player currently in Picture-in-Picture in
+  // the renderer.
+  using PictureInPictureWindowResizeObserver =
+      std::pair<int, blink::WebMediaPlayer::PipWindowResizedCallback>;
+  base::Optional<PictureInPictureWindowResizeObserver>
+      picture_in_picture_window_resize_observer_;
+
   DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegate);
 };
 
diff --git a/content/renderer/media/stream/webmediaplayer_ms.cc b/content/renderer/media/stream/webmediaplayer_ms.cc
index 3b11c6d..5f58e9e 100644
--- a/content/renderer/media/stream/webmediaplayer_ms.cc
+++ b/content/renderer/media/stream/webmediaplayer_ms.cc
@@ -425,8 +425,11 @@
   // disabled.
   // The viz::SurfaceId may be updated when the video begins playback or when
   // the size of the video changes.
-  if (client_)
-    client_->OnPictureInPictureStateChange();
+  if (client_ && IsInPictureInPicture() && !client_->IsInAutoPIP()) {
+    delegate_->DidPictureInPictureSurfaceChange(
+        delegate_id_, surface_id, NaturalSize(),
+        false /* show_play_pause_button */);
+  }
 }
 
 void WebMediaPlayerMS::TrackAdded(const blink::WebMediaStreamTrack& track) {
@@ -457,16 +460,6 @@
     audio_renderer_->Stop();
 }
 
-int WebMediaPlayerMS::GetDelegateId() {
-  return delegate_id_;
-}
-
-base::Optional<viz::SurfaceId> WebMediaPlayerMS::GetSurfaceId() {
-  if (bridge_)
-    return bridge_->GetSurfaceId();
-  return base::nullopt;
-}
-
 void WebMediaPlayerMS::Reload() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (web_stream_.IsNull())
@@ -647,17 +640,30 @@
   delegate_->DidPlayerMutedStatusChange(delegate_id_, volume == 0.0);
 }
 
-void WebMediaPlayerMS::EnterPictureInPicture() {
+void WebMediaPlayerMS::EnterPictureInPicture(
+    blink::WebMediaPlayer::PipWindowOpenedCallback callback) {
   if (!bridge_)
     ActivateSurfaceLayerForVideo();
 
   DCHECK(bridge_);
-  DCHECK(bridge_->GetSurfaceId().is_valid());
+
+  const viz::SurfaceId& surface_id = bridge_->GetSurfaceId();
+  DCHECK(surface_id.is_valid());
+
+  // Notifies the browser process that the player should now be in
+  // Picture-in-Picture mode.
+  delegate_->DidPictureInPictureModeStart(delegate_id_, surface_id,
+                                          NaturalSize(), std::move(callback),
+                                          false /* show_play_pause_button */);
 }
 
-void WebMediaPlayerMS::ExitPictureInPicture() {
+void WebMediaPlayerMS::ExitPictureInPicture(
+    blink::WebMediaPlayer::PipWindowClosedCallback callback) {
+  // Notifies the browser process that Picture-in-Picture has ended. It will
+  // clear out the states and close the window.
+  delegate_->DidPictureInPictureModeEnd(delegate_id_, std::move(callback));
+
   // Internal cleanups.
-  // TODO(mlamouri): remove the need for this.
   OnPictureInPictureModeEnded();
 }
 
@@ -666,6 +672,14 @@
   delegate_->DidSetPictureInPictureCustomControls(delegate_id_, controls);
 }
 
+void WebMediaPlayerMS::RegisterPictureInPictureWindowResizeCallback(
+    blink::WebMediaPlayer::PipWindowResizedCallback callback) {
+  DCHECK(IsInPictureInPicture() && !client_->IsInAutoPIP());
+
+  delegate_->RegisterPictureInPictureWindowResizeCallback(delegate_id_,
+                                                          std::move(callback));
+}
+
 void WebMediaPlayerMS::SetSinkId(
     const blink::WebString& sink_id,
     std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) {
diff --git a/content/renderer/media/stream/webmediaplayer_ms.h b/content/renderer/media/stream/webmediaplayer_ms.h
index 3fcc581..1dde82ed 100644
--- a/content/renderer/media/stream/webmediaplayer_ms.h
+++ b/content/renderer/media/stream/webmediaplayer_ms.h
@@ -116,10 +116,14 @@
   void Seek(double seconds) override;
   void SetRate(double rate) override;
   void SetVolume(double volume) override;
-  void EnterPictureInPicture() override;
-  void ExitPictureInPicture() override;
+  void EnterPictureInPicture(
+      blink::WebMediaPlayer::PipWindowOpenedCallback callback) override;
+  void ExitPictureInPicture(
+      blink::WebMediaPlayer::PipWindowClosedCallback callback) override;
   void SetPictureInPictureCustomControls(
       const std::vector<blink::PictureInPictureControlInfo>&) override;
+  void RegisterPictureInPictureWindowResizeCallback(
+      blink::WebMediaPlayer::PipWindowResizedCallback) override;
   void SetSinkId(
       const blink::WebString& sink_id,
       std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) override;
@@ -236,8 +240,6 @@
   void TrackAdded(const blink::WebMediaStreamTrack& track) override;
   void TrackRemoved(const blink::WebMediaStreamTrack& track) override;
   void ActiveStateChanged(bool is_active) override;
-  int GetDelegateId() override;
-  base::Optional<viz::SurfaceId> GetSurfaceId() override;
 
   void OnDisplayTypeChanged(WebMediaPlayer::DisplayType) override;
 
diff --git a/content/renderer/media/stream/webmediaplayer_ms_unittest.cc b/content/renderer/media/stream/webmediaplayer_ms_unittest.cc
index c649211..ccf92dd 100644
--- a/content/renderer/media/stream/webmediaplayer_ms_unittest.cc
+++ b/content/renderer/media/stream/webmediaplayer_ms_unittest.cc
@@ -113,9 +113,21 @@
     EXPECT_EQ(delegate_id_, delegate_id);
   }
 
+  MOCK_METHOD5(DidPictureInPictureModeStart,
+               void(int,
+                    const viz::SurfaceId&,
+                    const gfx::Size&,
+                    blink::WebMediaPlayer::PipWindowOpenedCallback,
+                    bool));
+  MOCK_METHOD2(DidPictureInPictureModeEnd,
+               void(int, blink::WebMediaPlayer::PipWindowClosedCallback));
   MOCK_METHOD2(DidSetPictureInPictureCustomControls,
                void(int,
                     const std::vector<blink::PictureInPictureControlInfo>&));
+  MOCK_METHOD4(DidPictureInPictureSurfaceChange,
+               void(int, const viz::SurfaceId&, const gfx::Size&, bool));
+  MOCK_METHOD2(RegisterPictureInPictureWindowResizeCallback,
+               void(int, blink::WebMediaPlayer::PipWindowResizedCallback));
 
   void DidPause(int delegate_id) override {
     EXPECT_EQ(delegate_id_, delegate_id);
@@ -606,7 +618,6 @@
   void StopRendering() override;
   void DidReceiveFrame() override;
   bool IsDrivingFrameUpdates() const override { return true; }
-  void OnPictureInPictureStateChange() override {}
 
   // For test use
   void SetBackgroundRendering(bool background_rendering) {
@@ -1396,9 +1407,68 @@
 }
 #endif
 
-INSTANTIATE_TEST_CASE_P(,
-                        WebMediaPlayerMSTest,
-                        ::testing::Combine(::testing::Bool(),
-                                           ::testing::Bool(),
-                                           ::testing::Bool()));
+// Tests delegate methods are called when Picture-in-Picture is triggered.
+TEST_P(WebMediaPlayerMSTest, PictureInPictureTriggerCallback) {
+  InitializeWebMediaPlayerMS();
+
+  // It works only a surface layer is used instead of a video layer.
+  if (!enable_surface_layer_for_video_) {
+    EXPECT_CALL(*this, DoSetCcLayer(false));
+    return;
+  }
+
+  MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true);
+
+  int tokens[] = {0,   33,  66,  100, 133, 166, 200, 233, 266, 300,
+                  333, 366, 400, 433, 466, 500, 533, 566, 600};
+  std::vector<int> timestamps(tokens, tokens + sizeof(tokens) / sizeof(int));
+  provider->QueueFrames(timestamps);
+
+  EXPECT_CALL(*submitter_ptr_, StartRendering());
+  EXPECT_CALL(*this, DisplayType()).Times(2);
+  EXPECT_CALL(*this, DoReadyStateChanged(
+                         blink::WebMediaPlayer::kReadyStateHaveMetadata));
+  EXPECT_CALL(*this, DoReadyStateChanged(
+                         blink::WebMediaPlayer::kReadyStateHaveEnoughData));
+  EXPECT_CALL(*this,
+              CheckSizeChanged(gfx::Size(kStandardWidth, kStandardHeight)));
+  message_loop_controller_.RunAndWaitForStatus(
+      media::PipelineStatus::PIPELINE_OK);
+  testing::Mock::VerifyAndClearExpectations(this);
+
+  EXPECT_CALL(*this, DisplayType())
+      .WillRepeatedly(
+          Return(blink::WebMediaPlayer::DisplayType::kPictureInPicture));
+
+  const gfx::Size natural_size = player_->NaturalSize();
+  EXPECT_CALL(delegate_, DidPictureInPictureSurfaceChange(
+                             delegate_.delegate_id(),
+                             surface_layer_bridge_ptr_->GetSurfaceId(),
+                             natural_size, false))
+      .Times(2);
+
+  player_->OnSurfaceIdUpdated(surface_layer_bridge_ptr_->GetSurfaceId());
+
+  EXPECT_CALL(delegate_, DidPictureInPictureModeStart(
+                             delegate_.delegate_id(),
+                             surface_layer_bridge_ptr_->GetSurfaceId(),
+                             natural_size, _, false));
+
+  player_->EnterPictureInPicture(base::DoNothing());
+  player_->OnSurfaceIdUpdated(surface_layer_bridge_ptr_->GetSurfaceId());
+
+  // Updating SurfaceId should NOT exit Picture-in-Picture.
+  EXPECT_CALL(delegate_, DidPictureInPictureModeEnd(delegate_.delegate_id(), _))
+      .Times(0);
+
+  testing::Mock::VerifyAndClearExpectations(this);
+  EXPECT_CALL(*this, DoSetCcLayer(false));
+  EXPECT_CALL(*submitter_ptr_, StopUsingProvider());
+}
+
+INSTANTIATE_TEST_SUITE_P(,
+                         WebMediaPlayerMSTest,
+                         ::testing::Combine(::testing::Bool(),
+                                            ::testing::Bool(),
+                                            ::testing::Bool()));
 }  // namespace content
diff --git a/content/renderer/media/webrtc/rtc_video_encoder.cc b/content/renderer/media/webrtc/rtc_video_encoder.cc
index ca77a74..7249dcf 100644
--- a/content/renderer/media/webrtc/rtc_video_encoder.cc
+++ b/content/renderer/media/webrtc/rtc_video_encoder.cc
@@ -59,6 +59,8 @@
     media::VideoCodecProfile profile) {
   if (profile >= media::VP8PROFILE_MIN && profile <= media::VP8PROFILE_MAX) {
     return webrtc::kVideoCodecVP8;
+  } else if (profile == media::VP9PROFILE_MIN) {
+    return webrtc::kVideoCodecVP9;
   } else if (profile >= media::H264PROFILE_MIN &&
              profile <= media::H264PROFILE_MAX) {
     return webrtc::kVideoCodecH264;
@@ -773,6 +775,7 @@
   memset(&header, 0, sizeof(header));
   switch (video_codec_type_) {
     case webrtc::kVideoCodecVP8:
+    case webrtc::kVideoCodecVP9:
       // Generate a header describing a single fragment.
       header.VerifyAndAllocateFragmentationHeader(1);
       header.fragmentationOffset[0] = 0;
@@ -798,6 +801,29 @@
   info.codecType = video_codec_type_;
   if (video_codec_type_ == webrtc::kVideoCodecVP8) {
     info.codecSpecific.VP8.keyIdx = -1;
+  } else if (video_codec_type_ == webrtc::kVideoCodecVP9) {
+    bool key_frame = image._frameType == webrtc::kVideoFrameKey;
+    info.codecSpecific.VP9.inter_pic_predicted = key_frame ? false : true;
+    info.codecSpecific.VP9.flexible_mode = false;
+    info.codecSpecific.VP9.ss_data_available = key_frame ? true : false;
+    info.codecSpecific.VP9.temporal_idx = webrtc::kNoTemporalIdx;
+    info.codecSpecific.VP9.temporal_up_switch = true;
+    info.codecSpecific.VP9.inter_layer_predicted = false;
+    info.codecSpecific.VP9.gof_idx = 0;
+    info.codecSpecific.VP9.num_spatial_layers = 1;
+    info.codecSpecific.VP9.first_frame_in_picture = true;
+    info.codecSpecific.VP9.end_of_picture = true;
+    info.codecSpecific.VP9.spatial_layer_resolution_present = false;
+    if (info.codecSpecific.VP9.ss_data_available) {
+      info.codecSpecific.VP9.spatial_layer_resolution_present = true;
+      info.codecSpecific.VP9.width[0] = image._encodedWidth;
+      info.codecSpecific.VP9.height[0] = image._encodedHeight;
+      info.codecSpecific.VP9.gof.num_frames_in_gof = 1;
+      info.codecSpecific.VP9.gof.temporal_idx[0] = 0;
+      info.codecSpecific.VP9.gof.temporal_up_switch[0] = false;
+      info.codecSpecific.VP9.gof.num_ref_pics[0] = 1;
+      info.codecSpecific.VP9.gof.pid_diff[0][0] = 1;
+    }
   }
 
   const auto result =
@@ -850,6 +876,12 @@
       return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
     }
   }
+  if (codec_settings->codecType == webrtc::kVideoCodecVP9 &&
+      codec_settings->VP9().numberOfSpatialLayers > 1) {
+    DVLOG(1)
+        << "VP9 SVC not yet supported by HW codecs, falling back to sofware.";
+    return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
+  }
 
   impl_ =
       new Impl(gpu_factories_, ProfileToWebRtcVideoCodecType(profile_),
diff --git a/content/renderer/media/webrtc/rtc_video_encoder_factory.cc b/content/renderer/media/webrtc/rtc_video_encoder_factory.cc
index fa2f38423..e39a1f0 100644
--- a/content/renderer/media/webrtc/rtc_video_encoder_factory.cc
+++ b/content/renderer/media/webrtc/rtc_video_encoder_factory.cc
@@ -88,6 +88,11 @@
           {cricket::kH264FmtpPacketizationMode, "1"}};
       return format;
     }
+  } else if (profile.profile >= media::VP9PROFILE_MIN &&
+             profile.profile <= media::VP9PROFILE_MAX) {
+    if (base::FeatureList::IsEnabled(features::kWebRtcHWVP9Encoding)) {
+      return webrtc::SdpVideoFormat("VP9");
+    }
   }
   return base::nullopt;
 }
diff --git a/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc b/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc
index 510dff25..18325df 100644
--- a/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc
+++ b/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc
@@ -50,10 +50,12 @@
   void Seek(double seconds) override {}
   void SetRate(double) override {}
   void SetVolume(double) override {}
-  void EnterPictureInPicture() override {}
-  void ExitPictureInPicture() override {}
+  void EnterPictureInPicture(PipWindowOpenedCallback) override {}
+  void ExitPictureInPicture(PipWindowClosedCallback) override {}
   void SetPictureInPictureCustomControls(
       const std::vector<blink::PictureInPictureControlInfo>&) override {}
+  void RegisterPictureInPictureWindowResizeCallback(
+      PipWindowResizedCallback) override {}
   blink::WebTimeRanges Buffered() const override {
     return blink::WebTimeRanges();
   }
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 391d776b..3e8c0abe 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1543,7 +1543,6 @@
     "../browser/payments/payment_app_content_unittest_base.h",
     "../browser/payments/payment_app_provider_impl_unittest.cc",
     "../browser/payments/payment_manager_unittest.cc",
-    "../browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc",
     "../browser/plugin_list_unittest.cc",
     "../browser/presentation/presentation_service_impl_unittest.cc",
     "../browser/renderer_host/clipboard_host_impl_unittest.cc",
diff --git a/device/fido/authenticator_supported_options.cc b/device/fido/authenticator_supported_options.cc
index 3e035ba..bf98a6b9 100644
--- a/device/fido/authenticator_supported_options.cc
+++ b/device/fido/authenticator_supported_options.cc
@@ -20,7 +20,7 @@
 cbor::Value ConvertToCBOR(const AuthenticatorSupportedOptions& options) {
   cbor::Value::MapValue option_map;
   option_map.emplace(kResidentKeyMapKey, options.supports_resident_key);
-  option_map.emplace(kUserPresenceMapKey, options.user_presence_required);
+  option_map.emplace(kUserPresenceMapKey, options.supports_user_presence);
   option_map.emplace(kPlatformDeviceMapKey, options.is_platform_device);
 
   using UvAvailability =
diff --git a/device/fido/authenticator_supported_options.h b/device/fido/authenticator_supported_options.h
index 830be6d2..eb4e08c30 100644
--- a/device/fido/authenticator_supported_options.h
+++ b/device/fido/authenticator_supported_options.h
@@ -48,7 +48,10 @@
   // Indicates whether the device is capable of verifying the user on its own.
   UserVerificationAvailability user_verification_availability =
       UserVerificationAvailability::kNotSupported;
-  bool user_presence_required = true;
+  // supports_user_presence indicates whether the device can assert user
+  // presence. E.g. a touch for a USB device, or being placed in the reader
+  // field for an NFC device.
+  bool supports_user_presence = true;
   // Represents whether client pin in set and stored in device. Set as null
   // optional if client pin capability is not supported by the authenticator.
   ClientPinAvailability client_pin_availability =
diff --git a/device/fido/ctap_response_unittest.cc b/device/fido/ctap_response_unittest.cc
index 128cdec..c8a9898 100644
--- a/device/fido/ctap_response_unittest.cc
+++ b/device/fido/ctap_response_unittest.cc
@@ -574,7 +574,7 @@
       base::ContainsKey(get_info_response->versions(), ProtocolVersion::kU2f));
   EXPECT_TRUE(get_info_response->options().is_platform_device);
   EXPECT_TRUE(get_info_response->options().supports_resident_key);
-  EXPECT_TRUE(get_info_response->options().user_presence_required);
+  EXPECT_TRUE(get_info_response->options().supports_user_presence);
   EXPECT_EQ(AuthenticatorSupportedOptions::UserVerificationAvailability::
                 kSupportedAndConfigured,
             get_info_response->options().user_verification_availability);
diff --git a/device/fido/device_response_converter.cc b/device/fido/device_response_converter.cc
index 11e3e1d3..a5f4538 100644
--- a/device/fido/device_response_converter.cc
+++ b/device/fido/device_response_converter.cc
@@ -233,7 +233,7 @@
       if (!option_map_it->second.is_bool())
         return base::nullopt;
 
-      options.user_presence_required = option_map_it->second.GetBool();
+      options.supports_user_presence = option_map_it->second.GetBool();
     }
 
     option_map_it = option_map.find(CBOR(kUserVerificationMapKey));
diff --git a/device/fido/mac/authenticator.mm b/device/fido/mac/authenticator.mm
index 8d9f532..6d871cd 100644
--- a/device/fido/mac/authenticator.mm
+++ b/device/fido/mac/authenticator.mm
@@ -147,7 +147,7 @@
   options.supports_resident_key = true;
   options.user_verification_availability = AuthenticatorSupportedOptions::
       UserVerificationAvailability::kSupportedAndConfigured;
-  options.user_presence_required = true;
+  options.supports_user_presence = true;
   return options;
 }
 
diff --git a/device/fido/virtual_ctap2_device.cc b/device/fido/virtual_ctap2_device.cc
index 6b5354dd..ba91245 100644
--- a/device/fido/virtual_ctap2_device.cc
+++ b/device/fido/virtual_ctap2_device.cc
@@ -50,16 +50,87 @@
                                        data.value_or(std::vector<uint8_t>{}))));
 }
 
-bool AreGetAssertionOptionsValid(const AuthenticatorSupportedOptions& options,
-                                 const CtapGetAssertionRequest& request) {
-  if (request.user_presence_required() && !options.user_presence_required)
-    return false;
+// CheckUserVerification implements the first, common steps of
+// makeCredential and getAssertion from the CTAP2 spec.
+CtapDeviceResponseCode CheckUserVerification(
+    bool is_make_credential,
+    const AuthenticatorSupportedOptions& options,
+    const base::Optional<std::vector<uint8_t>>& pin_auth,
+    const base::Optional<uint8_t>& pin_protocol,
+    UserVerificationRequirement user_verification,
+    base::RepeatingCallback<void(void)> simulate_press_callback,
+    bool* out_user_verified) {
+  // The following quotes are from the CTAP2 spec:
 
-  return request.user_verification() !=
-             UserVerificationRequirement::kRequired ||
-         options.user_verification_availability ==
-             AuthenticatorSupportedOptions::UserVerificationAvailability::
-                 kSupportedAndConfigured;
+  // 1. "If authenticator supports clientPin and platform sends a zero length
+  // pinAuth, wait for user touch and then return either CTAP2_ERR_PIN_NOT_SET
+  // if pin is not set or CTAP2_ERR_PIN_INVALID if pin has been set."
+  const bool supports_pin =
+      options.client_pin_availability !=
+      AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported;
+  if (supports_pin && pin_auth && pin_auth->empty()) {
+    if (simulate_press_callback) {
+      simulate_press_callback.Run();
+    }
+    switch (options.client_pin_availability) {
+      case AuthenticatorSupportedOptions::ClientPinAvailability::
+          kSupportedAndPinSet:
+        return CtapDeviceResponseCode::kCtap2ErrPinInvalid;
+      case AuthenticatorSupportedOptions::ClientPinAvailability::
+          kSupportedButPinNotSet:
+        return CtapDeviceResponseCode::kCtap2ErrPinNotSet;
+      case AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported:
+        NOTREACHED();
+    }
+  }
+
+  // 2. "If authenticator supports clientPin and pinAuth parameter is present
+  // and the pinProtocol is not supported, return CTAP2_ERR_PIN_AUTH_INVALID
+  // error."
+  if (supports_pin && pin_auth && (!pin_protocol || *pin_protocol != 1)) {
+    return CtapDeviceResponseCode::kCtap2ErrPinInvalid;
+  }
+
+  // 3. "If authenticator is not protected by some form of user verification and
+  // platform has set "uv" or pinAuth to get the user verification, return
+  // CTAP2_ERR_INVALID_OPTION."
+  const bool can_do_uv =
+      options.user_verification_availability ==
+          AuthenticatorSupportedOptions::UserVerificationAvailability::
+              kSupportedAndConfigured ||
+      options.client_pin_availability ==
+          AuthenticatorSupportedOptions::ClientPinAvailability::
+              kSupportedAndPinSet;
+  if (!can_do_uv &&
+      (user_verification == UserVerificationRequirement::kRequired ||
+       pin_auth)) {
+    return CtapDeviceResponseCode::kCtap2ErrInvalidOption;
+  }
+
+  // Step 4.
+  bool uv = false;
+  if (can_do_uv) {
+    if (user_verification == UserVerificationRequirement::kRequired) {
+      // Internal UV is assumed to always succeed.
+      if (simulate_press_callback) {
+        simulate_press_callback.Run();
+      }
+      uv = true;
+    }
+
+    if (pin_auth) {
+      DCHECK(pin_protocol && *pin_protocol == 1);
+      // The pin_auth argument is assumed to be correct.
+      uv = true;
+    }
+
+    if (is_make_credential && !uv) {
+      return CtapDeviceResponseCode::kCtap2ErrPinRequired;
+    }
+  }
+
+  *out_user_verified = uv;
+  return CtapDeviceResponseCode::kSuccess;
 }
 
 // Checks that whether the received MakeCredential request includes EA256
@@ -262,77 +333,15 @@
   CtapMakeCredentialRequest request = std::get<0>(*request_and_hash);
   CtapMakeCredentialRequest::ClientDataHash client_data_hash =
       std::get<1>(*request_and_hash);
-
   const AuthenticatorSupportedOptions& options = device_info_.options();
 
-  // The following quotes are from the CTAP2 spec:
-
-  // 1. "If authenticator supports clientPin and platform sends a zero length
-  // pinAuth, wait for user touch and then return either CTAP2_ERR_PIN_NOT_SET
-  // if pin is not set or CTAP2_ERR_PIN_INVALID if pin has been set."
-  const bool supports_pin =
-      options.client_pin_availability !=
-      AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported;
-  if (supports_pin && request.pin_auth() && request.pin_auth()->empty()) {
-    if (mutable_state()->simulate_press_callback) {
-      mutable_state()->simulate_press_callback.Run();
-    }
-    switch (device_info_.options().client_pin_availability) {
-      case AuthenticatorSupportedOptions::ClientPinAvailability::
-          kSupportedAndPinSet:
-        return CtapDeviceResponseCode::kCtap2ErrPinInvalid;
-      case AuthenticatorSupportedOptions::ClientPinAvailability::
-          kSupportedButPinNotSet:
-        return CtapDeviceResponseCode::kCtap2ErrPinNotSet;
-      case AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported:
-        NOTREACHED();
-    }
-  }
-
-  // 2. "If authenticator supports clientPin and pinAuth parameter is present
-  // and the pinProtocol is not supported, return CTAP2_ERR_PIN_AUTH_INVALID
-  // error."
-  if (supports_pin && request.pin_auth() &&
-      (!request.pin_protocol() || *request.pin_protocol() != 1)) {
-    return CtapDeviceResponseCode::kCtap2ErrPinInvalid;
-  }
-
-  // 3. "If authenticator is not protected by some form of user verification and
-  // platform has set "uv" or pinAuth to get the user verification, return
-  // CTAP2_ERR_INVALID_OPTION."
-  const bool can_do_uv =
-      options.user_verification_availability ==
-          AuthenticatorSupportedOptions::UserVerificationAvailability::
-              kSupportedAndConfigured ||
-      options.client_pin_availability ==
-          AuthenticatorSupportedOptions::ClientPinAvailability::
-              kSupportedAndPinSet;
-  if (!can_do_uv &&
-      (request.user_verification() == UserVerificationRequirement::kRequired ||
-       request.pin_auth())) {
-    return CtapDeviceResponseCode::kCtap2ErrInvalidOption;
-  }
-
-  // Step 4.
-  bool uv = false;
-  if (can_do_uv) {
-    if (request.user_verification() == UserVerificationRequirement::kRequired) {
-      // Internal UV is assumed to always succeed.
-      if (mutable_state()->simulate_press_callback) {
-        mutable_state()->simulate_press_callback.Run();
-      }
-      uv = true;
-    }
-
-    if (request.pin_auth()) {
-      DCHECK(request.pin_protocol() && *request.pin_protocol() == 1);
-      // The pin_auth argument is assumed to be correct.
-      uv = true;
-    }
-
-    if (!uv) {
-      return CtapDeviceResponseCode::kCtap2ErrPinAuthInvalid;
-    }
+  bool user_verified;
+  const CtapDeviceResponseCode uv_error = CheckUserVerification(
+      true /* is makeCredential */, options, request.pin_auth(),
+      request.pin_protocol(), request.user_verification(),
+      mutable_state()->simulate_press_callback, &user_verified);
+  if (uv_error != CtapDeviceResponseCode::kSuccess) {
+    return uv_error;
   }
 
   // 6. Check for already registered credentials.
@@ -357,10 +366,16 @@
   }
 
   // Step 8.
-  if (request.resident_key_required() && !options.supports_resident_key) {
+  if ((request.resident_key_required() && !options.supports_resident_key) ||
+      !options.supports_user_presence) {
     return CtapDeviceResponseCode::kCtap2ErrUnsupportedOption;
   }
 
+  // Step 10.
+  if (!user_verified && mutable_state()->simulate_press_callback) {
+    mutable_state()->simulate_press_callback.Run();
+  }
+
   // Create key to register.
   // Note: Non-deterministic, you need to mock this out if you rely on
   // deterministic behavior.
@@ -394,7 +409,7 @@
   }
 
   auto authenticator_data = ConstructAuthenticatorData(
-      rp_id_hash, uv, 01ul, std::move(attested_credential_data),
+      rp_id_hash, user_verified, 01ul, std::move(attested_credential_data),
       std::move(extensions));
   auto sign_buffer =
       ConstructSignatureBuffer(authenticator_data, client_data_hash);
@@ -436,6 +451,16 @@
   CtapGetAssertionRequest request = std::get<0>(*request_and_hash);
   CtapGetAssertionRequest::ClientDataHash client_data_hash =
       std::get<1>(*request_and_hash);
+  const AuthenticatorSupportedOptions& options = device_info_.options();
+
+  bool user_verified;
+  const CtapDeviceResponseCode uv_error = CheckUserVerification(
+      false /* not makeCredential */, options, request.pin_auth(),
+      request.pin_protocol(), request.user_verification(),
+      mutable_state()->simulate_press_callback, &user_verified);
+  if (uv_error != CtapDeviceResponseCode::kSuccess) {
+    return uv_error;
+  }
 
   // Resident keys are not supported.
   if (!request.allow_list() || request.allow_list()->empty()) {
@@ -444,17 +469,6 @@
     return CtapDeviceResponseCode::kCtap2ErrNoCredentials;
   }
 
-  // Client pin option is not supported.
-  if (request.pin_auth()) {
-    DLOG(ERROR) << "Virtual CTAP2 device does not support client pin.";
-    return CtapDeviceResponseCode::kCtap2ErrOther;
-  }
-
-  if (!AreGetAssertionOptionsValid(device_info_.options(), request)) {
-    DLOG(ERROR) << "Unsupported options required from the request.";
-    return CtapDeviceResponseCode::kCtap2ErrOther;
-  }
-
   const auto rp_id_hash = fido_parsing_utils::CreateSHA256Hash(request.rp_id());
 
   RegistrationData* found_data = nullptr;
@@ -470,10 +484,21 @@
   if (!found_data)
     return CtapDeviceResponseCode::kCtap2ErrNoCredentials;
 
+  // Step 6.
+  if (!options.supports_user_presence && request.user_presence_required()) {
+    return CtapDeviceResponseCode::kCtap2ErrUnsupportedOption;
+  }
+
+  // Step 8.
+  if (request.user_presence_required() && !user_verified &&
+      mutable_state()->simulate_press_callback) {
+    mutable_state()->simulate_press_callback.Run();
+  }
+
   found_data->counter++;
-  auto authenticator_data = ConstructAuthenticatorData(
-      rp_id_hash, false /* user verified */, found_data->counter, base::nullopt,
-      base::nullopt);
+  auto authenticator_data =
+      ConstructAuthenticatorData(rp_id_hash, user_verified, found_data->counter,
+                                 base::nullopt, base::nullopt);
   auto signature_buffer =
       ConstructSignatureBuffer(authenticator_data, client_data_hash);
 
diff --git a/extensions/browser/device_local_account_util.cc b/extensions/browser/device_local_account_util.cc
index 2c29aeab..fa791e81 100644
--- a/extensions/browser/device_local_account_util.cc
+++ b/extensions/browser/device_local_account_util.cc
@@ -111,6 +111,7 @@
     "ilnpadgckeacioehlommkaafedibdeob",  // Enterprise DeviceAttributes
     "oflckobdemeldmjddmlbaiaookhhcngo",  // Citrix Receiver QA version
     "ljacajndfccfgnfohlgkdphmbnpkjflk",  // Chrome Remote Desktop (Dev Build)
+    "behllobkkfkfnphdnhnkndlbkcpglgmj",  // Autotest
 
     // Google Apps:
     "mclkkofklkfljcocdinagocijmpgbhab",  // Google input tools
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
index d7a1e7b8..e15c8fd 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
+++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -82,12 +82,10 @@
       MemoryTypeTracker* tracker) override;
 
  private:
-  bool GenGLTexture();
+  gles2::Texture* GenGLTexture();
   base::android::ScopedHardwareBufferHandle hardware_buffer_handle_;
 
-  // This texture will be lazily initialised/created when ProduceGLTexture is
-  // called.
-  gles2::Texture* texture_ = nullptr;
+  gles2::Texture* legacy_texture_ = nullptr;
 
   // TODO(vikassoni): In future when we add begin/end write support, we will
   // need to properly use this flag to pass the is_cleared_ information to
@@ -100,7 +98,6 @@
   base::ScopedFD gl_write_sync_fd_;
   base::ScopedFD vk_read_sync_fd_;
 
-  sk_sp<SkPromiseImageTexture> cached_promise_texture_;
   DISALLOW_COPY_AND_ASSIGN(SharedImageBackingAHB);
 };
 
@@ -115,6 +112,11 @@
       : SharedImageRepresentationGLTexture(manager, backing, tracker),
         texture_(texture) {}
 
+  ~SharedImageRepresentationGLTextureAHB() override {
+    if (texture_)
+      texture_->RemoveLightweightRef(has_context());
+  }
+
   gles2::Texture* GetTexture() override { return texture_; }
 
   bool BeginAccess(GLenum mode) override {
@@ -148,6 +150,11 @@
 
       // Pass this fd to its backing.
       ahb_backing()->SetGLWriteSyncFd(std::move(sync_fd));
+
+      if (texture_) {
+        if (texture_->IsLevelCleared(texture_->target(), 0))
+          backing()->SetCleared();
+      }
     }
   }
 
@@ -171,16 +178,20 @@
       SharedImageBacking* backing,
       sk_sp<SkPromiseImageTexture> cached_promise_image_texture,
       MemoryTypeTracker* tracker,
-      GLenum target,
-      GLuint service_id)
+      gles2::Texture* texture)
       : SharedImageRepresentationSkia(manager, backing, tracker),
-        promise_texture_(cached_promise_image_texture) {
+        promise_texture_(cached_promise_image_texture),
+        texture_(std::move(texture)) {
 #if DCHECK_IS_ON()
     context_ = gl::GLContext::GetCurrent();
 #endif
   }
 
-  ~SharedImageRepresentationSkiaGLAHB() override { DCHECK(!write_surface_); }
+  ~SharedImageRepresentationSkiaGLAHB() override {
+    DCHECK(!write_surface_);
+    if (texture_)
+      texture_->RemoveLightweightRef(has_context());
+  }
 
   sk_sp<SkSurface> BeginWriteAccess(
       GrContext* gr_context,
@@ -229,6 +240,11 @@
 
     // Pass this fd to its backing.
     ahb_backing()->SetGLWriteSyncFd(std::move(sync_fd));
+
+    if (texture_) {
+      if (texture_->IsLevelCleared(texture_->target(), 0))
+        backing()->SetCleared();
+    }
   }
 
   sk_sp<SkPromiseImageTexture> BeginReadAccess(SkSurface* sk_surface) override {
@@ -259,6 +275,7 @@
   }
 
   sk_sp<SkPromiseImageTexture> promise_texture_;
+  gles2::Texture* texture_;
   SkSurface* write_surface_ = nullptr;
 #if DCHECK_IS_ON()
   gl::GLContext* context_;
@@ -482,18 +499,15 @@
   // Check to make sure buffer is explicitly destroyed using Destroy() api
   // before this destructor is called.
   DCHECK(!hardware_buffer_handle_.is_valid());
-  DCHECK(!texture_);
 }
 
 bool SharedImageBackingAHB::IsCleared() const {
-  if (texture_)
-    return texture_->IsLevelCleared(texture_->target(), 0);
   return is_cleared_;
 }
 
 void SharedImageBackingAHB::SetCleared() {
-  if (texture_)
-    texture_->SetLevelCleared(texture_->target(), 0, true);
+  if (legacy_texture_)
+    legacy_texture_->SetLevelCleared(legacy_texture_->target(), 0, true);
   is_cleared_ = true;
 }
 
@@ -502,18 +516,18 @@
 bool SharedImageBackingAHB::ProduceLegacyMailbox(
     MailboxManager* mailbox_manager) {
   DCHECK(hardware_buffer_handle_.is_valid());
-  if (!GenGLTexture())
+  legacy_texture_ = GenGLTexture();
+  if (!legacy_texture_)
     return false;
-  DCHECK(texture_);
-  mailbox_manager->ProduceTexture(mailbox(), texture_);
+  mailbox_manager->ProduceTexture(mailbox(), legacy_texture_);
   return true;
 }
 
 void SharedImageBackingAHB::Destroy() {
   DCHECK(hardware_buffer_handle_.is_valid());
-  if (texture_) {
-    texture_->RemoveLightweightRef(have_context());
-    texture_ = nullptr;
+  if (legacy_texture_) {
+    legacy_texture_->RemoveLightweightRef(have_context());
+    legacy_texture_ = nullptr;
   }
   hardware_buffer_handle_.reset();
 }
@@ -548,12 +562,12 @@
                                         MemoryTypeTracker* tracker) {
   // Use same texture for all the texture representations generated from same
   // backing.
-  if (!GenGLTexture())
+  auto* texture = GenGLTexture();
+  if (!texture)
     return nullptr;
 
-  DCHECK(texture_);
   return std::make_unique<SharedImageRepresentationGLTextureAHB>(
-      manager, this, tracker, texture_);
+      manager, this, tracker, std::move(texture));
 }
 
 std::unique_ptr<SharedImageRepresentationSkia>
@@ -567,26 +581,21 @@
     return std::make_unique<SharedImageRepresentationSkiaVkAHB>(manager, this);
   }
 
-  if (!GenGLTexture())
+  auto* texture = GenGLTexture();
+  if (!texture)
     return nullptr;
 
-  if (!cached_promise_texture_) {
-    GrBackendTexture backend_texture;
-    GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(),
-                        texture_->target(), size(), texture_->service_id(),
-                        format(), &backend_texture);
-    cached_promise_texture_ = SkPromiseImageTexture::Make(backend_texture);
-  }
-  DCHECK(texture_);
+  GrBackendTexture backend_texture;
+  GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(),
+                      texture->target(), size(), texture->service_id(),
+                      format(), &backend_texture);
+  sk_sp<SkPromiseImageTexture> promise_texture =
+      SkPromiseImageTexture::Make(backend_texture);
   return std::make_unique<SharedImageRepresentationSkiaGLAHB>(
-      manager, this, cached_promise_texture_, tracker, texture_->target(),
-      texture_->service_id());
+      manager, this, promise_texture, tracker, std::move(texture));
 }
 
-bool SharedImageBackingAHB::GenGLTexture() {
-  if (texture_)
-    return true;
-
+gles2::Texture* SharedImageBackingAHB::GenGLTexture() {
   DCHECK(hardware_buffer_handle_.is_valid());
 
   // Target for AHB backed egl images.
@@ -615,23 +624,23 @@
     LOG(ERROR) << "Failed to create EGL image ";
     api->glBindTextureFn(target, old_texture_binding);
     api->glDeleteTexturesFn(1, &service_id);
-    return false;
+    return nullptr;
   }
   if (!egl_image->BindTexImage(target)) {
     LOG(ERROR) << "Failed to bind egl image";
     api->glBindTextureFn(target, old_texture_binding);
     api->glDeleteTexturesFn(1, &service_id);
-    return false;
+    return nullptr;
   }
 
   // Create a gles2 Texture.
-  texture_ = new gles2::Texture(service_id);
-  texture_->SetLightweightRef();
-  texture_->SetTarget(target, 1);
-  texture_->sampler_state_.min_filter = GL_LINEAR;
-  texture_->sampler_state_.mag_filter = GL_LINEAR;
-  texture_->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE;
-  texture_->sampler_state_.wrap_s = GL_CLAMP_TO_EDGE;
+  auto* texture = new gles2::Texture(service_id);
+  texture->SetLightweightRef();
+  texture->SetTarget(target, 1);
+  texture->sampler_state_.min_filter = GL_LINEAR;
+  texture->sampler_state_.mag_filter = GL_LINEAR;
+  texture->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE;
+  texture->sampler_state_.wrap_s = GL_CLAMP_TO_EDGE;
 
   // If the backing is already cleared, no need to clear it again.
   gfx::Rect cleared_rect;
@@ -640,14 +649,14 @@
 
   GLenum gl_format = viz::GLDataFormat(format());
   GLenum gl_type = viz::GLDataType(format());
-  texture_->SetLevelInfo(target, 0, egl_image->GetInternalFormat(),
-                         size().width(), size().height(), 1, 0, gl_format,
-                         gl_type, cleared_rect);
-  texture_->SetLevelImage(target, 0, egl_image.get(), gles2::Texture::BOUND);
-  texture_->SetImmutable(true);
+  texture->SetLevelInfo(target, 0, egl_image->GetInternalFormat(),
+                        size().width(), size().height(), 1, 0, gl_format,
+                        gl_type, cleared_rect);
+  texture->SetLevelImage(target, 0, egl_image.get(), gles2::Texture::BOUND);
+  texture->SetImmutable(true);
   api->glBindTextureFn(target, old_texture_binding);
   DCHECK_EQ(egl_image->GetInternalFormat(), gl_format);
-  return true;
+  return texture;
 }
 
 SharedImageBackingFactoryAHB::SharedImageBackingFactoryAHB(
diff --git a/gpu/command_buffer/service/shared_image_manager.cc b/gpu/command_buffer/service/shared_image_manager.cc
index d9abf9b..2739109 100644
--- a/gpu/command_buffer/service/shared_image_manager.cc
+++ b/gpu/command_buffer/service/shared_image_manager.cc
@@ -43,7 +43,7 @@
                              MemoryTypeTracker* tracker) {
   DCHECK(backing->mailbox().IsSharedImage());
   if (images_.find(backing->mailbox()) != images_.end()) {
-    LOG(ERROR) << "ShraedImageManager::Register: Trying to register an "
+    LOG(ERROR) << "SharedImageManager::Register: Trying to register an "
                   "already registered mailbox.";
     backing->Destroy();
     return nullptr;
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h
index 9f58a8f..a1c5e550 100644
--- a/gpu/command_buffer/service/shared_image_representation.h
+++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -43,15 +43,20 @@
 
   // Indicates that the underlying graphics context has been lost, and the
   // backing should be treated as destroyed.
-  void OnContextLost() { backing_->OnContextLost(); }
+  void OnContextLost() {
+    has_context_ = false;
+    backing_->OnContextLost();
+  }
 
  protected:
   SharedImageBacking* backing() const { return backing_; }
+  bool has_context() const { return has_context_; }
 
  private:
   SharedImageManager* manager_;
   SharedImageBacking* backing_;
   MemoryTypeTracker* tracker_;
+  bool has_context_ = true;
 };
 
 class SharedImageRepresentationFactoryRef : public SharedImageRepresentation {
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
index fe981ad..cc6d2185 100644
--- a/gpu/command_buffer/service/texture_manager.h
+++ b/gpu/command_buffer/service/texture_manager.h
@@ -39,6 +39,8 @@
 class SharedImageBackingFactoryGLTexture;
 class SharedImageBackingAHB;
 class SharedImageRepresentationGLTexture;
+class SharedImageRepresentationGLTextureAHB;
+class SharedImageRepresentationSkiaGLAHB;
 
 namespace gles2 {
 class GLStreamTextureImage;
@@ -367,6 +369,8 @@
   friend class gpu::SharedImageBackingGLTexture;
   friend class gpu::SharedImageBackingFactoryGLTexture;
   friend class gpu::SharedImageBackingAHB;
+  friend class gpu::SharedImageRepresentationGLTextureAHB;
+  friend class gpu::SharedImageRepresentationSkiaGLAHB;
   friend class TextureDefinition;
   friend class TextureManager;
   friend class TextureRef;
diff --git a/headless/lib/headless_browser_context_browsertest.cc b/headless/lib/headless_browser_context_browsertest.cc
index 176a83f..6509a64 100644
--- a/headless/lib/headless_browser_context_browsertest.cc
+++ b/headless/lib/headless_browser_context_browsertest.cc
@@ -147,7 +147,8 @@
   std::unique_ptr<LoadObserver> load_observer_;
 };
 
-HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessBrowserContextIsolationTest);
+// TODO(https://crbug.com/930356): Re-enable test.
+DISABLED_HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessBrowserContextIsolationTest);
 
 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, UserDataDir) {
   // We do not want to bother with posting tasks to create a temp dir.
diff --git a/ios/build/bots/chromium.mac/ios-slimnav.json b/ios/build/bots/chromium.mac/ios-slimnav.json
index a3913f8..94827d46 100644
--- a/ios/build/bots/chromium.mac/ios-slimnav.json
+++ b/ios/build/bots/chromium.mac/ios-slimnav.json
@@ -17,7 +17,7 @@
     {
       "include": "screen_size_dependent_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s Plus",
       "os": "12.1",
@@ -28,7 +28,7 @@
     {
       "include": "screen_size_dependent_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s",
       "os": "12.1",
@@ -39,7 +39,7 @@
     {
       "include": "common_tests.json",
             "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s",
       "os": "12.1",
@@ -50,7 +50,7 @@
     {
       "include": "screen_size_dependent_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "12.1",
@@ -61,7 +61,7 @@
     {
       "include": "screen_size_dependent_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s Plus",
       "os": "11.4",
@@ -72,7 +72,7 @@
     {
       "include": "screen_size_dependent_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s",
       "os": "11.4",
@@ -83,7 +83,7 @@
     {
       "include": "common_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s",
       "os": "11.4",
@@ -94,7 +94,7 @@
     {
       "include": "screen_size_dependent_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -105,7 +105,7 @@
     {
       "include": "eg_cq_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone 6s",
       "os": "11.4",
@@ -116,7 +116,7 @@
     {
       "app": "ios_chrome_bookmarks_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -129,8 +129,7 @@
     {
       "app": "ios_chrome_manual_fill_egtests",
       "test args": [
-        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging",
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -142,7 +141,7 @@
     {
       "app": "ios_chrome_web_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -154,7 +153,7 @@
     {
       "app": "ios_chrome_settings_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -166,7 +165,7 @@
     {
       "app": "ios_chrome_reading_list_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -178,7 +177,7 @@
     {
       "app": "ios_showcase_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "11.4",
@@ -190,7 +189,7 @@
     {
       "app": "ios_chrome_bookmarks_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "shard size": 2,
       "device type": "iPad Air 2",
@@ -203,8 +202,7 @@
     {
       "app": "ios_chrome_manual_fill_egtests",
       "test args": [
-        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging",
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager"
       ],
       "xctest": true,
       "device type": "iPad Air 2",
@@ -216,7 +214,7 @@
     {
       "app": "ios_chrome_web_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "12.1",
@@ -228,7 +226,7 @@
     {
       "app": "ios_chrome_settings_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "12.1",
@@ -240,7 +238,7 @@
     {
       "app": "ios_chrome_reading_list_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "12.1",
@@ -252,7 +250,7 @@
     {
       "app": "ios_showcase_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPad Air 2",
       "os": "12.1",
@@ -264,7 +262,7 @@
     {
       "app": "ios_chrome_bookmarks_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "11.4",
@@ -277,8 +275,7 @@
     {
       "app": "ios_chrome_manual_fill_egtests",
       "test args": [
-        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging",
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager"
       ],
       "xctest": true,
       "device type": "iPhone X",
@@ -290,7 +287,7 @@
     {
       "app": "ios_chrome_web_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "11.4",
@@ -302,7 +299,7 @@
     {
       "app": "ios_chrome_settings_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "11.4",
@@ -314,7 +311,7 @@
     {
       "app": "ios_chrome_reading_list_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "11.4",
@@ -326,7 +323,7 @@
     {
       "app": "ios_showcase_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "11.4",
@@ -338,7 +335,7 @@
     {
       "app": "ios_chrome_bookmarks_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "shard size": 2,
       "device type": "iPhone X",
@@ -351,8 +348,7 @@
     {
       "app": "ios_chrome_manual_fill_egtests",
       "test args": [
-        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging",
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "12.1",
@@ -364,7 +360,7 @@
     {
       "app": "ios_chrome_web_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "12.1",
@@ -376,7 +372,7 @@
     {
       "app": "ios_chrome_settings_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "12.1",
@@ -388,7 +384,7 @@
     {
       "app": "ios_chrome_reading_list_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "12.1",
@@ -400,7 +396,7 @@
     {
       "app": "ios_showcase_egtests",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "12.1",
@@ -412,7 +408,7 @@
     {
       "include": "eg_cq_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "11.4",
@@ -423,7 +419,7 @@
     {
       "include": "eg_cq_tests.json",
       "test args": [
-        "--disable-features=SlimNavigationManager"
+        "--enable-features=SlimNavigationManager"
       ],
       "device type": "iPhone X",
       "os": "12.1",
diff --git a/ios/chrome/browser/autofill/form_input_accessory_consumer.h b/ios/chrome/browser/autofill/form_input_accessory_consumer.h
index 4264e64..c3b3d37 100644
--- a/ios/chrome/browser/autofill/form_input_accessory_consumer.h
+++ b/ios/chrome/browser/autofill/form_input_accessory_consumer.h
@@ -35,10 +35,13 @@
 // Removes the animations on the custom keyboard view.
 - (void)removeAnimationsOnKeyboardView;
 
-// Removes the presented keyboard view and the input accessory view. Also clears
-// the references to them, so nothing shows until a new custom view is passed.
+// Removes the presented keyboard view and the input accessory view.
 - (void)restoreOriginalKeyboardView;
 
+// Same as |restoreOriginalKeyboardView| and also clears the references to them,
+// so nothing shows until a new custom view is passed.
+- (void)restoreOriginalKeyboardViewAndClearReferences;
+
 // Removes the presented keyboard view and the input accessory view until
 // |continueCustomKeyboardView| is called.
 - (void)pauseCustomKeyboardView;
diff --git a/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm b/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
index 46f54ef..40864d99 100644
--- a/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
+++ b/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
@@ -219,6 +219,12 @@
   self.keyboardReplacementView = nil;
 }
 
+// TODO:(crbug.com/923857) Merge this method and restoreOriginalKeyboardView.
+- (void)restoreOriginalKeyboardViewAndClearReferences {
+  [self restoreOriginalKeyboardView];
+  self.inputAccessoryView = nil;
+}
+
 - (void)pauseCustomKeyboardView {
   [self removeCustomInputAccessoryView];
   [self.keyboardReplacementView removeFromSuperview];
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
index 1ecc4128..63142f4 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
@@ -13,6 +13,7 @@
 #include "components/keyed_service/core/service_access_type.h"
 #import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h"
 #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
 #import "ios/chrome/browser/ui/autofill/form_input_accessory_mediator.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.h"
@@ -77,8 +78,12 @@
 
     auto passwordStore = IOSChromePasswordStoreFactory::GetForBrowserState(
         browserState, ServiceAccessType::EXPLICIT_ACCESS);
+
+    // There is no personal data manager in OTR (incognito). Get the original
+    // one for manual fallback.
     autofill::PersonalDataManager* personalDataManager =
-        autofill::PersonalDataManagerFactory::GetForBrowserState(browserState);
+        autofill::PersonalDataManagerFactory::GetForBrowserState(
+            browserState->GetOriginalChromeBrowserState());
 
     _formInputAccessoryMediator = [[FormInputAccessoryMediator alloc]
            initWithConsumer:self.formInputAccessoryViewController
@@ -125,6 +130,7 @@
   CardCoordinator* cardCoordinator = [[CardCoordinator alloc]
       initWithBaseViewController:self.baseViewController
                     browserState:self.browserState
+                                     ->GetOriginalChromeBrowserState()
                     webStateList:self.webStateList
                 injectionHandler:self.manualFillInjectionHandler];
   cardCoordinator.delegate = self;
@@ -142,6 +148,7 @@
   AddressCoordinator* addressCoordinator = [[AddressCoordinator alloc]
       initWithBaseViewController:self.baseViewController
                     browserState:self.browserState
+                                     ->GetOriginalChromeBrowserState()
                 injectionHandler:self.manualFillInjectionHandler];
   addressCoordinator.delegate = self;
   if (IsIPadIdiom()) {
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm
index cbeca5e7..b55c41f 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm
@@ -180,8 +180,6 @@
         [[PasswordFetcher alloc] initWithPasswordStore:passwordStore
                                               delegate:self];
   }
-  // There is no personal data manager in OTR (incognito).
-  // TODO:(crbug.com/905720) Support Incognito.
   if (personalDataManager) {
     _personalDataManager = personalDataManager;
     _personalDataManagerObserver.reset(
@@ -341,6 +339,7 @@
   // element gets the focus. On iPad the keyboard stays dismissed.
   if (IsIPadIdiom()) {
     [self reset];
+    [self.consumer restoreOriginalKeyboardViewAndClearReferences];
   } else {
     [self pauseCustomKeyboardView];
   }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
index 50f50ab..cb599133 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
@@ -24,6 +24,7 @@
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
 #include "ios/web/public/features.h"
@@ -490,6 +491,12 @@
 
   UndockKeyboard();
 
+  // Verify the profiles icon is visible. EarlGrey synchronization isn't working
+  // properly with the keyboard, instead this waits with a condition for the
+  // icon to appear.
+  [self waitForMatcherToBeVisible:ProfilesIconMatcher()
+                          timeout:base::test::ios::kWaitForUIElementTimeout];
+
   // Tap on the profiles icon.
   [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()]
       performAction:grey_tap()];
@@ -545,9 +552,11 @@
 
   UndockKeyboard();
 
-  // Verify the profiles icon.
-  [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()]
-      assertWithMatcher:grey_sufficientlyVisible()];
+  // Verify the profiles icon is visible. EarlGrey synchronization isn't working
+  // properly with the keyboard, instead this waits with a condition for the
+  // icon to appear.
+  [self waitForMatcherToBeVisible:ProfilesIconMatcher()
+                          timeout:base::test::ios::kWaitForUIElementTimeout];
 
   DockKeyboard();
 
@@ -557,4 +566,91 @@
       assertWithMatcher:grey_sufficientlyVisible()];
 }
 
+// Tests that the manual fallback view is present in incognito.
+- (void)testIncognitoManualFallbackMenu {
+  // Add the profile to use for verification.
+  AddAutofillProfile(_personalDataManager);
+
+  // Bring up the keyboard by tapping the city, which is the element before the
+  // picker.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElement(kFormElementCity)];
+
+  // Verify the profiles icon is visible.
+  [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+
+  // Open a tab in incognito.
+  [ChromeEarlGrey openNewIncognitoTab];
+  [ChromeEarlGreyUI focusOmnibox];  // To simulate a user navigating.
+  const GURL URL = self.testServer->GetURL(kFormHTMLFile);
+  [ChromeEarlGrey loadURL:URL];
+  [ChromeEarlGrey waitForWebViewContainingText:"Profile form"];
+
+  // Bring up the keyboard by tapping the city, which is the element before the
+  // picker.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElement(kFormElementCity)];
+
+  // Verify the profiles icon is visible.
+  [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Tests that the manual fallback view is not duplicated after incognito.
+- (void)testReturningFromIncognitoDoesNotDuplicatesManualFallbackMenu {
+  // Add the profile to use for verification.
+  AddAutofillProfile(_personalDataManager);
+
+  // Bring up the keyboard by tapping the city, which is the element before the
+  // picker.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElement(kFormElementCity)];
+
+  // Verify the profiles icon is visible.
+  [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+
+  // Open a tab in incognito.
+  [ChromeEarlGrey openNewIncognitoTab];
+  [ChromeEarlGreyUI focusOmnibox];  // To simulate a user navigating.
+  const GURL URL = self.testServer->GetURL(kFormHTMLFile);
+  [ChromeEarlGrey loadURL:URL];
+  [ChromeEarlGrey waitForWebViewContainingText:"Profile form"];
+
+  // Bring up the keyboard by tapping the city, which is the element before the
+  // picker.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElement(kFormElementCity)];
+
+  // Open a  regular tab.
+  [ChromeEarlGrey openNewTab];
+  [ChromeEarlGrey loadURL:URL];
+  [ChromeEarlGrey waitForWebViewContainingText:"Profile form"];
+
+  // Bring up the keyboard by tapping the city, which is the element before the
+  // picker.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
+      performAction:chrome_test_util::TapWebElement(kFormElementCity)];
+
+  // This will fail if there is more than one profiles icon in the hierarchy.
+  [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+#pragma mark - Utilities
+
+// Waits for the passed matcher to be visible with a given timeout.
+- (void)waitForMatcherToBeVisible:(id<GREYMatcher>)matcher
+                          timeout:(CFTimeInterval)timeout {
+  [[GREYCondition conditionWithName:@"Wait for visible matcher condition"
+                              block:^BOOL {
+                                NSError* error;
+                                [[EarlGrey selectElementWithMatcher:matcher]
+                                    assertWithMatcher:grey_sufficientlyVisible()
+                                                error:&error];
+                                return error == nil;
+                              }] waitWithTimeout:timeout];
+}
+
 @end
diff --git a/ios/chrome/browser/ui/main/browser_coordinator.mm b/ios/chrome/browser/ui/main/browser_coordinator.mm
index 238ba0c5..5a05a60 100644
--- a/ios/chrome/browser/ui/main/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/main/browser_coordinator.mm
@@ -248,17 +248,12 @@
     [self.ARQuickLookCoordinator start];
   }
 
-  // TODO(crbug.com/923857): add manual fallback to incognito mode.  Right now
-  // two formInputAccessoryViews are (lazy) created for normal and incognito,
-  // and the incognito remains on top when going back to normal.
-  if (!self.browserState->IsOffTheRecord()) {
-    self.formInputAccessoryCoordinator = [[FormInputAccessoryCoordinator alloc]
-        initWithBaseViewController:self.viewController
-                      browserState:self.browserState
-                      webStateList:self.tabModel.webStateList];
-    self.formInputAccessoryCoordinator.delegate = self;
-    [self.formInputAccessoryCoordinator start];
-  }
+  self.formInputAccessoryCoordinator = [[FormInputAccessoryCoordinator alloc]
+      initWithBaseViewController:self.viewController
+                    browserState:self.browserState
+                    webStateList:self.tabModel.webStateList];
+  self.formInputAccessoryCoordinator.delegate = self;
+  [self.formInputAccessoryCoordinator start];
 
   if (base::FeatureList::IsEnabled(translate::kCompactTranslateInfobarIOS)) {
     self.translateInfobarCoordinator = [[TranslateInfobarCoordinator alloc]
diff --git a/ios/web/features.mm b/ios/web/features.mm
index 29fe7cac..8c9e0223 100644
--- a/ios/web/features.mm
+++ b/ios/web/features.mm
@@ -14,7 +14,7 @@
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kSlimNavigationManager{"SlimNavigationManager",
-                                           base::FEATURE_ENABLED_BY_DEFAULT};
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kWKHTTPSystemCookieStore{"WKHTTPSystemCookieStore",
                                              base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ipc/ipc_logging.cc b/ipc/ipc_logging.cc
index aad1b73..73bef08e 100644
--- a/ipc/ipc_logging.cc
+++ b/ipc/ipc_logging.cc
@@ -178,7 +178,7 @@
   if (it == log_function_map_->end()) {
     if (name) {
       *name = "[UNKNOWN MSG ";
-      *name += base::IntToString(type);
+      *name += base::NumberToString(type);
       *name += " ]";
     }
     return;
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
index 0f6f54f80..ec04c77 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -301,7 +301,7 @@
 }
 
 void ParamTraits<signed char>::Log(const param_type& p, std::string* l) {
-  l->append(base::IntToString(p));
+  l->append(base::NumberToString(p));
 }
 
 void ParamTraits<unsigned char>::Write(base::Pickle* m, const param_type& p) {
@@ -319,7 +319,7 @@
 }
 
 void ParamTraits<unsigned char>::Log(const param_type& p, std::string* l) {
-  l->append(base::UintToString(p));
+  l->append(base::NumberToString(p));
 }
 
 void ParamTraits<unsigned short>::Write(base::Pickle* m, const param_type& p) {
diff --git a/media/base/media_log.cc b/media/base/media_log.cc
index fd4c41b8..21eac6c4 100644
--- a/media/base/media_log.cc
+++ b/media/base/media_log.cc
@@ -264,10 +264,16 @@
     MediaLogEvent::Type type,
     const std::string& property,
     base::TimeDelta value) {
+  return CreateTimeEvent(type, property, value.InSecondsF());
+}
+
+std::unique_ptr<MediaLogEvent> MediaLog::CreateTimeEvent(
+    MediaLogEvent::Type type,
+    const std::string& property,
+    double value) {
   std::unique_ptr<MediaLogEvent> event(CreateEvent(type));
-  double value_in_seconds = value.InSecondsF();
-  if (std::isfinite(value_in_seconds))
-    event->params.SetDouble(property, value_in_seconds);
+  if (std::isfinite(value))
+    event->params.SetDouble(property, value);
   else
     event->params.SetString(property, "unknown");
   return event;
@@ -280,12 +286,6 @@
   return event;
 }
 
-std::unique_ptr<MediaLogEvent> MediaLog::CreateSeekEvent(double seconds) {
-  std::unique_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::SEEK));
-  event->params.SetDouble("seek_target", seconds);
-  return event;
-}
-
 std::unique_ptr<MediaLogEvent> MediaLog::CreatePipelineStateChangedEvent(
     PipelineImpl::State state) {
   std::unique_ptr<MediaLogEvent> event(
diff --git a/media/base/media_log.h b/media/base/media_log.h
index 164b6e94..937991a8 100644
--- a/media/base/media_log.h
+++ b/media/base/media_log.h
@@ -109,8 +109,10 @@
   std::unique_ptr<MediaLogEvent> CreateTimeEvent(MediaLogEvent::Type type,
                                                  const std::string& property,
                                                  base::TimeDelta value);
+  std::unique_ptr<MediaLogEvent> CreateTimeEvent(MediaLogEvent::Type type,
+                                                 const std::string& property,
+                                                 double value);
   std::unique_ptr<MediaLogEvent> CreateLoadEvent(const std::string& url);
-  std::unique_ptr<MediaLogEvent> CreateSeekEvent(double seconds);
   std::unique_ptr<MediaLogEvent> CreatePipelineStateChangedEvent(
       PipelineImpl::State state);
   std::unique_ptr<MediaLogEvent> CreatePipelineErrorEvent(PipelineStatus error);
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 71a93d0..489aeeb 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -318,6 +318,10 @@
 const base::Feature kVaapiVP8Encoder{"VaapiVP8Encoder",
                                      base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Enable VA-API hardware encode acceleration for VP9.
+const base::Feature kVaapiVP9Encoder{"VaapiVP9Encoder",
+                                     base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Inform video blitter of video color space.
 const base::Feature kVideoBlitColorAccuracy{"video-blit-color-accuracy",
                                             base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index f5cc12b0..493ba61 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -139,6 +139,7 @@
 MEDIA_EXPORT extern const base::Feature kUseSurfaceLayerForVideo;
 MEDIA_EXPORT extern const base::Feature kUseSurfaceLayerForVideoPIP;
 MEDIA_EXPORT extern const base::Feature kVaapiVP8Encoder;
+MEDIA_EXPORT extern const base::Feature kVaapiVP9Encoder;
 MEDIA_EXPORT extern const base::Feature kVideoBlitColorAccuracy;
 
 #if defined(OS_ANDROID)
diff --git a/media/blink/webmediaplayer_delegate.h b/media/blink/webmediaplayer_delegate.h
index c3f9c0d7..af33ac9 100644
--- a/media/blink/webmediaplayer_delegate.h
+++ b/media/blink/webmediaplayer_delegate.h
@@ -16,6 +16,10 @@
 class Size;
 }  // namespace gfx
 
+namespace viz {
+class SurfaceId;
+}  // namespace viz
+
 namespace media {
 
 enum class MediaContentType;
@@ -114,12 +118,38 @@
   // Notify that the muted status of the media player has changed.
   virtual void DidPlayerMutedStatusChange(int delegate_id, bool muted) = 0;
 
+  // Notify that the source media player has entered Picture-in-Picture mode.
+  virtual void DidPictureInPictureModeStart(
+      int delegate_id,
+      const viz::SurfaceId&,
+      const gfx::Size&,
+      blink::WebMediaPlayer::PipWindowOpenedCallback,
+      bool show_play_pause_button) = 0;
+
+  // Notify that the source media player has exited Picture-in-Picture mode.
+  virtual void DidPictureInPictureModeEnd(int delegate_id,
+                                          base::OnceClosure) = 0;
+
   // Notify that custom controls have been sent to be assigned to the
   // Picture-in-Picture window.
   virtual void DidSetPictureInPictureCustomControls(
       int delegate_id,
       const std::vector<blink::PictureInPictureControlInfo>&) = 0;
 
+  // Notify that the media player in Picture-in-Picture had a change of surface.
+  virtual void DidPictureInPictureSurfaceChange(
+      int delegate_id,
+      const viz::SurfaceId&,
+      const gfx::Size&,
+      bool show_play_pause_button) = 0;
+
+  // Registers a callback associated with a player that will be called when
+  // receiving a notification from the browser process that the
+  // Picture-in-Picture associated to this player has been resized.
+  virtual void RegisterPictureInPictureWindowResizeCallback(
+      int player_id,
+      blink::WebMediaPlayer::PipWindowResizedCallback) = 0;
+
   // Notify that playback is stopped. This will drop wake locks and remove any
   // external controls.
   //
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index e903282..6e9d472 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -517,8 +517,11 @@
   // disabled.
   // The viz::SurfaceId may be updated when the video begins playback or when
   // the size of the video changes.
-  if (client_)
-    client_->OnPictureInPictureStateChange();
+  if (client_ && IsInPictureInPicture() && !client_->IsInAutoPIP()) {
+    delegate_->DidPictureInPictureSurfaceChange(
+        delegate_id_, surface_id, pipeline_metadata_.natural_size,
+        ShouldShowPlayPauseButtonInPictureInPictureWindow());
+  }
 }
 
 bool WebMediaPlayerImpl::SupportsOverlayFullscreenVideo() {
@@ -808,7 +811,8 @@
 void WebMediaPlayerImpl::Seek(double seconds) {
   DVLOG(1) << __func__ << "(" << seconds << "s)";
   DCHECK(main_task_runner_->BelongsToCurrentThread());
-  media_log_->AddEvent(media_log_->CreateSeekEvent(seconds));
+  media_log_->AddEvent(
+      media_log_->CreateTimeEvent(MediaLogEvent::SEEK, "seek_target", seconds));
   DoSeek(base::TimeDelta::FromSecondsD(seconds), true);
 }
 
@@ -901,17 +905,30 @@
   UpdatePlayState();
 }
 
-void WebMediaPlayerImpl::EnterPictureInPicture() {
+void WebMediaPlayerImpl::EnterPictureInPicture(
+    blink::WebMediaPlayer::PipWindowOpenedCallback callback) {
   if (!surface_layer_for_video_enabled_)
     ActivateSurfaceLayerForVideo();
 
   DCHECK(bridge_);
-  DCHECK(bridge_->GetSurfaceId().is_valid());
+
+  const viz::SurfaceId& surface_id = bridge_->GetSurfaceId();
+  DCHECK(surface_id.is_valid());
+
+  // Notifies the browser process that the player should now be in
+  // Picture-in-Picture mode.
+  delegate_->DidPictureInPictureModeStart(
+      delegate_id_, surface_id, pipeline_metadata_.natural_size,
+      std::move(callback), ShouldShowPlayPauseButtonInPictureInPictureWindow());
 }
 
-void WebMediaPlayerImpl::ExitPictureInPicture() {
+void WebMediaPlayerImpl::ExitPictureInPicture(
+    blink::WebMediaPlayer::PipWindowClosedCallback callback) {
+  // Notifies the browser process that Picture-in-Picture has ended. It will
+  // clear out the states and close the window.
+  delegate_->DidPictureInPictureModeEnd(delegate_id_, std::move(callback));
+
   // Internal cleanups.
-  // TODO(mlamouri): remove the need for this.
   OnPictureInPictureModeEnded();
 }
 
@@ -920,6 +937,14 @@
   delegate_->DidSetPictureInPictureCustomControls(delegate_id_, controls);
 }
 
+void WebMediaPlayerImpl::RegisterPictureInPictureWindowResizeCallback(
+    blink::WebMediaPlayer::PipWindowResizedCallback callback) {
+  DCHECK(IsInPictureInPicture() && !client_->IsInAutoPIP());
+
+  delegate_->RegisterPictureInPictureWindowResizeCallback(delegate_id_,
+                                                          std::move(callback));
+}
+
 void WebMediaPlayerImpl::SetSinkId(
     const blink::WebString& sink_id,
     std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) {
@@ -3120,16 +3145,6 @@
   return opaque_;
 }
 
-int WebMediaPlayerImpl::GetDelegateId() {
-  return delegate_id_;
-}
-
-base::Optional<viz::SurfaceId> WebMediaPlayerImpl::GetSurfaceId() {
-  if (!surface_layer_for_video_enabled_)
-    return base::nullopt;
-  return bridge_->GetSurfaceId();
-}
-
 bool WebMediaPlayerImpl::ShouldPauseVideoWhenHidden() const {
   if (!is_background_video_playback_enabled_)
     return true;
@@ -3434,6 +3449,11 @@
          WebMediaPlayer::DisplayType::kPictureInPicture;
 }
 
+bool WebMediaPlayerImpl::ShouldShowPlayPauseButtonInPictureInPictureWindow()
+    const {
+  return Duration() != std::numeric_limits<double>::infinity();
+}
+
 void WebMediaPlayerImpl::MaybeSetContainerName() {
   // MSE nor MediaPlayerRenderer provide container information.
   if (chunk_demuxer_ || using_media_player_renderer_)
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index 7183daa..2030aee 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -120,10 +120,14 @@
   void Seek(double seconds) override;
   void SetRate(double rate) override;
   void SetVolume(double volume) override;
-  void EnterPictureInPicture() override;
-  void ExitPictureInPicture() override;
+  void EnterPictureInPicture(
+      blink::WebMediaPlayer::PipWindowOpenedCallback callback) override;
+  void ExitPictureInPicture(
+      blink::WebMediaPlayer::PipWindowClosedCallback callback) override;
   void SetPictureInPictureCustomControls(
       const std::vector<blink::PictureInPictureControlInfo>&) override;
+  void RegisterPictureInPictureWindowResizeCallback(
+      blink::WebMediaPlayer::PipWindowResizedCallback callback) override;
   void SetSinkId(
       const blink::WebString& sink_id,
       std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) override;
@@ -260,11 +264,10 @@
   // paused; see UpdatePlayState_ComputePlayState() for the exact details.
   void ForceStaleStateForTesting(ReadyState target_state) override;
   bool IsSuspendedForTesting() override;
+
   bool DidLazyLoad() const override;
   void OnBecameVisible() override;
   bool IsOpaque() const override;
-  int GetDelegateId() override;
-  base::Optional<viz::SurfaceId> GetSurfaceId() override;
 
   bool IsBackgroundMediaSuspendEnabled() const {
     return is_background_suspend_enabled_;
@@ -575,6 +578,11 @@
 
   void SendBytesReceivedUpdate();
 
+  // Returns whether the Picture-in-Picture window should contain a play/pause
+  // button. It will return false if video is "live", in other words if duration
+  // is equals to Infinity.
+  bool ShouldShowPlayPauseButtonInPictureInPictureWindow() const;
+
   blink::WebLocalFrame* const frame_;
 
   // The playback state last reported to |delegate_|, to avoid setting duplicate
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index 33f932eb..ddc23ba 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -148,9 +148,9 @@
   MOCK_METHOD1(ActivateViewportIntersectionMonitoring, void(bool));
   MOCK_METHOD1(MediaRemotingStarted, void(const blink::WebString&));
   MOCK_METHOD1(MediaRemotingStopped, void(blink::WebLocalizedString::Name));
+  MOCK_METHOD0(PictureInPictureStarted, void());
   MOCK_METHOD0(PictureInPictureStopped, void());
   MOCK_METHOD1(PictureInPictureControlClicked, void(const blink::WebString&));
-  MOCK_METHOD0(OnPictureInPictureStateChange, void());
   MOCK_CONST_METHOD0(CouldPlayIfEnoughData, bool());
   MOCK_METHOD0(RequestPlay, void());
   MOCK_METHOD0(RequestPause, void());
@@ -215,9 +215,21 @@
     DCHECK_EQ(player_id_, delegate_id);
   }
 
+  MOCK_METHOD5(DidPictureInPictureModeStart,
+               void(int,
+                    const viz::SurfaceId&,
+                    const gfx::Size&,
+                    blink::WebMediaPlayer::PipWindowOpenedCallback,
+                    bool));
+  MOCK_METHOD2(DidPictureInPictureModeEnd,
+               void(int, blink::WebMediaPlayer::PipWindowClosedCallback));
   MOCK_METHOD2(DidSetPictureInPictureCustomControls,
                void(int,
                     const std::vector<blink::PictureInPictureControlInfo>&));
+  MOCK_METHOD4(DidPictureInPictureSurfaceChange,
+               void(int, const viz::SurfaceId&, const gfx::Size&, bool));
+  MOCK_METHOD2(RegisterPictureInPictureWindowResizeCallback,
+               void(int, blink::WebMediaPlayer::PipWindowResizedCallback));
 
   void ClearStaleFlag(int player_id) override {
     DCHECK_EQ(player_id_, player_id);
@@ -1554,8 +1566,8 @@
   }
 }
 
-// Tests that updating the surface id calls OnPictureInPictureStateChange.
-TEST_F(WebMediaPlayerImplTest, PictureInPictureStateChange) {
+// Tests delegate methods are called when Picture-in-Picture is triggered.
+TEST_F(WebMediaPlayerImplTest, PictureInPictureTriggerCallback) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitFromCommandLine(kUseSurfaceLayerForVideo.name, "");
 
@@ -1576,10 +1588,68 @@
   EXPECT_CALL(client_, DisplayType())
       .WillRepeatedly(
           Return(blink::WebMediaPlayer::DisplayType::kPictureInPicture));
-  EXPECT_CALL(client_, OnPictureInPictureStateChange()).Times(1);
+  EXPECT_CALL(delegate_,
+              DidPictureInPictureSurfaceChange(
+                  delegate_.player_id(), surface_id_, GetNaturalSize(), true))
+      .Times(2);
 
   wmpi_->OnSurfaceIdUpdated(surface_id_);
 
+  EXPECT_CALL(delegate_,
+              DidPictureInPictureModeStart(delegate_.player_id(), surface_id_,
+                                           GetNaturalSize(), _, true));
+
+  wmpi_->EnterPictureInPicture(base::DoNothing());
+  wmpi_->OnSurfaceIdUpdated(surface_id_);
+
+  // Updating SurfaceId should NOT exit Picture-in-Picture.
+  EXPECT_CALL(delegate_, DidPictureInPictureModeEnd(delegate_.player_id(), _))
+      .Times(0);
+  EXPECT_CALL(*surface_layer_bridge_ptr_, ClearObserver());
+}
+
+// Tests delegate methods are called with the appropriate play/pause button
+// state when Picture-in-Picture is triggered and video duration is infinity.
+TEST_F(WebMediaPlayerImplTest,
+       PictureInPictureTriggerWithInfiniteDurationCallback) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitFromCommandLine(kUseSurfaceLayerForVideo.name, "");
+
+  InitializeWebMediaPlayerImpl();
+  SetDuration(kInfiniteDuration);
+
+  EXPECT_CALL(*surface_layer_bridge_ptr_, CreateSurfaceLayer());
+  EXPECT_CALL(*surface_layer_bridge_ptr_, GetSurfaceId())
+      .WillRepeatedly(ReturnRef(surface_id_));
+  EXPECT_CALL(*surface_layer_bridge_ptr_, GetLocalSurfaceIdAllocationTime())
+      .WillRepeatedly(Return(base::TimeTicks()));
+  EXPECT_CALL(*compositor_, EnableSubmission(_, _, _, _));
+  EXPECT_CALL(*surface_layer_bridge_ptr_, SetContentsOpaque(false));
+
+  PipelineMetadata metadata;
+  metadata.has_video = true;
+  OnMetadata(metadata);
+
+  EXPECT_CALL(client_, DisplayType())
+      .WillRepeatedly(
+          Return(blink::WebMediaPlayer::DisplayType::kPictureInPicture));
+  EXPECT_CALL(delegate_,
+              DidPictureInPictureSurfaceChange(
+                  delegate_.player_id(), surface_id_, GetNaturalSize(), false))
+      .Times(2);
+
+  wmpi_->OnSurfaceIdUpdated(surface_id_);
+
+  EXPECT_CALL(delegate_,
+              DidPictureInPictureModeStart(delegate_.player_id(), surface_id_,
+                                           GetNaturalSize(), _, false));
+
+  wmpi_->EnterPictureInPicture(base::DoNothing());
+  wmpi_->OnSurfaceIdUpdated(surface_id_);
+
+  // Updating SurfaceId should NOT exit Picture-in-Picture.
+  EXPECT_CALL(delegate_, DidPictureInPictureModeEnd(delegate_.player_id(), _))
+      .Times(0);
   EXPECT_CALL(*surface_layer_bridge_ptr_, ClearObserver());
 }
 
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
index c2643c8a..136b28c 100644
--- a/media/gpu/BUILD.gn
+++ b/media/gpu/BUILD.gn
@@ -345,6 +345,8 @@
       "vp8_picture.h",
       "vp8_reference_frame_vector.cc",
       "vp8_reference_frame_vector.h",
+      "vp9_reference_frame_vector.cc",
+      "vp9_reference_frame_vector.h",
     ]
   }
 
diff --git a/media/gpu/vaapi/BUILD.gn b/media/gpu/vaapi/BUILD.gn
index 9d5f96bb..6f419a6 100644
--- a/media/gpu/vaapi/BUILD.gn
+++ b/media/gpu/vaapi/BUILD.gn
@@ -65,6 +65,8 @@
     "vaapi_wrapper.h",
     "vp8_encoder.cc",
     "vp8_encoder.h",
+    "vp9_encoder.cc",
+    "vp9_encoder.h",
   ]
 
   configs += [ "//third_party/libyuv:libyuv_config" ]
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
index eea55c6..eb8c68de 100644
--- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -37,7 +37,9 @@
 #include "media/gpu/vaapi/vaapi_common.h"
 #include "media/gpu/vaapi/vaapi_picture_factory.h"
 #include "media/gpu/vaapi/vp8_encoder.h"
+#include "media/gpu/vaapi/vp9_encoder.h"
 #include "media/gpu/vp8_reference_frame_vector.h"
+#include "media/gpu/vp9_reference_frame_vector.h"
 
 #if defined(OS_POSIX)
 #include "media/gpu/vaapi/vaapi_picture_native_pixmap.h"
@@ -194,6 +196,27 @@
   VaapiVideoEncodeAccelerator* const vea_;
 };
 
+class VaapiVideoEncodeAccelerator::VP9Accelerator
+    : public VP9Encoder::Accelerator {
+ public:
+  explicit VP9Accelerator(VaapiVideoEncodeAccelerator* vea) : vea_(vea) {}
+
+  ~VP9Accelerator() override = default;
+
+  // VP9Encoder::Accelerator implementation.
+  scoped_refptr<VP9Picture> GetPicture(
+      AcceleratedVideoEncoder::EncodeJob* job) override;
+
+  bool SubmitFrameParameters(
+      AcceleratedVideoEncoder::EncodeJob* job,
+      const VP9Encoder::EncodeParams& encode_params,
+      scoped_refptr<VP9Picture> pic,
+      const Vp9ReferenceFrameVector& ref_frames) override;
+
+ private:
+  VaapiVideoEncodeAccelerator* const vea_;
+};
+
 VaapiVideoEncodeAccelerator::VaapiVideoEncodeAccelerator()
     : codec_(kUnknownVideoCodec),
       output_buffer_byte_size_(0),
@@ -222,7 +245,7 @@
   client_ = client_ptr_factory_->GetWeakPtr();
 
   codec_ = VideoCodecProfileToVideoCodec(config.output_profile);
-  if (codec_ != kCodecH264 && codec_ != kCodecVP8) {
+  if (codec_ != kCodecH264 && codec_ != kCodecVP8 && codec_ != kCodecVP9) {
     VLOGF(1) << "Unsupported profile: "
              << GetProfileName(config.output_profile);
     return false;
@@ -319,6 +342,11 @@
           std::make_unique<VP8Encoder>(std::make_unique<VP8Accelerator>(this));
       break;
 
+    case kCodecVP9:
+      encoder_ =
+          std::make_unique<VP9Encoder>(std::make_unique<VP9Accelerator>(this));
+      break;
+
     default:
       NOTREACHED() << "Unsupported codec type " << GetCodecName(codec_);
       return;
@@ -1177,4 +1205,136 @@
   return true;
 }
 
+scoped_refptr<VP9Picture>
+VaapiVideoEncodeAccelerator::VP9Accelerator::GetPicture(
+    AcceleratedVideoEncoder::EncodeJob* job) {
+  return base::MakeRefCounted<VaapiVP9Picture>(
+      job->AsVaapiEncodeJob()->reconstructed_surface());
+}
+
+bool VaapiVideoEncodeAccelerator::VP9Accelerator::SubmitFrameParameters(
+    AcceleratedVideoEncoder::EncodeJob* job,
+    const VP9Encoder::EncodeParams& encode_params,
+    scoped_refptr<VP9Picture> pic,
+    const Vp9ReferenceFrameVector& ref_frames) {
+  VAEncSequenceParameterBufferVP9 seq_param = {};
+
+  const auto& frame_header = pic->frame_hdr;
+  // TODO(crbug.com/811912): Double check whether the
+  // max_frame_width or max_frame_height affects any of the memory
+  // allocation and tighten these values based on that.
+  constexpr gfx::Size kMaxFrameSize(4096, 4096);
+  seq_param.max_frame_width = kMaxFrameSize.height();
+  seq_param.max_frame_height = kMaxFrameSize.width();
+  seq_param.bits_per_second = encode_params.bitrate_allocation.GetSumBps();
+  seq_param.intra_period = encode_params.kf_period_frames;
+
+  VAEncPictureParameterBufferVP9 pic_param = {};
+
+  pic_param.frame_width_src = frame_header->frame_width;
+  pic_param.frame_height_src = frame_header->frame_height;
+  pic_param.frame_width_dst = frame_header->render_width;
+  pic_param.frame_height_dst = frame_header->render_height;
+
+  pic_param.reconstructed_frame = pic->AsVaapiVP9Picture()->GetVASurfaceID();
+  DCHECK_NE(pic_param.reconstructed_frame, VA_INVALID_ID);
+
+  for (size_t i = 0; i < kVp9NumRefFrames; i++) {
+    auto ref_pic = ref_frames.GetFrame(i);
+    pic_param.reference_frames[i] =
+        ref_pic ? ref_pic->AsVaapiVP9Picture()->GetVASurfaceID()
+                : VA_INVALID_ID;
+  }
+
+  pic_param.coded_buf = job->AsVaapiEncodeJob()->coded_buffer_id();
+  DCHECK_NE(pic_param.coded_buf, VA_INVALID_ID);
+
+  if (frame_header->IsKeyframe()) {
+    pic_param.ref_flags.bits.force_kf = true;
+  } else {
+    // use golden, altref and last for prediction
+    pic_param.ref_flags.bits.ref_frame_ctrl_l0 = 0x07;
+    pic_param.ref_flags.bits.ref_last_idx = frame_header->ref_frame_idx[0];
+    pic_param.ref_flags.bits.ref_gf_idx = frame_header->ref_frame_idx[1];
+    pic_param.ref_flags.bits.ref_arf_idx = frame_header->ref_frame_idx[2];
+  }
+
+  pic_param.pic_flags.bits.frame_type = frame_header->frame_type;
+  pic_param.pic_flags.bits.show_frame = frame_header->show_frame;
+  pic_param.pic_flags.bits.error_resilient_mode =
+      frame_header->error_resilient_mode;
+  pic_param.pic_flags.bits.intra_only = frame_header->intra_only;
+  pic_param.pic_flags.bits.allow_high_precision_mv =
+      frame_header->allow_high_precision_mv;
+  pic_param.pic_flags.bits.mcomp_filter_type =
+      frame_header->interpolation_filter;
+  pic_param.pic_flags.bits.frame_parallel_decoding_mode =
+      frame_header->frame_parallel_decoding_mode;
+  pic_param.pic_flags.bits.reset_frame_context =
+      frame_header->reset_frame_context;
+  pic_param.pic_flags.bits.refresh_frame_context =
+      frame_header->refresh_frame_context;
+  pic_param.pic_flags.bits.frame_context_idx = frame_header->frame_context_idx;
+
+  pic_param.refresh_frame_flags = frame_header->refresh_frame_flags;
+
+  pic_param.luma_ac_qindex = frame_header->quant_params.base_q_idx;
+  pic_param.luma_dc_qindex_delta = frame_header->quant_params.delta_q_y_dc;
+  pic_param.chroma_ac_qindex_delta = frame_header->quant_params.delta_q_uv_ac;
+  pic_param.chroma_dc_qindex_delta = frame_header->quant_params.delta_q_uv_dc;
+
+  // TODO(crbug.com/924786): Unlike the current vp8 implementation,
+  // SegmentationParams and LoopFilterParams are the part of Parser structure
+  // rather than included them in FrameHeader. So, for now, we are not taking
+  // segmentation and loopfilter related parameter from frame_hdr. But since the
+  // filter level may affect on quality at lower bitrates, we set a constant
+  // value (== 10) which is what other VA-API implementations like libyami and
+  // gstreamer-vaapi are using.
+  pic_param.filter_level = 10;
+  pic_param.log2_tile_rows = frame_header->tile_rows_log2;
+  pic_param.log2_tile_columns = frame_header->tile_cols_log2;
+
+  VAEncMiscParameterRateControl rate_control_param = {};
+  rate_control_param.bits_per_second =
+      encode_params.bitrate_allocation.GetSumBps();
+  rate_control_param.target_percentage = kTargetBitratePercentage;
+  rate_control_param.window_size = encode_params.cpb_window_size_ms;
+  rate_control_param.initial_qp = encode_params.initial_qp;
+  rate_control_param.rc_flags.bits.disable_frame_skip = true;
+
+  VAEncMiscParameterFrameRate framerate_param = {};
+  framerate_param.framerate = encode_params.framerate;
+
+  VAEncMiscParameterHRD hrd_param = {};
+  hrd_param.buffer_size = encode_params.cpb_size_bits;
+  hrd_param.initial_buffer_fullness = hrd_param.buffer_size / 2;
+
+  job->AddSetupCallback(
+      base::BindOnce(&VaapiVideoEncodeAccelerator::SubmitBuffer,
+                     base::Unretained(vea_), VAEncSequenceParameterBufferType,
+                     MakeRefCountedBytes(&seq_param, sizeof(seq_param))));
+
+  job->AddSetupCallback(
+      base::BindOnce(&VaapiVideoEncodeAccelerator::SubmitBuffer,
+                     base::Unretained(vea_), VAEncPictureParameterBufferType,
+                     MakeRefCountedBytes(&pic_param, sizeof(pic_param))));
+
+  job->AddSetupCallback(base::BindOnce(
+      &VaapiVideoEncodeAccelerator::SubmitVAEncMiscParamBuffer,
+      base::Unretained(vea_), VAEncMiscParameterTypeRateControl,
+      MakeRefCountedBytes(&rate_control_param, sizeof(rate_control_param))));
+
+  job->AddSetupCallback(base::BindOnce(
+      &VaapiVideoEncodeAccelerator::SubmitVAEncMiscParamBuffer,
+      base::Unretained(vea_), VAEncMiscParameterTypeFrameRate,
+      MakeRefCountedBytes(&framerate_param, sizeof(framerate_param))));
+
+  job->AddSetupCallback(
+      base::BindOnce(&VaapiVideoEncodeAccelerator::SubmitVAEncMiscParamBuffer,
+                     base::Unretained(vea_), VAEncMiscParameterTypeHRD,
+                     MakeRefCountedBytes(&hrd_param, sizeof(hrd_param))));
+
+  return true;
+}
+
 }  // namespace media
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.h b/media/gpu/vaapi/vaapi_video_encode_accelerator.h
index c321a06f..16e5891 100644
--- a/media/gpu/vaapi/vaapi_video_encode_accelerator.h
+++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.h
@@ -52,6 +52,7 @@
  private:
   class H264Accelerator;
   class VP8Accelerator;
+  class VP9Accelerator;
 
   // Encoder state.
   enum State {
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc
index 67d24a1..4a12557 100644
--- a/media/gpu/vaapi/vaapi_wrapper.cc
+++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -185,6 +185,14 @@
     return true;
   }
 
+  // TODO(crbug.com/811912): Remove once VP9 encoding is to be enabled by
+  // default.
+  if (mode == VaapiWrapper::CodecMode::kEncode &&
+      va_profile == VAProfileVP9Profile0 &&
+      !base::FeatureList::IsEnabled(kVaapiVP9Encoder)) {
+    return true;
+  }
+
   return false;
 }
 
diff --git a/media/gpu/vaapi/vp9_encoder.cc b/media/gpu/vaapi/vp9_encoder.cc
new file mode 100644
index 0000000..a120657a
--- /dev/null
+++ b/media/gpu/vaapi/vp9_encoder.cc
@@ -0,0 +1,180 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/gpu/vaapi/vp9_encoder.h"
+
+#include "base/bits.h"
+
+#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
+
+namespace media {
+
+namespace {
+// Keyframe period.
+constexpr size_t kKFPeriod = 3000;
+
+// Arbitrarily chosen bitrate window size for rate control, in ms.
+constexpr int kCPBWindowSizeMs = 500;
+
+// Based on WebRTC's defaults.
+constexpr int kMinQP = 4;
+constexpr int kMaxQP = 112;
+constexpr int kDefaultQP = (3 * kMinQP + kMaxQP) / 4;
+}  // namespace
+
+VP9Encoder::EncodeParams::EncodeParams()
+    : kf_period_frames(kKFPeriod),
+      framerate(0),
+      cpb_window_size_ms(kCPBWindowSizeMs),
+      cpb_size_bits(0),
+      initial_qp(kDefaultQP),
+      min_qp(kMinQP),
+      max_qp(kMaxQP),
+      error_resilient_mode(false) {}
+
+void VP9Encoder::Reset() {
+  current_params_ = EncodeParams();
+  reference_frames_.Clear();
+  frame_num_ = 0;
+  InitializeFrameHeader();
+}
+
+VP9Encoder::VP9Encoder(std::unique_ptr<Accelerator> accelerator)
+    : accelerator_(std::move(accelerator)) {}
+
+VP9Encoder::~VP9Encoder() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
+
+bool VP9Encoder::Initialize(const VideoEncodeAccelerator::Config& config) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (VideoCodecProfileToVideoCodec(config.output_profile) != kCodecVP9) {
+    DVLOGF(1) << "Invalid profile: " << GetProfileName(config.output_profile);
+    return false;
+  }
+
+  if (config.input_visible_size.IsEmpty()) {
+    DVLOGF(1) << "Input visible size could not be empty";
+    return false;
+  }
+  // 4:2:0 format has to be 2-aligned.
+  if ((config.input_visible_size.width() % 2 != 0) ||
+      (config.input_visible_size.height() % 2 != 0)) {
+    DVLOGF(1) << "The pixel sizes are not even: "
+              << config.input_visible_size.ToString();
+    return false;
+  }
+
+  visible_size_ = config.input_visible_size;
+  coded_size_ = gfx::Size(base::bits::Align(visible_size_.width(), 16),
+                          base::bits::Align(visible_size_.height(), 16));
+
+  Reset();
+
+  VideoBitrateAllocation initial_bitrate_allocation;
+  initial_bitrate_allocation.SetBitrate(0, 0, config.initial_bitrate);
+  return UpdateRates(initial_bitrate_allocation,
+                     config.initial_framerate.value_or(
+                         VideoEncodeAccelerator::kDefaultFramerate));
+}
+
+gfx::Size VP9Encoder::GetCodedSize() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(!coded_size_.IsEmpty());
+
+  return coded_size_;
+}
+
+size_t VP9Encoder::GetMaxNumOfRefFrames() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  return kVp9NumRefFrames;
+}
+
+bool VP9Encoder::PrepareEncodeJob(EncodeJob* encode_job) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (encode_job->IsKeyframeRequested())
+    frame_num_ = 0;
+
+  if (frame_num_ == 0)
+    encode_job->ProduceKeyframe();
+
+  frame_num_++;
+  frame_num_ %= current_params_.kf_period_frames;
+
+  scoped_refptr<VP9Picture> picture = accelerator_->GetPicture(encode_job);
+  DCHECK(picture);
+
+  UpdateFrameHeader(encode_job->IsKeyframeRequested());
+
+  *picture->frame_hdr = current_frame_hdr_;
+
+  if (!accelerator_->SubmitFrameParameters(encode_job, current_params_, picture,
+                                           reference_frames_)) {
+    LOG(ERROR) << "Failed submitting frame parameters";
+    return false;
+  }
+
+  UpdateReferenceFrames(picture);
+  return true;
+}
+
+bool VP9Encoder::UpdateRates(const VideoBitrateAllocation& bitrate_allocation,
+                             uint32_t framerate) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (bitrate_allocation.GetSumBps() == 0 || framerate == 0)
+    return false;
+
+  if (current_params_.bitrate_allocation == bitrate_allocation &&
+      current_params_.framerate == framerate) {
+    return true;
+  }
+
+  current_params_.bitrate_allocation = bitrate_allocation;
+  current_params_.framerate = framerate;
+
+  current_params_.cpb_size_bits =
+      current_params_.bitrate_allocation.GetSumBps() *
+      current_params_.cpb_window_size_ms / 1000;
+
+  return true;
+}
+
+void VP9Encoder::InitializeFrameHeader() {
+  current_frame_hdr_ = {};
+  DCHECK(!visible_size_.IsEmpty());
+  current_frame_hdr_.frame_width = visible_size_.width();
+  current_frame_hdr_.frame_height = visible_size_.height();
+  current_frame_hdr_.render_width = visible_size_.width();
+  current_frame_hdr_.render_height = visible_size_.height();
+  current_frame_hdr_.quant_params.base_q_idx = current_params_.initial_qp;
+  current_frame_hdr_.show_frame = true;
+}
+
+void VP9Encoder::UpdateFrameHeader(bool keyframe) {
+  if (keyframe) {
+    current_frame_hdr_.frame_type = Vp9FrameHeader::KEYFRAME;
+    current_frame_hdr_.refresh_frame_flags = 0xff;
+    ref_frame_index_ = 0;
+  } else {
+    // TODO(crbug.com/811912): Add temporal layer support when there is a driver
+    // support. Use the last three frames for reference.
+    current_frame_hdr_.frame_type = Vp9FrameHeader::INTERFRAME;
+    current_frame_hdr_.ref_frame_idx[0] = ref_frame_index_;
+    current_frame_hdr_.ref_frame_idx[1] =
+        (ref_frame_index_ - 1) & (kVp9NumRefFrames - 1);
+    current_frame_hdr_.ref_frame_idx[2] =
+        (ref_frame_index_ - 2) & (kVp9NumRefFrames - 1);
+    ref_frame_index_ = (ref_frame_index_ + 1) % kVp9NumRefFrames;
+    current_frame_hdr_.refresh_frame_flags = 1 << ref_frame_index_;
+  }
+}
+
+void VP9Encoder::UpdateReferenceFrames(scoped_refptr<VP9Picture> picture) {
+  reference_frames_.Refresh(picture);
+}
+
+}  // namespace media
diff --git a/media/gpu/vaapi/vp9_encoder.h b/media/gpu/vaapi/vp9_encoder.h
new file mode 100644
index 0000000..1436525b
--- /dev/null
+++ b/media/gpu/vaapi/vp9_encoder.h
@@ -0,0 +1,109 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_GPU_VAAPI_VP9_ENCODER_H_
+#define MEDIA_GPU_VAAPI_VP9_ENCODER_H_
+
+#include <list>
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/sequence_checker.h"
+#include "media/base/video_bitrate_allocation.h"
+#include "media/filters/vp9_parser.h"
+#include "media/gpu/vaapi/accelerated_video_encoder.h"
+#include "media/gpu/vp9_picture.h"
+#include "media/gpu/vp9_reference_frame_vector.h"
+
+namespace media {
+
+class VP9Encoder : public AcceleratedVideoEncoder {
+ public:
+  struct EncodeParams {
+    EncodeParams();
+
+    // Produce a keyframe at least once per this many frames.
+    size_t kf_period_frames;
+
+    // Bitrate allocation in bps.
+    VideoBitrateAllocation bitrate_allocation;
+
+    // Framerate in FPS.
+    uint32_t framerate;
+
+    // Bitrate window size in ms.
+    unsigned int cpb_window_size_ms;
+
+    // Coded picture buffer size in bits.
+    unsigned int cpb_size_bits;
+
+    int initial_qp;
+    int min_qp;
+    int max_qp;
+
+    bool error_resilient_mode;
+  };
+
+  // An accelerator interface. The client must provide an appropriate
+  // implementation on creation.
+  class Accelerator {
+   public:
+    Accelerator() = default;
+    virtual ~Accelerator() = default;
+
+    // Returns the VP9Picture to be used as output for |job|.
+    virtual scoped_refptr<VP9Picture> GetPicture(EncodeJob* job) = 0;
+
+    // Initializes |job| to use the provided |encode_params| as its parameters,
+    // and |pic| as the target, as well as |ref_frames| as reference frames for
+    // it. Returns true on success.
+    virtual bool SubmitFrameParameters(
+        EncodeJob* job,
+        const VP9Encoder::EncodeParams& encode_params,
+        scoped_refptr<VP9Picture> pic,
+        const Vp9ReferenceFrameVector& ref_frames) = 0;
+
+    DISALLOW_COPY_AND_ASSIGN(Accelerator);
+  };
+
+  explicit VP9Encoder(std::unique_ptr<Accelerator> accelerator);
+  ~VP9Encoder() override;
+
+  // AcceleratedVideoEncoder implementation.
+  bool Initialize(const VideoEncodeAccelerator::Config& config) override;
+  bool UpdateRates(const VideoBitrateAllocation& bitrate_allocation,
+                   uint32_t framerate) override;
+  gfx::Size GetCodedSize() const override;
+  size_t GetMaxNumOfRefFrames() const override;
+  bool PrepareEncodeJob(EncodeJob* encode_job) override;
+
+ private:
+  void InitializeFrameHeader();
+  void UpdateFrameHeader(bool keyframe);
+  void UpdateReferenceFrames(scoped_refptr<VP9Picture> picture);
+  void Reset();
+
+  gfx::Size visible_size_;
+  gfx::Size coded_size_;  // Macroblock-aligned.
+
+  // Frame count since last keyframe, reset to 0 every keyframe period.
+  size_t frame_num_ = 0;
+  size_t ref_frame_index_ = 0;
+
+  EncodeParams current_params_;
+
+  Vp9FrameHeader current_frame_hdr_;
+  Vp9ReferenceFrameVector reference_frames_;
+
+  const std::unique_ptr<Accelerator> accelerator_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+  DISALLOW_COPY_AND_ASSIGN(VP9Encoder);
+};
+
+}  // namespace media
+
+#endif  // MEDIA_GPU_VAAPI_VP9_ENCODER_H_
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc
index 9cdf9252..65c0a4c 100644
--- a/media/gpu/video_encode_accelerator_unittest.cc
+++ b/media/gpu/video_encode_accelerator_unittest.cc
@@ -31,6 +31,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/launcher/unit_test_launcher.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/test/test_suite.h"
 #include "base/threading/thread.h"
@@ -42,6 +43,7 @@
 #include "media/base/bitstream_buffer.h"
 #include "media/base/cdm_context.h"
 #include "media/base/decoder_buffer.h"
+#include "media/base/media_switches.h"
 #include "media/base/media_util.h"
 #include "media/base/test_data_util.h"
 #include "media/base/video_decoder.h"
@@ -49,6 +51,7 @@
 #include "media/filters/ffmpeg_video_decoder.h"
 #include "media/filters/ivf_parser.h"
 #include "media/filters/vp8_parser.h"
+#include "media/filters/vp9_parser.h"
 #include "media/gpu/buildflags.h"
 #include "media/gpu/gpu_video_encode_accelerator_factory.h"
 #include "media/gpu/h264_decoder.h"
@@ -128,9 +131,9 @@
 // - |width| and |height| are in pixels.
 // - |profile| to encode into (values of VideoCodecProfile).
 // - |out_filename| filename to save the encoded stream to (optional). The
-//   format for H264 is Annex-B byte stream. The format for VP8 is IVF. Output
-//   stream is saved for the simple encode test only. H264 raw stream and IVF
-//   can be used as input of VDA unittest. H264 raw stream can be played by
+//   format for H264 is Annex-B byte stream. The format for VP8 and VP9 is IVF.
+//   Output stream is saved for the simple encode test only. H264 raw stream and
+//   IVF can be used as input of VDA unittest. H264 raw stream can be played by
 //   "mplayer -fps 25 out.h264" and IVF can be played by mplayer directly.
 //   Helpful description: http://wiki.multimedia.cx/index.php?title=IVF
 // Further parameters are optional (need to provide preceding positional
@@ -298,6 +301,10 @@
   return profile >= VP8PROFILE_MIN && profile <= VP8PROFILE_MAX;
 }
 
+static bool IsVP9(VideoCodecProfile profile) {
+  return profile >= VP9PROFILE_MIN && profile <= VP9PROFILE_MAX;
+}
+
 // Helper functions to do string conversions.
 static base::FilePath::StringType StringToFilePathStringType(
     const std::string& str) {
@@ -797,6 +804,36 @@
   frame_cb_.Run(header.IsKeyframe(), visible_size_);
 }
 
+class VP9Validator : public StreamValidator {
+ public:
+  explicit VP9Validator(const FrameFoundCallback& frame_cb)
+      : StreamValidator(frame_cb), parser_(false), seen_keyframe_(false) {}
+
+  void ProcessStreamBuffer(const uint8_t* stream, size_t size) override;
+
+ private:
+  Vp9Parser parser_;
+  // Have we already got a keyframe in the stream?
+  bool seen_keyframe_;
+};
+
+void VP9Validator::ProcessStreamBuffer(const uint8_t* stream, size_t size) {
+  // TODO(posciak): We could be getting more frames in the buffer, but there is
+  // no simple way to detect this. We'd need to parse the frames and go through
+  // partition numbers/sizes. For now assume one frame per buffer.
+  Vp9FrameHeader header;
+  parser_.SetStream(stream, size, nullptr);
+  EXPECT_TRUE(Vp9Parser::kInvalidStream !=
+              parser_.ParseNextFrame(&header, nullptr));
+  if (header.IsKeyframe()) {
+    seen_keyframe_ = true;
+    visible_size_.SetSize(header.render_width, header.render_height);
+  }
+
+  EXPECT_TRUE(seen_keyframe_);
+  ASSERT_FALSE(visible_size_.IsEmpty());
+  frame_cb_.Run(header.IsKeyframe(), visible_size_);
+}
 // static
 std::unique_ptr<StreamValidator> StreamValidator::Create(
     VideoCodecProfile profile,
@@ -807,6 +844,8 @@
     validator.reset(new H264Validator(frame_cb));
   } else if (IsVP8(profile)) {
     validator.reset(new VP8Validator(frame_cb));
+  } else if (IsVP9(profile)) {
+    validator.reset(new VP9Validator(frame_cb));
   } else {
     LOG(FATAL) << "Unsupported profile: " << GetProfileName(profile);
   }
@@ -895,18 +934,24 @@
   gfx::Size natural_size(visible_size.size());
   // The default output format of ffmpeg video decoder is YV12.
   VideoDecoderConfig config;
-  if (IsVP8(profile_))
+  if (IsVP8(profile_)) {
     config.Initialize(kCodecVP8, VP8PROFILE_ANY, pixel_format_,
                       VideoColorSpace(), VIDEO_ROTATION_0, coded_size,
                       visible_size, natural_size, EmptyExtraData(),
                       Unencrypted());
-  else if (IsH264(profile_))
+  } else if (IsVP9(profile_)) {
+    config.Initialize(kCodecVP9, VP9PROFILE_PROFILE0, pixel_format_,
+                      VideoColorSpace(), VIDEO_ROTATION_0, coded_size,
+                      visible_size, natural_size, EmptyExtraData(),
+                      Unencrypted());
+  } else if (IsH264(profile_)) {
     config.Initialize(kCodecH264, H264PROFILE_MAIN, pixel_format_,
                       VideoColorSpace(), VIDEO_ROTATION_0, coded_size,
                       visible_size, natural_size, EmptyExtraData(),
                       Unencrypted());
-  else
+  } else {
     LOG_ASSERT(0) << "Invalid profile " << GetProfileName(profile_);
+  }
 
   decoder_->Initialize(
       config, false, nullptr,
@@ -1319,7 +1364,7 @@
   void LogPerf();
 
   // Write IVF file header to test_stream_->out_filename.
-  void WriteIvfFileHeader();
+  void WriteIvfFileHeader(uint32_t fourcc);
 
   // Write an IVF frame header to test_stream_->out_filename.
   void WriteIvfFrameHeader(int frame_index, size_t frame_size);
@@ -1653,6 +1698,8 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   ASSERT_EQ(CS_INITIALIZED, state_);
   SetState(CS_ENCODING);
+  constexpr uint32_t kVp8Fourcc = 0x30385056;
+  constexpr uint32_t kVp9Fourcc = 0x30395056;
 
   if (quality_validator_)
     quality_validator_->Initialize(input_coded_size,
@@ -1672,8 +1719,13 @@
              << kMinFramesForBitrateTests << " frames";
     num_frames_to_encode_ = kMinFramesForBitrateTests;
   }
-  if (save_to_file_ && IsVP8(test_stream_->requested_profile))
-    WriteIvfFileHeader();
+  if (save_to_file_) {
+    if (IsVP8(test_stream_->requested_profile)) {
+      WriteIvfFileHeader(kVp8Fourcc);
+    } else if (IsVP9(test_stream_->requested_profile)) {
+      WriteIvfFileHeader(kVp9Fourcc);
+    }
+  }
 
   input_coded_size_ = input_coded_size;
   num_required_input_buffers_ = input_count;
@@ -1761,7 +1813,8 @@
     }
 
     if (save_to_file_) {
-      if (IsVP8(test_stream_->requested_profile))
+      if (IsVP8(test_stream_->requested_profile) ||
+          IsVP9(test_stream_->requested_profile))
         WriteIvfFrameHeader(num_encoded_frames_ - 1,
                             metadata.payload_size_bytes);
 
@@ -2117,13 +2170,13 @@
   }
 }
 
-void VEAClient::WriteIvfFileHeader() {
+void VEAClient::WriteIvfFileHeader(uint32_t fourcc) {
   DCHECK(thread_checker_.CalledOnValidThread());
   IvfFileHeader header = {};
   memcpy(header.signature, kIvfHeaderSignature, sizeof(header.signature));
   header.version = 0;
   header.header_size = sizeof(header);
-  header.fourcc = 0x30385056;  // VP80
+  header.fourcc = fourcc;  // VP80 or VP90
   header.width =
       base::checked_cast<uint16_t>(test_stream_->visible_size.width());
   header.height =
@@ -2682,6 +2735,12 @@
   mojo::core::Init();
   media::VEATestSuite test_suite(argc, argv);
 
+#if BUILDFLAG(USE_VAAPI)
+  base::test::ScopedFeatureList scoped_feature_list;
+  // TODO(crbug.com/811912): remove once enabled by default.
+  scoped_feature_list.InitAndEnableFeature(media::kVaapiVP9Encoder);
+#endif
+
   base::ShadowingAtExitManager at_exit_manager;
 
   // Needed to enable DVLOG through --vmodule.
diff --git a/media/gpu/vp9_picture.cc b/media/gpu/vp9_picture.cc
index e724886..7790e03 100644
--- a/media/gpu/vp9_picture.cc
+++ b/media/gpu/vp9_picture.cc
@@ -6,7 +6,7 @@
 
 namespace media {
 
-VP9Picture::VP9Picture() = default;
+VP9Picture::VP9Picture() : frame_hdr(new Vp9FrameHeader()) {}
 
 VP9Picture::~VP9Picture() = default;
 
diff --git a/media/gpu/vp9_reference_frame_vector.cc b/media/gpu/vp9_reference_frame_vector.cc
new file mode 100644
index 0000000..94627f2
--- /dev/null
+++ b/media/gpu/vp9_reference_frame_vector.cc
@@ -0,0 +1,48 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/gpu/vp9_reference_frame_vector.h"
+
+#include "media/gpu/vp9_picture.h"
+
+namespace media {
+
+Vp9ReferenceFrameVector::Vp9ReferenceFrameVector() {
+  DETACH_FROM_SEQUENCE(sequence_checker_);
+}
+
+Vp9ReferenceFrameVector::~Vp9ReferenceFrameVector() {}
+
+// Refresh the reference frame buffer slots with current frame
+// based on refresh_frame_flags set in the frame_hdr.
+void Vp9ReferenceFrameVector::Refresh(scoped_refptr<VP9Picture> pic) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(pic);
+  const auto& frame_hdr = pic->frame_hdr;
+
+  for (size_t i = 0, mask = frame_hdr->refresh_frame_flags; mask;
+       mask >>= 1, ++i) {
+    if (mask & 1)
+      reference_frames_[i] = pic;
+  }
+}
+
+void Vp9ReferenceFrameVector::Clear() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  for (auto& f : reference_frames_)
+    f = nullptr;
+}
+
+// VP9 can maintains up to eight active reference frames and each
+// frame can use up to three reference frames from this list.
+// GetFrame will return the reference frame placed in reference_frames_[index]
+scoped_refptr<VP9Picture> Vp9ReferenceFrameVector::GetFrame(
+    size_t index) const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  return reference_frames_[index];
+}
+
+}  // namespace media
diff --git a/media/gpu/vp9_reference_frame_vector.h b/media/gpu/vp9_reference_frame_vector.h
new file mode 100644
index 0000000..ea9b2b8
--- /dev/null
+++ b/media/gpu/vp9_reference_frame_vector.h
@@ -0,0 +1,40 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_GPU_VP9_REFERENCE_FRAME_VECTOR_H_
+#define MEDIA_GPU_VP9_REFERENCE_FRAME_VECTOR_H_
+
+#include <array>
+
+#include "base/memory/scoped_refptr.h"
+#include "base/sequence_checker.h"
+#include "media/filters/vp9_parser.h"
+
+namespace media {
+
+class VP9Picture;
+
+// class to share reference frame management code
+// between encoder and decoder classes.
+// TODO(crbug.com/924804): Add the support in Decoder class.
+class Vp9ReferenceFrameVector {
+ public:
+  Vp9ReferenceFrameVector();
+  ~Vp9ReferenceFrameVector();
+
+  void Refresh(scoped_refptr<VP9Picture> pic);
+  void Clear();
+
+  scoped_refptr<VP9Picture> GetFrame(size_t index) const;
+
+ private:
+  std::array<scoped_refptr<VP9Picture>, kVp9NumRefFrames> reference_frames_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+  DISALLOW_COPY_AND_ASSIGN(Vp9ReferenceFrameVector);
+};
+
+}  // namespace media
+
+#endif  // MEDIA_GPU_VP9_REFERENCE_FRAME_VECTOR_H_
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 672f603..44f07ab1 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -806,6 +806,8 @@
       "http/http_proxy_client_socket_pool.h",
       "http/http_proxy_client_socket_wrapper.cc",
       "http/http_proxy_client_socket_wrapper.h",
+      "http/http_proxy_connect_job.cc",
+      "http/http_proxy_connect_job.h",
       "http/http_request_info.cc",
       "http/http_request_info.h",
       "http/http_response_body_drainer.cc",
@@ -4940,6 +4942,7 @@
     "http/http_proxy_client_socket_pool_unittest.cc",
     "http/http_proxy_client_socket_unittest.cc",
     "http/http_proxy_client_socket_wrapper_unittest.cc",
+    "http/http_proxy_connect_job_unittest.cc",
     "http/http_request_headers_unittest.cc",
     "http/http_response_body_drainer_unittest.cc",
     "http/http_response_headers_unittest.cc",
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h
index 61fbd8e7..d5969692 100644
--- a/net/base/net_error_list.h
+++ b/net/base/net_error_list.h
@@ -826,6 +826,9 @@
 // current configuration (e.g. load flags, mode, etc.)
 NET_ERROR(CACHE_ENTRY_NOT_SUITABLE, -411)
 
+// The disk cache is unable to doom this entry.
+NET_ERROR(CACHE_DOOM_FAILURE, -412)
+
 // The server's response was insecure (e.g. there was a cert error).
 NET_ERROR(INSECURE_RESPONSE, -501)
 
diff --git a/net/http/http_cache.h b/net/http/http_cache.h
index 7dda9c0..ea9f22d 100644
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -58,7 +58,6 @@
 class HttpResponseInfo;
 class IOBuffer;
 class NetLog;
-class ViewCacheHelper;
 struct HttpRequestInfo;
 
 class NET_EXPORT HttpCache : public HttpTransactionFactory {
@@ -299,11 +298,11 @@
   friend class TestHttpCacheTransaction;
   friend class TestHttpCache;
   friend class Transaction;
-  friend class ViewCacheHelper;
   struct PendingOp;  // Info for an entry under construction.
 
   // To help with testing.
   friend class MockHttpCache;
+  friend class HttpCacheTest;
 
   using TransactionList = std::list<Transaction*>;
   using TransactionSet = std::unordered_set<Transaction*>;
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h
index d489b921..0a7bdbd 100644
--- a/net/http/http_cache_transaction.h
+++ b/net/http/http_cache_transaction.h
@@ -115,6 +115,10 @@
 
   const CompletionRepeatingCallback& io_callback() { return io_callback_; }
 
+  void SetIOCallBackForTest(CompletionRepeatingCallback cb) {
+    io_callback_ = cb;
+  }
+
   const NetLogWithSource& net_log() const;
 
   // Bypasses the cache lock whenever there is lock contention.
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index f838cf1..883f80f 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -695,7 +695,36 @@
 
 }  // namespace
 
-using HttpCacheTest = TestWithScopedTaskEnvironment;
+class HttpCacheTest : public TestWithScopedTaskEnvironment {
+ public:
+  HttpCacheTest() {}
+  ~HttpCacheTest() override = default;
+
+  // HttpCache::ActiveEntry is private, doing this allows tests to use it
+  using ActiveEntry = HttpCache::ActiveEntry;
+  using Transaction = HttpCache::Transaction;
+
+  // The below functions are forwarding calls to the HttpCache class.
+  int OpenEntry(HttpCache* cache,
+                const std::string& key,
+                HttpCache::ActiveEntry** entry,
+                HttpCache::Transaction* trans) {
+    return cache->OpenEntry(key, entry, trans);
+  }
+
+  int CreateEntry(HttpCache* cache,
+                  const std::string& key,
+                  HttpCache::ActiveEntry** entry,
+                  HttpCache::Transaction* trans) {
+    return cache->CreateEntry(key, entry, trans);
+  }
+
+  int DoomEntry(HttpCache* cache,
+                const std::string& key,
+                HttpCache::Transaction* trans) {
+    return cache->DoomEntry(key, trans);
+  }
+};
 
 //-----------------------------------------------------------------------------
 // Tests.
@@ -736,7 +765,7 @@
 TEST_F(HttpCacheTest, SimpleGETNoDiskCache) {
   MockHttpCache cache;
 
-  cache.disk_cache()->set_fail_requests();
+  cache.disk_cache()->set_fail_requests(true);
 
   BoundTestNetLog log;
   LoadTimingInfo load_timing_info;
@@ -11187,6 +11216,338 @@
             response_info.cache_entry_status);
 }
 
+class TestCompletionCallbackForHttpCache : public TestCompletionCallback {
+ public:
+  TestCompletionCallbackForHttpCache() {}
+  ~TestCompletionCallbackForHttpCache() override = default;
+
+  const std::vector<int>& results() { return results_; }
+
+ private:
+  std::vector<int> results_;
+
+ protected:
+  void SetResult(int result) override {
+    results_.push_back(result);
+    DidSetResult();
+  }
+};
+
+TEST_F(HttpCacheTest, FailedDoomFollowedByOpen) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to DoomEntry and OpenEntry
+  // below require that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+
+  cache.disk_cache()->set_force_fail_callback_later(true);
+
+  // Queue up our operations.
+  int rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  cache.disk_cache()->set_force_fail_callback_later(false);
+  rv = OpenEntry(cache.http_cache(), m_transaction.url, &entry1,
+                 transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that DoomEntry failed correctly.
+  ASSERT_EQ(cb.results()[0], ERR_CACHE_DOOM_FAILURE);
+  // Verify that OpenEntry fails with the same code.
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_DOOM_FAILURE);
+  ASSERT_EQ(entry1, nullptr);
+}
+
+TEST_F(HttpCacheTest, FailedDoomFollowedByCreate) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to DoomEntry and CreateEntry
+  // below require that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+
+  cache.disk_cache()->set_force_fail_callback_later(true);
+
+  // Queue up our operations.
+  int rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  cache.disk_cache()->set_force_fail_callback_later(false);
+  rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1,
+                   transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that DoomEntry failed correctly.
+  ASSERT_EQ(cb.results()[0], ERR_CACHE_DOOM_FAILURE);
+  // Verify that CreateEntry requests a restart (CACHE_RACE).
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE);
+  ASSERT_EQ(entry1, nullptr);
+}
+
+TEST_F(HttpCacheTest, FailedDoomFollowedByDoom) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to DoomEntry below require that
+  // it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  cache.disk_cache()->set_force_fail_callback_later(true);
+
+  // Queue up our operations.
+  int rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  cache.disk_cache()->set_force_fail_callback_later(false);
+  rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that DoomEntry failed correctly.
+  ASSERT_EQ(cb.results()[0], ERR_CACHE_DOOM_FAILURE);
+  // Verify that the second DoomEntry requests a restart (CACHE_RACE).
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE);
+}
+
+TEST_F(HttpCacheTest, FailedOpenFollowedByCreate) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to OpenEntry and CreateEntry
+  // below require that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+  ActiveEntry* entry2 = nullptr;
+
+  cache.disk_cache()->set_force_fail_callback_later(true);
+
+  // Queue up our operations.
+  int rv = OpenEntry(cache.http_cache(), m_transaction.url, &entry1,
+                     transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  cache.disk_cache()->set_force_fail_callback_later(false);
+  rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry2,
+                   transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that OpenEntry failed correctly.
+  ASSERT_EQ(cb.results()[0], ERR_CACHE_OPEN_FAILURE);
+  ASSERT_EQ(entry1, nullptr);
+  // Verify that the CreateEntry requests a restart (CACHE_RACE).
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE);
+  ASSERT_EQ(entry2, nullptr);
+}
+
+TEST_F(HttpCacheTest, FailedCreateFollowedByOpen) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to CreateEntry and OpenEntry
+  // below require that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+  ActiveEntry* entry2 = nullptr;
+
+  cache.disk_cache()->set_force_fail_callback_later(true);
+
+  // Queue up our operations.
+  int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1,
+                       transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  cache.disk_cache()->set_force_fail_callback_later(false);
+  rv = OpenEntry(cache.http_cache(), m_transaction.url, &entry2,
+                 transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that CreateEntry failed correctly.
+  ASSERT_EQ(cb.results()[0], ERR_CACHE_CREATE_FAILURE);
+  ASSERT_EQ(entry1, nullptr);
+  // Verify that the OpenEntry requests a restart (CACHE_RACE).
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE);
+  ASSERT_EQ(entry2, nullptr);
+}
+
+TEST_F(HttpCacheTest, FailedCreateFollowedByCreate) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to CreateEntry below require
+  // that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+  ActiveEntry* entry2 = nullptr;
+
+  cache.disk_cache()->set_force_fail_callback_later(true);
+
+  // Queue up our operations.
+  int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1,
+                       transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  cache.disk_cache()->set_force_fail_callback_later(false);
+  rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry2,
+                   transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify the CreateEntry(s) failed.
+  ASSERT_EQ(cb.results()[0], ERR_CACHE_CREATE_FAILURE);
+  ASSERT_EQ(entry1, nullptr);
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_CREATE_FAILURE);
+  ASSERT_EQ(entry2, nullptr);
+}
+
+TEST_F(HttpCacheTest, CreateFollowedByCreate) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to CreateEntry below require
+  // that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+  ActiveEntry* entry2 = nullptr;
+
+  // Queue up our operations.
+  int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1,
+                       transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry2,
+                   transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that the first CreateEntry succeeded.
+  ASSERT_EQ(cb.results()[0], OK);
+  ASSERT_NE(entry1, nullptr);
+  // Verify that the second CreateEntry failed.
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_CREATE_FAILURE);
+  ASSERT_EQ(entry2, nullptr);
+}
+
+TEST_F(HttpCacheTest, OperationFollowedByDoom) {
+  MockHttpCache cache;
+  TestCompletionCallbackForHttpCache cb;
+  std::unique_ptr<Transaction> transaction =
+      std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache());
+
+  transaction->SetIOCallBackForTest(cb.callback());
+
+  // Create the backend here as our direct calls to CreateEntry and DoomEntry
+  // below require that it exists.
+  cache.backend();
+
+  // Need a mock transaction in order to use some of MockHttpCache's
+  // functions.
+  ScopedMockTransaction m_transaction(kSimpleGET_Transaction);
+
+  ActiveEntry* entry1 = nullptr;
+
+  // Queue up our operations.
+  // For this test all we need is some operation followed by a doom, a create
+  // fulfills that requirement.
+  int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1,
+                       transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+  rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get());
+  ASSERT_EQ(rv, ERR_IO_PENDING);
+
+  // Wait for all the results to arrive.
+  cb.GetResult(rv);
+  ASSERT_EQ(cb.results().size(), static_cast<size_t>(2));
+
+  // Verify that the CreateEntry succeeded.
+  ASSERT_EQ(cb.results()[0], OK);
+  // Verify that the DoomEntry requests a restart (CACHE_RACE).
+  ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE);
+}
+
 class HttpCacheMemoryDumpTest
     : public testing::TestWithParam<base::trace_event::MemoryDumpLevelOfDetail>,
       public WithScopedTaskEnvironment {};
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 38f7344b..adcab5f 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -11252,25 +11252,17 @@
     ASSERT_TRUE(proxy_server.is_valid());
     CaptureGroupNameTransportSocketPool* socks_conn_pool =
         new CaptureGroupNameTransportSocketPool(NULL, NULL);
-    CaptureGroupNameTransportSocketPool* ssl_conn_pool =
-        new CaptureGroupNameTransportSocketPool(NULL, NULL);
     auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>();
     mock_pool_manager->SetSocketPoolForProxy(proxy_server,
                                              base::WrapUnique(socks_conn_pool));
-    mock_pool_manager->SetSocketPoolForSSLWithProxy(
-        proxy_server, base::WrapUnique(ssl_conn_pool));
     peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
 
     HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
 
     EXPECT_EQ(ERR_IO_PENDING,
               GroupNameTransactionHelper(tests[i].url, session.get()));
-    if (tests[i].ssl)
-      EXPECT_EQ(tests[i].expected_group_name,
-                ssl_conn_pool->last_group_name_received());
-    else
-      EXPECT_EQ(tests[i].expected_group_name,
-                socks_conn_pool->last_group_name_received());
+    EXPECT_EQ(tests[i].expected_group_name,
+              socks_conn_pool->last_group_name_received());
   }
 }
 
diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc
index 3a5e170..e5db4878 100644
--- a/net/http/http_proxy_client_socket_pool.cc
+++ b/net/http/http_proxy_client_socket_pool.cc
@@ -4,307 +4,13 @@
 
 #include "net/http/http_proxy_client_socket_pool.h"
 
-#include <algorithm>
-#include <map>
-#include <string>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/compiler_specific.h"
-#include "base/metrics/field_trial.h"
-#include "base/metrics/field_trial_params.h"
-#include "base/no_destructor.h"
-#include "base/numerics/ranges.h"
-#include "base/optional.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "build/build_config.h"
-#include "net/base/load_flags.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_network_session.h"
-#include "net/http/http_proxy_client_socket_wrapper.h"
-#include "net/log/net_log_source_type.h"
-#include "net/log/net_log_with_source.h"
-#include "net/nqe/network_quality_estimator.h"
-#include "net/socket/client_socket_factory.h"
-#include "net/socket/client_socket_handle.h"
 #include "net/socket/client_socket_pool_base.h"
 #include "net/socket/ssl_client_socket.h"
 #include "net/socket/ssl_connect_job.h"
 #include "net/socket/transport_client_socket_pool.h"
-#include "net/socket/transport_connect_job.h"
-#include "net/spdy/spdy_proxy_client_socket.h"
-#include "net/spdy/spdy_session.h"
-#include "net/spdy/spdy_session_pool.h"
-#include "net/spdy/spdy_stream.h"
-#include "net/ssl/ssl_cert_request_info.h"
-#include "url/gurl.h"
 
 namespace net {
 
-namespace {
-
-// HttpProxyConnectJobs will time out after this many seconds.  Note this is in
-// addition to the timeout for the transport socket.
-#if defined(OS_ANDROID) || defined(OS_IOS)
-static const int kHttpProxyConnectJobTimeoutInSeconds = 10;
-#else
-static const int kHttpProxyConnectJobTimeoutInSeconds = 30;
-#endif
-
-class HttpProxyTimeoutExperiments {
- public:
-  HttpProxyTimeoutExperiments() { Init(); }
-
-  ~HttpProxyTimeoutExperiments() = default;
-
-  void Init() {
-#if defined(OS_ANDROID) || defined(OS_IOS)
-    min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
-        GetInt32Param("min_proxy_connection_timeout_seconds", 8));
-    max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
-        GetInt32Param("max_proxy_connection_timeout_seconds", 30));
-#else
-    min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
-        GetInt32Param("min_proxy_connection_timeout_seconds", 30));
-    max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
-        GetInt32Param("max_proxy_connection_timeout_seconds", 60));
-#endif
-    ssl_http_rtt_multiplier_ = GetInt32Param("ssl_http_rtt_multiplier", 10);
-    non_ssl_http_rtt_multiplier_ =
-        GetInt32Param("non_ssl_http_rtt_multiplier", 5);
-
-    DCHECK_LT(0, ssl_http_rtt_multiplier_);
-    DCHECK_LT(0, non_ssl_http_rtt_multiplier_);
-    DCHECK_LE(base::TimeDelta(), min_proxy_connection_timeout_);
-    DCHECK_LE(base::TimeDelta(), max_proxy_connection_timeout_);
-    DCHECK_LE(min_proxy_connection_timeout_, max_proxy_connection_timeout_);
-  }
-
-  base::TimeDelta min_proxy_connection_timeout() const {
-    return min_proxy_connection_timeout_;
-  }
-  base::TimeDelta max_proxy_connection_timeout() const {
-    return max_proxy_connection_timeout_;
-  }
-  int32_t ssl_http_rtt_multiplier() const { return ssl_http_rtt_multiplier_; }
-  int32_t non_ssl_http_rtt_multiplier() const {
-    return non_ssl_http_rtt_multiplier_;
-  }
-
- private:
-  // Return the value of the parameter |param_name| for the field trial
-  // "NetAdaptiveProxyConnectionTimeout". If the value of the parameter is
-  // unavailable, then |default_value| is available.
-  static int32_t GetInt32Param(const std::string& param_name,
-                               int32_t default_value) {
-    int32_t param;
-    if (!base::StringToInt(base::GetFieldTrialParamValue(
-                               "NetAdaptiveProxyConnectionTimeout", param_name),
-                           &param)) {
-      return default_value;
-    }
-    return param;
-  }
-
-  // For secure proxies, the connection timeout is set to
-  // |ssl_http_rtt_multiplier_| times the HTTP RTT estimate. For insecure
-  // proxies, the connection timeout is set to |non_ssl_http_rtt_multiplier_|
-  // times the HTTP RTT estimate. In either case, the connection timeout
-  // is clamped to be between |min_proxy_connection_timeout_| and
-  // |max_proxy_connection_timeout_|.
-  base::TimeDelta min_proxy_connection_timeout_;
-  base::TimeDelta max_proxy_connection_timeout_;
-  int32_t ssl_http_rtt_multiplier_;
-  int32_t non_ssl_http_rtt_multiplier_;
-};
-
-HttpProxyTimeoutExperiments* GetProxyTimeoutExperiments() {
-  static base::NoDestructor<HttpProxyTimeoutExperiments>
-      proxy_timeout_experiments;
-  return proxy_timeout_experiments.get();
-}
-
-}  // namespace
-
-HttpProxySocketParams::HttpProxySocketParams(
-    const scoped_refptr<TransportSocketParams>& transport_params,
-    const scoped_refptr<SSLSocketParams>& ssl_params,
-    quic::QuicTransportVersion quic_version,
-    const std::string& user_agent,
-    const HostPortPair& endpoint,
-    HttpAuthCache* http_auth_cache,
-    HttpAuthHandlerFactory* http_auth_handler_factory,
-    SpdySessionPool* spdy_session_pool,
-    QuicStreamFactory* quic_stream_factory,
-    bool is_trusted_proxy,
-    bool tunnel,
-    const NetworkTrafficAnnotationTag traffic_annotation)
-    : transport_params_(transport_params),
-      ssl_params_(ssl_params),
-      quic_version_(quic_version),
-      spdy_session_pool_(spdy_session_pool),
-      quic_stream_factory_(quic_stream_factory),
-      user_agent_(user_agent),
-      endpoint_(endpoint),
-      http_auth_cache_(tunnel ? http_auth_cache : NULL),
-      http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL),
-      is_trusted_proxy_(is_trusted_proxy),
-      tunnel_(tunnel),
-      traffic_annotation_(traffic_annotation) {
-  // If doing a QUIC proxy, |quic_version| must not be
-  // quic::QUIC_VERSION_UNSUPPORTED, and |ssl_params| must be valid while
-  // |transport_params| is null. Otherwise, |quic_version| must be
-  // quic::QUIC_VERSION_UNSUPPORTED, and exactly one of |transport_params| or
-  // |ssl_params| must be set.
-  DCHECK(quic_version_ == quic::QUIC_VERSION_UNSUPPORTED
-             ? (bool)transport_params != (bool)ssl_params
-             : !transport_params && ssl_params);
-  // Exactly one of |transport_params_| and |ssl_params_| must be non-null.
-  DCHECK(transport_params_ || ssl_params_);
-  DCHECK(!transport_params_ || !ssl_params_);
-}
-
-HttpProxySocketParams::~HttpProxySocketParams() = default;
-
-HttpProxyConnectJob::HttpProxyConnectJob(
-    const std::string& group_name,
-    RequestPriority priority,
-    const SocketTag& socket_tag,
-    ClientSocketPool::RespectLimits respect_limits,
-    const scoped_refptr<HttpProxySocketParams>& params,
-    ProxyDelegate* proxy_delegate,
-    TransportClientSocketPool* transport_pool,
-    TransportClientSocketPool* ssl_pool,
-    NetworkQualityEstimator* network_quality_estimator,
-    Delegate* delegate,
-    NetLog* net_log)
-    : ConnectJob(
-          group_name,
-          base::TimeDelta() /* The socket takes care of timeouts */,
-          priority,
-          socket_tag,
-          respect_limits == ClientSocketPool::RespectLimits::ENABLED,
-          delegate,
-          NetLogWithSource::Make(net_log,
-                                 NetLogSourceType::HTTP_PROXY_CONNECT_JOB)),
-      client_socket_(new HttpProxyClientSocketWrapper(
-          group_name,
-          priority,
-          socket_tag,
-          respect_limits,
-          ConnectionTimeout(*params, network_quality_estimator),
-          base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds),
-          transport_pool,
-          ssl_pool,
-          params->transport_params(),
-          params->ssl_params(),
-          params->quic_version(),
-          params->user_agent(),
-          params->endpoint(),
-          params->http_auth_cache(),
-          params->http_auth_handler_factory(),
-          params->spdy_session_pool(),
-          params->quic_stream_factory(),
-          params->is_trusted_proxy(),
-          params->tunnel(),
-          proxy_delegate,
-          params->traffic_annotation(),
-          this->net_log())) {}
-
-HttpProxyConnectJob::~HttpProxyConnectJob() = default;
-
-LoadState HttpProxyConnectJob::GetLoadState() const {
-  return client_socket_->GetConnectLoadState();
-}
-
-bool HttpProxyConnectJob::HasEstablishedConnection() const {
-  // TODO(mmenke): Implement this, as nested pools are removed.
-  return false;
-}
-
-void HttpProxyConnectJob::GetAdditionalErrorState(ClientSocketHandle * handle) {
-  if (error_response_info_) {
-    handle->set_ssl_error_response_info(*error_response_info_);
-    handle->set_is_ssl_error(true);
-  }
-}
-
-base::TimeDelta HttpProxyConnectJob::ConnectionTimeout(
-    const HttpProxySocketParams& params,
-    const NetworkQualityEstimator* network_quality_estimator) {
-  bool is_https = params.ssl_params() != nullptr;
-  // HTTP proxy connections can't be on top of proxy connections.
-  DCHECK(!is_https ||
-         params.ssl_params()->GetConnectionType() == SSLSocketParams::DIRECT);
-
-  if (network_quality_estimator) {
-    base::Optional<base::TimeDelta> http_rtt_estimate =
-        network_quality_estimator->GetHttpRTT();
-    if (http_rtt_estimate) {
-      int32_t multiplier =
-          is_https
-              ? GetProxyTimeoutExperiments()->ssl_http_rtt_multiplier()
-              : GetProxyTimeoutExperiments()->non_ssl_http_rtt_multiplier();
-      base::TimeDelta timeout = base::TimeDelta::FromMicroseconds(
-          multiplier * http_rtt_estimate.value().InMicroseconds());
-      // Ensure that connection timeout is between
-      // |min_proxy_connection_timeout_| and |max_proxy_connection_timeout_|.
-      return base::ClampToRange(
-          timeout, GetProxyTimeoutExperiments()->min_proxy_connection_timeout(),
-          GetProxyTimeoutExperiments()->max_proxy_connection_timeout());
-    }
-  }
-
-  // Return the default proxy connection timeout.
-  base::TimeDelta nested_job_timeout;
-#if !defined(OS_ANDROID) && !defined(OS_IOS)
-  if (is_https) {
-    nested_job_timeout = SSLConnectJob::ConnectionTimeout(
-        *params.ssl_params(), network_quality_estimator);
-  } else {
-    nested_job_timeout = TransportConnectJob::ConnectionTimeout();
-  }
-#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
-
-  return nested_job_timeout +
-         base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds);
-}
-
-void HttpProxyConnectJob::UpdateFieldTrialParametersForTesting() {
-  GetProxyTimeoutExperiments()->Init();
-}
-
-int HttpProxyConnectJob::ConnectInternal() {
-  int result = client_socket_->Connect(base::Bind(
-      &HttpProxyConnectJob::OnConnectComplete, base::Unretained(this)));
-  return HandleConnectResult(result);
-}
-
-void HttpProxyConnectJob::ChangePriorityInternal(RequestPriority priority) {
-  if (client_socket_)
-    client_socket_->SetPriority(priority);
-}
-
-void HttpProxyConnectJob::OnConnectComplete(int result) {
-  DCHECK_NE(ERR_IO_PENDING, result);
-  result = HandleConnectResult(result);
-  NotifyDelegateOfCompletion(result);
-  // |this| will have been deleted at this point.
-}
-
-int HttpProxyConnectJob::HandleConnectResult(int result) {
-  if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED)
-    error_response_info_ = client_socket_->GetAdditionalErrorState();
-
-  if (result == OK || result == ERR_PROXY_AUTH_REQUESTED ||
-      result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) {
-    SetSocket(std::move(client_socket_));
-  }
-  return result;
-}
-
 HttpProxyClientSocketPool::HttpProxyConnectJobFactory::
     HttpProxyConnectJobFactory(
         TransportClientSocketPool* transport_pool,
@@ -325,9 +31,9 @@
     ConnectJob::Delegate* delegate) const {
   return std::make_unique<HttpProxyConnectJob>(
       group_name, request.priority(), request.socket_tag(),
-      request.respect_limits(), request.params(), proxy_delegate_,
-      transport_pool_, ssl_pool_, network_quality_estimator_, delegate,
-      net_log_);
+      request.respect_limits() == ClientSocketPool::RespectLimits::ENABLED,
+      request.params(), proxy_delegate_, transport_pool_, ssl_pool_,
+      network_quality_estimator_, delegate, net_log_);
 }
 
 HttpProxyClientSocketPool::HttpProxyClientSocketPool(
diff --git a/net/http/http_proxy_client_socket_pool.h b/net/http/http_proxy_client_socket_pool.h
index 1e43b8e0..2539e76 100644
--- a/net/http/http_proxy_client_socket_pool.h
+++ b/net/http/http_proxy_client_socket_pool.h
@@ -5,162 +5,23 @@
 #ifndef NET_HTTP_HTTP_PROXY_CLIENT_SOCKET_POOL_H_
 #define NET_HTTP_HTTP_PROXY_CLIENT_SOCKET_POOL_H_
 
-#include <stdint.h>
-
 #include <memory>
 #include <string>
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/time/time.h"
 #include "net/base/completion_once_callback.h"
-#include "net/base/host_port_pair.h"
 #include "net/base/net_export.h"
-#include "net/http/http_auth.h"
-#include "net/http/http_response_info.h"
-#include "net/http/proxy_client_socket.h"
+#include "net/http/http_proxy_connect_job.h"
 #include "net/socket/client_socket_pool.h"
 #include "net/socket/client_socket_pool_base.h"
-#include "net/socket/ssl_client_socket.h"
-#include "net/spdy/spdy_session.h"
-#include "net/traffic_annotation/network_traffic_annotation.h"
 
 namespace net {
 
-class HttpAuthCache;
-class HttpAuthHandlerFactory;
-class HttpProxyClientSocketWrapper;
 class NetLog;
 class NetworkQualityEstimator;
 class ProxyDelegate;
-class QuicStreamFactory;
-class SSLSocketParams;
-class SpdySessionPool;
 class TransportClientSocketPool;
-class TransportSocketParams;
-
-// HttpProxySocketParams only needs the socket params for one of the proxy
-// types.  The other param must be NULL.  When using an HTTP proxy,
-// |transport_params| must be set.  When using an HTTPS proxy or QUIC proxy,
-// |ssl_params| must be set. Also, if using a QUIC proxy, |quic_version| must
-// not be quic::QUIC_VERSION_UNSUPPORTED.
-class NET_EXPORT_PRIVATE HttpProxySocketParams
-    : public base::RefCounted<HttpProxySocketParams> {
- public:
-  HttpProxySocketParams(
-      const scoped_refptr<TransportSocketParams>& transport_params,
-      const scoped_refptr<SSLSocketParams>& ssl_params,
-      quic::QuicTransportVersion quic_version,
-      const std::string& user_agent,
-      const HostPortPair& endpoint,
-      HttpAuthCache* http_auth_cache,
-      HttpAuthHandlerFactory* http_auth_handler_factory,
-      SpdySessionPool* spdy_session_pool,
-      QuicStreamFactory* quic_stream_factory,
-      bool is_trusted_proxy,
-      bool tunnel,
-      const NetworkTrafficAnnotationTag traffic_annotation);
-
-  const scoped_refptr<TransportSocketParams>& transport_params() const {
-    return transport_params_;
-  }
-  const scoped_refptr<SSLSocketParams>& ssl_params() const {
-    return ssl_params_;
-  }
-  quic::QuicTransportVersion quic_version() const { return quic_version_; }
-  const std::string& user_agent() const { return user_agent_; }
-  const HostPortPair& endpoint() const { return endpoint_; }
-  HttpAuthCache* http_auth_cache() const { return http_auth_cache_; }
-  HttpAuthHandlerFactory* http_auth_handler_factory() const {
-    return http_auth_handler_factory_;
-  }
-  SpdySessionPool* spdy_session_pool() {
-    return spdy_session_pool_;
-  }
-  QuicStreamFactory* quic_stream_factory() const {
-    return quic_stream_factory_;
-  }
-  bool is_trusted_proxy() const { return is_trusted_proxy_; }
-  bool tunnel() const { return tunnel_; }
-  const NetworkTrafficAnnotationTag traffic_annotation() const {
-    return traffic_annotation_;
-  }
-
- private:
-  friend class base::RefCounted<HttpProxySocketParams>;
-  ~HttpProxySocketParams();
-
-  const scoped_refptr<TransportSocketParams> transport_params_;
-  const scoped_refptr<SSLSocketParams> ssl_params_;
-  quic::QuicTransportVersion quic_version_;
-  SpdySessionPool* spdy_session_pool_;
-  QuicStreamFactory* quic_stream_factory_;
-  const std::string user_agent_;
-  const HostPortPair endpoint_;
-  HttpAuthCache* const http_auth_cache_;
-  HttpAuthHandlerFactory* const http_auth_handler_factory_;
-  const bool is_trusted_proxy_;
-  const bool tunnel_;
-  const NetworkTrafficAnnotationTag traffic_annotation_;
-
-  DISALLOW_COPY_AND_ASSIGN(HttpProxySocketParams);
-};
-
-// HttpProxyConnectJob optionally establishes a tunnel through the proxy
-// server after connecting the underlying transport socket.
-class HttpProxyConnectJob : public ConnectJob {
- public:
-  HttpProxyConnectJob(const std::string& group_name,
-                      RequestPriority priority,
-                      const SocketTag& socket_tag,
-                      ClientSocketPool::RespectLimits respect_limits,
-                      const scoped_refptr<HttpProxySocketParams>& params,
-                      ProxyDelegate* proxy_delegate,
-                      TransportClientSocketPool* transport_pool,
-                      TransportClientSocketPool* ssl_pool,
-                      NetworkQualityEstimator* network_quality_estimator,
-                      Delegate* delegate,
-                      NetLog* net_log);
-  ~HttpProxyConnectJob() override;
-
-  // ConnectJob methods.
-  LoadState GetLoadState() const override;
-  bool HasEstablishedConnection() const override;
-
-  void GetAdditionalErrorState(ClientSocketHandle* handle) override;
-
-  // Returns the connection timeout that will be used by a HttpProxyConnectJob
-  // created with the specified parameters, given current network conditions.
-  NET_EXPORT_PRIVATE static base::TimeDelta ConnectionTimeout(
-      const HttpProxySocketParams& params,
-      const NetworkQualityEstimator* network_quality_estimator);
-
-  // Updates the field trial parameters used in calculating timeouts.
-  NET_EXPORT_PRIVATE static void UpdateFieldTrialParametersForTesting();
-
- private:
-  // Begins the tcp connection and the optional Http proxy tunnel.  If the
-  // request is not immediately servicable (likely), the request will return
-  // ERR_IO_PENDING. An OK return from this function or the callback means
-  // that the connection is established; ERR_PROXY_AUTH_REQUESTED means
-  // that the tunnel needs authentication credentials, the socket will be
-  // returned in this case, and must be release back to the pool; or
-  // a standard net error code will be returned.
-  int ConnectInternal() override;
-
-  void ChangePriorityInternal(RequestPriority priority) override;
-
-  void OnConnectComplete(int result);
-
-  int HandleConnectResult(int result);
-
-  std::unique_ptr<HttpProxyClientSocketWrapper> client_socket_;
-
-  std::unique_ptr<HttpResponseInfo> error_response_info_;
-
-  DISALLOW_COPY_AND_ASSIGN(HttpProxyConnectJob);
-};
 
 class NET_EXPORT_PRIVATE HttpProxyClientSocketPool
     : public ClientSocketPool,
diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc
index 6ea9bb0..f9cc540 100644
--- a/net/http/http_proxy_client_socket_pool_unittest.cc
+++ b/net/http/http_proxy_client_socket_pool_unittest.cc
@@ -10,9 +10,6 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
-#include "base/metrics/field_trial.h"
-#include "base/metrics/field_trial_param_associator.h"
-#include "base/metrics/field_trial_params.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
@@ -103,7 +100,6 @@
                          nullptr /* socket_performance_watcher_factory */,
                          nullptr /* network_quality_estimator */,
                          nullptr /* net_log */),
-        field_trial_list_(nullptr),
         pool_(
             std::make_unique<HttpProxyClientSocketPool>(kMaxSockets,
                                                         kMaxSocketsPerGroup,
@@ -116,42 +112,7 @@
     session_ = CreateNetworkSession();
   }
 
-  virtual ~HttpProxyClientSocketPoolTest() {
-    // Reset global field trial parameters to defaults values.
-    base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting();
-    HttpProxyConnectJob::UpdateFieldTrialParametersForTesting();
-  }
-
-  // Initializes the field trial paramters for the field trial that determines
-  // connection timeout based on the network quality.
-  void InitAdaptiveTimeoutFieldTrialWithParams(
-      bool use_default_params,
-      int ssl_http_rtt_multiplier,
-      int non_ssl_http_rtt_multiplier,
-      base::TimeDelta min_proxy_connection_timeout,
-      base::TimeDelta max_proxy_connection_timeout) {
-    std::string trial_name = "NetAdaptiveProxyConnectionTimeout";
-    std::string group_name = "GroupName";
-
-    std::map<std::string, std::string> params;
-    if (!use_default_params) {
-      params["ssl_http_rtt_multiplier"] =
-          base::NumberToString(ssl_http_rtt_multiplier);
-      params["non_ssl_http_rtt_multiplier"] =
-          base::NumberToString(non_ssl_http_rtt_multiplier);
-      params["min_proxy_connection_timeout_seconds"] =
-          base::NumberToString(min_proxy_connection_timeout.InSeconds());
-      params["max_proxy_connection_timeout_seconds"] =
-          base::NumberToString(max_proxy_connection_timeout.InSeconds());
-    }
-    base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting();
-    EXPECT_TRUE(
-        base::AssociateFieldTrialParams(trial_name, group_name, params));
-    EXPECT_TRUE(base::FieldTrialList::CreateFieldTrial(trial_name, group_name));
-
-    // Force static global that reads the field trials to update.
-    HttpProxyConnectJob::UpdateFieldTrialParametersForTesting();
-  }
+  ~HttpProxyClientSocketPoolTest() override = default;
 
   void InitPoolWithProxyDelegate(ProxyDelegate* proxy_delegate) {
     pool_ = std::make_unique<HttpProxyClientSocketPool>(
@@ -243,21 +204,6 @@
 
   const base::HistogramTester& histogram_tester() { return histogram_tester_; }
 
-  TestNetworkQualityEstimator* estimator() { return &estimator_; }
-
-  TransportClientSocketPool* transport_socket_pool() {
-    return &transport_socket_pool_;
-  }
-  TransportClientSocketPool* ssl_socket_pool() { return &ssl_socket_pool_; }
-
-  base::TimeDelta GetProxyConnectionTimeout() {
-    // Doesn't actually matter whether or not this is for a tunnel - the
-    // connection timeout is the same, though it probably shouldn't be the same,
-    // since tunnels need an extra round trip.
-    return HttpProxyConnectJob::ConnectionTimeout(
-        *CreateParams(true /* tunnel */), &estimator_);
-  }
-
  protected:
   MockTaggingClientSocketFactory socket_factory_;
   SpdySessionDependencies session_deps_;
@@ -271,8 +217,6 @@
 
   base::HistogramTester histogram_tester_;
 
-  base::FieldTrialList field_trial_list_;
-
   SpdyTestUtil spdy_util_;
   std::unique_ptr<SSLSocketDataProvider> ssl_data_;
   std::unique_ptr<SequencedSocketData> data_;
@@ -287,117 +231,6 @@
                          HttpProxyClientSocketPoolTest,
                          ::testing::Values(HTTP, HTTPS, SPDY));
 
-TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
-  TestProxyDelegate proxy_delegate;
-  InitPoolWithProxyDelegate(&proxy_delegate);
-
-  Initialize(base::span<MockRead>(), base::span<MockWrite>(),
-             base::span<MockRead>(), base::span<MockWrite>());
-
-  int rv =
-      handle_.Init("a", CreateNoTunnelParams(), LOW, SocketTag(),
-                   ClientSocketPool::RespectLimits::ENABLED,
-                   CompletionOnceCallback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsOk());
-  EXPECT_TRUE(handle_.is_initialized());
-  ASSERT_TRUE(handle_.socket());
-  EXPECT_TRUE(handle_.socket()->IsConnected());
-  EXPECT_FALSE(proxy_delegate.on_before_tunnel_request_called());
-
-  bool is_secure_proxy = GetParam() == HTTPS || GetParam() == SPDY;
-  histogram_tester().ExpectTotalCount(
-      "Net.HttpProxy.ConnectLatency.Insecure.Success", is_secure_proxy ? 0 : 1);
-  histogram_tester().ExpectTotalCount(
-      "Net.HttpProxy.ConnectLatency.Secure.Success", is_secure_proxy ? 1 : 0);
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, ProxyDelegateExtraHeaders) {
-  // It's pretty much impossible to make the SPDY case behave synchronously
-  // so we skip this test for SPDY.
-  if (GetParam() == SPDY)
-    return;
-
-  TestProxyDelegate proxy_delegate;
-  InitPoolWithProxyDelegate(&proxy_delegate);
-
-  const ProxyServer proxy_server(
-      GetParam() == HTTP ? ProxyServer::SCHEME_HTTP : ProxyServer::SCHEME_HTTPS,
-      HostPortPair(GetParam() == HTTP ? kHttpProxyHost : kHttpsProxyHost,
-                   GetParam() == HTTP ? 80 : 443));
-  const std::string request =
-      "CONNECT www.google.com:443 HTTP/1.1\r\n"
-      "Host: www.google.com:443\r\n"
-      "Proxy-Connection: keep-alive\r\n"
-      "Foo: " +
-      proxy_server.ToURI() + "\r\n\r\n";
-  MockWrite writes[] = {
-      MockWrite(SYNCHRONOUS, 0, request.c_str()),
-  };
-
-  const std::string response_header_name = "Foo";
-  const std::string response_header_value = "Response";
-  const std::string response = "HTTP/1.1 200 Connection Established\r\n" +
-                               response_header_name + ": " +
-                               response_header_value + "\r\n\r\n";
-  MockRead reads[] = {
-      MockRead(SYNCHRONOUS, 1, response.c_str()),
-  };
-
-  Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>());
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsOk());
-
-  proxy_delegate.VerifyOnHttp1TunnelHeadersReceived(
-      proxy_server, response_header_name, response_header_value);
-}
-
-// Make sure that HttpProxyConnectJob passes on its priority to its
-// (non-SSL) socket request on Init.
-TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) {
-  // Make request hang during host resolution, so can observe priority there.
-  session_deps_.host_resolver->set_synchronous_mode(false);
-  session_deps_.host_resolver->set_ondemand_mode(true);
-
-  EXPECT_THAT(
-      handle_.Init("a", CreateNoTunnelParams(), HIGHEST, SocketTag(),
-                   ClientSocketPool::RespectLimits::ENABLED,
-                   CompletionOnceCallback(), pool_.get(), NetLogWithSource()),
-      IsError(ERR_IO_PENDING));
-  EXPECT_EQ(HIGHEST, session_deps_.host_resolver->last_request_priority());
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, SetPriority) {
-  // Make request hang during host resolution, so can observe priority changes
-  // there.
-  session_deps_.host_resolver->set_synchronous_mode(false);
-  session_deps_.host_resolver->set_ondemand_mode(true);
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  // For HTTPS requests, the H2 code will attempt to resolve the host name from
-  // the cache before the ConnectJob gets stuck trying to resolve the host name.
-  // Simplest to just add up total number of resolves to figure the resolution
-  // request being waited on.
-  int host_resolve_request_id =
-      session_deps_.host_resolver->num_resolve() +
-      session_deps_.host_resolver->num_resolve_from_cache();
-
-  EXPECT_EQ(LOW, session_deps_.host_resolver->request_priority(
-                     host_resolve_request_id));
-
-  handle_.SetPriority(HIGHEST);
-  EXPECT_EQ(HIGHEST, session_deps_.host_resolver->request_priority(
-                         host_resolve_request_id));
-}
-
 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
   MockWrite writes[] = {
       MockWrite(ASYNC, 0,
@@ -519,94 +352,6 @@
   EXPECT_TRUE(handle_.socket()->IsConnected());
 }
 
-// Make sure that HttpProxyConnectJob passes on its priority to its
-// SPDY session's socket request on Init, and on SetPriority.
-TEST_P(HttpProxyClientSocketPoolTest, SetSpdySessionSocketRequestPriority) {
-  if (GetParam() != SPDY)
-    return;
-
-  spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect(
-      kAuthHeaders, kAuthHeadersSize, 1, HIGHEST,
-      HostPortPair("www.google.com", 443)));
-  MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)};
-  spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(NULL, 0, 1));
-  MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC),
-                           MockRead(ASYNC, 0, 2)};
-
-  Initialize(base::span<MockRead>(), base::span<MockWrite>(), spdy_reads,
-             spdy_writes);
-  AddAuthToCache();
-
-  EXPECT_EQ(
-      ERR_IO_PENDING,
-      handle_.Init("a", CreateTunnelParams(), MEDIUM, SocketTag(),
-                   ClientSocketPool::RespectLimits::ENABLED,
-                   callback_.callback(), pool_.get(), NetLogWithSource()));
-
-  handle_.SetPriority(HIGHEST);
-  // Expect frame with HIGHEST priority, not MEDIUM.
-  EXPECT_THAT(callback_.WaitForResult(), IsOk());
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
-  if (GetParam() == SPDY)
-    return;
-  data_.reset(new SequencedSocketData());
-  data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED));
-
-  socket_factory()->AddSocketDataProvider(data_.get());
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED));
-
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  bool is_secure_proxy = GetParam() == HTTPS;
-  histogram_tester().ExpectTotalCount(
-      "Net.HttpProxy.ConnectLatency.Insecure.Error", is_secure_proxy ? 0 : 1);
-  histogram_tester().ExpectTotalCount(
-      "Net.HttpProxy.ConnectLatency.Secure.Error", is_secure_proxy ? 1 : 0);
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, SSLError) {
-  if (GetParam() == HTTP)
-    return;
-  data_.reset(new SequencedSocketData());
-  data_->set_connect_data(MockConnect(ASYNC, OK));
-  socket_factory()->AddSocketDataProvider(data_.get());
-
-  ssl_data_.reset(new SSLSocketDataProvider(ASYNC,
-                                            ERR_CERT_AUTHORITY_INVALID));
-  if (GetParam() == SPDY) {
-    InitializeSpdySsl();
-  }
-  socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  EXPECT_THAT(callback_.WaitForResult(),
-              IsError(ERR_PROXY_CERTIFICATE_INVALID));
-
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-  histogram_tester().ExpectTotalCount(
-      "Net.HttpProxy.ConnectLatency.Secure.Error", 1);
-  histogram_tester().ExpectTotalCount(
-      "Net.HttpProxy.ConnectLatency.Insecure.Error", 0);
-}
-
 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) {
   if (GetParam() == HTTP)
     return;
@@ -639,119 +384,6 @@
       "Net.HttpProxy.ConnectLatency.Insecure.Error", 0);
 }
 
-TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) {
-  MockWrite writes[] = {
-      MockWrite(ASYNC, 0,
-                "CONNECT www.google.com:443 HTTP/1.1\r\n"
-                "Host: www.google.com:443\r\n"
-                "Proxy-Connection: keep-alive\r\n"
-                "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
-  };
-  MockRead reads[] = {
-    MockRead(ASYNC, 1, "HTTP/1.1 200 Conn"),
-    MockRead(ASYNC, ERR_CONNECTION_CLOSED, 2),
-  };
-  spdy::SpdySerializedFrame req(
-      spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW,
-                                      HostPortPair("www.google.com", 443)));
-  MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)};
-  MockRead spdy_reads[] = {
-    MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1),
-  };
-
-  Initialize(reads, writes, spdy_reads, spdy_writes);
-  AddAuthToCache();
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  if (GetParam() == SPDY) {
-    // SPDY cannot process a headers block unless it's complete and so it
-    // returns ERR_CONNECTION_CLOSED in this case.
-    EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
-  } else {
-    EXPECT_THAT(callback_.WaitForResult(),
-                IsError(ERR_RESPONSE_HEADERS_TRUNCATED));
-  }
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, Tunnel1xxResponse) {
-  // Tests that 1xx responses are rejected for a CONNECT request.
-  if (GetParam() == SPDY) {
-    // SPDY doesn't have 1xx responses.
-    return;
-  }
-
-  MockWrite writes[] = {
-      MockWrite(ASYNC, 0,
-                "CONNECT www.google.com:443 HTTP/1.1\r\n"
-                "Host: www.google.com:443\r\n"
-                "Proxy-Connection: keep-alive\r\n\r\n"),
-  };
-  MockRead reads[] = {
-    MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"),
-    MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"),
-  };
-
-  Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>());
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_TUNNEL_CONNECTION_FAILED));
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) {
-  MockWrite writes[] = {
-      MockWrite(ASYNC, 0,
-                "CONNECT www.google.com:443 HTTP/1.1\r\n"
-                "Host: www.google.com:443\r\n"
-                "Proxy-Connection: keep-alive\r\n"
-                "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
-  };
-  MockRead reads[] = {
-    MockRead(ASYNC, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"),
-  };
-  spdy::SpdySerializedFrame req(
-      spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW,
-                                      HostPortPair("www.google.com", 443)));
-  spdy::SpdySerializedFrame rst(
-      spdy_util_.ConstructSpdyRstStream(1, spdy::ERROR_CODE_CANCEL));
-  MockWrite spdy_writes[] = {
-      CreateMockWrite(req, 0, ASYNC), CreateMockWrite(rst, 2, ASYNC),
-  };
-  spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyReplyError(1));
-  MockRead spdy_reads[] = {
-      CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3),
-  };
-
-  Initialize(reads, writes, spdy_reads, spdy_writes);
-  AddAuthToCache();
-
-  int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(),
-                        ClientSocketPool::RespectLimits::ENABLED,
-                        callback_.callback(), pool_.get(), NetLogWithSource());
-  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-
-  rv = callback_.WaitForResult();
-  // All Proxy CONNECT responses are not trustworthy
-  EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED));
-  EXPECT_FALSE(handle_.is_initialized());
-  EXPECT_FALSE(handle_.socket());
-}
-
 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupRedirect) {
   const std::string redirectTarget = "https://foo.google.com/";
 
@@ -831,159 +463,6 @@
   }
 }
 
-TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolMinTimeout) {
-  // Set RTT estimate to a low value.
-  base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(1);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-
-  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
-
-  // Test against a large value.
-  EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout());
-
-#if (defined(OS_ANDROID) || defined(OS_IOS))
-  EXPECT_EQ(base::TimeDelta::FromSeconds(8), GetProxyConnectionTimeout());
-#else
-  EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout());
-#endif
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolMaxTimeout) {
-  // Set RTT estimate to a high value.
-  base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(100);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-
-  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
-
-  // Test against a large value.
-  EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout());
-
-#if (defined(OS_ANDROID) || defined(OS_IOS))
-  EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout());
-#else
-  EXPECT_EQ(base::TimeDelta::FromSeconds(60), GetProxyConnectionTimeout());
-#endif
-}
-
-// Tests the connection timeout values when the field trial parameters are
-// specified.
-TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolTimeoutWithExperiment) {
-  // Timeout should be kMultiplier times the HTTP RTT estimate.
-  const int kMultiplier = 4;
-  const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(8);
-  const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(20);
-
-  InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier,
-                                          kMinTimeout, kMaxTimeout);
-  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
-
-  base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(4);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  base::TimeDelta expected_connection_timeout = kMultiplier * rtt_estimate;
-  EXPECT_EQ(expected_connection_timeout, GetProxyConnectionTimeout());
-
-  // Connection timeout should not exceed kMaxTimeout.
-  rtt_estimate = base::TimeDelta::FromSeconds(25);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout());
-
-  // Connection timeout should not be less than kMinTimeout.
-  rtt_estimate = base::TimeDelta::FromSeconds(0);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout());
-}
-
-// Tests the connection timeout values when the field trial parameters are
-// specified.
-TEST_P(HttpProxyClientSocketPoolTest,
-       ProxyPoolTimeoutWithExperimentDifferentParams) {
-  // Timeout should be kMultiplier times the HTTP RTT estimate.
-  const int kMultiplier = 3;
-  const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2);
-  const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30);
-
-  InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier,
-                                          kMinTimeout, kMaxTimeout);
-  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
-
-  base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(2);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout());
-
-  // A change in RTT estimate should also change the connection timeout.
-  rtt_estimate = base::TimeDelta::FromSeconds(7);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout());
-
-  // Connection timeout should not exceed kMaxTimeout.
-  rtt_estimate = base::TimeDelta::FromSeconds(35);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout());
-
-  // Connection timeout should not be less than kMinTimeout.
-  rtt_estimate = base::TimeDelta::FromSeconds(0);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout());
-}
-
-TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolTimeoutWithConnectionProperty) {
-  const int kSecureMultiplier = 3;
-  const int kNonSecureMultiplier = 5;
-  const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2);
-  const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30);
-
-  InitAdaptiveTimeoutFieldTrialWithParams(
-      false, kSecureMultiplier, kNonSecureMultiplier, kMinTimeout, kMaxTimeout);
-
-  HttpProxyClientSocketPool::HttpProxyConnectJobFactory job_factory(
-      transport_socket_pool(), ssl_socket_pool(), nullptr, estimator(),
-      nullptr);
-
-  const base::TimeDelta kRttEstimate = base::TimeDelta::FromSeconds(2);
-  estimator()->SetStartTimeNullHttpRtt(kRttEstimate);
-  // By default, connection timeout should return the timeout for secure
-  // proxies.
-  if (GetParam() != HTTP) {
-    EXPECT_EQ(kSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout());
-  } else {
-    EXPECT_EQ(kNonSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout());
-  }
-}
-
-// Tests the connection timeout values when the field trial parameters are not
-// specified.
-TEST_P(HttpProxyClientSocketPoolTest,
-       ProxyPoolTimeoutWithExperimentDefaultParams) {
-  InitAdaptiveTimeoutFieldTrialWithParams(true, 0, 0, base::TimeDelta(),
-                                          base::TimeDelta());
-  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
-
-  // Timeout should be |http_rtt_multiplier| times the HTTP RTT
-  // estimate.
-  base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(10);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  // Connection timeout should not be less than the HTTP RTT estimate.
-  EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout());
-
-  // A change in RTT estimate should also change the connection timeout.
-  rtt_estimate = base::TimeDelta::FromSeconds(10);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  // Connection timeout should not be less than the HTTP RTT estimate.
-  EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout());
-
-  // Set RTT to a very large value.
-  rtt_estimate = base::TimeDelta::FromMinutes(60);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_GT(rtt_estimate, GetProxyConnectionTimeout());
-
-  // Set RTT to a very small value.
-  rtt_estimate = base::TimeDelta::FromSeconds(0);
-  estimator()->SetStartTimeNullHttpRtt(rtt_estimate);
-  EXPECT_LT(rtt_estimate, GetProxyConnectionTimeout());
-}
-
-// It would be nice to also test the timeouts in HttpProxyClientSocketPool.
-
 // Test that SocketTag passed into HttpProxyClientSocketPool is applied to
 // returned underlying TCP sockets.
 #if defined(OS_ANDROID)
diff --git a/net/http/http_proxy_client_socket_wrapper.cc b/net/http/http_proxy_client_socket_wrapper.cc
index 0ffb067..8ff84dd 100644
--- a/net/http/http_proxy_client_socket_wrapper.cc
+++ b/net/http/http_proxy_client_socket_wrapper.cc
@@ -40,7 +40,7 @@
     const std::string& group_name,
     RequestPriority priority,
     const SocketTag& socket_tag,
-    ClientSocketPool::RespectLimits respect_limits,
+    bool respect_limits,
     base::TimeDelta connect_timeout_duration,
     base::TimeDelta proxy_negotiation_timeout_duration,
     TransportClientSocketPool* transport_pool,
@@ -143,7 +143,7 @@
 }
 
 void HttpProxyClientSocketWrapper::SetPriority(RequestPriority priority) {
-  if (respect_limits_ == ClientSocketPool::RespectLimits::DISABLED) {
+  if (!respect_limits_) {
     DCHECK_EQ(MAXIMUM_PRIORITY, priority_);
     return;
   }
@@ -503,7 +503,9 @@
       group_name_,
       TransportClientSocketPool::SocketParams::CreateFromTransportSocketParams(
           transport_params_),
-      priority_, initial_socket_tag_, respect_limits_,
+      priority_, initial_socket_tag_,
+      respect_limits_ ? ClientSocketPool::RespectLimits::ENABLED
+                      : ClientSocketPool::RespectLimits::DISABLED,
       base::Bind(&HttpProxyClientSocketWrapper::OnIOComplete,
                  base::Unretained(this)),
       transport_pool_, net_log_);
diff --git a/net/http/http_proxy_client_socket_wrapper.h b/net/http/http_proxy_client_socket_wrapper.h
index 7b4bff1..eb6ad4cd 100644
--- a/net/http/http_proxy_client_socket_wrapper.h
+++ b/net/http/http_proxy_client_socket_wrapper.h
@@ -59,7 +59,7 @@
       const std::string& group_name,
       RequestPriority priority,
       const SocketTag& socket_tag,
-      ClientSocketPool::RespectLimits respect_limits,
+      bool respect_limits,
       base::TimeDelta connect_timeout_duration,
       base::TimeDelta proxy_negotiation_timeout_duration,
       TransportClientSocketPool* transport_pool,
@@ -190,7 +190,7 @@
   const std::string group_name_;
   RequestPriority priority_;
   const SocketTag initial_socket_tag_;
-  ClientSocketPool::RespectLimits respect_limits_;
+  bool respect_limits_;
   const base::TimeDelta connect_timeout_duration_;
   const base::TimeDelta proxy_negotiation_timeout_duration_;
 
diff --git a/net/http/http_proxy_client_socket_wrapper_unittest.cc b/net/http/http_proxy_client_socket_wrapper_unittest.cc
index 2fccc2d..93828a5 100644
--- a/net/http/http_proxy_client_socket_wrapper_unittest.cc
+++ b/net/http/http_proxy_client_socket_wrapper_unittest.cc
@@ -286,10 +286,10 @@
                           SSLConfig(), privacy_mode_);
   transport_params = nullptr;
 
-  client_socket_wrapper_.reset(new HttpProxyClientSocketWrapper(
+  client_socket_wrapper_ = std::make_unique<HttpProxyClientSocketWrapper>(
       /*group_name=*/std::string(), /*requiest_priority=*/DEFAULT_PRIORITY,
       /*socket_tag=*/SocketTag(),
-      /*respect_limits=*/ClientSocketPool::RespectLimits::ENABLED,
+      /*respect_limits=*/true,
       /*connect_timeout_duration=*/base::TimeDelta::FromHours(1),
       /*proxy_negotiation_timeout_duration=*/base::TimeDelta::FromHours(1),
       /*transport_pool=*/nullptr, /*ssl_pool=*/nullptr,
@@ -297,7 +297,7 @@
       endpoint_host_port_, &http_auth_cache_, http_auth_handler_factory_.get(),
       /*spdy_session_pool=*/nullptr, quic_stream_factory_.get(),
       /*is_trusted_proxy=*/false, /*tunnel=*/true, /*proxy_delegate=*/nullptr,
-      TRAFFIC_ANNOTATION_FOR_TESTS, net_log_));
+      TRAFFIC_ANNOTATION_FOR_TESTS, net_log_);
 
   TestCompletionCallback callback;
   client_socket_wrapper_->Connect(callback.callback());
@@ -344,10 +344,10 @@
   transport_params = nullptr;
   SocketTag tag(getuid(), 0x87654321);
 
-  client_socket_wrapper_.reset(new HttpProxyClientSocketWrapper(
+  client_socket_wrapper_ = std::make_unique<HttpProxyClientSocketWrapper>(
       /*group_name=*/std::string(), /*requiest_priority=*/DEFAULT_PRIORITY,
       /*socket_tag=*/tag,
-      /*respect_limits=*/ClientSocketPool::RespectLimits::ENABLED,
+      /*respect_limits=*/true,
       /*connect_timeout_duration=*/base::TimeDelta::FromHours(1),
       /*proxy_negotiation_timeout_duration=*/base::TimeDelta::FromHours(1),
       /*transport_pool=*/nullptr, /*ssl_pool=*/nullptr,
@@ -355,7 +355,7 @@
       endpoint_host_port_, &http_auth_cache_, http_auth_handler_factory_.get(),
       /*spdy_session_pool=*/nullptr, quic_stream_factory_.get(),
       /*is_trusted_proxy=*/false, /*tunnel=*/true, /*proxy_delegate=*/nullptr,
-      TRAFFIC_ANNOTATION_FOR_TESTS, net_log_));
+      TRAFFIC_ANNOTATION_FOR_TESTS, net_log_);
 
   TestCompletionCallback callback;
   client_socket_wrapper_->Connect(callback.callback());
diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc
new file mode 100644
index 0000000..4b42f1f
--- /dev/null
+++ b/net/http/http_proxy_connect_job.cc
@@ -0,0 +1,302 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/http/http_proxy_connect_job.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/metrics/field_trial.h"
+#include "base/metrics/field_trial_params.h"
+#include "base/no_destructor.h"
+#include "base/numerics/ranges.h"
+#include "base/optional.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "build/build_config.h"
+#include "net/base/net_errors.h"
+#include "net/http/http_proxy_client_socket_wrapper.h"
+#include "net/log/net_log_source_type.h"
+#include "net/log/net_log_with_source.h"
+#include "net/nqe/network_quality_estimator.h"
+#include "net/socket/client_socket_factory.h"
+#include "net/socket/client_socket_handle.h"
+#include "net/socket/ssl_client_socket.h"
+#include "net/socket/ssl_connect_job.h"
+#include "net/socket/transport_client_socket_pool.h"
+#include "net/socket/transport_connect_job.h"
+#include "net/spdy/spdy_proxy_client_socket.h"
+#include "net/spdy/spdy_session.h"
+#include "net/spdy/spdy_session_pool.h"
+#include "net/spdy/spdy_stream.h"
+#include "net/ssl/ssl_cert_request_info.h"
+#include "url/gurl.h"
+
+namespace net {
+
+namespace {
+
+// HttpProxyConnectJobs will time out after this many seconds.  Note this is in
+// addition to the timeout for the transport socket.
+#if defined(OS_ANDROID) || defined(OS_IOS)
+const int kHttpProxyConnectJobTimeoutInSeconds = 10;
+#else
+const int kHttpProxyConnectJobTimeoutInSeconds = 30;
+#endif
+
+class HttpProxyTimeoutExperiments {
+ public:
+  HttpProxyTimeoutExperiments() { Init(); }
+
+  ~HttpProxyTimeoutExperiments() = default;
+
+  void Init() {
+#if defined(OS_ANDROID) || defined(OS_IOS)
+    min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
+        GetInt32Param("min_proxy_connection_timeout_seconds", 8));
+    max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
+        GetInt32Param("max_proxy_connection_timeout_seconds", 30));
+#else
+    min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
+        GetInt32Param("min_proxy_connection_timeout_seconds", 30));
+    max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds(
+        GetInt32Param("max_proxy_connection_timeout_seconds", 60));
+#endif
+    ssl_http_rtt_multiplier_ = GetInt32Param("ssl_http_rtt_multiplier", 10);
+    non_ssl_http_rtt_multiplier_ =
+        GetInt32Param("non_ssl_http_rtt_multiplier", 5);
+
+    DCHECK_LT(0, ssl_http_rtt_multiplier_);
+    DCHECK_LT(0, non_ssl_http_rtt_multiplier_);
+    DCHECK_LE(base::TimeDelta(), min_proxy_connection_timeout_);
+    DCHECK_LE(base::TimeDelta(), max_proxy_connection_timeout_);
+    DCHECK_LE(min_proxy_connection_timeout_, max_proxy_connection_timeout_);
+  }
+
+  base::TimeDelta min_proxy_connection_timeout() const {
+    return min_proxy_connection_timeout_;
+  }
+  base::TimeDelta max_proxy_connection_timeout() const {
+    return max_proxy_connection_timeout_;
+  }
+  int32_t ssl_http_rtt_multiplier() const { return ssl_http_rtt_multiplier_; }
+  int32_t non_ssl_http_rtt_multiplier() const {
+    return non_ssl_http_rtt_multiplier_;
+  }
+
+ private:
+  // Returns the value of the parameter |param_name| for the field trial
+  // "NetAdaptiveProxyConnectionTimeout". If the value of the parameter is
+  // unavailable, then |default_value| is available.
+  static int32_t GetInt32Param(const std::string& param_name,
+                               int32_t default_value) {
+    int32_t param;
+    if (!base::StringToInt(base::GetFieldTrialParamValue(
+                               "NetAdaptiveProxyConnectionTimeout", param_name),
+                           &param)) {
+      return default_value;
+    }
+    return param;
+  }
+
+  // For secure proxies, the connection timeout is set to
+  // |ssl_http_rtt_multiplier_| times the HTTP RTT estimate. For insecure
+  // proxies, the connection timeout is set to |non_ssl_http_rtt_multiplier_|
+  // times the HTTP RTT estimate. In either case, the connection timeout
+  // is clamped to be between |min_proxy_connection_timeout_| and
+  // |max_proxy_connection_timeout_|.
+  base::TimeDelta min_proxy_connection_timeout_;
+  base::TimeDelta max_proxy_connection_timeout_;
+  int32_t ssl_http_rtt_multiplier_;
+  int32_t non_ssl_http_rtt_multiplier_;
+};
+
+HttpProxyTimeoutExperiments* GetProxyTimeoutExperiments() {
+  static base::NoDestructor<HttpProxyTimeoutExperiments>
+      proxy_timeout_experiments;
+  return proxy_timeout_experiments.get();
+}
+
+}  // namespace
+
+HttpProxySocketParams::HttpProxySocketParams(
+    const scoped_refptr<TransportSocketParams>& transport_params,
+    const scoped_refptr<SSLSocketParams>& ssl_params,
+    quic::QuicTransportVersion quic_version,
+    const std::string& user_agent,
+    const HostPortPair& endpoint,
+    HttpAuthCache* http_auth_cache,
+    HttpAuthHandlerFactory* http_auth_handler_factory,
+    SpdySessionPool* spdy_session_pool,
+    QuicStreamFactory* quic_stream_factory,
+    bool is_trusted_proxy,
+    bool tunnel,
+    const NetworkTrafficAnnotationTag traffic_annotation)
+    : transport_params_(transport_params),
+      ssl_params_(ssl_params),
+      quic_version_(quic_version),
+      spdy_session_pool_(spdy_session_pool),
+      quic_stream_factory_(quic_stream_factory),
+      user_agent_(user_agent),
+      endpoint_(endpoint),
+      http_auth_cache_(tunnel ? http_auth_cache : NULL),
+      http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL),
+      is_trusted_proxy_(is_trusted_proxy),
+      tunnel_(tunnel),
+      traffic_annotation_(traffic_annotation) {
+  // If doing a QUIC proxy, |quic_version| must not be
+  // quic::QUIC_VERSION_UNSUPPORTED, and |ssl_params| must be valid while
+  // |transport_params| is null. Otherwise, |quic_version| must be
+  // quic::QUIC_VERSION_UNSUPPORTED, and exactly one of |transport_params| or
+  // |ssl_params| must be set.
+  DCHECK(quic_version_ == quic::QUIC_VERSION_UNSUPPORTED
+             ? (bool)transport_params != (bool)ssl_params
+             : !transport_params && ssl_params);
+  // Exactly one of |transport_params_| and |ssl_params_| must be non-null.
+  DCHECK(transport_params_ || ssl_params_);
+  DCHECK(!transport_params_ || !ssl_params_);
+}
+
+HttpProxySocketParams::~HttpProxySocketParams() = default;
+
+HttpProxyConnectJob::HttpProxyConnectJob(
+    const std::string& group_name,
+    RequestPriority priority,
+    const SocketTag& socket_tag,
+    bool respect_limits,
+    const scoped_refptr<HttpProxySocketParams>& params,
+    ProxyDelegate* proxy_delegate,
+    TransportClientSocketPool* transport_pool,
+    TransportClientSocketPool* ssl_pool,
+    NetworkQualityEstimator* network_quality_estimator,
+    Delegate* delegate,
+    NetLog* net_log)
+    : ConnectJob(
+          group_name,
+          base::TimeDelta() /* The socket takes care of timeouts */,
+          priority,
+          socket_tag,
+          respect_limits,
+          delegate,
+          NetLogWithSource::Make(net_log,
+                                 NetLogSourceType::HTTP_PROXY_CONNECT_JOB)),
+      client_socket_(std::make_unique<HttpProxyClientSocketWrapper>(
+          group_name,
+          priority,
+          socket_tag,
+          respect_limits,
+          ConnectionTimeout(*params, network_quality_estimator),
+          base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds),
+          transport_pool,
+          ssl_pool,
+          params->transport_params(),
+          params->ssl_params(),
+          params->quic_version(),
+          params->user_agent(),
+          params->endpoint(),
+          params->http_auth_cache(),
+          params->http_auth_handler_factory(),
+          params->spdy_session_pool(),
+          params->quic_stream_factory(),
+          params->is_trusted_proxy(),
+          params->tunnel(),
+          proxy_delegate,
+          params->traffic_annotation(),
+          this->net_log())) {}
+
+HttpProxyConnectJob::~HttpProxyConnectJob() = default;
+
+LoadState HttpProxyConnectJob::GetLoadState() const {
+  return client_socket_->GetConnectLoadState();
+}
+
+bool HttpProxyConnectJob::HasEstablishedConnection() const {
+  // TODO(https://crbug.com/472729): Implement this, as nested pools are
+  // removed.
+  return false;
+}
+
+void HttpProxyConnectJob::GetAdditionalErrorState(ClientSocketHandle* handle) {
+  if (error_response_info_) {
+    handle->set_ssl_error_response_info(*error_response_info_);
+    handle->set_is_ssl_error(true);
+  }
+}
+
+base::TimeDelta HttpProxyConnectJob::ConnectionTimeout(
+    const HttpProxySocketParams& params,
+    const NetworkQualityEstimator* network_quality_estimator) {
+  bool is_https = params.ssl_params() != nullptr;
+  // HTTP proxy connections can't be on top of proxy connections.
+  DCHECK(!is_https ||
+         params.ssl_params()->GetConnectionType() == SSLSocketParams::DIRECT);
+
+  if (network_quality_estimator) {
+    base::Optional<base::TimeDelta> http_rtt_estimate =
+        network_quality_estimator->GetHttpRTT();
+    if (http_rtt_estimate) {
+      int32_t multiplier =
+          is_https
+              ? GetProxyTimeoutExperiments()->ssl_http_rtt_multiplier()
+              : GetProxyTimeoutExperiments()->non_ssl_http_rtt_multiplier();
+      base::TimeDelta timeout = base::TimeDelta::FromMicroseconds(
+          multiplier * http_rtt_estimate.value().InMicroseconds());
+      // Ensure that connection timeout is between
+      // |min_proxy_connection_timeout_| and |max_proxy_connection_timeout_|.
+      return base::ClampToRange(
+          timeout, GetProxyTimeoutExperiments()->min_proxy_connection_timeout(),
+          GetProxyTimeoutExperiments()->max_proxy_connection_timeout());
+    }
+  }
+
+  // Return the default proxy connection timeout.
+  base::TimeDelta nested_job_timeout;
+#if !defined(OS_ANDROID) && !defined(OS_IOS)
+  if (is_https) {
+    nested_job_timeout = SSLConnectJob::ConnectionTimeout(
+        *params.ssl_params(), network_quality_estimator);
+  } else {
+    nested_job_timeout = TransportConnectJob::ConnectionTimeout();
+  }
+#endif  // !defined(OS_ANDROID) && !defined(OS_IOS)
+
+  return nested_job_timeout +
+         base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds);
+}
+
+void HttpProxyConnectJob::UpdateFieldTrialParametersForTesting() {
+  GetProxyTimeoutExperiments()->Init();
+}
+
+int HttpProxyConnectJob::ConnectInternal() {
+  int result = client_socket_->Connect(base::BindOnce(
+      &HttpProxyConnectJob::OnConnectComplete, base::Unretained(this)));
+  return HandleConnectResult(result);
+}
+
+void HttpProxyConnectJob::ChangePriorityInternal(RequestPriority priority) {
+  if (client_socket_)
+    client_socket_->SetPriority(priority);
+}
+
+void HttpProxyConnectJob::OnConnectComplete(int result) {
+  DCHECK_NE(ERR_IO_PENDING, result);
+  result = HandleConnectResult(result);
+  NotifyDelegateOfCompletion(result);
+  // |this| will have been deleted at this point.
+}
+
+int HttpProxyConnectJob::HandleConnectResult(int result) {
+  if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED)
+    error_response_info_ = client_socket_->GetAdditionalErrorState();
+
+  if (result == OK || result == ERR_PROXY_AUTH_REQUESTED ||
+      result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) {
+    SetSocket(std::move(client_socket_));
+  }
+  return result;
+}
+
+}  // namespace net
diff --git a/net/http/http_proxy_connect_job.h b/net/http/http_proxy_connect_job.h
new file mode 100644
index 0000000..80d3b6e3
--- /dev/null
+++ b/net/http/http_proxy_connect_job.h
@@ -0,0 +1,159 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_HTTP_HTTP_PROXY_CONNECT_JOB_H_
+#define NET_HTTP_HTTP_PROXY_CONNECT_JOB_H_
+
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/time/time.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/net_export.h"
+#include "net/http/http_auth.h"
+#include "net/http/http_response_info.h"
+#include "net/socket/connect_job.h"
+#include "net/socket/ssl_client_socket.h"
+#include "net/spdy/spdy_session.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
+
+namespace net {
+
+class HttpAuthCache;
+class HttpAuthHandlerFactory;
+class HttpProxyClientSocketWrapper;
+class NetLog;
+class NetworkQualityEstimator;
+class ProxyDelegate;
+class SpdySessionPool;
+class SSLSocketParams;
+class TransportClientSocketPool;
+class TransportSocketParams;
+class QuicStreamFactory;
+
+// HttpProxySocketParams only needs the socket params for one of the proxy
+// types.  The other param must be NULL.  When using an HTTP proxy,
+// |transport_params| must be set.  When using an HTTPS proxy or QUIC proxy,
+// |ssl_params| must be set. Also, if using a QUIC proxy, |quic_version| must
+// not be quic::QUIC_VERSION_UNSUPPORTED.
+class NET_EXPORT_PRIVATE HttpProxySocketParams
+    : public base::RefCounted<HttpProxySocketParams> {
+ public:
+  HttpProxySocketParams(
+      const scoped_refptr<TransportSocketParams>& transport_params,
+      const scoped_refptr<SSLSocketParams>& ssl_params,
+      quic::QuicTransportVersion quic_version,
+      const std::string& user_agent,
+      const HostPortPair& endpoint,
+      HttpAuthCache* http_auth_cache,
+      HttpAuthHandlerFactory* http_auth_handler_factory,
+      SpdySessionPool* spdy_session_pool,
+      QuicStreamFactory* quic_stream_factory,
+      bool is_trusted_proxy,
+      bool tunnel,
+      const NetworkTrafficAnnotationTag traffic_annotation);
+
+  const scoped_refptr<TransportSocketParams>& transport_params() const {
+    return transport_params_;
+  }
+  const scoped_refptr<SSLSocketParams>& ssl_params() const {
+    return ssl_params_;
+  }
+  quic::QuicTransportVersion quic_version() const { return quic_version_; }
+  const std::string& user_agent() const { return user_agent_; }
+  const HostPortPair& endpoint() const { return endpoint_; }
+  HttpAuthCache* http_auth_cache() const { return http_auth_cache_; }
+  HttpAuthHandlerFactory* http_auth_handler_factory() const {
+    return http_auth_handler_factory_;
+  }
+  SpdySessionPool* spdy_session_pool() { return spdy_session_pool_; }
+  QuicStreamFactory* quic_stream_factory() const {
+    return quic_stream_factory_;
+  }
+  bool is_trusted_proxy() const { return is_trusted_proxy_; }
+  bool tunnel() const { return tunnel_; }
+  const NetworkTrafficAnnotationTag traffic_annotation() const {
+    return traffic_annotation_;
+  }
+
+ private:
+  friend class base::RefCounted<HttpProxySocketParams>;
+  ~HttpProxySocketParams();
+
+  const scoped_refptr<TransportSocketParams> transport_params_;
+  const scoped_refptr<SSLSocketParams> ssl_params_;
+  quic::QuicTransportVersion quic_version_;
+  SpdySessionPool* spdy_session_pool_;
+  QuicStreamFactory* quic_stream_factory_;
+  const std::string user_agent_;
+  const HostPortPair endpoint_;
+  HttpAuthCache* const http_auth_cache_;
+  HttpAuthHandlerFactory* const http_auth_handler_factory_;
+  const bool is_trusted_proxy_;
+  const bool tunnel_;
+  const NetworkTrafficAnnotationTag traffic_annotation_;
+
+  DISALLOW_COPY_AND_ASSIGN(HttpProxySocketParams);
+};
+
+// HttpProxyConnectJob optionally establishes a tunnel through the proxy
+// server after connecting the underlying transport socket.
+class NET_EXPORT_PRIVATE HttpProxyConnectJob : public ConnectJob {
+ public:
+  HttpProxyConnectJob(const std::string& group_name,
+                      RequestPriority priority,
+                      const SocketTag& socket_tag,
+                      bool respect_limits,
+                      const scoped_refptr<HttpProxySocketParams>& params,
+                      ProxyDelegate* proxy_delegate,
+                      TransportClientSocketPool* transport_pool,
+                      TransportClientSocketPool* ssl_pool,
+                      NetworkQualityEstimator* network_quality_estimator,
+                      Delegate* delegate,
+                      NetLog* net_log);
+  ~HttpProxyConnectJob() override;
+
+  // ConnectJob methods.
+  LoadState GetLoadState() const override;
+  bool HasEstablishedConnection() const override;
+
+  void GetAdditionalErrorState(ClientSocketHandle* handle) override;
+
+  // Returns the connection timeout that will be used by a HttpProxyConnectJob
+  // created with the specified parameters, given current network conditions.
+  static base::TimeDelta ConnectionTimeout(
+      const HttpProxySocketParams& params,
+      const NetworkQualityEstimator* network_quality_estimator);
+
+  // Updates the field trial parameters used in calculating timeouts.
+  static void UpdateFieldTrialParametersForTesting();
+
+ private:
+  // Begins the tcp connection and the optional Http proxy tunnel.  If the
+  // request is not immediately serviceable (likely), the request will return
+  // ERR_IO_PENDING. An OK return from this function or the callback means
+  // that the connection is established; ERR_PROXY_AUTH_REQUESTED means
+  // that the tunnel needs authentication credentials, the socket will be
+  // returned in this case, and must be released back to the pool; or
+  // a standard net error code will be returned.
+  int ConnectInternal() override;
+
+  void ChangePriorityInternal(RequestPriority priority) override;
+
+  void OnConnectComplete(int result);
+
+  int HandleConnectResult(int result);
+
+  std::unique_ptr<HttpProxyClientSocketWrapper> client_socket_;
+
+  std::unique_ptr<HttpResponseInfo> error_response_info_;
+
+  DISALLOW_COPY_AND_ASSIGN(HttpProxyConnectJob);
+};
+
+}  // namespace net
+
+#endif  // NET_HTTP_HTTP_PROXY_CONNECT_JOB_H_
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc
new file mode 100644
index 0000000..7a149467
--- /dev/null
+++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -0,0 +1,746 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/http/http_proxy_connect_job.h"
+
+#include <map>
+#include <string>
+#include <utility>
+
+#include "base/metrics/field_trial.h"
+#include "base/metrics/field_trial_param_associator.h"
+#include "base/metrics/field_trial_params.h"
+#include "base/stl_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "build/build_config.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/test_proxy_delegate.h"
+#include "net/http/http_network_session.h"
+#include "net/nqe/network_quality_estimator_test_util.h"
+#include "net/socket/client_socket_handle.h"
+#include "net/socket/connect_job_test_util.h"
+#include "net/socket/socket_test_util.h"
+#include "net/socket/socks_connect_job.h"
+#include "net/socket/ssl_connect_job.h"
+#include "net/socket/transport_client_socket_pool.h"
+#include "net/socket/transport_connect_job.h"
+#include "net/spdy/spdy_test_util_common.h"
+#include "net/test/gtest_util.h"
+#include "net/test/test_with_scoped_task_environment.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+namespace {
+
+const char kEndpointHost[] = "www.endpoint.test";
+
+enum HttpProxyType { HTTP, HTTPS, SPDY };
+
+const char kHttpProxyHost[] = "httpproxy.example.test";
+const char kHttpsProxyHost[] = "httpsproxy.example.test";
+
+}  // namespace
+
+class HttpProxyConnectJobTest : public ::testing::TestWithParam<HttpProxyType>,
+                                public WithScopedTaskEnvironment {
+ protected:
+  HttpProxyConnectJobTest()
+      : transport_socket_pool_(32 /* max_sockets */,
+                               6 /* max_sockets_pre_group */,
+                               &socket_factory_,
+                               session_deps_.host_resolver.get(),
+                               session_deps_.cert_verifier.get(),
+                               session_deps_.channel_id_service.get(),
+                               session_deps_.transport_security_state.get(),
+                               session_deps_.cert_transparency_verifier.get(),
+                               session_deps_.ct_policy_enforcer.get(),
+                               nullptr /* ssl_client_session_cache */,
+                               std::string() /* ssl_session_cache_shard */,
+                               session_deps_.ssl_config_service.get(),
+                               nullptr /* socket_performance_watcher_factory */,
+                               nullptr /* network_quality_estimator */,
+                               nullptr /* net_log */),
+        ssl_socket_pool_(32 /* max_sockets */,
+                         6 /* max_sockets_pre_group */,
+                         &socket_factory_,
+                         session_deps_.host_resolver.get(),
+                         session_deps_.cert_verifier.get(),
+                         session_deps_.channel_id_service.get(),
+                         session_deps_.transport_security_state.get(),
+                         session_deps_.cert_transparency_verifier.get(),
+                         session_deps_.ct_policy_enforcer.get(),
+                         nullptr /* ssl_client_session_cache */,
+                         std::string() /* ssl_session_cache_shard */,
+                         session_deps_.ssl_config_service.get(),
+                         nullptr /* socket_performance_watcher_factory */,
+                         nullptr /* network_quality_estimator */,
+                         nullptr /* net_log */),
+        field_trial_list_(nullptr) {
+    session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
+  }
+
+  virtual ~HttpProxyConnectJobTest() {
+    // Reset global field trial parameters to defaults values.
+    base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting();
+    HttpProxyConnectJob::UpdateFieldTrialParametersForTesting();
+  }
+
+  // Initializes the field trial parameters for the field trial that determines
+  // connection timeout based on the network quality.
+  void InitAdaptiveTimeoutFieldTrialWithParams(
+      bool use_default_params,
+      int ssl_http_rtt_multiplier,
+      int non_ssl_http_rtt_multiplier,
+      base::TimeDelta min_proxy_connection_timeout,
+      base::TimeDelta max_proxy_connection_timeout) {
+    std::string trial_name = "NetAdaptiveProxyConnectionTimeout";
+    std::string group_name = "GroupName";
+
+    std::map<std::string, std::string> params;
+    if (!use_default_params) {
+      params["ssl_http_rtt_multiplier"] =
+          base::NumberToString(ssl_http_rtt_multiplier);
+      params["non_ssl_http_rtt_multiplier"] =
+          base::NumberToString(non_ssl_http_rtt_multiplier);
+      params["min_proxy_connection_timeout_seconds"] =
+          base::NumberToString(min_proxy_connection_timeout.InSeconds());
+      params["max_proxy_connection_timeout_seconds"] =
+          base::NumberToString(max_proxy_connection_timeout.InSeconds());
+    }
+    base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting();
+    EXPECT_TRUE(
+        base::AssociateFieldTrialParams(trial_name, group_name, params));
+    EXPECT_TRUE(base::FieldTrialList::CreateFieldTrial(trial_name, group_name));
+
+    // Force static global that reads the field trials to update.
+    HttpProxyConnectJob::UpdateFieldTrialParametersForTesting();
+  }
+
+  scoped_refptr<TransportSocketParams> CreateHttpProxyParams() const {
+    if (GetParam() != HTTP)
+      return nullptr;
+    return base::MakeRefCounted<TransportSocketParams>(
+        HostPortPair(kHttpProxyHost, 80), false, OnHostResolutionCallback());
+  }
+
+  scoped_refptr<SSLSocketParams> CreateHttpsProxyParams() const {
+    if (GetParam() == HTTP)
+      return nullptr;
+    return base::MakeRefCounted<SSLSocketParams>(
+        base::MakeRefCounted<TransportSocketParams>(
+            HostPortPair(kHttpsProxyHost, 443), false,
+            OnHostResolutionCallback()),
+        nullptr, nullptr, HostPortPair(kHttpsProxyHost, 443), SSLConfig(),
+        PRIVACY_MODE_DISABLED);
+  }
+
+  // Returns a correctly constructed HttpProxyParams for the HTTP or HTTPS
+  // proxy.
+  scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) {
+    return base::MakeRefCounted<HttpProxySocketParams>(
+        CreateHttpProxyParams(), CreateHttpsProxyParams(),
+        quic::QUIC_VERSION_UNSUPPORTED, std::string(),
+        HostPortPair(kEndpointHost, tunnel ? 443 : 80),
+        session_->http_auth_cache(), session_->http_auth_handler_factory(),
+        session_->spdy_session_pool(), session_->quic_stream_factory(),
+        /*is_trusted_proxy=*/false, tunnel, TRAFFIC_ANNOTATION_FOR_TESTS);
+  }
+
+  std::unique_ptr<HttpProxyConnectJob> CreateConnectJobForHttpRequest(
+      ConnectJob::Delegate* delegate,
+      RequestPriority priority = DEFAULT_PRIORITY) {
+    return CreateConnectJob(CreateParams(false /* tunnel */), delegate,
+                            priority);
+  }
+
+  std::unique_ptr<HttpProxyConnectJob> CreateConnectJobForTunnel(
+      ConnectJob::Delegate* delegate,
+      RequestPriority priority = DEFAULT_PRIORITY) {
+    return CreateConnectJob(CreateParams(true /* tunnel */), delegate,
+                            priority);
+  }
+
+  std::unique_ptr<HttpProxyConnectJob> CreateConnectJob(
+      scoped_refptr<HttpProxySocketParams> http_proxy_socket_params,
+      ConnectJob::Delegate* delegate,
+      RequestPriority priority) {
+    return std::make_unique<HttpProxyConnectJob>(
+        "group_name", priority, SocketTag(), true /* respect_limits */,
+        std::move(http_proxy_socket_params), proxy_delegate_.get(),
+        &transport_socket_pool_, &ssl_socket_pool_, &network_quality_estimator_,
+        delegate, nullptr /* net_log */);
+  }
+
+  void InitProxyDelegate() {
+    proxy_delegate_ = std::make_unique<TestProxyDelegate>();
+  }
+
+  void Initialize(base::span<const MockRead> reads,
+                  base::span<const MockWrite> writes,
+                  base::span<const MockRead> spdy_reads,
+                  base::span<const MockWrite> spdy_writes,
+                  IoMode connect_and_ssl_io_mode) {
+    if (GetParam() == SPDY) {
+      data_ = std::make_unique<SequencedSocketData>(spdy_reads, spdy_writes);
+    } else {
+      data_ = std::make_unique<SequencedSocketData>(reads, writes);
+    }
+
+    data_->set_connect_data(MockConnect(connect_and_ssl_io_mode, OK));
+
+    socket_factory_.AddSocketDataProvider(data_.get());
+
+    if (GetParam() != HTTP) {
+      ssl_data_ =
+          std::make_unique<SSLSocketDataProvider>(connect_and_ssl_io_mode, OK);
+      if (GetParam() == SPDY) {
+        InitializeSpdySsl(ssl_data_.get());
+      }
+      socket_factory_.AddSSLSocketDataProvider(ssl_data_.get());
+    }
+  }
+
+  void InitializeSpdySsl(SSLSocketDataProvider* ssl_data) {
+    ssl_data->next_proto = kProtoHTTP2;
+  }
+
+  TransportClientSocketPool* transport_socket_pool() {
+    return &transport_socket_pool_;
+  }
+  TransportClientSocketPool* ssl_socket_pool() { return &ssl_socket_pool_; }
+
+  base::TimeDelta GetProxyConnectionTimeout() {
+    // Doesn't actually matter whether or not this is for a tunnel - the
+    // connection timeout is the same, though it probably shouldn't be the same,
+    // since tunnels need an extra round trip.
+    return HttpProxyConnectJob::ConnectionTimeout(
+        *CreateParams(true /* tunnel */), &network_quality_estimator_);
+  }
+
+ protected:
+  std::unique_ptr<TestProxyDelegate> proxy_delegate_;
+
+  std::unique_ptr<SSLSocketDataProvider> ssl_data_;
+  std::unique_ptr<SequencedSocketData> data_;
+  MockClientSocketFactory socket_factory_;
+  SpdySessionDependencies session_deps_;
+
+  TestNetworkQualityEstimator network_quality_estimator_;
+
+  TransportClientSocketPool transport_socket_pool_;
+  TransportClientSocketPool ssl_socket_pool_;
+
+  std::unique_ptr<HttpNetworkSession> session_;
+
+  base::HistogramTester histogram_tester_;
+
+  base::FieldTrialList field_trial_list_;
+
+  SpdyTestUtil spdy_util_;
+
+  TestCompletionCallback callback_;
+};
+
+// All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY)
+// and SPDY.
+INSTANTIATE_TEST_CASE_P(HttpProxyType,
+                        HttpProxyConnectJobTest,
+                        ::testing::Values(HTTP, HTTPS, SPDY));
+
+TEST_P(HttpProxyConnectJobTest, NoTunnel) {
+  InitProxyDelegate();
+  int loop_iterations = 0;
+  for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) {
+    SCOPED_TRACE(io_mode);
+    session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS);
+
+    Initialize(base::span<MockRead>(), base::span<MockWrite>(),
+               base::span<MockRead>(), base::span<MockWrite>(), io_mode);
+
+    TestConnectJobDelegate test_delegate;
+    std::unique_ptr<ConnectJob> connect_job =
+        CreateConnectJobForHttpRequest(&test_delegate);
+    test_delegate.StartJobExpectingResult(connect_job.get(), OK,
+                                          io_mode == SYNCHRONOUS);
+    EXPECT_FALSE(proxy_delegate_->on_before_tunnel_request_called());
+
+    ++loop_iterations;
+    bool is_secure_proxy = GetParam() == HTTPS || GetParam() == SPDY;
+    histogram_tester_.ExpectTotalCount(
+        "Net.HttpProxy.ConnectLatency.Insecure.Success",
+        is_secure_proxy ? 0 : loop_iterations);
+    histogram_tester_.ExpectTotalCount(
+        "Net.HttpProxy.ConnectLatency.Secure.Success",
+        is_secure_proxy ? loop_iterations : 0);
+  }
+}
+
+TEST_P(HttpProxyConnectJobTest, ProxyDelegateExtraHeaders) {
+  // TODO(https://crbug.com/926427): The ProxyDelegate API is currently broken
+  // in the SPDY case.
+  if (GetParam() == SPDY)
+    return;
+
+  InitProxyDelegate();
+
+  ProxyServer proxy_server(
+      GetParam() == HTTP ? ProxyServer::SCHEME_HTTP : ProxyServer::SCHEME_HTTPS,
+      HostPortPair(GetParam() == HTTP ? kHttpProxyHost : kHttpsProxyHost,
+                   GetParam() == HTTP ? 80 : 443));
+  std::string request =
+      "CONNECT www.endpoint.test:443 HTTP/1.1\r\n"
+      "Host: www.endpoint.test:443\r\n"
+      "Proxy-Connection: keep-alive\r\n"
+      "Foo: " +
+      proxy_server.ToURI() + "\r\n\r\n";
+  MockWrite writes[] = {
+      MockWrite(ASYNC, 0, request.c_str()),
+  };
+
+  const char kResponseHeaderName[] = "Foo";
+  const char kResponseHeaderValue[] = "Response";
+  std::string response = base::StringPrintf(
+      "HTTP/1.1 200 Connection Established\r\n"
+      "%s: %s\r\n\r\n",
+      kResponseHeaderName, kResponseHeaderValue);
+  MockRead reads[] = {
+      MockRead(ASYNC, 1, response.c_str()),
+  };
+
+  Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>(),
+             ASYNC);
+
+  TestConnectJobDelegate test_delegate;
+  std::unique_ptr<ConnectJob> connect_job =
+      CreateConnectJobForTunnel(&test_delegate);
+  test_delegate.StartJobExpectingResult(connect_job.get(), OK,
+                                        false /* expect_sync_result */);
+  proxy_delegate_->VerifyOnHttp1TunnelHeadersReceived(
+      proxy_server, kResponseHeaderName, kResponseHeaderValue);
+}
+
+TEST_P(HttpProxyConnectJobTest, RequestPriority) {
+  // Make request hang during host resolution, so can observe priority there.
+  session_deps_.host_resolver->set_ondemand_mode(true);
+
+  // Needed to destroy the ConnectJob in the nested socket pools.
+  // TODO(https://crbug.com/927088): Remove this once there are no nested socket
+  // pools.
+  session_deps_.host_resolver->rules()->AddSimulatedFailure(kHttpProxyHost);
+  session_deps_.host_resolver->rules()->AddSimulatedFailure(kHttpsProxyHost);
+
+  for (int initial_priority = MINIMUM_PRIORITY;
+       initial_priority <= MAXIMUM_PRIORITY; ++initial_priority) {
+    SCOPED_TRACE(initial_priority);
+    for (int new_priority = MINIMUM_PRIORITY; new_priority <= MAXIMUM_PRIORITY;
+         ++new_priority) {
+      SCOPED_TRACE(new_priority);
+      if (initial_priority == new_priority)
+        continue;
+      TestConnectJobDelegate test_delegate;
+      std::unique_ptr<ConnectJob> connect_job = CreateConnectJobForHttpRequest(
+          &test_delegate, static_cast<RequestPriority>(initial_priority));
+      EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING));
+      EXPECT_FALSE(test_delegate.has_result());
+
+      MockHostResolverBase* host_resolver = session_deps_.host_resolver.get();
+      int request_id = host_resolver->num_resolve();
+      EXPECT_EQ(initial_priority, host_resolver->request_priority(request_id));
+
+      connect_job->ChangePriority(static_cast<RequestPriority>(new_priority));
+      EXPECT_EQ(new_priority, host_resolver->request_priority(request_id));
+
+      connect_job->ChangePriority(
+          static_cast<RequestPriority>(initial_priority));
+      EXPECT_EQ(initial_priority, host_resolver->request_priority(request_id));
+
+      // Complete the resolution, which should result in destroying the
+      // connecting socket. Can't just delete the ConnectJob, since that won't
+      // destroy the ConnectJobs in the underlying pools.
+      host_resolver->ResolveAllPending();
+      EXPECT_THAT(test_delegate.WaitForResult(),
+                  test::IsError(ERR_PROXY_CONNECTION_FAILED));
+    }
+  }
+}
+
+// Make sure that HttpProxyConnectJob passes on its priority to its
+// SPDY session's socket request on Init, and on SetPriority.
+TEST_P(HttpProxyConnectJobTest, SetSpdySessionSocketRequestPriority) {
+  if (GetParam() != SPDY)
+    return;
+  session_deps_.host_resolver->set_synchronous_mode(true);
+
+  // The SPDY CONNECT request should have a priority of HIGHEST.
+  spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect(
+      nullptr /* extra_headers */, 0 /* extra_header_count */,
+      1 /* stream_id */, HIGHEST, HostPortPair(kEndpointHost, 443)));
+  MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)};
+  spdy::SpdySerializedFrame resp(
+      spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+  MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC),
+                           MockRead(ASYNC, 0, 2)};
+
+  Initialize(base::span<MockRead>(), base::span<MockWrite>(), spdy_reads,
+             spdy_writes, SYNCHRONOUS);
+
+  TestConnectJobDelegate test_delegate;
+  std::unique_ptr<ConnectJob> connect_job =
+      CreateConnectJobForTunnel(&test_delegate, MEDIUM);
+  EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING));
+  EXPECT_FALSE(test_delegate.has_result());
+
+  connect_job->ChangePriority(HIGHEST);
+
+  // Wait for tunnel to be established. If the frame has a MEDIUM priority
+  // instead of highest, the written data will not match what is expected, and
+  // the test will fail.
+  EXPECT_THAT(test_delegate.WaitForResult(), test::IsOk());
+}
+
+TEST_P(HttpProxyConnectJobTest, TCPError) {
+  // SPDY and HTTPS are identical, as they only differ once a connection is
+  // established.
+  if (GetParam() == SPDY)
+    return;
+  int loop_iterations = 0;
+  for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) {
+    SCOPED_TRACE(io_mode);
+    session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS);
+
+    SequencedSocketData data;
+    data.set_connect_data(MockConnect(io_mode, ERR_CONNECTION_CLOSED));
+    socket_factory_.AddSocketDataProvider(&data);
+
+    TestConnectJobDelegate test_delegate;
+    std::unique_ptr<ConnectJob> connect_job =
+        CreateConnectJobForHttpRequest(&test_delegate);
+    test_delegate.StartJobExpectingResult(
+        connect_job.get(), ERR_PROXY_CONNECTION_FAILED, io_mode == SYNCHRONOUS);
+
+    bool is_secure_proxy = GetParam() == HTTPS;
+    ++loop_iterations;
+    histogram_tester_.ExpectTotalCount(
+        "Net.HttpProxy.ConnectLatency.Insecure.Error",
+        is_secure_proxy ? 0 : loop_iterations);
+    histogram_tester_.ExpectTotalCount(
+        "Net.HttpProxy.ConnectLatency.Secure.Error",
+        is_secure_proxy ? loop_iterations : 0);
+  }
+}
+
+TEST_P(HttpProxyConnectJobTest, SSLError) {
+  if (GetParam() == HTTP)
+    return;
+  int loop_iterations = 0;
+
+  for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) {
+    SCOPED_TRACE(io_mode);
+    session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS);
+
+    SequencedSocketData data;
+    data.set_connect_data(MockConnect(io_mode, OK));
+    socket_factory_.AddSocketDataProvider(&data);
+
+    SSLSocketDataProvider ssl_data(io_mode, ERR_CERT_AUTHORITY_INVALID);
+    if (GetParam() == SPDY) {
+      InitializeSpdySsl(&ssl_data);
+    }
+    socket_factory_.AddSSLSocketDataProvider(&ssl_data);
+
+    TestConnectJobDelegate test_delegate;
+    std::unique_ptr<ConnectJob> connect_job =
+        CreateConnectJobForTunnel(&test_delegate);
+    test_delegate.StartJobExpectingResult(connect_job.get(),
+                                          ERR_PROXY_CERTIFICATE_INVALID,
+                                          io_mode == SYNCHRONOUS);
+
+    ++loop_iterations;
+    histogram_tester_.ExpectTotalCount(
+        "Net.HttpProxy.ConnectLatency.Secure.Error", loop_iterations);
+    histogram_tester_.ExpectTotalCount(
+        "Net.HttpProxy.ConnectLatency.Insecure.Error", 0);
+  }
+}
+
+TEST_P(HttpProxyConnectJobTest, TunnelUnexpectedClose) {
+  for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) {
+    SCOPED_TRACE(io_mode);
+    session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS);
+
+    MockWrite writes[] = {
+        MockWrite(io_mode, 0,
+                  "CONNECT www.endpoint.test:443 HTTP/1.1\r\n"
+                  "Host: www.endpoint.test:443\r\n"
+                  "Proxy-Connection: keep-alive\r\n\r\n"),
+    };
+    MockRead reads[] = {
+        MockRead(io_mode, 1, "HTTP/1.1 200 Conn"),
+        MockRead(io_mode, ERR_CONNECTION_CLOSED, 2),
+    };
+    spdy::SpdySerializedFrame req(SpdyTestUtil().ConstructSpdyConnect(
+        nullptr /*extra_headers */, 0 /*extra_header_count */,
+        1 /* stream_id */, DEFAULT_PRIORITY, HostPortPair(kEndpointHost, 443)));
+    MockWrite spdy_writes[] = {CreateMockWrite(req, 0, io_mode)};
+    // Sync reads don't really work with SPDY, since it constantly reads from
+    // the socket.
+    MockRead spdy_reads[] = {
+        MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1),
+    };
+
+    Initialize(reads, writes, spdy_reads, spdy_writes, io_mode);
+
+    TestConnectJobDelegate test_delegate;
+    std::unique_ptr<ConnectJob> connect_job =
+        CreateConnectJobForTunnel(&test_delegate);
+
+    if (GetParam() == SPDY) {
+      // SPDY cannot process a headers block unless it's complete and so it
+      // returns ERR_CONNECTION_CLOSED in this case. SPDY also doesn't return
+      // this failure synchronously.
+      test_delegate.StartJobExpectingResult(connect_job.get(),
+                                            ERR_CONNECTION_CLOSED,
+                                            false /* expect_sync_result */);
+    } else {
+      test_delegate.StartJobExpectingResult(connect_job.get(),
+                                            ERR_RESPONSE_HEADERS_TRUNCATED,
+                                            io_mode == SYNCHRONOUS);
+    }
+  }
+}
+
+TEST_P(HttpProxyConnectJobTest, Tunnel1xxResponse) {
+  // Tests that 1xx responses are rejected for a CONNECT request.
+  if (GetParam() == SPDY) {
+    // SPDY doesn't have 1xx responses.
+    return;
+  }
+
+  for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) {
+    SCOPED_TRACE(io_mode);
+    session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS);
+
+    MockWrite writes[] = {
+        MockWrite(io_mode, 0,
+                  "CONNECT www.endpoint.test:443 HTTP/1.1\r\n"
+                  "Host: www.endpoint.test:443\r\n"
+                  "Proxy-Connection: keep-alive\r\n\r\n"),
+    };
+    MockRead reads[] = {
+        MockRead(io_mode, 1, "HTTP/1.1 100 Continue\r\n\r\n"),
+        MockRead(io_mode, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"),
+    };
+
+    Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>(),
+               io_mode);
+
+    TestConnectJobDelegate test_delegate;
+    std::unique_ptr<ConnectJob> connect_job =
+        CreateConnectJobForTunnel(&test_delegate);
+    test_delegate.StartJobExpectingResult(connect_job.get(),
+                                          ERR_TUNNEL_CONNECTION_FAILED,
+                                          io_mode == SYNCHRONOUS);
+  }
+}
+
+TEST_P(HttpProxyConnectJobTest, TunnelSetupError) {
+  for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) {
+    SCOPED_TRACE(io_mode);
+    session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS);
+
+    MockWrite writes[] = {
+        MockWrite(io_mode, 0,
+                  "CONNECT www.endpoint.test:443 HTTP/1.1\r\n"
+                  "Host: www.endpoint.test:443\r\n"
+                  "Proxy-Connection: keep-alive\r\n\r\n"),
+    };
+    MockRead reads[] = {
+        MockRead(io_mode, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"),
+    };
+    SpdyTestUtil spdy_util;
+    spdy::SpdySerializedFrame req(spdy_util.ConstructSpdyConnect(
+        nullptr /* extra_headers */, 0 /* extra_header_count */,
+        1 /* stream_id */, LOW, HostPortPair("www.endpoint.test", 443)));
+    spdy::SpdySerializedFrame rst(
+        spdy_util.ConstructSpdyRstStream(1, spdy::ERROR_CODE_CANCEL));
+    MockWrite spdy_writes[] = {
+        CreateMockWrite(req, 0, io_mode),
+        CreateMockWrite(rst, 2, io_mode),
+    };
+    spdy::SpdySerializedFrame resp(spdy_util.ConstructSpdyReplyError(1));
+    // Sync reads don't really work with SPDY, since it constantly reads from
+    // the socket.
+    MockRead spdy_reads[] = {
+        CreateMockRead(resp, 1, ASYNC),
+        MockRead(ASYNC, OK, 3),
+    };
+
+    Initialize(reads, writes, spdy_reads, spdy_writes, io_mode);
+
+    TestConnectJobDelegate test_delegate;
+    std::unique_ptr<ConnectJob> connect_job =
+        CreateConnectJobForTunnel(&test_delegate, LOW);
+    test_delegate.StartJobExpectingResult(
+        connect_job.get(), ERR_TUNNEL_CONNECTION_FAILED,
+        io_mode == SYNCHRONOUS && GetParam() != SPDY);
+    // Need to close the session to prevent reuse in the next loop iteration.
+    session_->spdy_session_pool()->CloseAllSessions();
+  }
+}
+
+TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutMin) {
+  // Set RTT estimate to a low value.
+  base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(1);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+
+  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
+
+  // Test against a large value.
+  EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout());
+
+#if (defined(OS_ANDROID) || defined(OS_IOS))
+  EXPECT_EQ(base::TimeDelta::FromSeconds(8), GetProxyConnectionTimeout());
+#else
+  EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout());
+#endif
+}
+
+TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutMax) {
+  // Set RTT estimate to a high value.
+  base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(100);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+
+  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
+
+  // Test against a large value.
+  EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout());
+
+#if (defined(OS_ANDROID) || defined(OS_IOS))
+  EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout());
+#else
+  EXPECT_EQ(base::TimeDelta::FromSeconds(60), GetProxyConnectionTimeout());
+#endif
+}
+
+// Tests the connection timeout values when the field trial parameters are
+// specified.
+TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutWithExperiment) {
+  // Timeout should be kMultiplier times the HTTP RTT estimate.
+  const int kMultiplier = 4;
+  const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(8);
+  const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(20);
+
+  InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier,
+                                          kMinTimeout, kMaxTimeout);
+  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
+
+  base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(4);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  base::TimeDelta expected_connection_timeout = kMultiplier * rtt_estimate;
+  EXPECT_EQ(expected_connection_timeout, GetProxyConnectionTimeout());
+
+  // Connection timeout should not exceed kMaxTimeout.
+  rtt_estimate = base::TimeDelta::FromSeconds(25);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout());
+
+  // Connection timeout should not be less than kMinTimeout.
+  rtt_estimate = base::TimeDelta::FromSeconds(0);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout());
+}
+
+// Tests the connection timeout values when the field trial parameters are
+// specified.
+TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutExperimentDifferentParams) {
+  // Timeout should be kMultiplier times the HTTP RTT estimate.
+  const int kMultiplier = 3;
+  const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2);
+  const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30);
+
+  InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier,
+                                          kMinTimeout, kMaxTimeout);
+  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
+
+  base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(2);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout());
+
+  // A change in RTT estimate should also change the connection timeout.
+  rtt_estimate = base::TimeDelta::FromSeconds(7);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout());
+
+  // Connection timeout should not exceed kMaxTimeout.
+  rtt_estimate = base::TimeDelta::FromSeconds(35);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout());
+
+  // Connection timeout should not be less than kMinTimeout.
+  rtt_estimate = base::TimeDelta::FromSeconds(0);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout());
+}
+
+TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutWithConnectionProperty) {
+  const int kSecureMultiplier = 3;
+  const int kNonSecureMultiplier = 5;
+  const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2);
+  const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30);
+
+  InitAdaptiveTimeoutFieldTrialWithParams(
+      false, kSecureMultiplier, kNonSecureMultiplier, kMinTimeout, kMaxTimeout);
+
+  const base::TimeDelta kRttEstimate = base::TimeDelta::FromSeconds(2);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(kRttEstimate);
+  // By default, connection timeout should return the timeout for secure
+  // proxies.
+  if (GetParam() != HTTP) {
+    EXPECT_EQ(kSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout());
+  } else {
+    EXPECT_EQ(kNonSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout());
+  }
+}
+
+// Tests the connection timeout values when the field trial parameters are not
+// specified.
+TEST_P(HttpProxyConnectJobTest, ProxyPoolTimeoutWithExperimentDefaultParams) {
+  InitAdaptiveTimeoutFieldTrialWithParams(true, 0, 0, base::TimeDelta(),
+                                          base::TimeDelta());
+  EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout());
+
+  // Timeout should be |http_rtt_multiplier| times the HTTP RTT
+  // estimate.
+  base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(10);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  // Connection timeout should not be less than the HTTP RTT estimate.
+  EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout());
+
+  // A change in RTT estimate should also change the connection timeout.
+  rtt_estimate = base::TimeDelta::FromSeconds(10);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  // Connection timeout should not be less than the HTTP RTT estimate.
+  EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout());
+
+  // Set RTT to a very large value.
+  rtt_estimate = base::TimeDelta::FromMinutes(60);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_GT(rtt_estimate, GetProxyConnectionTimeout());
+
+  // Set RTT to a very small value.
+  rtt_estimate = base::TimeDelta::FromSeconds(0);
+  network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate);
+  EXPECT_LT(rtt_estimate, GetProxyConnectionTimeout());
+}
+
+// TODO(https://crbug.com/927096): It would be nice to also test the timeouts in
+// HttpProxyClientSocketPool.
+
+}  // namespace net
\ No newline at end of file
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc
index 193b301..84b3685c 100644
--- a/net/http/http_stream_factory_unittest.cc
+++ b/net/http/http_stream_factory_unittest.cc
@@ -402,8 +402,11 @@
   int last_num_streams() const { return last_num_streams_; }
   const std::string& last_group_name() const { return last_group_name_; }
 
-  // Resets |last_num_streams_| to its default value.
-  void reset_last_num_streams() { last_num_streams_ = -1; }
+  // Resets |last_num_streams_| and |last_group_name_| default values.
+  void reset() {
+    last_num_streams_ = -1;
+    last_group_name_.clear();
+  }
 
   int RequestSocket(const std::string& group_name,
                     const void* socket_params,
@@ -551,10 +554,15 @@
         proxy_server, base::WrapUnique(ssl_conn_pool));
     peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
     PreconnectHelper(kTests[i], session.get());
-    if (kTests[i].ssl)
+    if (kTests[i].ssl) {
       EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
-    else
+      EXPECT_EQ("http_proxy/" + GetGroupName(kTests[i]),
+                ssl_conn_pool->last_group_name());
+    } else {
       EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams());
+      EXPECT_EQ("http_proxy/" + GetGroupName(kTests[i]),
+                http_proxy_pool->last_group_name());
+    }
   }
 }
 
@@ -573,23 +581,14 @@
             session_deps.transport_security_state.get(),
             session_deps.cert_transparency_verifier.get(),
             session_deps.ct_policy_enforcer.get());
-    CapturePreconnectsTransportSocketPool* ssl_conn_pool =
-        new CapturePreconnectsTransportSocketPool(
-            session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
-            session_deps.transport_security_state.get(),
-            session_deps.cert_transparency_verifier.get(),
-            session_deps.ct_policy_enforcer.get());
     auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>();
     mock_pool_manager->SetSocketPoolForProxy(
         proxy_server, base::WrapUnique(socks_proxy_pool));
-    mock_pool_manager->SetSocketPoolForSSLWithProxy(
-        proxy_server, base::WrapUnique(ssl_conn_pool));
     peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
     PreconnectHelper(kTests[i], session.get());
-    if (kTests[i].ssl)
-      EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
-    else
-      EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams());
+    EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams());
+    EXPECT_EQ("socks4/" + GetGroupName(kTests[i]),
+              socks_proxy_pool->last_group_name());
   }
 }
 
@@ -1375,7 +1374,7 @@
       num_streams, request_privacy_mode_disabled);
   EXPECT_EQ(-1, ssl_conn_pool->last_num_streams());
   EXPECT_EQ(num_streams, http_proxy_pool->last_num_streams());
-  http_proxy_pool->reset_last_num_streams();
+  http_proxy_pool->reset();
 
   // Second preconnect job with same privacy mode should not succeed.
   session->http_stream_factory()->PreconnectStreams(
diff --git a/net/http/mock_http_cache.cc b/net/http/mock_http_cache.cc
index 3ae150b..254a960 100644
--- a/net/http/mock_http_cache.cc
+++ b/net/http/mock_http_cache.cc
@@ -414,6 +414,7 @@
       double_create_check_(true),
       fail_sparse_requests_(false),
       support_in_memory_entry_data_(true),
+      force_fail_callback_later_(false),
       defer_op_(MockDiskEntry::DEFER_NONE),
       resume_return_code_(0) {}
 
@@ -434,6 +435,11 @@
                                     disk_cache::Entry** entry,
                                     CompletionOnceCallback callback) {
   DCHECK(!callback.is_null());
+  if (force_fail_callback_later_) {
+    CallbackLater(std::move(callback), ERR_CACHE_OPEN_FAILURE);
+    return ERR_IO_PENDING;
+  }
+
   if (fail_requests_)
     return ERR_CACHE_OPEN_FAILURE;
 
@@ -471,6 +477,11 @@
                                       disk_cache::Entry** entry,
                                       CompletionOnceCallback callback) {
   DCHECK(!callback.is_null());
+  if (force_fail_callback_later_) {
+    CallbackLater(std::move(callback), ERR_CACHE_CREATE_FAILURE);
+    return ERR_IO_PENDING;
+  }
+
   if (fail_requests_)
     return ERR_CACHE_CREATE_FAILURE;
 
@@ -525,6 +536,14 @@
                                     net::RequestPriority request_priority,
                                     CompletionOnceCallback callback) {
   DCHECK(!callback.is_null());
+  if (force_fail_callback_later_) {
+    CallbackLater(std::move(callback), ERR_CACHE_DOOM_FAILURE);
+    return ERR_IO_PENDING;
+  }
+
+  if (fail_requests_)
+    return ERR_CACHE_DOOM_FAILURE;
+
   auto it = entries_.find(key);
   if (it != entries_.end()) {
     it->second->Release();
diff --git a/net/http/mock_http_cache.h b/net/http/mock_http_cache.h
index 887f45ff..84030b7 100644
--- a/net/http/mock_http_cache.h
+++ b/net/http/mock_http_cache.h
@@ -191,8 +191,8 @@
   // Returns number of doomed entries.
   int doomed_count() const { return doomed_count_; }
 
-  // Fail any subsequent CreateEntry and OpenEntry.
-  void set_fail_requests() { fail_requests_ = true; }
+  // Fail any subsequent CreateEntry, OpenEntry, and DoomEntry
+  void set_fail_requests(bool value) { fail_requests_ = value; }
 
   // Return entries that fail some of their requests.
   void set_soft_failures(bool value) { soft_failures_ = value; }
@@ -212,6 +212,12 @@
     support_in_memory_entry_data_ = value;
   }
 
+  // OpenEntry, CreateEntry, and DoomEntry immediately return with
+  // ERR_IO_PENDING and will callback some time later with an error.
+  void set_force_fail_callback_later(bool value) {
+    force_fail_callback_later_ = value;
+  }
+
   // Makes all requests for data ranges to fail as not implemented.
   void set_fail_sparse_requests() { fail_sparse_requests_ = true; }
 
@@ -256,6 +262,7 @@
   bool double_create_check_;
   bool fail_sparse_requests_;
   bool support_in_memory_entry_data_;
+  bool force_fail_callback_later_;
 
   // Used for pause and restart.
   MockDiskEntry::DeferOp defer_op_;
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc
index 5a76480..d391c3a 100644
--- a/net/socket/client_socket_pool_base.cc
+++ b/net/socket/client_socket_pool_base.cc
@@ -1265,11 +1265,12 @@
   // connection - the timeout they used is tuned for that, and tests expect that
   // behavior.
   //
-  // TODO(mmenke): Replace both this and the LOAD_STATE_RESOLVING_HOST check
-  // with a callback. Use the LOAD_STATE_RESOLVING_HOST callback to start the
-  // timer (And invoke the OnHostResolved callback of any pending requests), and
-  // the HasEstablishedConnection() callback to stop the timer. That should
-  // result in a more robust, testable API.
+  // TODO(https://crbug.com/929814): Replace both this and the
+  // LOAD_STATE_RESOLVING_HOST check with a callback. Use the
+  // LOAD_STATE_RESOLVING_HOST callback to start the timer (And invoke the
+  // OnHostResolved callback of any pending requests), and the
+  // HasEstablishedConnection() callback to stop the timer. That should result
+  // in a more robust, testable API.
   if ((*jobs_.begin())->HasEstablishedConnection())
     return;
 
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc
index cbb30de..6ebcccc 100644
--- a/net/socket/client_socket_pool_manager.cc
+++ b/net/socket/client_socket_pool_manager.cc
@@ -200,6 +200,9 @@
     TransportClientSocketPool* ssl_pool = nullptr;
     if (proxy_info.is_direct()) {
       ssl_pool = session->GetTransportSocketPool(socket_pool_type);
+    } else if (proxy_info.is_socks()) {
+      ssl_pool = session->GetSocketPoolForSOCKSProxy(socket_pool_type,
+                                                     proxy_info.proxy_server());
     } else {
       ssl_pool = session->GetSocketPoolForSSLWithProxy(
           socket_pool_type, proxy_info.proxy_server());
diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h
index 3e8c651..c212e25 100644
--- a/net/socket/client_socket_pool_manager.h
+++ b/net/socket/client_socket_pool_manager.h
@@ -79,6 +79,10 @@
   virtual void CloseIdleSockets() = 0;
   // Returns the socket pool for direct HTTP and SSL connections.
   virtual TransportClientSocketPool* GetTransportSocketPool() = 0;
+  // Returns the socket pool used for both SOCKS and SSL over SOCKS.
+  // TODO(https://crbug.com/929714): Merge this with
+  // GetSocketPoolForHTTPLikeProxy(), once GetSocketPoolForSSLWithProxy() and
+  // GetSocketPoolForHTTPLikeProxy() have been merged.
   virtual TransportClientSocketPool* GetSocketPoolForSOCKSProxy(
       const ProxyServer& socks_proxy) = 0;
   // Returns the HttpProxyClientSocketPool for a ProxyServer that uses an
diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc
index d6eaec05..a0527e8c 100644
--- a/net/socket/client_socket_pool_manager_impl.cc
+++ b/net/socket/client_socket_pool_manager_impl.cc
@@ -243,8 +243,7 @@
               ct_policy_enforcer_, ssl_client_session_cache_,
               ssl_session_cache_shard_, ssl_config_service_,
               socket_performance_watcher_factory_, network_quality_estimator_,
-              net_log_, nullptr /* no socks proxy */,
-              nullptr /* no http proxy */)));
+              net_log_, nullptr /* no http proxy */)));
   DCHECK(ssl_https_ret.second);
 
   std::pair<HTTPProxySocketPoolMap::iterator, bool> ret =
@@ -261,6 +260,9 @@
 TransportClientSocketPool*
 ClientSocketPoolManagerImpl::GetSocketPoolForSSLWithProxy(
     const ProxyServer& proxy_server) {
+  DCHECK(!proxy_server.is_socks());
+  DCHECK(!proxy_server.is_direct());
+
   TransportSocketPoolMap::const_iterator it =
       ssl_socket_pools_for_proxies_.find(proxy_server);
   if (it != ssl_socket_pools_for_proxies_.end())
@@ -281,8 +283,6 @@
               ssl_session_cache_shard_, ssl_config_service_,
               socket_performance_watcher_factory_, network_quality_estimator_,
               net_log_,
-              proxy_server.is_socks() ? GetSocketPoolForSOCKSProxy(proxy_server)
-                                      : nullptr,
               proxy_server.is_http_like()
                   ? GetSocketPoolForHTTPLikeProxy(proxy_server)
                   : nullptr)));
diff --git a/net/socket/connect_job.h b/net/socket/connect_job.h
index 6f195025..b0f08657 100644
--- a/net/socket/connect_job.h
+++ b/net/socket/connect_job.h
@@ -157,8 +157,8 @@
 
   // Returns true if the ConnectJob has ever successfully established a TCP
   // connection. Used solely for deciding if a backup job is needed. Once it
-  // starts returning true, must always return true when called in the future,
-  // until NotifyComplete() is invoked.
+  // starts returning true, must always return true when called in the future.
+  // Not safe to call after NotifyComplete() is invoked.
   virtual bool HasEstablishedConnection() const = 0;
 
   // If Connect returns an error (or OnConnectJobComplete reports an error
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc
index 9ec8143c..6d5751bc 100644
--- a/net/socket/ssl_client_socket_pool_unittest.cc
+++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -113,7 +113,6 @@
         nullptr /* ssl_config_service */,
         nullptr /* socket_performance_watcher_factory */,
         nullptr /* network_quality_estimator */, nullptr /* net_log */,
-        nullptr /* socks_pool */,
         http_proxy_pool ? &http_proxy_socket_pool_ : nullptr));
   }
 
diff --git a/net/socket/ssl_connect_job.cc b/net/socket/ssl_connect_job.cc
index 529ff81f..ccf5781 100644
--- a/net/socket/ssl_connect_job.cc
+++ b/net/socket/ssl_connect_job.cc
@@ -24,7 +24,6 @@
 #include "net/socket/client_socket_handle.h"
 #include "net/socket/socks_connect_job.h"
 #include "net/socket/ssl_client_socket.h"
-#include "net/socket/transport_client_socket_pool.h"
 #include "net/socket/transport_connect_job.h"
 #include "net/ssl/ssl_cert_request_info.h"
 #include "net/ssl/ssl_connection_status_flags.h"
@@ -95,7 +94,6 @@
     RequestPriority priority,
     const CommonConnectJobParams& common_connect_job_params,
     const scoped_refptr<SSLSocketParams>& params,
-    TransportClientSocketPool* socks_pool,
     HttpProxyClientSocketPool* http_proxy_pool,
     ConnectJob::Delegate* delegate)
     : ConnectJob(priority,
@@ -107,7 +105,6 @@
                  NetLogWithSource::Make(common_connect_job_params.net_log,
                                         NetLogSourceType::SSL_CONNECT_JOB)),
       params_(params),
-      socks_pool_(socks_pool),
       http_proxy_pool_(http_proxy_pool),
       callback_(base::BindRepeating(&SSLConnectJob::OnIOComplete,
                                     base::Unretained(this))) {}
@@ -121,9 +118,8 @@
     case STATE_TUNNEL_CONNECT:
       return LOAD_STATE_IDLE;
     case STATE_TRANSPORT_CONNECT_COMPLETE:
-      return nested_connect_job_->GetLoadState();
     case STATE_SOCKS_CONNECT_COMPLETE:
-      return transport_socket_handle_->GetLoadState();
+      return nested_connect_job_->GetLoadState();
     case STATE_TUNNEL_CONNECT_COMPLETE:
       if (transport_socket_handle_->socket())
         return LOAD_STATE_ESTABLISHING_PROXY_TUNNEL;
@@ -140,7 +136,7 @@
 bool SSLConnectJob::HasEstablishedConnection() const {
   // Return true to prevent creating any backup jobs when this is used on top of
   // another socket pool type.
-  if (socks_pool_ || http_proxy_pool_)
+  if (http_proxy_pool_)
     return true;
 
   // If waiting on a nested ConnectJob, defer to that ConnectJob's state.
@@ -256,7 +252,8 @@
 }
 
 int SSLConnectJob::DoTransportConnectComplete(int result) {
-  // TODO(mmenke): Implement a better API to get this information.
+  // TODO(https://crbug.com/927101): Implement a better API to get this
+  // information.
   ClientSocketHandle bogus_handle;
   nested_connect_job_->GetAdditionalErrorState(&bogus_handle);
   connection_attempts_.insert(connection_attempts_.end(),
@@ -272,22 +269,21 @@
 }
 
 int SSLConnectJob::DoSOCKSConnect() {
-  DCHECK(socks_pool_);
+  DCHECK(!nested_connect_job_);
+  DCHECK(params_->GetSocksProxyConnectionParams());
+
   next_state_ = STATE_SOCKS_CONNECT_COMPLETE;
-  transport_socket_handle_.reset(new ClientSocketHandle());
-  scoped_refptr<SOCKSSocketParams> socks_proxy_params =
-      params_->GetSocksProxyConnectionParams();
-  return transport_socket_handle_->Init(
-      group_name(),
-      TransportClientSocketPool::SocketParams::CreateFromSOCKSSocketParams(
-          socks_proxy_params),
-      priority(), socket_tag(), respect_limits(), callback_, socks_pool_,
-      net_log());
+  nested_connect_job_ = std::make_unique<SOCKSConnectJob>(
+      priority(), common_connect_job_params(),
+      params_->GetSocksProxyConnectionParams(), this);
+  return nested_connect_job_->Connect();
 }
 
 int SSLConnectJob::DoSOCKSConnectComplete(int result) {
-  if (result == OK)
+  if (result == OK) {
     next_state_ = STATE_SSL_CONNECT;
+    nested_socket_ = nested_connect_job_->PassSocket();
+  }
 
   return result;
 }
@@ -355,8 +351,8 @@
 
   // If privacy mode is enabled and the session shard is non-empty, prefix the
   // SSL session shard with "pm/". Otherwise, prefix with "nopm/".
-  // TODO(mmenke): Consider moving this up to the socket pool layer, after
-  // giving socket pools knowledge of privacy mode.
+  // TODO(https://crbug.com/927084): Consider moving this up to the socket pool
+  // layer, after giving socket pools knowledge of privacy mode.
   SSLClientSocketContext context_with_privacy_mode(
       ssl_client_socket_context().cert_verifier,
       ssl_client_socket_context().channel_id_service,
diff --git a/net/socket/ssl_connect_job.h b/net/socket/ssl_connect_job.h
index 49f7a83..452d25f7 100644
--- a/net/socket/ssl_connect_job.h
+++ b/net/socket/ssl_connect_job.h
@@ -27,7 +27,6 @@
 class HttpProxyClientSocketPool;
 class HttpProxySocketParams;
 class SOCKSSocketParams;
-class TransportClientSocketPool;
 class TransportSocketParams;
 
 class NET_EXPORT_PRIVATE SSLSocketParams
@@ -85,7 +84,6 @@
   SSLConnectJob(RequestPriority priority,
                 const CommonConnectJobParams& common_connect_job_params,
                 const scoped_refptr<SSLSocketParams>& params,
-                TransportClientSocketPool* socks_pool,
                 HttpProxyClientSocketPool* http_proxy_pool,
                 ConnectJob::Delegate* delegate);
   ~SSLConnectJob() override;
@@ -144,7 +142,6 @@
   void ChangePriorityInternal(RequestPriority priority) override;
 
   scoped_refptr<SSLSocketParams> params_;
-  TransportClientSocketPool* const socks_pool_;
   HttpProxyClientSocketPool* const http_proxy_pool_;
 
   State next_state_;
diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc
index 978978f4..1ea2b5eb 100644
--- a/net/socket/ssl_connect_job_unittest.cc
+++ b/net/socket/ssl_connect_job_unittest.cc
@@ -167,8 +167,6 @@
             nullptr /* network_quality_estimator */, nullptr /* net_log */,
             nullptr /* websocket_lock_endpoint_manager */),
         SSLParams(proxy_scheme),
-        proxy_scheme == ProxyServer::SCHEME_SOCKS5 ? &transport_socket_pool_
-                                                   : nullptr,
         proxy_scheme == ProxyServer::SCHEME_HTTP ? &http_proxy_socket_pool_
                                                  : nullptr,
         test_delegate);
@@ -502,12 +500,13 @@
 
     MockWrite writes[] = {
         MockWrite(io_mode, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
-        MockWrite(io_mode, base::size(kSOCKS5Request),
-                  base::size(kSOCKS5Request))};
+        MockWrite(io_mode, kSOCKS5Request, base::size(kSOCKS5Request)),
+    };
 
     MockRead reads[] = {
         MockRead(io_mode, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
-        MockRead(io_mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength)};
+        MockRead(io_mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength),
+    };
 
     host_resolver_.set_synchronous_mode(io_mode == SYNCHRONOUS);
     StaticSocketDataProvider data(reads, writes);
@@ -525,6 +524,64 @@
   }
 }
 
+TEST_F(SSLConnectJobTest, SOCKSHasEstablishedConnection) {
+  const char kSOCKS5Request[] = {0x05, 0x01, 0x00, 0x03, 0x09, 's', 'o',  'c',
+                                 'k',  's',  'h',  'o',  's',  't', 0x01, 0xBB};
+
+  MockWrite writes[] = {
+      MockWrite(SYNCHRONOUS, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength, 0),
+      MockWrite(SYNCHRONOUS, kSOCKS5Request, base::size(kSOCKS5Request), 3),
+  };
+
+  MockRead reads[] = {
+      // Pause so can probe current state.
+      MockRead(ASYNC, ERR_IO_PENDING, 1),
+      MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength, 2),
+      MockRead(SYNCHRONOUS, kSOCKS5OkResponse, kSOCKS5OkResponseLength, 4),
+  };
+
+  host_resolver_.set_ondemand_mode(true);
+  SequencedSocketData data(reads, writes);
+  data.set_connect_data(MockConnect(ASYNC, OK));
+  socket_factory_.AddSocketDataProvider(&data);
+
+  // SSL negotiation hangs. Value returned after SSL negotiation is complete
+  // doesn't matter, as HasEstablishedConnection() may only be used between job
+  // start and job complete.
+  SSLSocketDataProvider ssl(SYNCHRONOUS, ERR_IO_PENDING);
+  socket_factory_.AddSSLSocketDataProvider(&ssl);
+
+  TestConnectJobDelegate test_delegate;
+  std::unique_ptr<ConnectJob> ssl_connect_job =
+      CreateConnectJob(&test_delegate, ProxyServer::SCHEME_SOCKS5);
+  EXPECT_THAT(ssl_connect_job->Connect(), test::IsError(ERR_IO_PENDING));
+  EXPECT_TRUE(host_resolver_.has_pending_requests());
+  EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, ssl_connect_job->GetLoadState());
+  EXPECT_FALSE(ssl_connect_job->HasEstablishedConnection());
+
+  // DNS resolution completes, and then the ConnectJob tries to connect the
+  // socket, which should succeed asynchronously.
+  host_resolver_.ResolveNow(1);
+  EXPECT_EQ(LOAD_STATE_CONNECTING, ssl_connect_job->GetLoadState());
+  EXPECT_FALSE(ssl_connect_job->HasEstablishedConnection());
+
+  // Spin the message loop until the first read of the handshake.
+  // HasEstablishedConnection() should return true, as a TCP connection has been
+  // successfully established by this point.
+  data.RunUntilPaused();
+  EXPECT_FALSE(test_delegate.has_result());
+  EXPECT_EQ(LOAD_STATE_CONNECTING, ssl_connect_job->GetLoadState());
+  EXPECT_TRUE(ssl_connect_job->HasEstablishedConnection());
+
+  // Finish up the handshake, and spin the message loop until the SSL handshake
+  // starts and hang.
+  data.Resume();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(test_delegate.has_result());
+  EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, ssl_connect_job->GetLoadState());
+  EXPECT_TRUE(ssl_connect_job->HasEstablishedConnection());
+}
+
 TEST_F(SSLConnectJobTest, SOCKSRequestPriority) {
   host_resolver_.set_ondemand_mode(true);
   // Make resolution eventually fail, so old jobs can easily be removed from the
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc
index 5bd2e69e..dec343d0 100644
--- a/net/socket/transport_client_socket_pool.cc
+++ b/net/socket/transport_client_socket_pool.cc
@@ -38,9 +38,7 @@
     RequestPriority priority,
     const CommonConnectJobParams& common_connect_job_params,
     ConnectJob::Delegate* delegate,
-    TransportClientSocketPool* socks_pool,
     HttpProxyClientSocketPool* http_proxy_pool) {
-  DCHECK(!socks_pool);
   DCHECK(!http_proxy_pool);
   return TransportConnectJob::CreateTransportConnectJob(
       std::move(transport_socket_params), priority, common_connect_job_params,
@@ -52,9 +50,7 @@
     RequestPriority priority,
     const CommonConnectJobParams& common_connect_job_params,
     ConnectJob::Delegate* delegate,
-    TransportClientSocketPool* socks_pool,
     HttpProxyClientSocketPool* http_proxy_pool) {
-  DCHECK(!socks_pool);
   DCHECK(!http_proxy_pool);
   return std::make_unique<SOCKSConnectJob>(priority, common_connect_job_params,
                                            std::move(socks_socket_params),
@@ -66,11 +62,10 @@
     RequestPriority priority,
     const CommonConnectJobParams& common_connect_job_params,
     ConnectJob::Delegate* delegate,
-    TransportClientSocketPool* socks_pool,
     HttpProxyClientSocketPool* http_proxy_pool) {
   return std::make_unique<SSLConnectJob>(priority, common_connect_job_params,
                                          std::move(ssl_socket_params),
-                                         socks_pool, http_proxy_pool, delegate);
+                                         http_proxy_pool, delegate);
 }
 
 }  // namespace
@@ -113,7 +108,6 @@
         SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
         NetworkQualityEstimator* network_quality_estimator,
         NetLog* net_log,
-        TransportClientSocketPool* socks_pool,
         HttpProxyClientSocketPool* http_proxy_pool)
     : client_socket_factory_(client_socket_factory),
       host_resolver_(host_resolver),
@@ -121,7 +115,6 @@
       socket_performance_watcher_factory_(socket_performance_watcher_factory),
       network_quality_estimator_(network_quality_estimator),
       net_log_(net_log),
-      socks_pool_(socks_pool),
       http_proxy_pool_(http_proxy_pool) {}
 
 TransportClientSocketPool::TransportConnectJobFactory::
@@ -140,7 +133,7 @@
           client_socket_factory_, host_resolver_, ssl_client_socket_context_,
           socket_performance_watcher_factory_, network_quality_estimator_,
           net_log_, nullptr /* websocket_endpoint_lock_manager */),
-      delegate, socks_pool_, http_proxy_pool_);
+      delegate, http_proxy_pool_);
 }
 
 TransportClientSocketPool::TransportClientSocketPool(
@@ -159,7 +152,6 @@
     SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
     NetworkQualityEstimator* network_quality_estimator,
     NetLog* net_log,
-    TransportClientSocketPool* socks_pool,
     HttpProxyClientSocketPool* http_proxy_pool)
     : base_(this,
             max_sockets,
@@ -179,7 +171,6 @@
                 socket_performance_watcher_factory,
                 network_quality_estimator,
                 net_log,
-                socks_pool,
                 http_proxy_pool)),
       client_socket_factory_(client_socket_factory),
       ssl_config_service_(ssl_config_service) {
@@ -187,8 +178,6 @@
   if (ssl_config_service_)
     ssl_config_service_->AddObserver(this);
 
-  if (socks_pool)
-    base_.AddLowerLayeredPool(socks_pool);
   if (http_proxy_pool)
     base_.AddLowerLayeredPool(http_proxy_pool);
 }
diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h
index 10d59b8..ac99b8e 100644
--- a/net/socket/transport_client_socket_pool.h
+++ b/net/socket/transport_client_socket_pool.h
@@ -48,15 +48,14 @@
   // |websocket_endpoint_lock_manager| is non-null, a ConnectJob for use by
   // WebSockets should be created.
   //
-  // |socks_pool| and |http_proxy_pool| are for the case of SSLConnectJobs that
-  // will be layered on top of other socket pool types.
-  // TODO(mmenke): Remove them.
+  // |http_proxy_pool| is for the case of SSLConnectJobs that will be layered
+  // on top of an HttpProxyClientSocketPool.
+  // TODO(https://crbug.com/927084): Remove the |http_proxy_pool| argument.
   using CreateConnectJobCallback =
       base::RepeatingCallback<std::unique_ptr<ConnectJob>(
           RequestPriority priority,
           const CommonConnectJobParams& common_connect_job_params,
           ConnectJob::Delegate* delegate,
-          TransportClientSocketPool* socks_pool,
           HttpProxyClientSocketPool* http_proxy_pool)>;
 
   // "Parameters" that own a single callback for creating a ConnectJob that can
@@ -92,10 +91,11 @@
     DISALLOW_COPY_AND_ASSIGN(SocketParams);
   };
 
-  // If this is being used for an SSL socket pool, |socks_pool| and
-  // |http_proxy_pool| socket pools beneath the SSL socket pool.
+  // If this is being used for an SSL socket pool, the |http_proxy_pool| socket
+  // pool is used for HTTP proxy tunnels beneath the SSL socket pool.
   //
-  // TODO(mmenke): Remove those socket pools.
+  // TODO(https://crbug.com/927084): Remove the |http_proxy_pool| argument, once
+  // the socket pools are flat.
   TransportClientSocketPool(
       int max_sockets,
       int max_sockets_per_group,
@@ -112,7 +112,6 @@
       SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
       NetworkQualityEstimator* network_quality_estimator,
       NetLog* net_log,
-      TransportClientSocketPool* socks_pool = nullptr,
       HttpProxyClientSocketPool* http_proxy_pool = nullptr);
 
   ~TransportClientSocketPool() override;
@@ -184,7 +183,6 @@
         SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
         NetworkQualityEstimator* network_quality_estimator,
         NetLog* net_log,
-        TransportClientSocketPool* socks_pool = nullptr,
         HttpProxyClientSocketPool* http_proxy_pool = nullptr);
 
     ~TransportConnectJobFactory() override;
@@ -204,7 +202,6 @@
     NetworkQualityEstimator* const network_quality_estimator_;
     NetLog* const net_log_;
 
-    TransportClientSocketPool* const socks_pool_;
     HttpProxyClientSocketPool* const http_proxy_pool_;
 
     DISALLOW_COPY_AND_ASSIGN(TransportConnectJobFactory);
diff --git a/net/socket/websocket_transport_client_socket_pool.cc b/net/socket/websocket_transport_client_socket_pool.cc
index e791b2f6..0fef1db 100644
--- a/net/socket/websocket_transport_client_socket_pool.cc
+++ b/net/socket/websocket_transport_client_socket_pool.cc
@@ -137,6 +137,10 @@
       std::make_unique<ConnectJobDelegate>(this, std::move(callback), handle,
                                            request_net_log);
 
+  // For WebSockets, only the main socket pool uses a
+  // WebSocketTransportClientSocketPool, so there's no need to pass in any
+  // nested socket pools for the proxy case, which use standard proxy socket
+  // pool types on top of a standard TransportClientSocketPool.
   std::unique_ptr<ConnectJob> connect_job =
       casted_params->create_connect_job_callback().Run(
           priority,
@@ -147,7 +151,8 @@
                                  nullptr /* SocketPerformanceWatcherFactory */,
                                  network_quality_estimator_, pool_net_log_,
                                  websocket_endpoint_lock_manager_),
-          connect_job_delegate.get(), nullptr, nullptr);
+          connect_job_delegate.get(),
+          nullptr /* http_proxy_client_socket_pool */);
 
   int result = connect_job_delegate->Connect(std::move(connect_job));
 
diff --git a/net/spdy/spdy_proxy_client_socket_unittest.cc b/net/spdy/spdy_proxy_client_socket_unittest.cc
index b9ab32c..eb7b639aec 100644
--- a/net/spdy/spdy_proxy_client_socket_unittest.cc
+++ b/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -115,8 +115,7 @@
           nullptr /* socket_performance_watcher_factory */,
           nullptr /* network_quality_estimator */, session_deps->net_log,
           nullptr /* websocket_endpoint_lock_manager */),
-      ssl_params, nullptr /* socks_pool */, nullptr /* http_proxy_pool */,
-      &connect_job_delegate);
+      ssl_params, nullptr /* http_proxy_pool */, &connect_job_delegate);
   connect_job_delegate.StartJobExpectingResult(&connect_job, OK,
                                                false /* expect_sync_result */);
 
diff --git a/ppapi/proxy/ppb_var_unittest.cc b/ppapi/proxy/ppb_var_unittest.cc
index 38afb60c..41f8fac 100644
--- a/ppapi/proxy/ppb_var_unittest.cc
+++ b/ppapi/proxy/ppb_var_unittest.cc
@@ -36,7 +36,7 @@
         ppb_var_(ppapi::PPB_Var_Shared::GetVarInterface1_2()) {
     // Set the value of test_strings_[i] to "i".
     for (size_t i = 0; i < kNumStrings; ++i)
-      test_strings_[i] = base::IntToString(static_cast<int>(i));
+      test_strings_[i] = base::NumberToString(i);
   }
  protected:
   std::vector<std::string> test_strings_;
diff --git a/ppapi/proxy/url_request_info_resource.cc b/ppapi/proxy/url_request_info_resource.cc
index 77d20e0..c082fa4 100644
--- a/ppapi/proxy/url_request_info_resource.cc
+++ b/ppapi/proxy/url_request_info_resource.cc
@@ -70,7 +70,7 @@
   if (!result) {
     std::string error_msg("PPB_URLRequestInfo.SetProperty: Attempted to set a "
                           "value for PP_URLRequestProperty ");
-    error_msg += base::IntToString(property);
+    error_msg += base::NumberToString(property);
     error_msg += ", but either this property type is invalid or its parameter "
                  "was inappropriate (e.g., the wrong type of PP_Var).";
     Log(PP_LOGLEVEL_ERROR, error_msg);
diff --git a/ppapi/shared_impl/var.cc b/ppapi/shared_impl/var.cc
index 4d9f821..f3acb34 100644
--- a/ppapi/shared_impl/var.cc
+++ b/ppapi/shared_impl/var.cc
@@ -31,7 +31,7 @@
     case PP_VARTYPE_BOOL:
       return var.value.as_bool ? "[True]" : "[False]";
     case PP_VARTYPE_INT32:
-      return base::IntToString(var.value.as_int);
+      return base::NumberToString(var.value.as_int);
     case PP_VARTYPE_DOUBLE:
       return base::NumberToString(var.value.as_double);
     case PP_VARTYPE_STRING: {
diff --git a/services/ws/window_tree.cc b/services/ws/window_tree.cc
index 4aef294..bd44461 100644
--- a/services/ws/window_tree.cc
+++ b/services/ws/window_tree.cc
@@ -1253,6 +1253,21 @@
   return false;
 }
 
+bool WindowTree::SetWindowTransformImpl(const ClientWindowId& window_id,
+                                        const gfx::Transform& transform) {
+  DVLOG(3) << "SetWindowTransform window_id=" << window_id;
+  aura::Window* window = GetWindowByClientId(window_id);
+  // This doesn't allow setting the transform on top-levels as that may conflict
+  // with top-level animations done by the window-manager. Additionally the
+  // window-manager is really the one that should be animating top-levels.
+  if (!window || !IsClientCreatedWindow(window) || IsTopLevel(window)) {
+    DVLOG(1) << "SetWindowTransform failed (invalid window)";
+    return false;
+  }
+  window->SetTransform(transform);
+  return true;
+}
+
 bool WindowTree::ReorderWindowImpl(const ClientWindowId& window_id,
                                    const ClientWindowId& relative_window_id,
                                    mojom::OrderDirection direction) {
@@ -1600,12 +1615,11 @@
 }
 
 void WindowTree::SetWindowTransform(uint32_t change_id,
-                                    Id window_id,
+                                    Id transport_window_id,
                                     const gfx::Transform& transform) {
-  // NOTE: Tests may time out if they trigger this NOTIMPLEMENTED because
-  // the change is not ack'd. The code under test may need to change to
-  // avoid triggering window transforms outside the window manager.
-  NOTIMPLEMENTED_LOG_ONCE();
+  window_tree_client_->OnChangeCompleted(
+      change_id, SetWindowTransformImpl(MakeClientWindowId(transport_window_id),
+                                        transform));
 }
 
 void WindowTree::SetClientArea(
diff --git a/services/ws/window_tree.h b/services/ws/window_tree.h
index 2c23fa3..f385a4b 100644
--- a/services/ws/window_tree.h
+++ b/services/ws/window_tree.h
@@ -344,6 +344,8 @@
                            const gfx::Rect& bounds,
                            const base::Optional<viz::LocalSurfaceIdAllocation>&
                                local_surface_id_allocation);
+  bool SetWindowTransformImpl(const ClientWindowId& window_id,
+                              const gfx::Transform& transform);
   bool ReorderWindowImpl(const ClientWindowId& window_id,
                          const ClientWindowId& relative_window_id,
                          mojom::OrderDirection direction);
@@ -396,7 +398,7 @@
                                          local_surface_id_allocation) override;
   void AllocateLocalSurfaceId(Id transport_window_id) override;
   void SetWindowTransform(uint32_t change_id,
-                          Id window_id,
+                          Id transport_window_id,
                           const gfx::Transform& transform) override;
   void SetClientArea(Id transport_window_id,
                      const gfx::Insets& insets,
diff --git a/services/ws/window_tree_test_helper.cc b/services/ws/window_tree_test_helper.cc
index b6eb1860..4223b78c 100644
--- a/services/ws/window_tree_test_helper.cc
+++ b/services/ws/window_tree_test_helper.cc
@@ -71,6 +71,12 @@
       direction);
 }
 
+bool WindowTreeTestHelper::SetTransform(aura::Window* window,
+                                        const gfx::Transform& transform) {
+  return window_tree_->SetWindowTransformImpl(ClientWindowIdForWindow(window),
+                                              transform);
+}
+
 bool WindowTreeTestHelper::SetWindowBounds(
     aura::Window* window,
     const gfx::Rect& bounds,
diff --git a/services/ws/window_tree_test_helper.h b/services/ws/window_tree_test_helper.h
index dbb33f8..c786e4c9 100644
--- a/services/ws/window_tree_test_helper.h
+++ b/services/ws/window_tree_test_helper.h
@@ -23,6 +23,7 @@
 
 namespace gfx {
 class Insets;
+class Transform;
 }
 
 namespace ui {
@@ -65,6 +66,7 @@
   bool ReorderWindow(aura::Window* window,
                      aura::Window* relative_window,
                      mojom::OrderDirection direction);
+  bool SetTransform(aura::Window* window, const gfx::Transform& transform);
   bool SetWindowBounds(aura::Window* window,
                        const gfx::Rect& bounds,
                        const base::Optional<viz::LocalSurfaceIdAllocation>&
diff --git a/services/ws/window_tree_unittest.cc b/services/ws/window_tree_unittest.cc
index e098047..586de423 100644
--- a/services/ws/window_tree_unittest.cc
+++ b/services/ws/window_tree_unittest.cc
@@ -40,6 +40,7 @@
 #include "ui/base/hit_test.h"
 #include "ui/events/mojo/event_constants.mojom.h"
 #include "ui/events/test/event_generator.h"
+#include "ui/gfx/transform.h"
 #include "ui/wm/core/capture_controller.h"
 #include "ui/wm/core/default_screen_position_client.h"
 #include "ui/wm/core/focus_controller.h"
@@ -2535,5 +2536,22 @@
   EXPECT_TRUE(setup.changes()->empty());
 }
 
+TEST(WindowTreeTest, SetWindowTransform) {
+  WindowServiceTestSetup setup;
+  aura::Window* top_level =
+      setup.window_tree_test_helper()->NewTopLevelWindow();
+  setup.changes()->clear();
+  gfx::Transform scaled;
+  scaled.Scale(2, 2);
+  EXPECT_FALSE(
+      setup.window_tree_test_helper()->SetTransform(top_level, scaled));
+  EXPECT_EQ(gfx::Transform(), top_level->transform());
+
+  aura::Window* child_window = setup.window_tree_test_helper()->NewWindow();
+  EXPECT_TRUE(
+      setup.window_tree_test_helper()->SetTransform(child_window, scaled));
+  EXPECT_EQ(scaled, child_window->transform());
+}
+
 }  // namespace
 }  // namespace ws
diff --git a/sql/database_unittest.cc b/sql/database_unittest.cc
index 38cd6c01..da91ab2 100644
--- a/sql/database_unittest.cc
+++ b/sql/database_unittest.cc
@@ -522,7 +522,7 @@
   static const char kInsertSql2[] = "INSERT INTO x VALUES ('That was a test')";
 
   const base::FilePath db_path = db_prefix.InsertBeforeExtensionASCII(
-      base::IntToString(initial_page_size));
+      base::NumberToString(initial_page_size));
   sql::Database::Delete(db_path);
   sql::Database db;
   db.set_page_size(initial_page_size);
@@ -1590,7 +1590,7 @@
   ASSERT_GT(db().GetAppropriateMmapSize(), kMmapAlot);
   ASSERT_FALSE(db().DoesTableExist("meta"));
   ASSERT_TRUE(db().DoesViewExist("MmapStatus"));
-  EXPECT_EQ(base::IntToString(MetaTable::kMmapSuccess),
+  EXPECT_EQ(base::NumberToString(MetaTable::kMmapSuccess),
             ExecuteWithResult(&db(), "SELECT * FROM MmapStatus"));
 
   // Also maps everything when kMmapSuccess is already in the view.
@@ -1600,14 +1600,14 @@
   ASSERT_TRUE(db().Execute("DROP VIEW MmapStatus"));
   ASSERT_TRUE(db().Execute("CREATE VIEW MmapStatus (value) AS SELECT 1"));
   ASSERT_GT(db().GetAppropriateMmapSize(), kMmapAlot);
-  EXPECT_EQ(base::IntToString(MetaTable::kMmapSuccess),
+  EXPECT_EQ(base::NumberToString(MetaTable::kMmapSuccess),
             ExecuteWithResult(&db(), "SELECT * FROM MmapStatus"));
 
   // Failure status leads to nothing being mapped.
   ASSERT_TRUE(db().Execute("DROP VIEW MmapStatus"));
   ASSERT_TRUE(db().Execute("CREATE VIEW MmapStatus (value) AS SELECT -2"));
   ASSERT_EQ(0UL, db().GetAppropriateMmapSize());
-  EXPECT_EQ(base::IntToString(MetaTable::kMmapFailure),
+  EXPECT_EQ(base::NumberToString(MetaTable::kMmapFailure),
             ExecuteWithResult(&db(), "SELECT * FROM MmapStatus"));
 }
 
diff --git a/sql/recovery_unittest.cc b/sql/recovery_unittest.cc
index 7e65bf7b..17b8e8a 100644
--- a/sql/recovery_unittest.cc
+++ b/sql/recovery_unittest.cc
@@ -941,7 +941,7 @@
   static const char kSelectSql[] = "SELECT * FROM x ORDER BY t";
 
   const base::FilePath db_path = db_prefix.InsertBeforeExtensionASCII(
-      base::IntToString(initial_page_size));
+      base::NumberToString(initial_page_size));
   sql::Database::Delete(db_path);
   sql::Database db;
   db.set_page_size(initial_page_size);
diff --git a/storage/browser/blob/blob_url_request_job.cc b/storage/browser/blob/blob_url_request_job.cc
index 3a73bc7..88bd83f 100644
--- a/storage/browser/blob/blob_url_request_job.cc
+++ b/storage/browser/blob/blob_url_request_job.cc
@@ -142,7 +142,7 @@
     uint64_t total_size,
     uint64_t content_size) {
   std::string status("HTTP/1.1 ");
-  status.append(base::IntToString(status_code));
+  status.append(base::NumberToString(status_code));
   status.append(" ");
   status.append(net::GetHttpReasonPhrase(status_code));
   status.append("\0\0", 2);
diff --git a/storage/browser/blob/view_blob_internals_job.cc b/storage/browser/blob/view_blob_internals_job.cc
index dd5c6715..34e9f8a4 100644
--- a/storage/browser/blob/view_blob_internals_job.cc
+++ b/storage/browser/blob/view_blob_internals_job.cc
@@ -229,7 +229,7 @@
     std::string* out) {
   StartHTMLList(out);
 
-  AddHTMLListItem(kRefcount, base::IntToString(refcount), out);
+  AddHTMLListItem(kRefcount, base::NumberToString(refcount), out);
   AddHTMLListItem(kStatus, StatusToString(blob_data.status()), out);
   if (!content_type.empty())
     AddHTMLListItem(kContentType, content_type, out);
diff --git a/storage/browser/database/database_tracker.cc b/storage/browser/database/database_tracker.cc
index a7ef758..18f8b0a1 100644
--- a/storage/browser/database/database_tracker.cc
+++ b/storage/browser/database/database_tracker.cc
@@ -280,7 +280,7 @@
       origin_directory = it->second;
     } else {
       origin_directory =
-          base::IntToString16(incognito_origin_directories_generator_++);
+          base::NumberToString16(incognito_origin_directories_generator_++);
       incognito_origin_directories_[origin_identifier] = origin_directory;
     }
   }
@@ -302,7 +302,7 @@
     return base::FilePath();
 
   return GetOriginDirectory(origin_identifier)
-      .AppendASCII(base::Int64ToString(id));
+      .AppendASCII(base::NumberToString(id));
 }
 
 bool DatabaseTracker::GetOriginInfo(const std::string& origin_identifier,
diff --git a/storage/browser/fileapi/sandbox_directory_database.cc b/storage/browser/fileapi/sandbox_directory_database.cc
index afb74cc..797934d 100644
--- a/storage/browser/fileapi/sandbox_directory_database.cc
+++ b/storage/browser/fileapi/sandbox_directory_database.cc
@@ -104,14 +104,14 @@
     const base::FilePath::StringType& child_name) {
   std::string name;
   name = storage::FilePathToString(base::FilePath(child_name));
-  return std::string(kChildLookupPrefix) + base::Int64ToString(parent_id) +
-      std::string(kChildLookupSeparator) + name;
+  return std::string(kChildLookupPrefix) + base::NumberToString(parent_id) +
+         std::string(kChildLookupSeparator) + name;
 }
 
 std::string GetChildListingKeyPrefix(
     storage::SandboxDirectoryDatabase::FileId parent_id) {
-  return std::string(kChildLookupPrefix) + base::Int64ToString(parent_id) +
-      std::string(kChildLookupSeparator);
+  return std::string(kChildLookupPrefix) + base::NumberToString(parent_id) +
+         std::string(kChildLookupSeparator);
 }
 
 const char* LastFileIdKey() {
@@ -124,7 +124,7 @@
 
 std::string GetFileLookupKey(
     storage::SandboxDirectoryDatabase::FileId file_id) {
-  return base::Int64ToString(file_id);
+  return base::NumberToString(file_id);
 }
 
 // Assumptions:
@@ -561,7 +561,7 @@
   if (!AddFileInfoHelper(info, temp_id, &batch))
     return base::File::FILE_ERROR_FAILED;
 
-  batch.Put(LastFileIdKey(), base::Int64ToString(temp_id));
+  batch.Put(LastFileIdKey(), base::NumberToString(temp_id));
   status = db_->Write(leveldb::WriteOptions(), &batch);
   if (!status.ok()) {
     HandleError(FROM_HERE, status);
@@ -685,7 +685,7 @@
     }
     ++temp;
     status = db_->Put(leveldb::WriteOptions(), LastIntegerKey(),
-        base::Int64ToString(temp));
+                      base::NumberToString(temp));
     if (!status.ok()) {
       HandleError(FROM_HERE, status);
       return false;
@@ -861,8 +861,8 @@
   leveldb::WriteBatch batch;
   if (!AddFileInfoHelper(root, 0, &batch))
     return false;
-  batch.Put(LastFileIdKey(), base::Int64ToString(0));
-  batch.Put(LastIntegerKey(), base::Int64ToString(-1));
+  batch.Put(LastFileIdKey(), base::NumberToString(0));
+  batch.Put(LastIntegerKey(), base::NumberToString(-1));
   leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
   if (!status.ok()) {
     HandleError(FROM_HERE, status);
diff --git a/storage/browser/fileapi/sandbox_directory_database_unittest.cc b/storage/browser/fileapi/sandbox_directory_database_unittest.cc
index dfaf01ed..110eabd6 100644
--- a/storage/browser/fileapi/sandbox_directory_database_unittest.cc
+++ b/storage/browser/fileapi/sandbox_directory_database_unittest.cc
@@ -119,21 +119,24 @@
   void MakeHierarchyLink(FileId parent_id,
                          FileId child_id,
                          const base::FilePath::StringType& name) {
-    ASSERT_TRUE(db()->db_->Put(
-        leveldb::WriteOptions(),
-        "CHILD_OF:" + base::Int64ToString(parent_id) + ":" +
-        FilePathToString(base::FilePath(name)),
-        base::Int64ToString(child_id)).ok());
+    ASSERT_TRUE(db()->db_
+                    ->Put(leveldb::WriteOptions(),
+                          "CHILD_OF:" + base::NumberToString(parent_id) + ":" +
+                              FilePathToString(base::FilePath(name)),
+                          base::NumberToString(child_id))
+                    .ok());
   }
 
   // Deletes link from parent of |file_id| to |file_id|.
   void DeleteHierarchyLink(FileId file_id) {
     FileInfo file_info;
     ASSERT_TRUE(db()->GetFileInfo(file_id, &file_info));
-    ASSERT_TRUE(db()->db_->Delete(
-        leveldb::WriteOptions(),
-        "CHILD_OF:" + base::Int64ToString(file_info.parent_id) + ":" +
-        FilePathToString(base::FilePath(file_info.name))).ok());
+    ASSERT_TRUE(
+        db()->db_
+            ->Delete(leveldb::WriteOptions(),
+                     "CHILD_OF:" + base::NumberToString(file_info.parent_id) +
+                         ":" + FilePathToString(base::FilePath(file_info.name)))
+            .ok());
   }
 
  protected:
diff --git a/storage/browser/quota/quota_manager.cc b/storage/browser/quota/quota_manager.cc
index c458eb4..980cd30 100644
--- a/storage/browser/quota/quota_manager.cc
+++ b/storage/browser/quota/quota_manager.cc
@@ -1131,7 +1131,7 @@
     temporary_storage_evictor_->GetStatistics(&stats);
     for (const auto& origin_usage_pair : stats) {
       statistics[origin_usage_pair.first] =
-          base::Int64ToString(origin_usage_pair.second);
+          base::NumberToString(origin_usage_pair.second);
     }
   }
   return statistics;
diff --git a/storage/common/database/database_identifier.cc b/storage/common/database/database_identifier.cc
index 0625135f..26de8fe 100644
--- a/storage/common/database/database_identifier.cc
+++ b/storage/common/database/database_identifier.cc
@@ -189,7 +189,7 @@
   if (is_unique_)
     return "__0";
   return scheme_ + "_" + EscapeIPv6Hostname(hostname_) + "_" +
-         base::IntToString(port_);
+         base::NumberToString(port_);
 }
 
 GURL DatabaseIdentifier::ToOrigin() const {
@@ -199,7 +199,7 @@
     return GURL();
   if (port_ == 0)
     return GURL(scheme_ + "://" + hostname_);
-  return GURL(scheme_ + "://" + hostname_ + ":" + base::IntToString(port_));
+  return GURL(scheme_ + "://" + hostname_ + ":" + base::NumberToString(port_));
 }
 
 }  // namespace storage
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index f1aa588bd..b42de65b 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -327,6 +327,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1209,6 +1219,21 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Windows-10-15063"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2385,6 +2410,21 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Windows-10-15063"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3549,6 +3589,21 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Windows-10-15063"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9691,6 +9746,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -10409,6 +10474,17 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
           "--test-launcher-print-test-stdio=always"
         ],
         "swarming": {
@@ -11135,6 +11211,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -11720,6 +11806,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -12291,6 +12387,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -12873,6 +12979,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -13467,6 +13583,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -14050,6 +14176,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -14786,6 +14922,17 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
           "--test-launcher-print-test-stdio=always"
         ],
         "swarming": {
@@ -15468,6 +15615,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -16140,6 +16297,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -16812,6 +16979,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -17484,6 +17661,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -18156,6 +18343,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -18828,6 +19025,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -19500,6 +19707,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -20172,6 +20389,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -20844,6 +21071,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -21516,6 +21753,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -22152,6 +22399,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -23011,6 +23268,21 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Windows-10"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index b2712d5..abf8211 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -639,6 +639,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -2893,6 +2903,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": false
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": false
         },
@@ -6322,6 +6342,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -7116,6 +7146,17 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "isolate_coverage_data": true,
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "isolate_coverage_data": true,
         "swarming": {
           "can_use_on_swarming_builders": true
@@ -10489,6 +10530,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -10943,6 +10994,10 @@
         "script": "checkperms.py"
       },
       {
+        "name": "headless_python_unittests",
+        "script": "headless_python_unittests.py"
+      },
+      {
         "name": "webkit_lint",
         "script": "webkit_lint.py"
       }
@@ -11756,6 +11811,23 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.14"
+            }
+          ],
+          "expiration": 21600
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 72d3422..a37f609 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -1342,6 +1342,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1801,6 +1811,10 @@
         "script": "checkperms.py"
       },
       {
+        "name": "headless_python_unittests",
+        "script": "headless_python_unittests.py"
+      },
+      {
         "name": "webkit_lint",
         "script": "webkit_lint.py"
       }
@@ -2114,6 +2128,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -2826,6 +2850,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -3755,6 +3789,21 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Ubuntu-16.04"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4499,6 +4548,10 @@
         "script": "checkperms.py"
       },
       {
+        "name": "headless_python_unittests",
+        "script": "headless_python_unittests.py"
+      },
+      {
         "name": "webkit_lint",
         "script": "webkit_lint.py"
       }
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index b5c62a65..ff06c3d4 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -503,6 +503,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.10"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1649,6 +1665,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.11"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2861,6 +2893,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.12.6"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4024,6 +4072,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.13"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5163,6 +5227,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "gpu": "none",
+              "os": "Mac-10.13"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 8654341..5fd0bca 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -3050,6 +3050,17 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
           "--test-launcher-print-test-stdio=always"
         ],
         "swarming": {
@@ -3840,6 +3851,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -7361,6 +7382,23 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "os": "Ubuntu-14.04"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
           "--test-launcher-print-test-stdio=always"
         ],
         "swarming": {
@@ -8431,6 +8469,17 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
           "--test-launcher-print-test-stdio=always"
         ],
         "swarming": {
@@ -9185,6 +9234,17 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
+        "args": [
           "--test-launcher-print-test-stdio=always"
         ],
         "swarming": {
@@ -10221,6 +10281,21 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Windows-10-15063"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index 594b693..9d53656 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -372,6 +372,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1483,6 +1493,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "os": "Windows-10-15063"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2672,6 +2698,22 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "os": "Windows-10-15063"
+            }
+          ]
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3797,6 +3839,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -4597,6 +4649,16 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
diff --git a/testing/buildbot/filters/webui_polymer2_browser_tests.filter b/testing/buildbot/filters/webui_polymer2_browser_tests.filter
index a8aa4a3..cbc0befd 100644
--- a/testing/buildbot/filters/webui_polymer2_browser_tests.filter
+++ b/testing/buildbot/filters/webui_polymer2_browser_tests.filter
@@ -71,6 +71,7 @@
 CrElementsDialogTest.*
 CrElementsDrawerTest.*
 CrElementsFingerprintProgressArcTest.*
+CrElementsIconButtonTest.*
 CrElementsInputTest.*
 CrElementsLazyRenderTest.*
 CrElementsPolicyIndicatorBehaviorTest.*
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 888e6b5..e5def3d 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -2419,6 +2419,9 @@
       'check_static_initializers': {
         'script': 'check_static_initializers.py',
       },
+      'headless_python_unittests': {
+        'script': 'headless_python_unittests.py',
+      },
       'webkit_lint': {
         'script': 'webkit_lint.py',
       },
@@ -4018,6 +4021,12 @@
       'cronet_tests': {},
       'cronet_unittests': {},
       'headless_browsertests': {},
+      'network_service_headless_browsertests': {
+        'args': [
+          '--enable-features=NetworkService',
+        ],
+        'test': 'headless_browsertests',
+      },
       'headless_unittests': {},
     },
 
diff --git a/testing/buildbot/tryserver.chromium.linux.json b/testing/buildbot/tryserver.chromium.linux.json
index e2a0d2f9..36ce76c6 100644
--- a/testing/buildbot/tryserver.chromium.linux.json
+++ b/testing/buildbot/tryserver.chromium.linux.json
@@ -354,6 +354,17 @@
         "test": "headless_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "isolate_coverage_data": true,
+        "name": "network_service_headless_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "headless_browsertests"
+      },
+      {
         "isolate_coverage_data": true,
         "swarming": {
           "can_use_on_swarming_builders": true
diff --git a/testing/perf/perf_test.cc b/testing/perf/perf_test.cc
index 737caa97..0b0b666db 100644
--- a/testing/perf/perf_test.cc
+++ b/testing/perf/perf_test.cc
@@ -53,14 +53,8 @@
                  size_t value,
                  const std::string& units,
                  bool important) {
-  PrintResultsImpl(measurement,
-                   modifier,
-                   trace,
-                   base::UintToString(static_cast<unsigned int>(value)),
-                   std::string(),
-                   std::string(),
-                   units,
-                   important);
+  PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value),
+                   std::string(), std::string(), units, important);
 }
 
 void PrintResult(const std::string& measurement,
@@ -80,15 +74,9 @@
                   size_t value,
                   const std::string& units,
                   bool important) {
-  output += ResultsToString(
-      measurement,
-      modifier,
-      trace,
-      base::UintToString(static_cast<unsigned int>(value)),
-      std::string(),
-      std::string(),
-      units,
-      important);
+  output +=
+      ResultsToString(measurement, modifier, trace, base::NumberToString(value),
+                      std::string(), std::string(), units, important);
 }
 
 void PrintResult(const std::string& measurement,
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 680fde6a..8dd5c01 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -4612,6 +4612,26 @@
             ]
         }
     ],
+    "SyncUssBookmarks'": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "ios",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SyncUSSBookmarks"
+                    ]
+                }
+            ]
+        }
+    ],
     "TabRanker": [
         {
             "platforms": [
diff --git a/third_party/blink/perf_tests/paint/contain-update-layer-tree.html b/third_party/blink/perf_tests/paint/contain-update-layer-tree.html
new file mode 100644
index 0000000..d9fd614
--- /dev/null
+++ b/third_party/blink/perf_tests/paint/contain-update-layer-tree.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<title>Contain update layer tree performance</title>
+<style>
+#wrapper {
+  position: relative;
+}
+.cell {
+  position: absolute;
+  box-sizing: border-box;
+  border: solid;
+  contain: strict;
+}
+.progressbar {
+  position: absolute;
+  left: 0px;
+  top: 5px;
+  height: 10px;
+}
+</style>
+<script src="../resources/runner.js"></script>
+<script src="resources/paint.js"></script>
+<pre id="log"></pre>
+<div id="wrapper"></div>
+<script>
+  const CELL_WIDTH = "50";
+  const CELL_HEIGHT = "25";
+  const NUM_ROWS = 200;
+  const NUM_COLUMNS = 200;
+  const DOM_DEPTH = 10;
+
+  function createContent(depth) {
+    let content = document.createElement("div");
+    content.appendChild(document.createElement("h1"));
+    content.appendChild(document.createElement("paragraph"));
+    if (depth > 0)
+      content.appendChild(createContent(depth - 1));
+    return content;
+  }
+
+  function setupTest() {
+    let wrapper = document.getElementById("wrapper");
+    for (let i = 0; i < NUM_ROWS; i++) {
+      for (let j = 0; j < NUM_COLUMNS; j++) {
+        let cell = document.createElement("div");
+        if (i == 0 && j == 0)
+          cell.id = "target";
+        cell.classList.add("cell");
+        cell.style.width = CELL_WIDTH + "px";
+        cell.style.height = CELL_HEIGHT + "px";
+        cell.style.left = (j * CELL_WIDTH) + "px";
+        cell.style.top = (i * CELL_HEIGHT) + "px";
+        cell.style.overflow = "visible";
+
+        cell.appendChild(createContent(DOM_DEPTH));
+
+        wrapper.appendChild(cell);
+      }
+    }
+  }
+
+  function runTest() {
+    let cell = document.getElementById("target");
+    // This causes a call to PaintLayer::SetNeedsCompositingInputsUpdate().
+    cell.style.overflow = cell.style.overflow == "hidden" ? "visible" : "hidden";
+  }
+
+  setupTest();
+
+  measurePaint({
+    run: runTest
+  });
+</script>
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index fc29734..d588cf8 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -59,7 +59,6 @@
     "notifications/notification.mojom",
     "page/display_cutout.mojom",
     "payments/payment_app.mojom",
-    "picture_in_picture/picture_in_picture.mojom",
     "plugins/plugin_registry.mojom",
     "presentation/presentation.mojom",
     "quota/quota_dispatcher_host.mojom",
@@ -111,7 +110,6 @@
     "//services/device/public/mojom",
     "//services/network/public/mojom",
     "//services/service_manager/public/mojom",
-    "//services/viz/public/interfaces",
     "//skia/public/interfaces",
     "//third_party/blink/public:web_feature_mojo_bindings",
     "//third_party/blink/public/mojom/usb",
@@ -201,7 +199,7 @@
     "service_worker/service_worker_registration.mojom",
 
     # Depends on controller_service_worker.mojom.
-    "worker/dedicated_worker_factory.mojom",
+    "worker/dedicated_worker_host_factory.mojom",
     "worker/shared_worker_factory.mojom",
   ]
 
diff --git a/third_party/blink/public/mojom/picture_in_picture/OWNERS b/third_party/blink/public/mojom/picture_in_picture/OWNERS
deleted file mode 100644
index 08850f4..0000000
--- a/third_party/blink/public/mojom/picture_in_picture/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-per-file *.mojom=set noparent
-per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom b/third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom
deleted file mode 100644
index 9146179e..0000000
--- a/third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module blink.mojom;
-
-import "services/viz/public/interfaces/compositing/surface_id.mojom";
-import "ui/gfx/geometry/mojo/geometry.mojom";
-
-// PictureInPictureDelegate is associated to a PictureInPictureService. It will
-// be notified by running its callbacks when a change happened to the running
-// Picture-in-Picture session.
-interface PictureInPictureDelegate {
-  PictureInPictureWindowSizeChanged(gfx.mojom.Size size);
-};
-
-// PictureInPictureService is a Document-associated interface that lives in
-// the browser process. It is responsible for implementing the browser-side
-// support for https://wicg.github.io/picture-in-picture and manages all
-// picture-in-picture interactions for Document. Picture-in-picture allows
-// a Document to display a video in an always-on-top floating window with
-// basic playback functionality (e.g. play and pause).
-interface PictureInPictureService {
-  // Notify the service that it should start a Picture-in-Picture session.
-  // player_id: WebMediaPlayer id used to control playback via the
-  //            Picture-in-Picture window.
-  // surface_id: SurfaceId to be shown in the Picture-in-Picture window.
-  // natural_size: Size of the video frames.
-  // show_play_pause_button: Whether a play/pause control should be offered in
-  //                         the Picture-in-Picture window.
-  // NOTE: this method shouldn't be called twice in a raw. An interleaved call
-  // to EndSession() would be expected. In case of some parameters have changed,
-  // UpdateSession() should be called.
-  StartSession(
-      uint32 player_id,
-      viz.mojom.SurfaceId? surface_id,
-      gfx.mojom.Size natural_size,
-      bool show_play_pause_button) => (gfx.mojom.Size size);
-
-  // Notify the service to end the Picture-in-Picture session. It will close
-  // the Picture-in-Picture window.
-  EndSession() => ();
-
-  // Notify the service that some information about the client have change. All
-  // information associated with the Picture-in-Picture session are sent again.
-  // A Picture-in-Picture session must already be active from a previous call to
-  // StartSession().
-  UpdateSession(
-      uint32 player_id,
-      viz.mojom.SurfaceId? surface_id,
-      gfx.mojom.Size natural_size,
-      bool show_play_pause_button);
-
-  // Associate a PictureInPictureDelegate with the service. All changes in
-  // Picture-in-Picture states will be sent to the delegate. Only one delegate
-  // can be set at a time.
-  SetDelegate(PictureInPictureDelegate delegate);
-};
diff --git a/third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom b/third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom
similarity index 89%
rename from third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom
rename to third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom
index b944541..948943d 100644
--- a/third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom
+++ b/third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom
@@ -20,8 +20,8 @@
 
 // PlzDedicatedWorker:
 // An interface implemented by clients (e.g., the renderer where "new Worker()"
-// was invoked) to observe events on the DedicatedWorkerFactory.
-interface DedicatedWorkerFactoryClient {
+// was invoked) to observe events on the DedicatedWorkerHostFactory.
+interface DedicatedWorkerHostFactoryClient {
   // Called when the worker host is created.
   OnWorkerHostCreated(
       // Used for accessing services from the worker.
@@ -52,9 +52,9 @@
   OnScriptLoadFailed();
 };
 
-// An interface used to instantiate a dedicated worker. The implementation of
-// this interface lives in the browser process.
-interface DedicatedWorkerFactory {
+// An interface used to instantiate a dedicated worker host. The implementation
+// of this interface lives in the browser process.
+interface DedicatedWorkerHostFactory {
   // Non-PlzDedicatedWorker:
   // The factory client should call this instead of CreateAndStartLoad() when
   // PlzDedicatedWorker is disabled.
@@ -62,7 +62,7 @@
   // Informs the browser that the renderer has created a new dedicated worker,
   // requesting |worker_interface_provider| to provide the worker access to mojo
   // interfaces. |origin| must either be unique or match the origin of the
-  // creating document.
+  // creating context (Document or DedicatedWorkerGlobalScope).
   CreateDedicatedWorker(
       url.mojom.Origin origin,
       service_manager.mojom.InterfaceProvider& worker_interface_provider);
@@ -78,5 +78,5 @@
   CreateAndStartLoad(url.mojom.Url script_url,
                      url.mojom.Origin origin,
                      blink.mojom.BlobURLToken? blob_url_token,
-                     DedicatedWorkerFactoryClient client);
+                     DedicatedWorkerHostFactoryClient client);
 };
diff --git a/third_party/blink/public/platform/web_media_player.h b/third_party/blink/public/platform/web_media_player.h
index 55115e8..edfea4c 100644
--- a/third_party/blink/public/platform/web_media_player.h
+++ b/third_party/blink/public/platform/web_media_player.h
@@ -31,9 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_MEDIA_PLAYER_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_MEDIA_PLAYER_H_
 
-#include "base/optional.h"
 #include "base/time/time.h"
-#include "components/viz/common/surfaces/surface_id.h"
 #include "third_party/blink/public/platform/web_callbacks.h"
 #include "third_party/blink/public/platform/web_content_decryption_module.h"
 #include "third_party/blink/public/platform/web_media_source.h"
@@ -139,6 +137,14 @@
     kAlways,
   };
 
+  // Callback to get notified when the Picture-in-Picture window is opened.
+  using PipWindowOpenedCallback = base::OnceCallback<void(const WebSize&)>;
+  // Callback to get notified when Picture-in-Picture window is closed.
+  using PipWindowClosedCallback = base::OnceClosure;
+  // Callback to get notified when the Picture-in-Picture window is resized.
+  using PipWindowResizedCallback =
+      base::RepeatingCallback<void(const WebSize&)>;
+
   virtual ~WebMediaPlayer() = default;
 
   virtual LoadTiming Load(LoadType, const WebMediaPlayerSource&, CorsMode) = 0;
@@ -152,13 +158,16 @@
 
   // Enter Picture-in-Picture and notifies Blink with window size
   // when video successfully enters Picture-in-Picture.
-  // TODO(mlamouri): rename to "OnRequestPictureInPicture".
-  virtual void EnterPictureInPicture() = 0;
+  virtual void EnterPictureInPicture(PipWindowOpenedCallback) = 0;
   // Exit Picture-in-Picture and notifies Blink when it's done.
-  virtual void ExitPictureInPicture() = 0;
+  virtual void ExitPictureInPicture(PipWindowClosedCallback) = 0;
   // Assign custom controls to the Picture-in-Picture window.
   virtual void SetPictureInPictureCustomControls(
       const std::vector<PictureInPictureControlInfo>&) = 0;
+  // Register a callback that will be run when the Picture-in-Picture window
+  // is resized.
+  virtual void RegisterPictureInPictureWindowResizeCallback(
+      PipWindowResizedCallback) = 0;
 
   virtual void RequestRemotePlayback() {}
   virtual void RequestRemotePlaybackControl() {}
@@ -402,18 +411,6 @@
   virtual void OnBecameVisible() {}
 
   virtual bool IsOpaque() const { return false; }
-
-  // Returns the id given by the WebMediaPlayerDelegate. This is used by the
-  // Blink code to pass a player id to mojo services.
-  // TODO(mlamouri): remove this and move the id handling to Blink.
-  virtual int GetDelegateId() { return -1; };
-
-  // Returns the SurfaceId the video element is currently using.
-  // Returns base::nullopt if the element isn't a video or doesn't have a
-  // SurfaceId associated to it.
-  virtual base::Optional<viz::SurfaceId> GetSurfaceId() {
-    return base::nullopt;
-  }
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/platform/web_media_player_client.h b/third_party/blink/public/platform/web_media_player_client.h
index b8ae775..092556d 100644
--- a/third_party/blink/public/platform/web_media_player_client.h
+++ b/third_party/blink/public/platform/web_media_player_client.h
@@ -179,15 +179,6 @@
   // Request the player to pause playback.
   virtual void RequestPause() = 0;
 
-  // Notify the client that one of the state used by Picture-in-Picture has
-  // changed. The client will then have to poll the states from the associated
-  // WebMediaPlayer.
-  // The states are:
-  //  - Delegate ID;
-  //  - Surface ID;
-  //  - Natural Size.
-  virtual void OnPictureInPictureStateChange() = 0;
-
  protected:
   ~WebMediaPlayerClient() = default;
 };
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
index fe53aa48..4e0c584 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -21,9 +21,9 @@
 #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/shared_buffer.h"
 #include "third_party/blink/renderer/platform/wtf/deque.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.h"
@@ -445,7 +445,7 @@
       // cancel the task.
       //
       // TODO(leszeks): Decrease the priority of these tasks where possible.
-      background_scheduler::PostOnBackgroundThreadWithTraits(
+      worker_pool::PostTaskWithTraits(
           FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()},
           CrossThreadBind(RunBlockingScriptStreamingTask,
                           WTF::Passed(std::move(script_streaming_task)),
@@ -498,7 +498,7 @@
       // The task creation shouldn't fail, since it didn't fail before during
       // NotifyAppendData.
       CHECK(script_streaming_task);
-      background_scheduler::PostOnBackgroundThreadWithTraits(
+      worker_pool::PostTaskWithTraits(
           FROM_HERE, {base::TaskPriority::USER_BLOCKING},
           CrossThreadBind(RunNonBlockingScriptStreamingTask,
                           WTF::Passed(std::move(script_streaming_task)),
diff --git a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
index 335c457..e217aa9 100644
--- a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
+++ b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
@@ -140,15 +140,14 @@
     return DispatchEventResult::kNotCanceled;
   }
   std::unique_ptr<EventTiming> eventTiming;
-  const Document& document = node_->GetDocument();
-  LocalFrame* frame = document.GetFrame();
-  if (frame && frame->DomWindow()) {
-    if (origin_trials::EventTimingEnabled(&document)) {
-      UseCounter::Count(document,
+  if (origin_trials::EventTimingEnabled(&node_->GetDocument())) {
+    LocalFrame* frame = node_->GetDocument().GetFrame();
+    if (frame && frame->DomWindow()) {
+      UseCounter::Count(node_->GetDocument(),
                         WebFeature::kPerformanceEventTimingConstructor);
+      eventTiming = std::make_unique<EventTiming>(frame->DomWindow());
+      eventTiming->WillDispatchEvent(*event_);
     }
-    eventTiming = std::make_unique<EventTiming>(frame->DomWindow());
-    eventTiming->WillDispatchEvent(*event_);
   }
   event_->GetEventPath().EnsureWindowEventContext();
 
@@ -156,6 +155,8 @@
       event_->IsMouseEvent() && event_->type() == event_type_names::kClick;
 
   if (is_click && event_->isTrusted()) {
+    Document& document = node_->GetDocument();
+    LocalFrame* frame = document.GetFrame();
     if (frame) {
       // A genuine mouse click cannot be triggered by script so we don't expect
       // there are any script in the stack.
diff --git a/third_party/blink/renderer/core/frame/picture_in_picture_controller.h b/third_party/blink/renderer/core/frame/picture_in_picture_controller.h
index 87d82d73..98b35b80 100644
--- a/third_party/blink/renderer/core/frame/picture_in_picture_controller.h
+++ b/third_party/blink/renderer/core/frame/picture_in_picture_controller.h
@@ -83,8 +83,6 @@
       HTMLVideoElement*,
       const std::vector<PictureInPictureControlInfo>&) = 0;
 
-  // Notifies that one of the states used by Picture-in-Picture has changed.
-  virtual void OnPictureInPictureStateChange() = 0;
 
   void Trace(blink::Visitor*) override;
 
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
index 345ec01..b283207 100644
--- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -20,10 +20,10 @@
 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
 #include "third_party/blink/renderer/platform/histogram.h"
 #include "third_party/blink/renderer/platform/image-encoders/image_encoder_utils.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/time.h"
 #include "third_party/skia/include/core/SkSurface.h"
@@ -330,7 +330,7 @@
                         WrapPersistent(this)));
 
     } else {
-      background_scheduler::PostOnBackgroundThread(
+      worker_pool::PostTask(
           FROM_HERE,
           CrossThreadBind(&CanvasAsyncBlobCreator::EncodeImageOnEncoderThread,
                           WrapCrossThreadPersistent(this), quality));
diff --git a/third_party/blink/renderer/core/html/media/html_audio_element.h b/third_party/blink/renderer/core/html/media/html_audio_element.h
index b6076b7..2463517 100644
--- a/third_party/blink/renderer/core/html/media/html_audio_element.h
+++ b/third_party/blink/renderer/core/html/media/html_audio_element.h
@@ -55,7 +55,6 @@
   void PictureInPictureControlClicked(const WebString& control_id) override {
     NOTREACHED();
   }
-  void OnPictureInPictureStateChange() final { NOTREACHED(); }
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h
index 4e059f9c..e0ee8d2 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.h
+++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -333,8 +333,6 @@
   // becomes visible again.
   bool PausedWhenVisible() const;
 
-  void SetCcLayerForTesting(cc::Layer* layer) { SetCcLayer(layer); }
-
  protected:
   HTMLMediaElement(const QualifiedName&, Document&);
   ~HTMLMediaElement() override;
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.cc b/third_party/blink/renderer/core/html/media/html_video_element.cc
index e29450c..642053f 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_video_element.cc
@@ -502,10 +502,8 @@
 void HTMLVideoElement::DidEnterFullscreen() {
   UpdateControlsVisibility();
 
-  if (DisplayType() == WebMediaPlayer::DisplayType::kPictureInPicture) {
-    PictureInPictureController::From(GetDocument())
-        .ExitPictureInPicture(this, nullptr);
-  }
+  if (DisplayType() == WebMediaPlayer::DisplayType::kPictureInPicture)
+    exitPictureInPicture(base::DoNothing());
 
   if (GetWebMediaPlayer()) {
     // FIXME: There is no embedder-side handling in web test mode.
@@ -663,12 +661,19 @@
          PictureInPictureController::Status::kEnabled;
 }
 
-void HTMLVideoElement::enterPictureInPicture() {
+void HTMLVideoElement::enterPictureInPicture(
+    WebMediaPlayer::PipWindowOpenedCallback callback) {
   if (DisplayType() == WebMediaPlayer::DisplayType::kFullscreen)
     Fullscreen::ExitFullscreen(GetDocument());
 
   if (GetWebMediaPlayer())
-    GetWebMediaPlayer()->EnterPictureInPicture();
+    GetWebMediaPlayer()->EnterPictureInPicture(std::move(callback));
+}
+
+void HTMLVideoElement::exitPictureInPicture(
+    WebMediaPlayer::PipWindowClosedCallback callback) {
+  if (GetWebMediaPlayer())
+    GetWebMediaPlayer()->ExitPictureInPicture(std::move(callback));
 }
 
 void HTMLVideoElement::SendCustomControlsToPipWindow() {
@@ -707,16 +712,6 @@
   return is_auto_picture_in_picture_;
 }
 
-void HTMLVideoElement::OnPictureInPictureStateChange() {
-  if (DisplayType() != WebMediaPlayer::DisplayType::kPictureInPicture ||
-      IsInAutoPIP()) {
-    return;
-  }
-
-  PictureInPictureController::From(GetDocument())
-      .OnPictureInPictureStateChange();
-}
-
 void HTMLVideoElement::OnEnteredPictureInPicture() {
   if (!picture_in_picture_interstitial_) {
     picture_in_picture_interstitial_ =
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.h b/third_party/blink/renderer/core/html/media/html_video_element.h
index 925fae2..9e6a0a1 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.h
+++ b/third_party/blink/renderer/core/html/media/html_video_element.h
@@ -175,14 +175,14 @@
 
   void MediaRemotingStarted(const WebString& remote_device_friendly_name) final;
   bool SupportsPictureInPicture() const final;
-  void enterPictureInPicture();
+  void enterPictureInPicture(WebMediaPlayer::PipWindowOpenedCallback callback);
+  void exitPictureInPicture(WebMediaPlayer::PipWindowClosedCallback callback);
   void SendCustomControlsToPipWindow();
   void PictureInPictureStopped() final;
   void PictureInPictureControlClicked(const WebString& control_id) final;
   void MediaRemotingStopped(WebLocalizedString::Name error_msg) final;
   WebMediaPlayer::DisplayType DisplayType() const final;
   bool IsInAutoPIP() const final;
-  void OnPictureInPictureStateChange() final;
 
   // Used by the PictureInPictureController as callback when the video element
   // enters or exits Picture-in-Picture state.
diff --git a/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc b/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc
index bc01a5ee..8fd93c8e 100644
--- a/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc
+++ b/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/core/html/media/video_wake_lock.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
 #include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
 #include "third_party/blink/renderer/core/html/media/html_media_test_helper.h"
@@ -16,107 +15,23 @@
 
 namespace blink {
 
-// The VideoWakeLockPictureInPictureService implements the PictureInPicture
-// service in the same process as the test and guarantees that the callbacks are
-// called in order for the events to be fired. set_run_loop() MUST be called
-// before each attempt to enter/leave Picture-in-Picture.
-class VideoWakeLockPictureInPictureService
-    : public mojom::blink::PictureInPictureService {
+class VideoWakeLockMediaPlayer : public EmptyWebMediaPlayer {
  public:
-  VideoWakeLockPictureInPictureService() : binding_(this) {}
-  ~VideoWakeLockPictureInPictureService() override = default;
-
-  void Bind(mojo::ScopedMessagePipeHandle handle) {
-    binding_.Bind(
-        mojom::blink::PictureInPictureServiceRequest(std::move(handle)));
-  }
-
-  void StartSession(uint32_t,
-                    const base::Optional<viz::SurfaceId>&,
-                    const blink::WebSize&,
-                    bool,
-                    StartSessionCallback callback) final {
+  void EnterPictureInPicture(PipWindowOpenedCallback callback) final {
     std::move(callback).Run(WebSize());
   }
 
-  void EndSession(EndSessionCallback callback) final {
+  void ExitPictureInPicture(PipWindowClosedCallback callback) final {
     std::move(callback).Run();
   }
-
-  void UpdateSession(uint32_t,
-                     const base::Optional<viz::SurfaceId>&,
-                     const blink::WebSize&,
-                     bool) final {}
-  void SetDelegate(mojom::blink::PictureInPictureDelegatePtr) final {}
-
- private:
-  mojo::Binding<mojom::blink::PictureInPictureService> binding_;
-};
-
-class VideoWakeLockFrameClient : public test::MediaStubLocalFrameClient {
- public:
-  static VideoWakeLockFrameClient* Create(
-      std::unique_ptr<WebMediaPlayer> player) {
-    return MakeGarbageCollected<VideoWakeLockFrameClient>(std::move(player));
-  }
-
-  explicit VideoWakeLockFrameClient(std::unique_ptr<WebMediaPlayer> player)
-      : test::MediaStubLocalFrameClient(std::move(player)),
-        interface_provider_(new service_manager::InterfaceProvider()) {}
-
-  service_manager::InterfaceProvider* GetInterfaceProvider() override {
-    return interface_provider_.get();
-  }
-
- private:
-  std::unique_ptr<service_manager::InterfaceProvider> interface_provider_;
-
-  DISALLOW_COPY_AND_ASSIGN(VideoWakeLockFrameClient);
 };
 
 class VideoWakeLockTest : public PageTestBase {
  public:
-  // Helper class that will block running the test until the given event is
-  // fired on the given element.
-  class WaitForEvent : public NativeEventListener {
-   public:
-    static WaitForEvent* Create(Element* element, const AtomicString& name) {
-      return MakeGarbageCollected<WaitForEvent>(element, name);
-    }
-
-    WaitForEvent(Element* element, const AtomicString& name)
-        : element_(element), name_(name) {
-      element_->addEventListener(name_, this);
-      run_loop_.Run();
-    }
-
-    void Invoke(ExecutionContext*, Event*) final {
-      run_loop_.Quit();
-      element_->removeEventListener(name_, this);
-    }
-
-    void Trace(Visitor* visitor) final {
-      NativeEventListener::Trace(visitor);
-      visitor->Trace(element_);
-    }
-
-   private:
-    base::RunLoop run_loop_;
-    Member<Element> element_;
-    AtomicString name_;
-  };
-
   void SetUp() override {
     PageTestBase::SetupPageWithClients(
-        nullptr, VideoWakeLockFrameClient::Create(
-                     std::make_unique<EmptyWebMediaPlayer>()));
-
-    service_manager::InterfaceProvider::TestApi test_api(
-        GetFrame().Client()->GetInterfaceProvider());
-    test_api.SetBinderForName(
-        mojom::blink::PictureInPictureService::Name_,
-        WTF::BindRepeating(&VideoWakeLockPictureInPictureService::Bind,
-                           WTF::Unretained(&pip_service_)));
+        nullptr, test::MediaStubLocalFrameClient::Create(
+                     std::make_unique<VideoWakeLockMediaPlayer>()));
 
     video_ = HTMLVideoElement::Create(GetDocument());
     video_wake_lock_ = MakeGarbageCollected<VideoWakeLock>(*video_.Get());
@@ -142,24 +57,16 @@
   void SimulateEnterPictureInPicture() {
     PictureInPictureController::From(GetDocument())
         .EnterPictureInPicture(Video(), nullptr);
-
-    WaitForEvent::Create(video_.Get(),
-                         event_type_names::kEnterpictureinpicture);
   }
 
   void SimulateLeavePictureInPicture() {
     PictureInPictureController::From(GetDocument())
         .ExitPictureInPicture(Video(), nullptr);
-
-    WaitForEvent::Create(video_.Get(),
-                         event_type_names::kLeavepictureinpicture);
   }
 
  private:
   Persistent<HTMLVideoElement> video_;
   Persistent<VideoWakeLock> video_wake_lock_;
-
-  VideoWakeLockPictureInPictureService pip_service_;
 };
 
 TEST_F(VideoWakeLockTest, NoLockByDefault) {
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
index 9599733..70950b9 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
@@ -17,8 +17,8 @@
 #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/wtf/saturated_arithmetic.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
@@ -1004,7 +1004,7 @@
                                      draw_dst_rect, parsed_options.flip_y);
   std::unique_ptr<ParsedOptions> passed_parsed_options =
       std::make_unique<ParsedOptions>(parsed_options);
-  background_scheduler::PostOnBackgroundThread(
+  worker_pool::PostTask(
       FROM_HERE,
       CrossThreadBind(&RasterizeImageOnBackgroundThread,
                       WrapCrossThreadPersistent(resolver),
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
index 41d1dec..b3fa07e15 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
@@ -52,9 +52,9 @@
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/histogram.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/shared_buffer.h"
 #include "v8/include/v8.h"
 
@@ -314,7 +314,7 @@
     DOMArrayBuffer* array_buffer) {
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
       Thread::Current()->GetTaskRunner();
-  background_scheduler::PostOnBackgroundThread(
+  worker_pool::PostTask(
       FROM_HERE,
       CrossThreadBind(
           &ImageBitmapFactories::ImageBitmapLoader::DecodeImageOnDecoderThread,
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc
index 1a0f15a5..ed269f7 100644
--- a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc
+++ b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc
@@ -98,7 +98,7 @@
     }
   }
 
-  box->SetOverrideBlockPercentageResolutionSize(
+  box->SetOverridePercentageResolutionBlockSize(
       percentage_resolution_logical_height);
 
   if (box->IsLayoutCustom())
@@ -107,7 +107,7 @@
   box->ForceLayout();
 
   box->ClearOverrideContainingBlockContentSize();
-  box->ClearOverrideBlockPercentageResolutionSize();
+  box->ClearOverridePercentageResolutionBlockSize();
   box->ClearOverrideSize();
 
   if (box->IsLayoutCustom())
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index 2f0d5ca..1014d1b 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -138,7 +138,7 @@
 void LayoutBox::WillBeDestroyed() {
   ClearOverrideSize();
   ClearOverrideContainingBlockContentSize();
-  ClearOverrideBlockPercentageResolutionSize();
+  ClearOverridePercentageResolutionBlockSize();
 
   if (IsOutOfFlowPositioned())
     LayoutBlock::RemovePositionedObject(this);
@@ -1472,17 +1472,17 @@
       false;
 }
 
-LayoutUnit LayoutBox::OverrideBlockPercentageResolutionSize() const {
-  DCHECK(HasOverrideBlockPercentageResolutionSize());
-  return rare_data_->override_block_percentage_resolution_size_;
+LayoutUnit LayoutBox::OverridePercentageResolutionBlockSize() const {
+  DCHECK(HasOverridePercentageResolutionBlockSize());
+  return rare_data_->override_percentage_resolution_block_size_;
 }
 
-bool LayoutBox::HasOverrideBlockPercentageResolutionSize() const {
+bool LayoutBox::HasOverridePercentageResolutionBlockSize() const {
   return rare_data_ &&
-         rare_data_->has_override_block_percentage_resolution_size_;
+         rare_data_->has_override_percentage_resolution_block_size_;
 }
 
-void LayoutBox::SetOverrideBlockPercentageResolutionSize(
+void LayoutBox::SetOverridePercentageResolutionBlockSize(
     LayoutUnit logical_height) {
   DCHECK_GE(logical_height, LayoutUnit(-1));
   auto& rare_data = EnsureRareData();
@@ -1491,19 +1491,19 @@
   // cannot be in use at the same time.
   DCHECK(!rare_data.has_override_available_inline_size_);
 
-  rare_data.override_block_percentage_resolution_size_ = logical_height;
-  rare_data.has_override_block_percentage_resolution_size_ = true;
+  rare_data.override_percentage_resolution_block_size_ = logical_height;
+  rare_data.has_override_percentage_resolution_block_size_ = true;
 }
 
-void LayoutBox::ClearOverrideBlockPercentageResolutionSize() {
+void LayoutBox::ClearOverridePercentageResolutionBlockSize() {
   if (!rare_data_)
     return;
-  EnsureRareData().has_override_block_percentage_resolution_size_ = false;
+  EnsureRareData().has_override_percentage_resolution_block_size_ = false;
 }
 
 LayoutUnit LayoutBox::OverrideAvailableInlineSize() const {
   DCHECK(HasOverrideAvailableInlineSize());
-  return rare_data_->override_block_percentage_resolution_size_;
+  return rare_data_->override_percentage_resolution_block_size_;
 }
 
 bool LayoutBox::HasOverrideAvailableInlineSize() const {
@@ -1516,7 +1516,7 @@
 
   // The actual data field is shared with override block percentage resolution
   // size. They cannot be in use at the same time.
-  DCHECK(!rare_data.has_override_block_percentage_resolution_size_);
+  DCHECK(!rare_data.has_override_percentage_resolution_block_size_);
 
   rare_data.override_available_inline_size_ = inline_size;
   rare_data.has_override_available_inline_size_ = true;
@@ -3473,7 +3473,7 @@
          !containing_block->IsOutOfFlowPositioned() &&
          !(containing_block->IsLayoutCustom() &&
            ToLayoutCustom(containing_block)->IsLoaded()) &&
-         !containing_block->HasOverrideBlockPercentageResolutionSize() &&
+         !containing_block->HasOverridePercentageResolutionBlockSize() &&
          !containing_block->IsLayoutGrid() &&
          containing_block->StyleRef().LogicalHeight().IsAuto();
 }
@@ -3507,11 +3507,11 @@
   }
 
   LayoutUnit available_height(-1);
-  if (containing_block_child->HasOverrideBlockPercentageResolutionSize()) {
+  if (containing_block_child->HasOverridePercentageResolutionBlockSize()) {
     available_height =
-        containing_block_child->OverrideBlockPercentageResolutionSize();
-  } else if (cb->HasOverrideBlockPercentageResolutionSize()) {
-    available_height = cb->OverrideBlockPercentageResolutionSize();
+        containing_block_child->OverridePercentageResolutionBlockSize();
+  } else if (cb->HasOverridePercentageResolutionBlockSize()) {
+    available_height = cb->OverridePercentageResolutionBlockSize();
   } else if (HasOverrideContainingBlockContentLogicalWidth() &&
              IsHorizontalWritingMode() != real_cb->IsHorizontalWritingMode()) {
     available_height = OverrideContainingBlockContentLogicalWidth();
@@ -3706,7 +3706,7 @@
   // CustomLayout items can resolve their percentages against an available or
   // percentage size override.
   if (IsCustomItem() && (HasOverrideContainingBlockContentLogicalHeight() ||
-                         HasOverrideBlockPercentageResolutionSize()))
+                         HasOverridePercentageResolutionBlockSize()))
     return false;
 
   if (LayoutBlock* cb = ContainingBlockForAutoHeightDetection(logical_height))
@@ -3778,8 +3778,8 @@
             ToLayoutBoxModelObject(cb));
       } else if (stretched_height != -1) {
         available_height = stretched_height;
-      } else if (HasOverrideBlockPercentageResolutionSize()) {
-        available_height = OverrideBlockPercentageResolutionSize();
+      } else if (HasOverridePercentageResolutionBlockSize()) {
+        available_height = OverridePercentageResolutionBlockSize();
       } else {
         available_height = has_perpendicular_containing_block
                                ? ContainingBlockLogicalWidthForContent()
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index 0d1df0c5..fd5e6ec 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -71,7 +71,7 @@
         // TODO(rego): We should store these based on physical direction.
         has_override_containing_block_content_logical_width_(false),
         has_override_containing_block_content_logical_height_(false),
-        has_override_block_percentage_resolution_size_(false),
+        has_override_percentage_resolution_block_size_(false),
         has_override_available_inline_size_(false),
         has_previous_content_box_rect_and_layout_overflow_rect_(false),
         percent_height_container_(nullptr),
@@ -87,7 +87,7 @@
 
   bool has_override_containing_block_content_logical_width_ : 1;
   bool has_override_containing_block_content_logical_height_ : 1;
-  bool has_override_block_percentage_resolution_size_ : 1;
+  bool has_override_percentage_resolution_block_size_ : 1;
   bool has_override_available_inline_size_ : 1;
   bool has_previous_content_box_rect_and_layout_overflow_rect_ : 1;
 
@@ -101,7 +101,7 @@
   // LayoutNG. So, since custom layout containers are laid out by legacy, this
   // should be safe.
   union {
-    LayoutUnit override_block_percentage_resolution_size_;
+    LayoutUnit override_percentage_resolution_block_size_;
     LayoutUnit override_available_inline_size_;
   };
 
@@ -790,13 +790,13 @@
   void SetOverrideContainingBlockContentLogicalHeight(LayoutUnit);
   void ClearOverrideContainingBlockContentSize();
 
-  // When a block percentage resolution size override has been set, we'll use
+  // When a percentage resolution block size override has been set, we'll use
   // that size to resolve block-size percentages on this box, rather than
   // deducing it from the containing block.
-  LayoutUnit OverrideBlockPercentageResolutionSize() const;
-  bool HasOverrideBlockPercentageResolutionSize() const;
-  void SetOverrideBlockPercentageResolutionSize(LayoutUnit);
-  void ClearOverrideBlockPercentageResolutionSize();
+  LayoutUnit OverridePercentageResolutionBlockSize() const;
+  bool HasOverridePercentageResolutionBlockSize() const;
+  void SetOverridePercentageResolutionBlockSize(LayoutUnit);
+  void ClearOverridePercentageResolutionBlockSize();
 
   // When an available inline size override has been set, we'll use that to fill
   // available inline size, rather than deducing it from the containing block
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
index 9cbc223..f265434 100644
--- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -718,7 +718,7 @@
     return false;
   if (this_box && this_box->IsCustomItem() &&
       (this_box->HasOverrideContainingBlockContentLogicalHeight() ||
-       this_box->HasOverrideBlockPercentageResolutionSize()))
+       this_box->HasOverridePercentageResolutionBlockSize()))
     return false;
 
   if (logical_height_length.IsAuto() &&
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc
index bf73a03c..64babf9 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h"
 
+#include "third_party/blink/renderer/core/layout/layout_text_fragment.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_bidi_paragraph.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h"
@@ -131,7 +132,6 @@
     return false;
   if (IsIgnoredInCaretMovement(index))
     return false;
-  // TODO(xiaochengh): Handle other cases
   return true;
 }
 
@@ -156,7 +156,40 @@
 }
 
 bool NGCaretNavigator::IsIgnoredInCaretMovement(unsigned index) const {
-  // TODO(xiaochengh): Include floats, out-of-flows and CSS-generated contents.
+  DCHECK_LT(index, GetText().length());
+  const NGInlineItem& item = GetData().FindItemForTextOffset(index);
+
+  // Caret navigation works on text, atomic inlines and non-ZWS controls only.
+  switch (item.Type()) {
+    case NGInlineItem::kText:
+    case NGInlineItem::kAtomicInline:
+      break;
+    case NGInlineItem::kControl:
+      if (GetText()[index] == kZeroWidthSpaceCharacter)
+        return true;
+      break;
+    default:
+      return true;
+  }
+
+  // Ignore CSS generate contents.
+  // TODO(xiaochengh): This might be general enough to be merged into
+  // |NGInlineItem| as a member function.
+  DCHECK(item.GetLayoutObject());
+  const LayoutObject* object = item.GetLayoutObject();
+  if (const auto* text_fragment = ToLayoutTextFragmentOrNull(object)) {
+    // ::first-letter |LayoutTextFragment| returns null for |GetNode()|. Check
+    // |AssociatedTextNode()| to see if it's created by a text node.
+    if (!text_fragment->AssociatedTextNode())
+      return true;
+  } else {
+    if (!object->NonPseudoNode())
+      return true;
+  }
+
+  // Ignore collapsed whitespaces that not visually at line end due to bidi.
+  // Caret movement should move over them as if they don't exist to match the
+  // existing behavior.
   return IsCollapsedSpaceByLineWrap(index) &&
          index != VisualLastCharacterOf(ContainingLineOf(index));
 }
@@ -321,7 +354,6 @@
     if (next.type != VisualMovementResultType::kWithinContext)
       return {next.type, base::nullopt};
 
-    // TODO(xiaochengh): Handle editing-ignored contents, e.g., CSS-generated.
     if (next.has_passed_character)
       has_passed_character = true;
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h
index 046de98..f4e61d4 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h
@@ -77,7 +77,6 @@
   // TODO(xiaochengh): Handle the following
   // - Grapheme clusters
   // - Enterable atomic inlines
-  // - Editing-ignored contents
 
   enum class VisualMovementResultType {
     kWithinContext,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc
index c386e4f..1192a8e 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc
@@ -393,4 +393,31 @@
   EXPECT_TRUE(RightPositionOf(CaretAfter(6)).IsAfterContext());
 }
 
+TEST_F(NGCaretNavigatorTest, MoveOverPseudoElementInBidi) {
+  SetupHtml("container",
+            "<style>.bidi::before,.bidi::after{content:'a\\05D0 b'}</style>"
+            "<div id=container>&#x05D0;&#x05D1; &#x05D2;&#x05D3; "
+            "<span class=bidi>&#x05D4;&#x05D5;</span>"
+            " &#x05D6;&#x05D7; &#x05D8;&#x05D9;</div>");
+
+  // Text: "AB CD aAbEFaAb GH IJ"
+  // Rendered as: "DC BA aAbFEaAb JI HG"
+
+  // Moving right from "BA |" should arrive at "F|E"
+  EXPECT_TRUE(RightPositionOf(CaretAfter(5)).IsWithinContext());
+  EXPECT_EQ(CaretBefore(10), *RightPositionOf(CaretAfter(5)).position);
+
+  // Moving left from "|FE" should arrive at "BA| "
+  EXPECT_TRUE(LeftPositionOf(CaretAfter(10)).IsWithinContext());
+  EXPECT_EQ(CaretBefore(5), *LeftPositionOf(CaretAfter(10)).position);
+
+  // Moving right from "FE|" should arrive at " |JI"
+  EXPECT_TRUE(RightPositionOf(CaretBefore(9)).IsWithinContext());
+  EXPECT_EQ(CaretAfter(14), *RightPositionOf(CaretBefore(9)).position);
+
+  // Moving left from "| JI" should arrive at "F|E"
+  EXPECT_TRUE(LeftPositionOf(CaretBefore(14)).IsWithinContext());
+  EXPECT_EQ(CaretAfter(9), *LeftPositionOf(CaretBefore(14)).position);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/page/drag_controller.cc b/third_party/blink/renderer/core/page/drag_controller.cc
index 3b0b20a..818638f9 100644
--- a/third_party/blink/renderer/core/page/drag_controller.cc
+++ b/third_party/blink/renderer/core/page/drag_controller.cc
@@ -292,12 +292,21 @@
   if (OperationForLoad(drag_data, local_root) != kDragOperationNone) {
     if (page_->GetSettings().GetNavigateOnDragDrop()) {
       ResourceRequest resource_request(drag_data->AsURL());
-      // TODO(mkwst): Perhaps this should use a unique origin as the requestor
-      // origin rather than the origin of the dragged data URL?
-      resource_request.SetRequestorOrigin(
-          SecurityOrigin::Create(KURL(drag_data->AsURL())));
       resource_request.SetHasUserGesture(LocalFrame::HasTransientUserActivation(
           document_under_mouse_ ? document_under_mouse_->GetFrame() : nullptr));
+
+      // Use a unique origin to match other navigations that are initiated
+      // outside of a renderer process (e.g. omnibox navigations).  Here, the
+      // initiator of the navigation is a user dragging files from *outside* of
+      // the current page.  See also https://crbug.com/930049.
+      //
+      // TODO(lukasza): Once drag-and-drop remembers the source of the drag
+      // (unique origin for drags started from top-level Chrome like bookmarks
+      // or for drags started from other apps like Windows Explorer;  specific
+      // origin for drags started from another tab) we should use the source of
+      // the drag as the initiator of the navigation below.
+      resource_request.SetRequestorOrigin(SecurityOrigin::CreateUniqueOpaque());
+
       page_->MainFrame()->Navigate(FrameLoadRequest(nullptr, resource_request),
                                    WebFrameLoadType::kStandard);
     }
diff --git a/third_party/blink/renderer/core/timing/event_timing.cc b/third_party/blink/renderer/core/timing/event_timing.cc
index 3315755..cca33b2 100644
--- a/third_party/blink/renderer/core/timing/event_timing.cc
+++ b/third_party/blink/renderer/core/timing/event_timing.cc
@@ -7,7 +7,6 @@
 #include "third_party/blink/renderer/core/dom/events/event.h"
 #include "third_party/blink/renderer/core/events/pointer_event.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
-#include "third_party/blink/renderer/core/origin_trials/origin_trials.h"
 #include "third_party/blink/renderer/core/timing/dom_window_performance.h"
 #include "third_party/blink/renderer/core/timing/performance_event_timing.h"
 #include "third_party/blink/renderer/platform/wtf/time.h"
@@ -26,29 +25,22 @@
          event.isTrusted();
 }
 
-void EventTiming::FinishWillDispatch() {
-  processing_start_ = CurrentTimeTicks();
-  finished_will_dispatch_event_ = true;
-}
-
 void EventTiming::WillDispatchEvent(const Event& event) {
   // Assume each event can be dispatched only once.
   DCHECK(!finished_will_dispatch_event_);
   if (!performance_ || !ShouldReportForEventTiming(event))
     return;
 
-  // We care about events when the first input is desired or
-  // when the EventTiming origin trial is enabled.
-  if (performance_->FirstInputDesired()) {
-    FinishWillDispatch();
-    return;
-  }
-  if (!origin_trials::EventTimingEnabled(performance_->GetExecutionContext()))
-    return;
+  // Although we screen the events for timing by setting these conditions here,
+  // we cannot assume that the conditions should still hold true in
+  // DidDispatchEvent. These conditions have to be re-tested before an entry is
+  // dispatched.
   if ((performance_->ShouldBufferEntries() &&
        !performance_->IsEventTimingBufferFull()) ||
-      performance_->HasObserverFor(PerformanceEntry::kEvent)) {
-    FinishWillDispatch();
+      performance_->HasObserverFor(PerformanceEntry::kEvent) ||
+      !performance_->FirstInputDetected()) {
+    processing_start_ = CurrentTimeTicks();
+    finished_will_dispatch_event_ = true;
   }
 }
 
diff --git a/third_party/blink/renderer/core/timing/event_timing.h b/third_party/blink/renderer/core/timing/event_timing.h
index 96648d9d..59bacd8 100644
--- a/third_party/blink/renderer/core/timing/event_timing.h
+++ b/third_party/blink/renderer/core/timing/event_timing.h
@@ -26,7 +26,6 @@
   void DidDispatchEvent(const Event&);
 
  private:
-  void FinishWillDispatch();
   bool ShouldReportForEventTiming(const Event& event) const;
   // The time the first event handler or default action started to execute.
   TimeTicks processing_start_;
diff --git a/third_party/blink/renderer/core/timing/performance_event_timing.idl b/third_party/blink/renderer/core/timing/performance_event_timing.idl
index 951011e3..ef577a5 100644
--- a/third_party/blink/renderer/core/timing/performance_event_timing.idl
+++ b/third_party/blink/renderer/core/timing/performance_event_timing.idl
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 // https://github.com/wicg/event-timing
-[Exposed=Window]
-interface PerformanceEventTiming : PerformanceEntry {
+[
+    Exposed=Window,
+    OriginTrialEnabled=EventTiming
+] interface PerformanceEventTiming : PerformanceEntry {
     readonly attribute DOMHighResTimeStamp processingStart;
     readonly attribute DOMHighResTimeStamp processingEnd;
     readonly attribute boolean cancelable;
diff --git a/third_party/blink/renderer/core/timing/performance_observer.cc b/third_party/blink/renderer/core/timing/performance_observer.cc
index 5850cc8..1cb5429 100644
--- a/third_party/blink/renderer/core/timing/performance_observer.cc
+++ b/third_party/blink/renderer/core/timing/performance_observer.cc
@@ -59,9 +59,10 @@
   if (execution_context->IsDocument()) {
     if (origin_trials::ElementTimingEnabled(execution_context))
       supportedEntryTypes.push_back(performance_entry_names::kElement);
-    if (origin_trials::EventTimingEnabled(execution_context))
+    if (origin_trials::EventTimingEnabled(execution_context)) {
       supportedEntryTypes.push_back(performance_entry_names::kEvent);
-    supportedEntryTypes.push_back(performance_entry_names::kFirstInput);
+      supportedEntryTypes.push_back(performance_entry_names::kFirstInput);
+    }
     if (origin_trials::LayoutJankAPIEnabled(execution_context))
       supportedEntryTypes.push_back(performance_entry_names::kLayoutJank);
     supportedEntryTypes.push_back(performance_entry_names::kLongtask);
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc
index 89924e9..3f264bb5 100644
--- a/third_party/blink/renderer/core/timing/window_performance.cc
+++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -329,23 +329,12 @@
   return !timing() || !timing()->loadEventStart();
 }
 
-bool WindowPerformance::FirstInputDesired() const {
-  if (!GetFrame() || !GetFrame()->IsMainFrame())
-    return false;
-
-  return !first_input_timing_;
-}
-
 void WindowPerformance::RegisterEventTiming(const AtomicString& event_type,
                                             TimeTicks start_time,
                                             TimeTicks processing_start,
                                             TimeTicks processing_end,
                                             bool cancelable) {
-  if (!GetFrame())
-    return;
-
-  DCHECK(FirstInputDesired() ||
-         origin_trials::EventTimingEnabled(GetExecutionContext()));
+  DCHECK(origin_trials::EventTimingEnabled(GetExecutionContext()));
 
   // |start_time| could be null in some tests that inject input.
   DCHECK(!processing_start.is_null());
@@ -375,11 +364,7 @@
 
 void WindowPerformance::ReportEventTimings(WebLayerTreeView::SwapResult result,
                                            TimeTicks timestamp) {
-  if (!GetFrame())
-    return;
-
-  DCHECK(FirstInputDesired() ||
-         origin_trials::EventTimingEnabled(GetExecutionContext()));
+  DCHECK(origin_trials::EventTimingEnabled(GetExecutionContext()));
 
   DOMHighResTimeStamp end_time = MonotonicTimeToDOMHighResTimeStamp(timestamp);
   for (const auto& entry : event_timings_) {
@@ -397,11 +382,8 @@
             PerformanceEventTiming::CreateFirstInputTiming(entry));
       }
     }
-    // Do not report EventTiming unless origin trial is enabled!
-    if (!origin_trials::EventTimingEnabled(GetExecutionContext()) ||
-        duration_in_ms <= kEventTimingDurationThresholdInMs) {
+    if (duration_in_ms <= kEventTimingDurationThresholdInMs)
       continue;
-    }
 
     if (HasObserverFor(PerformanceEntry::kEvent)) {
       UseCounter::Count(GetFrame(),
@@ -432,6 +414,8 @@
 
 void WindowPerformance::DispatchFirstInputTiming(
     PerformanceEventTiming* entry) {
+  DCHECK(origin_trials::EventTimingEnabled(GetExecutionContext()));
+
   if (!entry)
     return;
   DCHECK_EQ("firstInput", entry->entryType());
diff --git a/third_party/blink/renderer/core/timing/window_performance.h b/third_party/blink/renderer/core/timing/window_performance.h
index 2bbc08c..d4182035 100644
--- a/third_party/blink/renderer/core/timing/window_performance.h
+++ b/third_party/blink/renderer/core/timing/window_performance.h
@@ -69,10 +69,7 @@
 
   bool ShouldBufferEntries();
 
-  // Currently, returns false always for frames that are not main frames because
-  // we're only shipping FirstInputTiming on main frames. For main frames,
-  // returns true if the first input has not yet been calculated.
-  bool FirstInputDesired() const;
+  bool FirstInputDetected() const { return !!first_input_timing_; }
 
   // This method creates a PerformanceEventTiming and if needed creates a swap
   // promise to calculate the |duration| attribute when such promise is
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index eee2c082..5d9dbf6 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -11,7 +11,7 @@
 #include "services/service_manager/public/mojom/interface_provider.mojom-blink.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
-#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom-blink.h"
+#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom-blink.h"
 #include "third_party/blink/public/platform/web_content_settings_client.h"
 #include "third_party/blink/public/platform/web_layer_tree_view.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h"
@@ -53,11 +53,11 @@
 ConnectToWorkerInterfaceProvider(
     ExecutionContext* execution_context,
     scoped_refptr<const SecurityOrigin> script_origin) {
-  mojom::blink::DedicatedWorkerFactoryPtr worker_factory;
-  execution_context->GetInterfaceProvider()->GetInterface(&worker_factory);
+  mojom::blink::DedicatedWorkerHostFactoryPtr worker_host_factory;
+  execution_context->GetInterfaceProvider()->GetInterface(&worker_host_factory);
   service_manager::mojom::blink::InterfaceProviderPtrInfo
       interface_provider_ptr;
-  worker_factory->CreateDedicatedWorker(
+  worker_host_factory->CreateDedicatedWorker(
       script_origin, mojo::MakeRequest(&interface_provider_ptr));
   return interface_provider_ptr;
 }
diff --git a/third_party/blink/renderer/core/workers/experimental/thread_pool.cc b/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
index 93e729cb..ef7309a8 100644
--- a/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
+++ b/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
@@ -5,7 +5,7 @@
 #include "third_party/blink/renderer/core/workers/experimental/thread_pool.h"
 
 #include "services/service_manager/public/cpp/interface_provider.h"
-#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom-blink.h"
+#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
@@ -64,11 +64,11 @@
     ExecutionContext* execution_context,
     scoped_refptr<const SecurityOrigin> script_origin) {
   // TODO(japhet): Implement a proper factory.
-  mojom::blink::DedicatedWorkerFactoryPtr worker_factory;
-  execution_context->GetInterfaceProvider()->GetInterface(&worker_factory);
+  mojom::blink::DedicatedWorkerHostFactoryPtr worker_host_factory;
+  execution_context->GetInterfaceProvider()->GetInterface(&worker_host_factory);
   service_manager::mojom::blink::InterfaceProviderPtrInfo
       interface_provider_ptr;
-  worker_factory->CreateDedicatedWorker(
+  worker_host_factory->CreateDedicatedWorker(
       script_origin, mojo::MakeRequest(&interface_provider_ptr));
   return interface_provider_ptr;
 }
diff --git a/third_party/blink/renderer/devtools/front_end/main/Main.js b/third_party/blink/renderer/devtools/front_end/main/Main.js
index ea1a21dd..bab894d5 100644
--- a/third_party/blink/renderer/devtools/front_end/main/Main.js
+++ b/third_party/blink/renderer/devtools/front_end/main/Main.js
@@ -489,6 +489,7 @@
   _handleContextMenu(contextMenu) {
     if (Components.dockController.canDock()) {
       const dockItemElement = createElementWithClass('div', 'flex-centered flex-auto');
+      dockItemElement.tabIndex = -1;
       const titleElement = dockItemElement.createChild('span', 'flex-auto');
       titleElement.textContent = Common.UIString('Dock side');
       const toggleDockSideShorcuts = UI.shortcutRegistry.shortcutDescriptorsForAction('main.toggle-dock');
@@ -507,13 +508,13 @@
       right.addEventListener(UI.ToolbarButton.Events.MouseDown, event => event.data.consume());
       left.addEventListener(UI.ToolbarButton.Events.MouseDown, event => event.data.consume());
       undock.addEventListener(
-          UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.Undocked));
+          UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.Undocked));
       bottom.addEventListener(
-          UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.DockedToBottom));
+          UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.DockedToBottom));
       right.addEventListener(
-          UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.DockedToRight));
+          UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.DockedToRight));
       left.addEventListener(
-          UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.DockedToLeft));
+          UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.DockedToLeft));
       undock.setToggled(Components.dockController.dockSide() === Components.DockController.State.Undocked);
       bottom.setToggled(Components.dockController.dockSide() === Components.DockController.State.DockedToBottom);
       right.setToggled(Components.dockController.dockSide() === Components.DockController.State.DockedToRight);
@@ -522,6 +523,22 @@
       dockItemToolbar.appendToolbarItem(left);
       dockItemToolbar.appendToolbarItem(bottom);
       dockItemToolbar.appendToolbarItem(right);
+      dockItemElement.addEventListener('keydown', event => {
+        let dir = 0;
+        if (event.key === 'ArrowLeft')
+          dir = -1;
+        else if (event.key === 'ArrowRight')
+          dir = 1;
+        else
+          return;
+
+        const buttons = [undock, left, bottom, right];
+        let index = buttons.findIndex(button => button.element.hasFocus());
+        index = Number.constrain(index + dir, 0, buttons.length - 1);
+
+        buttons[index].element.focus();
+        event.consume(true);
+      });
       contextMenu.headerSection().appendCustomItem(dockItemElement);
     }
 
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
index 7ecef0e..4707e5d 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
@@ -413,7 +413,8 @@
 
             const group = {items: [], __proto__: null};
             try {
-              if (typeof o === 'object' && o.constructor && o.constructor.name)
+              if (typeof o === 'object' && Object.prototype.hasOwnProperty.call(o, 'constructor') && o.constructor &&
+                  o.constructor.name)
                 group.title = o.constructor.name;
             } catch (ee) {
               // we could break upon cross origin check.
diff --git a/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js b/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js
index aff0106c..e67dd080 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js
@@ -119,7 +119,7 @@
     if (item.element) {
       const wrapper = menuItemElement.createChild('div', 'soft-context-menu-custom-item');
       wrapper.appendChild(item.element);
-      menuItemElement._isCustom = true;
+      menuItemElement._customElement = item.element;
       return menuItemElement;
     }
 
@@ -277,7 +277,10 @@
       if (UI.themeSupport.hasTheme() || Host.isMac())
         this._highlightedMenuItemElement.classList.add('force-white-icons');
       this._highlightedMenuItemElement.classList.add('soft-context-menu-item-mouse-over');
-      this._highlightedMenuItemElement.focus();
+      if (this._highlightedMenuItemElement._customElement)
+        this._highlightedMenuItemElement._customElement.focus();
+      else
+        this._highlightedMenuItemElement.focus();
       if (scheduleSubMenu && this._highlightedMenuItemElement._subItems &&
           !this._highlightedMenuItemElement._subMenuTimer) {
         this._highlightedMenuItemElement._subMenuTimer =
@@ -290,8 +293,7 @@
     let menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.previousSibling :
                                                              this._contextMenuElement.lastChild;
     while (menuItemElement &&
-           (menuItemElement._isSeparator || menuItemElement._isCustom ||
-            menuItemElement.classList.contains('soft-context-menu-disabled')))
+           (menuItemElement._isSeparator || menuItemElement.classList.contains('soft-context-menu-disabled')))
       menuItemElement = menuItemElement.previousSibling;
     if (menuItemElement)
       this._highlightMenuItem(menuItemElement, false);
@@ -301,8 +303,7 @@
     let menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.nextSibling :
                                                              this._contextMenuElement.firstChild;
     while (menuItemElement &&
-           (menuItemElement._isSeparator || menuItemElement._isCustom ||
-            menuItemElement.classList.contains('soft-context-menu-disabled')))
+           (menuItemElement._isSeparator || menuItemElement.classList.contains('soft-context-menu-disabled')))
       menuItemElement = menuItemElement.nextSibling;
     if (menuItemElement)
       this._highlightMenuItem(menuItemElement, false);
@@ -335,11 +336,12 @@
         break;
       case 'Enter':
         if (!isEnterKey(event))
-          break;
+          return;
       // Fall through
       case ' ':  // Space
-        if (this._highlightedMenuItemElement)
-          this._triggerAction(this._highlightedMenuItemElement, event);
+        if (!this._highlightedMenuItemElement || this._highlightedMenuItemElement._customElement)
+          return;
+        this._triggerAction(this._highlightedMenuItemElement, event);
         if (this._highlightedMenuItemElement._subItems)
           this._subMenu._highlightNext();
         break;
diff --git a/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js b/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js
index 3495310..664588a 100644
--- a/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js
+++ b/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js
@@ -452,7 +452,6 @@
     super(createElementWithClass('button', 'toolbar-button'));
     this.element.addEventListener('click', this._clicked.bind(this), false);
     this.element.addEventListener('mousedown', this._mouseDown.bind(this), false);
-    this.element.addEventListener('mouseup', this._mouseUp.bind(this), false);
 
     this._glyphElement = UI.Icon.create('', 'toolbar-glyph hidden');
     this.element.appendChild(this._glyphElement);
@@ -528,21 +527,11 @@
       return;
     this.dispatchEventToListeners(UI.ToolbarButton.Events.MouseDown, event);
   }
-
-  /**
-   * @param {!Event} event
-   */
-  _mouseUp(event) {
-    if (!this._enabled)
-      return;
-    this.dispatchEventToListeners(UI.ToolbarButton.Events.MouseUp, event);
-  }
 };
 
 UI.ToolbarButton.Events = {
   Click: Symbol('Click'),
-  MouseDown: Symbol('MouseDown'),
-  MouseUp: Symbol('MouseUp')
+  MouseDown: Symbol('MouseDown')
 };
 
 UI.ToolbarInput = class extends UI.ToolbarItem {
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index 39cd2f2..db4b2a3 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -321,7 +321,6 @@
     "peerconnection/rtc_quic_transport_test.cc",
     "peerconnection/rtc_quic_transport_test.h",
     "picture_in_picture/html_video_element_picture_in_picture_test.cc",
-    "picture_in_picture/picture_in_picture_controller_test.cc",
     "presentation/mock_presentation_service.h",
     "presentation/presentation_availability_state_test.cc",
     "presentation/presentation_availability_test.cc",
@@ -351,6 +350,8 @@
     "websockets/dom_websocket_test.cc",
     "websockets/websocket_channel_impl_test.cc",
     "worklet/animation_and_paint_worklet_thread_test.cc",
+    "worklet/worklet_thread_test_common.cc",
+    "worklet/worklet_thread_test_common.h",
   ]
 
   configs += [
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
index a91df9a5..4c36697a 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
@@ -13,18 +13,15 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_cache_options.h"
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
 #include "third_party/blink/renderer/core/dom/document.h"
-#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h"
-#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
 #include "third_party/blink/renderer/core/script/script.h"
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
-#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
 #include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h"
 #include "third_party/blink/renderer/core/workers/worklet_module_responses_map.h"
 #include "third_party/blink/renderer/modules/animationworklet/animation_worklet.h"
 #include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h"
 #include "third_party/blink/renderer/modules/animationworklet/animator.h"
 #include "third_party/blink/renderer/modules/animationworklet/animator_definition.h"
-#include "third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread.h"
+#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
@@ -76,42 +73,14 @@
     reporting_proxy_ = std::make_unique<WorkerReportingProxy>();
   }
 
-  std::unique_ptr<AnimationAndPaintWorkletThread>
-  CreateAnimationAndPaintWorkletThread(
-      AnimationWorkletProxyClient* proxy_client) {
-    std::unique_ptr<AnimationAndPaintWorkletThread> thread =
-        AnimationAndPaintWorkletThread::CreateForAnimationWorklet(
-            *reporting_proxy_);
-
-    WorkerClients* clients = WorkerClients::Create();
-    if (proxy_client)
-      ProvideAnimationWorkletProxyClientTo(clients, proxy_client);
-
-    Document* document = &GetDocument();
-    thread->Start(
-        std::make_unique<GlobalScopeCreationParams>(
-            document->Url(), mojom::ScriptType::kModule,
-            OffMainThreadWorkerScriptFetchOption::kEnabled,
-            document->UserAgent(), nullptr /* web_worker_fetch_context */,
-            Vector<CSPHeaderAndType>(), document->GetReferrerPolicy(),
-            document->GetSecurityOrigin(), document->IsSecureContext(),
-            document->GetHttpsState(), clients, document->AddressSpace(),
-            OriginTrialContext::GetTokens(document).get(),
-            base::UnguessableToken::Create(), nullptr /* worker_settings */,
-            kV8CacheOptionsDefault,
-            MakeGarbageCollected<WorkletModuleResponsesMap>()),
-        base::nullopt, std::make_unique<WorkerDevToolsParams>(),
-        ParentExecutionContextTaskRunners::Create());
-    return thread;
-  }
-
   using TestCalback = void (AnimationWorkletGlobalScopeTest::*)(WorkerThread*,
                                                                 WaitableEvent*);
   // Create a new animation worklet and run the callback task on it. Terminate
   // the worklet once the task completion is signaled.
   void RunTestOnWorkletThread(TestCalback callback) {
     std::unique_ptr<WorkerThread> worklet =
-        CreateAnimationAndPaintWorkletThread(nullptr);
+        CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                             reporting_proxy_.get());
     WaitableEvent waitable_event;
     PostCrossThreadTask(
         *worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE,
@@ -410,13 +379,7 @@
     waitable_event->Signal();
   }
 
-  void AddGlobalScopeForTesting(WorkerThread* thread,
-                                AnimationWorkletProxyClient* proxy_client,
-                                WaitableEvent* waitable_event) {
-    proxy_client->AddGlobalScopeForTesting(
-        To<WorkletGlobalScope>(thread->GlobalScope()));
-    waitable_event->Signal();
-  }
+  std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
 
  private:
   // Returns false when a script evaluation error happens.
@@ -436,8 +399,6 @@
     ScriptValue value = module.Evaluate(script_state);
     return value.IsEmpty();
   }
-
-  std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
 };
 
 TEST_F(AnimationWorkletGlobalScopeTest, BasicParsing) {
@@ -469,8 +430,8 @@
        ShouldRegisterItselfAfterFirstAnimatorRegistration) {
   MockAnimationWorkletProxyClient* proxy_client =
       MakeGarbageCollected<MockAnimationWorkletProxyClient>();
-  std::unique_ptr<WorkerThread> worklet =
-      CreateAnimationAndPaintWorkletThread(proxy_client);
+  std::unique_ptr<WorkerThread> worklet = CreateAnimationAndPaintWorkletThread(
+      &GetDocument(), reporting_proxy_.get(), proxy_client);
   // Animation worklet global scope (AWGS) should not register itself upon
   // creation.
   EXPECT_FALSE(proxy_client->did_add_global_scope());
@@ -499,78 +460,4 @@
   worklet->WaitForShutdownForTesting();
 }
 
-TEST_F(AnimationWorkletGlobalScopeTest, SelectGlobalScope) {
-  AnimationWorkletProxyClient* proxy_client =
-      MakeGarbageCollected<MockAnimationWorkletProxyClient>();
-
-  // Global scopes must be created on worker threads.
-  std::unique_ptr<WorkerThread> first_worklet =
-      CreateAnimationAndPaintWorkletThread(proxy_client);
-  std::unique_ptr<WorkerThread> second_worklet =
-      CreateAnimationAndPaintWorkletThread(proxy_client);
-
-  ASSERT_NE(first_worklet, second_worklet);
-
-  // Register global scopes with proxy client. This step must be performed on
-  // the worker threads.
-  WaitableEvent waitable_event;
-  PostCrossThreadTask(
-      *first_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE,
-      CrossThreadBind(
-          &AnimationWorkletGlobalScopeTest::AddGlobalScopeForTesting,
-          CrossThreadUnretained(this),
-          CrossThreadUnretained(first_worklet.get()),
-          CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client),
-          CrossThreadUnretained(&waitable_event)));
-  waitable_event.Wait();
-
-  waitable_event.Reset();
-  PostCrossThreadTask(
-      *second_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE,
-      CrossThreadBind(
-          &AnimationWorkletGlobalScopeTest::AddGlobalScopeForTesting,
-          CrossThreadUnretained(this),
-          CrossThreadUnretained(second_worklet.get()),
-          CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client),
-          CrossThreadUnretained(&waitable_event)));
-  waitable_event.Wait();
-
-  AnimationWorkletGlobalScope* stateful_global_scope =
-      proxy_client->global_scopes_[0];
-  AnimationWorkletGlobalScope* first_stateless_global_scope =
-      proxy_client->global_scopes_[0];
-  AnimationWorkletGlobalScope* second_stateless_global_scope =
-      proxy_client->global_scopes_[1];
-
-  // Initialize switch countdown to 1, to force a switch in the stateless
-  // global scope on the second call.
-  proxy_client->next_global_scope_switch_countdown_ = 1;
-  EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(),
-            first_stateless_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(),
-            second_stateless_global_scope);
-
-  // Increase countdown and verify that the switchover adjusts as expected.
-  proxy_client->next_global_scope_switch_countdown_ = 3;
-  EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(),
-            second_stateless_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(),
-            second_stateless_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(),
-            second_stateless_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope);
-  EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(),
-            first_stateless_global_scope);
-
-  first_worklet->Terminate();
-  first_worklet->WaitForShutdownForTesting();
-  second_worklet->Terminate();
-  second_worklet->WaitForShutdownForTesting();
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h
index d24f52e6..5e7f9af 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h
@@ -62,11 +62,11 @@
   static AnimationWorkletProxyClient* From(WorkerClients*);
 
  private:
-  FRIEND_TEST_ALL_PREFIXES(AnimationWorkletGlobalScopeTest, SelectGlobalScope);
   FRIEND_TEST_ALL_PREFIXES(AnimationWorkletProxyClientTest,
                            AnimationWorkletProxyClientConstruction);
   FRIEND_TEST_ALL_PREFIXES(AnimationWorkletProxyClientTest,
                            RegisteredAnimatorNameShouldSyncOnce);
+  FRIEND_TEST_ALL_PREFIXES(AnimationWorkletProxyClientTest, SelectGlobalScope);
 
   // Separate global scope selectors are used instead of overriding
   // Worklet::SelectGlobalScope since two different selection mechanisms are
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
index 7c6a721..ea58bea 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
@@ -11,6 +11,8 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
+#include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h"
+#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h"
 #include "third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.h"
 
 namespace blink {
@@ -47,11 +49,21 @@
     proxy_client_ = MakeGarbageCollected<AnimationWorkletProxyClient>(
         1, nullptr, nullptr, mutator->GetWeakPtr(), mutator_task_runner_);
     mutator_client_ = std::make_unique<MockMutatorClient>(std::move(mutator));
+    reporting_proxy_ = std::make_unique<WorkerReportingProxy>();
+  }
+
+  void AddGlobalScopeForTesting(WorkerThread* thread,
+                                AnimationWorkletProxyClient* proxy_client,
+                                WaitableEvent* waitable_event) {
+    proxy_client->AddGlobalScopeForTesting(
+        To<WorkletGlobalScope>(thread->GlobalScope()));
+    waitable_event->Signal();
   }
 
   Persistent<AnimationWorkletProxyClient> proxy_client_;
   std::unique_ptr<MockMutatorClient> mutator_client_;
   scoped_refptr<base::TestSimpleTaskRunner> mutator_task_runner_;
+  std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
 };
 
 TEST_F(AnimationWorkletProxyClientTest,
@@ -94,4 +106,77 @@
   mutator_task_runner_->RunUntilIdle();
 }
 
+TEST_F(AnimationWorkletProxyClientTest, SelectGlobalScope) {
+  // Global scopes must be created on worker threads.
+  std::unique_ptr<WorkerThread> first_worklet =
+      CreateAnimationAndPaintWorkletThread(
+          &GetDocument(), reporting_proxy_.get(), proxy_client_);
+  std::unique_ptr<WorkerThread> second_worklet =
+      CreateAnimationAndPaintWorkletThread(
+          &GetDocument(), reporting_proxy_.get(), proxy_client_);
+
+  ASSERT_NE(first_worklet, second_worklet);
+
+  // Register global scopes with proxy client. This step must be performed on
+  // the worker threads.
+  WaitableEvent waitable_event;
+  PostCrossThreadTask(
+      *first_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE,
+      CrossThreadBind(
+          &AnimationWorkletProxyClientTest::AddGlobalScopeForTesting,
+          CrossThreadUnretained(this),
+          CrossThreadUnretained(first_worklet.get()),
+          CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client_),
+          CrossThreadUnretained(&waitable_event)));
+  waitable_event.Wait();
+
+  waitable_event.Reset();
+  PostCrossThreadTask(
+      *second_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE,
+      CrossThreadBind(
+          &AnimationWorkletProxyClientTest::AddGlobalScopeForTesting,
+          CrossThreadUnretained(this),
+          CrossThreadUnretained(second_worklet.get()),
+          CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client_),
+          CrossThreadUnretained(&waitable_event)));
+  waitable_event.Wait();
+
+  AnimationWorkletGlobalScope* stateful_global_scope =
+      proxy_client_->global_scopes_[0];
+  AnimationWorkletGlobalScope* first_stateless_global_scope =
+      proxy_client_->global_scopes_[0];
+  AnimationWorkletGlobalScope* second_stateless_global_scope =
+      proxy_client_->global_scopes_[1];
+
+  // Initialize switch countdown to 1, to force a switch in the stateless
+  // global scope on the second call.
+  proxy_client_->next_global_scope_switch_countdown_ = 1;
+  EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(),
+            first_stateless_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(),
+            second_stateless_global_scope);
+
+  // Increase countdown and verify that the switchover adjusts as expected.
+  proxy_client_->next_global_scope_switch_countdown_ = 3;
+  EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(),
+            second_stateless_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(),
+            second_stateless_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(),
+            second_stateless_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope);
+  EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(),
+            first_stateless_global_scope);
+
+  first_worklet->Terminate();
+  first_worklet->WaitForShutdownForTesting();
+  second_worklet->Terminate();
+  second_worklet->WaitForShutdownForTesting();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
index 10c8aa8..b4f9162 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
@@ -162,6 +162,33 @@
               : std::numeric_limits<double>::quiet_NaN();
 }
 
+// Calculates start time backwards from the current time and
+// timeline.currentTime.
+//
+// If this is a scroll-linked animation, we always consider start time to be
+// zero (i.e., scroll origin). This means the computed start time post this
+// calculation may not match the expected current time that was given as input.
+//
+// Changing this is under consideration here:
+// https://github.com/w3c/csswg-drafts/issues/2075
+base::Optional<base::TimeDelta> CalculateStartTime(
+    base::TimeDelta current_time,
+    double playback_rate,
+    AnimationTimeline& timeline) {
+  if (timeline.IsScrollTimeline())
+    return base::TimeDelta();
+
+  bool is_null;
+  double time_ms = timeline.currentTime(is_null);
+  // TODO(majidvp): Make it so that inactive timelines do not reach here
+  // i.e., we should instead "hold" when timeline is inactive.
+  // https://crbug.com/924159
+  if (is_null)
+    return base::nullopt;
+  auto timeline_time = base::TimeDelta::FromMillisecondsD(time_ms);
+  return timeline_time - (current_time / playback_rate);
+}
+
 }  // namespace
 
 WorkletAnimation* WorkletAnimation::Create(
@@ -269,6 +296,17 @@
   if (play_state_ == Animation::kPending)
     return;
 
+  if (play_state_ == Animation::kPaused) {
+    // If we have ever started before then just unpause otherwise we need to
+    // start the animation.
+    if (has_started_) {
+      SetPlayState(Animation::kPending);
+      SetCurrentTime(CurrentTime());
+      InvalidateCompositingState();
+      return;
+    }
+  }
+
   String failure_message;
   if (!CheckCanStart(&failure_message)) {
     exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
@@ -277,7 +315,11 @@
   }
 
   document_->GetWorkletAnimationController().AttachAnimation(*this);
+  // While animation is pending, it hold time at Zero, see:
+  // https://drafts.csswg.org/web-animations-1/#playing-an-animation-section
   SetPlayState(Animation::kPending);
+  SetCurrentTime(base::TimeDelta());
+  has_started_ = true;
 
   for (auto& effect : effects_) {
     Element* target = effect->target();
@@ -298,19 +340,42 @@
   return ToMilliseconds(current_time);
 }
 
+double WorkletAnimation::startTime(bool& is_null) {
+  is_null = !start_time_.has_value();
+  return ToMilliseconds(start_time_);
+}
+
+void WorkletAnimation::pause(ExceptionState& exception_state) {
+  DCHECK(IsMainThread());
+  if (play_state_ == Animation::kPaused)
+    return;
+
+  // If animation is pending it means we have not sent an update to
+  // compositor. Since we are pausing, immediately start the animation
+  // which updates start time and marks animation as main thread.
+  // This ensures we have a valid current time to hold.
+  if (play_state_ == Animation::kPending)
+    StartOnMain();
+
+  // If animation is playing then we should hold the current time
+  // otherwise hold zero.
+  base::TimeDelta new_current_time =
+      Playing() ? CurrentTime().value() : base::TimeDelta();
+  SetPlayState(Animation::kPaused);
+  SetCurrentTime(new_current_time);
+}
+
 void WorkletAnimation::cancel() {
   DCHECK(IsMainThread());
   if (play_state_ == Animation::kIdle)
     return;
   document_->GetWorkletAnimationController().DetachAnimation(*this);
-
   if (compositor_animation_) {
     GetEffect()->CancelAnimationOnCompositor(compositor_animation_.get());
     DestroyCompositorAnimation();
   }
-
+  has_started_ = false;
   local_times_.Fill(base::nullopt);
-  start_time_ = base::nullopt;
   running_on_main_thread_ = false;
   // TODO(yigu): Because this animation has been detached and will not receive
   // updates anymore, we have to update its value upon cancel. Similar to
@@ -321,6 +386,7 @@
       effect->UpdateInheritedTime(NullValue(), kTimingUpdateOnDemand);
   }
   SetPlayState(Animation::kIdle);
+  SetCurrentTime(base::nullopt);
 
   for (auto& effect : effects_) {
     Element* target = effect->target();
@@ -386,23 +452,12 @@
   DCHECK(playback_rate);
   DCHECK(!timeline_->IsScrollTimeline());
 
-  if (start_time_) {
-    base::Optional<base::TimeDelta> current_time = CurrentTime();
-    // TODO(gerchiko): support unresolved current time.
-    // Blocked by ability to change timeline.
-    if (current_time) {
-      // Update startTime in order to maintain previous currentTime and, as a
-      // result, prevent the animation from jumping.
-      // See currentTime calculation in CurrentTime().
-      bool is_null;
-      double timeline_time_ms = timeline_->currentTime(is_null);
-      DCHECK(!is_null);
-
-      start_time_ = base::TimeDelta::FromMillisecondsD(timeline_time_ms) -
-                    current_time.value() / playback_rate;
-    }
-  }
+  base::Optional<base::TimeDelta> previous_current_time = CurrentTime();
   playback_rate_ = playback_rate;
+  // Update startTime in order to maintain previous currentTime and, as a
+  // result, prevent the animation from jumping.
+  if (previous_current_time)
+    SetCurrentTime(previous_current_time);
 
   if (Playing())
     document_->GetWorkletAnimationController().InvalidateAnimation(*this);
@@ -413,11 +468,7 @@
 }
 
 void WorkletAnimation::Update(TimingUpdateReason reason) {
-  if (play_state_ != Animation::kRunning)
-    return;
-
-  // ScrollTimeline animation doesn't require start_time_ to be set.
-  if (!start_time_ && !timeline_->IsScrollTimeline())
+  if (play_state_ != Animation::kRunning && play_state_ != Animation::kPaused)
     return;
 
   DCHECK_EQ(effects_.size(), local_times_.size());
@@ -440,12 +491,25 @@
   return true;
 }
 
-void WorkletAnimation::SetStartTimeToNow() {
-  DCHECK(!start_time_);
-  bool is_null;
-  double time_ms = timeline_->currentTime(is_null);
-  if (!is_null)
-    start_time_ = base::TimeDelta::FromMillisecondsD(time_ms);
+void WorkletAnimation::SetCurrentTime(
+    base::Optional<base::TimeDelta> seek_time) {
+  DCHECK(timeline_);
+  // The procedure either:
+  // 1) updates the hold time (for paused animations, non-existent timeline)
+  // 2) updates the start time (for playing animations)
+  bool should_hold = play_state_ == Animation::kPaused || !seek_time;
+  if (should_hold) {
+    start_time_ = base::nullopt;
+    hold_time_ = seek_time;
+  } else {
+    // TODO(majidvp): Currently when timeline is inactive (e.g., scroll timeline
+    // whose source is not scrolling), we will end up here but probably we
+    // should not. In those cases we should hold instead.
+    // https://crbug.com/924159
+    start_time_ =
+        CalculateStartTime(seek_time.value(), playback_rate_, *timeline_);
+    hold_time_ = base::nullopt;
+  }
 }
 
 void WorkletAnimation::UpdateCompositingState() {
@@ -478,8 +542,10 @@
 
 void WorkletAnimation::StartOnMain() {
   running_on_main_thread_ = true;
-  SetStartTimeToNow();
+  // Start from existing current time in case one exists or zero.
+  base::TimeDelta current_time = CurrentTime().value_or(base::TimeDelta());
   SetPlayState(Animation::kRunning);
+  SetCurrentTime(current_time);
 }
 
 bool WorkletAnimation::StartOnCompositor() {
@@ -508,7 +574,6 @@
           base::Optional<CompositorElementIdSet>(), playback_rate);
 
   if (!failure_code.Ok()) {
-    SetPlayState(Animation::kIdle);
     return false;
   }
 
@@ -539,12 +604,7 @@
   // TODO(smcgruer): We need to start all of the effects, not just the first.
   StartEffectOnCompositor(compositor_animation_.get(), GetEffect());
   SetPlayState(Animation::kRunning);
-
-  bool is_null;
-  double time_ms = timeline_->currentTime(is_null);
-  if (!is_null)
-    start_time_ = base::TimeDelta::FromMillisecondsD(time_ms);
-
+  SetCurrentTime(base::TimeDelta());
   return true;
 }
 
@@ -612,11 +672,8 @@
   if (play_state_ == Animation::kIdle || play_state_ == Animation::kUnset)
     return base::nullopt;
 
-  // TODO(majidvp): Animation has a hold time while it waits for animation
-  // to truly start and returns that instead. Replace with with hold time
-  // once pause logic is implemented.
-  if (play_state_ == Animation::kPending)
-    return base::TimeDelta();
+  if (hold_time_)
+    return hold_time_.value();
 
   bool is_null;
   double timeline_time_ms = timeline_->currentTime(is_null);
@@ -625,8 +682,6 @@
 
   base::TimeDelta timeline_time =
       base::TimeDelta::FromMillisecondsD(timeline_time_ms);
-  if (timeline_->IsScrollTimeline())
-    return timeline_time;
   DCHECK(start_time_);
   return (timeline_time - start_time_.value()) * playback_rate_;
 }
@@ -664,8 +719,6 @@
   bool was_active = IsActive(last_play_state_);
   bool is_active = IsActive(play_state_);
 
-  // ScrollTimeline animation doesn't require start_time_ to be set.
-  DCHECK(start_time_ || timeline_->IsScrollTimeline());
   base::Optional<base::TimeDelta> current_time = CurrentTime();
   double current_time_ms = ToMilliseconds(current_time);
 
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
index 6527d08c..b47adc9f 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
@@ -73,9 +73,12 @@
   AnimationTimeline* timeline() { return timeline_; }
   String playState();
   double currentTime(bool& is_null);
+  double startTime(bool& is_null);
+
   double playbackRate(ScriptState* script_state) const;
   void setPlaybackRate(ScriptState* script_state, double playback_rate);
   void play(ExceptionState& exception_state);
+  void pause(ExceptionState& exception_state);
   void cancel();
 
   // AnimationEffectOwner implementation:
@@ -142,7 +145,28 @@
   bool StartOnCompositor();
   void StartOnMain();
   bool CheckCanStart(String* failure_message);
-  void SetStartTimeToNow();
+
+  // Sets the current time for the animation.
+  //
+  // Note that the current time of the animation is a computed value that
+  // depends on either the start time (for playing animations) or the hold time
+  // (for pending, paused, or idle animations). So this procedure updates either
+  // the start time or the hold time so that the computed current time is
+  // matched.
+  //
+  // The exception to this are scroll-linked animations whose start time is not
+  // modifiable (always zero) in which case the post setting the current time,
+  // the computed current time may not match it.
+  //
+  // Generally, when an animation play state transitions, we expect to see the
+  // current time is set. Here are some interesting examples of this:
+  //  - when transitioning to play, the current time is either set to
+  //  zero (first time) or the last current time (when resuming from pause).
+  //  - when transitioning to idle or cancel, the current time is set to
+  //  "null".
+  //  - when transitioning to pause, the current time is set to the last
+  //  current time for holding.
+  void SetCurrentTime(base::Optional<base::TimeDelta> current_time);
 
   // For DocumentTimeline animations, adjusts start_time_ according to playback
   // rate change to preserve current time and avoid the animation output from
@@ -158,6 +182,7 @@
     return options_ ? options_->Clone() : nullptr;
   }
 
+  Animation::AnimationPlayState PlayState() const { return play_state_; }
   void SetPlayState(const Animation::AnimationPlayState& state) {
     play_state_ = state;
   }
@@ -175,6 +200,9 @@
   double playback_rate_;
   base::Optional<base::TimeDelta> start_time_;
   Vector<base::Optional<base::TimeDelta>> local_times_;
+  // Hold time is used when animation is paused.
+  // TODO(majidvp): Replace base::TimeDelta usage with AnimationTimeDelta.
+  base::Optional<base::TimeDelta> hold_time_;
   // We use this to skip updating if current time has not changed since last
   // update.
   base::Optional<base::TimeDelta> last_current_time_;
@@ -189,12 +217,14 @@
 
   std::unique_ptr<CompositorAnimation> compositor_animation_;
   bool running_on_main_thread_;
-
+  bool has_started_;
   // Tracks whether any KeyframeEffect associated with this WorkletAnimation has
   // been invalidated and needs to be restarted. Used to avoid unnecessarily
   // restarting the effect on the compositor. When true, a call to
   // |UpdateOnCompositor| will update the effect on the compositor.
   bool effect_needs_restart_;
+
+  FRIEND_TEST_ALL_PREFIXES(WorkletAnimationTest, PausePlay);
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
index 951dbf9..33a09a91 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
@@ -19,7 +19,10 @@
   readonly attribute AnimationTimeline? timeline;
   readonly attribute AnimationPlayState playState;
   readonly attribute double? currentTime;
+  readonly attribute double? startTime;
+
   [CallWith=ScriptState] attribute double playbackRate;
   [RaisesException] void play();
+  [RaisesException] void pause();
   void cancel();
 };
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc
index bb9ff5e..3e43f039 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc
@@ -57,10 +57,13 @@
   scoped_refptr<SerializedScriptValue> options;
 
   ScriptState::Scope scope(script_state);
-  DummyExceptionStateForTesting exception_state;
   return WorkletAnimation::Create(script_state, animator_name, effects,
                                   timeline, std::move(options),
-                                  exception_state);
+                                  ASSERT_NO_EXCEPTION);
+}
+
+base::TimeDelta ToTimeDelta(double milliseconds) {
+  return base::TimeDelta::FromMillisecondsD(milliseconds);
 }
 
 }  // namespace
@@ -83,6 +86,14 @@
         CreateWorkletAnimation(GetScriptState(), element_, animator_name_);
   }
 
+  void SimulateFrame(double milliseconds) {
+    base::TimeTicks tick = base::TimeTicks() + ToTimeDelta(milliseconds);
+    GetDocument().GetAnimationClock().ResetTimeForTesting(tick);
+    GetDocument().GetWorkletAnimationController().UpdateAnimationStates();
+    GetDocument().GetWorkletAnimationController().UpdateAnimationTimings(
+        kTimingUpdateForAnimationFrame);
+  }
+
   ScriptState* GetScriptState() {
     return ToScriptStateForMainWorld(&GetFrame());
   }
@@ -93,8 +104,7 @@
 };
 
 TEST_F(WorkletAnimationTest, WorkletAnimationInElementAnimations) {
-  DummyExceptionStateForTesting exception_state;
-  worklet_animation_->play(exception_state);
+  worklet_animation_->play(ASSERT_NO_EXCEPTION);
   EXPECT_EQ(1u,
             element_->EnsureElementAnimations().GetWorkletAnimations().size());
   worklet_animation_->cancel();
@@ -106,8 +116,7 @@
   scoped_refptr<ComputedStyle> style =
       GetDocument().EnsureStyleResolver().StyleForElement(element_).get();
   EXPECT_EQ(false, style->HasCurrentOpacityAnimation());
-  DummyExceptionStateForTesting exception_state;
-  worklet_animation_->play(exception_state);
+  worklet_animation_->play(ASSERT_NO_EXCEPTION);
   element_->EnsureElementAnimations().UpdateAnimationFlags(*style);
   EXPECT_EQ(true, style->HasCurrentOpacityAnimation());
 }
@@ -126,8 +135,7 @@
       base::TimeTicks() + base::TimeDelta::FromMillisecondsD(111 + 123.4);
 
   GetDocument().GetAnimationClock().ResetTimeForTesting(first_ticks);
-  DummyExceptionStateForTesting exception_state;
-  worklet_animation_->play(exception_state);
+  worklet_animation_->play(ASSERT_NO_EXCEPTION);
   worklet_animation_->UpdateCompositingState();
 
   std::unique_ptr<AnimationWorkletDispatcherInput> state =
@@ -174,8 +182,7 @@
       GetScriptState(), element_, animator_name_, scroll_timeline);
   WorkletAnimationId id = worklet_animation->GetWorkletAnimationId();
 
-  DummyExceptionStateForTesting exception_state;
-  worklet_animation->play(exception_state);
+  worklet_animation->play(ASSERT_NO_EXCEPTION);
   worklet_animation->UpdateCompositingState();
 
   // Only expect precision up to 1 microsecond with an additional smaller
@@ -206,8 +213,7 @@
       base::TimeTicks() + base::TimeDelta::FromMillisecondsD(111 + 123.4);
 
   GetDocument().GetAnimationClock().ResetTimeForTesting(first_ticks);
-  DummyExceptionStateForTesting exception_state;
-  worklet_animation_->play(exception_state);
+  worklet_animation_->play(ASSERT_NO_EXCEPTION);
   worklet_animation_->UpdateCompositingState();
 
   // Only peek if animation is running on compositor.
@@ -340,4 +346,40 @@
   EXPECT_NEAR(123.4 + 200.0 * playback_rate,
               input->updated_animations[0].current_time, error);
 }
+
+TEST_F(WorkletAnimationTest, PausePlay) {
+  double error =
+      base::TimeDelta::FromMicrosecondsD(1).InMillisecondsF() + 1e-13;
+
+  SimulateFrame(0);
+  worklet_animation_->play(ASSERT_NO_EXCEPTION);
+  EXPECT_EQ(Animation::kPending, worklet_animation_->PlayState());
+  SimulateFrame(0);
+  EXPECT_EQ(Animation::kRunning, worklet_animation_->PlayState());
+  EXPECT_TRUE(worklet_animation_->Playing());
+  EXPECT_NEAR(0, worklet_animation_->CurrentTime().value().InMillisecondsF(),
+              error);
+  SimulateFrame(10);
+  worklet_animation_->pause(ASSERT_NO_EXCEPTION);
+  EXPECT_EQ(Animation::kPaused, worklet_animation_->PlayState());
+  EXPECT_FALSE(worklet_animation_->Playing());
+  EXPECT_NEAR(10, worklet_animation_->CurrentTime().value().InMillisecondsF(),
+              error);
+  SimulateFrame(20);
+  EXPECT_EQ(Animation::kPaused, worklet_animation_->PlayState());
+  EXPECT_NEAR(10, worklet_animation_->CurrentTime().value().InMillisecondsF(),
+              error);
+  worklet_animation_->play(ASSERT_NO_EXCEPTION);
+  EXPECT_EQ(Animation::kPending, worklet_animation_->PlayState());
+  SimulateFrame(20);
+  EXPECT_EQ(Animation::kRunning, worklet_animation_->PlayState());
+  EXPECT_TRUE(worklet_animation_->Playing());
+  EXPECT_NEAR(10, worklet_animation_->CurrentTime().value().InMillisecondsF(),
+              error);
+  SimulateFrame(30);
+  EXPECT_EQ(Animation::kRunning, worklet_animation_->PlayState());
+  EXPECT_NEAR(20, worklet_animation_->CurrentTime().value().InMillisecondsF(),
+              error);
+}
+
 }  //  namespace blink
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
index efae8f56..4f62842 100644
--- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
+++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
@@ -21,8 +21,8 @@
 #include "third_party/blink/renderer/platform/image-decoders/segment_reader.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/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_impl.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -164,7 +164,7 @@
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
       Thread::Current()->GetTaskRunner();
 
-  background_scheduler::PostOnBackgroundThread(
+  worker_pool::PostTask(
       FROM_HERE,
       CrossThreadBind(
           &BackgroundFetchIconLoader::DecodeAndResizeImageOnBackgroundThread,
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc
index de0e7bfb..50dd2f7b 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc
@@ -21,9 +21,9 @@
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h"
 #include "third_party/blink/renderer/platform/image-encoders/image_encoder.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
 // And now, a brief note about clipboard permissions.
@@ -259,13 +259,13 @@
   file_reader_.reset();
 
   if (blob_type == kMimeTypeImagePng) {
-    background_scheduler::PostOnBackgroundThread(
+    worker_pool::PostTask(
         FROM_HERE,
         CrossThreadBind(&ClipboardPromise::DecodeImageOnBackgroundThread,
                         WrapCrossThreadPersistent(this), GetTaskRunner(),
                         WrapCrossThreadPersistent(array_buffer)));
   } else if (blob_type == kMimeTypeTextPlain) {
-    background_scheduler::PostOnBackgroundThread(
+    worker_pool::PostTask(
         FROM_HERE,
         CrossThreadBind(&ClipboardPromise::DecodeTextOnBackgroundThread,
                         WrapCrossThreadPersistent(this), GetTaskRunner(),
diff --git a/third_party/blink/renderer/modules/picture_in_picture/DEPS b/third_party/blink/renderer/modules/picture_in_picture/DEPS
index c3389f6..03fe8e3 100644
--- a/third_party/blink/renderer/modules/picture_in_picture/DEPS
+++ b/third_party/blink/renderer/modules/picture_in_picture/DEPS
@@ -2,6 +2,5 @@
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/event_modules.h",
     "+third_party/blink/renderer/modules/event_target_modules.h",
-    "+third_party/blink/renderer/modules/modules_export.h",
     "+third_party/blink/renderer/modules/picture_in_picture",
 ]
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc
index 3b96446..3039b1c 100644
--- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc
+++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc
@@ -4,11 +4,7 @@
 
 #include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h"
 
-#include <limits>
-#include <utility>
-
 #include "base/bind_helpers.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/blink/public/common/manifest/web_display_mode.h"
 #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/document.h"
@@ -24,14 +20,7 @@
 
 namespace blink {
 
-namespace {
-
-bool ShouldShowPlayPauseButton(const HTMLVideoElement& element) {
-  return element.GetLoadType() != WebMediaPlayer::kLoadTypeMediaStream &&
-         element.duration() != std::numeric_limits<double>::infinity();
-}
-
-}  // namespace
+PictureInPictureControllerImpl::~PictureInPictureControllerImpl() = default;
 
 // static
 PictureInPictureControllerImpl* PictureInPictureControllerImpl::Create(
@@ -99,32 +88,19 @@
 void PictureInPictureControllerImpl::EnterPictureInPicture(
     HTMLVideoElement* element,
     ScriptPromiseResolver* resolver) {
-  if (picture_in_picture_element_ == element) {
-    if (resolver)
-      resolver->Resolve(picture_in_picture_window_);
-
+  if (picture_in_picture_element_ != element) {
+    element->enterPictureInPicture(
+        WTF::Bind(&PictureInPictureControllerImpl::OnEnteredPictureInPicture,
+                  WrapPersistent(this), WrapPersistent(element),
+                  WrapPersistent(resolver)));
+    // If the media element has already been given custom controls, this will
+    // ensure that they get set. Otherwise, this will do nothing.
+    element->SendCustomControlsToPipWindow();
     return;
   }
 
-  element->enterPictureInPicture();
-
-  DCHECK(element->GetWebMediaPlayer());
-
-  if (!EnsureService())
-    return;
-
-  picture_in_picture_service_->StartSession(
-      element->GetWebMediaPlayer()->GetDelegateId(),
-      element->GetWebMediaPlayer()->GetSurfaceId(),
-      element->GetWebMediaPlayer()->NaturalSize(),
-      ShouldShowPlayPauseButton(*element),
-      WTF::Bind(&PictureInPictureControllerImpl::OnEnteredPictureInPicture,
-                WrapPersistent(this), WrapPersistent(element),
-                WrapPersistent(resolver)));
-
-  // If the media element has already been given custom controls, this will
-  // ensure that they get set. Otherwise, this will do nothing.
-  element->SendCustomControlsToPipWindow();
+  if (resolver)
+    resolver->Resolve(picture_in_picture_window_);
 }
 
 void PictureInPictureControllerImpl::OnEnteredPictureInPicture(
@@ -136,7 +112,7 @@
       resolver->Reject(
           DOMException::Create(DOMExceptionCode::kInvalidStateError, ""));
     }
-    ExitPictureInPicture(element, nullptr);
+    element->exitPictureInPicture(base::DoNothing());
     return;
   }
 
@@ -156,15 +132,11 @@
           event_type_names::kEnterpictureinpicture,
           WrapPersistent(picture_in_picture_window_.Get())));
 
-  if (!EnsureService())
-    return;
-
-  if (delegate_binding_.is_bound())
-    delegate_binding_.Close();
-
-  mojom::blink::PictureInPictureDelegatePtr delegate;
-  delegate_binding_.Bind(mojo::MakeRequest(&delegate));
-  picture_in_picture_service_->SetDelegate(std::move(delegate));
+  if (element->GetWebMediaPlayer()) {
+    element->GetWebMediaPlayer()->RegisterPictureInPictureWindowResizeCallback(
+        WTF::BindRepeating(&PictureInPictureWindow::OnResize,
+                           WrapPersistent(picture_in_picture_window_.Get())));
+  }
 
   if (resolver)
     resolver->Resolve(picture_in_picture_window_);
@@ -173,16 +145,9 @@
 void PictureInPictureControllerImpl::ExitPictureInPicture(
     HTMLVideoElement* element,
     ScriptPromiseResolver* resolver) {
-  if (element->GetWebMediaPlayer())
-    element->GetWebMediaPlayer()->ExitPictureInPicture();
-
-  if (!EnsureService())
-    return;
-
-  picture_in_picture_service_->EndSession(
+  element->exitPictureInPicture(
       WTF::Bind(&PictureInPictureControllerImpl::OnExitedPictureInPicture,
                 WrapPersistent(this), WrapPersistent(resolver)));
-  delegate_binding_.Close();
 }
 
 void PictureInPictureControllerImpl::SetPictureInPictureCustomControls(
@@ -278,6 +243,7 @@
 
   // Auto Picture-in-Picture is allowed only in a PWA window.
   if (!GetSupplementable()->GetFrame() ||
+      !GetSupplementable()->GetFrame()->View() ||
       GetSupplementable()->GetFrame()->View()->DisplayMode() ==
           WebDisplayMode::kWebDisplayModeBrowser) {
     return;
@@ -308,53 +274,17 @@
   }
 }
 
-void PictureInPictureControllerImpl::ContextDestroyed(Document*) {
-  picture_in_picture_service_.reset();
-  delegate_binding_.Close();
-}
-
-void PictureInPictureControllerImpl::OnPictureInPictureStateChange() {
-  DCHECK(picture_in_picture_element_);
-  DCHECK(picture_in_picture_element_->GetWebMediaPlayer());
-
-  picture_in_picture_service_->UpdateSession(
-      picture_in_picture_element_->GetWebMediaPlayer()->GetDelegateId(),
-      picture_in_picture_element_->GetWebMediaPlayer()->GetSurfaceId(),
-      picture_in_picture_element_->GetWebMediaPlayer()->NaturalSize(),
-      ShouldShowPlayPauseButton(*picture_in_picture_element_));
-}
-
-void PictureInPictureControllerImpl::PictureInPictureWindowSizeChanged(
-    const blink::WebSize& size) {
-  if (picture_in_picture_window_)
-    picture_in_picture_window_->OnResize(size);
-}
-
 void PictureInPictureControllerImpl::Trace(blink::Visitor* visitor) {
   visitor->Trace(picture_in_picture_element_);
   visitor->Trace(auto_picture_in_picture_elements_);
   visitor->Trace(picture_in_picture_window_);
   PictureInPictureController::Trace(visitor);
   PageVisibilityObserver::Trace(visitor);
-  DocumentShutdownObserver::Trace(visitor);
 }
 
 PictureInPictureControllerImpl::PictureInPictureControllerImpl(
     Document& document)
     : PictureInPictureController(document),
-      PageVisibilityObserver(document.GetPage()),
-      delegate_binding_(this) {}
-
-bool PictureInPictureControllerImpl::EnsureService() {
-  if (picture_in_picture_service_)
-    return true;
-
-  if (!GetSupplementable()->GetFrame())
-    return false;
-
-  GetSupplementable()->GetFrame()->GetInterfaceProvider().GetInterface(
-      mojo::MakeRequest(&picture_in_picture_service_));
-  return true;
-}
+      PageVisibilityObserver(document.GetPage()) {}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h
index f0e16f1f..af8a3f9 100644
--- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h
+++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h
@@ -5,11 +5,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_CONTROLLER_IMPL_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_CONTROLLER_IMPL_H_
 
-#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h"
-#include "third_party/blink/renderer/core/dom/document_shutdown_observer.h"
 #include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
 #include "third_party/blink/renderer/core/page/page_visibility_observer.h"
-#include "third_party/blink/renderer/modules/modules_export.h"
 
 namespace blink {
 
@@ -26,17 +23,14 @@
 // PictureInPictureControllerImpl instance is associated to a Document. It is
 // supplement and therefore can be lazy-initiated. Callers should consider
 // whether they want to instantiate an object when they make a call.
-class MODULES_EXPORT PictureInPictureControllerImpl
-    : public PictureInPictureController,
-      public PageVisibilityObserver,
-      public DocumentShutdownObserver,
-      public blink::mojom::blink::PictureInPictureDelegate {
+class PictureInPictureControllerImpl : public PictureInPictureController,
+                                       public PageVisibilityObserver {
   USING_GARBAGE_COLLECTED_MIXIN(PictureInPictureControllerImpl);
   WTF_MAKE_NONCOPYABLE(PictureInPictureControllerImpl);
 
  public:
   explicit PictureInPictureControllerImpl(Document&);
-  ~PictureInPictureControllerImpl() override = default;
+  ~PictureInPictureControllerImpl() override;
 
   // Meant to be called internally by PictureInPictureController::From()
   // through ModulesInitializer.
@@ -73,24 +67,12 @@
       const std::vector<PictureInPictureControlInfo>&) override;
   Status IsElementAllowed(const HTMLVideoElement&) const override;
   bool IsPictureInPictureElement(const Element*) const override;
-  void OnPictureInPictureStateChange() override;
 
-  // Implementation of PictureInPictureDelegate.
-  void PictureInPictureWindowSizeChanged(const blink::WebSize&) override;
-
-  // Implementation of PageVisibilityObserver.
+  // PageVisibilityObserver implementation.
   void PageVisibilityChanged() override;
 
-  // Implementation of DocumentShutdownObserver.
-  void ContextDestroyed(Document*) override;
-
   void Trace(blink::Visitor*) override;
 
-  mojo::Binding<mojom::blink::PictureInPictureDelegate>&
-  GetDelegateBindingForTesting() {
-    return delegate_binding_;
-  }
-
  private:
   void OnEnteredPictureInPicture(HTMLVideoElement*,
                                  ScriptPromiseResolver*,
@@ -98,10 +80,6 @@
   void OnExitedPictureInPicture(ScriptPromiseResolver*) override;
   void OnPictureInPictureControlClicked(const WebString& control_id) override;
 
-  // Makes sure the `picture_in_picture_service_` is set. Returns whether it was
-  // initialized successfully.
-  bool EnsureService();
-
   // The Picture-in-Picture element for the associated document.
   Member<HTMLVideoElement> picture_in_picture_element_;
 
@@ -111,12 +89,6 @@
 
   // The Picture-in-Picture window for the associated document.
   Member<PictureInPictureWindow> picture_in_picture_window_;
-
-  // Mojo bindings for the delegate interface implemented by |this|.
-  mojo::Binding<mojom::blink::PictureInPictureDelegate> delegate_binding_;
-
-  // Picture-in-Picture service living in the browser process.
-  mojom::blink::PictureInPictureServicePtr picture_in_picture_service_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc
deleted file mode 100644
index 05239c5..0000000
--- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc
+++ /dev/null
@@ -1,321 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h"
-
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h"
-#include "third_party/blink/public/platform/web_media_stream.h"
-#include "third_party/blink/public/platform/web_media_stream_track.h"
-#include "third_party/blink/renderer/core/dom/events/event.h"
-#include "third_party/blink/renderer/core/dom/events/native_event_listener.h"
-#include "third_party/blink/renderer/core/html/media/html_media_test_helper.h"
-#include "third_party/blink/renderer/core/html/media/html_video_element.h"
-#include "third_party/blink/renderer/core/testing/page_test_base.h"
-#include "third_party/blink/renderer/platform/testing/empty_web_media_player.h"
-#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
-
-using ::testing::_;
-
-namespace blink {
-
-// The MockPictureInPictureService implements the PictureInPicture service in
-// the same process as the test and guarantees that the callbacks are called in
-// order for the events to be fired.
-class MockPictureInPictureService
-    : public mojom::blink::PictureInPictureService {
- public:
-  MockPictureInPictureService() : binding_(this) {
-    // Setup default implementations.
-    ON_CALL(*this, StartSession(_, _, _, _, _))
-        .WillByDefault([](uint32_t, const base::Optional<viz::SurfaceId>&,
-                          const blink::WebSize&, bool,
-                          StartSessionCallback callback) {
-          std::move(callback).Run(WebSize());
-        });
-    ON_CALL(*this, EndSession(_))
-        .WillByDefault(
-            [](EndSessionCallback callback) { std::move(callback).Run(); });
-  }
-  ~MockPictureInPictureService() override = default;
-
-  void Bind(mojo::ScopedMessagePipeHandle handle) {
-    binding_.Bind(
-        mojom::blink::PictureInPictureServiceRequest(std::move(handle)));
-  }
-
-  MOCK_METHOD5(StartSession,
-               void(uint32_t,
-                    const base::Optional<viz::SurfaceId>&,
-                    const blink::WebSize&,
-                    bool,
-                    StartSessionCallback));
-  MOCK_METHOD1(EndSession, void(EndSessionCallback));
-  MOCK_METHOD4(UpdateSession,
-               void(uint32_t,
-                    const base::Optional<viz::SurfaceId>&,
-                    const blink::WebSize&,
-                    bool));
-  MOCK_METHOD1(SetDelegate, void(mojom::blink::PictureInPictureDelegatePtr));
-
- private:
-  mojo::Binding<mojom::blink::PictureInPictureService> binding_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockPictureInPictureService);
-};
-
-// Helper class that will block running the test until the given event is fired
-// on the given element.
-class WaitForEvent : public NativeEventListener {
- public:
-  static WaitForEvent* Create(Element* element, const AtomicString& name) {
-    return MakeGarbageCollected<WaitForEvent>(element, name);
-  }
-
-  WaitForEvent(Element* element, const AtomicString& name)
-      : element_(element), name_(name) {
-    element_->addEventListener(name_, this);
-    run_loop_.Run();
-  }
-
-  void Invoke(ExecutionContext*, Event*) final {
-    run_loop_.Quit();
-    element_->removeEventListener(name_, this);
-  }
-
-  void Trace(Visitor* visitor) final {
-    NativeEventListener::Trace(visitor);
-    visitor->Trace(element_);
-  }
-
- private:
-  base::RunLoop run_loop_;
-  Member<Element> element_;
-  AtomicString name_;
-};
-
-class PictureInPictureControllerFrameClient
-    : public test::MediaStubLocalFrameClient {
- public:
-  static PictureInPictureControllerFrameClient* Create(
-      std::unique_ptr<WebMediaPlayer> player) {
-    return MakeGarbageCollected<PictureInPictureControllerFrameClient>(
-        std::move(player));
-  }
-
-  explicit PictureInPictureControllerFrameClient(
-      std::unique_ptr<WebMediaPlayer> player)
-      : test::MediaStubLocalFrameClient(std::move(player)),
-        interface_provider_(new service_manager::InterfaceProvider()) {}
-
-  service_manager::InterfaceProvider* GetInterfaceProvider() override {
-    return interface_provider_.get();
-  }
-
- private:
-  std::unique_ptr<service_manager::InterfaceProvider> interface_provider_;
-
-  DISALLOW_COPY_AND_ASSIGN(PictureInPictureControllerFrameClient);
-};
-
-// TODO: can probably be removed.
-class PictureInPictureControllerPlayer : public EmptyWebMediaPlayer {
- public:
-  PictureInPictureControllerPlayer() = default;
-  ~PictureInPictureControllerPlayer() final = default;
-
-  double Duration() const final {
-    if (infinity_duration_)
-      return std::numeric_limits<double>::infinity();
-    return EmptyWebMediaPlayer::Duration();
-  }
-
-  void set_infinity_duration(bool value) { infinity_duration_ = value; }
-
- private:
-  bool infinity_duration_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(PictureInPictureControllerPlayer);
-};
-
-class PictureInPictureControllerTest : public PageTestBase {
- public:
-  void SetUp() override {
-    PageTestBase::SetupPageWithClients(
-        nullptr, PictureInPictureControllerFrameClient::Create(
-                     std::make_unique<PictureInPictureControllerPlayer>()));
-
-    service_manager::InterfaceProvider::TestApi test_api(
-        GetFrame().Client()->GetInterfaceProvider());
-    test_api.SetBinderForName(
-        mojom::blink::PictureInPictureService::Name_,
-        WTF::BindRepeating(&MockPictureInPictureService::Bind,
-                           WTF::Unretained(&mock_service_)));
-
-    video_ = HTMLVideoElement::Create(GetDocument());
-    layer_ = cc::Layer::Create();
-    video_->SetCcLayerForTesting(layer_.get());
-
-    std::string test_name =
-        testing::UnitTest::GetInstance()->current_test_info()->name();
-    if (test_name.find("MediaSource") != std::string::npos) {
-      blink::WebMediaStream web_media_stream;
-      blink::WebVector<blink::WebMediaStreamTrack> dummy_tracks;
-      web_media_stream.Initialize(dummy_tracks, dummy_tracks);
-      Video()->SetSrcObject(web_media_stream);
-    } else {
-      video_->SetSrc("http://example.com/foo.mp4");
-    }
-
-    test::RunPendingTasks();
-  }
-
-  HTMLVideoElement* Video() const { return video_.Get(); }
-  MockPictureInPictureService& Service() { return mock_service_; }
-
- private:
-  Persistent<HTMLVideoElement> video_;
-  MockPictureInPictureService mock_service_;
-  scoped_refptr<cc::Layer> layer_;
-};
-
-TEST_F(PictureInPictureControllerTest, EnterPictureInPictureFiresEvent) {
-  EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument())
-                         .PictureInPictureElement());
-
-  WebMediaPlayer* player = Video()->GetWebMediaPlayer();
-  EXPECT_CALL(Service(),
-              StartSession(player->GetDelegateId(), player->GetSurfaceId(),
-                           player->NaturalSize(), true, _));
-  EXPECT_CALL(Service(), SetDelegate(_));
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .EnterPictureInPicture(Video(), nullptr);
-
-  WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture);
-
-  EXPECT_NE(nullptr, PictureInPictureControllerImpl::From(GetDocument())
-                         .PictureInPictureElement());
-
-  // `SetDelegate()` may or may not have been called yet. Waiting a bit for it.
-  test::RunPendingTasks();
-}
-
-TEST_F(PictureInPictureControllerTest, ExitPictureInPictureFiresEvent) {
-  EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument())
-                         .PictureInPictureElement());
-
-  WebMediaPlayer* player = Video()->GetWebMediaPlayer();
-  EXPECT_CALL(Service(),
-              StartSession(player->GetDelegateId(), player->GetSurfaceId(),
-                           player->NaturalSize(), true, _));
-  EXPECT_CALL(Service(), EndSession(_));
-  EXPECT_CALL(Service(), SetDelegate(_));
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .EnterPictureInPicture(Video(), nullptr);
-  WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture);
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .ExitPictureInPicture(Video(), nullptr);
-  WaitForEvent::Create(Video(), event_type_names::kLeavepictureinpicture);
-
-  EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument())
-                         .PictureInPictureElement());
-}
-
-TEST_F(PictureInPictureControllerTest, StartObserving) {
-  EXPECT_FALSE(PictureInPictureControllerImpl::From(GetDocument())
-                   .GetDelegateBindingForTesting()
-                   .is_bound());
-
-  WebMediaPlayer* player = Video()->GetWebMediaPlayer();
-  EXPECT_CALL(Service(),
-              StartSession(player->GetDelegateId(), player->GetSurfaceId(),
-                           player->NaturalSize(), true, _));
-  EXPECT_CALL(Service(), SetDelegate(_));
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .EnterPictureInPicture(Video(), nullptr);
-
-  WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture);
-
-  EXPECT_TRUE(PictureInPictureControllerImpl::From(GetDocument())
-                  .GetDelegateBindingForTesting()
-                  .is_bound());
-
-  // `SetDelegate()` may or may not have been called yet. Waiting a bit for it.
-  test::RunPendingTasks();
-}
-
-TEST_F(PictureInPictureControllerTest, StopObserving) {
-  EXPECT_FALSE(PictureInPictureControllerImpl::From(GetDocument())
-                   .GetDelegateBindingForTesting()
-                   .is_bound());
-
-  WebMediaPlayer* player = Video()->GetWebMediaPlayer();
-  EXPECT_CALL(Service(),
-              StartSession(player->GetDelegateId(), player->GetSurfaceId(),
-                           player->NaturalSize(), true, _));
-  EXPECT_CALL(Service(), EndSession(_));
-  EXPECT_CALL(Service(), SetDelegate(_));
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .EnterPictureInPicture(Video(), nullptr);
-  WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture);
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .ExitPictureInPicture(Video(), nullptr);
-  WaitForEvent::Create(Video(), event_type_names::kLeavepictureinpicture);
-
-  EXPECT_FALSE(PictureInPictureControllerImpl::From(GetDocument())
-                   .GetDelegateBindingForTesting()
-                   .is_bound());
-}
-
-TEST_F(PictureInPictureControllerTest, PlayPauseButton_InfiniteDuration) {
-  EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument())
-                         .PictureInPictureElement());
-
-  Video()->DurationChanged(std::numeric_limits<double>::infinity(), false);
-
-  WebMediaPlayer* player = Video()->GetWebMediaPlayer();
-  EXPECT_CALL(Service(),
-              StartSession(player->GetDelegateId(), player->GetSurfaceId(),
-                           player->NaturalSize(), false, _));
-  EXPECT_CALL(Service(), SetDelegate(_));
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .EnterPictureInPicture(Video(), nullptr);
-
-  WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture);
-
-  // `SetDelegate()` may or may not have been called yet. Waiting a bit for it.
-  test::RunPendingTasks();
-}
-
-TEST_F(PictureInPictureControllerTest, PlayPauseButton_MediaSource) {
-  EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument())
-                         .PictureInPictureElement());
-
-  // The test automatically setup the WebMediaPlayer with a MediaSource based on
-  // the test name.
-
-  WebMediaPlayer* player = Video()->GetWebMediaPlayer();
-  EXPECT_CALL(Service(),
-              StartSession(player->GetDelegateId(), player->GetSurfaceId(),
-                           player->NaturalSize(), false, _));
-  EXPECT_CALL(Service(), SetDelegate(_));
-
-  PictureInPictureControllerImpl::From(GetDocument())
-      .EnterPictureInPicture(Video(), nullptr);
-
-  WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture);
-
-  // `SetDelegate()` may or may not have been called yet. Waiting a bit for it.
-  test::RunPendingTasks();
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
index 08554e4..54aa151 100644
--- a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
+++ b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
@@ -33,9 +33,9 @@
 #include "third_party/blink/renderer/platform/audio/audio_bus.h"
 #include "third_party/blink/renderer/platform/audio/audio_file_reader.h"
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 
 namespace blink {
 
@@ -55,7 +55,7 @@
       context->GetExecutionContext()->GetTaskRunner(
           blink::TaskType::kInternalMedia);
 
-  background_scheduler::PostOnBackgroundThread(
+  worker_pool::PostTask(
       FROM_HERE,
       CrossThreadBind(&AsyncAudioDecoder::DecodeOnBackgroundThread,
                       WrapCrossThreadPersistent(audio_data), sample_rate,
diff --git a/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc b/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
index 1c54add..e692189 100644
--- a/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
+++ b/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
@@ -14,11 +14,8 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_gc_controller.h"
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
-#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h"
-#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
 #include "third_party/blink/renderer/core/script/script.h"
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
-#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
 #include "third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h"
 #include "third_party/blink/renderer/core/workers/worker_backing_thread.h"
 #include "third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h"
@@ -26,6 +23,7 @@
 #include "third_party/blink/renderer/core/workers/worklet_module_responses_map.h"
 #include "third_party/blink/renderer/core/workers/worklet_thread_holder.h"
 #include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h"
+#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h"
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
@@ -55,33 +53,6 @@
     reporting_proxy_ = std::make_unique<WorkerReportingProxy>();
   }
 
-  std::unique_ptr<AnimationAndPaintWorkletThread>
-  CreateAnimationAndPaintWorkletThread() {
-    WorkerClients* clients = WorkerClients::Create();
-    ProvideAnimationWorkletProxyClientTo(
-        clients, MakeGarbageCollected<TestAnimationWorkletProxyClient>());
-
-    std::unique_ptr<AnimationAndPaintWorkletThread> thread =
-        AnimationAndPaintWorkletThread::CreateForAnimationWorklet(
-            *reporting_proxy_);
-    Document* document = &GetDocument();
-    thread->Start(
-        std::make_unique<GlobalScopeCreationParams>(
-            document->Url(), mojom::ScriptType::kModule,
-            OffMainThreadWorkerScriptFetchOption::kEnabled,
-            document->UserAgent(), nullptr /* web_worker_fetch_context */,
-            Vector<CSPHeaderAndType>(), document->GetReferrerPolicy(),
-            document->GetSecurityOrigin(), document->IsSecureContext(),
-            document->GetHttpsState(), clients, document->AddressSpace(),
-            OriginTrialContext::GetTokens(document).get(),
-            base::UnguessableToken::Create(), nullptr /* worker_settings */,
-            kV8CacheOptionsDefault,
-            MakeGarbageCollected<WorkletModuleResponsesMap>()),
-        base::nullopt, std::make_unique<WorkerDevToolsParams>(),
-        ParentExecutionContextTaskRunners::Create());
-    return thread;
-  }
-
   // Attempts to run some simple script for |thread|.
   void CheckWorkletCanExecuteScript(WorkerThread* thread) {
     std::unique_ptr<WaitableEvent> wait_event =
@@ -95,6 +66,8 @@
     wait_event->Wait();
   }
 
+  std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
+
  private:
   void ExecuteScriptInWorklet(WorkerThread* thread, WaitableEvent* wait_event) {
     ScriptState* script_state =
@@ -113,13 +86,12 @@
     EXPECT_TRUE(value.IsEmpty());
     wait_event->Signal();
   }
-
-  std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
 };
 
 TEST_F(AnimationAndPaintWorkletThreadTest, Basic) {
   std::unique_ptr<AnimationAndPaintWorkletThread> worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   CheckWorkletCanExecuteScript(worklet.get());
   worklet->Terminate();
   worklet->WaitForShutdownForTesting();
@@ -130,7 +102,8 @@
 TEST_F(AnimationAndPaintWorkletThreadTest, CreateSecondAndTerminateFirst) {
   // Create the first worklet and wait until it is initialized.
   std::unique_ptr<AnimationAndPaintWorkletThread> first_worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   WebThreadSupportingGC* first_thread =
       &first_worklet->GetWorkerBackingThread().BackingThread();
   CheckWorkletCanExecuteScript(first_worklet.get());
@@ -139,7 +112,8 @@
 
   // Create the second worklet and immediately destroy the first worklet.
   std::unique_ptr<AnimationAndPaintWorkletThread> second_worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   // We don't use terminateAndWait here to avoid forcible termination.
   first_worklet->Terminate();
   first_worklet->WaitForShutdownForTesting();
@@ -166,7 +140,8 @@
 TEST_F(AnimationAndPaintWorkletThreadTest, TerminateFirstAndCreateSecond) {
   // Create the first worklet, wait until it is initialized, and terminate it.
   std::unique_ptr<AnimationAndPaintWorkletThread> worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   WebThreadSupportingGC* first_thread =
       &worklet->GetWorkerBackingThread().BackingThread();
   CheckWorkletCanExecuteScript(worklet.get());
@@ -176,7 +151,8 @@
   worklet->WaitForShutdownForTesting();
 
   // Create the second worklet. The backing thread is same.
-  worklet = CreateAnimationAndPaintWorkletThread();
+  worklet = CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                                 reporting_proxy_.get());
   WebThreadSupportingGC* second_thread =
       &worklet->GetWorkerBackingThread().BackingThread();
   EXPECT_EQ(first_thread, second_thread);
@@ -191,7 +167,8 @@
 TEST_F(AnimationAndPaintWorkletThreadTest,
        CreatingSecondDuringTerminationOfFirst) {
   std::unique_ptr<AnimationAndPaintWorkletThread> first_worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   CheckWorkletCanExecuteScript(first_worklet.get());
   v8::Isolate* first_isolate = first_worklet->GetIsolate();
   ASSERT_TRUE(first_isolate);
@@ -204,7 +181,8 @@
   // on the worklet thread so quickly. This could be a source of flakiness.
 
   std::unique_ptr<AnimationAndPaintWorkletThread> second_worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
 
   v8::Isolate* second_isolate = second_worklet->GetIsolate();
   ASSERT_TRUE(second_isolate);
@@ -225,14 +203,16 @@
       AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting());
 
   std::unique_ptr<AnimationAndPaintWorkletThread> worklet =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   ASSERT_TRUE(worklet.get());
   WorkletThreadHolder<AnimationAndPaintWorkletThread>* holder =
       AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting();
   EXPECT_TRUE(holder);
 
   std::unique_ptr<AnimationAndPaintWorkletThread> worklet2 =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   ASSERT_TRUE(worklet2.get());
   WorkletThreadHolder<AnimationAndPaintWorkletThread>* holder2 =
       AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting();
@@ -251,7 +231,8 @@
       AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting());
 
   std::unique_ptr<AnimationAndPaintWorkletThread> worklet3 =
-      CreateAnimationAndPaintWorkletThread();
+      CreateAnimationAndPaintWorkletThread(&GetDocument(),
+                                           reporting_proxy_.get());
   ASSERT_TRUE(worklet3.get());
   EXPECT_TRUE(
       AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting());
diff --git a/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc
new file mode 100644
index 0000000..c83a2234
--- /dev/null
+++ b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc
@@ -0,0 +1,55 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h"
+
+#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h"
+#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
+#include "third_party/blink/renderer/core/testing/page_test_base.h"
+#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
+#include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h"
+#include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h"
+
+namespace blink {
+
+std::unique_ptr<AnimationAndPaintWorkletThread>
+CreateAnimationAndPaintWorkletThread(
+    Document* document,
+    WorkerReportingProxy* reporting_proxy,
+    AnimationWorkletProxyClient* proxy_client) {
+  std::unique_ptr<AnimationAndPaintWorkletThread> thread =
+      AnimationAndPaintWorkletThread::CreateForAnimationWorklet(
+          *reporting_proxy);
+
+  if (!proxy_client) {
+    proxy_client = MakeGarbageCollected<AnimationWorkletProxyClient>(
+        1, nullptr, /* mutator_dispatcher */
+        nullptr,    /* mutator_runner */
+        nullptr,    /* mutator_dispatcher */
+        nullptr     /* mutator_runner */
+    );
+  }
+  WorkerClients* clients = WorkerClients::Create();
+  ProvideAnimationWorkletProxyClientTo(clients, proxy_client);
+
+  thread->Start(
+      std::make_unique<GlobalScopeCreationParams>(
+          document->Url(), mojom::ScriptType::kModule,
+          OffMainThreadWorkerScriptFetchOption::kEnabled, document->UserAgent(),
+          nullptr /* web_worker_fetch_context */, Vector<CSPHeaderAndType>(),
+          document->GetReferrerPolicy(), document->GetSecurityOrigin(),
+          document->IsSecureContext(), document->GetHttpsState(), clients,
+          document->AddressSpace(),
+          OriginTrialContext::GetTokens(document).get(),
+          base::UnguessableToken::Create(), nullptr /* worker_settings */,
+          kV8CacheOptionsDefault,
+          MakeGarbageCollected<WorkletModuleResponsesMap>()),
+      base::nullopt, std::make_unique<WorkerDevToolsParams>(),
+      ParentExecutionContextTaskRunners::Create());
+  return thread;
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h
new file mode 100644
index 0000000..4b50361
--- /dev/null
+++ b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h
@@ -0,0 +1,25 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WORKLET_WORKLET_THREAD_TEST_COMMON_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_WORKLET_WORKLET_THREAD_TEST_COMMON_H_
+
+#include <memory>
+
+#include "third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread.h"
+
+namespace blink {
+
+class AnimationWorkletProxyClient;
+class Document;
+class WorkerReportingProxy;
+
+std::unique_ptr<AnimationAndPaintWorkletThread>
+CreateAnimationAndPaintWorkletThread(Document*,
+                                     WorkerReportingProxy*,
+                                     AnimationWorkletProxyClient* = nullptr);
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_WORKLET_WORKLET_THREAD_TEST_COMMON_H_
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string.cc b/third_party/blink/renderer/platform/bindings/parkable_string.cc
index 976b5d4..1bac8ed 100644
--- a/third_party/blink/renderer/platform/bindings/parkable_string.cc
+++ b/third_party/blink/renderer/platform/bindings/parkable_string.cc
@@ -16,9 +16,9 @@
 #include "third_party/blink/renderer/platform/bindings/parkable_string_manager.h"
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h"
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 #include "third_party/blink/renderer/platform/wtf/address_sanitizer.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
 #include "third_party/blink/renderer/platform/wtf/thread_specific.h"
@@ -345,7 +345,7 @@
     auto params = std::make_unique<CompressionTaskParams>(
         this, string_.Bytes(), string_.CharactersSizeInBytes(),
         Thread::Current()->GetTaskRunner());
-    background_scheduler::PostOnBackgroundThread(
+    worker_pool::PostTask(
         FROM_HERE, CrossThreadBind(&ParkableStringImpl::CompressInBackground,
                                    WTF::Passed(std::move(params))));
     state_ = State::kParkingInProgress;
diff --git a/third_party/blink/renderer/platform/scheduler/BUILD.gn b/third_party/blink/renderer/platform/scheduler/BUILD.gn
index 71b4d17..f6c0510 100644
--- a/third_party/blink/renderer/platform/scheduler/BUILD.gn
+++ b/third_party/blink/renderer/platform/scheduler/BUILD.gn
@@ -9,7 +9,6 @@
 
 blink_platform_sources("scheduler") {
   sources = [
-    "common/background_scheduler.cc",
     "common/cancelable_closure_holder.cc",
     "common/cancelable_closure_holder.h",
     "common/features.cc",
@@ -56,6 +55,7 @@
     "common/unprioritized_resource_loading_task_runner_handle.h",
     "common/web_resource_loading_task_runner_handle.cc",
     "common/web_thread_scheduler.cc",
+    "common/worker_pool.cc",
     "main_thread/auto_advancing_virtual_time_domain.cc",
     "main_thread/auto_advancing_virtual_time_domain.h",
     "main_thread/deadline_task_runner.cc",
@@ -101,7 +101,6 @@
     "main_thread/web_render_widget_scheduling_state.cc",
     "main_thread/web_scoped_virtual_time_pauser.cc",
     "public/aggregated_metric_reporter.h",
-    "public/background_scheduler.h",
     "public/frame_or_worker_scheduler.h",
     "public/frame_scheduler.h",
     "public/frame_status.h",
@@ -114,6 +113,7 @@
     "public/thread.h",
     "public/thread_cpu_throttler.h",
     "public/thread_scheduler.h",
+    "public/worker_pool.h",
     "public/worker_scheduler.h",
     "worker/compositor_metrics_helper.cc",
     "worker/compositor_metrics_helper.h",
@@ -178,7 +178,6 @@
   testonly = true
 
   sources = [
-    "common/background_scheduler_unittest.cc",
     "common/idle_helper_unittest.cc",
     "common/idle_memory_reclaimer_unittest.cc",
     "common/metrics_helper_unittest.cc",
@@ -188,6 +187,7 @@
     "common/throttling/budget_pool_unittest.cc",
     "common/throttling/task_queue_throttler_unittest.cc",
     "common/tracing_helper_unittest.cc",
+    "common/worker_pool_unittest.cc",
     "main_thread/auto_advancing_virtual_time_domain_unittest.cc",
     "main_thread/deadline_task_runner_unittest.cc",
     "main_thread/frame_scheduler_impl_unittest.cc",
diff --git a/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md b/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md
index f97d2a4..c46763c 100644
--- a/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md
+++ b/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md
@@ -151,13 +151,15 @@
 ## Off-main thread scheduling
 
 If your task doesn’t have to run on the main thread, use
-BackgroundScheduler::PostOnBackgroundThread, which uses a thread pool
+worker_pool::PostTask, which uses a thread pool
 behind the scenes.
 
 Do not create your own dedicated thread if you need ordering for your tasks,
-use BackgroundScheduler::CreateBackgroundTaskRunnerWithTraits instead —
+use worker_pool::CreateTaskRunnerWithTraits instead —
 this creates a sequence (virtual thread which can run tasks in order on
 any of the threads in the thread pool).
+(Note: this doesn't exist yet because we haven't encountered a use case in Blink
+which needs it. If you need one, please task to scheduler-dev@ and we'll add it).
 
 See [threading and tasks](../../../../../docs/threading_and_tasks.md) for
 more details.
diff --git a/third_party/blink/renderer/platform/scheduler/common/background_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/background_scheduler.cc
deleted file mode 100644
index 0085fd2..0000000
--- a/third_party/blink/renderer/platform/scheduler/common/background_scheduler.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
-
-#include "base/location.h"
-#include "base/task/post_task.h"
-
-namespace blink {
-
-namespace background_scheduler {
-
-void PostOnBackgroundThread(const base::Location& location,
-                            CrossThreadClosure closure) {
-  PostOnBackgroundThreadWithTraits(
-      location, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      std::move(closure));
-}
-
-void PostOnBackgroundThreadWithTraits(const base::Location& location,
-                                      const base::TaskTraits& traits,
-                                      CrossThreadClosure closure) {
-  base::PostTaskWithTraits(location, traits,
-                           ConvertToBaseCallback(std::move(closure)));
-}
-
-}  // namespace background_scheduler
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
new file mode 100644
index 0000000..f272ee6
--- /dev/null
+++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
@@ -0,0 +1,29 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
+
+#include "base/location.h"
+#include "base/task/post_task.h"
+
+namespace blink {
+
+namespace worker_pool {
+
+void PostTask(const base::Location& location, CrossThreadClosure closure) {
+  PostTaskWithTraits(location,
+                     {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+                     std::move(closure));
+}
+
+void PostTaskWithTraits(const base::Location& location,
+                        const base::TaskTraits& traits,
+                        CrossThreadClosure closure) {
+  base::PostTaskWithTraits(location, traits,
+                           ConvertToBaseCallback(std::move(closure)));
+}
+
+}  // namespace worker_pool
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/common/background_scheduler_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
similarity index 87%
rename from third_party/blink/renderer/platform/scheduler/common/background_scheduler_unittest.cc
rename to third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
index bcd2372cd..e3fe93f 100644
--- a/third_party/blink/renderer/platform/scheduler/common/background_scheduler_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h"
+#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 
 #include <memory>
 #include "base/location.h"
@@ -24,7 +24,7 @@
 TEST(BackgroundSchedulerTest, RunOnBackgroundThread) {
   base::test::ScopedTaskEnvironment scoped_task_environment;
   std::unique_ptr<WaitableEvent> done_event = std::make_unique<WaitableEvent>();
-  background_scheduler::PostOnBackgroundThread(
+  worker_pool::PostTask(
       FROM_HERE,
       CrossThreadBind(&PingPongTask, CrossThreadUnretained(done_event.get())));
   // Test passes by not hanging on the following wait().
diff --git a/third_party/blink/renderer/platform/scheduler/public/background_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/background_scheduler.h
deleted file mode 100644
index f11c9446..0000000
--- a/third_party/blink/renderer/platform/scheduler/public/background_scheduler.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_BACKGROUND_SCHEDULER_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_BACKGROUND_SCHEDULER_H_
-
-#include "base/location.h"
-#include "base/sequenced_task_runner.h"
-#include "base/task/task_traits.h"
-#include "third_party/blink/renderer/platform/platform_export.h"
-#include "third_party/blink/renderer/platform/wtf/functional.h"
-
-namespace blink {
-
-namespace background_scheduler {
-
-// These are a thin wrapper around base::TaskScheduler to accomodate
-// Blink's CrossThreadClosure, which only allows background tasks
-// (i.e. tasks which are run off the main thread).
-//
-// Non-background tasks should be posted using another scheduler, e.g.
-// FrameShceduler.
-PLATFORM_EXPORT void PostOnBackgroundThread(const base::Location&,
-                                            CrossThreadClosure);
-
-PLATFORM_EXPORT void PostOnBackgroundThreadWithTraits(const base::Location&,
-                                                      const base::TaskTraits&,
-                                                      CrossThreadClosure);
-
-// TODO(altimin): Expose CreateBackgroundTaskRunnerWithTraits when the
-// need arises.
-
-}  // namespace background_scheduler
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_BACKGROUND_SCHEDULER_H_
diff --git a/third_party/blink/renderer/platform/scheduler/public/worker_pool.h b/third_party/blink/renderer/platform/scheduler/public/worker_pool.h
new file mode 100644
index 0000000..ba16648
--- /dev/null
+++ b/third_party/blink/renderer/platform/scheduler/public/worker_pool.h
@@ -0,0 +1,41 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_POOL_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_POOL_H_
+
+#include "base/location.h"
+#include "base/sequenced_task_runner.h"
+#include "base/task/task_traits.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
+
+namespace blink {
+
+namespace worker_pool {
+
+// These are a thin wrapper around base::TaskScheduler to ensure that all
+// callers use WTF::CrossThreadBind instead of base::Bind to ensure that
+// all non-thread-safe objects are copied properly.
+//
+// All tasks that do not care about which thread they are running on
+// (e.g. compressing/uncompressing tasks) use this API.
+//
+// Tasks that have to run on a specific thread (e.g. main thread, compositor
+// thread, dedicated worker thread) should be posted via other means
+// (e.g. FrameScheduler for main thread tasks).
+PLATFORM_EXPORT void PostTask(const base::Location&, CrossThreadClosure);
+
+PLATFORM_EXPORT void PostTaskWithTraits(const base::Location&,
+                                        const base::TaskTraits&,
+                                        CrossThreadClosure);
+
+// TODO(altimin): Expose CreateSequencedTaskRunnerWithTraits when the
+// need arises.
+
+}  // namespace worker_pool
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_POOL_H_
diff --git a/third_party/blink/renderer/platform/testing/empty_web_media_player.h b/third_party/blink/renderer/platform/testing/empty_web_media_player.h
index fea2a40..205fde99 100644
--- a/third_party/blink/renderer/platform/testing/empty_web_media_player.h
+++ b/third_party/blink/renderer/platform/testing/empty_web_media_player.h
@@ -28,10 +28,12 @@
   void Seek(double seconds) override {}
   void SetRate(double) override {}
   void SetVolume(double) override {}
-  void EnterPictureInPicture() override {}
-  void ExitPictureInPicture() override {}
+  void EnterPictureInPicture(PipWindowOpenedCallback) override {}
+  void ExitPictureInPicture(PipWindowClosedCallback) override {}
   void SetPictureInPictureCustomControls(
       const std::vector<PictureInPictureControlInfo>&) override {}
+  void RegisterPictureInPictureWindowResizeCallback(
+      PipWindowResizedCallback) override {}
   SurfaceLayerMode GetVideoSurfaceLayerMode() const override {
     return SurfaceLayerMode::kNever;
   }
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index 298ff6fd8..27a70b2 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -236,7 +236,6 @@
             'url::.+',
 
             # Nested namespaces under the blink namespace
-            'background_scheduler::.+',
             'canvas_heuristic_parameters::.+',
             'compositor_target_property::.+',
             'cors::.+',
@@ -264,11 +263,12 @@
             'style_change_extra_data::.+',
             'style_change_reason::.+',
             'svg_path_parser::.+',
-            'trace_event::.+',
             'touch_action_util::.+',
+            'trace_event::.+',
             'unicode::.+',
             'vector_math::.+',
             'web_core_test_support::.+',
+            'worker_pool::.+',
             'xpath::.+',
             '[a-z_]+_names::.+',
 
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index d3c46ea..df7caf2 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -2019,6 +2019,7 @@
 external/wpt/payment-request/change-shipping-option-select-last-manual.https.html [ WontFix ]
 external/wpt/payment-request/payment-request-abort-method-manual.https.html [ WontFix ]
 external/wpt/payment-request/payment-request-canmakepayment-method-manual.https.html [ WontFix ]
+external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html [ WontFix ]
 external/wpt/payment-request/payment-request-multiple-show-manual.https.html [ WontFix ]
 external/wpt/payment-request/payment-request-show-method-manual.https.html [ WontFix ]
 external/wpt/payment-request/payment-response/complete-method-manual.https.html [ WontFix ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 2fde11a..aacc204 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1784,6 +1784,7 @@
 crbug.com/875235 virtual/layout_ng_experimental/fast/forms/fieldset/legend-small-after-margin-before-border-horizontal-mode.html [ Failure ]
 
 ### virtual/bidi-caret-affinity/editing/selection/modify_move/
+crbug.com/923087 virtual/bidi-caret-affinity/editing/selection/modify_move/css-pseudo-element.html [ Failure ]
 crbug.com/894651 virtual/bidi-caret-affinity/editing/selection/modify_move/move-by-word-visually-crash-test-3.html [ Crash ]
 crbug.com/894651 virtual/bidi-caret-affinity/editing/selection/modify_move/move-by-word-visually-crash-test-5.html [ Pass Timeout Crash ]
 crbug.com/894651 virtual/bidi-caret-affinity/editing/selection/modify_move/move-by-word-visually-inline-block-positioned-element.html [ Crash Failure ]
@@ -3074,15 +3075,15 @@
 
 # ====== New tests from wpt-importer added here ======
 crbug.com/626703 external/wpt/webrtc/RTCIceConnectionState-candidate-pair.https.html [ Timeout ]
-crbug.com/626703 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout ]
+crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout Pass Failure ]
 crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-007v.html [ Failure ]
 crbug.com/626703 [ Mac10.11 ] external/wpt/mimesniff/mime-types/parsing.any.html [ Timeout ]
-crbug.com/626703 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Timeout ]
+crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Timeout Pass Failure ]
 crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/css-writing-modes/baseline-with-orthogonal-flow-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-007.html [ Failure ]
-crbug.com/626703 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Timeout ]
+crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Timeout Pass Failure ]
 crbug.com/626703 [ Win10 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout ]
 crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Timeout ]
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes-expected.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes-expected.html
deleted file mode 100644
index 0712e04..0000000
--- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes-expected.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<style>
-.box {
-  width: 100px;
-  height: 100px;
-  transform: translateX(100px);
-  background-color: #00ff00;
-  opacity: 0.8;
-  will-change: transform;
-}
-</style>
-
-<div class="box"></div>
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes.html
deleted file mode 100644
index b14abf6..0000000
--- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<style>
-#box {
-  width: 100px;
-  height: 100px;
-  background-color: #00ff00;
-}
-</style>
-
-<div id="box"></div>
-
-<script id="visual_update"  type="text/worklet">
-registerAnimator("test_animator", class {
-  animate(currentTime, effect) {
-    effect.localTime = 500;
-  }
-});
-</script>
-
-<script src="resources/animation-worklet-tests.js"></script>
-<script>
-if (window.testRunner) {
-  testRunner.waitUntilDone();
-}
-
-runInAnimationWorklet(
-  document.getElementById('visual_update').textContent
-).then(()=>{
-  const keyframes_before = [
-    { transform: 'translateY(0)' },
-    { transform: 'translateY(200px)' }
-  ];
-  const keyframes_after = [
-    { transform: 'translateX(0)' },
-    { transform: 'translateX(200px)' }
-  ];
-
-  const box = document.getElementById('box');
-  const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000});
-  const animation = new WorkletAnimation('test_animator', effect, document.timeline, {});
-  animation.play();
-
-  waitTwoAnimationFrames(_ => {
-    effect.setKeyframes(keyframes_after);
-    waitTwoAnimationFrames(_ => {
-      // TODO(crbug.com/829926): The same issue that is affecting
-      // worklet-animation-cancel test is at play here. Change opacity to force
-      // a new animation frame and commit to get updated result.
-      box.style.opacity = 0.8;
-      waitTwoAnimationFrames(_ => {
-        if (window.testRunner)
-          testRunner.notifyDone();
-       });
-     });
-  });
-});
-</script>
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing-expected.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing-expected.html
deleted file mode 100644
index 478d791..0000000
--- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing-expected.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<style>
-.box {
-  width: 100px;
-  height: 100px;
-  transform: translateX(50px);
-  opacity: 0.8;
-  background-color: #00ff00;
-  will-change: transform;
-}
-</style>
-
-<div class="box"></div>
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing.html
deleted file mode 100644
index 591fc272..0000000
--- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE html>
-<style>
-#box {
-  width: 100px;
-  height: 100px;
-  background-color: #00ff00;
-}
-</style>
-
-<div id="box"></div>
-
-<script id="visual_update"  type="text/worklet">
-registerAnimator("test_animator", class {
-  animate(currentTime, effect) {
-    effect.localTime = 500;
-  }
-});
-</script>
-
-<script src="resources/animation-worklet-tests.js"></script>
-<script>
-if (window.testRunner)
-  testRunner.waitUntilDone();
-
-runInAnimationWorklet(
-  document.getElementById('visual_update').textContent
-).then(()=>{
-  const keyframes = [
-    { transform: 'translateX(0)' },
-    { transform: 'translateX(200px)' }
-  ];
-
-  const options_before = {
-    duration: 1000
-  };
-
-  const options_after = {
-    duration: 2000
-  };
-
-  const box = document.getElementById('box');
-  const effect = new KeyframeEffect(box, keyframes, options_before);
-  const animation = new WorkletAnimation('test_animator', effect, document.timeline, {});
-  animation.play();
-
-  waitTwoAnimationFrames(_ => {
-    effect.updateTiming(options_after);
-    waitTwoAnimationFrames(_ => {
-      box.style.opacity = 0.8;
-      // TODO(crbug.com/829926): The same issue that is affecting
-      // worklet-animation-cancel is at play here. Change opacity to force a
-      // new animation frame and commit to get updated result.
-      waitTwoAnimationFrames(_ => {
-        if (window.testRunner)
-          testRunner.notifyDone();
-      });
-    });
-  });
-});
-</script>
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element-expected.txt b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/editing/selection/css-pseudo-element-expected.txt
rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-expected.txt
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element-hang-expected.txt b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/editing/selection/css-pseudo-element-hang-expected.txt
rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang-expected.txt
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element-hang.html b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang.html
similarity index 96%
rename from third_party/blink/web_tests/editing/selection/css-pseudo-element-hang.html
rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang.html
index 53446fe..8162f5b 100644
--- a/third_party/blink/web_tests/editing/selection/css-pseudo-element-hang.html
+++ b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang.html
@@ -9,7 +9,7 @@
 .bidi:before { content: "aפb"; }
 .bidi:after { content: "aפb"; }
 </style>
-<script src="../../resources/js-test.js"></script>
+<script src="../../../resources/js-test.js"></script>
 <title></title>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element.html b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element.html
similarity index 98%
rename from third_party/blink/web_tests/editing/selection/css-pseudo-element.html
rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element.html
index 828b072..6620d17 100644
--- a/third_party/blink/web_tests/editing/selection/css-pseudo-element.html
+++ b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element.html
@@ -9,7 +9,7 @@
  .bidi:before { content: "aפb"; }
  .bidi:after { content: "aפb"; }
 </style>
-<script src="../../resources/js-test.js"></script>
+<script src="../../../resources/js-test.js"></script>
 <title></title>
 </head>
 <body>
diff --git a/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html b/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html
index 17556164..6ce7473c 100644
--- a/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html
+++ b/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html
@@ -26,4 +26,29 @@
     selection => selection.modify('move', 'right', 'character'),
     '<div contenteditable>foo<span style="display:inline-block">bar</span>b|az</div>',
     'Move right out of inline block');
+
+selection_test(
+    '<div contenteditable>foo|<span style="display:inline-block;width:1em;height:1em;"></span>bar</div>',
+    selection => selection.modify('move', 'right', 'character'),
+    '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>',
+    'Move right into empty inline block');
+
+// TODO(xiaochengh): Note that the left and right movements are asymmetric, which might be a bug.
+selection_test(
+    '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>',
+    selection => selection.modify('move', 'left', 'character'),
+    '<div contenteditable>fo|o<span style="display:inline-block;width:1em;height:1em;"></span>bar</div>',
+    'Move left out of empty inline block');
+
+selection_test(
+    '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;"></span>|bar</div>',
+    selection => selection.modify('move', 'left', 'character'),
+    '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>',
+    'Move left into empty inline block');
+
+selection_test(
+    '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>',
+    selection => selection.modify('move', 'right', 'character'),
+    '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;"></span>|bar</div>',
+    'Move right out of empty inline block');
 </script>
diff --git a/third_party/blink/web_tests/editing/selection/modify_move/move_over_ignored_contents.html b/third_party/blink/web_tests/editing/selection/modify_move/move_over_ignored_contents.html
new file mode 100644
index 0000000..bcb8366d
--- /dev/null
+++ b/third_party/blink/web_tests/editing/selection/modify_move/move_over_ignored_contents.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../assert_selection.js"></script>
+<script>
+selection_test(
+    '<div contenteditable>foo|<div style="float:right">float</div>bar</div>',
+    selection => selection.modify('move', 'right', 'character'),
+    '<div contenteditable>foo<div style="float:right">float</div>b|ar</div>',
+    'Move right over float');
+
+selection_test(
+    '<div contenteditable>foo<div style="float:right">float</div>|bar</div>',
+    selection => selection.modify('move', 'left', 'character'),
+    '<div contenteditable>fo|o<div style="float:right">float</div>bar</div>',
+    'Move left over float');
+
+selection_test(
+    '<div contenteditable>foo|<div style="position:absolute">positioned</div>bar</div>',
+    selection => selection.modify('move', 'right', 'character'),
+    '<div contenteditable>foo<div style="position:absolute">positioned</div>b|ar</div>',
+    'Move right over out-of-flow positioned');
+
+selection_test(
+    '<div contenteditable>foo<div style="position:absolute">positioned</div>|bar</div>',
+    selection => selection.modify('move', 'left', 'character'),
+    '<div contenteditable>fo|o<div style="position:absolute">positioned</div>bar</div>',
+    'Move left over out-of-flow positioned');
+
+selection_test(
+    '<div contenteditable>foo|<wbr>bar</div>',
+    selection => selection.modify('move', 'right', 'character'),
+    '<div contenteditable>foo<wbr>b|ar</div>',
+    'Move right over wbr');
+
+selection_test(
+    '<div contenteditable>foo<wbr>|bar</div>',
+    selection => selection.modify('move', 'left', 'character'),
+    '<div contenteditable>fo|o<wbr>bar</div>',
+    'Move left over wbr');
+
+selection_test(
+    `<style>span::before{content:'xxx'}</style>
+    <div contenteditable>foo|<span>bar</span></div>`,
+    selection => selection.modify('move', 'right', 'character'),
+    `<style>span::before{content:'xxx'}</style>
+    <div contenteditable>foo<span>b|ar</span></div>`,
+    'Move right over generated content');
+
+selection_test(
+    `<style>span::before{content:'xxx'}</style>
+    <div contenteditable>foo<span>|bar</span></div>`,
+    selection => selection.modify('move', 'left', 'character'),
+    `<style>span::before{content:'xxx'}</style>
+    <div contenteditable>fo|o<span>bar</span></div>`,
+    'Move left over generated content');
+</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
index 9b37617..bdbcb31 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
@@ -5533,6 +5533,12 @@
      {}
     ]
    ],
+   "payment-request/payment-request-canmakepayment-method-manual.https.html": [
+    [
+     "/payment-request/payment-request-canmakepayment-method-manual.https.html",
+     {}
+    ]
+   ],
    "payment-request/payment-request-multiple-show-manual.https.html": [
     [
      "/payment-request/payment-request-multiple-show-manual.https.html",
@@ -307867,7 +307873,7 @@
    "testharness"
   ],
   "background-fetch/idlharness.https.any.js": [
-   "f2c8a56590aedc52051e7ad8f51b3725091821dc",
+   "f9744c8f944fcefe5a6a21e9a7644cf88644c173",
    "testharness"
   ],
   "background-fetch/idlharness.https.any.serviceworker-expected.txt": [
@@ -421791,47 +421797,47 @@
    "support"
   ],
   "mathml/presentation-markup/fractions/frac-1.html": [
-   "748fbdf1f40182ea6e785110ab05c32639218c6f",
+   "848eb5b144cef3740b794475f699229243c1287e",
    "testharness"
   ],
   "mathml/presentation-markup/fractions/frac-parameters-1.html": [
-   "1c20b9d75b3dd3c034e49af4e349c3c63fb54664",
+   "543017e19006377cac0c1a434bd43400467fac3b",
    "testharness"
   ],
   "mathml/presentation-markup/fractions/frac-parameters-2.html": [
-   "bc9fb36412fb6553a7f42969a4694d281ab30a82",
+   "75074875c9e6b1fa205fe76b85c4a0b36fadf274",
    "testharness"
   ],
   "mathml/presentation-markup/operators/mo-axis-height-1.html": [
-   "e409f982aeb3189e6da5c08d0f97a2fb688a3e68",
+   "7b0031ac1ed63219130b69113ebbfdc28eec10d6",
    "testharness"
   ],
   "mathml/presentation-markup/radicals/root-parameters-1.html": [
-   "4fc6e6f869ce20ae307ec11b5ddd7a07ccafe3b3",
+   "8ffcbe4a22d1225e4494d91437200ca8361a27bf",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-1.html": [
-   "026cfa35c54adb63cbb82f04a67ce0bdc4d4f2fd",
+   "39768315e72d13b5952e3bc743617a8d29b223ca",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-2.html": [
-   "8f62d9257cb9d8ab320c1b04720c056031e8af26",
+   "26fa5de780b086a777fb6494cfb6f163b7813e02",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-3.html": [
-   "18ede4004235ba56234570eee63336f5c21f52b0",
+   "231f65ab4f46bbe64a20a7db170ffb42deef460f",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-4.html": [
-   "44a2ff41fb1079ebb200c612dd23e39634079984",
+   "c4bf4382f8ed51849d396cd313ff851fe70248e4",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-5.html": [
-   "a1fd0c0fb2323eec5bf3c7feb48215e37728b7e7",
+   "005ceea4019918f47606e25a91654a841b1e437a",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-parameters-1.html": [
-   "23e65c12dce57ee5a5e62373cff5a3649dbaf7a3",
+   "b0ebaceb4355b4ddafff11febb41e36a5afe854c",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/subsup-parameters-2.html": [
@@ -421839,27 +421845,27 @@
    "testharness"
   ],
   "mathml/presentation-markup/scripts/underover-1.html": [
-   "d355f1186783500771cb993239f8401f79aea47b",
+   "6dcdbb7b388b6955e744f5d9eb9e1e27e9abef34",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/underover-parameters-1.html": [
-   "bd6c5f13c4211e5748ffd28517773de513f33bf9",
+   "802293829fd8de194ae6a12b0aea458689770ae1",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/underover-parameters-2.html": [
-   "73a7c5b236390132f36d84eca6ad7cd18b73541d",
+   "e9d6af4901e16602dd7a54a7c74f3594e26402c9",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/underover-parameters-3.html": [
-   "3fb57c01dde3c5dea258678f5607385a8b892471",
+   "373d6d4d06ecc0593dfda27164fe26a4d55dc1d1",
    "testharness"
   ],
   "mathml/presentation-markup/scripts/underover-parameters-4.html": [
-   "6dee35ca6f0b6f8c2c23abb65c3c52e69686b707",
+   "3b1fa575f72473443271ebbd193bfc7b866dfc1a",
    "testharness"
   ],
   "mathml/presentation-markup/spaces/space-1.html": [
-   "dc2622db9a309091ac225f8e8151f6921fe6721f",
+   "cb9dd9e9acbddd54c3729962f4efa4eeb56d8452",
    "testharness"
   ],
   "mathml/presentation-markup/spaces/space-2-ref.html": [
@@ -421871,7 +421877,7 @@
    "reftest"
   ],
   "mathml/presentation-markup/tables/table-axis-height.html": [
-   "4d2b4462dba6f428ad72eb8f741dd28607452151",
+   "024bdd29b116de1c3112e9482a2f4ce286126a91",
    "testharness"
   ],
   "mathml/relations/css-styling/color-1-ref.html": [
@@ -421891,7 +421897,7 @@
    "reftest"
   ],
   "mathml/relations/css-styling/displaystyle-1.html": [
-   "2749e09c48a759c02f1f2148387c8586c207b9e5",
+   "3143343da7e39ff931f552af942e62882062bc77",
    "testharness"
   ],
   "mathml/relations/css-styling/lengths-1-ref.html": [
@@ -421911,7 +421917,7 @@
    "reftest"
   ],
   "mathml/relations/css-styling/lengths-3.html": [
-   "a7133f89ecf4eed567c2d44bbb8d585be474c17d",
+   "68a144aca69c4fac862073029d8479369773e25a",
    "testharness"
   ],
   "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [
@@ -422067,7 +422073,7 @@
    "reftest"
   ],
   "mathml/relations/html5-tree/class-2.html": [
-   "9dbede840199c32fe89eb7800abd08bf811ecdf1",
+   "707500de37fc117bf6174bd9aa7aaba298a705da",
    "testharness"
   ],
   "mathml/relations/html5-tree/color-attributes-1-ref.html": [
@@ -422079,7 +422085,7 @@
    "reftest"
   ],
   "mathml/relations/html5-tree/display-1.html": [
-   "4eb302c3ee821a015e76c561b46eb528ce78a93d",
+   "64d862cf7614f29435a08a6ac66d45f84575a053",
    "testharness"
   ],
   "mathml/relations/html5-tree/dynamic-1-ref.html": [
@@ -422163,7 +422169,7 @@
    "reftest"
   ],
   "mathml/relations/html5-tree/unique-identifier-2.html": [
-   "b3226c293b5f1394f5245644d1630bfef4f86b36",
+   "97e04a91ef13e650757fc2fe01ef068932e31b16",
    "testharness"
   ],
   "mathml/relations/html5-tree/unique-identifier-3-ref.html": [
@@ -433455,7 +433461,7 @@
    "testharness"
   ],
   "payment-handler/idlharness.https.any.js": [
-   "6fbba53515eba4db995624cecaff1512fbace056",
+   "878114ec7ed878d3e754341cbffa138092fee129",
    "testharness"
   ],
   "payment-handler/idlharness.https.any.serviceworker-expected.txt": [
@@ -433802,6 +433808,10 @@
    "cf16401d0b0d3e97f3ab14c337880a4ec0d9ea7f",
    "testharness"
   ],
+  "payment-request/payment-request-canmakepayment-method-manual.https.html": [
+   "fea45500b18b35eadf144389e86d444d53366fce",
+   "manual"
+  ],
   "payment-request/payment-request-canmakepayment-method-protection.https-expected.txt": [
    "0f09114186bb4b3c975473f189a79237b7901944",
    "support"
@@ -433811,11 +433821,11 @@
    "testharness"
   ],
   "payment-request/payment-request-canmakepayment-method.https-expected.txt": [
-   "0f09114186bb4b3c975473f189a79237b7901944",
+   "29f5282d7826bc82c3914bff51a8db23daf7c77f",
    "support"
   ],
   "payment-request/payment-request-canmakepayment-method.https.html": [
-   "672e5ce1571435e9f16b8010456e859f12d2c9c4",
+   "cc8349a42239ca1a459d59f016611f6e564f4690",
    "testharness"
   ],
   "payment-request/payment-request-constructor-crash.https.html": [
@@ -455423,7 +455433,7 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html": [
-   "386614ff2e20e7abd4e511bf5e9d7d492cddfeb3",
+   "0b09edd4a7007e54721c4e1d8fb1112e71e5cb1a",
    "testharness"
   ],
   "webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html": [
@@ -455739,7 +455749,7 @@
    "testharness"
   ],
   "webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html": [
-   "5fb18c8aee41034f75e36959040e2d23e840ddca",
+   "ad74d5e00457e6ccd1b165940ecad140a423d247",
    "testharness"
   ],
   "webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-input-non-default.html": [
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/common.js b/third_party/blink/web_tests/external/wpt/animation-worklet/common.js
index eb114f2..983c224 100644
--- a/third_party/blink/web_tests/external/wpt/animation-worklet/common.js
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/common.js
@@ -30,3 +30,16 @@
   // AnimationWorklet.
   return waitForAnimationFrames(count + 1);
 }
+
+async function waitForAnimationFrameWithCondition(condition) {
+  do {
+    await new Promise(window.requestAnimationFrame);
+  } while (!condition())
+};
+
+async function waitForDocumentTimelineAdvance() {
+  const timeAtStart = document.timeline.currentTime;
+  do {
+    await new Promise(window.requestAnimationFrame);
+  } while (timeAtStart === document.timeline.currentTime)
+}
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/references/translated-box-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/references/translated-box-ref.html
new file mode 100644
index 0000000..c73f5a1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/references/translated-box-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  transform: translateY(100px);
+  background-color: green;
+}
+</style>
+
+<div id="box"></div>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-immediately.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-immediately.https.html
new file mode 100644
index 0000000..f9dcf30
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-immediately.https.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Verify that calling pause immediately after playing works as expected</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
+<link rel="match" href="references/translated-box-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<script src="/web-animations/testcommon.js"></script>
+<script src="common.js"></script>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  background-color: green;
+}
+</style>
+
+<div id="box"></div>
+
+<script>
+registerPassthroughAnimator().then(async _ => {
+  const box = document.getElementById('box');
+  const effect = new KeyframeEffect(box,
+    { transform: ['translateY(100px)', 'translateY(200px)'] },
+    { duration: 100, iterations: 1 }
+  );
+
+  const animation = new WorkletAnimation('passthrough', effect);
+  animation.play();
+  // Immediately pausing animation should freeze the current time at 0.
+  animation.pause();
+  // Wait at least one frame to ensure a paused animation actually freezes.
+  await waitForAsyncAnimationFrames(1);
+  takeScreenshot();
+});
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-resume.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-resume.https.html
new file mode 100644
index 0000000..f26a934
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-resume.https.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Verify that calling pause immediately after playing works as expected</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
+<link rel="match" href="references/translated-box-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<script src="common.js"></script>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  background-color: green;
+}
+</style>
+
+<div id="box"></div>
+
+<script>
+registerPassthroughAnimator().then(async _  => {
+  const duration = 18; // a bit longer than a frame
+  const box = document.getElementById('box');
+  const effect = new KeyframeEffect(box,
+    { transform: ['translateY(0px)', 'translateY(100px)'] },
+    { duration: duration, iterations: 1, fill: 'forwards'}
+  );
+
+  const animation = new WorkletAnimation('passthrough', effect);
+  // Immediately pausing animation should freeze the current time at 0.
+  animation.pause();
+  // Playing should cause animation to resume.
+  animation.play();
+  // Wait until we ensure animation has reached completion.
+  await waitForAnimationFrameWithCondition( _ => {
+    return animation.currentTime >= duration;
+  });
+  takeScreenshot();
+});
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause.https.html
new file mode 100644
index 0000000..417db9e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause.https.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<title>Verify that currentTime and playState are correct when animation is paused</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
+<script src="common.js"></script>
+
+<div id="box"></div>
+
+<script>
+
+setup(setupAndRegisterTests, {explicit_done: true});
+
+function createAnimation() {
+  const box = document.getElementById('box');
+  const effect = new KeyframeEffect(box,
+    { transform: ['translateY(100px)', 'translateY(200px)'] },
+    { duration: 100, iterations: 1 }
+  );
+
+  return new WorkletAnimation('passthrough', effect);
+}
+
+async function setupAndRegisterTests() {
+  await registerPassthroughAnimator();
+
+  promise_test(async t => {
+    const animation = createAnimation();
+    animation.play();
+    // Immediately pausing animation should freeze the current time at 0.
+    animation.pause();
+    assert_equals(animation.currentTime, 0);
+    assert_equals(animation.playState, "paused");
+    // Wait some time to ensure a paused animation actually freezes.
+   await waitForNextFrame();
+    assert_equals(animation.currentTime, 0);
+    assert_equals(animation.playState, "paused");
+  }, 'pausing an animation freezes its current time');
+
+  promise_test(async t => {
+    const animation = createAnimation();
+    animation.pause();
+    animation.play();
+    // Allow one async animation frame to pass so that animation is running.
+    await waitForAsyncAnimationFrames(1);
+    assert_equals(animation.playState, "running");
+    // Allow time to advance so that we have a non-zero current time.
+    await waitForDocumentTimelineAdvance();
+    const timelineTime = document.timeline.currentTime;
+    assert_greater_than(animation.currentTime, 0);
+    assert_times_equal(animation.currentTime, (timelineTime - animation.startTime));
+  }, 'playing a paused animation should resume it');
+
+  done();
+}
+
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes-ref.html
new file mode 100644
index 0000000..26bf33f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>Reference for Worklet Animation sets keyframes</title>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  transform: translateX(100px);
+  background-color: green;
+}
+</style>
+
+<div id="box"></div>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes.https.html
new file mode 100644
index 0000000..01740849
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes.https.html
@@ -0,0 +1,44 @@
+<html class="reftest-wait">
+<title>Worklet Animation sets keyframes</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
+<meta name="assert" content="Can update the keyframes for an effect while the animation is running">
+<link rel="match" href="worklet-animation-set-keyframes-ref.html">
+
+<script src="/web-animations/testcommon.js"></script>
+<script src="/common/reftest-wait.js"></script>
+<script src="common.js"></script>
+
+<style>
+  #box {
+    width: 100px;
+    height: 100px;
+    background-color: green;
+  }
+</style>
+
+<div id="box"></div>
+
+<script>
+  registerConstantLocalTimeAnimator(500).then(()=>{
+    const keyframes_before = [
+      { transform: 'translateY(0)' },
+      { transform: 'translateY(200px)' }
+    ];
+    const keyframes_after = [
+      { transform: 'translateX(0)' },
+      { transform: 'translateX(200px)' }
+    ];
+
+    const box = document.getElementById('box');
+    const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000});
+    const animation = new WorkletAnimation('constant_time', effect);
+    animation.play();
+
+    waitForAsyncAnimationFrames(1).then(_ => {
+      effect.setKeyframes(keyframes_after);
+      waitForAsyncAnimationFrames(1).then(_ => {
+        takeScreenshot();
+      });
+    });
+  });
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing-ref.html
new file mode 100644
index 0000000..8c354a8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>Reference for Worklet Animation sets timing</title>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  transform: translateX(50px);
+  background-color: green;
+}
+</style>
+
+<div id="box"></div>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing.https.html
new file mode 100644
index 0000000..ac3f05f4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing.https.html
@@ -0,0 +1,46 @@
+<html class="reftest-wait">
+<title>Worklet Animation sets timing</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
+<meta name="assert" content="Can update the timing for an effect while the animation is running">
+<link rel="match" href="worklet-animation-set-timing-ref.html">
+
+<script src="/web-animations/testcommon.js"></script>
+<script src="/common/reftest-wait.js"></script>
+<script src="common.js"></script>
+
+<style>
+  #box {
+    width: 100px;
+    height: 100px;
+    background-color: green;
+  }
+</style>
+
+<div id="box"></div>
+
+<script>
+  registerConstantLocalTimeAnimator(500).then(()=>{
+    const keyframes = [
+      { transform: 'translateX(0)' },
+      { transform: 'translateX(200px)' }
+    ];
+    const options_before = {
+      duration: 1000
+    };
+    const options_after = {
+      duration: 2000
+    };
+
+    const box = document.getElementById('box');
+    const effect = new KeyframeEffect(box, keyframes, options_before);
+    const animation = new WorkletAnimation('constant_time', effect);
+    animation.play();
+
+    waitForAsyncAnimationFrames(1).then(_ => {
+      effect.updateTiming(options_after);
+      waitForAsyncAnimationFrames(1).then(_ => {
+        takeScreenshot();
+      });
+    });
+  });
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js b/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js
index f2c8a565..f9744c8f 100644
--- a/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js
+++ b/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js
@@ -8,7 +8,7 @@
 
 idl_test(
   ['background-fetch'],
-  ['service-workers', 'dedicated-workers', 'dom'],
+  ['service-workers', 'html', 'dom'],
   idl_array => {
     const isServiceWorker = location.pathname.includes('.serviceworker.');
     if (isServiceWorker) {
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html
index 748fbdf..848eb5b 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html
@@ -79,6 +79,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mo id="axis">−</mo>
@@ -124,6 +125,5 @@
       </mfrac>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
index 1c20b9d..543017e 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
@@ -133,6 +133,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math style="font-family: axisheight7000-rulethickness1000;">
       <mspace id="ref0001" depth="1em" width="3em" style="background: green"/>
@@ -237,6 +238,5 @@
       </mfrac>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
index bc9fb364..75074875 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
@@ -102,6 +102,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math style="font-family: axisheight7000;">
       <mspace id="ref0001" depth="1em" width="3em" style="background: green"/>
@@ -169,6 +170,5 @@
       </mfrac>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html
index e409f98..7b0031a 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html
@@ -55,6 +55,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math style="font-family: axisheight5000-verticalarrow14000;">
       <mrow>
@@ -72,6 +73,5 @@
         <mspace id="target2" style="background: gray" width="10px" height="200px"/>
       </mrow>
     </math>
-  </p>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html
index 4fc6e6f..8ffcbe4 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html
@@ -129,6 +129,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math style="font-family: degreebottomraisepercent25-rulethickness1000;">
       <mspace id="ref001" width="3em" depth="1em" style="background: green"/>
@@ -204,6 +205,5 @@
       </mroot>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html
index 026cfa3..3976831 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html
@@ -81,6 +81,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/>
@@ -99,6 +100,5 @@
       </msubsup>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html
index 8f62d92..26fa5de78 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html
@@ -120,6 +120,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/>
@@ -158,6 +159,5 @@
       </mmultiscripts>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html
index 18ede400..231f65a 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html
@@ -107,6 +107,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/>
@@ -175,6 +176,5 @@
       </mmultiscripts>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html
index 44a2ff4..c4bf438 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html
@@ -51,6 +51,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/>
@@ -119,6 +120,5 @@
       </mmultiscripts>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html
index a1fd0c0..005ceea 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html
@@ -59,6 +59,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/>
@@ -85,6 +86,5 @@
       </mmultiscripts>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html
index 23e65c1..b0ebaceb 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html
@@ -143,6 +143,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
     <p>
       <math style="font-family: spaceafterscript3000;">
         <msub>
@@ -330,6 +331,5 @@
         </msup>
       </math>
     </p>
-    <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html
index d355f11..6dcdbb7 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html
@@ -89,6 +89,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/>
@@ -156,6 +157,5 @@
       </munderover>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html
index bd6c5f1..8022938 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html
@@ -80,6 +80,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
     <p>
       <math style="font-family: lowerlimitbaselinedropmin3000;">
         <mspace id="ref0001" height="1em" width="3em" style="background: green"/>
@@ -139,6 +140,5 @@
         </munderover>
       </math>
     </p>
-    <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html
index 73a7c5b..e9d6af49 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html
@@ -80,6 +80,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
     <p>
       <math style="font-family: bottomshiftdown3000;">
         <mspace id="ref0001" height="1em" width="3em" style="background: green"/>
@@ -139,6 +140,5 @@
         </munderover>
       </math>
     </p>
-    <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html
index 3fb57c0..373d6d4 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html
@@ -187,6 +187,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
     <p>
       <math style="font-family: accentbaseheight4000underbarextradescender5000;">
         <mspace id="ref001" height="1em" width="3em" style="background: green"/>
@@ -318,6 +319,5 @@
         </munderover>
       </math>
     </p>
-    <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html
index 6dee35ca..3b1fa575 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html
@@ -187,6 +187,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
     <p>
       <math style="font-family: accentbaseheight4000underbarextradescender5000;">
         <mspace id="ref001" height="1em" width="3em" style="background: green"/>
@@ -318,6 +319,5 @@
         </munderover>
       </math>
     </p>
-    <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html
index dc2622d..cb9dd9e 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html
@@ -68,6 +68,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <span id="baseline" style="display: inline-block; width: 30px; height: 5px; background: blue"></span>
     <math>
@@ -86,6 +87,5 @@
       <mspace id="mspace2" width="75px" height="25px" depth="50px" style="background: green"/>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html
index 4d2b446..024bdd2 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html
@@ -43,6 +43,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math style="font-family: axisheight5000-verticalarrow14000">
       <mspace id="baseline" style="background: green" width="50px" height="1px"/>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html
index 2749e09c..3143343 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html
@@ -92,6 +92,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <math><mo id="math_default">&#x2AFF;</mo></math>
   <math display="inline"><mo id="math_inline">&#x2AFF;</mo></math>
   <math display="block"><mo id="math_block">&#x2AFF;</mo></math>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html
index a7133f8..68a144a 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html
@@ -93,6 +93,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <p>
     <math>
       <mspace id="unitCm" width="2.54cm"/>
@@ -154,6 +155,5 @@
       <mpadded voffset="-012.345em"><mspace id="N10"/></mpadded>
     </math>
   </p>
-  <hr/>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html
index 9dbede8..707500d 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html
@@ -13,7 +13,7 @@
     var mtext = document.getElementsByClassName("cl");
     test(function() {
       assert_equals(mtext.length, 3);
-      var mtext_ref = document.body.firstElementChild.firstElementChild;
+      var mtext_ref = document.body.lastElementChild.firstElementChild;
       mtext_ref = mtext_ref.nextElementSibling.nextElementSibling
       assert_equals(mtext[0], mtext_ref);
       mtext_ref = mtext_ref.nextElementSibling.nextElementSibling;
@@ -26,6 +26,7 @@
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <math>
     <mtext class="cl_"></mtext>
     <mtext class="c"></mtext>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html
index 4eb302c..64d862cf 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html
@@ -70,6 +70,7 @@
 </style>
 </head>
 <body>
+  <div id="log"></div>
   <div id="content">
     <span id="before_block" class="square"></span>
     <math display="block"><mspace id="mspace_block" width="50px" height="50px"/></math>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html
index b3226c29..97e04a9 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html
+++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html
@@ -12,13 +12,14 @@
   window.addEventListener("DOMContentLoaded", function() {
     var mtext = document.getElementById("MTEXT");
     test(function() {
-      assert_equals(mtext, document.body.firstElementChild.lastElementChild);
+      assert_equals(mtext, document.body.lastElementChild.lastElementChild);
     }, "getElementById()");
     done();
   });
 </script>
 </head>
 <body>
+  <div id="log"></div>
   <math>
     <mtext id="MTEXT_"></mtext>
     <mtext id="MTEX"></mtext>
diff --git a/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js b/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js
index 6fbba53..878114ec 100644
--- a/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js
+++ b/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js
@@ -9,7 +9,7 @@
 
 idl_test(
   ['payment-handler'],
-  ['service-workers', 'dedicated-workers', 'dom'],
+  ['service-workers', 'html', 'dom'],
   async (idl_array, t) => {
     const isWindow = self.GLOBAL.isWindow();
     const isServiceWorker = 'ServiceWorkerGlobalScope' in self;
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html
new file mode 100644
index 0000000..a4e8028
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Manual tests for PaymentRequest.hasEnrolledInstrument() method</title>
+<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+setup({
+  explicit_done: true,
+  explicit_timeout: true,
+});
+
+const defaultMethods = Object.freeze([
+  {
+    supportedMethods: "basic-card",
+    data: {
+      supportedNetworks: [ 'visa' ],
+    },
+  }
+]);
+const defaultDetails = Object.freeze({
+  total: {
+    label: "Total",
+    amount: {
+      currency: "USD",
+      value: "1.00",
+    },
+  },
+});
+
+function testHasNoEnrolledInstrument() {
+  promise_test(async t => {
+    const request = new PaymentRequest(defaultMethods, defaultDetails);
+    assert_false(
+      await request.hasEnrolledInstrument(),
+      "No test enrolled in the test profile."
+    );
+  }, `hasEnrolledInstrument() resolves to false when user has no enrolled instrument.`);
+}
+
+function testHasEnrolledInstrument() {
+  promise_test(async t => {
+    const request = new PaymentRequest(defaultMethods, defaultDetails);
+    assert_true(
+      await request.hasEnrolledInstrument(),
+      "A card is enrolled in the test profile."
+    );
+  }, `hasEnrolledInstrument() resolves to true when user has an enrolled instrument.`);
+}
+
+function testHasEnrolledInstrumentAgain() {
+  promise_test(async t => {
+    const request = new PaymentRequest(defaultMethods, defaultDetails);
+    assert_true(
+      await request.hasEnrolledInstrument(),
+      "A card is enrolled in the test profile."
+    );
+  }, `hasEnrolledInstrument() can be called multiple times if the payment method details are identical.`);
+}
+
+function testInteractiveState() {
+  promise_test(async t => {
+    const request = new PaymentRequest(defaultMethods, defaultDetails);
+    const acceptPromise = request.show();  // Sets state to "interactive"
+    const hasEnrolledInstrumentPromise = request.hasEnrolledInstrument();
+    try {
+      const result = await hasEnrolledInstrumentPromise;
+      assert_true(
+        false,
+        "hasEnrolledInstrument() should have thrown InvalidStateError"
+      );
+    } catch(err) {
+      await promise_rejects(t, "InvalidStateError", hasEnrolledInstrumentPromise);
+    } finally {
+      request.abort();
+      await promise_rejects(t, "AbortError", acceptPromise);
+    }
+  }, `If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.`);
+}
+
+function testClosedState() {
+  promise_test(async t => {
+    const request = new PaymentRequest(defaultMethods, defaultDetails);
+    const acceptPromise = request.show();  // Sets state to "interactive"
+    acceptPromise.catch(() => {});  // no-op, just to handle unhandled rejection in devtools.
+    await request.abort();  // Sets state to "closed"
+    const hasEnrolledInstrumentPromise = request.hasEnrolledInstrument();
+    try {
+      const result = await hasEnrolledInstrumentPromise;
+      assert_true(
+        false,
+        "hasEnrolledInstrument() should have thrown InvalidStateError"
+      );
+    } catch(err) {
+      await promise_rejects(t, "InvalidStateError", hasEnrolledInstrumentPromise);
+    }
+  }, `If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.`);
+}
+</script>
+
+<h2>Manual tests for hasEnrolledInstrument() method</h2>
+<p>
+  Follow the instructions from top to bottom. Click on each button in sequence
+  without refreshing the page. Some of the tests will bring up the Payment
+  Request UI and close them automatically. If a payment sheet stays open, the
+  test has failed.
+</p>
+<ol>
+  <li>Follow browser-specific instructions to remove all cards from the test profile.</li>
+  <li>
+    <button onclick="testHasNoEnrolledInstrument()">
+      hasEnrolledInstrument() resolves to false when user has no enrolled instrument.
+    </button>
+  </li>
+  <li>Add a test Visa card to your test profile, e.g. 4012888888881881.</li>
+  <li>
+    <button onclick="testHasEnrolledInstrument()">
+      hasEnrolledInstrument() resolves to true when user has an enrolled instrument.
+    </button>
+  </li>
+  <li>
+    <button onclick="testHasEnrolledInstrumentAgain()">
+      hasEnrolledInstrument() can be called multiple times if the payment method
+      details are identical.
+    </button>
+  </li>
+  <li>
+    <button onclick="testInteractiveState()">
+      If request.[[state]] is "interactive", then return a promise rejected with
+      an "InvalidStateError" DOMException.
+    </button>
+  </li>
+  <li>
+    <button onclick="testClosedState()">
+      If request.[[state]] is "closed", then return a promise rejected with an
+      "InvalidStateError" DOMException.
+    </button>
+  </li>
+  <li>
+    <button onclick="done()">Done!</button>
+  </li>
+</ol>
+<small>
+  If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a>
+  and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>.
+</small>
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https-expected.txt b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https-expected.txt
new file mode 100644
index 0000000..6718c1b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException. assert_equals: If it throws, then it must be a NotAllowedError. expected "NotAllowedError" but got "TypeError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https.html b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https.html
new file mode 100644
index 0000000..4da1130
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests for PaymentRequest.hasEnrolledInstrument() method</title>
+<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src='/resources/testdriver-vendor.js'></script>
+<script>
+const visaMethod = Object.freeze({
+    supportedMethods: "basic-card",
+    data: {
+      supportedNetworks: ['visa']
+    }
+});
+const mastercardMethod = Object.freeze({
+    supportedMethods: "basic-card",
+    data: {
+      supportedNetworks: ['mastercard']
+    }
+});
+const defaultDetails = Object.freeze({
+  total: {
+    label: "Total",
+    amount: {
+      currency: "USD",
+      value: "1.00",
+    },
+  },
+});
+
+promise_test(async t => {
+  // This test may never actually hit its assertion, but that's allowed.
+  const request = new PaymentRequest([visaMethod], defaultDetails);
+  for (let i = 0; i < 1000; i++) {
+    try {
+      await request.hasEnrolledInstrument();
+    } catch (err) {
+      assert_equals(
+        err.name,
+        "NotAllowedError",
+        "If it throws, then it must be a NotAllowedError."
+      );
+      break;
+    }
+  }
+
+  for (let i = 0; i < 1000; i++) {
+    try {
+      const request2 = new PaymentRequest([mastercardMethod], defaultDetails);
+      await request2.hasEnrolledInstrument();
+    } catch (err) {
+      assert_equals(
+        err.name,
+        "NotAllowedError",
+        "If it throws, then it must be a NotAllowedError."
+      );
+      break;
+    }
+  }
+}, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`);
+
+</script>
+
+<small>
+  If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a>
+  and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>.
+</small>
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https-expected.txt b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https-expected.txt
new file mode 100644
index 0000000..6ce53be
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL hasEnrolledInstrument() resolves to false for unsupported payment methods. promise_test: Unhandled rejection with value: object "TypeError: request.hasEnrolledInstrument is not a function"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https.html b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https.html
new file mode 100644
index 0000000..c513995
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests for PaymentRequest.hasEnrolledInstrument() method</title>
+<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src='/resources/testdriver-vendor.js'></script>
+<script>
+const unsupportedMethods = [
+  { supportedMethods: "this-is-not-supported" },
+  { supportedMethods: "https://not.supported" },
+];
+const defaultDetails = Object.freeze({
+  total: {
+    label: "Total",
+    amount: {
+      currency: "USD",
+      value: "1.00",
+    },
+  },
+});
+
+promise_test(async t => {
+  const request = new PaymentRequest(unsupportedMethods, defaultDetails);
+  assert_false(
+    await request.hasEnrolledInstrument(),
+    "Payment method is supported."
+  );
+}, `hasEnrolledInstrument() resolves to false for unsupported payment methods.`);
+</script>
+
+<small>
+  If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a>
+  and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>.
+</small>
diff --git a/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html b/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html
index 3112599..29611aeb 100644
--- a/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html
+++ b/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html
@@ -17,7 +17,7 @@
 </div>
 
 <script>
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
   async function runTest() {
     promise_test( async () => {
       assert_true(typeof(window.internals) !== "undefined",
diff --git a/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html b/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html
index 27777b8..64b8380 100644
--- a/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html
+++ b/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html
@@ -13,7 +13,7 @@
 <select multiple id='sel'></select>
 
 <script>
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
   internals.settings.setScrollAnimatorEnabled(false);
   let sel = document.getElementById('sel');
diff --git a/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt
index e901c0b..4a5bf0fc 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt
@@ -3,7 +3,6 @@
 Completions for objectC.:
 {
     priority : 2
-    subtitle : "C"
     text : "instanceMember"
 }
 {
@@ -12,6 +11,7 @@
 }
 {
     priority : 3
+    subtitle : "C"
     text : "EPriorityMember"
 }
 {
@@ -39,7 +39,6 @@
 Completions for prefix:
 {
     priority : 4
-    subtitle : "Window"
     text : "prefixA"
 }
 {
diff --git a/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint-expected.txt b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint-expected.txt
new file mode 100644
index 0000000..83d8ad5
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint-expected.txt
@@ -0,0 +1,32 @@
+Tests the DOMDebugger.setInstrumentationBreakpoint API.
+
+Running test: testScriptFirstStatement
+{
+    eventName : instrumentation:scriptFirstStatement
+}
+
+Running test: testRemoveScriptFirstStatement
+
+Running test: testInvalidEventName
+{
+    id : <number>
+    result : {
+    }
+    sessionId : <string>
+}
+
+Running test: testScriptFirstStatementAndPause
+{
+    reasons : [
+        [0] : {
+            reason : other
+        }
+        [1] : {
+            auxData : {
+                eventName : instrumentation:scriptFirstStatement
+            }
+            reason : EventListener
+        }
+    ]
+}
+
diff --git a/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint.js b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint.js
new file mode 100644
index 0000000..5d9d7ae
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint.js
@@ -0,0 +1,36 @@
+(async function testDomDebuggerInstrumentationBreakpoint(testRunner) {
+  const targetPage = 'resources/debugger-basic-page.html';
+  const { dp } = await testRunner.startBlank('Tests the DOMDebugger.setInstrumentationBreakpoint API.');
+
+  await dp.Page.enable();
+  await dp.Runtime.enable();
+  await dp.Debugger.enable();
+  const targetPageUrl = testRunner.url(targetPage);
+
+  testRunner.runTestSuite([
+    async function testScriptFirstStatement() {
+      await dp.DOMDebugger.setInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' });
+      dp.Page.navigate({ url: targetPageUrl });
+      const pauseMessage = await dp.Debugger.oncePaused();
+      testRunner.log(pauseMessage.params.data);
+    },
+    async function testRemoveScriptFirstStatement() {
+      await dp.DOMDebugger.removeInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' });
+      dp.Page.navigate({ url: targetPageUrl });
+      await dp.Runtime.evaluate({ expression: 'test();' }); // Will stall if bp still active
+    },
+    async function testInvalidEventName() {
+      const setResponse = await dp.DOMDebugger.setInstrumentationBreakpoint({ eventName: 'badEventName' });
+      testRunner.log(setResponse);
+    },
+    async function testScriptFirstStatementAndPause() {
+      await dp.DOMDebugger.setInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' });
+      await dp.Debugger.pause();
+      dp.Page.navigate({ url: targetPageUrl });
+      const pauseMessage = await dp.Debugger.oncePaused();
+      testRunner.log(pauseMessage.params.data);
+      await dp.DOMDebugger.removeInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' });
+      await dp.Debugger.resume();
+    }
+  ]);
+})
\ No newline at end of file
diff --git a/third_party/blink/web_tests/inspector-protocol/debugger/resources/debugger-basic-page.html b/third_party/blink/web_tests/inspector-protocol/debugger/resources/debugger-basic-page.html
new file mode 100644
index 0000000..3f22099d
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/debugger/resources/debugger-basic-page.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script>
+        function test() {
+            return null;
+        }
+        var num = 5;
+        var obj = {a: 3};
+        var bool = true;
+    </script>
+</head>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/resources/gesture-util.js b/third_party/blink/web_tests/resources/gesture-util.js
index de1c310..e4399c7 100644
--- a/third_party/blink/web_tests/resources/gesture-util.js
+++ b/third_party/blink/web_tests/resources/gesture-util.js
@@ -76,22 +76,32 @@
 
 // Enums for gesture_source_type parameters in gpuBenchmarking synthetic
 // gesture methods. Must match C++ side enums in synthetic_gesture_params.h
-const GestureSourceType = {
-  DEFAULT_INPUT: 0,
-  TOUCH_INPUT: 1,
-  MOUSE_INPUT: 2,
-  TOUCHPAD_INPUT:2,
-  PEN_INPUT: 3,
-  ToString: function(value) {
-    switch(value) {
-      case 0: return "DefaultInput";
-      case 1: return "Touchscreen";
-      case 2: return "MouseWheel/Touchpad";
-      case 3: return "Pen";
-      default: return "Invalid";
+const GestureSourceType = (function() {
+  var isDefined = (window.chrome && chrome.gpuBenchmarking);
+  return {
+    DEFAULT_INPUT: isDefined && chrome.gpuBenchmarking.DEFAULT_INPUT,
+    TOUCH_INPUT: isDefined && chrome.gpuBenchmarking.TOUCH_INPUT,
+    MOUSE_INPUT: isDefined && chrome.gpuBenchmarking.MOUSE_INPUT,
+    TOUCHPAD_INPUT: isDefined && chrome.gpuBenchmarking.TOUCHPAD_INPUT,
+    PEN_INPUT: isDefined && chrome.gpuBenchmarking.PEN_INPUT,
+    ToString: function(value) {
+      if (!isDefined)
+        return 'Synthetic gestures unavailable';
+      switch (value) {
+        case chrome.gpuBenchmarking.DEFAULT_INPUT:
+          return 'DefaultInput';
+        case chrome.gpuBenchmarking.TOUCH_INPUT:
+          return 'Touchscreen';
+        case chrome.gpuBenchmarking.MOUSE_INPUT:
+          return 'MouseWheel/Touchpad';
+        case chrome.gpuBenchmarking.PEN_INPUT:
+          return 'Pen';
+        default:
+          return 'Invalid';
+      }
     }
   }
-};
+})();
 
 // Use this for speed to make gestures (effectively) instant. That is, finish
 // entirely within one Begin|Update|End triplet. This is in physical
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index 827521e..44b5356 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -4536,13 +4536,6 @@
     getter startTime
     method constructor
     method toJSON
-interface PerformanceEventTiming : PerformanceEntry
-    attribute @@toStringTag
-    getter cancelable
-    getter processingEnd
-    getter processingStart
-    method constructor
-    method toJSON
 interface PerformanceLongTaskTiming : PerformanceEntry
     attribute @@toStringTag
     getter attribution
diff --git a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html
index aee6054..192bdbc 100644
--- a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html
+++ b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html
@@ -9,7 +9,7 @@
 var TEST_Y = 70;
 var TEST_SCALE = 0.5;
 var TOLERANCE = 0.001;
-var MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+var MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
 var t = async_test("Touchpad pinch offers synthetic wheel events");
 
diff --git a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html
index 97d5cb9..9f57bd4 100644
--- a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html
+++ b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html
@@ -15,7 +15,7 @@
 var SCALE_OUTSIDE = 2.0;
 
 var TOLERANCE = 0.001;
-var MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+var MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
 var t = async_test("Touchpad pinch can be prevented by wheel handlers");
 
diff --git a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html
index 57e73403..fee2650b 100644
--- a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html
+++ b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html
@@ -22,7 +22,7 @@
 const TEST_SCALE = 2;
 const EPSILON = 0.001;
 const SCROLL_TOLERANCE = 10;
-const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
 function waitForVisualViewportOffset(x, y) {
   return new Promise(function(resolve, reject) {
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html
index c63f1f71..07493bd 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html
@@ -9,7 +9,7 @@
   // This is a less strict version of synthetic-pinch-zoom-gesture-touchpad.html
   // See synthetic-pinch-zoom-gesture.js.
 
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchpad pinch gestures.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html
index accbe61..7978e84 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html
@@ -9,7 +9,7 @@
   // This is a less strict version of synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html
   // See synthetic-pinch-zoom-gesture.js.
 
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchpad pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html
index 8053c1bf..dd8fe22 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html
@@ -6,7 +6,7 @@
 <script src="synthetic-pinch-zoom-gesture.js"></script>
 
 <script>
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchpad pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html
index c9c6635b..cd1b6c0 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html
@@ -6,7 +6,7 @@
 <script src="synthetic-pinch-zoom-gesture.js"></script>
 
 <script>
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming out slowly for touchpad pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html
index a273240..a9534d7 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html
@@ -6,7 +6,7 @@
 <script src="synthetic-pinch-zoom-gesture.js"></script>
 
 <script>
-  const MOUSE_INPUT = 2;  // Gesture source type from synthetic_gesture_params.h
+  const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchpad pinch gestures.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html
index 826bf557..f34c801 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html
@@ -12,7 +12,7 @@
   // the non -desktop.html version of the test is passing this test can be
   // removed.
 
-  const TOUCH_INPUT = 1;  // Gesture source type from synthetic_gesture_params.h
+  const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchscreen pinch gestures.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html
index 0360672..c090e0ed 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html
@@ -12,7 +12,7 @@
   // the non -desktop.html version of the test is passing this test can be
   // removed.
 
-  const TOUCH_INPUT = 1;  // Gesture source type from synthetic_gesture_params.h
+  const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchscreen pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html
index dd09888..754eccf7f 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html
@@ -6,7 +6,7 @@
 <script src="synthetic-pinch-zoom-gesture.js"></script>
 
 <script>
-  const TOUCH_INPUT = 1;  // Gesture source type from synthetic_gesture_params.h
+  const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchscreen pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html
index 61d4b89..f611e15 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html
@@ -6,7 +6,7 @@
 <script src="synthetic-pinch-zoom-gesture.js"></script>
 
 <script>
-  const TOUCH_INPUT = 1;  // Gesture source type from synthetic_gesture_params.h
+  const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming out slowly for touchscreen pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html
index 63a090c..61cd4f6 100644
--- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html
+++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html
@@ -6,7 +6,7 @@
 <script src="synthetic-pinch-zoom-gesture.js"></script>
 
 <script>
-  const TOUCH_INPUT = 1;  // Gesture source type from synthetic_gesture_params.h
+  const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT;
 
   const t = async_test(
       "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchscreen pinch gestures.");
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index a7687a8..cb6c474 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -10281,9 +10281,11 @@
     getter currentTime
     getter playState
     getter playbackRate
+    getter startTime
     getter timeline
     method cancel
     method constructor
+    method pause
     method play
     setter playbackRate
 interface WritableStream
diff --git a/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h b/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h
index 80e37e5..15e84870 100644
--- a/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h
+++ b/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h
@@ -16,11 +16,11 @@
 using base::StringPrintf;
 
 inline std::string SimpleItoa(int v) {
-  return base::IntToString(v);
+  return base::NumberToString(v);
 }
 
 inline std::string SimpleItoa(int64_t v) {
-  return base::Int64ToString(v);
+  return base::NumberToString(v);
 }
 
 }  // namespace invalidation
diff --git a/third_party/iaccessible2/README.chromium b/third_party/iaccessible2/README.chromium
index 5bc89b42..e53d14a 100644
--- a/third_party/iaccessible2/README.chromium
+++ b/third_party/iaccessible2/README.chromium
@@ -13,14 +13,18 @@
     ia2_api_all.idl
 
 Local modifications:
-  None.
+  Added the IAccessible2_4 interface to ia2_api_all.idl which extends the
+  IAccessible2_3 interface with a single method for setting the current
+  selection.
 
 Update recipe:
 1. git clone the IAccessible2 project
 2. Run concatidl.sh
 3. Copy the resulting ia2_api_all.idl into this directory
-4. Resave with Windows line-endings, so that the changes are easier to review
-5. Update the compiled idl for each CPU, by building the target
+4. Apply the set_selection_ranges.patch using:
+   git am set_selection_ranges.patch
+5. Ensure that all files have Linux line-endings, so that the changes are easier to review
+6. Update the compiled idl for each CPU, by building the target
    third_party\iaccessible2 with each of the following
    target_cpu options in args.gn: x86, arm64 and x64
    For example:
diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl
index 97bf115..0712123 100644
--- a/third_party/iaccessible2/ia2_api_all.idl
+++ b/third_party/iaccessible2/ia2_api_all.idl
@@ -1296,6 +1296,7 @@
   IAccessible2\n
   IAccessible2_2\n
   IAccessible2_3\n
+  IAccessible2_4\n
   IAccessibleAction\n
   IAccessibleApplication\n
   IAccessibleComponent\n
@@ -2104,6 +2105,36 @@
       [out, retval] long *nRanges
     );
 }
+
+/**
+ * @brief This interface is an extension of IAccessible2_3 which exposes a
+ * single method for setting the current selection given a number of selection
+ * ranges.
+ *
+ * This interface is preliminary as it has not been adopted by any standard yet.
+ */
+[object, uuid(610a7bec-91bb-444d-a336-a0daf13c4c29)]
+interface IAccessible2_4 : IAccessible2_3
+{
+  /**
+   * @brief Sets the current selection to the provided ranges. The provided
+   * ranges don't need to be contained within this accessible.
+   * @param [in] nRanges
+   *     The length of the array containing the selection ranges.
+   * @param [in] ranges
+   *     The array of selection ranges, allocated by the client with
+   *     CoTaskMemAlloc and freed by the client with CoTaskMemFree.
+   * @retval S_OK Returned if the selection was made successfully.
+   * @retval S_FALSE Returned if the selection could not be made.
+   * @retval E_INVALIDARG Returned if any of the input arguments are invalid.
+   */
+  HRESULT setSelectionRanges
+  (
+      [in] long nRanges,
+      [in, size_is(nRanges)] IA2Range* ranges
+      );
+}
+
 /*************************************************************************
  *
  *  File Name (AccessibleComponent.idl)
diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch
new file mode 100644
index 0000000..1722941
--- /dev/null
+++ b/third_party/iaccessible2/set_selection_ranges.patch
@@ -0,0 +1,49 @@
+diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl
+index 97bf11594646..07121230dc73 100644
+--- a/third_party/iaccessible2/ia2_api_all.idl
++++ b/third_party/iaccessible2/ia2_api_all.idl
+@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED =					0x80000
+   IAccessible2\n
+   IAccessible2_2\n
+   IAccessible2_3\n
++  IAccessible2_4\n
+   IAccessibleAction\n
+   IAccessibleApplication\n
+   IAccessibleComponent\n
+@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2
+       [out, retval] long *nRanges
+     );
+ }
++
++/**
++ * @brief This interface is an extension of IAccessible2_3 which exposes a
++ * single method for setting the current selection given a number of selection
++ * ranges.
++ *
++ * This interface is preliminary as it has not been adopted by any standard yet.
++ */
++[object, uuid(610a7bec-91bb-444d-a336-a0daf13c4c29)]
++interface IAccessible2_4 : IAccessible2_3
++{
++  /**
++   * @brief Sets the current selection to the provided ranges. The provided
++   * ranges don't need to be contained within this accessible.
++   * @param [in] nRanges
++   *     The length of the array containing the selection ranges.
++   * @param [in] ranges
++   *     The array of selection ranges, allocated by the client with
++   *     CoTaskMemAlloc and freed by the client with CoTaskMemFree.
++   * @retval S_OK Returned if the selection was made successfully.
++   * @retval S_FALSE Returned if the selection could not be made.
++   * @retval E_INVALIDARG Returned if any of the input arguments are invalid.
++   */
++  HRESULT setSelectionRanges
++  (
++      [in] long nRanges,
++      [in, size_is(nRanges)] IA2Range* ranges
++      );
++}
++
+ /*************************************************************************
+  *
+  *  File Name (AccessibleComponent.idl)
diff --git a/third_party/inspector_protocol/README.chromium b/third_party/inspector_protocol/README.chromium
index b7d510e..e1a51ff 100644
--- a/third_party/inspector_protocol/README.chromium
+++ b/third_party/inspector_protocol/README.chromium
@@ -2,7 +2,7 @@
 Short Name: inspector_protocol
 URL: https://chromium.googlesource.com/deps/inspector_protocol/
 Version: 0
-Revision: dfaf19b7350529d9d454ae79b6747ee57cd1c6d4
+Revision: e1991e6a66f0519e48e9e2c93efff15d62c3b2ca
 License: BSD
 License File: LICENSE
 Security Critical: no
diff --git a/third_party/inspector_protocol/encoding/cbor.cc b/third_party/inspector_protocol/encoding/cbor.cc
index 2f1efae..4daf11e 100644
--- a/third_party/inspector_protocol/encoding/cbor.cc
+++ b/third_party/inspector_protocol/encoding/cbor.cc
@@ -245,12 +245,12 @@
 
 // A double is encoded with a specific initial byte
 // (kInitialByteForDouble) plus the 64 bits of payload for its value.
-constexpr int kEncodedDoubleSize = 1 + sizeof(uint64_t);
+constexpr std::ptrdiff_t kEncodedDoubleSize = 1 + sizeof(uint64_t);
 
 // An envelope is encoded with a specific initial byte
 // (kInitialByteForEnvelope), plus the start byte for a BYTE_STRING with a 32
 // bit wide length, plus a 32 bit length for that string.
-constexpr int kEncodedEnvelopeHeaderSize = 1 + 1 + sizeof(uint32_t);
+constexpr std::ptrdiff_t kEncodedEnvelopeHeaderSize = 1 + 1 + sizeof(uint32_t);
 
 void EncodeDouble(double value, std::vector<uint8_t>* out) {
   // The additional_info=27 indicates 64 bits for the double follow.
@@ -606,23 +606,20 @@
 
 span<uint8_t> CBORTokenizer::GetString8() const {
   assert(token_tag_ == CBORTokenTag::STRING8);
-  return bytes_.subspan(
-      status_.pos + (token_byte_length_ - token_start_internal_value_),
-      token_start_internal_value_);
+  auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+  return bytes_.subspan(status_.pos + (token_byte_length_ - length), length);
 }
 
 span<uint8_t> CBORTokenizer::GetString16WireRep() const {
   assert(token_tag_ == CBORTokenTag::STRING16);
-  return bytes_.subspan(
-      status_.pos + (token_byte_length_ - token_start_internal_value_),
-      token_start_internal_value_);
+  auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+  return bytes_.subspan(status_.pos + (token_byte_length_ - length), length);
 }
 
 span<uint8_t> CBORTokenizer::GetBinary() const {
   assert(token_tag_ == CBORTokenTag::BINARY);
-  return bytes_.subspan(
-      status_.pos + (token_byte_length_ - token_start_internal_value_),
-      token_start_internal_value_);
+  auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+  return bytes_.subspan(status_.pos + (token_byte_length_ - length), length);
 }
 
 void CBORTokenizer::ReadNextToken(bool enter_envelope) {
@@ -657,7 +654,7 @@
       SetToken(CBORTokenTag::NULL_VALUE, 1);
       return;
     case kExpectedConversionToBase64Tag: {  // BINARY
-      int64_t bytes_read =
+      int8_t bytes_read =
           ReadTokenStart(bytes_.subspan(status_.pos + 1), &token_start_type_,
                          &token_start_internal_value_);
       int64_t token_byte_length = 1 + bytes_read + token_start_internal_value_;
@@ -666,7 +663,7 @@
         SetError(Error::CBOR_INVALID_BINARY);
         return;
       }
-      SetToken(CBORTokenTag::BINARY, token_byte_length);
+      SetToken(CBORTokenTag::BINARY, std::ptrdiff_t(token_byte_length));
       return;
     }
     case kInitialByteForDouble: {  // DOUBLE
@@ -697,16 +694,17 @@
         SetError(Error::CBOR_INVALID_ENVELOPE);
         return;
       }
+      auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
       SetToken(CBORTokenTag::ENVELOPE,
-               kEncodedEnvelopeHeaderSize + token_start_internal_value_);
+               kEncodedEnvelopeHeaderSize + length);
       return;
     }
     default: {
       span<uint8_t> remainder =
           bytes_.subspan(status_.pos, bytes_.size() - status_.pos);
       assert(!remainder.empty());
-      int64_t token_start_length = ReadTokenStart(remainder, &token_start_type_,
-                                                  &token_start_internal_value_);
+      int8_t token_start_length = ReadTokenStart(remainder, &token_start_type_,
+                                                 &token_start_internal_value_);
       bool success = token_start_length != -1;
       switch (token_start_type_) {
         case MajorType::UNSIGNED:  // INT32.
@@ -726,16 +724,17 @@
           }
           SetToken(CBORTokenTag::INT32, token_start_length);
           return;
-        case MajorType::STRING:  // STRING8.
+        case MajorType::STRING: {  // STRING8.
           if (!success ||
               remainder.size() < int64_t(token_start_internal_value_)) {
             SetError(Error::CBOR_INVALID_STRING8);
             return;
           }
-          SetToken(CBORTokenTag::STRING8,
-                   token_start_length + token_start_internal_value_);
+          auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+          SetToken(CBORTokenTag::STRING8, token_start_length + length);
           return;
-        case MajorType::BYTE_STRING:  // STRING16.
+        }
+        case MajorType::BYTE_STRING: {  // STRING16.
           if (!success ||
               remainder.size() < int64_t(token_start_internal_value_) ||
               // Must be divisible by 2 since UTF16 is 2 bytes per character.
@@ -743,9 +742,10 @@
             SetError(Error::CBOR_INVALID_STRING16);
             return;
           }
-          SetToken(CBORTokenTag::STRING16,
-                   token_start_length + token_start_internal_value_);
+          auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+          SetToken(CBORTokenTag::STRING16, token_start_length + length);
           return;
+        }
         case MajorType::ARRAY:
         case MajorType::MAP:
         case MajorType::TAG:
@@ -758,7 +758,7 @@
 }
 
 void CBORTokenizer::SetToken(CBORTokenTag token_tag,
-                             int64_t token_byte_length) {
+                             std::ptrdiff_t token_byte_length) {
   token_tag_ = token_tag;
   token_byte_length_ = token_byte_length;
 }
diff --git a/third_party/inspector_protocol/encoding/cbor.h b/third_party/inspector_protocol/encoding/cbor.h
index e0cf395..4cd567f 100644
--- a/third_party/inspector_protocol/encoding/cbor.h
+++ b/third_party/inspector_protocol/encoding/cbor.h
@@ -82,7 +82,7 @@
   bool EncodeStop(std::vector<uint8_t>* out);
 
  private:
-  uint64_t byte_size_pos_ = 0;
+  std::vector<uint8_t>::size_type byte_size_pos_ = 0;
 };
 
 // This can be used to convert from JSON to CBOR, by passing the
@@ -186,13 +186,13 @@
 
  private:
   void ReadNextToken(bool enter_envelope);
-  void SetToken(CBORTokenTag token, int64_t token_byte_length);
+  void SetToken(CBORTokenTag token, std::ptrdiff_t token_byte_length);
   void SetError(Error error);
 
   span<uint8_t> bytes_;
   CBORTokenTag token_tag_;
   struct Status status_;
-  int64_t token_byte_length_;
+  std::ptrdiff_t token_byte_length_;
   cbor_internals::MajorType token_start_type_;
   uint64_t token_start_internal_value_;
 };
diff --git a/third_party/inspector_protocol/encoding/json_parser.cc b/third_party/inspector_protocol/encoding/json_parser.cc
index 82bd184d..dca5ea2 100644
--- a/third_party/inspector_protocol/encoding/json_parser.cc
+++ b/third_party/inspector_protocol/encoding/json_parser.cc
@@ -573,13 +573,13 @@
 
 void ParseJSONChars(const Platform* platform, span<uint8_t> chars,
                     JSONParserHandler* handler) {
-  JsonParser<uint8_t> parser(platform, handler);
+  JsonParser<uint8_t> parser(deps, handler);
   parser.Parse(chars.data(), chars.size());
 }
 
 void ParseJSONChars(const Platform* platform, span<uint16_t> chars,
                     JSONParserHandler* handler) {
-  JsonParser<uint16_t> parser(platform, handler);
+  JsonParser<uint16_t> parser(deps, handler);
   parser.Parse(chars.data(), chars.size());
 }
 }  // namespace inspector_protocol
diff --git a/third_party/inspector_protocol/encoding/json_parser.h b/third_party/inspector_protocol/encoding/json_parser.h
index e5a8b03..55384be 100644
--- a/third_party/inspector_protocol/encoding/json_parser.h
+++ b/third_party/inspector_protocol/encoding/json_parser.h
@@ -13,9 +13,9 @@
 
 namespace inspector_protocol {
 // JSON parsing routines.
-void ParseJSONChars(const Platform* deps, span<uint8_t> chars,
+void ParseJSONChars(const Platform* platform, span<uint8_t> chars,
                     JSONParserHandler* handler);
-void ParseJSONChars(const Platform* deps, span<uint16_t> chars,
+void ParseJSONChars(const Platform* platform, span<uint16_t> chars,
                     JSONParserHandler* handler);
 }  // namespace inspector_protocol
 
diff --git a/third_party/inspector_protocol/encoding/status.h b/third_party/inspector_protocol/encoding/status.h
index bd20f4f..cc8460a 100644
--- a/third_party/inspector_protocol/encoding/status.h
+++ b/third_party/inspector_protocol/encoding/status.h
@@ -48,12 +48,12 @@
 // A status value with position that can be copied. The default status
 // is OK. Usually, error status values should come with a valid position.
 struct Status {
-  static constexpr int64_t npos() { return -1; }
+  static constexpr std::ptrdiff_t npos() { return -1; }
 
   bool ok() const { return error == Error::OK; }
 
   Error error = Error::OK;
-  int64_t pos = npos();
+  std::ptrdiff_t pos = npos();
 };
 }  // namespace inspector_protocol
 #endif  // INSPECTOR_PROTOCOL_ENCODING_STATUS_H_
diff --git a/third_party/inspector_protocol/encoding/str_util.cc b/third_party/inspector_protocol/encoding/str_util.cc
new file mode 100644
index 0000000..e4e2043
--- /dev/null
+++ b/third_party/inspector_protocol/encoding/str_util.cc
@@ -0,0 +1,19 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "str_util.h"
+
+#include <cstring>
+
+namespace inspector_protocol {
+bool StrEq(span<uint8_t> left, span<uint8_t> right) {
+  return left.size() == right.size() &&
+         0 == memcmp(left.data(), right.data(), left.size());
+}
+
+bool StrEq(span<uint8_t> left, const char* null_terminated_right) {
+  return size_t(left.size()) == strlen(null_terminated_right) &&
+         0 == memcmp(left.data(), null_terminated_right, left.size());
+}
+}  // namespace inspector_protocol
diff --git a/third_party/inspector_protocol/encoding/str_util.h b/third_party/inspector_protocol/encoding/str_util.h
new file mode 100644
index 0000000..f377541
--- /dev/null
+++ b/third_party/inspector_protocol/encoding/str_util.h
@@ -0,0 +1,17 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef INSPECTOR_PROTOCOL_ENCODING_STR_UTIL_H_
+#define INSPECTOR_PROTOCOL_ENCODING_STR_UTIL_H_
+
+#include <cstdint>
+
+#include "span.h"
+
+namespace inspector_protocol {
+// Returns true iff |left| and right have the same contents, byte for byte.
+bool StrEq(span<uint8_t> left, span<uint8_t> right);
+bool StrEq(span<uint8_t> left, const char* null_terminated_right);
+}  // namespace inspector_protocol
+#endif  // INSPECTOR_PROTOCOL_ENCODING_STR_UTIL_H_
diff --git a/third_party/inspector_protocol/inspector_protocol.gni b/third_party/inspector_protocol/inspector_protocol.gni
index b4acdf0b..ecee942 100644
--- a/third_party/inspector_protocol/inspector_protocol.gni
+++ b/third_party/inspector_protocol/inspector_protocol.gni
@@ -35,6 +35,8 @@
       "$inspector_protocol_dir/lib/base_string_adapter_h.template",
       "$inspector_protocol_dir/lib/Allocator_h.template",
       "$inspector_protocol_dir/lib/Array_h.template",
+      "$inspector_protocol_dir/lib/CBOR_h.template",
+      "$inspector_protocol_dir/lib/CBOR_cpp.template",
       "$inspector_protocol_dir/lib/DispatcherBase_cpp.template",
       "$inspector_protocol_dir/lib/DispatcherBase_h.template",
       "$inspector_protocol_dir/lib/ErrorSupport_cpp.template",
diff --git a/third_party/inspector_protocol/inspector_protocol.gypi b/third_party/inspector_protocol/inspector_protocol.gypi
index 1359e16..3d0a60e 100644
--- a/third_party/inspector_protocol/inspector_protocol.gypi
+++ b/third_party/inspector_protocol/inspector_protocol.gypi
@@ -7,6 +7,8 @@
     'inspector_protocol_files': [
       'lib/Allocator_h.template',
       'lib/Array_h.template',
+      'lib/CBOR_h.template',
+      'lib/CBOR_cpp.template',
       'lib/DispatcherBase_cpp.template',
       'lib/DispatcherBase_h.template',
       'lib/ErrorSupport_cpp.template',
diff --git a/third_party/inspector_protocol/lib/CBOR_cpp.template b/third_party/inspector_protocol/lib/CBOR_cpp.template
new file mode 100644
index 0000000..3fbdc551
--- /dev/null
+++ b/third_party/inspector_protocol/lib/CBOR_cpp.template
@@ -0,0 +1,778 @@
+// This file is generated by CBOR_cpp.template.
+
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+{% for namespace in config.protocol.namespace %}
+namespace {{namespace}} {
+{% endfor %}
+
+using cbor_internals::MajorType;
+using cbor_internals::ReadTokenStart;
+using cbor_internals::WriteTokenStart;
+
+// ==== cbor.cc ====
+
+namespace {
+using cbor_internals::MajorType;
+
+// Indicates the number of bits the "initial byte" needs to be shifted to the
+// right after applying |kMajorTypeMask| to produce the major type in the
+// lowermost bits.
+static constexpr uint8_t kMajorTypeBitShift = 5u;
+// Mask selecting the low-order 5 bits of the "initial byte", which is where
+// the additional information is encoded.
+static constexpr uint8_t kAdditionalInformationMask = 0x1f;
+// Mask selecting the high-order 3 bits of the "initial byte", which indicates
+// the major type of the encoded value.
+static constexpr uint8_t kMajorTypeMask = 0xe0;
+// Indicates the integer is in the following byte.
+static constexpr uint8_t kAdditionalInformation1Byte = 24u;
+// Indicates the integer is in the next 2 bytes.
+static constexpr uint8_t kAdditionalInformation2Bytes = 25u;
+// Indicates the integer is in the next 4 bytes.
+static constexpr uint8_t kAdditionalInformation4Bytes = 26u;
+// Indicates the integer is in the next 8 bytes.
+static constexpr uint8_t kAdditionalInformation8Bytes = 27u;
+
+// Encodes the initial byte, consisting of the |type| in the first 3 bits
+// followed by 5 bits of |additional_info|.
+constexpr uint8_t EncodeInitialByte(MajorType type, uint8_t additional_info) {
+  return (uint8_t(type) << kMajorTypeBitShift) |
+         (additional_info & kAdditionalInformationMask);
+}
+
+// See RFC 7049 Section 2.3, Table 2.
+static constexpr uint8_t kEncodedTrue =
+    EncodeInitialByte(MajorType::SIMPLE_VALUE, 21);
+static constexpr uint8_t kEncodedFalse =
+    EncodeInitialByte(MajorType::SIMPLE_VALUE, 20);
+static constexpr uint8_t kEncodedNull =
+    EncodeInitialByte(MajorType::SIMPLE_VALUE, 22);
+static constexpr uint8_t kInitialByteForDouble =
+    EncodeInitialByte(MajorType::SIMPLE_VALUE, 27);
+}  // namespace
+
+uint8_t EncodeTrue() { return kEncodedTrue; }
+uint8_t EncodeFalse() { return kEncodedFalse; }
+uint8_t EncodeNull() { return kEncodedNull; }
+
+namespace {
+// TAG 24 indicates that what follows is a byte string which is
+// encoded in CBOR format. We use this as a wrapper for
+// maps and arrays, allowing us to skip them, because the
+// byte string carries its size (byte length).
+// https://tools.ietf.org/html/rfc7049#section-2.4.4.1
+static constexpr uint8_t kInitialByteForEnvelope =
+    EncodeInitialByte(MajorType::TAG, 24);
+// The initial byte for a byte string with at most 2^32 bytes
+// of payload. This is used for envelope encoding, even if
+// the byte string is shorter.
+static constexpr uint8_t kInitialByteFor32BitLengthByteString =
+    EncodeInitialByte(MajorType::BYTE_STRING, 26);
+
+// See RFC 7049 Section 2.2.1, indefinite length arrays / maps have additional
+// info = 31.
+static constexpr uint8_t kInitialByteIndefiniteLengthArray =
+    EncodeInitialByte(MajorType::ARRAY, 31);
+static constexpr uint8_t kInitialByteIndefiniteLengthMap =
+    EncodeInitialByte(MajorType::MAP, 31);
+// See RFC 7049 Section 2.3, Table 1; this is used for finishing indefinite
+// length maps / arrays.
+static constexpr uint8_t kStopByte =
+    EncodeInitialByte(MajorType::SIMPLE_VALUE, 31);
+}  // namespace
+
+uint8_t EncodeIndefiniteLengthArrayStart() {
+  return kInitialByteIndefiniteLengthArray;
+}
+
+uint8_t EncodeIndefiniteLengthMapStart() {
+  return kInitialByteIndefiniteLengthMap;
+}
+
+uint8_t EncodeStop() { return kStopByte; }
+
+namespace {
+// See RFC 7049 Table 3 and Section 2.4.4.2. This is used as a prefix for
+// arbitrary binary data encoded as BYTE_STRING.
+static constexpr uint8_t kExpectedConversionToBase64Tag =
+    EncodeInitialByte(MajorType::TAG, 22);
+
+// When parsing CBOR, we limit recursion depth for objects and arrays
+// to this constant.
+static constexpr int kStackLimit = 1000;
+
+// Writes the bytes for |v| to |out|, starting with the most significant byte.
+// See also: https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
+template <typename T>
+void WriteBytesMostSignificantByteFirst(T v, std::vector<uint8_t>* out) {
+  for (int shift_bytes = sizeof(T) - 1; shift_bytes >= 0; --shift_bytes)
+    out->push_back(0xff & (v >> (shift_bytes * 8)));
+}
+}  // namespace
+
+namespace cbor_internals {
+// Writes the start of a token with |type|. The |value| may indicate the size,
+// or it may be the payload if the value is an unsigned integer.
+void WriteTokenStart(MajorType type, uint64_t value,
+                     std::vector<uint8_t>* encoded) {
+  if (value < 24) {
+    // Values 0-23 are encoded directly into the additional info of the
+    // initial byte.
+    encoded->push_back(EncodeInitialByte(type, /*additiona_info=*/value));
+    return;
+  }
+  if (value <= std::numeric_limits<uint8_t>::max()) {
+    // Values 24-255 are encoded with one initial byte, followed by the value.
+    encoded->push_back(EncodeInitialByte(type, kAdditionalInformation1Byte));
+    encoded->push_back(value);
+    return;
+  }
+  if (value <= std::numeric_limits<uint16_t>::max()) {
+    // Values 256-65535: 1 initial byte + 2 bytes payload.
+    encoded->push_back(EncodeInitialByte(type, kAdditionalInformation2Bytes));
+    WriteBytesMostSignificantByteFirst<uint16_t>(value, encoded);
+    return;
+  }
+  if (value <= std::numeric_limits<uint32_t>::max()) {
+    // 32 bit uint: 1 initial byte + 4 bytes payload.
+    encoded->push_back(EncodeInitialByte(type, kAdditionalInformation4Bytes));
+    WriteBytesMostSignificantByteFirst<uint32_t>(static_cast<uint32_t>(value),
+                                                 encoded);
+    return;
+  }
+  // 64 bit uint: 1 initial byte + 8 bytes payload.
+  encoded->push_back(EncodeInitialByte(type, kAdditionalInformation8Bytes));
+  WriteBytesMostSignificantByteFirst<uint64_t>(value, encoded);
+}
+}  // namespace cbor_internals
+
+namespace {
+// Extracts sizeof(T) bytes from |in| to extract a value of type T
+// (e.g. uint64_t, uint32_t, ...), most significant byte first.
+// See also: https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
+template <typename T>
+T ReadBytesMostSignificantByteFirst(span<uint8_t> in) {
+  assert(size_t(in.size()) >= sizeof(T));
+  T result = 0;
+  for (size_t shift_bytes = 0; shift_bytes < sizeof(T); ++shift_bytes)
+    result |= T(in[sizeof(T) - 1 - shift_bytes]) << (shift_bytes * 8);
+  return result;
+}
+}  // namespace
+
+namespace cbor_internals {
+int8_t ReadTokenStart(span<uint8_t> bytes, MajorType* type, uint64_t* value) {
+  if (bytes.empty()) return -1;
+  uint8_t initial_byte = bytes[0];
+  *type = MajorType((initial_byte & kMajorTypeMask) >> kMajorTypeBitShift);
+
+  uint8_t additional_information = initial_byte & kAdditionalInformationMask;
+  if (additional_information < 24) {
+    // Values 0-23 are encoded directly into the additional info of the
+    // initial byte.
+    *value = additional_information;
+    return 1;
+  }
+  if (additional_information == kAdditionalInformation1Byte) {
+    // Values 24-255 are encoded with one initial byte, followed by the value.
+    if (bytes.size() < 2) return -1;
+    *value = ReadBytesMostSignificantByteFirst<uint8_t>(bytes.subspan(1));
+    return 2;
+  }
+  if (additional_information == kAdditionalInformation2Bytes) {
+    // Values 256-65535: 1 initial byte + 2 bytes payload.
+    if (static_cast<size_t>(bytes.size()) < 1 + sizeof(uint16_t)) return -1;
+    *value = ReadBytesMostSignificantByteFirst<uint16_t>(bytes.subspan(1));
+    return 3;
+  }
+  if (additional_information == kAdditionalInformation4Bytes) {
+    // 32 bit uint: 1 initial byte + 4 bytes payload.
+    if (static_cast<size_t>(bytes.size()) < 1 + sizeof(uint32_t)) return -1;
+    *value = ReadBytesMostSignificantByteFirst<uint32_t>(bytes.subspan(1));
+    return 5;
+  }
+  if (additional_information == kAdditionalInformation8Bytes) {
+    // 64 bit uint: 1 initial byte + 8 bytes payload.
+    if (static_cast<size_t>(bytes.size()) < 1 + sizeof(uint64_t)) return -1;
+    *value = ReadBytesMostSignificantByteFirst<uint64_t>(bytes.subspan(1));
+    return 9;
+  }
+  return -1;
+}
+}  // namespace cbor_internals
+
+using cbor_internals::MajorType;
+using cbor_internals::WriteTokenStart;
+using cbor_internals::ReadTokenStart;
+
+void EncodeInt32(int32_t value, std::vector<uint8_t>* out) {
+  if (value >= 0) {
+    WriteTokenStart(MajorType::UNSIGNED, value, out);
+  } else {
+    uint64_t representation = static_cast<uint64_t>(-(value + 1));
+    WriteTokenStart(MajorType::NEGATIVE, representation, out);
+  }
+}
+
+void EncodeString16(span<uint16_t> in, std::vector<uint8_t>* out) {
+  uint64_t byte_length = static_cast<uint64_t>(in.size_bytes());
+  WriteTokenStart(MajorType::BYTE_STRING, byte_length, out);
+  // When emitting UTF16 characters, we always write the least significant byte
+  // first; this is because it's the native representation for X86.
+  // TODO(johannes): Implement a more efficient thing here later, e.g.
+  // casting *iff* the machine has this byte order.
+  // The wire format for UTF16 chars will probably remain the same
+  // (least significant byte first) since this way we can have
+  // golden files, unittests, etc. that port easily and universally.
+  // See also:
+  // https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
+  for (const uint16_t two_bytes : in) {
+    out->push_back(two_bytes);
+    out->push_back(two_bytes >> 8);
+  }
+}
+
+void EncodeString8(span<uint8_t> in, std::vector<uint8_t>* out) {
+  WriteTokenStart(MajorType::STRING, static_cast<uint64_t>(in.size_bytes()),
+                  out);
+  out->insert(out->end(), in.begin(), in.end());
+}
+
+void EncodeBinary(span<uint8_t> in, std::vector<uint8_t>* out) {
+  out->push_back(kExpectedConversionToBase64Tag);
+  uint64_t byte_length = static_cast<uint64_t>(in.size_bytes());
+  WriteTokenStart(MajorType::BYTE_STRING, byte_length, out);
+  out->insert(out->end(), in.begin(), in.end());
+}
+
+// A double is encoded with a specific initial byte
+// (kInitialByteForDouble) plus the 64 bits of payload for its value.
+constexpr std::ptrdiff_t kEncodedDoubleSize = 1 + sizeof(uint64_t);
+
+// An envelope is encoded with a specific initial byte
+// (kInitialByteForEnvelope), plus the start byte for a BYTE_STRING with a 32
+// bit wide length, plus a 32 bit length for that string.
+constexpr std::ptrdiff_t kEncodedEnvelopeHeaderSize = 1 + 1 + sizeof(uint32_t);
+
+void EncodeDouble(double value, std::vector<uint8_t>* out) {
+  // The additional_info=27 indicates 64 bits for the double follow.
+  // See RFC 7049 Section 2.3, Table 1.
+  out->push_back(kInitialByteForDouble);
+  union {
+    double from_double;
+    uint64_t to_uint64;
+  } reinterpret;
+  reinterpret.from_double = value;
+  WriteBytesMostSignificantByteFirst<uint64_t>(reinterpret.to_uint64, out);
+}
+
+void EnvelopeEncoder::EncodeStart(std::vector<uint8_t>* out) {
+  assert(byte_size_pos_ == 0);
+  out->push_back(kInitialByteForEnvelope);
+  out->push_back(kInitialByteFor32BitLengthByteString);
+  byte_size_pos_ = out->size();
+  out->resize(out->size() + sizeof(uint32_t));
+}
+
+bool EnvelopeEncoder::EncodeStop(std::vector<uint8_t>* out) {
+  assert(byte_size_pos_ != 0);
+  // The byte size is the size of the payload, that is, all the
+  // bytes that were written past the byte size position itself.
+  uint64_t byte_size = out->size() - (byte_size_pos_ + sizeof(uint32_t));
+  // We store exactly 4 bytes, so at most INT32MAX, with most significant
+  // byte first.
+  if (byte_size > std::numeric_limits<uint32_t>::max()) return false;
+  for (int shift_bytes = sizeof(uint32_t) - 1; shift_bytes >= 0;
+       --shift_bytes) {
+    (*out)[byte_size_pos_++] = 0xff & (byte_size >> (shift_bytes * 8));
+  }
+  return true;
+}
+
+namespace {
+class JSONToCBOREncoder : public JSONParserHandler {
+ public:
+  JSONToCBOREncoder(std::vector<uint8_t>* out, Status* status)
+      : out_(out), status_(status) {
+    *status_ = Status();
+  }
+
+  void HandleObjectBegin() override {
+    envelopes_.emplace_back();
+    envelopes_.back().EncodeStart(out_);
+    out_->push_back(kInitialByteIndefiniteLengthMap);
+  }
+
+  void HandleObjectEnd() override {
+    out_->push_back(kStopByte);
+    assert(!envelopes_.empty());
+    envelopes_.back().EncodeStop(out_);
+    envelopes_.pop_back();
+  };
+
+  void HandleArrayBegin() override {
+    envelopes_.emplace_back();
+    envelopes_.back().EncodeStart(out_);
+    out_->push_back(kInitialByteIndefiniteLengthArray);
+  }
+
+  void HandleArrayEnd() override {
+    out_->push_back(kStopByte);
+    assert(!envelopes_.empty());
+    envelopes_.back().EncodeStop(out_);
+    envelopes_.pop_back();
+  };
+
+  void HandleString16(std::vector<uint16_t> chars) override {
+    for (uint16_t ch : chars) {
+      if (ch >= 0x7f) {
+        // If there's at least one non-7bit character, we encode as UTF16.
+        EncodeString16(span<uint16_t>(chars.data(), chars.size()), out_);
+        return;
+      }
+    }
+    std::vector<uint8_t> sevenbit_chars(chars.begin(), chars.end());
+    EncodeString8(span<uint8_t>(sevenbit_chars.data(), sevenbit_chars.size()),
+                  out_);
+  }
+
+  void HandleBinary(std::vector<uint8_t> bytes) override {
+    EncodeBinary(span<uint8_t>(bytes.data(), bytes.size()), out_);
+  }
+
+  void HandleDouble(double value) override { EncodeDouble(value, out_); };
+
+  void HandleInt32(int32_t value) override { EncodeInt32(value, out_); }
+
+  void HandleBool(bool value) override {
+    // See RFC 7049 Section 2.3, Table 2.
+    out_->push_back(value ? kEncodedTrue : kEncodedFalse);
+  }
+
+  void HandleNull() override {
+    // See RFC 7049 Section 2.3, Table 2.
+    out_->push_back(kEncodedNull);
+  }
+
+  void HandleError(Status error) override {
+    assert(!error.ok());
+    *status_ = error;
+    out_->clear();
+  }
+
+ private:
+  std::vector<uint8_t>* out_;
+  std::vector<EnvelopeEncoder> envelopes_;
+  Status* status_;
+};
+}  // namespace
+
+std::unique_ptr<JSONParserHandler> NewJSONToCBOREncoder(
+    std::vector<uint8_t>* out, Status* status) {
+  return std::make_unique<JSONToCBOREncoder>(out, status);
+}
+
+namespace {
+// Below are three parsing routines for CBOR, which cover enough
+// to roundtrip JSON messages.
+bool ParseMap(int32_t stack_depth, CBORTokenizer* tokenizer,
+              JSONParserHandler* out);
+bool ParseArray(int32_t stack_depth, CBORTokenizer* tokenizer,
+                JSONParserHandler* out);
+bool ParseValue(int32_t stack_depth, CBORTokenizer* tokenizer,
+                JSONParserHandler* out);
+
+void ParseUTF16String(CBORTokenizer* tokenizer, JSONParserHandler* out) {
+  std::vector<uint16_t> value;
+  span<uint8_t> rep = tokenizer->GetString16WireRep();
+  for (std::ptrdiff_t ii = 0; ii < rep.size(); ii += 2)
+    value.push_back((rep[ii + 1] << 8) | rep[ii]);
+  out->HandleString16(std::move(value));
+  tokenizer->Next();
+}
+
+// For now this method only covers US-ASCII. Later, we may allow UTF8.
+bool ParseASCIIString(CBORTokenizer* tokenizer, JSONParserHandler* out) {
+  assert(tokenizer->TokenTag() == CBORTokenTag::STRING8);
+  std::vector<uint16_t> value16;
+  for (uint8_t ch : tokenizer->GetString8()) {
+    // We only accept us-ascii (7 bit) strings here. Other strings must
+    // be encoded with 16 bit (the BYTE_STRING case).
+    if (ch >= 0x7f) {
+      out->HandleError(
+          Status{Error::CBOR_STRING8_MUST_BE_7BIT, tokenizer->Status().pos});
+      return false;
+    }
+    value16.push_back(ch);
+  }
+  out->HandleString16(std::move(value16));
+  tokenizer->Next();
+  return true;
+}
+
+bool ParseValue(int32_t stack_depth, CBORTokenizer* tokenizer,
+                JSONParserHandler* out) {
+  if (stack_depth > kStackLimit) {
+    out->HandleError(
+        Status{Error::CBOR_STACK_LIMIT_EXCEEDED, tokenizer->Status().pos});
+    return false;
+  }
+  // Skip past the envelope to get to what's inside.
+  if (tokenizer->TokenTag() == CBORTokenTag::ENVELOPE)
+    tokenizer->EnterEnvelope();
+  switch (tokenizer->TokenTag()) {
+    case CBORTokenTag::ERROR_VALUE:
+      out->HandleError(tokenizer->Status());
+      return false;
+    case CBORTokenTag::DONE:
+      out->HandleError(Status{Error::CBOR_UNEXPECTED_EOF_EXPECTED_VALUE,
+                              tokenizer->Status().pos});
+      return false;
+    case CBORTokenTag::TRUE_VALUE:
+      out->HandleBool(true);
+      tokenizer->Next();
+      return true;
+    case CBORTokenTag::FALSE_VALUE:
+      out->HandleBool(false);
+      tokenizer->Next();
+      return true;
+    case CBORTokenTag::NULL_VALUE:
+      out->HandleNull();
+      tokenizer->Next();
+      return true;
+    case CBORTokenTag::INT32:
+      out->HandleInt32(tokenizer->GetInt32());
+      tokenizer->Next();
+      return true;
+    case CBORTokenTag::DOUBLE:
+      out->HandleDouble(tokenizer->GetDouble());
+      tokenizer->Next();
+      return true;
+    case CBORTokenTag::STRING8:
+      return ParseASCIIString(tokenizer, out);
+    case CBORTokenTag::STRING16:
+      ParseUTF16String(tokenizer, out);
+      return true;
+    case CBORTokenTag::BINARY: {
+      span<uint8_t> binary = tokenizer->GetBinary();
+      out->HandleBinary(std::vector<uint8_t>(binary.begin(), binary.end()));
+      tokenizer->Next();
+      return true;
+    }
+    case CBORTokenTag::MAP_START:
+      return ParseMap(stack_depth + 1, tokenizer, out);
+    case CBORTokenTag::ARRAY_START:
+      return ParseArray(stack_depth + 1, tokenizer, out);
+    default:
+      out->HandleError(
+          Status{Error::CBOR_UNSUPPORTED_VALUE, tokenizer->Status().pos});
+      return false;
+  }
+}
+
+// |bytes| must start with the indefinite length array byte, so basically,
+// ParseArray may only be called after an indefinite length array has been
+// detected.
+bool ParseArray(int32_t stack_depth, CBORTokenizer* tokenizer,
+                JSONParserHandler* out) {
+  assert(tokenizer->TokenTag() == CBORTokenTag::ARRAY_START);
+  tokenizer->Next();
+  out->HandleArrayBegin();
+  while (tokenizer->TokenTag() != CBORTokenTag::STOP) {
+    if (tokenizer->TokenTag() == CBORTokenTag::DONE) {
+      out->HandleError(
+          Status{Error::CBOR_UNEXPECTED_EOF_IN_ARRAY, tokenizer->Status().pos});
+      return false;
+    }
+    if (tokenizer->TokenTag() == CBORTokenTag::ERROR_VALUE) {
+      out->HandleError(tokenizer->Status());
+      return false;
+    }
+    // Parse value.
+    if (!ParseValue(stack_depth, tokenizer, out)) return false;
+  }
+  out->HandleArrayEnd();
+  tokenizer->Next();
+  return true;
+}
+
+// |bytes| must start with the indefinite length array byte, so basically,
+// ParseArray may only be called after an indefinite length array has been
+// detected.
+bool ParseMap(int32_t stack_depth, CBORTokenizer* tokenizer,
+              JSONParserHandler* out) {
+  assert(tokenizer->TokenTag() == CBORTokenTag::MAP_START);
+  out->HandleObjectBegin();
+  tokenizer->Next();
+  while (tokenizer->TokenTag() != CBORTokenTag::STOP) {
+    if (tokenizer->TokenTag() == CBORTokenTag::DONE) {
+      out->HandleError(
+          Status{Error::CBOR_UNEXPECTED_EOF_IN_MAP, tokenizer->Status().pos});
+      return false;
+    }
+    if (tokenizer->TokenTag() == CBORTokenTag::ERROR_VALUE) {
+      out->HandleError(tokenizer->Status());
+      return false;
+    }
+    // Parse key.
+    if (tokenizer->TokenTag() == CBORTokenTag::STRING8) {
+      if (!ParseASCIIString(tokenizer, out)) return false;
+    } else if (tokenizer->TokenTag() == CBORTokenTag::STRING16) {
+      ParseUTF16String(tokenizer, out);
+    } else {
+      out->HandleError(
+          Status{Error::CBOR_INVALID_MAP_KEY, tokenizer->Status().pos});
+      return false;
+    }
+    // Parse value.
+    if (!ParseValue(stack_depth, tokenizer, out)) return false;
+  }
+  out->HandleObjectEnd();
+  tokenizer->Next();
+  return true;
+}
+}  // namespace
+
+void ParseCBOR(span<uint8_t> bytes, JSONParserHandler* json_out) {
+  if (bytes.empty()) {
+    json_out->HandleError(Status{Error::CBOR_NO_INPUT, 0});
+    return;
+  }
+  if (bytes[0] != kInitialByteForEnvelope) {
+    json_out->HandleError(Status{Error::CBOR_INVALID_START_BYTE, 0});
+    return;
+  }
+  CBORTokenizer tokenizer(bytes);
+  if (tokenizer.TokenTag() == CBORTokenTag::ERROR_VALUE) {
+    json_out->HandleError(tokenizer.Status());
+    return;
+  }
+  // We checked for the envelope start byte above, so the tokenizer
+  // must agree here, since it's not an error.
+  assert(tokenizer.TokenTag() == CBORTokenTag::ENVELOPE);
+  tokenizer.EnterEnvelope();
+  if (tokenizer.TokenTag() != CBORTokenTag::MAP_START) {
+    json_out->HandleError(
+        Status{Error::CBOR_MAP_START_EXPECTED, tokenizer.Status().pos});
+    return;
+  }
+  if (!ParseMap(/*stack_depth=*/1, &tokenizer, json_out)) return;
+  if (tokenizer.TokenTag() == CBORTokenTag::DONE) return;
+  if (tokenizer.TokenTag() == CBORTokenTag::ERROR_VALUE) {
+    json_out->HandleError(tokenizer.Status());
+    return;
+  }
+  json_out->HandleError(
+      Status{Error::CBOR_TRAILING_JUNK, tokenizer.Status().pos});
+}
+
+CBORTokenizer::CBORTokenizer(span<uint8_t> bytes) : bytes_(bytes) {
+  ReadNextToken(/*enter_envelope=*/false);
+}
+CBORTokenizer::~CBORTokenizer() {}
+
+CBORTokenTag CBORTokenizer::TokenTag() const { return token_tag_; }
+
+void CBORTokenizer::Next() {
+  if (token_tag_ == CBORTokenTag::ERROR_VALUE || token_tag_ == CBORTokenTag::DONE)
+    return;
+  ReadNextToken(/*enter_envelope=*/false);
+}
+
+void CBORTokenizer::EnterEnvelope() {
+  assert(token_tag_ == CBORTokenTag::ENVELOPE);
+  ReadNextToken(/*enter_envelope=*/true);
+}
+
+Status CBORTokenizer::Status() const { return status_; }
+
+int32_t CBORTokenizer::GetInt32() const {
+  assert(token_tag_ == CBORTokenTag::INT32);
+  // The range checks happen in ::ReadNextToken().
+  return static_cast<uint32_t>(
+      token_start_type_ == MajorType::UNSIGNED
+          ? token_start_internal_value_
+          : -static_cast<int64_t>(token_start_internal_value_) - 1);
+}
+
+double CBORTokenizer::GetDouble() const {
+  assert(token_tag_ == CBORTokenTag::DOUBLE);
+  union {
+    uint64_t from_uint64;
+    double to_double;
+  } reinterpret;
+  reinterpret.from_uint64 = ReadBytesMostSignificantByteFirst<uint64_t>(
+      bytes_.subspan(status_.pos + 1));
+  return reinterpret.to_double;
+}
+
+span<uint8_t> CBORTokenizer::GetString8() const {
+  assert(token_tag_ == CBORTokenTag::STRING8);
+  auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+  return bytes_.subspan(status_.pos + (token_byte_length_ - length), length);
+}
+
+span<uint8_t> CBORTokenizer::GetString16WireRep() const {
+  assert(token_tag_ == CBORTokenTag::STRING16);
+  auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+  return bytes_.subspan(status_.pos + (token_byte_length_ - length), length);
+}
+
+span<uint8_t> CBORTokenizer::GetBinary() const {
+  assert(token_tag_ == CBORTokenTag::BINARY);
+  auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+  return bytes_.subspan(status_.pos + (token_byte_length_ - length), length);
+}
+
+void CBORTokenizer::ReadNextToken(bool enter_envelope) {
+  if (enter_envelope) {
+    status_.pos += kEncodedEnvelopeHeaderSize;
+  } else {
+    status_.pos =
+        status_.pos == Status::npos() ? 0 : status_.pos + token_byte_length_;
+  }
+  status_.error = Error::OK;
+  if (status_.pos >= bytes_.size()) {
+    token_tag_ = CBORTokenTag::DONE;
+    return;
+  }
+  switch (bytes_[status_.pos]) {
+    case kStopByte:
+      SetToken(CBORTokenTag::STOP, 1);
+      return;
+    case kInitialByteIndefiniteLengthMap:
+      SetToken(CBORTokenTag::MAP_START, 1);
+      return;
+    case kInitialByteIndefiniteLengthArray:
+      SetToken(CBORTokenTag::ARRAY_START, 1);
+      return;
+    case kEncodedTrue:
+      SetToken(CBORTokenTag::TRUE_VALUE, 1);
+      return;
+    case kEncodedFalse:
+      SetToken(CBORTokenTag::FALSE_VALUE, 1);
+      return;
+    case kEncodedNull:
+      SetToken(CBORTokenTag::NULL_VALUE, 1);
+      return;
+    case kExpectedConversionToBase64Tag: {  // BINARY
+      int8_t bytes_read =
+          ReadTokenStart(bytes_.subspan(status_.pos + 1), &token_start_type_,
+                         &token_start_internal_value_);
+      int64_t token_byte_length = 1 + bytes_read + token_start_internal_value_;
+      if (-1 == bytes_read || token_start_type_ != MajorType::BYTE_STRING ||
+          status_.pos + token_byte_length > bytes_.size()) {
+        SetError(Error::CBOR_INVALID_BINARY);
+        return;
+      }
+      SetToken(CBORTokenTag::BINARY, std::ptrdiff_t(token_byte_length));
+      return;
+    }
+    case kInitialByteForDouble: {  // DOUBLE
+      if (status_.pos + kEncodedDoubleSize > bytes_.size()) {
+        SetError(Error::CBOR_INVALID_DOUBLE);
+        return;
+      }
+      SetToken(CBORTokenTag::DOUBLE, kEncodedDoubleSize);
+      return;
+    }
+    case kInitialByteForEnvelope: {  // ENVELOPE
+      if (status_.pos + kEncodedEnvelopeHeaderSize > bytes_.size()) {
+        SetError(Error::CBOR_INVALID_ENVELOPE);
+        return;
+      }
+      // The envelope must be a byte string with 32 bit length.
+      if (bytes_[status_.pos + 1] != kInitialByteFor32BitLengthByteString) {
+        SetError(Error::CBOR_INVALID_ENVELOPE);
+        return;
+      }
+      // Read the length of the byte string.
+      token_start_internal_value_ = ReadBytesMostSignificantByteFirst<uint32_t>(
+          bytes_.subspan(status_.pos + 2));
+      // Make sure the payload is contained within the message.
+      if (token_start_internal_value_ + kEncodedEnvelopeHeaderSize +
+              status_.pos >
+          size_t(bytes_.size())) {
+        SetError(Error::CBOR_INVALID_ENVELOPE);
+        return;
+      }
+      auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+      SetToken(CBORTokenTag::ENVELOPE,
+               kEncodedEnvelopeHeaderSize + length);
+      return;
+    }
+    default: {
+      span<uint8_t> remainder =
+          bytes_.subspan(status_.pos, bytes_.size() - status_.pos);
+      assert(!remainder.empty());
+      int8_t token_start_length = ReadTokenStart(remainder, &token_start_type_,
+                                                 &token_start_internal_value_);
+      bool success = token_start_length != -1;
+      switch (token_start_type_) {
+        case MajorType::UNSIGNED:  // INT32.
+          if (!success || std::numeric_limits<int32_t>::max() <
+                              token_start_internal_value_) {
+            SetError(Error::CBOR_INVALID_INT32);
+            return;
+          }
+          SetToken(CBORTokenTag::INT32, token_start_length);
+          return;
+        case MajorType::NEGATIVE:  // INT32.
+          if (!success ||
+              std::numeric_limits<int32_t>::min() >
+                  -static_cast<int64_t>(token_start_internal_value_) - 1) {
+            SetError(Error::CBOR_INVALID_INT32);
+            return;
+          }
+          SetToken(CBORTokenTag::INT32, token_start_length);
+          return;
+        case MajorType::STRING: {  // STRING8.
+          if (!success ||
+              remainder.size() < int64_t(token_start_internal_value_)) {
+            SetError(Error::CBOR_INVALID_STRING8);
+            return;
+          }
+          auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+          SetToken(CBORTokenTag::STRING8, token_start_length + length);
+          return;
+        }
+        case MajorType::BYTE_STRING: {  // STRING16.
+          if (!success ||
+              remainder.size() < int64_t(token_start_internal_value_) ||
+              // Must be divisible by 2 since UTF16 is 2 bytes per character.
+              token_start_internal_value_ & 1) {
+            SetError(Error::CBOR_INVALID_STRING16);
+            return;
+          }
+          auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_);
+          SetToken(CBORTokenTag::STRING16, token_start_length + length);
+          return;
+        }
+        case MajorType::ARRAY:
+        case MajorType::MAP:
+        case MajorType::TAG:
+        case MajorType::SIMPLE_VALUE:
+          SetError(Error::CBOR_UNSUPPORTED_VALUE);
+          return;
+      }
+    }
+  }
+}
+
+void CBORTokenizer::SetToken(CBORTokenTag token_tag,
+                             std::ptrdiff_t token_byte_length) {
+  token_tag_ = token_tag;
+  token_byte_length_ = token_byte_length;
+}
+
+void CBORTokenizer::SetError(Error error) {
+  token_tag_ = CBORTokenTag::ERROR_VALUE;
+  status_.error = error;
+}
+
+{% for namespace in config.protocol.namespace %}
+} // namespace {{namespace}}
+{% endfor %}
diff --git a/third_party/inspector_protocol/lib/CBOR_h.template b/third_party/inspector_protocol/lib/CBOR_h.template
new file mode 100644
index 0000000..406ac53
--- /dev/null
+++ b/third_party/inspector_protocol/lib/CBOR_h.template
@@ -0,0 +1,350 @@
+// This file is generated by CBOR_h.template.
+
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef {{"_".join(config.protocol.namespace)}}_CBOR_h
+#define {{"_".join(config.protocol.namespace)}}_CBOR_h
+
+#include <cstddef>
+#include <cstdint>
+#include <memory>
+#include <vector>
+
+{% for namespace in config.protocol.namespace %}
+namespace {{namespace}} {
+{% endfor %}
+
+// ===== status.h =====
+
+// Error codes.
+enum class Error {
+  OK = 0,
+  // JSON parsing errors - json_parser.{h,cc}.
+  JSON_PARSER_UNPROCESSED_INPUT_REMAINS = 0x01,
+  JSON_PARSER_STACK_LIMIT_EXCEEDED = 0x02,
+  JSON_PARSER_NO_INPUT = 0x03,
+  JSON_PARSER_INVALID_TOKEN = 0x04,
+  JSON_PARSER_INVALID_NUMBER = 0x05,
+  JSON_PARSER_INVALID_STRING = 0x06,
+  JSON_PARSER_UNEXPECTED_ARRAY_END = 0x07,
+  JSON_PARSER_COMMA_OR_ARRAY_END_EXPECTED = 0x08,
+  JSON_PARSER_STRING_LITERAL_EXPECTED = 0x09,
+  JSON_PARSER_COLON_EXPECTED = 0x0a,
+  JSON_PARSER_UNEXPECTED_OBJECT_END = 0x0b,
+  JSON_PARSER_COMMA_OR_OBJECT_END_EXPECTED = 0x0c,
+  JSON_PARSER_VALUE_EXPECTED = 0x0d,
+
+  CBOR_INVALID_INT32 = 0x0e,
+  CBOR_INVALID_DOUBLE = 0x0f,
+  CBOR_INVALID_ENVELOPE = 0x10,
+  CBOR_INVALID_STRING8 = 0x11,
+  CBOR_INVALID_STRING16 = 0x12,
+  CBOR_INVALID_BINARY = 0x13,
+  CBOR_UNSUPPORTED_VALUE = 0x14,
+  CBOR_NO_INPUT = 0x15,
+  CBOR_INVALID_START_BYTE = 0x16,
+  CBOR_UNEXPECTED_EOF_EXPECTED_VALUE = 0x17,
+  CBOR_UNEXPECTED_EOF_IN_ARRAY = 0x18,
+  CBOR_UNEXPECTED_EOF_IN_MAP = 0x19,
+  CBOR_INVALID_MAP_KEY = 0x1a,
+  CBOR_STACK_LIMIT_EXCEEDED = 0x1b,
+  CBOR_STRING8_MUST_BE_7BIT = 0x1c,
+  CBOR_TRAILING_JUNK = 0x1d,
+  CBOR_MAP_START_EXPECTED = 0x1e,
+};
+
+// A status value with position that can be copied. The default status
+// is OK. Usually, error status values should come with a valid position.
+struct Status {
+  static constexpr std::ptrdiff_t npos() { return -1; }
+
+  bool ok() const { return error == Error::OK; }
+
+  Error error = Error::OK;
+  std::ptrdiff_t pos = npos();
+};
+
+// ===== span.h =====
+
+// This template is similar to std::span, which will be included in C++20.  Like
+// std::span it uses ptrdiff_t, which is signed (and thus a bit annoying
+// sometimes when comparing with size_t), but other than this it's much simpler.
+template <typename T>
+class span {
+ public:
+  using index_type = std::ptrdiff_t;
+
+  span() : data_(nullptr), size_(0) {}
+  span(const T* data, index_type size) : data_(data), size_(size) {}
+
+  const T* data() const { return data_; }
+
+  const T* begin() const { return data_; }
+  const T* end() const { return data_ + size_; }
+
+  const T& operator[](index_type idx) const { return data_[idx]; }
+
+  span<T> subspan(index_type offset, index_type count) const {
+    return span(data_ + offset, count);
+  }
+
+  span<T> subspan(index_type offset) const {
+    return span(data_ + offset, size_ - offset);
+  }
+
+  bool empty() const { return size_ == 0; }
+
+  index_type size() const { return size_; }
+  index_type size_bytes() const { return size_ * sizeof(T); }
+
+ private:
+  const T* data_;
+  index_type size_;
+};
+
+// ===== json_parser_handler.h =====
+
+// Handler interface for JSON parser events. See also json_parser.h.
+class JSONParserHandler {
+ public:
+  virtual ~JSONParserHandler() = default;
+  virtual void HandleObjectBegin() = 0;
+  virtual void HandleObjectEnd() = 0;
+  virtual void HandleArrayBegin() = 0;
+  virtual void HandleArrayEnd() = 0;
+  // TODO(johannes): Support utf8 (requires utf16->utf8 conversion
+  // internally, including handling mismatched surrogate pairs).
+  virtual void HandleString16(std::vector<uint16_t> chars) = 0;
+  virtual void HandleBinary(std::vector<uint8_t> bytes) = 0;
+  virtual void HandleDouble(double value) = 0;
+  virtual void HandleInt32(int32_t value) = 0;
+  virtual void HandleBool(bool value) = 0;
+  virtual void HandleNull() = 0;
+
+  // The parser may send one error even after other events have already
+  // been received. Client code is reponsible to then discard the
+  // already processed events.
+  // |error| must be an eror, as in, |error.is_ok()| can't be true.
+  virtual void HandleError(Status error) = 0;
+};
+
+// ===== cbor_internals.h =====
+
+namespace cbor_internals {
+// The major types from RFC 7049 Section 2.1.
+enum class MajorType {
+  UNSIGNED = 0,
+  NEGATIVE = 1,
+  BYTE_STRING = 2,
+  STRING = 3,
+  ARRAY = 4,
+  MAP = 5,
+  TAG = 6,
+  SIMPLE_VALUE = 7
+};
+
+// Reads the start of a token with definitive size from |bytes|.
+// |type| is the major type as specified in RFC 7049 Section 2.1.
+// |value| is the payload (e.g. for MajorType::UNSIGNED) or is the size
+// (e.g. for BYTE_STRING).
+// If successful, returns the number of bytes read. Otherwise returns -1.
+int8_t ReadTokenStart(span<uint8_t> bytes, MajorType* type, uint64_t* value);
+
+// Writes the start of a token with |type|. The |value| may indicate the size,
+// or it may be the payload if the value is an unsigned integer.
+void WriteTokenStart(MajorType type, uint64_t value,
+                     std::vector<uint8_t>* encoded);
+}  // namespace cbor_internals
+
+// ===== cbor.h =====
+
+// The binary encoding for the inspector protocol follows the CBOR specification
+// (RFC 7049). Additional constraints:
+// - Only indefinite length maps and arrays are supported.
+// - Maps and arrays are wrapped with an envelope, that is, a
+//   CBOR tag with value 24 followed by a byte string specifying
+//   the byte length of the enclosed map / array. The byte string
+//   must use a 32 bit wide length.
+// - At the top level, a message must be an indefinite length map
+//   wrapped by an envelope.
+// - Maximal size for messages is 2^32 (4 GB).
+// - For scalars, we support only the int32_t range, encoded as
+//   UNSIGNED/NEGATIVE (major types 0 / 1).
+// - UTF16 strings, including with unbalanced surrogate pairs, are encoded
+//   as CBOR BYTE_STRING (major type 2). For such strings, the number of
+//   bytes encoded must be even.
+// - UTF8 strings (major type 3) may only have ASCII characters
+//   (7 bit US-ASCII).
+// - Arbitrary byte arrays, in the inspector protocol called 'binary',
+//   are encoded as BYTE_STRING (major type 2), prefixed with a byte
+//   indicating base64 when rendered as JSON.
+
+// Encodes |value| as |UNSIGNED| (major type 0) iff >= 0, or |NEGATIVE|
+// (major type 1) iff < 0.
+void EncodeInt32(int32_t value, std::vector<uint8_t>* out);
+
+// Encodes a UTF16 string as a BYTE_STRING (major type 2). Each utf16
+// character in |in| is emitted with most significant byte first,
+// appending to |out|.
+void EncodeString16(span<uint16_t> in, std::vector<uint8_t>* out);
+
+// Encodes a UTF8 string |in| as STRING (major type 3).
+void EncodeString8(span<uint8_t> in, std::vector<uint8_t>* out);
+
+// Encodes arbitrary binary data in |in| as a BYTE_STRING (major type 2) with
+// definitive length, prefixed with tag 22 indicating expected conversion to
+// base64 (see RFC 7049, Table 3 and Section 2.4.4.2).
+void EncodeBinary(span<uint8_t> in, std::vector<uint8_t>* out);
+
+// Encodes / decodes a double as Major type 7 (SIMPLE_VALUE),
+// with additional info = 27, followed by 8 bytes in big endian.
+void EncodeDouble(double value, std::vector<uint8_t>* out);
+
+// Some constants for CBOR tokens that only take a single byte on the wire.
+uint8_t EncodeTrue();
+uint8_t EncodeFalse();
+uint8_t EncodeNull();
+uint8_t EncodeIndefiniteLengthArrayStart();
+uint8_t EncodeIndefiniteLengthMapStart();
+uint8_t EncodeStop();
+
+// An envelope indicates the byte length of a wrapped item.
+// We use this for maps and array, which allows the decoder
+// to skip such (nested) values whole sale.
+// It's implemented as a CBOR tag (major type 6) with additional
+// info = 24, followed by a byte string with a 32 bit length value;
+// so the maximal structure that we can wrap is 2^32 bits long.
+// See also: https://tools.ietf.org/html/rfc7049#section-2.4.4.1
+class EnvelopeEncoder {
+ public:
+  // Emits the envelope start bytes and records the position for the
+  // byte size in |byte_size_pos_|. Also emits empty bytes for the
+  // byte sisze so that encoding can continue.
+  void EncodeStart(std::vector<uint8_t>* out);
+  // This records the current size in |out| at position byte_size_pos_.
+  // Returns true iff successful.
+  bool EncodeStop(std::vector<uint8_t>* out);
+
+ private:
+  std::vector<uint8_t>::size_type byte_size_pos_ = 0;
+};
+
+// This can be used to convert from JSON to CBOR, by passing the
+// return value to the routines in json_parser.h.  The handler will encode into
+// |out|, and iff an error occurs it will set |status| to an error and clear
+// |out|. Otherwise, |status.ok()| will be |true|.
+std::unique_ptr<JSONParserHandler> NewJSONToCBOREncoder(
+    std::vector<uint8_t>* out, Status* status);
+
+// Parses a CBOR encoded message from |bytes|, sending JSON events to
+// |json_out|. If an error occurs, sends |out->HandleError|, and parsing stops.
+// The client is responsible for discarding the already received information in
+// that case.
+void ParseCBOR(span<uint8_t> bytes, JSONParserHandler* json_out);
+
+// Tags for the tokens within a CBOR message that CBORStream understands.
+// Note that this is not the same terminology as the CBOR spec (RFC 7049),
+// but rather, our adaptation. For instance, we lump unsigned and signed
+// major type into INT32 here (and disallow values outside the int32_t range).
+enum class CBORTokenTag {
+  // Encountered an error in the structure of the message. Consult
+  // status() for details.
+  ERROR_VALUE,
+  // Booleans and NULL.
+  TRUE_VALUE,
+  FALSE_VALUE,
+  NULL_VALUE,
+  // An int32_t (signed 32 bit integer).
+  INT32,
+  // A double (64 bit floating point).
+  DOUBLE,
+  // A UTF8 string.
+  STRING8,
+  // A UTF16 string.
+  STRING16,
+  // A binary string.
+  BINARY,
+  // Starts an indefinite length map; after the map start we expect
+  // alternating keys and values, followed by STOP.
+  MAP_START,
+  // Starts an indefinite length array; after the array start we
+  // expect values, followed by STOP.
+  ARRAY_START,
+  // Ends a map or an array.
+  STOP,
+  // An envelope indicator, wrapping a map or array.
+  // Internally this carries the byte length of the wrapped
+  // map or array. While CBORTokenizer::Next() will read / skip the entire
+  // envelope, CBORTokenizer::EnterEnvelope() reads the tokens
+  // inside of it.
+  ENVELOPE,
+  // We've reached the end there is nothing else to read.
+  DONE,
+};
+
+// CBORTokenizer segments a CBOR message, presenting the tokens therein as
+// numbers, strings, etc. This is not a complete CBOR parser, but makes it much
+// easier to implement one (e.g. ParseCBOR, above). It can also be used to parse
+// messages partially.
+class CBORTokenizer {
+ public:
+  explicit CBORTokenizer(span<uint8_t> bytes);
+  ~CBORTokenizer();
+
+  // Identifies the current token that we're looking at,
+  // or ERROR_VALUE (in which ase ::Status() has details)
+  // or DONE (if we're past the last token).
+  CBORTokenTag TokenTag() const;
+
+  // Advances to the next token.
+  void Next();
+  // Can only be called if TokenTag() == CBORTokenTag::ENVELOPE.
+  // While Next() would skip past the entire envelope / what it's
+  // wrapping, EnterEnvelope positions the cursor inside of the envelope,
+  // letting the client explore the nested structure.
+  void EnterEnvelope();
+
+  // If TokenTag() is CBORTokenTag::ERROR_VALUE, then Status().error describes
+  // the error more precisely; otherwise it'll be set to Error::OK.
+  // In either case, Status().pos is the current position.
+  struct Status Status() const;
+
+  // The following methods retrieve the token values. They can only
+  // be called if TokenTag() matches.
+
+  // To be called only if ::TokenTag() == CBORTokenTag::INT32.
+  int32_t GetInt32() const;
+
+  // To be called only if ::TokenTag() == CBORTokenTag::DOUBLE.
+  double GetDouble() const;
+
+  // To be called only if ::TokenTag() == CBORTokenTag::STRING8.
+  span<uint8_t> GetString8() const;
+
+  // Wire representation for STRING16 is low byte first (little endian).
+  // To be called only if ::TokenTag() == CBORTokenTag::STRING16.
+  span<uint8_t> GetString16WireRep() const;
+
+  // To be called only if ::TokenTag() == CBORTokenTag::BINARY.
+  span<uint8_t> GetBinary() const;
+
+ private:
+  void ReadNextToken(bool enter_envelope);
+  void SetToken(CBORTokenTag token, std::ptrdiff_t token_byte_length);
+  void SetError(Error error);
+
+  span<uint8_t> bytes_;
+  CBORTokenTag token_tag_;
+  struct Status status_;
+  std::ptrdiff_t token_byte_length_;
+  cbor_internals::MajorType token_start_type_;
+  uint64_t token_start_internal_value_;
+};
+
+{% for namespace in config.protocol.namespace %}
+} // namespace {{namespace}}
+{% endfor %}
+
+#endif // !defined({{"_".join(config.protocol.namespace)}}_CBOR_h)
diff --git a/third_party/inspector_protocol/lib/base_string_adapter_h.template b/third_party/inspector_protocol/lib/base_string_adapter_h.template
index bf860b6..0c57998de 100644
--- a/third_party/inspector_protocol/lib/base_string_adapter_h.template
+++ b/third_party/inspector_protocol/lib/base_string_adapter_h.template
@@ -4,8 +4,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef {{"_".join(config.protocol.namespace)}}_Parser_h
-#define {{"_".join(config.protocol.namespace)}}_Parser_h
+#ifndef {{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H
+#define {{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H
 
 #include <memory>
 #include <string>
@@ -123,4 +123,4 @@
 } // namespace {{namespace}}
 {% endfor %}
 
-#endif // !defined({{"_".join(config.protocol.namespace)}}_Parser_h)
+#endif // !defined({{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H)
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h
index 37284a9..56479bd8 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h
@@ -80,6 +80,13 @@
 #endif 	/* __IAccessible2_3_FWD_DEFINED__ */

 

 

+#ifndef __IAccessible2_4_FWD_DEFINED__

+#define __IAccessible2_4_FWD_DEFINED__

+typedef interface IAccessible2_4 IAccessible2_4;

+

+#endif 	/* __IAccessible2_4_FWD_DEFINED__ */

+

+

 #ifndef __IAccessibleComponent_FWD_DEFINED__

 #define __IAccessibleComponent_FWD_DEFINED__

 typedef interface IAccessibleComponent IAccessibleComponent;

@@ -2243,15 +2250,491 @@
 #endif 	/* __IAccessible2_3_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0005 */

+#ifndef __IAccessible2_4_INTERFACE_DEFINED__

+#define __IAccessible2_4_INTERFACE_DEFINED__

+

+/* interface IAccessible2_4 */

+/* [uuid][object] */ 

+

+

+EXTERN_C const IID IID_IAccessible2_4;

+

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

+    

+    MIDL_INTERFACE("610a7bec-91bb-444d-a336-a0daf13c4c29")

+    IAccessible2_4 : public IAccessible2_3

+    {

+    public:

+        virtual HRESULT STDMETHODCALLTYPE setSelectionRanges( 

+            /* [in] */ long nRanges,

+            /* [size_is][in] */ IA2Range *ranges) = 0;

+        

+    };

+    

+    

+#else 	/* C style interface */

+

+    typedef struct IAccessible2_4Vtbl

+    {

+        BEGIN_INTERFACE

+        

+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 

+            IAccessible2_4 * This,

+            /* [in] */ REFIID riid,

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

+            _COM_Outptr_  void **ppvObject);

+        

+        ULONG ( STDMETHODCALLTYPE *AddRef )( 

+            IAccessible2_4 * This);

+        

+        ULONG ( STDMETHODCALLTYPE *Release )( 

+            IAccessible2_4 * This);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 

+            IAccessible2_4 * This,

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

+        

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 

+            IAccessible2_4 * This,

+            /* [in] */ UINT iTInfo,

+            /* [in] */ LCID lcid,

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

+        

+        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 

+            IAccessible2_4 * This,

+            /* [in] */ REFIID riid,

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

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

+            /* [in] */ LCID lcid,

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

+        

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

+            IAccessible2_4 * 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);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( 

+            IAccessible2_4 * This,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( 

+            IAccessible2_4 * This,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( 

+            IAccessible2_4 * This,

+            /* [in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ VARIANT *pvarRole);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ VARIANT *pvarState);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( 

+            IAccessible2_4 * This,

+            /* [out] */ BSTR *pszHelpFile,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ VARIANT *pvarChild);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ VARIANT *pvarChildren);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

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

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( 

+            IAccessible2_4 * This,

+            /* [in] */ long flagsSelect,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( 

+            IAccessible2_4 * This,

+            /* [out] */ long *pxLeft,

+            /* [out] */ long *pyTop,

+            /* [out] */ long *pcxWidth,

+            /* [out] */ long *pcyHeight,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( 

+            IAccessible2_4 * This,

+            /* [in] */ long navDir,

+            /* [optional][in] */ VARIANT varStart,

+            /* [retval][out] */ VARIANT *pvarEndUpAt);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( 

+            IAccessible2_4 * This,

+            /* [in] */ long xLeft,

+            /* [in] */ long yTop,

+            /* [retval][out] */ VARIANT *pvarChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [in] */ BSTR szName);

+        

+        /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [in] */ BSTR szValue);

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

+            /* [in] */ long relationIndex,

+            /* [retval][out] */ IAccessibleRelation **relation);

+        

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

+            IAccessible2_4 * This,

+            /* [in] */ long maxRelations,

+            /* [length_is][size_is][out] */ IAccessibleRelation **relations,

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

+        

+        HRESULT ( STDMETHODCALLTYPE *role )( 

+            IAccessible2_4 * This,

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

+        

+        HRESULT ( STDMETHODCALLTYPE *scrollTo )( 

+            IAccessible2_4 * This,

+            /* [in] */ enum IA2ScrollType scrollType);

+        

+        HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( 

+            IAccessible2_4 * This,

+            /* [in] */ enum IA2CoordinateType coordinateType,

+            /* [in] */ long x,

+            /* [in] */ long y);

+        

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

+            IAccessible2_4 * This,

+            /* [out] */ long *groupLevel,

+            /* [out] */ long *similarItemsInGroup,

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

+        

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

+            IAccessible2_4 * This,

+            /* [retval][out] */ AccessibleStates *states);

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

+            /* [in] */ long maxExtendedStates,

+            /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,

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

+        

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

+            IAccessible2_4 * This,

+            /* [in] */ long maxLocalizedExtendedStates,

+            /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,

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

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

+            /* [retval][out] */ HWND *windowHandle);

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

+            /* [retval][out] */ IA2Locale *locale);

+        

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

+            IAccessible2_4 * This,

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

+        

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

+            IAccessible2_4 * This,

+            /* [in] */ BSTR name,

+            /* [retval][out] */ VARIANT *attribute);

+        

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

+            IAccessible2_4 * This,

+            /* [out] */ IUnknown **accessible,

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

+        

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

+            IAccessible2_4 * This,

+            /* [in] */ BSTR type,

+            /* [in] */ long maxTargets,

+            /* [size_is][size_is][out] */ IUnknown ***targets,

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

+        

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

+            IAccessible2_4 * This,

+            /* [size_is][size_is][out] */ IA2Range **ranges,

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

+        

+        HRESULT ( STDMETHODCALLTYPE *setSelectionRanges )( 

+            IAccessible2_4 * This,

+            /* [in] */ long nRanges,

+            /* [size_is][in] */ IA2Range *ranges);

+        

+        END_INTERFACE

+    } IAccessible2_4Vtbl;

+

+    interface IAccessible2_4

+    {

+        CONST_VTBL struct IAccessible2_4Vtbl *lpVtbl;

+    };

+

+    

+

+#ifdef COBJMACROS

+

+

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

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

+

+#define IAccessible2_4_AddRef(This)	\

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

+

+#define IAccessible2_4_Release(This)	\

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

+

+

+#define IAccessible2_4_GetTypeInfoCount(This,pctinfo)	\

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

+

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

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

+

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

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

+

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

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

+

+

+#define IAccessible2_4_get_accParent(This,ppdispParent)	\

+    ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) 

+

+#define IAccessible2_4_get_accChildCount(This,pcountChildren)	\

+    ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) 

+

+#define IAccessible2_4_get_accChild(This,varChild,ppdispChild)	\

+    ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) 

+

+#define IAccessible2_4_get_accName(This,varChild,pszName)	\

+    ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) 

+

+#define IAccessible2_4_get_accValue(This,varChild,pszValue)	\

+    ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) 

+

+#define IAccessible2_4_get_accDescription(This,varChild,pszDescription)	\

+    ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) 

+

+#define IAccessible2_4_get_accRole(This,varChild,pvarRole)	\

+    ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) 

+

+#define IAccessible2_4_get_accState(This,varChild,pvarState)	\

+    ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) 

+

+#define IAccessible2_4_get_accHelp(This,varChild,pszHelp)	\

+    ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) 

+

+#define IAccessible2_4_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic)	\

+    ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) 

+

+#define IAccessible2_4_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut)	\

+    ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) 

+

+#define IAccessible2_4_get_accFocus(This,pvarChild)	\

+    ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) 

+

+#define IAccessible2_4_get_accSelection(This,pvarChildren)	\

+    ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) 

+

+#define IAccessible2_4_get_accDefaultAction(This,varChild,pszDefaultAction)	\

+    ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) 

+

+#define IAccessible2_4_accSelect(This,flagsSelect,varChild)	\

+    ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) 

+

+#define IAccessible2_4_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild)	\

+    ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) 

+

+#define IAccessible2_4_accNavigate(This,navDir,varStart,pvarEndUpAt)	\

+    ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) 

+

+#define IAccessible2_4_accHitTest(This,xLeft,yTop,pvarChild)	\

+    ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) 

+

+#define IAccessible2_4_accDoDefaultAction(This,varChild)	\

+    ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) 

+

+#define IAccessible2_4_put_accName(This,varChild,szName)	\

+    ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) 

+

+#define IAccessible2_4_put_accValue(This,varChild,szValue)	\

+    ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) 

+

+

+#define IAccessible2_4_get_nRelations(This,nRelations)	\

+    ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) 

+

+#define IAccessible2_4_get_relation(This,relationIndex,relation)	\

+    ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) 

+

+#define IAccessible2_4_get_relations(This,maxRelations,relations,nRelations)	\

+    ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) 

+

+#define IAccessible2_4_role(This,role)	\

+    ( (This)->lpVtbl -> role(This,role) ) 

+

+#define IAccessible2_4_scrollTo(This,scrollType)	\

+    ( (This)->lpVtbl -> scrollTo(This,scrollType) ) 

+

+#define IAccessible2_4_scrollToPoint(This,coordinateType,x,y)	\

+    ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) 

+

+#define IAccessible2_4_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup)	\

+    ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) 

+

+#define IAccessible2_4_get_states(This,states)	\

+    ( (This)->lpVtbl -> get_states(This,states) ) 

+

+#define IAccessible2_4_get_extendedRole(This,extendedRole)	\

+    ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) 

+

+#define IAccessible2_4_get_localizedExtendedRole(This,localizedExtendedRole)	\

+    ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) 

+

+#define IAccessible2_4_get_nExtendedStates(This,nExtendedStates)	\

+    ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) 

+

+#define IAccessible2_4_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates)	\

+    ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) 

+

+#define IAccessible2_4_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates)	\

+    ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) 

+

+#define IAccessible2_4_get_uniqueID(This,uniqueID)	\

+    ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) 

+

+#define IAccessible2_4_get_windowHandle(This,windowHandle)	\

+    ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) 

+

+#define IAccessible2_4_get_indexInParent(This,indexInParent)	\

+    ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) 

+

+#define IAccessible2_4_get_locale(This,locale)	\

+    ( (This)->lpVtbl -> get_locale(This,locale) ) 

+

+#define IAccessible2_4_get_attributes(This,attributes)	\

+    ( (This)->lpVtbl -> get_attributes(This,attributes) ) 

+

+

+#define IAccessible2_4_get_attribute(This,name,attribute)	\

+    ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) 

+

+#define IAccessible2_4_get_accessibleWithCaret(This,accessible,caretOffset)	\

+    ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) 

+

+#define IAccessible2_4_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets)	\

+    ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) 

+

+

+#define IAccessible2_4_get_selectionRanges(This,ranges,nRanges)	\

+    ( (This)->lpVtbl -> get_selectionRanges(This,ranges,nRanges) ) 

+

+

+#define IAccessible2_4_setSelectionRanges(This,nRanges,ranges)	\

+    ( (This)->lpVtbl -> setSelectionRanges(This,nRanges,ranges) ) 

+

+#endif /* COBJMACROS */

+

+

+#endif 	/* C style interface */

+

+

+

+

+#endif 	/* __IAccessible2_4_INTERFACE_DEFINED__ */

+

+

+/* interface __MIDL_itf_ia2_api_all_0000_0006 */

 /* [local] */ 

 

 typedef long IA2Color;

 

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec;

 

 #ifndef __IAccessibleComponent_INTERFACE_DEFINED__

 #define __IAccessibleComponent_INTERFACE_DEFINED__

@@ -2465,7 +2948,7 @@
 #endif 	/* __IAccessibleValue_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0007 */

+/* interface __MIDL_itf_ia2_api_all_0000_0008 */

 /* [local] */ 

 

 typedef struct IA2TextSegment

@@ -2487,8 +2970,8 @@
     } ;

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_s_ifspec;

 

 #ifndef __IAccessibleText_INTERFACE_DEFINED__

 #define __IAccessibleText_INTERFACE_DEFINED__

@@ -4943,7 +5426,7 @@
 #endif 	/* __IAccessibleImage_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0017 */

+/* interface __MIDL_itf_ia2_api_all_0000_0018 */

 /* [local] */ 

 

 

@@ -4987,8 +5470,8 @@
     } ;

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec;

 

 #ifndef __IAccessibleApplication_INTERFACE_DEFINED__

 #define __IAccessibleApplication_INTERFACE_DEFINED__

@@ -5180,7 +5663,7 @@
 #endif 	/* __IAccessibleDocument_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0019 */

+/* interface __MIDL_itf_ia2_api_all_0000_0020 */

 /* [local] */ 

 

 

@@ -5188,8 +5671,8 @@
 

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_s_ifspec;

 

 

 #ifndef __IAccessible2Lib_LIBRARY_DEFINED__

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c
index 6864dd1..99364896 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c
@@ -82,6 +82,9 @@
 MIDL_DEFINE_GUID(IID, IID_IAccessible2_3,0x5BE18059,0x762E,0x4E73,0x94,0x76,0xAB,0xA2,0x94,0xFE,0xD4,0x11);

 

 

+MIDL_DEFINE_GUID(IID, IID_IAccessible2_4,0x610a7bec,0x91bb,0x444d,0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29);

+

+

 MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);

 

 

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c
index 2b97baf..862c1f1 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c
@@ -46,8 +46,8 @@
 

 #include "ia2_api_all.h"

 

-#define TYPE_FORMAT_STRING_SIZE   1519                              

-#define PROC_FORMAT_STRING_SIZE   6071                              

+#define TYPE_FORMAT_STRING_SIZE   1545                              

+#define PROC_FORMAT_STRING_SIZE   6119                              

 #define EXPR_FORMAT_STRING_SIZE   1                                 

 #define TRANSMIT_AS_TABLE_SIZE    0            

 #define WIRE_MARSHAL_TABLE_SIZE   3            

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

 

 

+extern const MIDL_SERVER_INFO IAccessible2_4_ServerInfo;

+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo;

+

+

+extern const MIDL_STUB_DESC Object_StubDesc;

+

+

 extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;

 extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;

 

@@ -1662,21 +1669,21 @@
 /* 1556 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_locationInParent */

+	/* Procedure setSelectionRanges */

 

 /* 1558 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1564 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1564 */	NdrFcShort( 0x32 ),	/* 50 */

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

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

-/* 1570 */	NdrFcShort( 0x40 ),	/* 64 */

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

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

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

+/* 1572 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 1574 */	0xe,		/* 14 */

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

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

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

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

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

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

 /* 1582 */	NdrFcShort( 0x3 ),	/* 3 */

 /* 1584 */	0x3,		/* 3 */

@@ -1684,19 +1691,18 @@
 /* 1586 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter x */

+	/* Parameter nRanges */

 

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

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

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

 /* 1592 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter y */

+	/* Parameter ranges */

 

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

+/* 1594 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

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

-/* 1598 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 1598 */	NdrFcShort( 0x51c ),	/* Type Offset=1308 */

 

 	/* Return value */

 

@@ -1705,180 +1711,223 @@
 /* 1604 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_foreground */

+	/* Procedure get_locationInParent */

 

 /* 1606 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1612 */	NdrFcShort( 0x4 ),	/* 4 */

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

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

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

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

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

+/* 1618 */	NdrFcShort( 0x40 ),	/* 64 */

 /* 1620 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 1622 */	0xe,		/* 14 */

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

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

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

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

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

-/* 1632 */	0x2,		/* 2 */

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

+/* 1632 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 1634 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

-	/* Parameter foreground */

+	/* Parameter x */

 

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

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

 /* 1640 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter y */

 

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

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

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

 /* 1646 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

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

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

+/* 1652 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_foreground */

+

+/* 1654 */	0x33,		/* FC_AUTO_HANDLE */

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

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

+/* 1660 */	NdrFcShort( 0x4 ),	/* 4 */

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

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

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

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

+			0x2,		/* 2 */

+/* 1670 */	0xe,		/* 14 */

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

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

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

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

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

+/* 1680 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 1682 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter foreground */

+

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

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

+/* 1688 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

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

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

+/* 1694 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_currentValue */

 

-/* 1648 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1696 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1654 */	NdrFcShort( 0x3 ),	/* 3 */

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 1664 */	0xe,		/* 14 */

+/* 1712 */	0xe,		/* 14 */

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

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

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

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

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

-/* 1674 */	0x2,		/* 2 */

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

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

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

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

+/* 1722 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1676 */	0x81,		/* 129 */

+/* 1724 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter currentValue */

 

-/* 1678 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

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

-/* 1682 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 1726 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

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

+/* 1730 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

 

 	/* Return value */

 

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

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

-/* 1688 */	0x8,		/* FC_LONG */

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

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

+/* 1736 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setCurrentValue */

 

-/* 1690 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1738 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1696 */	NdrFcShort( 0x4 ),	/* 4 */

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

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

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

-/* 1704 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

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

+/* 1744 */	NdrFcShort( 0x4 ),	/* 4 */

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

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

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

+/* 1752 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1706 */	0xe,		/* 14 */

+/* 1754 */	0xe,		/* 14 */

 			0x85,		/* Ext Flags:  new corr desc, srv corr check, has big byval param */

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

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

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

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

-/* 1716 */	0x2,		/* 2 */

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

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

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

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

+/* 1764 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1718 */	0x81,		/* 129 */

+/* 1766 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter value */

 

-/* 1720 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

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

-/* 1724 */	NdrFcShort( 0x520 ),	/* Type Offset=1312 */

+/* 1768 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

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

+/* 1772 */	NdrFcShort( 0x53a ),	/* Type Offset=1338 */

 

 	/* Return value */

 

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

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

-/* 1730 */	0x8,		/* FC_LONG */

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

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

+/* 1778 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_maximumValue */

 

-/* 1732 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1780 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1738 */	NdrFcShort( 0x5 ),	/* 5 */

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

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

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

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

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

+/* 1786 */	NdrFcShort( 0x5 ),	/* 5 */

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

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

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

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

 			0x2,		/* 2 */

-/* 1748 */	0xe,		/* 14 */

+/* 1796 */	0xe,		/* 14 */

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

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

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

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

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

-/* 1758 */	0x2,		/* 2 */

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

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

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

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

+/* 1806 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1760 */	0x81,		/* 129 */

+/* 1808 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter maximumValue */

 

-/* 1762 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

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

-/* 1766 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 1810 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

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

+/* 1814 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

 

 	/* Return value */

 

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

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

-/* 1772 */	0x8,		/* FC_LONG */

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

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

+/* 1820 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_minimumValue */

 

-/* 1774 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1822 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1780 */	NdrFcShort( 0x6 ),	/* 6 */

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

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

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

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

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

+/* 1828 */	NdrFcShort( 0x6 ),	/* 6 */

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

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

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

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

 			0x2,		/* 2 */

-/* 1790 */	0xe,		/* 14 */

+/* 1838 */	0xe,		/* 14 */

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

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

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

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

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

-/* 1800 */	0x2,		/* 2 */

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

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

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

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

+/* 1848 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 1802 */	0x81,		/* 129 */

+/* 1850 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter minimumValue */

 

-/* 1804 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

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

-/* 1808 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 1852 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

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

+/* 1856 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

 

 	/* Return value */

 

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

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

-/* 1814 */	0x8,		/* FC_LONG */

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

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

+/* 1862 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure copyText */

@@ -1886,24 +1935,24 @@
 

 	/* Procedure addSelection */

 

-/* 1816 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1864 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1822 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1824 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

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

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

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

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

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

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

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

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

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

 			0x3,		/* 3 */

-/* 1832 */	0xe,		/* 14 */

+/* 1880 */	0xe,		/* 14 */

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

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

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

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

-/* 1840 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1842 */	0x3,		/* 3 */

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

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

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

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

+/* 1890 */	0x3,		/* 3 */

 			0x80,		/* 128 */

-/* 1844 */	0x81,		/* 129 */

+/* 1892 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

 	/* Parameter startOffset */

@@ -1911,9 +1960,9 @@
 

 	/* Parameter startOffset */

 

-/* 1846 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 1850 */	0x8,		/* FC_LONG */

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

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

+/* 1898 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

@@ -1921,9 +1970,9 @@
 

 	/* Parameter endOffset */

 

-/* 1852 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 1856 */	0x8,		/* FC_LONG */

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

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

+/* 1904 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -1931,142 +1980,142 @@
 

 	/* Return value */

 

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

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

-/* 1862 */	0x8,		/* FC_LONG */

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

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

+/* 1910 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_attributes */

 

-/* 1864 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1912 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1870 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1872 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

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

-/* 1876 */	NdrFcShort( 0x40 ),	/* 64 */

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

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

+/* 1918 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1920 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

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

+/* 1924 */	NdrFcShort( 0x40 ),	/* 64 */

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

 			0x5,		/* 5 */

-/* 1880 */	0x10,		/* 16 */

+/* 1928 */	0x10,		/* 16 */

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

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

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

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

-/* 1888 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 1890 */	0x5,		/* 5 */

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

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

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

+/* 1936 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 1938 */	0x5,		/* 5 */

 			0x80,		/* 128 */

-/* 1892 */	0x81,		/* 129 */

+/* 1940 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 1894 */	0x83,		/* 131 */

+/* 1942 */	0x83,		/* 131 */

 			0x84,		/* 132 */

 

 	/* Parameter offset */

 

-/* 1896 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 1900 */	0x8,		/* FC_LONG */

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

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

+/* 1948 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

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

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

-/* 1906 */	0x8,		/* FC_LONG */

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

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

+/* 1954 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

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

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

-/* 1912 */	0x8,		/* FC_LONG */

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

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

+/* 1960 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter textAttributes */

 

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

-/* 1916 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 1918 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

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

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

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

 

 	/* Return value */

 

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

-/* 1922 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 1924 */	0x8,		/* FC_LONG */

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

+/* 1970 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 1972 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_characterExtents */

 

-/* 1926 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1974 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 1932 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 1934 */	NdrFcShort( 0x40 ),	/* ARM64 Stack size/offset = 64 */

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

-/* 1938 */	NdrFcShort( 0x78 ),	/* 120 */

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

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

+/* 1980 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 1982 */	NdrFcShort( 0x40 ),	/* ARM64 Stack size/offset = 64 */

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

+/* 1986 */	NdrFcShort( 0x78 ),	/* 120 */

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

 			0x7,		/* 7 */

-/* 1942 */	0x12,		/* 18 */

+/* 1990 */	0x12,		/* 18 */

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

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

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

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

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

-/* 1952 */	0x7,		/* 7 */

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

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

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

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

+/* 2000 */	0x7,		/* 7 */

 			0x80,		/* 128 */

-/* 1954 */	0x81,		/* 129 */

+/* 2002 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 1956 */	0x83,		/* 131 */

+/* 2004 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 1958 */	0x85,		/* 133 */

+/* 2006 */	0x85,		/* 133 */

 			0x86,		/* 134 */

 

 	/* Parameter offset */

 

-/* 1960 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 1964 */	0x8,		/* FC_LONG */

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

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

+/* 2012 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordType */

 

-/* 1966 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 1970 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2018 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

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

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

-/* 1976 */	0x8,		/* FC_LONG */

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

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

+/* 2024 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

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

-/* 1980 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 1982 */	0x8,		/* FC_LONG */

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

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

+/* 2030 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter width */

 

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

-/* 1986 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 1988 */	0x8,		/* FC_LONG */

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

+/* 2034 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 2036 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter height */

 

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

-/* 1992 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 1994 */	0x8,		/* FC_LONG */

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

+/* 2040 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2042 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

-/* 1998 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

-/* 2000 */	0x8,		/* FC_LONG */

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

+/* 2046 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

+/* 2048 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nRows */

@@ -2074,24 +2123,24 @@
 

 	/* Procedure get_nSelections */

 

-/* 2002 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2050 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 2018 */	0xe,		/* 14 */

+/* 2066 */	0xe,		/* 14 */

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

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

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

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

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

-/* 2028 */	0x2,		/* 2 */

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

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

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

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

+/* 2076 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2030 */	0x81,		/* 129 */

+/* 2078 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter rowCount */

@@ -2099,9 +2148,9 @@
 

 	/* Parameter nSelections */

 

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

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

-/* 2036 */	0x8,		/* FC_LONG */

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

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

+/* 2084 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -2109,848 +2158,805 @@
 

 	/* Return value */

 

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

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

-/* 2042 */	0x8,		/* FC_LONG */

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

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

+/* 2090 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_offsetAtPoint */

 

-/* 2044 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2092 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2052 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

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

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

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

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

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

+/* 2100 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

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

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

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

 			0x5,		/* 5 */

-/* 2060 */	0x10,		/* 16 */

+/* 2108 */	0x10,		/* 16 */

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

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

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

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

-/* 2068 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 2070 */	0x5,		/* 5 */

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

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

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

+/* 2116 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2118 */	0x5,		/* 5 */

 			0x80,		/* 128 */

-/* 2072 */	0x81,		/* 129 */

+/* 2120 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2074 */	0x83,		/* 131 */

+/* 2122 */	0x83,		/* 131 */

 			0x84,		/* 132 */

 

 	/* Parameter x */

 

-/* 2076 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2080 */	0x8,		/* FC_LONG */

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

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

+/* 2128 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 2082 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2086 */	0x8,		/* FC_LONG */

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

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

+/* 2134 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordType */

 

-/* 2088 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2092 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2140 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

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

-/* 2096 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2098 */	0x8,		/* FC_LONG */

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

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

+/* 2146 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

-/* 2102 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2104 */	0x8,		/* FC_LONG */

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

+/* 2150 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 2152 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selection */

 

-/* 2106 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2154 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 2112 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2114 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

-/* 2118 */	NdrFcShort( 0x40 ),	/* 64 */

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

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

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

+/* 2162 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

+/* 2166 */	NdrFcShort( 0x40 ),	/* 64 */

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

 			0x4,		/* 4 */

-/* 2122 */	0x10,		/* 16 */

+/* 2170 */	0x10,		/* 16 */

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

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

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

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

-/* 2130 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2132 */	0x4,		/* 4 */

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

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

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

+/* 2178 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 2180 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 2134 */	0x81,		/* 129 */

+/* 2182 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2136 */	0x83,		/* 131 */

+/* 2184 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2138 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2142 */	0x8,		/* FC_LONG */

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

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

+/* 2190 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

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

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

-/* 2148 */	0x8,		/* FC_LONG */

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

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

+/* 2196 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

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

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

-/* 2154 */	0x8,		/* FC_LONG */

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

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

+/* 2202 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

-/* 2158 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2160 */	0x8,		/* FC_LONG */

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

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

+/* 2208 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_text */

 

-/* 2162 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2210 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2170 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

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

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

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

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

+/* 2218 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

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

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

 			0x4,		/* 4 */

-/* 2178 */	0x10,		/* 16 */

+/* 2226 */	0x10,		/* 16 */

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

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

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

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

-/* 2186 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2188 */	0x4,		/* 4 */

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

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

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

+/* 2234 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 2236 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 2190 */	0x81,		/* 129 */

+/* 2238 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2192 */	0x83,		/* 131 */

+/* 2240 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2194 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2198 */	0x8,		/* FC_LONG */

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

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

+/* 2246 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2200 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2204 */	0x8,		/* FC_LONG */

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

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

+/* 2252 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

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

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

-/* 2210 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

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

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

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

 

 	/* Return value */

 

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

-/* 2214 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2216 */	0x8,		/* FC_LONG */

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

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

+/* 2264 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textBeforeOffset */

 

-/* 2218 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2266 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2226 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

-/* 2230 */	NdrFcShort( 0x40 ),	/* 64 */

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

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

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

+/* 2274 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

+/* 2278 */	NdrFcShort( 0x40 ),	/* 64 */

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

 			0x6,		/* 6 */

-/* 2234 */	0x12,		/* 18 */

+/* 2282 */	0x12,		/* 18 */

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

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

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

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

-/* 2242 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2244 */	0x6,		/* 6 */

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

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

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

+/* 2290 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2292 */	0x6,		/* 6 */

 			0x80,		/* 128 */

-/* 2246 */	0x81,		/* 129 */

+/* 2294 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2248 */	0x83,		/* 131 */

+/* 2296 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 2250 */	0x85,		/* 133 */

+/* 2298 */	0x85,		/* 133 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 2252 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2256 */	0x8,		/* FC_LONG */

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

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

+/* 2304 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2258 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2262 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2310 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

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

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

-/* 2268 */	0x8,		/* FC_LONG */

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

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

+/* 2316 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

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

-/* 2272 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2274 */	0x8,		/* FC_LONG */

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

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

+/* 2322 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

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

-/* 2278 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2280 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

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

+/* 2326 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

 

 	/* Return value */

 

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

-/* 2284 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 2286 */	0x8,		/* FC_LONG */

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

+/* 2332 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2334 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textAfterOffset */

 

-/* 2288 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2336 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2296 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

-/* 2300 */	NdrFcShort( 0x40 ),	/* 64 */

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

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

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

+/* 2344 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

+/* 2348 */	NdrFcShort( 0x40 ),	/* 64 */

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

 			0x6,		/* 6 */

-/* 2304 */	0x12,		/* 18 */

+/* 2352 */	0x12,		/* 18 */

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

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

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

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

-/* 2312 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2314 */	0x6,		/* 6 */

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

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

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

+/* 2360 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2362 */	0x6,		/* 6 */

 			0x80,		/* 128 */

-/* 2316 */	0x81,		/* 129 */

+/* 2364 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2318 */	0x83,		/* 131 */

+/* 2366 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 2320 */	0x85,		/* 133 */

+/* 2368 */	0x85,		/* 133 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 2322 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2326 */	0x8,		/* FC_LONG */

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

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

+/* 2374 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2328 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2332 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2380 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

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

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

-/* 2338 */	0x8,		/* FC_LONG */

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

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

+/* 2386 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

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

-/* 2342 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2344 */	0x8,		/* FC_LONG */

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

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

+/* 2392 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

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

-/* 2348 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2350 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

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

+/* 2396 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

 

 	/* Return value */

 

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

-/* 2354 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 2356 */	0x8,		/* FC_LONG */

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

+/* 2402 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2404 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textAtOffset */

 

-/* 2358 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2406 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2366 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

-/* 2370 */	NdrFcShort( 0x40 ),	/* 64 */

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

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

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

+/* 2414 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

+/* 2418 */	NdrFcShort( 0x40 ),	/* 64 */

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

 			0x6,		/* 6 */

-/* 2374 */	0x12,		/* 18 */

+/* 2422 */	0x12,		/* 18 */

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

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

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

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

-/* 2382 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2384 */	0x6,		/* 6 */

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

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

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

+/* 2430 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2432 */	0x6,		/* 6 */

 			0x80,		/* 128 */

-/* 2386 */	0x81,		/* 129 */

+/* 2434 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2388 */	0x83,		/* 131 */

+/* 2436 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 2390 */	0x85,		/* 133 */

+/* 2438 */	0x85,		/* 133 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 2392 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2396 */	0x8,		/* FC_LONG */

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

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

+/* 2444 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2398 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2402 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2450 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

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

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

-/* 2408 */	0x8,		/* FC_LONG */

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

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

+/* 2456 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

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

-/* 2412 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2414 */	0x8,		/* FC_LONG */

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

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

+/* 2462 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

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

-/* 2418 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2420 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

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

+/* 2466 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

 

 	/* Return value */

 

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

-/* 2424 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 2426 */	0x8,		/* FC_LONG */

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

+/* 2472 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2474 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure removeSelection */

 

-/* 2428 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2476 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 2444 */	0xe,		/* 14 */

+/* 2492 */	0xe,		/* 14 */

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

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

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

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

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

-/* 2454 */	0x2,		/* 2 */

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

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

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

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

+/* 2502 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2456 */	0x81,		/* 129 */

+/* 2504 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2458 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2462 */	0x8,		/* FC_LONG */

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

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

+/* 2510 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

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

-/* 2468 */	0x8,		/* FC_LONG */

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

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

+/* 2516 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setCaretOffset */

 

-/* 2470 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2518 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 2486 */	0xe,		/* 14 */

+/* 2534 */	0xe,		/* 14 */

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

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

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

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

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

-/* 2496 */	0x2,		/* 2 */

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

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

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

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

+/* 2544 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2498 */	0x81,		/* 129 */

+/* 2546 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 2500 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2504 */	0x8,		/* FC_LONG */

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

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

+/* 2552 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

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

-/* 2510 */	0x8,		/* FC_LONG */

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

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

+/* 2558 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setSelection */

 

-/* 2512 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2560 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2520 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2522 */	NdrFcShort( 0x18 ),	/* 24 */

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

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

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

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

+/* 2568 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 2570 */	NdrFcShort( 0x18 ),	/* 24 */

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

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

 			0x4,		/* 4 */

-/* 2528 */	0x10,		/* 16 */

+/* 2576 */	0x10,		/* 16 */

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

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

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

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

-/* 2536 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2538 */	0x4,		/* 4 */

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

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

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

+/* 2584 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 2586 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 2540 */	0x81,		/* 129 */

+/* 2588 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2542 */	0x83,		/* 131 */

+/* 2590 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2544 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2548 */	0x8,		/* FC_LONG */

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

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

+/* 2596 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2550 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2554 */	0x8,		/* FC_LONG */

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

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

+/* 2602 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2556 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2560 */	0x8,		/* FC_LONG */

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

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

+/* 2608 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

-/* 2564 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2566 */	0x8,		/* FC_LONG */

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

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

+/* 2614 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nCharacters */

 

-/* 2568 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2616 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 2584 */	0xe,		/* 14 */

+/* 2632 */	0xe,		/* 14 */

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

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

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

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

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

-/* 2594 */	0x2,		/* 2 */

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

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

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

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

+/* 2642 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2596 */	0x81,		/* 129 */

+/* 2644 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter nCharacters */

 

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

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

-/* 2602 */	0x8,		/* FC_LONG */

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

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

+/* 2650 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

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

-/* 2608 */	0x8,		/* FC_LONG */

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

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

+/* 2656 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure scrollSubstringTo */

 

-/* 2610 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2658 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2618 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

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

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

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

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

+/* 2666 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

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

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

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

 			0x4,		/* 4 */

-/* 2626 */	0x10,		/* 16 */

+/* 2674 */	0x10,		/* 16 */

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

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

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

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

-/* 2634 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2636 */	0x4,		/* 4 */

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

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

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

+/* 2682 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 2684 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 2638 */	0x81,		/* 129 */

+/* 2686 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2640 */	0x83,		/* 131 */

+/* 2688 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter startIndex */

 

-/* 2642 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2646 */	0x8,		/* FC_LONG */

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

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

+/* 2694 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endIndex */

 

-/* 2648 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2652 */	0x8,		/* FC_LONG */

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

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

+/* 2700 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter scrollType */

 

-/* 2654 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2658 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2706 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

-/* 2662 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2664 */	0x8,		/* FC_LONG */

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

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

+/* 2712 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure scrollSubstringToPoint */

 

-/* 2666 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2714 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2674 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

-/* 2676 */	NdrFcShort( 0x26 ),	/* 38 */

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

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

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

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

+/* 2722 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

+/* 2724 */	NdrFcShort( 0x26 ),	/* 38 */

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

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

 			0x6,		/* 6 */

-/* 2682 */	0x12,		/* 18 */

+/* 2730 */	0x12,		/* 18 */

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

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

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

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

-/* 2690 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2692 */	0x6,		/* 6 */

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

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

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

+/* 2738 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2740 */	0x6,		/* 6 */

 			0x80,		/* 128 */

-/* 2694 */	0x81,		/* 129 */

+/* 2742 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2696 */	0x83,		/* 131 */

+/* 2744 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 2698 */	0x85,		/* 133 */

+/* 2746 */	0x85,		/* 133 */

 			0x0,		/* 0 */

 

 	/* Parameter startIndex */

 

-/* 2700 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2704 */	0x8,		/* FC_LONG */

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

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

+/* 2752 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endIndex */

 

-/* 2706 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2710 */	0x8,		/* FC_LONG */

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

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

+/* 2758 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordinateType */

 

-/* 2712 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2716 */	0xd,		/* FC_ENUM16 */

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

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

+/* 2764 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 2718 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2720 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2722 */	0x8,		/* FC_LONG */

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

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

+/* 2770 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 2724 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2726 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2728 */	0x8,		/* FC_LONG */

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

+/* 2774 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 2776 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

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

-/* 2732 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 2734 */	0x8,		/* FC_LONG */

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

+/* 2780 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 2782 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_newText */

 

-/* 2736 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2784 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 2752 */	0xe,		/* 14 */

+/* 2800 */	0xe,		/* 14 */

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

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

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

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

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

-/* 2762 */	0x2,		/* 2 */

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

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

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

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

+/* 2810 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2764 */	0x81,		/* 129 */

+/* 2812 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter newText */

 

-/* 2766 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

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

-/* 2770 */	NdrFcShort( 0x52e ),	/* Type Offset=1326 */

+/* 2814 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

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

+/* 2818 */	NdrFcShort( 0x548 ),	/* Type Offset=1352 */

 

 	/* Return value */

 

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

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

-/* 2776 */	0x8,		/* FC_LONG */

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

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

+/* 2824 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_oldText */

 

-/* 2778 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2826 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

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

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

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

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

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

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

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

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

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

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

 			0x2,		/* 2 */

-/* 2794 */	0xe,		/* 14 */

+/* 2842 */	0xe,		/* 14 */

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

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

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

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

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

-/* 2804 */	0x2,		/* 2 */

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

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

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

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

+/* 2852 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 2806 */	0x81,		/* 129 */

+/* 2854 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter oldText */

 

-/* 2808 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

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

-/* 2812 */	NdrFcShort( 0x52e ),	/* Type Offset=1326 */

+/* 2856 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

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

+/* 2860 */	NdrFcShort( 0x548 ),	/* Type Offset=1352 */

 

 	/* Return value */

 

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

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

-/* 2818 */	0x8,		/* FC_LONG */

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

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

+/* 2866 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_attributeRange */

 

-/* 2820 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2868 */	0x33,		/* FC_AUTO_HANDLE */

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

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

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

-/* 2828 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

-/* 2832 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2834 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

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

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

+/* 2876 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

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

+/* 2880 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2882 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2836 */	0x12,		/* 18 */

+/* 2884 */	0x12,		/* 18 */

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

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

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

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

-/* 2844 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 2846 */	0x6,		/* 6 */

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

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

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

+/* 2892 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2894 */	0x6,		/* 6 */

 			0x80,		/* 128 */

-/* 2848 */	0x81,		/* 129 */

+/* 2896 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 2850 */	0x83,		/* 131 */

+/* 2898 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 2852 */	0x85,		/* 133 */

+/* 2900 */	0x85,		/* 133 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 2854 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

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

-/* 2858 */	0x8,		/* FC_LONG */

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

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

+/* 2906 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter filter */

 

-/* 2860 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

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

-/* 2864 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2908 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

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

+/* 2912 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Parameter startOffset */

 

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

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

-/* 2870 */	0x8,		/* FC_LONG */

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

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

+/* 2918 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

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

-/* 2874 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2876 */	0x8,		/* FC_LONG */

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

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

+/* 2924 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter attributeValues */

 

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

-/* 2880 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 2882 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

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

-/* 2886 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 2888 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure deleteText */

-

-/* 2890 */	0x33,		/* FC_AUTO_HANDLE */

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

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

-/* 2896 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2898 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2900 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2902 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2904 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 2906 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2908 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2910 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2912 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2914 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 2916 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 2918 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter startOffset */

-

-/* 2920 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2922 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 2924 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-/* 2926 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2928 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2930 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 2926 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2928 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 2930 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 /* 2932 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2934 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 2934 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

 /* 2936 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure insertText */

+	/* Procedure deleteText */

 

 /* 2938 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2940 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2944 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2944 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 2946 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2948 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2948 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 2950 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2952 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2952 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x3,		/* 3 */

 /* 2954 */	0xe,		/* 14 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+			0x1,		/* Ext Flags:  new corr desc, */

 /* 2956 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2958 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2958 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2960 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2962 */	NdrFcShort( 0x3 ),	/* 3 */

 /* 2964 */	0x3,		/* 3 */

@@ -2958,18 +2964,19 @@
 /* 2966 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

 

 /* 2968 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2970 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 2972 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter text */

+	/* Parameter endOffset */

 

-/* 2974 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2974 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2976 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 2978 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2978 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -2978,21 +2985,21 @@
 /* 2984 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure cutText */

+	/* Procedure insertText */

 

 /* 2986 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2988 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2992 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2992 */	NdrFcShort( 0x5 ),	/* 5 */

 /* 2994 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 2996 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2996 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2998 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3000 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3000 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3002 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 3004 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3006 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3006 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 3008 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3010 */	NdrFcShort( 0x3 ),	/* 3 */

 /* 3012 */	0x3,		/* 3 */

@@ -3000,19 +3007,18 @@
 /* 3014 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter startOffset */

+	/* Parameter offset */

 

 /* 3016 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3018 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 3020 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter endOffset */

+	/* Parameter text */

 

-/* 3022 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3022 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 3024 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3026 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3026 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

@@ -3021,192 +3027,193 @@
 /* 3032 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure pasteText */

+	/* Procedure cutText */

 

 /* 3034 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3036 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3040 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 3042 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3044 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3040 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 3042 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3044 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 3046 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3048 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 3050 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3052 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3054 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3056 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3058 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3060 */	0x2,		/* 2 */

+/* 3058 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3060 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 3062 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

 

 /* 3064 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3066 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 3068 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter endOffset */

 

-/* 3070 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3070 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3072 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 3074 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 3076 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3078 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3080 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure pasteText */

+

+/* 3082 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3084 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3088 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 3090 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3092 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3094 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3096 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 3098 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3100 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3104 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3106 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3108 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 3110 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter offset */

+

+/* 3112 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3114 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3116 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 3118 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3120 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3122 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure replaceText */

 

-/* 3076 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3124 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3078 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3082 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3084 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3086 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3088 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3090 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 3126 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3130 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3132 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3134 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3136 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3138 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3092 */	0x10,		/* 16 */

+/* 3140 */	0x10,		/* 16 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 3094 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3096 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3098 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3100 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3102 */	0x4,		/* 4 */

+/* 3142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3144 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3146 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3148 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3150 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 3104 */	0x81,		/* 129 */

+/* 3152 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3106 */	0x83,		/* 131 */

+/* 3154 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 3108 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3110 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3112 */	0x8,		/* FC_LONG */

+/* 3156 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3158 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3160 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 3114 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3116 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3118 */	0x8,		/* FC_LONG */

+/* 3162 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3164 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3166 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 3120 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3122 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3124 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 3168 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 3170 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3172 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

-/* 3126 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3128 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3130 */	0x8,		/* FC_LONG */

+/* 3174 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3176 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3178 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setAttributes */

 

-/* 3132 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3180 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3134 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3138 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 3140 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3142 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3144 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3146 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 3182 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3186 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3188 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3190 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3192 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3194 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3148 */	0x10,		/* 16 */

+/* 3196 */	0x10,		/* 16 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 3150 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3152 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3154 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3156 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3158 */	0x4,		/* 4 */

+/* 3198 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3200 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3202 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3204 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3206 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 3160 */	0x81,		/* 129 */

+/* 3208 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3162 */	0x83,		/* 131 */

+/* 3210 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 3164 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3166 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3168 */	0x8,		/* FC_LONG */

+/* 3212 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3214 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3216 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 3170 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3172 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3174 */	0x8,		/* FC_LONG */

+/* 3218 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3220 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3222 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter attributes */

 

-/* 3176 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 3178 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3180 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

-

-	/* Return value */

-

-/* 3182 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3184 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3186 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_anchor */

-

-/* 3188 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3190 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3194 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 3196 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3198 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3200 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3202 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3204 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3206 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3208 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3210 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3212 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3214 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 3216 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter index */

-

-/* 3218 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3220 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3222 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter anchor */

-

-/* 3224 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 3226 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3228 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 3224 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 3226 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3228 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

 /* 3230 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3232 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3232 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 3234 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_anchorTarget */

+	/* Procedure get_anchor */

 

 /* 3236 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3238 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3242 */	NdrFcShort( 0xa ),	/* 10 */

+/* 3242 */	NdrFcShort( 0x9 ),	/* 9 */

 /* 3244 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 3246 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3248 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -3230,7 +3237,7 @@
 /* 3270 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter anchorTarget */

+	/* Parameter anchor */

 

 /* 3272 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

 /* 3274 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -3243,29 +3250,71 @@
 /* 3282 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_anchorTarget */

+

+/* 3284 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3286 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3290 */	NdrFcShort( 0xa ),	/* 10 */

+/* 3292 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3294 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3296 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3298 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 3300 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3302 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3304 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3306 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3308 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3310 */	0x3,		/* 3 */

+			0x80,		/* 128 */

+/* 3312 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter index */

+

+/* 3314 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3316 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3318 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter anchorTarget */

+

+/* 3320 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 3322 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3324 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+

+	/* Return value */

+

+/* 3326 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3328 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3330 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_nRows */

 

 

 	/* Procedure get_startIndex */

 

-/* 3284 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3332 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3286 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3290 */	NdrFcShort( 0xb ),	/* 11 */

-/* 3292 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3294 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3296 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3298 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3334 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3338 */	NdrFcShort( 0xb ),	/* 11 */

+/* 3340 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3342 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3344 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3346 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3300 */	0xe,		/* 14 */

+/* 3348 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3302 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3304 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3306 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3308 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3310 */	0x2,		/* 2 */

+/* 3350 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3352 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3354 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3356 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3358 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 3312 */	0x81,		/* 129 */

+/* 3360 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter rowCount */

@@ -3273,9 +3322,9 @@
 

 	/* Parameter index */

 

-/* 3314 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3316 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3318 */	0x8,		/* FC_LONG */

+/* 3362 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3364 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3366 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -3283,9 +3332,9 @@
 

 	/* Return value */

 

-/* 3320 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3322 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3324 */	0x8,		/* FC_LONG */

+/* 3368 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3370 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3372 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedChildren */

@@ -3293,24 +3342,24 @@
 

 	/* Procedure get_endIndex */

 

-/* 3326 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3374 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3328 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3332 */	NdrFcShort( 0xc ),	/* 12 */

-/* 3334 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3336 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3338 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3340 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3376 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3380 */	NdrFcShort( 0xc ),	/* 12 */

+/* 3382 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3384 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3386 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3388 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3342 */	0xe,		/* 14 */

+/* 3390 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3344 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3346 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3348 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3350 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3352 */	0x2,		/* 2 */

+/* 3392 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3394 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3396 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3398 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3400 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 3354 */	0x81,		/* 129 */

+/* 3402 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter cellCount */

@@ -3318,9 +3367,9 @@
 

 	/* Parameter index */

 

-/* 3356 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3358 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3360 */	0x8,		/* FC_LONG */

+/* 3404 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3406 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3408 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -3328,135 +3377,93 @@
 

 	/* Return value */

 

-/* 3362 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3364 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3366 */	0x8,		/* FC_LONG */

+/* 3410 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3412 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3414 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_valid */

 

-/* 3368 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3416 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3370 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3374 */	NdrFcShort( 0xd ),	/* 13 */

-/* 3376 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3378 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3380 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 3382 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3418 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3422 */	NdrFcShort( 0xd ),	/* 13 */

+/* 3424 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3426 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3428 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 3430 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3384 */	0xe,		/* 14 */

+/* 3432 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3386 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3388 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3390 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3392 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3394 */	0x2,		/* 2 */

+/* 3434 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3436 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3438 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3440 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3442 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 3396 */	0x81,		/* 129 */

+/* 3444 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter valid */

 

-/* 3398 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3400 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3402 */	0x3,		/* FC_SMALL */

+/* 3446 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3448 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3450 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3404 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3406 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3408 */	0x8,		/* FC_LONG */

+/* 3452 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3454 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3456 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nHyperlinks */

 

-/* 3410 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3458 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3412 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3416 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 3418 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3420 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3422 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3424 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3460 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3464 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 3466 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3468 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3470 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3472 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3426 */	0xe,		/* 14 */

+/* 3474 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3428 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3430 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3432 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3434 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3436 */	0x2,		/* 2 */

+/* 3476 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3478 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3480 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3482 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3484 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 3438 */	0x81,		/* 129 */

+/* 3486 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter hyperlinkCount */

 

-/* 3440 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3442 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3444 */	0x8,		/* FC_LONG */

+/* 3488 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3490 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3492 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3446 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3448 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3450 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_hyperlink */

-

-/* 3452 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3454 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3458 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 3460 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3462 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3464 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3466 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3468 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3470 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3472 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3474 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3476 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3478 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 3480 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter index */

-

-/* 3482 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3484 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3486 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter hyperlink */

-

-/* 3488 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3490 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3492 */	NdrFcShort( 0x546 ),	/* Type Offset=1350 */

-

-	/* Return value */

-

 /* 3494 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3496 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3496 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 3498 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hyperlinkIndex */

+	/* Procedure get_hyperlink */

 

 /* 3500 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3502 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3506 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 3506 */	NdrFcShort( 0x17 ),	/* 23 */

 /* 3508 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 3510 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3512 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3514 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3512 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3514 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3516 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3469,19 +3476,18 @@
 /* 3528 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter charIndex */

+	/* Parameter index */

 

 /* 3530 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3532 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 3534 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter hyperlinkIndex */

+	/* Parameter hyperlink */

 

-/* 3536 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3536 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3538 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3540 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3540 */	NdrFcShort( 0x560 ),	/* Type Offset=1376 */

 

 	/* Return value */

 

@@ -3490,20 +3496,20 @@
 /* 3546 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hyperlinks */

+	/* Procedure get_hyperlinkIndex */

 

 /* 3548 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3550 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3554 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 3554 */	NdrFcShort( 0x18 ),	/* 24 */

 /* 3556 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3558 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3558 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3560 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3562 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3562 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x3,		/* 3 */

 /* 3564 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3566 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3566 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3568 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3570 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3572 */	NdrFcShort( 0x3 ),	/* 3 */

@@ -3512,13 +3518,14 @@
 /* 3576 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter hyperlinks */

+	/* Parameter charIndex */

 

-/* 3578 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3578 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3580 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3582 */	NdrFcShort( 0x55c ),	/* Type Offset=1372 */

+/* 3582 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter nHyperlinks */

+	/* Parameter hyperlinkIndex */

 

 /* 3584 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3586 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -3532,31 +3539,73 @@
 /* 3594 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_hyperlinks */

+

+/* 3596 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3598 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3602 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 3604 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3606 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3608 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3610 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 3612 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3614 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3616 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3618 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3620 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3622 */	0x3,		/* 3 */

+			0x80,		/* 128 */

+/* 3624 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter hyperlinks */

+

+/* 3626 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3628 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3630 */	NdrFcShort( 0x576 ),	/* Type Offset=1398 */

+

+	/* Parameter nHyperlinks */

+

+/* 3632 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3634 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3636 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 3638 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3640 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3642 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_cellAt */

 

 

 	/* Procedure get_accessibleAt */

 

-/* 3596 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3644 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3598 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3602 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3604 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3606 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3608 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3610 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3646 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3650 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3652 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3654 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3656 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3658 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3612 */	0x10,		/* 16 */

+/* 3660 */	0x10,		/* 16 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3614 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3616 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3618 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3620 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3622 */	0x4,		/* 4 */

+/* 3662 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3664 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3666 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3668 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3670 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 3624 */	0x81,		/* 129 */

+/* 3672 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3626 */	0x83,		/* 131 */

+/* 3674 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter row */

@@ -3564,9 +3613,9 @@
 

 	/* Parameter row */

 

-/* 3628 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3630 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3632 */	0x8,		/* FC_LONG */

+/* 3676 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3678 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3680 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

@@ -3574,9 +3623,9 @@
 

 	/* Parameter column */

 

-/* 3634 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3636 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3638 */	0x8,		/* FC_LONG */

+/* 3682 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3684 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3686 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter cell */

@@ -3584,18 +3633,18 @@
 

 	/* Parameter accessible */

 

-/* 3640 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3642 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3644 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 3688 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3690 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3692 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 3646 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3648 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3650 */	0x8,		/* FC_LONG */

+/* 3694 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3696 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3698 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_caption */

@@ -3603,24 +3652,24 @@
 

 	/* Procedure get_caption */

 

-/* 3652 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3700 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3654 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3658 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3660 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3662 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3664 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3666 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3702 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3706 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3708 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3710 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3712 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3714 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 3668 */	0xe,		/* 14 */

+/* 3716 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3670 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3672 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3674 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3676 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3678 */	0x2,		/* 2 */

+/* 3718 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3720 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3722 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3724 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 3726 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 3680 */	0x81,		/* 129 */

+/* 3728 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter accessible */

@@ -3628,218 +3677,176 @@
 

 	/* Parameter accessible */

 

-/* 3682 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3684 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3686 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 3730 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3732 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3734 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 3688 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3690 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3692 */	0x8,		/* FC_LONG */

+/* 3736 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3738 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3740 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_childIndex */

 

-/* 3694 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3742 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3696 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3700 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 3702 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3704 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3706 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3708 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3744 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3748 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 3750 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3752 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3754 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3756 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 3710 */	0x10,		/* 16 */

+/* 3758 */	0x10,		/* 16 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3712 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3714 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3716 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3718 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3720 */	0x4,		/* 4 */

+/* 3760 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3762 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3764 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3766 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3768 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 3722 */	0x81,		/* 129 */

+/* 3770 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3724 */	0x83,		/* 131 */

+/* 3772 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter rowIndex */

 

-/* 3726 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3728 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3730 */	0x8,		/* FC_LONG */

+/* 3774 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3776 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3778 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnIndex */

 

-/* 3732 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3734 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3736 */	0x8,		/* FC_LONG */

+/* 3780 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3782 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3784 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter cellIndex */

 

-/* 3738 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3740 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3742 */	0x8,		/* FC_LONG */

+/* 3786 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3788 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3790 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3744 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3746 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3748 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnDescription */

-

-/* 3750 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3752 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3756 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 3758 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3760 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3762 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3764 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3766 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3768 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3770 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3772 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3774 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3776 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 3778 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter column */

-

-/* 3780 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3782 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3784 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter description */

-

-/* 3786 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 3788 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3790 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

 /* 3792 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3794 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3794 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 3796 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnExtentAt */

+	/* Procedure get_columnDescription */

 

 /* 3798 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3800 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3804 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 3806 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 3808 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3810 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3812 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

-/* 3814 */	0x10,		/* 16 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3816 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3804 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 3806 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3808 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3810 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3812 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 3814 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3816 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 3818 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3820 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3822 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3824 */	0x4,		/* 4 */

+/* 3822 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3824 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 3826 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 3828 */	0x83,		/* 131 */

+

+	/* Parameter column */

+

+/* 3828 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3830 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3832 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter description */

+

+/* 3834 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 3836 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3838 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+/* 3840 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3842 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3844 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_columnExtentAt */

+

+/* 3846 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3848 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3852 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 3854 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 3856 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3858 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3860 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 3862 */	0x10,		/* 16 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3864 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3866 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3868 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3870 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3872 */	0x4,		/* 4 */

+			0x80,		/* 128 */

+/* 3874 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+/* 3876 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 3830 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3832 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3834 */	0x8,		/* FC_LONG */

+/* 3878 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3880 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 3882 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 3836 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3838 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 3840 */	0x8,		/* FC_LONG */

+/* 3884 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3886 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3888 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter nColumnsSpanned */

 

-/* 3842 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3844 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3846 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 3848 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3850 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3852 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnHeader */

-

-/* 3854 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3856 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3860 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3862 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3864 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3866 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3868 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3870 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3872 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3874 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3876 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3878 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3880 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 3882 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter accessibleTable */

-

-/* 3884 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3886 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3888 */	NdrFcShort( 0x57a ),	/* Type Offset=1402 */

-

-	/* Parameter startingRowIndex */

-

 /* 3890 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3892 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 3892 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

 /* 3894 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3896 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3898 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3898 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 3900 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnIndex */

+	/* Procedure get_columnHeader */

 

 /* 3902 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3904 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3908 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3908 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3910 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 3912 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3912 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3914 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3916 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3916 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3918 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3852,14 +3859,13 @@
 /* 3930 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter cellIndex */

+	/* Parameter accessibleTable */

 

-/* 3932 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3932 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3934 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 3936 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3936 */	NdrFcShort( 0x594 ),	/* Type Offset=1428 */

 

-	/* Parameter columnIndex */

+	/* Parameter startingRowIndex */

 

 /* 3938 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3940 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -3873,269 +3879,270 @@
 /* 3948 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_nSelectedRows */

-

-

-	/* Procedure get_nColumns */

+	/* Procedure get_columnIndex */

 

 /* 3950 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3952 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3956 */	NdrFcShort( 0xa ),	/* 10 */

-/* 3958 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 3960 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3956 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3958 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 3960 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3962 */	NdrFcShort( 0x24 ),	/* 36 */

 /* 3964 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 3966 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3968 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3970 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3972 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3974 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 3976 */	0x2,		/* 2 */

+/* 3974 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3976 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 3978 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

-	/* Parameter rowCount */

+	/* Parameter cellIndex */

 

-

-	/* Parameter columnCount */

-

-/* 3980 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3980 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3982 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 3984 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter columnIndex */

 

-

-	/* Return value */

-

-/* 3986 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3986 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3988 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 3990 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_nSelectedColumns */

-

-/* 3992 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3994 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3998 */	NdrFcShort( 0xd ),	/* 13 */

-/* 4000 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4002 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4004 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4006 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 4008 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4010 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4012 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4014 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4016 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4018 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 4020 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter columnCount */

-

-/* 4022 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4024 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4026 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

 	/* Return value */

 

-/* 4028 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4030 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4032 */	0x8,		/* FC_LONG */

+/* 3992 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3994 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 3996 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedRows */

 

-/* 4034 */	0x33,		/* FC_AUTO_HANDLE */

+

+	/* Procedure get_nColumns */

+

+/* 3998 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4036 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4040 */	NdrFcShort( 0xe ),	/* 14 */

-/* 4042 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4044 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4046 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4048 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4000 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4004 */	NdrFcShort( 0xa ),	/* 10 */

+/* 4006 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4008 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4010 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4012 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4050 */	0xe,		/* 14 */

+/* 4014 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4052 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4054 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4056 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4058 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4060 */	0x2,		/* 2 */

+/* 4016 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4018 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4020 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4022 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4024 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4062 */	0x81,		/* 129 */

+/* 4026 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter rowCount */

 

-/* 4064 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4066 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4068 */	0x8,		/* FC_LONG */

+

+	/* Parameter columnCount */

+

+/* 4028 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4030 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4032 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4070 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4072 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+

+	/* Return value */

+

+/* 4034 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4036 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4038 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_nSelectedColumns */

+

+/* 4040 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4042 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4046 */	NdrFcShort( 0xd ),	/* 13 */

+/* 4048 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4050 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4052 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4054 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 4056 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4058 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4060 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4062 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4064 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4066 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 4068 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter columnCount */

+

+/* 4070 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4072 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 4074 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowDescription */

+	/* Return value */

 

-/* 4076 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4078 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4082 */	NdrFcShort( 0xf ),	/* 15 */

-/* 4084 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4086 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4088 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4090 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 4092 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4094 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 4096 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4098 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4100 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 4102 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 4104 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter row */

-

-/* 4106 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4108 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4110 */	0x8,		/* FC_LONG */

+/* 4076 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4078 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4080 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter description */

+	/* Procedure get_nSelectedRows */

 

-/* 4112 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 4114 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4116 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 4082 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4084 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4088 */	NdrFcShort( 0xe ),	/* 14 */

+/* 4090 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4092 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4094 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4096 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 4098 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4100 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4104 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4106 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4108 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 4110 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter rowCount */

+

+/* 4112 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4114 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4116 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 4118 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4120 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4120 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 4122 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowExtentAt */

+	/* Procedure get_rowDescription */

 

 /* 4124 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4126 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4130 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 4132 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 4134 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 4136 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4138 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

-/* 4140 */	0x10,		/* 16 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4130 */	NdrFcShort( 0xf ),	/* 15 */

+/* 4132 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4134 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4136 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4138 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 4140 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 4142 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 4144 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4146 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4148 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 4150 */	0x4,		/* 4 */

+/* 4148 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 4150 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 4152 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 4154 */	0x83,		/* 131 */

+

+	/* Parameter row */

+

+/* 4154 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4156 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4158 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter description */

+

+/* 4160 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 4162 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4164 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+/* 4166 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4168 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4170 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_rowExtentAt */

+

+/* 4172 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4174 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4178 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4180 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4182 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4184 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4186 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 4188 */	0x10,		/* 16 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4190 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4192 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4194 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4196 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 4198 */	0x4,		/* 4 */

+			0x80,		/* 128 */

+/* 4200 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+/* 4202 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4156 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4158 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4160 */	0x8,		/* FC_LONG */

+/* 4204 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4206 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4208 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4162 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4164 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4166 */	0x8,		/* FC_LONG */

+/* 4210 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4212 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4214 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter nRowsSpanned */

 

-/* 4168 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4170 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4172 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 4174 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4176 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4178 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_rowHeader */

-

-/* 4180 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4182 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4186 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 4188 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4190 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4192 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4194 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 4196 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4198 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4200 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4202 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4204 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 4206 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 4208 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter accessibleTable */

-

-/* 4210 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 4212 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4214 */	NdrFcShort( 0x57a ),	/* Type Offset=1402 */

-

-	/* Parameter startingColumnIndex */

-

 /* 4216 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4218 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4218 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

 /* 4220 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 4222 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4224 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4224 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 4226 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowIndex */

+	/* Procedure get_rowHeader */

 

 /* 4228 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4230 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4234 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 4234 */	NdrFcShort( 0x11 ),	/* 17 */

 /* 4236 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4238 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4238 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4240 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4242 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4242 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 4244 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -4148,14 +4155,13 @@
 /* 4256 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter cellIndex */

+	/* Parameter accessibleTable */

 

-/* 4258 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4258 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 4260 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4262 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 4262 */	NdrFcShort( 0x594 ),	/* Type Offset=1428 */

 

-	/* Parameter rowIndex */

+	/* Parameter startingColumnIndex */

 

 /* 4264 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4266 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -4169,243 +4175,243 @@
 /* 4274 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedChildren */

+	/* Procedure get_rowIndex */

 

 /* 4276 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4278 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4282 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 4284 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4282 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 4284 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 4286 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4288 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4290 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x4,		/* 4 */

-/* 4292 */	0x10,		/* 16 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4294 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 4290 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

+/* 4292 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4294 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4296 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4298 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4300 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 4302 */	0x4,		/* 4 */

+/* 4300 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 4302 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 4304 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 4306 */	0x83,		/* 131 */

+

+	/* Parameter cellIndex */

+

+/* 4306 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4308 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4310 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter rowIndex */

+

+/* 4312 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4314 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4316 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4318 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4320 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4322 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_selectedChildren */

+

+/* 4324 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4326 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4330 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 4332 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4334 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4336 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4338 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x4,		/* 4 */

+/* 4340 */	0x10,		/* 16 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 4342 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 4344 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4348 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 4350 */	0x4,		/* 4 */

+			0x80,		/* 128 */

+/* 4352 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+/* 4354 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter maxChildren */

 

-/* 4308 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4310 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4312 */	0x8,		/* FC_LONG */

+/* 4356 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4358 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4360 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter children */

 

-/* 4314 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 4316 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4318 */	NdrFcShort( 0x590 ),	/* Type Offset=1424 */

+/* 4362 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 4364 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4366 */	NdrFcShort( 0x5aa ),	/* Type Offset=1450 */

 

 	/* Parameter nChildren */

 

-/* 4320 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4322 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4324 */	0x8,		/* FC_LONG */

+/* 4368 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4370 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4372 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4326 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4328 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4330 */	0x8,		/* FC_LONG */

+/* 4374 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4376 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4378 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selectedColumns */

 

-/* 4332 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4380 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4334 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4338 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 4340 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 4342 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4344 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4346 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4382 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4386 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 4388 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4390 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4392 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4394 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 4348 */	0x10,		/* 16 */

+/* 4396 */	0x10,		/* 16 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4350 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 4352 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4354 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4356 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 4358 */	0x4,		/* 4 */

+/* 4398 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 4400 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4402 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4404 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 4406 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 4360 */	0x81,		/* 129 */

+/* 4408 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 4362 */	0x83,		/* 131 */

+/* 4410 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter maxColumns */

 

-/* 4364 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4366 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4368 */	0x8,		/* FC_LONG */

+/* 4412 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4414 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4416 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columns */

 

-/* 4370 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 4372 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4374 */	NdrFcShort( 0x590 ),	/* Type Offset=1424 */

+/* 4418 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 4420 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4422 */	NdrFcShort( 0x5aa ),	/* Type Offset=1450 */

 

 	/* Parameter nColumns */

 

-/* 4376 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4378 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4380 */	0x8,		/* FC_LONG */

+/* 4424 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4426 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4428 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4382 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4384 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4386 */	0x8,		/* FC_LONG */

+/* 4430 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4432 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4434 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selectedRows */

 

-/* 4388 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4436 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4390 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4394 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 4396 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 4398 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4400 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4402 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4438 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4442 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 4444 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4446 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4448 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4450 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 4404 */	0x10,		/* 16 */

+/* 4452 */	0x10,		/* 16 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4406 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 4408 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4410 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4412 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 4414 */	0x4,		/* 4 */

+/* 4454 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 4456 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4458 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4460 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 4462 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 4416 */	0x81,		/* 129 */

+/* 4464 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 4418 */	0x83,		/* 131 */

+/* 4466 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter maxRows */

 

-/* 4420 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4422 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4424 */	0x8,		/* FC_LONG */

+/* 4468 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4470 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4472 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rows */

 

-/* 4426 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 4428 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4430 */	NdrFcShort( 0x590 ),	/* Type Offset=1424 */

+/* 4474 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 4476 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4478 */	NdrFcShort( 0x5aa ),	/* Type Offset=1450 */

 

 	/* Parameter nRows */

 

-/* 4432 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4434 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4436 */	0x8,		/* FC_LONG */

+/* 4480 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4482 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4484 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4438 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4440 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4442 */	0x8,		/* FC_LONG */

+/* 4486 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4488 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4490 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_summary */

 

-/* 4444 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4492 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4446 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4450 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 4452 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4454 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4456 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4458 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4494 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4498 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 4500 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4502 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4504 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4506 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 4460 */	0xe,		/* 14 */

+/* 4508 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4462 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4464 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4466 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4468 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4470 */	0x2,		/* 2 */

+/* 4510 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4512 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4514 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4516 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4518 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4472 */	0x81,		/* 129 */

+/* 4520 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter accessible */

 

-/* 4474 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 4476 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4478 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

-

-	/* Return value */

-

-/* 4480 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4482 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4484 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_isColumnSelected */

-

-/* 4486 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4488 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4492 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 4494 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4496 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4498 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 4500 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 4502 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4504 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4506 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4508 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4510 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 4512 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 4514 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter column */

-

-/* 4516 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4518 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4520 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter isSelected */

-

-/* 4522 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4524 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4526 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 4522 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 4524 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4526 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 4528 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4530 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4530 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 4532 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRowSelected */

+	/* Procedure get_isColumnSelected */

 

 /* 4534 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4536 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4540 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 4540 */	NdrFcShort( 0x17 ),	/* 23 */

 /* 4542 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 4544 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4546 */	NdrFcShort( 0x21 ),	/* 33 */

@@ -4422,7 +4428,7 @@
 /* 4562 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 4564 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 4566 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

@@ -4443,310 +4449,353 @@
 /* 4580 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isSelected */

+	/* Procedure get_isRowSelected */

 

 /* 4582 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4584 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4588 */	NdrFcShort( 0x19 ),	/* 25 */

-/* 4590 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 4592 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4588 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 4590 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4592 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4594 */	NdrFcShort( 0x21 ),	/* 33 */

 /* 4596 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

-/* 4598 */	0x10,		/* 16 */

+			0x3,		/* 3 */

+/* 4598 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 4600 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4602 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4604 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4606 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 4608 */	0x4,		/* 4 */

+/* 4606 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 4608 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 4610 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 4612 */	0x83,		/* 131 */

-			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4614 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4616 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4618 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter column */

-

-/* 4620 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4622 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4624 */	0x8,		/* FC_LONG */

+/* 4612 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4614 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4616 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 4626 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4628 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4630 */	0x3,		/* FC_SMALL */

+/* 4618 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4620 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4622 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4632 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4634 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4636 */	0x8,		/* FC_LONG */

+/* 4624 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4626 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4628 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_isSelected */

+

+/* 4630 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4632 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4636 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 4638 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4640 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4642 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 4644 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 4646 */	0x10,		/* 16 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4648 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4650 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4652 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4654 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 4656 */	0x4,		/* 4 */

+			0x80,		/* 128 */

+/* 4658 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+/* 4660 */	0x83,		/* 131 */

+			0x0,		/* 0 */

+

+	/* Parameter row */

+

+/* 4662 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4664 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4666 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter column */

+

+/* 4668 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4670 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4672 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter isSelected */

+

+/* 4674 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4676 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4678 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4680 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4682 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4684 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectRow */

 

-/* 4638 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4686 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4640 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4644 */	NdrFcShort( 0x1a ),	/* 26 */

-/* 4646 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4648 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4650 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4652 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4688 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4692 */	NdrFcShort( 0x1a ),	/* 26 */

+/* 4694 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4696 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4698 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4700 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4654 */	0xe,		/* 14 */

+/* 4702 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4656 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4658 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4660 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4662 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4664 */	0x2,		/* 2 */

+/* 4704 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4706 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4708 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4710 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4712 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4666 */	0x81,		/* 129 */

+/* 4714 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4668 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4670 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4672 */	0x8,		/* FC_LONG */

+/* 4716 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4718 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4720 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4674 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4676 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4678 */	0x8,		/* FC_LONG */

+/* 4722 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4724 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4726 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectColumn */

 

-/* 4680 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4728 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4682 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4686 */	NdrFcShort( 0x1b ),	/* 27 */

-/* 4688 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4690 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4692 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4694 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4730 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4734 */	NdrFcShort( 0x1b ),	/* 27 */

+/* 4736 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4738 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4740 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4742 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4696 */	0xe,		/* 14 */

+/* 4744 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4698 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4700 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4702 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4704 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4706 */	0x2,		/* 2 */

+/* 4746 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4748 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4750 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4752 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4754 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4708 */	0x81,		/* 129 */

+/* 4756 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4710 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4712 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4714 */	0x8,		/* FC_LONG */

+/* 4758 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4760 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4762 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4716 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4718 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4720 */	0x8,		/* FC_LONG */

+/* 4764 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4766 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4768 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectRow */

 

-/* 4722 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4770 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4724 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4728 */	NdrFcShort( 0x1c ),	/* 28 */

-/* 4730 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4732 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4734 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4736 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4772 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4776 */	NdrFcShort( 0x1c ),	/* 28 */

+/* 4778 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4780 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4782 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4784 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4738 */	0xe,		/* 14 */

+/* 4786 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4740 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4742 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4744 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4746 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4748 */	0x2,		/* 2 */

+/* 4788 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4790 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4792 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4794 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4796 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4750 */	0x81,		/* 129 */

+/* 4798 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4752 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4754 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4756 */	0x8,		/* FC_LONG */

+/* 4800 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4802 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4804 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4758 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4760 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4762 */	0x8,		/* FC_LONG */

+/* 4806 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4808 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4810 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectColumn */

 

-/* 4764 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4812 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4766 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4770 */	NdrFcShort( 0x1d ),	/* 29 */

-/* 4772 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4774 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4776 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4778 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4814 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4818 */	NdrFcShort( 0x1d ),	/* 29 */

+/* 4820 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4822 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4824 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4826 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4780 */	0xe,		/* 14 */

+/* 4828 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4782 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4784 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4786 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4788 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4790 */	0x2,		/* 2 */

+/* 4830 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4832 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4834 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4836 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4838 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4792 */	0x81,		/* 129 */

+/* 4840 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4794 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4796 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4798 */	0x8,		/* FC_LONG */

+/* 4842 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4844 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4846 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4800 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4802 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4804 */	0x8,		/* FC_LONG */

+/* 4848 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4850 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4852 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowColumnExtentsAtIndex */

 

-/* 4806 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4854 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4808 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4812 */	NdrFcShort( 0x1e ),	/* 30 */

-/* 4814 */	NdrFcShort( 0x40 ),	/* ARM64 Stack size/offset = 64 */

-/* 4816 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4818 */	NdrFcShort( 0x91 ),	/* 145 */

-/* 4820 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4856 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4860 */	NdrFcShort( 0x1e ),	/* 30 */

+/* 4862 */	NdrFcShort( 0x40 ),	/* ARM64 Stack size/offset = 64 */

+/* 4864 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4866 */	NdrFcShort( 0x91 ),	/* 145 */

+/* 4868 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x7,		/* 7 */

-/* 4822 */	0x12,		/* 18 */

+/* 4870 */	0x12,		/* 18 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4824 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4826 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4828 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4830 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 4832 */	0x7,		/* 7 */

+/* 4872 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4874 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4876 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4878 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 4880 */	0x7,		/* 7 */

 			0x80,		/* 128 */

-/* 4834 */	0x81,		/* 129 */

+/* 4882 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 4836 */	0x83,		/* 131 */

+/* 4884 */	0x83,		/* 131 */

 			0x84,		/* 132 */

-/* 4838 */	0x85,		/* 133 */

+/* 4886 */	0x85,		/* 133 */

 			0x86,		/* 134 */

 

 	/* Parameter index */

 

-/* 4840 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4842 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4844 */	0x8,		/* FC_LONG */

+/* 4888 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4890 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4892 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4846 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4848 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4850 */	0x8,		/* FC_LONG */

+/* 4894 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4896 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4898 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4852 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4854 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4856 */	0x8,		/* FC_LONG */

+/* 4900 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4902 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4904 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rowExtents */

 

-/* 4858 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4860 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 4862 */	0x8,		/* FC_LONG */

+/* 4906 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4908 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 4910 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnExtents */

 

-/* 4864 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4866 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 4868 */	0x8,		/* FC_LONG */

+/* 4912 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4914 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 4916 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 4870 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4872 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 4874 */	0x3,		/* FC_SMALL */

+/* 4918 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4920 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 4922 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4876 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4878 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

-/* 4880 */	0x8,		/* FC_LONG */

+/* 4924 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4926 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

+/* 4928 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_modelChange */

 

-/* 4882 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4930 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4884 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4888 */	NdrFcShort( 0x1f ),	/* 31 */

-/* 4890 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4892 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4894 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4896 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4932 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4936 */	NdrFcShort( 0x1f ),	/* 31 */

+/* 4938 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4940 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4942 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4944 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 4898 */	0xe,		/* 14 */

+/* 4946 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4900 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4902 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4904 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4906 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4908 */	0x2,		/* 2 */

+/* 4948 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4950 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4952 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4954 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4956 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4910 */	0x81,		/* 129 */

+/* 4958 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter modelChange */

 

-/* 4912 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 4914 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4916 */	NdrFcShort( 0x5ae ),	/* Type Offset=1454 */

+/* 4960 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 4962 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 4964 */	NdrFcShort( 0x5c8 ),	/* Type Offset=1480 */

 

 	/* Return value */

 

-/* 4918 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4920 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4922 */	0x8,		/* FC_LONG */

+/* 4966 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4968 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 4970 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowExtent */

@@ -4754,24 +4803,24 @@
 

 	/* Procedure get_nColumns */

 

-/* 4924 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4972 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4926 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4930 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 4932 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4934 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4936 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4938 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4974 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4978 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 4980 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 4982 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4984 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4986 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4940 */	0xe,		/* 14 */

+/* 4988 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4942 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4944 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4946 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4948 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4950 */	0x2,		/* 2 */

+/* 4990 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4992 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4994 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4996 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 4998 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4952 */	0x81,		/* 129 */

+/* 5000 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter nRowsSpanned */

@@ -4779,9 +4828,9 @@
 

 	/* Parameter columnCount */

 

-/* 4954 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4956 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 4958 */	0x8,		/* FC_LONG */

+/* 5002 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5004 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5006 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -4789,9 +4838,9 @@
 

 	/* Return value */

 

-/* 4960 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4962 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 4964 */	0x8,		/* FC_LONG */

+/* 5008 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5010 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5012 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowIndex */

@@ -4799,24 +4848,24 @@
 

 	/* Procedure get_nSelectedCells */

 

-/* 4966 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5014 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4968 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4972 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4974 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 4976 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4978 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4980 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5016 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5020 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5022 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5024 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5026 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 5028 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4982 */	0xe,		/* 14 */

+/* 5030 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4984 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4986 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4988 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4990 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 4992 */	0x2,		/* 2 */

+/* 5032 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5034 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5036 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5038 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5040 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 4994 */	0x81,		/* 129 */

+/* 5042 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter rowIndex */

@@ -4824,9 +4873,9 @@
 

 	/* Parameter cellCount */

 

-/* 4996 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4998 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5000 */	0x8,		/* FC_LONG */

+/* 5044 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5046 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5048 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -4834,98 +4883,56 @@
 

 	/* Return value */

 

-/* 5002 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5004 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5006 */	0x8,		/* FC_LONG */

+/* 5050 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5052 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5054 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedColumns */

 

-/* 5008 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5056 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5010 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5014 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 5016 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5018 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5020 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 5022 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5058 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5062 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 5064 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5066 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5068 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 5070 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 5024 */	0xe,		/* 14 */

+/* 5072 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5026 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5028 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5030 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5032 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5034 */	0x2,		/* 2 */

+/* 5074 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5076 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5078 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5080 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5082 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5036 */	0x81,		/* 129 */

+/* 5084 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter columnCount */

 

-/* 5038 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5040 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5042 */	0x8,		/* FC_LONG */

+/* 5086 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5088 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5090 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5044 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5046 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5048 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_rowDescription */

-

-/* 5050 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5052 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5056 */	NdrFcShort( 0xb ),	/* 11 */

-/* 5058 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5060 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5062 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5064 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 5066 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5068 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 5070 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5072 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5074 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 5076 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 5078 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter row */

-

-/* 5080 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5082 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5084 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter description */

-

-/* 5086 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 5088 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5090 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

 /* 5092 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5094 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5094 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 5096 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedCells */

+	/* Procedure get_rowDescription */

 

 /* 5098 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5100 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5104 */	NdrFcShort( 0xc ),	/* 12 */

+/* 5104 */	NdrFcShort( 0xb ),	/* 11 */

 /* 5106 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5108 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5110 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 5108 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5110 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 5112 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 5114 */	0xe,		/* 14 */

@@ -4939,19 +4946,19 @@
 /* 5126 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter cells */

+	/* Parameter row */

 

-/* 5128 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 5128 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 5130 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5132 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

-

-	/* Parameter nSelectedCells */

-

-/* 5134 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5136 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5138 */	0x8,		/* FC_LONG */

+/* 5132 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter description */

+

+/* 5134 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5136 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5138 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

 	/* Return value */

 

 /* 5140 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

@@ -4959,12 +4966,12 @@
 /* 5144 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedColumns */

+	/* Procedure get_selectedCells */

 

 /* 5146 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5148 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5152 */	NdrFcShort( 0xd ),	/* 13 */

+/* 5152 */	NdrFcShort( 0xc ),	/* 12 */

 /* 5154 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5156 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5158 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4981,13 +4988,13 @@
 /* 5174 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter selectedColumns */

+	/* Parameter cells */

 

 /* 5176 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5178 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5180 */	NdrFcShort( 0x5da ),	/* Type Offset=1498 */

+/* 5180 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

-	/* Parameter nColumns */

+	/* Parameter nSelectedCells */

 

 /* 5182 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5184 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -5001,12 +5008,12 @@
 /* 5192 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedRows */

+	/* Procedure get_selectedColumns */

 

 /* 5194 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5196 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5200 */	NdrFcShort( 0xe ),	/* 14 */

+/* 5200 */	NdrFcShort( 0xd ),	/* 13 */

 /* 5202 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5204 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5206 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -5023,13 +5030,13 @@
 /* 5222 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter selectedRows */

+	/* Parameter selectedColumns */

 

 /* 5224 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5226 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5228 */	NdrFcShort( 0x5da ),	/* Type Offset=1498 */

+/* 5228 */	NdrFcShort( 0x5f4 ),	/* Type Offset=1524 */

 

-	/* Parameter nRows */

+	/* Parameter nColumns */

 

 /* 5230 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5232 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -5043,90 +5050,89 @@
 /* 5240 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_summary */

+	/* Procedure get_selectedRows */

 

 /* 5242 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5244 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5248 */	NdrFcShort( 0xf ),	/* 15 */

-/* 5250 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5248 */	NdrFcShort( 0xe ),	/* 14 */

+/* 5250 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5252 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5254 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5254 */	NdrFcShort( 0x24 ),	/* 36 */

 /* 5256 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 5258 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5260 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 5260 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 5262 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5264 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5266 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5268 */	0x2,		/* 2 */

+/* 5266 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 5268 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 5270 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

-	/* Parameter accessible */

+	/* Parameter selectedRows */

 

-/* 5272 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5272 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5274 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5276 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 5276 */	NdrFcShort( 0x5f4 ),	/* Type Offset=1524 */

 

-	/* Return value */

+	/* Parameter nRows */

 

-/* 5278 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5278 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5280 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 5282 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isColumnSelected */

+	/* Return value */

 

-/* 5284 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5284 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5286 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5288 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_summary */

+

+/* 5290 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5286 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5290 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 5292 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5294 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5296 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 5298 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 5300 */	0xe,		/* 14 */

+/* 5292 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5296 */	NdrFcShort( 0xf ),	/* 15 */

+/* 5298 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5300 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5302 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5304 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 5306 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5302 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5304 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5306 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5308 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 5310 */	0x3,		/* 3 */

+/* 5308 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5312 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5314 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5316 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5312 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter column */

-

-/* 5314 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5316 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5318 */	0x8,		/* FC_LONG */

+/* 5318 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

-	/* Parameter isSelected */

+	/* Parameter accessible */

 

-/* 5320 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5322 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5324 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 5320 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5322 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5324 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 5326 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5328 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5328 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 5330 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRowSelected */

+	/* Procedure get_isColumnSelected */

 

 /* 5332 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5334 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5338 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 5338 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 5340 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5342 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 5344 */	NdrFcShort( 0x21 ),	/* 33 */

@@ -5143,7 +5149,7 @@
 /* 5360 */	0x81,		/* 129 */

 			0x82,		/* 130 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 5362 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 5364 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

@@ -5164,27 +5170,27 @@
 /* 5378 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure selectRow */

+	/* Procedure get_isRowSelected */

 

 /* 5380 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5382 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5386 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 5388 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5386 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 5388 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5390 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5392 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5392 */	NdrFcShort( 0x21 ),	/* 33 */

 /* 5394 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 5396 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 5398 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5400 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5402 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5404 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5406 */	0x2,		/* 2 */

+/* 5404 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 5406 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 5408 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

 	/* Parameter row */

 

@@ -5193,204 +5199,205 @@
 /* 5414 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter isSelected */

 

-/* 5416 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5416 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5418 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5420 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure selectColumn */

-

-/* 5422 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5424 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5428 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 5430 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5432 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5434 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5436 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 5438 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5440 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5442 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5444 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5446 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5448 */	0x2,		/* 2 */

-			0x80,		/* 128 */

-/* 5450 */	0x81,		/* 129 */

-			0x0,		/* 0 */

-

-	/* Parameter column */

-

-/* 5452 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5454 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5456 */	0x8,		/* FC_LONG */

+/* 5420 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5458 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5460 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5462 */	0x8,		/* FC_LONG */

+/* 5422 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5424 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5426 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure unselectRow */

+	/* Procedure selectRow */

 

-/* 5464 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5428 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5466 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5470 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 5472 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5474 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5476 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5478 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5430 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5434 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 5436 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5438 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5440 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5442 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 5480 */	0xe,		/* 14 */

+/* 5444 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5482 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5484 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5486 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5488 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5490 */	0x2,		/* 2 */

+/* 5446 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5448 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5450 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5452 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5454 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5492 */	0x81,		/* 129 */

+/* 5456 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 5494 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5496 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5498 */	0x8,		/* FC_LONG */

+/* 5458 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5460 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5462 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5500 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5502 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5504 */	0x8,		/* FC_LONG */

+/* 5464 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5466 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5468 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure unselectColumn */

+	/* Procedure selectColumn */

 

-/* 5506 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5470 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5508 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5512 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 5514 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5516 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5518 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5520 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5472 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5476 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 5478 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5480 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5482 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5484 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 5522 */	0xe,		/* 14 */

+/* 5486 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5524 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5526 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5528 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5530 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5532 */	0x2,		/* 2 */

+/* 5488 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5490 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5492 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5494 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5496 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5534 */	0x81,		/* 129 */

+/* 5498 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 5536 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5538 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5540 */	0x8,		/* FC_LONG */

+/* 5500 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5502 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5504 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5542 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5544 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5506 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5508 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5510 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure unselectRow */

+

+/* 5512 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5514 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5518 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 5520 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5522 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5524 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5526 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 5528 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5530 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5532 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5534 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5536 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5538 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 5540 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter row */

+

+/* 5542 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5544 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

 /* 5546 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 5548 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5550 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5552 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure unselectColumn */

+

+/* 5554 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5556 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5560 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 5562 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5564 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5566 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5568 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 5570 */	0xe,		/* 14 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5572 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5574 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5576 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5578 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5580 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 5582 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter column */

+

+/* 5584 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5586 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5588 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 5590 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5592 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5594 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_modelChange */

 

-/* 5548 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5596 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5550 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5554 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 5556 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5558 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5560 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5562 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5598 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5602 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 5604 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5606 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5608 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5610 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5564 */	0xe,		/* 14 */

+/* 5612 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5566 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5568 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5570 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5572 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5574 */	0x2,		/* 2 */

+/* 5614 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5616 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5618 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5620 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5622 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5576 */	0x81,		/* 129 */

+/* 5624 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter modelChange */

 

-/* 5578 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 5580 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5582 */	NdrFcShort( 0x5ae ),	/* Type Offset=1454 */

-

-	/* Return value */

-

-/* 5584 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5586 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5588 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnHeaderCells */

-

-/* 5590 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5592 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5596 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 5598 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5600 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5602 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 5604 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 5606 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5608 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 5610 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5612 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5614 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 5616 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 5618 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter cellAccessibles */

-

-/* 5620 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 5622 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5624 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

-

-	/* Parameter nColumnHeaderCells */

-

-/* 5626 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5628 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5630 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 5626 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 5628 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5630 */	NdrFcShort( 0x5c8 ),	/* Type Offset=1480 */

 

 	/* Return value */

 

 /* 5632 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5634 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5634 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 5636 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowHeaderCells */

+	/* Procedure get_columnHeaderCells */

 

 /* 5638 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5640 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5644 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 5644 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 5646 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5648 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5650 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -5411,9 +5418,9 @@
 

 /* 5668 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5670 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5672 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

+/* 5672 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

-	/* Parameter nRowHeaderCells */

+	/* Parameter nColumnHeaderCells */

 

 /* 5674 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5676 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

@@ -5427,343 +5434,385 @@
 /* 5684 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isSelected */

+	/* Procedure get_rowHeaderCells */

 

 /* 5686 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5688 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5692 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 5694 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5692 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 5694 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5696 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5698 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 5700 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 5698 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 5700 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 5702 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5704 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 5704 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 5706 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5708 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5710 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5712 */	0x2,		/* 2 */

+/* 5710 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 5712 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 5714 */	0x81,		/* 129 */

-			0x0,		/* 0 */

+			0x82,		/* 130 */

 

-	/* Parameter isSelected */

+	/* Parameter cellAccessibles */

 

-/* 5716 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5716 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5718 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5720 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 5720 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

-	/* Return value */

+	/* Parameter nRowHeaderCells */

 

-/* 5722 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5722 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5724 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 5726 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowColumnExtents */

+	/* Return value */

 

-/* 5728 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5728 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5730 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5732 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_isSelected */

+

+/* 5734 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5730 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5734 */	NdrFcShort( 0xa ),	/* 10 */

-/* 5736 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

-/* 5738 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5740 */	NdrFcShort( 0x91 ),	/* 145 */

-/* 5742 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x6,		/* 6 */

-/* 5744 */	0x12,		/* 18 */

+/* 5736 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5740 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 5742 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5744 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5746 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 5748 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 5750 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5746 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5748 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5750 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5752 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5754 */	0x6,		/* 6 */

+/* 5752 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5754 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5756 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5758 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5760 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5756 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-/* 5758 */	0x83,		/* 131 */

-			0x84,		/* 132 */

-/* 5760 */	0x85,		/* 133 */

-			0x0,		/* 0 */

-

-	/* Parameter row */

-

-/* 5762 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5764 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5766 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter column */

-

-/* 5768 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5770 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5772 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter rowExtents */

-

-/* 5774 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5776 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5778 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter columnExtents */

-

-/* 5780 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5782 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5784 */	0x8,		/* FC_LONG */

+/* 5762 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 5786 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5788 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 5790 */	0x3,		/* FC_SMALL */

+/* 5764 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5766 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5768 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5792 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5794 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

-/* 5796 */	0x8,		/* FC_LONG */

+/* 5770 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5772 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5774 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_rowColumnExtents */

+

+/* 5776 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5778 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5782 */	NdrFcShort( 0xa ),	/* 10 */

+/* 5784 */	NdrFcShort( 0x38 ),	/* ARM64 Stack size/offset = 56 */

+/* 5786 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5788 */	NdrFcShort( 0x91 ),	/* 145 */

+/* 5790 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x6,		/* 6 */

+/* 5792 */	0x12,		/* 18 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5794 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5796 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5798 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5800 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 5802 */	0x6,		/* 6 */

+			0x80,		/* 128 */

+/* 5804 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+/* 5806 */	0x83,		/* 131 */

+			0x84,		/* 132 */

+/* 5808 */	0x85,		/* 133 */

+			0x0,		/* 0 */

+

+	/* Parameter row */

+

+/* 5810 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5812 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5814 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter column */

+

+/* 5816 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5818 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5820 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter rowExtents */

+

+/* 5822 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5824 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5826 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter columnExtents */

+

+/* 5828 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5830 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

+/* 5832 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter isSelected */

+

+/* 5834 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5836 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 5838 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 5840 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5842 */	NdrFcShort( 0x30 ),	/* ARM64 Stack size/offset = 48 */

+/* 5844 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_table */

 

-/* 5798 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5846 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5800 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5804 */	NdrFcShort( 0xb ),	/* 11 */

-/* 5806 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5808 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5810 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5812 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5848 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5852 */	NdrFcShort( 0xb ),	/* 11 */

+/* 5854 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5856 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5858 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5860 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5814 */	0xe,		/* 14 */

+/* 5862 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5816 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5818 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5820 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5822 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5824 */	0x2,		/* 2 */

+/* 5864 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5866 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5868 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5870 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 5872 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 5826 */	0x81,		/* 129 */

+/* 5874 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter table */

 

-/* 5828 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 5830 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5832 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 5876 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5878 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5880 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 5834 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5836 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5838 */	0x8,		/* FC_LONG */

+/* 5882 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5884 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5886 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_imagePosition */

 

-/* 5840 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5888 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5842 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5846 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 5848 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

-/* 5850 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5852 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 5854 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5890 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5894 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 5896 */	NdrFcShort( 0x28 ),	/* ARM64 Stack size/offset = 40 */

+/* 5898 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 5900 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 5902 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 5856 */	0x10,		/* 16 */

+/* 5904 */	0x10,		/* 16 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5858 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5860 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5862 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5864 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 5866 */	0x4,		/* 4 */

+/* 5906 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5908 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5910 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5912 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 5914 */	0x4,		/* 4 */

 			0x80,		/* 128 */

-/* 5868 */	0x81,		/* 129 */

+/* 5916 */	0x81,		/* 129 */

 			0x82,		/* 130 */

-/* 5870 */	0x83,		/* 131 */

+/* 5918 */	0x83,		/* 131 */

 			0x0,		/* 0 */

 

 	/* Parameter coordinateType */

 

-/* 5872 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5874 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5876 */	0xd,		/* FC_ENUM16 */

+/* 5920 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5922 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5924 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 5878 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5880 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 5882 */	0x8,		/* FC_LONG */

+/* 5926 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5928 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5930 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 5884 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5886 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5888 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 5890 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5892 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5894 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_imageSize */

-

-/* 5896 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5898 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5902 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 5904 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

-/* 5906 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5908 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 5910 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 5912 */	0xe,		/* 14 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5914 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5916 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5918 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5920 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 5922 */	0x3,		/* 3 */

-			0x80,		/* 128 */

-/* 5924 */	0x81,		/* 129 */

-			0x82,		/* 130 */

-

-	/* Parameter height */

-

-/* 5926 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5928 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5930 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter width */

-

 /* 5932 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5934 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 5934 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

 /* 5936 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 5938 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5940 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5940 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5942 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_toolkitName */

+	/* Procedure get_imageSize */

 

 /* 5944 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5946 */	NdrFcLong( 0x0 ),	/* 0 */

 /* 5950 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 5952 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5952 */	NdrFcShort( 0x20 ),	/* ARM64 Stack size/offset = 32 */

 /* 5954 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5956 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5958 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 5956 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 5958 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 5960 */	0xe,		/* 14 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5962 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5962 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5964 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5966 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5968 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 5970 */	0x2,		/* 2 */

+/* 5968 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 5970 */	0x3,		/* 3 */

 			0x80,		/* 128 */

 /* 5972 */	0x81,		/* 129 */

+			0x82,		/* 130 */

+

+	/* Parameter height */

+

+/* 5974 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5976 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 5978 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter name */

+	/* Parameter width */

 

-/* 5974 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 5976 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 5978 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

-/* 5980 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5980 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5982 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

 /* 5984 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 5986 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5988 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 5990 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_toolkitName */

+

+/* 5992 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5994 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5998 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 6000 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 6002 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6004 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 6006 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 6008 */	0xe,		/* 14 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 6010 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 6012 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6014 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6016 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 6018 */	0x2,		/* 2 */

+			0x80,		/* 128 */

+/* 6020 */	0x81,		/* 129 */

+			0x0,		/* 0 */

+

+	/* Parameter name */

+

+/* 6022 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 6024 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 6026 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+/* 6028 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 6030 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 6032 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_toolkitVersion */

 

-/* 5986 */	0x33,		/* FC_AUTO_HANDLE */

+/* 6034 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5988 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5992 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5994 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 5996 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5998 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 6000 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 6036 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 6040 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 6042 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 6044 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6046 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 6048 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 6002 */	0xe,		/* 14 */

+/* 6050 */	0xe,		/* 14 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 6004 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 6006 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 6008 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 6010 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 6012 */	0x2,		/* 2 */

+/* 6052 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 6054 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6058 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 6060 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 6014 */	0x81,		/* 129 */

+/* 6062 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter version */

 

-/* 6016 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 6018 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 6020 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 6064 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 6066 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 6068 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 6022 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 6024 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 6026 */	0x8,		/* FC_LONG */

+/* 6070 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 6072 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 6074 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_anchorTarget */

 

-/* 6028 */	0x33,		/* FC_AUTO_HANDLE */

+/* 6076 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 6030 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 6034 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 6036 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 6038 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 6040 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 6042 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 6078 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 6082 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 6084 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 6086 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6088 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 6090 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 6044 */	0xe,		/* 14 */

+/* 6092 */	0xe,		/* 14 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 6046 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 6048 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 6050 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 6052 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 6054 */	0x2,		/* 2 */

+/* 6094 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6096 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6098 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 6100 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 6102 */	0x2,		/* 2 */

 			0x80,		/* 128 */

-/* 6056 */	0x81,		/* 129 */

+/* 6104 */	0x81,		/* 129 */

 			0x0,		/* 0 */

 

 	/* Parameter accessible */

 

-/* 6058 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 6060 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 6062 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 6106 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 6108 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 6110 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 6064 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 6066 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 6068 */	0x8,		/* FC_LONG */

+/* 6112 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 6114 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 6116 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 			0x0

@@ -6635,165 +6684,183 @@
 			0x5b,		/* FC_END */

 /* 1304 */	

 			0x11, 0x0,	/* FC_RP */

-/* 1306 */	NdrFcShort( 0x6 ),	/* Offset= 6 (1312) */

+/* 1306 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1308) */

 /* 1308 */	

+			0x21,		/* FC_BOGUS_ARRAY */

+			0x3,		/* 3 */

+/* 1310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1312 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x0,		/*  */

+/* 1314 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1316 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 1318 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1322 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1324 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+			0x0,		/* 0 */

+/* 1326 */	NdrFcShort( 0xffbe ),	/* Offset= -66 (1260) */

+/* 1328 */	0x5c,		/* FC_PAD */

+			0x5b,		/* FC_END */

+/* 1330 */	

+			0x11, 0x0,	/* FC_RP */

+/* 1332 */	NdrFcShort( 0x6 ),	/* Offset= 6 (1338) */

+/* 1334 */	

 			0x12, 0x0,	/* FC_UP */

-/* 1310 */	NdrFcShort( 0xff8a ),	/* Offset= -118 (1192) */

-/* 1312 */	0xb4,		/* FC_USER_MARSHAL */

+/* 1336 */	NdrFcShort( 0xff70 ),	/* Offset= -144 (1192) */

+/* 1338 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

-/* 1314 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1316 */	NdrFcShort( 0x18 ),	/* 24 */

-/* 1318 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1320 */	NdrFcShort( 0xfff4 ),	/* Offset= -12 (1308) */

-/* 1322 */	

+/* 1340 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1342 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 1344 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1346 */	NdrFcShort( 0xfff4 ),	/* Offset= -12 (1334) */

+/* 1348 */	

 			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/* 1324 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1326) */

-/* 1326 */	

+/* 1350 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1352) */

+/* 1352 */	

 			0x1a,		/* FC_BOGUS_STRUCT */

 			0x3,		/* 3 */

-/* 1328 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1330 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1332 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1332) */

-/* 1334 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+/* 1354 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1356 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1358 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1358) */

+/* 1360 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 1336 */	NdrFcShort( 0xfae8 ),	/* Offset= -1304 (32) */

-/* 1338 */	0x8,		/* FC_LONG */

+/* 1362 */	NdrFcShort( 0xface ),	/* Offset= -1330 (32) */

+/* 1364 */	0x8,		/* FC_LONG */

 			0x8,		/* FC_LONG */

-/* 1340 */	0x5c,		/* FC_PAD */

+/* 1366 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 1342 */	

+/* 1368 */	

 			0x11, 0x0,	/* FC_RP */

-/* 1344 */	NdrFcShort( 0xfbce ),	/* Offset= -1074 (270) */

-/* 1346 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 1348 */	0x3,		/* FC_SMALL */

-			0x5c,		/* FC_PAD */

-/* 1350 */	

-			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 1352 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1354) */

-/* 1354 */	

-			0x2f,		/* FC_IP */

-			0x5a,		/* FC_CONSTANT_IID */

-/* 1356 */	NdrFcLong( 0x1c20f2b ),	/* 29495083 */

-/* 1360 */	NdrFcShort( 0x3dd2 ),	/* 15826 */

-/* 1362 */	NdrFcShort( 0x400f ),	/* 16399 */

-/* 1364 */	0x94,		/* 148 */

-			0x9f,		/* 159 */

-/* 1366 */	0xad,		/* 173 */

-			0x0,		/* 0 */

-/* 1368 */	0xbd,		/* 189 */

-			0xab,		/* 171 */

-/* 1370 */	0x1d,		/* 29 */

-			0x41,		/* 65 */

+/* 1370 */	NdrFcShort( 0xfbb4 ),	/* Offset= -1100 (270) */

 /* 1372 */	

-			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1374 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1376) */

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 1374 */	0x3,		/* FC_SMALL */

+			0x5c,		/* FC_PAD */

 /* 1376 */	

-			0x13, 0x0,	/* FC_OP */

+			0x11, 0x10,	/* FC_RP [pointer_deref] */

 /* 1378 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1380) */

 /* 1380 */	

-			0x21,		/* FC_BOGUS_ARRAY */

-			0x3,		/* 3 */

-/* 1382 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1384 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x54,		/* FC_DEREFERENCE */

-/* 1386 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1388 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1390 */	NdrFcLong( 0xffffffff ),	/* -1 */

-/* 1394 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1396 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

-			0x0,		/* 0 */

-/* 1398 */	NdrFcShort( 0xffd4 ),	/* Offset= -44 (1354) */

-/* 1400 */	0x5c,		/* FC_PAD */

-			0x5b,		/* FC_END */

-/* 1402 */	

-			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 1404 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1406) */

-/* 1406 */	

 			0x2f,		/* FC_IP */

 			0x5a,		/* FC_CONSTANT_IID */

-/* 1408 */	NdrFcLong( 0x35ad8070 ),	/* 900563056 */

-/* 1412 */	NdrFcShort( 0xc20c ),	/* -15860 */

-/* 1414 */	NdrFcShort( 0x4fb4 ),	/* 20404 */

-/* 1416 */	0xb0,		/* 176 */

-			0x94,		/* 148 */

-/* 1418 */	0xf4,		/* 244 */

-			0xf7,		/* 247 */

-/* 1420 */	0x27,		/* 39 */

-			0x5d,		/* 93 */

-/* 1422 */	0xd4,		/* 212 */

-			0x69,		/* 105 */

-/* 1424 */	

+/* 1382 */	NdrFcLong( 0x1c20f2b ),	/* 29495083 */

+/* 1386 */	NdrFcShort( 0x3dd2 ),	/* 15826 */

+/* 1388 */	NdrFcShort( 0x400f ),	/* 16399 */

+/* 1390 */	0x94,		/* 148 */

+			0x9f,		/* 159 */

+/* 1392 */	0xad,		/* 173 */

+			0x0,		/* 0 */

+/* 1394 */	0xbd,		/* 189 */

+			0xab,		/* 171 */

+/* 1396 */	0x1d,		/* 29 */

+			0x41,		/* 65 */

+/* 1398 */	

 			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1426 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1428) */

-/* 1428 */	

+/* 1400 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1402) */

+/* 1402 */	

 			0x13, 0x0,	/* FC_OP */

-/* 1430 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1432) */

-/* 1432 */	

-			0x1c,		/* FC_CVARRAY */

-			0x3,		/* 3 */

-/* 1434 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1436 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x0,		/*  */

-/* 1438 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

-/* 1440 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

-/* 1442 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x54,		/* FC_DEREFERENCE */

-/* 1444 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

-/* 1446 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1448 */	0x8,		/* FC_LONG */

-			0x5b,		/* FC_END */

-/* 1450 */	

-			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/* 1452 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1454) */

-/* 1454 */	

-			0x1a,		/* FC_BOGUS_STRUCT */

-			0x3,		/* 3 */

-/* 1456 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 1458 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1460 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1460) */

-/* 1462 */	0xd,		/* FC_ENUM16 */

-			0x8,		/* FC_LONG */

-/* 1464 */	0x8,		/* FC_LONG */

-			0x8,		/* FC_LONG */

-/* 1466 */	0x8,		/* FC_LONG */

-			0x5b,		/* FC_END */

-/* 1468 */	

-			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1470 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1472) */

-/* 1472 */	

-			0x13, 0x0,	/* FC_OP */

-/* 1474 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1476) */

-/* 1476 */	

+/* 1404 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1406) */

+/* 1406 */	

 			0x21,		/* FC_BOGUS_ARRAY */

 			0x3,		/* 3 */

-/* 1478 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1480 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+/* 1408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1410 */	0x28,		/* Corr desc:  parameter, FC_LONG */

 			0x54,		/* FC_DEREFERENCE */

-/* 1482 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1484 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1486 */	NdrFcLong( 0xffffffff ),	/* -1 */

-/* 1490 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1492 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+/* 1412 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1414 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1416 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1420 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1422 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 1494 */	NdrFcShort( 0xfa5c ),	/* Offset= -1444 (50) */

-/* 1496 */	0x5c,		/* FC_PAD */

+/* 1424 */	NdrFcShort( 0xffd4 ),	/* Offset= -44 (1380) */

+/* 1426 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 1498 */	

+/* 1428 */	

+			0x11, 0x10,	/* FC_RP [pointer_deref] */

+/* 1430 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1432) */

+/* 1432 */	

+			0x2f,		/* FC_IP */

+			0x5a,		/* FC_CONSTANT_IID */

+/* 1434 */	NdrFcLong( 0x35ad8070 ),	/* 900563056 */

+/* 1438 */	NdrFcShort( 0xc20c ),	/* -15860 */

+/* 1440 */	NdrFcShort( 0x4fb4 ),	/* 20404 */

+/* 1442 */	0xb0,		/* 176 */

+			0x94,		/* 148 */

+/* 1444 */	0xf4,		/* 244 */

+			0xf7,		/* 247 */

+/* 1446 */	0x27,		/* 39 */

+			0x5d,		/* 93 */

+/* 1448 */	0xd4,		/* 212 */

+			0x69,		/* 105 */

+/* 1450 */	

 			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1452 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1454) */

+/* 1454 */	

+			0x13, 0x0,	/* FC_OP */

+/* 1456 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1458) */

+/* 1458 */	

+			0x1c,		/* FC_CVARRAY */

+			0x3,		/* 3 */

+/* 1460 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1462 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x0,		/*  */

+/* 1464 */	NdrFcShort( 0x8 ),	/* ARM64 Stack size/offset = 8 */

+/* 1466 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 1468 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x54,		/* FC_DEREFERENCE */

+/* 1470 */	NdrFcShort( 0x18 ),	/* ARM64 Stack size/offset = 24 */

+/* 1472 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1474 */	0x8,		/* FC_LONG */

+			0x5b,		/* FC_END */

+/* 1476 */	

+			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

+/* 1478 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1480) */

+/* 1480 */	

+			0x1a,		/* FC_BOGUS_STRUCT */

+			0x3,		/* 3 */

+/* 1482 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 1484 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1486 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1486) */

+/* 1488 */	0xd,		/* FC_ENUM16 */

+			0x8,		/* FC_LONG */

+/* 1490 */	0x8,		/* FC_LONG */

+			0x8,		/* FC_LONG */

+/* 1492 */	0x8,		/* FC_LONG */

+			0x5b,		/* FC_END */

+/* 1494 */	

+			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1496 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1498) */

+/* 1498 */	

+			0x13, 0x0,	/* FC_OP */

 /* 1500 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1502) */

 /* 1502 */	

+			0x21,		/* FC_BOGUS_ARRAY */

+			0x3,		/* 3 */

+/* 1504 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1506 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x54,		/* FC_DEREFERENCE */

+/* 1508 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1510 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1512 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1516 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1518 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+			0x0,		/* 0 */

+/* 1520 */	NdrFcShort( 0xfa42 ),	/* Offset= -1470 (50) */

+/* 1522 */	0x5c,		/* FC_PAD */

+			0x5b,		/* FC_END */

+/* 1524 */	

+			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1526 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1528) */

+/* 1528 */	

 			0x13, 0x0,	/* FC_OP */

-/* 1504 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1506) */

-/* 1506 */	

+/* 1530 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1532) */

+/* 1532 */	

 			0x1b,		/* FC_CARRAY */

 			0x3,		/* 3 */

-/* 1508 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1510 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+/* 1534 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1536 */	0x28,		/* Corr desc:  parameter, FC_LONG */

 			0x54,		/* FC_DEREFERENCE */

-/* 1512 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

-/* 1514 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1516 */	0x8,		/* FC_LONG */

+/* 1538 */	NdrFcShort( 0x10 ),	/* ARM64 Stack size/offset = 16 */

+/* 1540 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1542 */	0x8,		/* FC_LONG */

 			0x5b,		/* FC_END */

 

 			0x0

@@ -7539,7 +7606,204 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0005, ver. 0.0,

+/* Object interface: IAccessible2_4, ver. 0.0,

+   GUID={0x610a7bec,0x91bb,0x444d,{0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29}} */

+

+#pragma code_seg(".orpc")

+static const unsigned short IAccessible2_4_FormatStringOffsetTable[] =

+    {

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    520,

+    562,

+    610,

+    666,

+    708,

+    750,

+    806,

+    862,

+    904,

+    946,

+    988,

+    1030,

+    1086,

+    1142,

+    1184,

+    1226,

+    1268,

+    1310,

+    1352,

+    1400,

+    1448,

+    1510,

+    1558

+    };

+

+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo =

+    {

+    &Object_StubDesc,

+    ia2_api_all__MIDL_ProcFormatString.Format,

+    &IAccessible2_4_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0

+    };

+

+

+static const MIDL_SERVER_INFO IAccessible2_4_ServerInfo = 

+    {

+    &Object_StubDesc,

+    0,

+    ia2_api_all__MIDL_ProcFormatString.Format,

+    &IAccessible2_4_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0,

+    0};

+CINTERFACE_PROXY_VTABLE(51) _IAccessible2_4ProxyVtbl = 

+{

+    &IAccessible2_4_ProxyInfo,

+    &IID_IAccessible2_4,

+    IUnknown_QueryInterface_Proxy,

+    IUnknown_AddRef_Proxy,

+    IUnknown_Release_Proxy ,

+    0 /* IDispatch::GetTypeInfoCount */ ,

+    0 /* IDispatch::GetTypeInfo */ ,

+    0 /* IDispatch::GetIDsOfNames */ ,

+    0 /* IDispatch_Invoke_Proxy */ ,

+    0 /* IAccessible::get_accParent */ ,

+    0 /* IAccessible::get_accChildCount */ ,

+    0 /* IAccessible::get_accChild */ ,

+    0 /* IAccessible::get_accName */ ,

+    0 /* IAccessible::get_accValue */ ,

+    0 /* IAccessible::get_accDescription */ ,

+    0 /* IAccessible::get_accRole */ ,

+    0 /* IAccessible::get_accState */ ,

+    0 /* IAccessible::get_accHelp */ ,

+    0 /* IAccessible::get_accHelpTopic */ ,

+    0 /* IAccessible::get_accKeyboardShortcut */ ,

+    0 /* IAccessible::get_accFocus */ ,

+    0 /* IAccessible::get_accSelection */ ,

+    0 /* IAccessible::get_accDefaultAction */ ,

+    0 /* IAccessible::accSelect */ ,

+    0 /* IAccessible::accLocation */ ,

+    0 /* IAccessible::accNavigate */ ,

+    0 /* IAccessible::accHitTest */ ,

+    0 /* IAccessible::accDoDefaultAction */ ,

+    0 /* IAccessible::put_accName */ ,

+    0 /* IAccessible::put_accValue */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::role */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_3::get_selectionRanges */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_4::setSelectionRanges */

+};

+

+

+static const PRPC_STUB_FUNCTION IAccessible2_4_table[] =

+{

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2

+};

+

+CInterfaceStubVtbl _IAccessible2_4StubVtbl =

+{

+    &IID_IAccessible2_4,

+    &IAccessible2_4_ServerInfo,

+    51,

+    &IAccessible2_4_table[-3],

+    CStdStubBuffer_DELEGATING_METHODS

+};

+

+

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -7549,8 +7813,8 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =

     {

-    1558,

     1606,

+    1654,

     84

     };

 

@@ -7603,10 +7867,10 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =

     {

-    1648,

-    1690,

-    1732,

-    1774

+    1696,

+    1738,

+    1780,

+    1822

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =

@@ -7653,7 +7917,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0007, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0008, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -7663,25 +7927,25 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleText_FormatStringOffsetTable[] =

     {

-    1816,

     1864,

+    1912,

     84,

-    1926,

-    2002,

-    2044,

-    2106,

-    2162,

-    2218,

-    2288,

-    2358,

-    2428,

-    2470,

-    2512,

-    2568,

-    2610,

-    2666,

-    2736,

-    2778

+    1974,

+    2050,

+    2092,

+    2154,

+    2210,

+    2266,

+    2336,

+    2406,

+    2476,

+    2518,

+    2560,

+    2616,

+    2658,

+    2714,

+    2784,

+    2826

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =

@@ -7749,26 +8013,26 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleText2_FormatStringOffsetTable[] =

     {

-    1816,

     1864,

+    1912,

     84,

-    1926,

-    2002,

-    2044,

-    2106,

-    2162,

-    2218,

-    2288,

-    2358,

-    2428,

-    2470,

-    2512,

-    2568,

-    2610,

-    2666,

-    2736,

-    2778,

-    2820

+    1974,

+    2050,

+    2092,

+    2154,

+    2210,

+    2266,

+    2336,

+    2406,

+    2476,

+    2518,

+    2560,

+    2616,

+    2658,

+    2714,

+    2784,

+    2826,

+    2868

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo =

@@ -7837,13 +8101,13 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =

     {

-    1816,

-    2890,

+    1864,

     2938,

     2986,

     3034,

-    3076,

-    3132

+    3082,

+    3124,

+    3180

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =

@@ -7905,11 +8169,11 @@
     362,

     424,

     472,

-    3188,

     3236,

     3284,

-    3326,

-    3368

+    3332,

+    3374,

+    3416

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =

@@ -7969,28 +8233,28 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =

     {

-    1816,

     1864,

+    1912,

     84,

-    1926,

-    2002,

-    2044,

-    2106,

-    2162,

-    2218,

-    2288,

-    2358,

-    2428,

-    2470,

-    2512,

-    2568,

-    2610,

-    2666,

-    2736,

-    2778,

-    3410,

-    3452,

-    3500

+    1974,

+    2050,

+    2092,

+    2154,

+    2210,

+    2266,

+    2336,

+    2406,

+    2476,

+    2518,

+    2560,

+    2616,

+    2658,

+    2714,

+    2784,

+    2826,

+    3458,

+    3500,

+    3548

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =

@@ -8061,29 +8325,29 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] =

     {

-    1816,

     1864,

+    1912,

     84,

-    1926,

-    2002,

-    2044,

-    2106,

-    2162,

-    2218,

-    2288,

-    2358,

-    2428,

-    2470,

-    2512,

-    2568,

-    2610,

-    2666,

-    2736,

-    2778,

-    3410,

-    3452,

+    1974,

+    2050,

+    2092,

+    2154,

+    2210,

+    2266,

+    2336,

+    2406,

+    2476,

+    2518,

+    2560,

+    2616,

+    2658,

+    2714,

+    2784,

+    2826,

+    3458,

     3500,

-    3548

+    3548,

+    3596

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo =

@@ -8155,35 +8419,35 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =

     {

-    3596,

-    3652,

-    3694,

-    3750,

+    3644,

+    3700,

+    3742,

     3798,

-    3854,

+    3846,

     3902,

     3950,

-    3284,

-    3326,

-    3992,

-    4034,

-    4076,

+    3998,

+    3332,

+    3374,

+    4040,

+    4082,

     4124,

-    4180,

+    4172,

     4228,

     4276,

-    4332,

-    4388,

-    4444,

-    4486,

+    4324,

+    4380,

+    4436,

+    4492,

     4534,

     4582,

-    4638,

-    4680,

-    4722,

-    4764,

-    4806,

-    4882

+    4630,

+    4686,

+    4728,

+    4770,

+    4812,

+    4854,

+    4930

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =

@@ -8261,26 +8525,26 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =

     {

-    3596,

-    3652,

+    3644,

+    3700,

     314,

-    4924,

-    2002,

-    4966,

-    5008,

-    3950,

-    5050,

+    4972,

+    2050,

+    5014,

+    5056,

+    3998,

     5098,

     5146,

     5194,

     5242,

-    5284,

+    5290,

     5332,

     5380,

-    5422,

-    5464,

-    5506,

-    5548

+    5428,

+    5470,

+    5512,

+    5554,

+    5596

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =

@@ -8350,14 +8614,14 @@
 static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =

     {

     230,

-    5590,

-    84,

-    4924,

     5638,

-    4966,

+    84,

+    4972,

     5686,

-    5728,

-    5798

+    5014,

+    5734,

+    5776,

+    5846

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =

@@ -8416,8 +8680,8 @@
 static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =

     {

     0,

-    5840,

-    5896

+    5888,

+    5944

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =

@@ -8463,7 +8727,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0017, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -8475,8 +8739,8 @@
     {

     0,

     42,

-    5944,

-    5986

+    5992,

+    6034

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =

@@ -8529,7 +8793,7 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] =

     {

-    6028

+    6076

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo =

@@ -8573,7 +8837,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0019, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0020, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 static const MIDL_STUB_DESC Object_StubDesc = 

@@ -8619,6 +8883,7 @@
     ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl,

+    ( CInterfaceProxyVtbl *) &_IAccessible2_4ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,

     0

@@ -8643,6 +8908,7 @@
     ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl,

+    ( CInterfaceStubVtbl *) &_IAccessible2_4StubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,

     0

@@ -8667,6 +8933,7 @@
     "IAccessibleText2",

     "IAccessibleDocument",

     "IAccessible2_2",

+    "IAccessible2_4",

     "IAccessibleRelation",

     "IAccessibleText",

     0

@@ -8691,6 +8958,7 @@
     0,

     0,

     &IID_IAccessible,

+    &IID_IAccessible,

     0,

     0,

     0

@@ -8703,12 +8971,12 @@
 {

     IID_BS_LOOKUP_SETUP

 

-    IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 19, 16 )

+    IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 20, 16 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 )

-    IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 19, *pIndex )

+    IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 20, *pIndex )

     

 }

 

@@ -8719,7 +8987,7 @@
     (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList,

     (const IID ** ) & _ia2_api_all_BaseIIDList,

     & _ia2_api_all_IID_Lookup, 

-    19,

+    20,

     2,

     0, /* table of [async_uuid] interfaces */

     0, /* Filler1 */

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h
index 824482e5..d1d5cfa 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h
@@ -80,6 +80,13 @@
 #endif 	/* __IAccessible2_3_FWD_DEFINED__ */

 

 

+#ifndef __IAccessible2_4_FWD_DEFINED__

+#define __IAccessible2_4_FWD_DEFINED__

+typedef interface IAccessible2_4 IAccessible2_4;

+

+#endif 	/* __IAccessible2_4_FWD_DEFINED__ */

+

+

 #ifndef __IAccessibleComponent_FWD_DEFINED__

 #define __IAccessibleComponent_FWD_DEFINED__

 typedef interface IAccessibleComponent IAccessibleComponent;

@@ -2243,15 +2250,491 @@
 #endif 	/* __IAccessible2_3_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0005 */

+#ifndef __IAccessible2_4_INTERFACE_DEFINED__

+#define __IAccessible2_4_INTERFACE_DEFINED__

+

+/* interface IAccessible2_4 */

+/* [uuid][object] */ 

+

+

+EXTERN_C const IID IID_IAccessible2_4;

+

+#if defined(__cplusplus) && !defined(CINTERFACE)

+    

+    MIDL_INTERFACE("610a7bec-91bb-444d-a336-a0daf13c4c29")

+    IAccessible2_4 : public IAccessible2_3

+    {

+    public:

+        virtual HRESULT STDMETHODCALLTYPE setSelectionRanges( 

+            /* [in] */ long nRanges,

+            /* [size_is][in] */ IA2Range *ranges) = 0;

+        

+    };

+    

+    

+#else 	/* C style interface */

+

+    typedef struct IAccessible2_4Vtbl

+    {

+        BEGIN_INTERFACE

+        

+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 

+            IAccessible2_4 * This,

+            /* [in] */ REFIID riid,

+            /* [annotation][iid_is][out] */ 

+            _COM_Outptr_  void **ppvObject);

+        

+        ULONG ( STDMETHODCALLTYPE *AddRef )( 

+            IAccessible2_4 * This);

+        

+        ULONG ( STDMETHODCALLTYPE *Release )( 

+            IAccessible2_4 * This);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 

+            IAccessible2_4 * This,

+            /* [out] */ UINT *pctinfo);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 

+            IAccessible2_4 * This,

+            /* [in] */ UINT iTInfo,

+            /* [in] */ LCID lcid,

+            /* [out] */ ITypeInfo **ppTInfo);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 

+            IAccessible2_4 * This,

+            /* [in] */ REFIID riid,

+            /* [size_is][in] */ LPOLESTR *rgszNames,

+            /* [range][in] */ UINT cNames,

+            /* [in] */ LCID lcid,

+            /* [size_is][out] */ DISPID *rgDispId);

+        

+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 

+            IAccessible2_4 * 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);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ IDispatch **ppdispParent);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *pcountChildren);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( 

+            IAccessible2_4 * This,

+            /* [in] */ VARIANT varChild,

+            /* [retval][out] */ IDispatch **ppdispChild);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszName);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszValue);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszDescription);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ VARIANT *pvarRole);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ VARIANT *pvarState);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszHelp);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( 

+            IAccessible2_4 * This,

+            /* [out] */ BSTR *pszHelpFile,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ long *pidTopic);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszKeyboardShortcut);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ VARIANT *pvarChild);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ VARIANT *pvarChildren);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszDefaultAction);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( 

+            IAccessible2_4 * This,

+            /* [in] */ long flagsSelect,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( 

+            IAccessible2_4 * This,

+            /* [out] */ long *pxLeft,

+            /* [out] */ long *pyTop,

+            /* [out] */ long *pcxWidth,

+            /* [out] */ long *pcyHeight,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( 

+            IAccessible2_4 * This,

+            /* [in] */ long navDir,

+            /* [optional][in] */ VARIANT varStart,

+            /* [retval][out] */ VARIANT *pvarEndUpAt);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( 

+            IAccessible2_4 * This,

+            /* [in] */ long xLeft,

+            /* [in] */ long yTop,

+            /* [retval][out] */ VARIANT *pvarChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [in] */ BSTR szName);

+        

+        /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [in] */ BSTR szValue);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *nRelations);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( 

+            IAccessible2_4 * This,

+            /* [in] */ long relationIndex,

+            /* [retval][out] */ IAccessibleRelation **relation);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( 

+            IAccessible2_4 * This,

+            /* [in] */ long maxRelations,

+            /* [length_is][size_is][out] */ IAccessibleRelation **relations,

+            /* [retval][out] */ long *nRelations);

+        

+        HRESULT ( STDMETHODCALLTYPE *role )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *role);

+        

+        HRESULT ( STDMETHODCALLTYPE *scrollTo )( 

+            IAccessible2_4 * This,

+            /* [in] */ enum IA2ScrollType scrollType);

+        

+        HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( 

+            IAccessible2_4 * This,

+            /* [in] */ enum IA2CoordinateType coordinateType,

+            /* [in] */ long x,

+            /* [in] */ long y);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( 

+            IAccessible2_4 * This,

+            /* [out] */ long *groupLevel,

+            /* [out] */ long *similarItemsInGroup,

+            /* [retval][out] */ long *positionInGroup);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ AccessibleStates *states);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ BSTR *extendedRole);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ BSTR *localizedExtendedRole);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *nExtendedStates);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( 

+            IAccessible2_4 * This,

+            /* [in] */ long maxExtendedStates,

+            /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,

+            /* [retval][out] */ long *nExtendedStates);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( 

+            IAccessible2_4 * This,

+            /* [in] */ long maxLocalizedExtendedStates,

+            /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,

+            /* [retval][out] */ long *nLocalizedExtendedStates);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *uniqueID);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ HWND *windowHandle);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *indexInParent);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ IA2Locale *locale);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ BSTR *attributes);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )( 

+            IAccessible2_4 * This,

+            /* [in] */ BSTR name,

+            /* [retval][out] */ VARIANT *attribute);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )( 

+            IAccessible2_4 * This,

+            /* [out] */ IUnknown **accessible,

+            /* [retval][out] */ long *caretOffset);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )( 

+            IAccessible2_4 * This,

+            /* [in] */ BSTR type,

+            /* [in] */ long maxTargets,

+            /* [size_is][size_is][out] */ IUnknown ***targets,

+            /* [retval][out] */ long *nTargets);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectionRanges )( 

+            IAccessible2_4 * This,

+            /* [size_is][size_is][out] */ IA2Range **ranges,

+            /* [retval][out] */ long *nRanges);

+        

+        HRESULT ( STDMETHODCALLTYPE *setSelectionRanges )( 

+            IAccessible2_4 * This,

+            /* [in] */ long nRanges,

+            /* [size_is][in] */ IA2Range *ranges);

+        

+        END_INTERFACE

+    } IAccessible2_4Vtbl;

+

+    interface IAccessible2_4

+    {

+        CONST_VTBL struct IAccessible2_4Vtbl *lpVtbl;

+    };

+

+    

+

+#ifdef COBJMACROS

+

+

+#define IAccessible2_4_QueryInterface(This,riid,ppvObject)	\

+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

+

+#define IAccessible2_4_AddRef(This)	\

+    ( (This)->lpVtbl -> AddRef(This) ) 

+

+#define IAccessible2_4_Release(This)	\

+    ( (This)->lpVtbl -> Release(This) ) 

+

+

+#define IAccessible2_4_GetTypeInfoCount(This,pctinfo)	\

+    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) 

+

+#define IAccessible2_4_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\

+    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) 

+

+#define IAccessible2_4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\

+    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) 

+

+#define IAccessible2_4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\

+    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) 

+

+

+#define IAccessible2_4_get_accParent(This,ppdispParent)	\

+    ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) 

+

+#define IAccessible2_4_get_accChildCount(This,pcountChildren)	\

+    ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) 

+

+#define IAccessible2_4_get_accChild(This,varChild,ppdispChild)	\

+    ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) 

+

+#define IAccessible2_4_get_accName(This,varChild,pszName)	\

+    ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) 

+

+#define IAccessible2_4_get_accValue(This,varChild,pszValue)	\

+    ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) 

+

+#define IAccessible2_4_get_accDescription(This,varChild,pszDescription)	\

+    ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) 

+

+#define IAccessible2_4_get_accRole(This,varChild,pvarRole)	\

+    ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) 

+

+#define IAccessible2_4_get_accState(This,varChild,pvarState)	\

+    ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) 

+

+#define IAccessible2_4_get_accHelp(This,varChild,pszHelp)	\

+    ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) 

+

+#define IAccessible2_4_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic)	\

+    ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) 

+

+#define IAccessible2_4_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut)	\

+    ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) 

+

+#define IAccessible2_4_get_accFocus(This,pvarChild)	\

+    ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) 

+

+#define IAccessible2_4_get_accSelection(This,pvarChildren)	\

+    ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) 

+

+#define IAccessible2_4_get_accDefaultAction(This,varChild,pszDefaultAction)	\

+    ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) 

+

+#define IAccessible2_4_accSelect(This,flagsSelect,varChild)	\

+    ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) 

+

+#define IAccessible2_4_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild)	\

+    ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) 

+

+#define IAccessible2_4_accNavigate(This,navDir,varStart,pvarEndUpAt)	\

+    ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) 

+

+#define IAccessible2_4_accHitTest(This,xLeft,yTop,pvarChild)	\

+    ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) 

+

+#define IAccessible2_4_accDoDefaultAction(This,varChild)	\

+    ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) 

+

+#define IAccessible2_4_put_accName(This,varChild,szName)	\

+    ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) 

+

+#define IAccessible2_4_put_accValue(This,varChild,szValue)	\

+    ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) 

+

+

+#define IAccessible2_4_get_nRelations(This,nRelations)	\

+    ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) 

+

+#define IAccessible2_4_get_relation(This,relationIndex,relation)	\

+    ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) 

+

+#define IAccessible2_4_get_relations(This,maxRelations,relations,nRelations)	\

+    ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) 

+

+#define IAccessible2_4_role(This,role)	\

+    ( (This)->lpVtbl -> role(This,role) ) 

+

+#define IAccessible2_4_scrollTo(This,scrollType)	\

+    ( (This)->lpVtbl -> scrollTo(This,scrollType) ) 

+

+#define IAccessible2_4_scrollToPoint(This,coordinateType,x,y)	\

+    ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) 

+

+#define IAccessible2_4_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup)	\

+    ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) 

+

+#define IAccessible2_4_get_states(This,states)	\

+    ( (This)->lpVtbl -> get_states(This,states) ) 

+

+#define IAccessible2_4_get_extendedRole(This,extendedRole)	\

+    ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) 

+

+#define IAccessible2_4_get_localizedExtendedRole(This,localizedExtendedRole)	\

+    ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) 

+

+#define IAccessible2_4_get_nExtendedStates(This,nExtendedStates)	\

+    ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) 

+

+#define IAccessible2_4_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates)	\

+    ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) 

+

+#define IAccessible2_4_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates)	\

+    ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) 

+

+#define IAccessible2_4_get_uniqueID(This,uniqueID)	\

+    ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) 

+

+#define IAccessible2_4_get_windowHandle(This,windowHandle)	\

+    ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) 

+

+#define IAccessible2_4_get_indexInParent(This,indexInParent)	\

+    ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) 

+

+#define IAccessible2_4_get_locale(This,locale)	\

+    ( (This)->lpVtbl -> get_locale(This,locale) ) 

+

+#define IAccessible2_4_get_attributes(This,attributes)	\

+    ( (This)->lpVtbl -> get_attributes(This,attributes) ) 

+

+

+#define IAccessible2_4_get_attribute(This,name,attribute)	\

+    ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) 

+

+#define IAccessible2_4_get_accessibleWithCaret(This,accessible,caretOffset)	\

+    ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) 

+

+#define IAccessible2_4_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets)	\

+    ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) 

+

+

+#define IAccessible2_4_get_selectionRanges(This,ranges,nRanges)	\

+    ( (This)->lpVtbl -> get_selectionRanges(This,ranges,nRanges) ) 

+

+

+#define IAccessible2_4_setSelectionRanges(This,nRanges,ranges)	\

+    ( (This)->lpVtbl -> setSelectionRanges(This,nRanges,ranges) ) 

+

+#endif /* COBJMACROS */

+

+

+#endif 	/* C style interface */

+

+

+

+

+#endif 	/* __IAccessible2_4_INTERFACE_DEFINED__ */

+

+

+/* interface __MIDL_itf_ia2_api_all_0000_0006 */

 /* [local] */ 

 

 typedef long IA2Color;

 

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec;

 

 #ifndef __IAccessibleComponent_INTERFACE_DEFINED__

 #define __IAccessibleComponent_INTERFACE_DEFINED__

@@ -2465,7 +2948,7 @@
 #endif 	/* __IAccessibleValue_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0007 */

+/* interface __MIDL_itf_ia2_api_all_0000_0008 */

 /* [local] */ 

 

 typedef struct IA2TextSegment

@@ -2487,8 +2970,8 @@
     } ;

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_s_ifspec;

 

 #ifndef __IAccessibleText_INTERFACE_DEFINED__

 #define __IAccessibleText_INTERFACE_DEFINED__

@@ -4943,7 +5426,7 @@
 #endif 	/* __IAccessibleImage_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0017 */

+/* interface __MIDL_itf_ia2_api_all_0000_0018 */

 /* [local] */ 

 

 

@@ -4987,8 +5470,8 @@
     } ;

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec;

 

 #ifndef __IAccessibleApplication_INTERFACE_DEFINED__

 #define __IAccessibleApplication_INTERFACE_DEFINED__

@@ -5180,7 +5663,7 @@
 #endif 	/* __IAccessibleDocument_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0019 */

+/* interface __MIDL_itf_ia2_api_all_0000_0020 */

 /* [local] */ 

 

 

@@ -5188,8 +5671,8 @@
 

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_s_ifspec;

 

 

 #ifndef __IAccessible2Lib_LIBRARY_DEFINED__

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c
index f777216..0ad99c5 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c
@@ -82,6 +82,9 @@
 MIDL_DEFINE_GUID(IID, IID_IAccessible2_3,0x5BE18059,0x762E,0x4E73,0x94,0x76,0xAB,0xA2,0x94,0xFE,0xD4,0x11);

 

 

+MIDL_DEFINE_GUID(IID, IID_IAccessible2_4,0x610a7bec,0x91bb,0x444d,0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29);

+

+

 MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);

 

 

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c
index a922f8e..f319be8 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c
@@ -46,8 +46,8 @@
 

 #include "ia2_api_all.h"

 

-#define TYPE_FORMAT_STRING_SIZE   1519                              

-#define PROC_FORMAT_STRING_SIZE   5489                              

+#define TYPE_FORMAT_STRING_SIZE   1545                              

+#define PROC_FORMAT_STRING_SIZE   5533                              

 #define EXPR_FORMAT_STRING_SIZE   1                                 

 #define TRANSMIT_AS_TABLE_SIZE    0            

 #define WIRE_MARSHAL_TABLE_SIZE   3            

@@ -118,6 +118,13 @@
 extern const MIDL_STUB_DESC Object_StubDesc;

 

 

+extern const MIDL_SERVER_INFO IAccessible2_4_ServerInfo;

+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo;

+

+

+extern const MIDL_STUB_DESC Object_StubDesc;

+

+

 extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;

 extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;

 

@@ -1514,37 +1521,36 @@
 /* 1408 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_locationInParent */

+	/* Procedure setSelectionRanges */

 

 /* 1410 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1412 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1416 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1416 */	NdrFcShort( 0x32 ),	/* 50 */

 /* 1418 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1420 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1422 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1424 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1420 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1422 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1424 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 1426 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1428 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1430 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1430 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1432 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1434 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter x */

+	/* Parameter nRanges */

 

-/* 1436 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1436 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 1438 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 1440 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter y */

+	/* Parameter ranges */

 

-/* 1442 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1442 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 1444 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1446 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 1446 */	NdrFcShort( 0x51c ),	/* Type Offset=1308 */

 

 	/* Return value */

 

@@ -1553,17 +1559,17 @@
 /* 1452 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_foreground */

+	/* Procedure get_locationInParent */

 

 /* 1454 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1456 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1460 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1462 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1460 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1462 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 1464 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1466 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1466 */	NdrFcShort( 0x40 ),	/* 64 */

 /* 1468 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 1470 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 1472 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -1571,142 +1577,181 @@
 /* 1476 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1478 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter foreground */

+	/* Parameter x */

 

 /* 1480 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 1482 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 1484 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter y */

 

-/* 1486 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1486 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 1488 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 1490 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_currentValue */

+	/* Return value */

 

-/* 1492 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1492 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1494 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1496 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_foreground */

+

+/* 1498 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1494 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1498 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1500 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1502 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1504 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1506 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1500 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1504 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1506 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1508 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1510 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1512 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 1508 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1510 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1512 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1514 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1514 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

 /* 1516 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1518 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1520 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1522 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter currentValue */

+	/* Parameter foreground */

 

-/* 1518 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 1520 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1522 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 1524 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1526 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1528 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1524 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1526 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1528 */	0x8,		/* FC_LONG */

+/* 1530 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1532 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1534 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentValue */

+

+/* 1536 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1538 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1542 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1544 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1546 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1548 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1550 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 1552 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1554 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1556 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1558 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1560 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter currentValue */

+

+/* 1562 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 1564 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1566 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+

+	/* Return value */

+

+/* 1568 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1570 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1572 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setCurrentValue */

 

-/* 1530 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1574 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1532 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1536 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1538 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1540 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1542 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1544 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1576 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1580 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1582 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1584 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1586 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1588 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1546 */	0xa,		/* 10 */

+/* 1590 */	0xa,		/* 10 */

 			0x85,		/* Ext Flags:  new corr desc, srv corr check, has big byval param */

-/* 1548 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1550 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1552 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1554 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1592 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1594 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1596 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1598 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 1556 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 1558 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1560 */	NdrFcShort( 0x520 ),	/* Type Offset=1312 */

+/* 1600 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 1602 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1604 */	NdrFcShort( 0x53a ),	/* Type Offset=1338 */

 

 	/* Return value */

 

-/* 1562 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1564 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1566 */	0x8,		/* FC_LONG */

+/* 1606 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1608 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1610 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_maximumValue */

 

-/* 1568 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1612 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1570 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1574 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 1576 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1578 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1580 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1582 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1614 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1618 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 1620 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1622 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1624 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1626 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1584 */	0xa,		/* 10 */

+/* 1628 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1586 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1588 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1590 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1592 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1630 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1632 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1636 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter maximumValue */

 

-/* 1594 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 1596 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1598 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 1638 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 1640 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1642 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

 

 	/* Return value */

 

-/* 1600 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1602 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1604 */	0x8,		/* FC_LONG */

+/* 1644 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1646 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1648 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_minimumValue */

 

-/* 1606 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1650 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1608 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1612 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 1614 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1616 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1618 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1620 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1652 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1656 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 1658 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1660 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1662 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1664 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1622 */	0xa,		/* 10 */

+/* 1666 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1624 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1628 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1630 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1668 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1672 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1674 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter minimumValue */

 

-/* 1632 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 1634 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1636 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 1676 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 1678 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1680 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

 

 	/* Return value */

 

-/* 1638 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1640 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1642 */	0x8,		/* FC_LONG */

+/* 1682 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1684 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1686 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure copyText */

@@ -1714,169 +1759,169 @@
 

 	/* Procedure addSelection */

 

-/* 1644 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1646 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1650 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1652 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1654 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1656 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1658 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 1660 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1662 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1664 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1666 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1668 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter startOffset */

-

-

-	/* Parameter startOffset */

-

-/* 1670 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1672 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1674 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-

-	/* Parameter endOffset */

-

-/* 1676 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1678 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1680 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-

-	/* Return value */

-

-/* 1682 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1684 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1686 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_attributes */

-

 /* 1688 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1690 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1694 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1696 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 1698 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1700 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1702 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x5,		/* 5 */

+/* 1694 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1696 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1698 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1700 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1702 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 1704 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1706 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1706 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1708 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1710 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1712 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

+

+

+	/* Parameter startOffset */

 

 /* 1714 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 1716 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 1718 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter startOffset */

+	/* Parameter endOffset */

 

-/* 1720 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Parameter endOffset */

+

+/* 1720 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 1722 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 1724 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter endOffset */

+	/* Return value */

 

-/* 1726 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Return value */

+

+/* 1726 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 1728 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 1730 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_attributes */

+

+/* 1732 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1734 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1738 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1740 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 1742 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1744 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 1746 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x5,		/* 5 */

+/* 1748 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1750 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1752 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1754 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1756 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter offset */

+

+/* 1758 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1760 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1762 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter startOffset */

+

+/* 1764 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1766 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1768 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter endOffset */

+

+/* 1770 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1772 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1774 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Parameter textAttributes */

 

-/* 1732 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1734 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1736 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 1776 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1778 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1780 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1738 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1740 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1742 */	0x8,		/* FC_LONG */

+/* 1782 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1784 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 1786 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_characterExtents */

 

-/* 1744 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1788 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1746 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1750 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 1752 */	NdrFcShort( 0x40 ),	/* X64 Stack size/offset = 64 */

-/* 1754 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1756 */	NdrFcShort( 0x78 ),	/* 120 */

-/* 1758 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1790 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1794 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 1796 */	NdrFcShort( 0x40 ),	/* X64 Stack size/offset = 64 */

+/* 1798 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1800 */	NdrFcShort( 0x78 ),	/* 120 */

+/* 1802 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x7,		/* 7 */

-/* 1760 */	0xa,		/* 10 */

+/* 1804 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1762 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1764 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1766 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1768 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1806 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1808 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1810 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1812 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 1770 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1772 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1774 */	0x8,		/* FC_LONG */

+/* 1814 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1816 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1818 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordType */

 

-/* 1776 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1778 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1780 */	0xd,		/* FC_ENUM16 */

+/* 1820 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1822 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1824 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 1782 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1784 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1786 */	0x8,		/* FC_LONG */

+/* 1826 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1828 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1830 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 1788 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1790 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1792 */	0x8,		/* FC_LONG */

+/* 1832 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1834 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1836 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter width */

 

-/* 1794 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1796 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1798 */	0x8,		/* FC_LONG */

+/* 1838 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1840 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 1842 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter height */

 

-/* 1800 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1802 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 1804 */	0x8,		/* FC_LONG */

+/* 1844 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1846 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 1848 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1806 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1808 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 1810 */	0x8,		/* FC_LONG */

+/* 1850 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1852 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 1854 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nRows */

@@ -1884,30 +1929,30 @@
 

 	/* Procedure get_nSelections */

 

-/* 1812 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1856 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1814 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1818 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 1820 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1822 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1824 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1826 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1858 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1862 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 1864 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1866 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1868 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1870 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 1828 */	0xa,		/* 10 */

+/* 1872 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1830 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1832 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1834 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1836 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1874 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1876 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1878 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1880 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowCount */

 

 

 	/* Parameter nSelections */

 

-/* 1838 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1840 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1842 */	0x8,		/* FC_LONG */

+/* 1882 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1884 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1886 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -1915,769 +1960,731 @@
 

 	/* Return value */

 

-/* 1844 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1846 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1848 */	0x8,		/* FC_LONG */

+/* 1888 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1890 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1892 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_offsetAtPoint */

 

-/* 1850 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1894 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1852 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1856 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1858 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 1860 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 1862 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1864 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1896 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1900 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1902 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 1904 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 1906 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1908 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x5,		/* 5 */

-/* 1866 */	0xa,		/* 10 */

+/* 1910 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1868 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1870 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1872 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1874 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1912 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1914 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1916 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1918 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter x */

 

-/* 1876 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1878 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1880 */	0x8,		/* FC_LONG */

+/* 1920 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1922 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1924 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 1882 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1884 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1886 */	0x8,		/* FC_LONG */

+/* 1926 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1928 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1930 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordType */

 

-/* 1888 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1890 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1892 */	0xd,		/* FC_ENUM16 */

+/* 1932 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1934 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1936 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 1894 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1896 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1898 */	0x8,		/* FC_LONG */

+/* 1938 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1940 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1942 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1900 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1902 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1904 */	0x8,		/* FC_LONG */

+/* 1944 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1946 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 1948 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selection */

 

-/* 1906 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1950 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1908 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1912 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1914 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1916 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1918 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1920 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1952 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1956 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1958 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 1960 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1962 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 1964 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 1922 */	0xa,		/* 10 */

+/* 1966 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1924 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1926 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1928 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1930 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1968 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1970 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1972 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1974 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 1932 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1934 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1936 */	0x8,		/* FC_LONG */

+/* 1976 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1978 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1980 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 1938 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1940 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1942 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-/* 1944 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1946 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1948 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1950 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1952 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 1954 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_text */

-

-/* 1956 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1958 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1962 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1964 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 1966 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1968 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1970 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x4,		/* 4 */

-/* 1972 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1974 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1976 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1978 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1980 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter startOffset */

-

-/* 1982 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1984 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1982 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1984 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 1986 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 1988 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1990 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1988 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1990 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 1992 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 1994 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1996 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 1998 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_text */

+

+/* 2000 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2002 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2006 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2008 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2010 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2012 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2014 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x4,		/* 4 */

+/* 2016 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 2018 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2020 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2022 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2024 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter startOffset */

+

+/* 2026 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2028 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2030 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter endOffset */

+

+/* 2032 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2034 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2036 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Parameter text */

 

-/* 1994 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1996 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1998 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2038 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2040 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2042 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2000 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2002 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2004 */	0x8,		/* FC_LONG */

+/* 2044 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2046 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2048 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textBeforeOffset */

 

-/* 2006 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2050 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2008 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2012 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2014 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 2016 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2018 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2020 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2052 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2056 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2058 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 2060 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2062 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2064 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2022 */	0xa,		/* 10 */

+/* 2066 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2024 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2026 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2028 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2030 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2068 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2070 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2072 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2074 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2032 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2034 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2036 */	0x8,		/* FC_LONG */

+/* 2076 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2078 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2080 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2038 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2040 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2042 */	0xd,		/* FC_ENUM16 */

+/* 2082 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2084 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2086 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2044 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2046 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2048 */	0x8,		/* FC_LONG */

+/* 2088 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2090 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2092 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2050 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2052 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2054 */	0x8,		/* FC_LONG */

+/* 2094 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2096 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2098 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2056 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2058 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2060 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2100 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2102 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2104 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2062 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2064 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 2066 */	0x8,		/* FC_LONG */

+/* 2106 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2108 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2110 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textAfterOffset */

 

-/* 2068 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2112 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2070 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2074 */	NdrFcShort( 0xc ),	/* 12 */

-/* 2076 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 2078 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2080 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2082 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2114 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2118 */	NdrFcShort( 0xc ),	/* 12 */

+/* 2120 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 2122 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2124 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2126 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2084 */	0xa,		/* 10 */

+/* 2128 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2086 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2088 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2090 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2092 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2130 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2132 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2134 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2136 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2094 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2096 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2098 */	0x8,		/* FC_LONG */

+/* 2138 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2140 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2142 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2100 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2102 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2104 */	0xd,		/* FC_ENUM16 */

+/* 2144 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2146 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2148 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2106 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2108 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2110 */	0x8,		/* FC_LONG */

+/* 2150 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2152 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2154 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2112 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2114 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2116 */	0x8,		/* FC_LONG */

+/* 2156 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2158 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2160 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2118 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2120 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2122 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2162 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2164 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2166 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2124 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2126 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 2128 */	0x8,		/* FC_LONG */

+/* 2168 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2170 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2172 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textAtOffset */

 

-/* 2130 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2174 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2132 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2136 */	NdrFcShort( 0xd ),	/* 13 */

-/* 2138 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 2140 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2142 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2144 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2176 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2180 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2182 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 2184 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2186 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2188 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2146 */	0xa,		/* 10 */

+/* 2190 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2148 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2150 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2152 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2154 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2192 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2194 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2196 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2198 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2156 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2158 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2160 */	0x8,		/* FC_LONG */

+/* 2200 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2202 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2204 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2162 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2164 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2166 */	0xd,		/* FC_ENUM16 */

+/* 2206 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2208 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2210 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2168 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2170 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2172 */	0x8,		/* FC_LONG */

+/* 2212 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2214 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2216 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2174 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2176 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2178 */	0x8,		/* FC_LONG */

+/* 2218 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2220 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2222 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2180 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2182 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2184 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2224 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2226 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2228 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2186 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2188 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 2190 */	0x8,		/* FC_LONG */

+/* 2230 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2232 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2234 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure removeSelection */

 

-/* 2192 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2236 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2194 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2198 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2200 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2202 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2204 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2206 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2238 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2242 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2244 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2246 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2248 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2250 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2208 */	0xa,		/* 10 */

+/* 2252 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2210 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2212 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2214 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2216 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2256 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2258 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2260 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2218 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2220 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2222 */	0x8,		/* FC_LONG */

+/* 2262 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2264 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2266 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2224 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2226 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2228 */	0x8,		/* FC_LONG */

+/* 2268 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2270 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2272 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setCaretOffset */

 

-/* 2230 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2274 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2232 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2236 */	NdrFcShort( 0xf ),	/* 15 */

-/* 2238 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2240 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2242 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2244 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2276 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2280 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2282 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2284 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2286 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2288 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2246 */	0xa,		/* 10 */

+/* 2290 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2248 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2250 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2252 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2292 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2294 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2296 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2298 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2256 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2258 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2260 */	0x8,		/* FC_LONG */

+/* 2300 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2302 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2304 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2262 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2264 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2266 */	0x8,		/* FC_LONG */

+/* 2306 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2308 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2310 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setSelection */

 

-/* 2268 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2312 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2270 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2274 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2276 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2278 */	NdrFcShort( 0x18 ),	/* 24 */

-/* 2280 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2282 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2314 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2318 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2320 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2322 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 2324 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2326 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 2284 */	0xa,		/* 10 */

+/* 2328 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2286 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2288 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2290 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2292 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2330 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2332 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2334 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2336 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2294 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2296 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2298 */	0x8,		/* FC_LONG */

+/* 2338 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2340 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2342 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2300 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2302 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2304 */	0x8,		/* FC_LONG */

+/* 2344 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2346 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2348 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2306 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2308 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2310 */	0x8,		/* FC_LONG */

+/* 2350 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2352 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2354 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2312 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2314 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2316 */	0x8,		/* FC_LONG */

+/* 2356 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2358 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2360 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nCharacters */

 

-/* 2318 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2362 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2320 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2324 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 2326 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2328 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2330 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2332 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2364 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2368 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 2370 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2372 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2374 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2376 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2334 */	0xa,		/* 10 */

+/* 2378 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2336 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2338 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2340 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2342 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2380 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2382 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2384 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2386 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter nCharacters */

 

-/* 2344 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2346 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2348 */	0x8,		/* FC_LONG */

+/* 2388 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2390 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2392 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2350 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2352 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2354 */	0x8,		/* FC_LONG */

+/* 2394 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2396 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2398 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure scrollSubstringTo */

 

-/* 2356 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2400 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2358 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2362 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 2364 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2366 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 2368 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2370 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2402 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2406 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 2408 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2410 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2412 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2414 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 2372 */	0xa,		/* 10 */

+/* 2416 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2374 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2376 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2378 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2380 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2418 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2420 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2422 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2424 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startIndex */

 

-/* 2382 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2384 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2386 */	0x8,		/* FC_LONG */

+/* 2426 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2428 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2430 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endIndex */

 

-/* 2388 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2390 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2392 */	0x8,		/* FC_LONG */

+/* 2432 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2434 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2436 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter scrollType */

 

-/* 2394 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2396 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2398 */	0xd,		/* FC_ENUM16 */

+/* 2438 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2440 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2442 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2400 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2402 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2404 */	0x8,		/* FC_LONG */

+/* 2444 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2446 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2448 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure scrollSubstringToPoint */

 

-/* 2406 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2450 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2408 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2412 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 2414 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 2416 */	NdrFcShort( 0x26 ),	/* 38 */

-/* 2418 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2420 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2452 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2456 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 2458 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 2460 */	NdrFcShort( 0x26 ),	/* 38 */

+/* 2462 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2464 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x6,		/* 6 */

-/* 2422 */	0xa,		/* 10 */

+/* 2466 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2424 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2426 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2428 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2430 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2468 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2470 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2472 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2474 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startIndex */

 

-/* 2432 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2434 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2436 */	0x8,		/* FC_LONG */

+/* 2476 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2478 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2480 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endIndex */

 

-/* 2438 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2440 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2442 */	0x8,		/* FC_LONG */

+/* 2482 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2484 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2486 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordinateType */

 

-/* 2444 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2446 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2448 */	0xd,		/* FC_ENUM16 */

+/* 2488 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2490 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2492 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 2450 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2452 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2454 */	0x8,		/* FC_LONG */

+/* 2494 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2496 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2498 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 2456 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2458 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2460 */	0x8,		/* FC_LONG */

+/* 2500 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2502 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2504 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2462 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2464 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 2466 */	0x8,		/* FC_LONG */

+/* 2506 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2508 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 2510 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_newText */

 

-/* 2468 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2512 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2470 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2474 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 2476 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2478 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2480 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2482 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2514 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2518 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 2520 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2522 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2524 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2526 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2484 */	0xa,		/* 10 */

+/* 2528 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2486 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2488 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2490 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2492 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2530 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2532 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2534 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2536 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter newText */

 

-/* 2494 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 2496 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2498 */	NdrFcShort( 0x52e ),	/* Type Offset=1326 */

+/* 2538 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 2540 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2542 */	NdrFcShort( 0x548 ),	/* Type Offset=1352 */

 

 	/* Return value */

 

-/* 2500 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2502 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2504 */	0x8,		/* FC_LONG */

+/* 2544 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2546 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2548 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_oldText */

 

-/* 2506 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2550 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2508 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2512 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 2514 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2516 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2518 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2520 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2552 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2556 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 2558 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2560 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2562 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2564 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2522 */	0xa,		/* 10 */

+/* 2566 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2524 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2526 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2528 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2530 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2568 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2570 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2572 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2574 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter oldText */

 

-/* 2532 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 2534 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2536 */	NdrFcShort( 0x52e ),	/* Type Offset=1326 */

+/* 2576 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 2578 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2580 */	NdrFcShort( 0x548 ),	/* Type Offset=1352 */

 

 	/* Return value */

 

-/* 2538 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2540 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2542 */	0x8,		/* FC_LONG */

+/* 2582 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2584 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2586 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_attributeRange */

 

-/* 2544 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2588 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2546 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2550 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 2552 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 2554 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2556 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2558 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+/* 2590 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2594 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2596 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 2598 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2600 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2602 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2560 */	0xa,		/* 10 */

+/* 2604 */	0xa,		/* 10 */

 			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

-/* 2562 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2564 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2566 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2568 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2606 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2608 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2610 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2612 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2570 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2572 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2574 */	0x8,		/* FC_LONG */

+/* 2614 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2616 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2618 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter filter */

 

-/* 2576 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 2578 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2580 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2620 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 2622 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2624 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Parameter startOffset */

 

-/* 2582 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2584 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2586 */	0x8,		/* FC_LONG */

+/* 2626 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2628 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2630 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2588 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2590 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2592 */	0x8,		/* FC_LONG */

+/* 2632 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2634 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2636 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter attributeValues */

 

-/* 2594 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2596 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2598 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

-/* 2600 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2602 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 2604 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure deleteText */

-

-/* 2606 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2608 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2612 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2614 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2616 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2618 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2620 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 2622 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2624 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2628 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2630 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter startOffset */

-

-/* 2632 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2634 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2636 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-/* 2638 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2640 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2642 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 2638 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2640 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2642 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 /* 2644 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2646 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2646 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

 /* 2648 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure insertText */

+	/* Procedure deleteText */

 

 /* 2650 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2652 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2656 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2656 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 2658 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2660 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2660 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 2662 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2664 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2664 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x3,		/* 3 */

 /* 2666 */	0xa,		/* 10 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+			0x1,		/* Ext Flags:  new corr desc, */

 /* 2668 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2670 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2670 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2672 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2674 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

 

 /* 2676 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2678 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2680 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter text */

+	/* Parameter endOffset */

 

-/* 2682 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2682 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2684 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2686 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2686 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -2686,37 +2693,36 @@
 /* 2692 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure cutText */

+	/* Procedure insertText */

 

 /* 2694 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2696 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2700 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2700 */	NdrFcShort( 0x5 ),	/* 5 */

 /* 2702 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2704 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2704 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2706 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2708 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2708 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2710 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2712 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2714 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2714 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2716 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2718 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter startOffset */

+	/* Parameter offset */

 

 /* 2720 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2722 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2724 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter endOffset */

+	/* Parameter text */

 

-/* 2726 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2726 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 2728 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2730 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 2730 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

@@ -2725,17 +2731,17 @@
 /* 2736 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure pasteText */

+	/* Procedure cutText */

 

 /* 2738 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2740 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2744 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 2746 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2748 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2744 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2746 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2748 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 2750 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2752 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 2754 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2756 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -2743,154 +2749,155 @@
 /* 2760 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2762 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

 

 /* 2764 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2766 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 2768 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter endOffset */

 

-/* 2770 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2770 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2772 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 2774 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 2776 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2778 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2780 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure pasteText */

+

+/* 2782 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2784 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2788 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 2790 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2792 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2794 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2796 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 2798 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2800 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2802 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2804 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2806 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter offset */

+

+/* 2808 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2810 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2812 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 2814 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2816 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2818 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure replaceText */

 

-/* 2776 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2820 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2778 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2782 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2784 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2786 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2788 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2790 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2822 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2826 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2828 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2830 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2832 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2834 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 2792 */	0xa,		/* 10 */

+/* 2836 */	0xa,		/* 10 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2794 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2796 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2798 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2800 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2838 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2840 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2842 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2844 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2802 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2804 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2806 */	0x8,		/* FC_LONG */

+/* 2846 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2848 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2850 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2808 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2810 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2812 */	0x8,		/* FC_LONG */

+/* 2852 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2854 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2856 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2814 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2816 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2818 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2858 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2860 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2862 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

-/* 2820 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2822 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2824 */	0x8,		/* FC_LONG */

+/* 2864 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2866 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2868 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setAttributes */

 

-/* 2826 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2870 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2828 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2832 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2834 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 2836 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2838 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2840 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2872 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2876 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 2878 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 2880 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2882 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2884 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 2842 */	0xa,		/* 10 */

+/* 2886 */	0xa,		/* 10 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2844 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2846 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2848 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2850 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2888 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2890 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2892 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2894 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2852 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2854 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2856 */	0x8,		/* FC_LONG */

+/* 2896 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2898 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2900 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2858 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2860 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2862 */	0x8,		/* FC_LONG */

+/* 2902 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2904 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 2906 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter attributes */

 

-/* 2864 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2866 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2868 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

-

-	/* Return value */

-

-/* 2870 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2872 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2874 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_anchor */

-

-/* 2876 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2878 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2882 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2884 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 2886 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2888 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2890 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2892 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2894 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2896 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2898 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2900 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter index */

-

-/* 2902 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2904 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2906 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter anchor */

-

-/* 2908 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 2910 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 2912 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+/* 2908 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2910 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2912 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

 /* 2914 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2916 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 2916 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2918 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_anchorTarget */

+	/* Procedure get_anchor */

 

 /* 2920 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2922 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2926 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2926 */	NdrFcShort( 0x9 ),	/* 9 */

 /* 2928 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 2930 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2932 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2910,7 +2917,7 @@
 /* 2950 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter anchorTarget */

+	/* Parameter anchor */

 

 /* 2952 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

 /* 2954 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -2923,35 +2930,73 @@
 /* 2962 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_anchorTarget */

+

+/* 2964 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2966 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2970 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2972 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 2974 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2976 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2978 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 2980 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 2982 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2984 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2986 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2988 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter index */

+

+/* 2990 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2992 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 2994 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter anchorTarget */

+

+/* 2996 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 2998 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3000 */	NdrFcShort( 0x4bc ),	/* Type Offset=1212 */

+

+	/* Return value */

+

+/* 3002 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3004 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3006 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_nRows */

 

 

 	/* Procedure get_startIndex */

 

-/* 2964 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3008 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2966 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2970 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2972 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 2974 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2976 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2978 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3010 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3014 */	NdrFcShort( 0xb ),	/* 11 */

+/* 3016 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3018 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3020 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3022 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2980 */	0xa,		/* 10 */

+/* 3024 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2982 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2984 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2986 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2988 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3026 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3028 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3030 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3032 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowCount */

 

 

 	/* Parameter index */

 

-/* 2990 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2992 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 2994 */	0x8,		/* FC_LONG */

+/* 3034 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3036 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3038 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -2959,9 +3004,9 @@
 

 	/* Return value */

 

-/* 2996 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2998 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3000 */	0x8,		/* FC_LONG */

+/* 3040 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3042 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3044 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedChildren */

@@ -2969,30 +3014,30 @@
 

 	/* Procedure get_endIndex */

 

-/* 3002 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3046 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3004 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3008 */	NdrFcShort( 0xc ),	/* 12 */

-/* 3010 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3012 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3014 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3016 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3048 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3052 */	NdrFcShort( 0xc ),	/* 12 */

+/* 3054 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3058 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3060 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3018 */	0xa,		/* 10 */

+/* 3062 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3020 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3022 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3024 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3026 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3064 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3066 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3068 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3070 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter cellCount */

 

 

 	/* Parameter index */

 

-/* 3028 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3030 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3032 */	0x8,		/* FC_LONG */

+/* 3072 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3074 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3076 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -3000,123 +3045,85 @@
 

 	/* Return value */

 

-/* 3034 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3036 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3038 */	0x8,		/* FC_LONG */

+/* 3078 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3080 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3082 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_valid */

 

-/* 3040 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3084 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3042 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3046 */	NdrFcShort( 0xd ),	/* 13 */

-/* 3048 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3050 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3052 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 3054 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3086 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3090 */	NdrFcShort( 0xd ),	/* 13 */

+/* 3092 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3094 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3096 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 3098 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3056 */	0xa,		/* 10 */

+/* 3100 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3058 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3060 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3062 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3064 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3104 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3106 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3108 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter valid */

 

-/* 3066 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3068 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3070 */	0x3,		/* FC_SMALL */

+/* 3110 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3112 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3114 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3072 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3074 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3076 */	0x8,		/* FC_LONG */

+/* 3116 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3118 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3120 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nHyperlinks */

 

-/* 3078 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3122 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3080 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3084 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 3086 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3088 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3090 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3092 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3124 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3128 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 3130 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3132 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3134 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3136 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3094 */	0xa,		/* 10 */

+/* 3138 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3096 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3098 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3100 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3140 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3142 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3144 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3146 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter hyperlinkCount */

 

-/* 3104 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3106 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3108 */	0x8,		/* FC_LONG */

+/* 3148 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3150 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3152 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3110 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3112 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3114 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_hyperlink */

-

-/* 3116 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3118 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3122 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 3124 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3126 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3128 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3130 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3132 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3134 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3136 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3138 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3140 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter index */

-

-/* 3142 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3144 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3146 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter hyperlink */

-

-/* 3148 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3150 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3152 */	NdrFcShort( 0x546 ),	/* Type Offset=1350 */

-

-	/* Return value */

-

 /* 3154 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3156 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3156 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 3158 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hyperlinkIndex */

+	/* Procedure get_hyperlink */

 

 /* 3160 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3162 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3166 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 3166 */	NdrFcShort( 0x17 ),	/* 23 */

 /* 3168 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 3170 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3172 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3174 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3172 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3174 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3176 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3125,19 +3132,18 @@
 /* 3182 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3184 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter charIndex */

+	/* Parameter index */

 

 /* 3186 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3188 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 3190 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter hyperlinkIndex */

+	/* Parameter hyperlink */

 

-/* 3192 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3192 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3194 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3196 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3196 */	NdrFcShort( 0x560 ),	/* Type Offset=1376 */

 

 	/* Return value */

 

@@ -3146,31 +3152,32 @@
 /* 3202 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hyperlinks */

+	/* Procedure get_hyperlinkIndex */

 

 /* 3204 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3206 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3210 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 3210 */	NdrFcShort( 0x18 ),	/* 24 */

 /* 3212 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3214 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3214 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3216 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3218 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3218 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x3,		/* 3 */

 /* 3220 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3222 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3222 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3224 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3226 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3228 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter hyperlinks */

+	/* Parameter charIndex */

 

-/* 3230 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3230 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3232 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3234 */	NdrFcShort( 0x55c ),	/* Type Offset=1372 */

+/* 3234 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter nHyperlinks */

+	/* Parameter hyperlinkIndex */

 

 /* 3236 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3238 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -3184,35 +3191,73 @@
 /* 3246 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_hyperlinks */

+

+/* 3248 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3250 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3254 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 3256 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 3258 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3260 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3262 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 3264 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3266 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3268 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3270 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3272 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter hyperlinks */

+

+/* 3274 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3276 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3278 */	NdrFcShort( 0x576 ),	/* Type Offset=1398 */

+

+	/* Parameter nHyperlinks */

+

+/* 3280 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3282 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3284 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 3286 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3288 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3290 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_cellAt */

 

 

 	/* Procedure get_accessibleAt */

 

-/* 3248 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3292 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3250 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3254 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3256 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 3258 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3260 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3262 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3294 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3298 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3300 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3302 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3304 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3306 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3264 */	0xa,		/* 10 */

+/* 3308 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3266 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3268 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3270 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3272 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3312 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3314 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3316 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

 

 	/* Parameter row */

 

-/* 3274 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3276 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3278 */	0x8,		/* FC_LONG */

+/* 3318 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3320 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3322 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

@@ -3220,9 +3265,9 @@
 

 	/* Parameter column */

 

-/* 3280 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3282 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3284 */	0x8,		/* FC_LONG */

+/* 3324 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3326 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3328 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter cell */

@@ -3230,18 +3275,18 @@
 

 	/* Parameter accessible */

 

-/* 3286 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3288 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3290 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 3330 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3332 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3334 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 3292 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3294 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3296 */	0x8,		/* FC_LONG */

+/* 3336 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3338 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 3340 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_caption */

@@ -3249,219 +3294,181 @@
 

 	/* Procedure get_caption */

 

-/* 3298 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3342 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3300 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3304 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3306 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3308 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3310 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3312 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3344 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3348 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3350 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3352 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3354 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3356 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 3314 */	0xa,		/* 10 */

+/* 3358 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3316 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3318 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3320 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3322 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3360 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3362 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3364 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3366 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter accessible */

 

 

 	/* Parameter accessible */

 

-/* 3324 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3326 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3328 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 3368 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3370 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3372 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 3330 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3332 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3334 */	0x8,		/* FC_LONG */

+/* 3374 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3376 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3378 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_childIndex */

 

-/* 3336 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3380 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3338 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3342 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 3344 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 3346 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3348 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3350 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3382 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3386 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 3388 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3390 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3392 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3394 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 3352 */	0xa,		/* 10 */

+/* 3396 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3354 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3356 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3358 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3360 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3398 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3400 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3402 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3404 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowIndex */

 

-/* 3362 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3364 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3366 */	0x8,		/* FC_LONG */

+/* 3406 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3408 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3410 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnIndex */

 

-/* 3368 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3370 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3372 */	0x8,		/* FC_LONG */

+/* 3412 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3414 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3416 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter cellIndex */

 

-/* 3374 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3376 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3378 */	0x8,		/* FC_LONG */

+/* 3418 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3420 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3422 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3380 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3382 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3384 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnDescription */

-

-/* 3386 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3388 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3392 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 3394 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3396 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3398 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3400 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3402 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3404 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3406 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3408 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3410 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter column */

-

-/* 3412 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3414 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3416 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter description */

-

-/* 3418 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 3420 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3422 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

 /* 3424 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3426 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3426 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 3428 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnExtentAt */

+	/* Procedure get_columnDescription */

 

 /* 3430 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3432 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3436 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 3438 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 3440 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3442 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3444 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

+/* 3436 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 3438 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 3440 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3442 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3444 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 3446 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3448 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3448 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 3450 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3452 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3454 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 3456 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3458 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 3460 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter column */

+	/* Parameter description */

 

-/* 3462 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3462 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 3464 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3466 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3466 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

-	/* Parameter nColumnsSpanned */

+	/* Return value */

 

-/* 3468 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3468 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 3470 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 3472 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Procedure get_columnExtentAt */

 

-/* 3474 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3476 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3478 */	0x8,		/* FC_LONG */

+/* 3474 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3476 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3480 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 3482 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3484 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3486 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3488 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 3490 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3492 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3494 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3496 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3498 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 3500 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3502 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3504 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnHeader */

+	/* Parameter column */

 

-/* 3480 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3482 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3486 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3488 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3490 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3492 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3494 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3496 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3498 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3500 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3502 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3504 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3506 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3508 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3510 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter accessibleTable */

-

-/* 3506 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3508 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3510 */	NdrFcShort( 0x57a ),	/* Type Offset=1402 */

-

-	/* Parameter startingRowIndex */

+	/* Parameter nColumnsSpanned */

 

 /* 3512 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3514 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3514 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 3516 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3518 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3520 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3520 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 3522 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnIndex */

+	/* Procedure get_columnHeader */

 

 /* 3524 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3526 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3530 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3530 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3532 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3534 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3534 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3536 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3538 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3538 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3540 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3470,14 +3477,13 @@
 /* 3546 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3548 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cellIndex */

+	/* Parameter accessibleTable */

 

-/* 3550 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3550 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3552 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3554 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3554 */	NdrFcShort( 0x594 ),	/* Type Offset=1428 */

 

-	/* Parameter columnIndex */

+	/* Parameter startingRowIndex */

 

 /* 3556 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3558 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -3491,20 +3497,17 @@
 /* 3566 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_nSelectedRows */

-

-

-	/* Procedure get_nColumns */

+	/* Procedure get_columnIndex */

 

 /* 3568 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3570 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3574 */	NdrFcShort( 0xa ),	/* 10 */

-/* 3576 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3578 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3574 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3576 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 3578 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3580 */	NdrFcShort( 0x24 ),	/* 36 */

 /* 3582 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 3584 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3586 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -3512,142 +3515,146 @@
 /* 3590 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3592 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter rowCount */

+	/* Parameter cellIndex */

 

-

-	/* Parameter columnCount */

-

-/* 3594 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3594 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3596 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 3598 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter columnIndex */

 

-

-	/* Return value */

-

-/* 3600 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3600 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3602 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 3604 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_nSelectedColumns */

-

-/* 3606 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3608 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3612 */	NdrFcShort( 0xd ),	/* 13 */

-/* 3614 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3616 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3618 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3620 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 3622 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3624 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3628 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3630 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter columnCount */

-

-/* 3632 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3634 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3636 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

 	/* Return value */

 

-/* 3638 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3640 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3642 */	0x8,		/* FC_LONG */

+/* 3606 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3608 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3610 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedRows */

 

-/* 3644 */	0x33,		/* FC_AUTO_HANDLE */

+

+	/* Procedure get_nColumns */

+

+/* 3612 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3646 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3650 */	NdrFcShort( 0xe ),	/* 14 */

-/* 3652 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3654 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3656 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3658 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3614 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3618 */	NdrFcShort( 0xa ),	/* 10 */

+/* 3620 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3622 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3624 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3626 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3660 */	0xa,		/* 10 */

+/* 3628 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3662 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3664 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3666 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3668 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3630 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3632 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3634 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3636 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowCount */

 

-/* 3670 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3672 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3674 */	0x8,		/* FC_LONG */

+

+	/* Parameter columnCount */

+

+/* 3638 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3640 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3642 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3676 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3678 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+

+	/* Return value */

+

+/* 3644 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3646 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3648 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_nSelectedColumns */

+

+/* 3650 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3652 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3656 */	NdrFcShort( 0xd ),	/* 13 */

+/* 3658 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3660 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3662 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3664 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 3666 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3668 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3672 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3674 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter columnCount */

+

+/* 3676 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3678 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 3680 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowDescription */

+	/* Return value */

 

-/* 3682 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3684 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3688 */	NdrFcShort( 0xf ),	/* 15 */

-/* 3690 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3692 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3694 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3696 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3698 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3700 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3702 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3704 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3706 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter row */

-

-/* 3708 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3710 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3712 */	0x8,		/* FC_LONG */

+/* 3682 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3684 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3686 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter description */

+	/* Procedure get_nSelectedRows */

 

-/* 3714 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 3716 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3718 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 3688 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3690 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3694 */	NdrFcShort( 0xe ),	/* 14 */

+/* 3696 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3698 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3700 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3702 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 3704 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3706 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3708 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3710 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3712 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter rowCount */

+

+/* 3714 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3716 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3718 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3720 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3722 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3722 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 3724 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowExtentAt */

+	/* Procedure get_rowDescription */

 

 /* 3726 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3728 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3732 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3734 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 3736 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3738 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3740 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

+/* 3732 */	NdrFcShort( 0xf ),	/* 15 */

+/* 3734 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 3736 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3738 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3740 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 3742 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3744 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3744 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 3746 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3748 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3750 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -3659,75 +3666,75 @@
 /* 3756 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter column */

+	/* Parameter description */

 

-/* 3758 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3758 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 3760 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3762 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3762 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

-	/* Parameter nRowsSpanned */

+	/* Return value */

 

-/* 3764 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3764 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 3766 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 3768 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Procedure get_rowExtentAt */

 

-/* 3770 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3772 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3774 */	0x8,		/* FC_LONG */

+/* 3770 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3772 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3776 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3778 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3780 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3782 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3784 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 3786 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3788 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3790 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3792 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3794 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 3796 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3798 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3800 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowHeader */

+	/* Parameter column */

 

-/* 3776 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3778 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3782 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 3784 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3786 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3788 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3790 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3792 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3794 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3796 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3798 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3800 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3802 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3804 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3806 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter accessibleTable */

-

-/* 3802 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3804 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3806 */	NdrFcShort( 0x57a ),	/* Type Offset=1402 */

-

-	/* Parameter startingColumnIndex */

+	/* Parameter nRowsSpanned */

 

 /* 3808 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3810 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3810 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 3812 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3814 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3816 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3816 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 3818 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowIndex */

+	/* Procedure get_rowHeader */

 

 /* 3820 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3822 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3826 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 3826 */	NdrFcShort( 0x11 ),	/* 17 */

 /* 3828 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3830 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3830 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3832 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3834 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3834 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3836 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3736,14 +3743,13 @@
 /* 3842 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3844 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cellIndex */

+	/* Parameter accessibleTable */

 

-/* 3846 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3846 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3848 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3850 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3850 */	NdrFcShort( 0x594 ),	/* Type Offset=1428 */

 

-	/* Parameter rowIndex */

+	/* Parameter startingColumnIndex */

 

 /* 3852 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3854 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -3757,217 +3763,217 @@
 /* 3862 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedChildren */

+	/* Procedure get_rowIndex */

 

 /* 3864 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3866 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3870 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 3872 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3870 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 3872 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 3874 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3876 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3878 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x4,		/* 4 */

+/* 3878 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 3880 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3882 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3882 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3884 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3886 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3888 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter maxChildren */

+	/* Parameter cellIndex */

 

 /* 3890 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3892 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

 /* 3894 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter children */

+	/* Parameter rowIndex */

 

-/* 3896 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3896 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3898 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3900 */	NdrFcShort( 0x590 ),	/* Type Offset=1424 */

+/* 3900 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter nChildren */

+	/* Return value */

 

-/* 3902 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3902 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 3904 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 3906 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_selectedChildren */

+

+/* 3908 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3910 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3914 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 3916 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3918 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3920 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3922 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x4,		/* 4 */

+/* 3924 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3926 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3928 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3930 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3932 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter maxChildren */

+

+/* 3934 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3936 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3938 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter children */

+

+/* 3940 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3942 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3944 */	NdrFcShort( 0x5aa ),	/* Type Offset=1450 */

+

+	/* Parameter nChildren */

+

+/* 3946 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3948 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 3950 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 3908 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3910 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3912 */	0x8,		/* FC_LONG */

+/* 3952 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3954 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 3956 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selectedColumns */

 

-/* 3914 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3958 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3916 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3920 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 3922 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 3924 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3926 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3928 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3960 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3964 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 3966 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 3968 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3970 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3972 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3930 */	0xa,		/* 10 */

+/* 3974 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3932 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3934 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3936 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3938 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3976 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3978 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3980 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3982 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter maxColumns */

 

-/* 3940 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3942 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3944 */	0x8,		/* FC_LONG */

+/* 3984 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3986 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 3988 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columns */

 

-/* 3946 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 3948 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 3950 */	NdrFcShort( 0x590 ),	/* Type Offset=1424 */

+/* 3990 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3992 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 3994 */	NdrFcShort( 0x5aa ),	/* Type Offset=1450 */

 

 	/* Parameter nColumns */

 

-/* 3952 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3954 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 3956 */	0x8,		/* FC_LONG */

+/* 3996 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3998 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4000 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3958 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3960 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 3962 */	0x8,		/* FC_LONG */

+/* 4002 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4004 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 4006 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selectedRows */

 

-/* 3964 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4008 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3966 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3970 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 3972 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 3974 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3976 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3978 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4010 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4014 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 4016 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 4018 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4020 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4022 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3980 */	0xa,		/* 10 */

+/* 4024 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3982 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3984 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3986 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3988 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4026 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 4028 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4030 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4032 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter maxRows */

 

-/* 3990 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3992 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 3994 */	0x8,		/* FC_LONG */

+/* 4034 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4036 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4038 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rows */

 

-/* 3996 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 3998 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4000 */	NdrFcShort( 0x590 ),	/* Type Offset=1424 */

+/* 4040 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 4042 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4044 */	NdrFcShort( 0x5aa ),	/* Type Offset=1450 */

 

 	/* Parameter nRows */

 

-/* 4002 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4004 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4006 */	0x8,		/* FC_LONG */

+/* 4046 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4048 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4050 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4008 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4010 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4012 */	0x8,		/* FC_LONG */

+/* 4052 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4054 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 4056 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_summary */

 

-/* 4014 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4058 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4016 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4020 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 4022 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4024 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4026 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4028 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4060 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4064 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 4066 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4068 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4070 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4072 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 4030 */	0xa,		/* 10 */

+/* 4074 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4032 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4034 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4036 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4038 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4076 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4078 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4080 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4082 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter accessible */

 

-/* 4040 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 4042 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4044 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

-

-	/* Return value */

-

-/* 4046 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4048 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4050 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_isColumnSelected */

-

-/* 4052 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4054 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4058 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 4060 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4062 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4064 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 4066 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 4068 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4070 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4072 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4074 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4076 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter column */

-

-/* 4078 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4080 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4082 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter isSelected */

-

-/* 4084 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4086 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4088 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 4084 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 4086 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4088 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 4090 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4092 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4092 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 4094 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRowSelected */

+	/* Procedure get_isColumnSelected */

 

 /* 4096 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4098 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4102 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 4102 */	NdrFcShort( 0x17 ),	/* 23 */

 /* 4104 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 4106 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4108 */	NdrFcShort( 0x21 ),	/* 33 */

@@ -3980,7 +3986,7 @@
 /* 4118 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4120 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 4122 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 4124 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

@@ -4001,17 +4007,17 @@
 /* 4138 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isSelected */

+	/* Procedure get_isRowSelected */

 

 /* 4140 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4142 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4146 */	NdrFcShort( 0x19 ),	/* 25 */

-/* 4148 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 4150 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4146 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 4148 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 4150 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4152 */	NdrFcShort( 0x21 ),	/* 33 */

 /* 4154 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

+			0x3,		/* 3 */

 /* 4156 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 4158 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -4026,251 +4032,290 @@
 /* 4170 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter column */

-

-/* 4172 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4174 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4176 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

 	/* Parameter isSelected */

 

-/* 4178 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4180 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4182 */	0x3,		/* FC_SMALL */

+/* 4172 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4174 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4176 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4184 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4186 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4188 */	0x8,		/* FC_LONG */

+/* 4178 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4180 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4182 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_isSelected */

+

+/* 4184 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4186 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4190 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 4192 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 4194 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4196 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 4198 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 4200 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4202 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4204 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4208 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 4210 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4212 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4214 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter column */

+

+/* 4216 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4218 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4220 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter isSelected */

+

+/* 4222 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4224 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4226 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4228 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4230 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 4232 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectRow */

 

-/* 4190 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4234 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4192 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4196 */	NdrFcShort( 0x1a ),	/* 26 */

-/* 4198 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4200 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4202 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4204 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4236 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4240 */	NdrFcShort( 0x1a ),	/* 26 */

+/* 4242 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4244 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4246 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4248 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4206 */	0xa,		/* 10 */

+/* 4250 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4208 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4210 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4212 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4214 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4252 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4256 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4258 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4216 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4218 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4220 */	0x8,		/* FC_LONG */

+/* 4260 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4262 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4264 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4222 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4224 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4226 */	0x8,		/* FC_LONG */

+/* 4266 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4268 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4270 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectColumn */

 

-/* 4228 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4272 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4230 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4234 */	NdrFcShort( 0x1b ),	/* 27 */

-/* 4236 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4238 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4240 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4242 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4274 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4278 */	NdrFcShort( 0x1b ),	/* 27 */

+/* 4280 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4282 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4284 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4286 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4244 */	0xa,		/* 10 */

+/* 4288 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4246 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4248 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4250 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4252 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4290 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4292 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4294 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4296 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4254 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4256 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4258 */	0x8,		/* FC_LONG */

+/* 4298 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4300 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4302 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4260 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4262 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4264 */	0x8,		/* FC_LONG */

+/* 4304 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4306 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4308 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectRow */

 

-/* 4266 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4310 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4268 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4272 */	NdrFcShort( 0x1c ),	/* 28 */

-/* 4274 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4276 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4278 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4280 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4312 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4316 */	NdrFcShort( 0x1c ),	/* 28 */

+/* 4318 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4320 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4322 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4324 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4282 */	0xa,		/* 10 */

+/* 4326 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4284 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4286 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4288 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4290 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4328 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4330 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4332 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4334 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4292 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4294 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4296 */	0x8,		/* FC_LONG */

+/* 4336 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4338 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4340 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4298 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4300 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4302 */	0x8,		/* FC_LONG */

+/* 4342 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4344 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4346 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectColumn */

 

-/* 4304 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4348 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4306 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4310 */	NdrFcShort( 0x1d ),	/* 29 */

-/* 4312 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4314 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4316 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4318 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4350 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4354 */	NdrFcShort( 0x1d ),	/* 29 */

+/* 4356 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4358 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4360 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4362 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4320 */	0xa,		/* 10 */

+/* 4364 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4322 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4324 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4326 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4328 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4366 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4368 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4370 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4372 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4330 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4332 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4334 */	0x8,		/* FC_LONG */

+/* 4374 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4376 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4378 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4336 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4338 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4340 */	0x8,		/* FC_LONG */

+/* 4380 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4382 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4384 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowColumnExtentsAtIndex */

 

-/* 4342 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4386 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4344 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4348 */	NdrFcShort( 0x1e ),	/* 30 */

-/* 4350 */	NdrFcShort( 0x40 ),	/* X64 Stack size/offset = 64 */

-/* 4352 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4354 */	NdrFcShort( 0x91 ),	/* 145 */

-/* 4356 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4388 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4392 */	NdrFcShort( 0x1e ),	/* 30 */

+/* 4394 */	NdrFcShort( 0x40 ),	/* X64 Stack size/offset = 64 */

+/* 4396 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4398 */	NdrFcShort( 0x91 ),	/* 145 */

+/* 4400 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x7,		/* 7 */

-/* 4358 */	0xa,		/* 10 */

+/* 4402 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4360 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4362 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4364 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4366 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4404 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4406 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4410 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter index */

 

-/* 4368 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4370 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4372 */	0x8,		/* FC_LONG */

+/* 4412 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4414 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4416 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4374 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4376 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4378 */	0x8,		/* FC_LONG */

+/* 4418 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4420 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4422 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4380 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4382 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4384 */	0x8,		/* FC_LONG */

+/* 4424 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4426 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4428 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rowExtents */

 

-/* 4386 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4388 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4390 */	0x8,		/* FC_LONG */

+/* 4430 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4432 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 4434 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnExtents */

 

-/* 4392 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4394 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 4396 */	0x8,		/* FC_LONG */

+/* 4436 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4438 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 4440 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 4398 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4400 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 4402 */	0x3,		/* FC_SMALL */

+/* 4442 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4444 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 4446 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4404 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4406 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 4408 */	0x8,		/* FC_LONG */

+/* 4448 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4450 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 4452 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_modelChange */

 

-/* 4410 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4454 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4412 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4416 */	NdrFcShort( 0x1f ),	/* 31 */

-/* 4418 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4420 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4422 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4424 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4456 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4460 */	NdrFcShort( 0x1f ),	/* 31 */

+/* 4462 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4464 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4466 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4468 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 4426 */	0xa,		/* 10 */

+/* 4470 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4428 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4430 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4432 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4434 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4472 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4474 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4476 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4478 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter modelChange */

 

-/* 4436 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 4438 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4440 */	NdrFcShort( 0x5ae ),	/* Type Offset=1454 */

+/* 4480 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 4482 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4484 */	NdrFcShort( 0x5c8 ),	/* Type Offset=1480 */

 

 	/* Return value */

 

-/* 4442 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4444 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4446 */	0x8,		/* FC_LONG */

+/* 4486 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4488 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4490 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowExtent */

@@ -4278,30 +4323,30 @@
 

 	/* Procedure get_nColumns */

 

-/* 4448 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4492 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4450 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4454 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 4456 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4458 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4460 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4462 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4494 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4498 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 4500 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4502 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4504 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4506 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4464 */	0xa,		/* 10 */

+/* 4508 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4466 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4468 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4470 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4472 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4510 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4512 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4514 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4516 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter nRowsSpanned */

 

 

 	/* Parameter columnCount */

 

-/* 4474 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4476 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4478 */	0x8,		/* FC_LONG */

+/* 4518 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4520 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4522 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -4309,9 +4354,9 @@
 

 	/* Return value */

 

-/* 4480 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4482 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4484 */	0x8,		/* FC_LONG */

+/* 4524 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4526 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4528 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowIndex */

@@ -4319,30 +4364,30 @@
 

 	/* Procedure get_nSelectedCells */

 

-/* 4486 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4530 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4488 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4492 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4494 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4496 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4498 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4500 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4532 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4536 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4538 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4540 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4542 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4544 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4502 */	0xa,		/* 10 */

+/* 4546 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4504 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4506 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4508 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4510 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4548 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4550 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4552 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4554 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowIndex */

 

 

 	/* Parameter cellCount */

 

-/* 4512 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4514 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4516 */	0x8,		/* FC_LONG */

+/* 4556 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4558 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4560 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -4350,90 +4395,52 @@
 

 	/* Return value */

 

-/* 4518 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4520 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4522 */	0x8,		/* FC_LONG */

+/* 4562 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4564 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4566 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedColumns */

 

-/* 4524 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4568 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4526 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4530 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 4532 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4534 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4536 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4538 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4570 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4574 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 4576 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4578 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4580 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4582 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4540 */	0xa,		/* 10 */

+/* 4584 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4542 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4544 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4546 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4548 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4586 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4588 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4590 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4592 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter columnCount */

 

-/* 4550 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4552 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4554 */	0x8,		/* FC_LONG */

+/* 4594 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4596 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4598 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4556 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4558 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4560 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_rowDescription */

-

-/* 4562 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4564 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4568 */	NdrFcShort( 0xb ),	/* 11 */

-/* 4570 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4572 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4574 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4576 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 4578 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4580 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 4582 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4584 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4586 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter row */

-

-/* 4588 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4590 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4592 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter description */

-

-/* 4594 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 4596 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4598 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

 /* 4600 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4602 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4602 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 4604 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedCells */

+	/* Procedure get_rowDescription */

 

 /* 4606 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4608 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4612 */	NdrFcShort( 0xc ),	/* 12 */

+/* 4612 */	NdrFcShort( 0xb ),	/* 11 */

 /* 4614 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4616 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4618 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4616 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4618 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4620 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 4622 */	0xa,		/* 10 */

@@ -4443,19 +4450,19 @@
 /* 4628 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4630 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cells */

+	/* Parameter row */

 

-/* 4632 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 4632 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 4634 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4636 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

-

-	/* Parameter nSelectedCells */

-

-/* 4638 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4640 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4642 */	0x8,		/* FC_LONG */

+/* 4636 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter description */

+

+/* 4638 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 4640 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4642 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

 	/* Return value */

 

 /* 4644 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

@@ -4463,12 +4470,12 @@
 /* 4648 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedColumns */

+	/* Procedure get_selectedCells */

 

 /* 4650 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4652 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4656 */	NdrFcShort( 0xd ),	/* 13 */

+/* 4656 */	NdrFcShort( 0xc ),	/* 12 */

 /* 4658 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 4660 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4662 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4481,13 +4488,13 @@
 /* 4672 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4674 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter selectedColumns */

+	/* Parameter cells */

 

 /* 4676 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4678 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4680 */	NdrFcShort( 0x5da ),	/* Type Offset=1498 */

+/* 4680 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

-	/* Parameter nColumns */

+	/* Parameter nSelectedCells */

 

 /* 4682 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4684 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -4501,12 +4508,12 @@
 /* 4692 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedRows */

+	/* Procedure get_selectedColumns */

 

 /* 4694 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4696 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4700 */	NdrFcShort( 0xe ),	/* 14 */

+/* 4700 */	NdrFcShort( 0xd ),	/* 13 */

 /* 4702 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 4704 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4706 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4519,13 +4526,13 @@
 /* 4716 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4718 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter selectedRows */

+	/* Parameter selectedColumns */

 

 /* 4720 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4722 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4724 */	NdrFcShort( 0x5da ),	/* Type Offset=1498 */

+/* 4724 */	NdrFcShort( 0x5f4 ),	/* Type Offset=1524 */

 

-	/* Parameter nRows */

+	/* Parameter nColumns */

 

 /* 4726 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4728 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -4539,82 +4546,81 @@
 /* 4736 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_summary */

+	/* Procedure get_selectedRows */

 

 /* 4738 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4740 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4744 */	NdrFcShort( 0xf ),	/* 15 */

-/* 4746 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4744 */	NdrFcShort( 0xe ),	/* 14 */

+/* 4746 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 4748 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4750 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4750 */	NdrFcShort( 0x24 ),	/* 36 */

 /* 4752 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 4754 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4756 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 4756 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 4758 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4760 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4762 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter accessible */

+	/* Parameter selectedRows */

 

-/* 4764 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 4764 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4766 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4768 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 4768 */	NdrFcShort( 0x5f4 ),	/* Type Offset=1524 */

 

-	/* Return value */

+	/* Parameter nRows */

 

-/* 4770 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4770 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4772 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 4774 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isColumnSelected */

+	/* Return value */

 

-/* 4776 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4776 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4778 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4780 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_summary */

+

+/* 4782 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4778 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4782 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 4784 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 4786 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4788 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 4790 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 4792 */	0xa,		/* 10 */

+/* 4784 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4788 */	NdrFcShort( 0xf ),	/* 15 */

+/* 4790 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4792 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4794 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4796 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 4798 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4794 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4796 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4798 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4800 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4802 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4804 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4806 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter column */

+	/* Parameter accessible */

 

-/* 4802 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4804 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4806 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter isSelected */

-

-/* 4808 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4810 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4812 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 4808 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 4810 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4812 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 4814 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4816 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4816 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 4818 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRowSelected */

+	/* Procedure get_isColumnSelected */

 

 /* 4820 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4822 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4826 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 4826 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 4828 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 4830 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4832 */	NdrFcShort( 0x21 ),	/* 33 */

@@ -4627,7 +4633,7 @@
 /* 4842 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4844 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 4846 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 4848 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

@@ -4648,17 +4654,17 @@
 /* 4862 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure selectRow */

+	/* Procedure get_isRowSelected */

 

 /* 4864 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4866 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4870 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 4872 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4870 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 4872 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 4874 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4876 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4876 */	NdrFcShort( 0x21 ),	/* 33 */

 /* 4878 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 4880 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 4882 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -4673,184 +4679,185 @@
 /* 4894 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter isSelected */

+

+/* 4896 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4898 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4900 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 4896 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4898 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4900 */	0x8,		/* FC_LONG */

+/* 4902 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4904 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4906 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure selectRow */

+

+/* 4908 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4910 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4914 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 4916 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4918 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4920 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4922 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 4924 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4926 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4928 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4930 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4932 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 4934 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4936 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4938 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4940 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4942 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4944 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectColumn */

 

-/* 4902 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4946 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4904 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4908 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 4910 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4912 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4914 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4916 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4948 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4952 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 4954 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4956 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4958 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4960 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4918 */	0xa,		/* 10 */

+/* 4962 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4920 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4922 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4924 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4926 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4964 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4966 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4968 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4970 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4928 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4930 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4932 */	0x8,		/* FC_LONG */

+/* 4972 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4974 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 4976 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4934 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4936 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4938 */	0x8,		/* FC_LONG */

+/* 4978 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4980 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 4982 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectRow */

 

-/* 4940 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4984 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4942 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4946 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 4948 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4950 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4952 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4954 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4986 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4990 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 4992 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 4994 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4996 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4998 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4956 */	0xa,		/* 10 */

+/* 5000 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4958 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4960 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4962 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4964 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5002 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5004 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5006 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5008 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4966 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4968 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 4970 */	0x8,		/* FC_LONG */

+/* 5010 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5012 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5014 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4972 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4974 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 4976 */	0x8,		/* FC_LONG */

+/* 5016 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5018 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5020 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectColumn */

 

-/* 4978 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5022 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4980 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4984 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 4986 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 4988 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4990 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4992 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5024 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5028 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 5030 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5032 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5034 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5036 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4994 */	0xa,		/* 10 */

+/* 5038 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4996 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4998 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5000 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5002 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5040 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5042 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5044 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5046 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 5004 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5006 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5008 */	0x8,		/* FC_LONG */

+/* 5048 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5050 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5052 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5010 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5012 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5014 */	0x8,		/* FC_LONG */

+/* 5054 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5056 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5058 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_modelChange */

 

-/* 5016 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5060 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5018 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5022 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 5024 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 5026 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5028 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5030 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5062 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5066 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 5068 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5070 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5072 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5074 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5032 */	0xa,		/* 10 */

+/* 5076 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5034 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5036 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5038 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5040 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5078 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5080 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5082 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5084 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter modelChange */

 

-/* 5042 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 5044 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5046 */	NdrFcShort( 0x5ae ),	/* Type Offset=1454 */

-

-	/* Return value */

-

-/* 5048 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5050 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5052 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnHeaderCells */

-

-/* 5054 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5056 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5060 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 5062 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 5064 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5066 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 5068 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 5070 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5072 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 5074 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5076 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5078 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter cellAccessibles */

-

-/* 5080 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 5082 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5084 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

-

-	/* Parameter nColumnHeaderCells */

-

-/* 5086 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5088 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5090 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 5086 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 5088 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5090 */	NdrFcShort( 0x5c8 ),	/* Type Offset=1480 */

 

 	/* Return value */

 

 /* 5092 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5094 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5094 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 5096 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowHeaderCells */

+	/* Procedure get_columnHeaderCells */

 

 /* 5098 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5100 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5104 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 5104 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 5106 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 5108 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5110 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4867,9 +4874,9 @@
 

 /* 5124 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5126 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5128 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

+/* 5128 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

-	/* Parameter nRowHeaderCells */

+	/* Parameter nColumnHeaderCells */

 

 /* 5130 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5132 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

@@ -4883,305 +4890,343 @@
 /* 5140 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isSelected */

+	/* Procedure get_rowHeaderCells */

 

 /* 5142 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5144 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5148 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 5150 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5148 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 5150 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 5152 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5154 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 5156 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 5154 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 5156 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 5158 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5160 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 5160 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 5162 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5164 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5166 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter isSelected */

+	/* Parameter cellAccessibles */

 

-/* 5168 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5168 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 5170 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5172 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 5172 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

-	/* Return value */

+	/* Parameter nRowHeaderCells */

 

-/* 5174 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5174 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5176 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 5178 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 5180 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5182 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5184 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_isSelected */

+

+/* 5186 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5188 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5192 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 5194 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5196 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5198 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 5200 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 5202 */	0xa,		/* 10 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5204 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5208 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5210 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter isSelected */

+

+/* 5212 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5214 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5216 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 5218 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5220 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5222 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_rowColumnExtents */

 

-/* 5180 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5224 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5182 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5186 */	NdrFcShort( 0xa ),	/* 10 */

-/* 5188 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

-/* 5190 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5192 */	NdrFcShort( 0x91 ),	/* 145 */

-/* 5194 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5226 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5230 */	NdrFcShort( 0xa ),	/* 10 */

+/* 5232 */	NdrFcShort( 0x38 ),	/* X64 Stack size/offset = 56 */

+/* 5234 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5236 */	NdrFcShort( 0x91 ),	/* 145 */

+/* 5238 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x6,		/* 6 */

-/* 5196 */	0xa,		/* 10 */

+/* 5240 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5198 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5200 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5202 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5204 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5242 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5244 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5246 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5248 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 5206 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5208 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5210 */	0x8,		/* FC_LONG */

+/* 5250 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5252 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5254 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 5212 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5214 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5216 */	0x8,		/* FC_LONG */

+/* 5256 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5258 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5260 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rowExtents */

 

-/* 5218 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5220 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 5222 */	0x8,		/* FC_LONG */

+/* 5262 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5264 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5266 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnExtents */

 

-/* 5224 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5226 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 5228 */	0x8,		/* FC_LONG */

+/* 5268 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5270 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

+/* 5272 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 5230 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5232 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 5234 */	0x3,		/* FC_SMALL */

+/* 5274 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5276 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 5278 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 5236 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5238 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

-/* 5240 */	0x8,		/* FC_LONG */

+/* 5280 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5282 */	NdrFcShort( 0x30 ),	/* X64 Stack size/offset = 48 */

+/* 5284 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_table */

 

-/* 5242 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5286 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5244 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5248 */	NdrFcShort( 0xb ),	/* 11 */

-/* 5250 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 5252 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5254 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5256 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5288 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5292 */	NdrFcShort( 0xb ),	/* 11 */

+/* 5294 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5296 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5298 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5300 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5258 */	0xa,		/* 10 */

+/* 5302 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5260 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5262 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5264 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5266 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5304 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5306 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5308 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5310 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter table */

 

-/* 5268 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 5270 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5272 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 5312 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5314 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5316 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 5274 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5276 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5278 */	0x8,		/* FC_LONG */

+/* 5318 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5320 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5322 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_imagePosition */

 

-/* 5280 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5324 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5282 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5286 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 5288 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

-/* 5290 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5292 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 5294 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5326 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5330 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 5332 */	NdrFcShort( 0x28 ),	/* X64 Stack size/offset = 40 */

+/* 5334 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 5336 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 5338 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 5296 */	0xa,		/* 10 */

+/* 5340 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5298 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5300 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5302 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5304 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5342 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5344 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5348 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter coordinateType */

 

-/* 5306 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5308 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5310 */	0xd,		/* FC_ENUM16 */

+/* 5350 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5352 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5354 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 5312 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5314 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5316 */	0x8,		/* FC_LONG */

+/* 5356 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5358 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5360 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 5318 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5320 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 5322 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 5324 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5326 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 5328 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_imageSize */

-

-/* 5330 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5332 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5336 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 5338 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

-/* 5340 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5342 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 5344 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 5346 */	0xa,		/* 10 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5348 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5350 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5352 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5354 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter height */

-

-/* 5356 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5358 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5360 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter width */

-

 /* 5362 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5364 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5364 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

 /* 5366 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 5368 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5370 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5370 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 5372 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_toolkitName */

+	/* Procedure get_imageSize */

 

 /* 5374 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5376 */	NdrFcLong( 0x0 ),	/* 0 */

 /* 5380 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 5382 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5382 */	NdrFcShort( 0x20 ),	/* X64 Stack size/offset = 32 */

 /* 5384 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5386 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5388 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 5386 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 5388 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 5390 */	0xa,		/* 10 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5392 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5392 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5394 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5396 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5398 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter name */

+	/* Parameter height */

 

-/* 5400 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5400 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5402 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5404 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 5404 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter width */

 

-/* 5406 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5406 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5408 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

 /* 5410 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_toolkitVersion */

+	/* Return value */

 

-/* 5412 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5412 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5414 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5416 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_toolkitName */

+

+/* 5418 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5414 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5418 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5420 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 5422 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5424 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5426 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5420 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5424 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 5426 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5428 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5430 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5432 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5428 */	0xa,		/* 10 */

+/* 5434 */	0xa,		/* 10 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5430 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 5432 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5434 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5436 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5436 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 5438 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5440 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5442 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter version */

+	/* Parameter name */

 

-/* 5438 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 5440 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5442 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 5444 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5446 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5448 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 5444 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5446 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5448 */	0x8,		/* FC_LONG */

+/* 5450 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5452 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5454 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_toolkitVersion */

+

+/* 5456 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5458 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5462 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 5464 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5466 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5468 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5470 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 5472 */	0xa,		/* 10 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 5474 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 5476 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5478 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5480 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter version */

+

+/* 5482 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5484 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5486 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+/* 5488 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5490 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5492 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_anchorTarget */

 

-/* 5450 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5494 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5452 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5456 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 5458 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 5460 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5462 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5464 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5496 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5500 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 5502 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 5504 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5506 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5508 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5466 */	0xa,		/* 10 */

+/* 5510 */	0xa,		/* 10 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5468 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5470 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5472 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5474 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5512 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5514 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5516 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5518 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter accessible */

 

-/* 5476 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 5478 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 5480 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 5520 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5522 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 5524 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 5482 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5484 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 5486 */	0x8,		/* FC_LONG */

+/* 5526 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5528 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 5530 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 			0x0

@@ -6053,165 +6098,183 @@
 			0x5b,		/* FC_END */

 /* 1304 */	

 			0x11, 0x0,	/* FC_RP */

-/* 1306 */	NdrFcShort( 0x6 ),	/* Offset= 6 (1312) */

+/* 1306 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1308) */

 /* 1308 */	

+			0x21,		/* FC_BOGUS_ARRAY */

+			0x3,		/* 3 */

+/* 1310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1312 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x0,		/*  */

+/* 1314 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1316 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 1318 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1322 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1324 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+			0x0,		/* 0 */

+/* 1326 */	NdrFcShort( 0xffbe ),	/* Offset= -66 (1260) */

+/* 1328 */	0x5c,		/* FC_PAD */

+			0x5b,		/* FC_END */

+/* 1330 */	

+			0x11, 0x0,	/* FC_RP */

+/* 1332 */	NdrFcShort( 0x6 ),	/* Offset= 6 (1338) */

+/* 1334 */	

 			0x12, 0x0,	/* FC_UP */

-/* 1310 */	NdrFcShort( 0xff8a ),	/* Offset= -118 (1192) */

-/* 1312 */	0xb4,		/* FC_USER_MARSHAL */

+/* 1336 */	NdrFcShort( 0xff70 ),	/* Offset= -144 (1192) */

+/* 1338 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

-/* 1314 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1316 */	NdrFcShort( 0x18 ),	/* 24 */

-/* 1318 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1320 */	NdrFcShort( 0xfff4 ),	/* Offset= -12 (1308) */

-/* 1322 */	

+/* 1340 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1342 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 1344 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1346 */	NdrFcShort( 0xfff4 ),	/* Offset= -12 (1334) */

+/* 1348 */	

 			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/* 1324 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1326) */

-/* 1326 */	

+/* 1350 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1352) */

+/* 1352 */	

 			0x1a,		/* FC_BOGUS_STRUCT */

 			0x3,		/* 3 */

-/* 1328 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1330 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1332 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1332) */

-/* 1334 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+/* 1354 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1356 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1358 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1358) */

+/* 1360 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 1336 */	NdrFcShort( 0xfae8 ),	/* Offset= -1304 (32) */

-/* 1338 */	0x8,		/* FC_LONG */

+/* 1362 */	NdrFcShort( 0xface ),	/* Offset= -1330 (32) */

+/* 1364 */	0x8,		/* FC_LONG */

 			0x8,		/* FC_LONG */

-/* 1340 */	0x5c,		/* FC_PAD */

+/* 1366 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 1342 */	

+/* 1368 */	

 			0x11, 0x0,	/* FC_RP */

-/* 1344 */	NdrFcShort( 0xfbce ),	/* Offset= -1074 (270) */

-/* 1346 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 1348 */	0x3,		/* FC_SMALL */

-			0x5c,		/* FC_PAD */

-/* 1350 */	

-			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 1352 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1354) */

-/* 1354 */	

-			0x2f,		/* FC_IP */

-			0x5a,		/* FC_CONSTANT_IID */

-/* 1356 */	NdrFcLong( 0x1c20f2b ),	/* 29495083 */

-/* 1360 */	NdrFcShort( 0x3dd2 ),	/* 15826 */

-/* 1362 */	NdrFcShort( 0x400f ),	/* 16399 */

-/* 1364 */	0x94,		/* 148 */

-			0x9f,		/* 159 */

-/* 1366 */	0xad,		/* 173 */

-			0x0,		/* 0 */

-/* 1368 */	0xbd,		/* 189 */

-			0xab,		/* 171 */

-/* 1370 */	0x1d,		/* 29 */

-			0x41,		/* 65 */

+/* 1370 */	NdrFcShort( 0xfbb4 ),	/* Offset= -1100 (270) */

 /* 1372 */	

-			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1374 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1376) */

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 1374 */	0x3,		/* FC_SMALL */

+			0x5c,		/* FC_PAD */

 /* 1376 */	

-			0x13, 0x0,	/* FC_OP */

+			0x11, 0x10,	/* FC_RP [pointer_deref] */

 /* 1378 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1380) */

 /* 1380 */	

-			0x21,		/* FC_BOGUS_ARRAY */

-			0x3,		/* 3 */

-/* 1382 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1384 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x54,		/* FC_DEREFERENCE */

-/* 1386 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1388 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1390 */	NdrFcLong( 0xffffffff ),	/* -1 */

-/* 1394 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1396 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

-			0x0,		/* 0 */

-/* 1398 */	NdrFcShort( 0xffd4 ),	/* Offset= -44 (1354) */

-/* 1400 */	0x5c,		/* FC_PAD */

-			0x5b,		/* FC_END */

-/* 1402 */	

-			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 1404 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1406) */

-/* 1406 */	

 			0x2f,		/* FC_IP */

 			0x5a,		/* FC_CONSTANT_IID */

-/* 1408 */	NdrFcLong( 0x35ad8070 ),	/* 900563056 */

-/* 1412 */	NdrFcShort( 0xc20c ),	/* -15860 */

-/* 1414 */	NdrFcShort( 0x4fb4 ),	/* 20404 */

-/* 1416 */	0xb0,		/* 176 */

-			0x94,		/* 148 */

-/* 1418 */	0xf4,		/* 244 */

-			0xf7,		/* 247 */

-/* 1420 */	0x27,		/* 39 */

-			0x5d,		/* 93 */

-/* 1422 */	0xd4,		/* 212 */

-			0x69,		/* 105 */

-/* 1424 */	

+/* 1382 */	NdrFcLong( 0x1c20f2b ),	/* 29495083 */

+/* 1386 */	NdrFcShort( 0x3dd2 ),	/* 15826 */

+/* 1388 */	NdrFcShort( 0x400f ),	/* 16399 */

+/* 1390 */	0x94,		/* 148 */

+			0x9f,		/* 159 */

+/* 1392 */	0xad,		/* 173 */

+			0x0,		/* 0 */

+/* 1394 */	0xbd,		/* 189 */

+			0xab,		/* 171 */

+/* 1396 */	0x1d,		/* 29 */

+			0x41,		/* 65 */

+/* 1398 */	

 			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1426 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1428) */

-/* 1428 */	

+/* 1400 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1402) */

+/* 1402 */	

 			0x13, 0x0,	/* FC_OP */

-/* 1430 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1432) */

-/* 1432 */	

-			0x1c,		/* FC_CVARRAY */

-			0x3,		/* 3 */

-/* 1434 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1436 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x0,		/*  */

-/* 1438 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

-/* 1440 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

-/* 1442 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x54,		/* FC_DEREFERENCE */

-/* 1444 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

-/* 1446 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1448 */	0x8,		/* FC_LONG */

-			0x5b,		/* FC_END */

-/* 1450 */	

-			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/* 1452 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1454) */

-/* 1454 */	

-			0x1a,		/* FC_BOGUS_STRUCT */

-			0x3,		/* 3 */

-/* 1456 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 1458 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1460 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1460) */

-/* 1462 */	0xd,		/* FC_ENUM16 */

-			0x8,		/* FC_LONG */

-/* 1464 */	0x8,		/* FC_LONG */

-			0x8,		/* FC_LONG */

-/* 1466 */	0x8,		/* FC_LONG */

-			0x5b,		/* FC_END */

-/* 1468 */	

-			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1470 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1472) */

-/* 1472 */	

-			0x13, 0x0,	/* FC_OP */

-/* 1474 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1476) */

-/* 1476 */	

+/* 1404 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1406) */

+/* 1406 */	

 			0x21,		/* FC_BOGUS_ARRAY */

 			0x3,		/* 3 */

-/* 1478 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1480 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+/* 1408 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1410 */	0x28,		/* Corr desc:  parameter, FC_LONG */

 			0x54,		/* FC_DEREFERENCE */

-/* 1482 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1484 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1486 */	NdrFcLong( 0xffffffff ),	/* -1 */

-/* 1490 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1492 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+/* 1412 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1414 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1416 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1420 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1422 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 1494 */	NdrFcShort( 0xfa5c ),	/* Offset= -1444 (50) */

-/* 1496 */	0x5c,		/* FC_PAD */

+/* 1424 */	NdrFcShort( 0xffd4 ),	/* Offset= -44 (1380) */

+/* 1426 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 1498 */	

+/* 1428 */	

+			0x11, 0x10,	/* FC_RP [pointer_deref] */

+/* 1430 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1432) */

+/* 1432 */	

+			0x2f,		/* FC_IP */

+			0x5a,		/* FC_CONSTANT_IID */

+/* 1434 */	NdrFcLong( 0x35ad8070 ),	/* 900563056 */

+/* 1438 */	NdrFcShort( 0xc20c ),	/* -15860 */

+/* 1440 */	NdrFcShort( 0x4fb4 ),	/* 20404 */

+/* 1442 */	0xb0,		/* 176 */

+			0x94,		/* 148 */

+/* 1444 */	0xf4,		/* 244 */

+			0xf7,		/* 247 */

+/* 1446 */	0x27,		/* 39 */

+			0x5d,		/* 93 */

+/* 1448 */	0xd4,		/* 212 */

+			0x69,		/* 105 */

+/* 1450 */	

 			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1452 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1454) */

+/* 1454 */	

+			0x13, 0x0,	/* FC_OP */

+/* 1456 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1458) */

+/* 1458 */	

+			0x1c,		/* FC_CVARRAY */

+			0x3,		/* 3 */

+/* 1460 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1462 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x0,		/*  */

+/* 1464 */	NdrFcShort( 0x8 ),	/* X64 Stack size/offset = 8 */

+/* 1466 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 1468 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x54,		/* FC_DEREFERENCE */

+/* 1470 */	NdrFcShort( 0x18 ),	/* X64 Stack size/offset = 24 */

+/* 1472 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1474 */	0x8,		/* FC_LONG */

+			0x5b,		/* FC_END */

+/* 1476 */	

+			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

+/* 1478 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1480) */

+/* 1480 */	

+			0x1a,		/* FC_BOGUS_STRUCT */

+			0x3,		/* 3 */

+/* 1482 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 1484 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1486 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1486) */

+/* 1488 */	0xd,		/* FC_ENUM16 */

+			0x8,		/* FC_LONG */

+/* 1490 */	0x8,		/* FC_LONG */

+			0x8,		/* FC_LONG */

+/* 1492 */	0x8,		/* FC_LONG */

+			0x5b,		/* FC_END */

+/* 1494 */	

+			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1496 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1498) */

+/* 1498 */	

+			0x13, 0x0,	/* FC_OP */

 /* 1500 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1502) */

 /* 1502 */	

+			0x21,		/* FC_BOGUS_ARRAY */

+			0x3,		/* 3 */

+/* 1504 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1506 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x54,		/* FC_DEREFERENCE */

+/* 1508 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1510 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1512 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1516 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1518 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+			0x0,		/* 0 */

+/* 1520 */	NdrFcShort( 0xfa42 ),	/* Offset= -1470 (50) */

+/* 1522 */	0x5c,		/* FC_PAD */

+			0x5b,		/* FC_END */

+/* 1524 */	

+			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1526 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1528) */

+/* 1528 */	

 			0x13, 0x0,	/* FC_OP */

-/* 1504 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1506) */

-/* 1506 */	

+/* 1530 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1532) */

+/* 1532 */	

 			0x1b,		/* FC_CARRAY */

 			0x3,		/* 3 */

-/* 1508 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1510 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+/* 1534 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1536 */	0x28,		/* Corr desc:  parameter, FC_LONG */

 			0x54,		/* FC_DEREFERENCE */

-/* 1512 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

-/* 1514 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1516 */	0x8,		/* FC_LONG */

+/* 1538 */	NdrFcShort( 0x10 ),	/* X64 Stack size/offset = 16 */

+/* 1540 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1542 */	0x8,		/* FC_LONG */

 			0x5b,		/* FC_END */

 

 			0x0

@@ -6957,7 +7020,204 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0005, ver. 0.0,

+/* Object interface: IAccessible2_4, ver. 0.0,

+   GUID={0x610a7bec,0x91bb,0x444d,{0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29}} */

+

+#pragma code_seg(".orpc")

+static const unsigned short IAccessible2_4_FormatStringOffsetTable[] =

+    {

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    472,

+    510,

+    554,

+    604,

+    642,

+    680,

+    730,

+    780,

+    818,

+    856,

+    894,

+    932,

+    982,

+    1032,

+    1070,

+    1108,

+    1146,

+    1184,

+    1222,

+    1266,

+    1310,

+    1366,

+    1410

+    };

+

+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo =

+    {

+    &Object_StubDesc,

+    ia2_api_all__MIDL_ProcFormatString.Format,

+    &IAccessible2_4_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0

+    };

+

+

+static const MIDL_SERVER_INFO IAccessible2_4_ServerInfo = 

+    {

+    &Object_StubDesc,

+    0,

+    ia2_api_all__MIDL_ProcFormatString.Format,

+    &IAccessible2_4_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0,

+    0};

+CINTERFACE_PROXY_VTABLE(51) _IAccessible2_4ProxyVtbl = 

+{

+    &IAccessible2_4_ProxyInfo,

+    &IID_IAccessible2_4,

+    IUnknown_QueryInterface_Proxy,

+    IUnknown_AddRef_Proxy,

+    IUnknown_Release_Proxy ,

+    0 /* IDispatch::GetTypeInfoCount */ ,

+    0 /* IDispatch::GetTypeInfo */ ,

+    0 /* IDispatch::GetIDsOfNames */ ,

+    0 /* IDispatch_Invoke_Proxy */ ,

+    0 /* IAccessible::get_accParent */ ,

+    0 /* IAccessible::get_accChildCount */ ,

+    0 /* IAccessible::get_accChild */ ,

+    0 /* IAccessible::get_accName */ ,

+    0 /* IAccessible::get_accValue */ ,

+    0 /* IAccessible::get_accDescription */ ,

+    0 /* IAccessible::get_accRole */ ,

+    0 /* IAccessible::get_accState */ ,

+    0 /* IAccessible::get_accHelp */ ,

+    0 /* IAccessible::get_accHelpTopic */ ,

+    0 /* IAccessible::get_accKeyboardShortcut */ ,

+    0 /* IAccessible::get_accFocus */ ,

+    0 /* IAccessible::get_accSelection */ ,

+    0 /* IAccessible::get_accDefaultAction */ ,

+    0 /* IAccessible::accSelect */ ,

+    0 /* IAccessible::accLocation */ ,

+    0 /* IAccessible::accNavigate */ ,

+    0 /* IAccessible::accHitTest */ ,

+    0 /* IAccessible::accDoDefaultAction */ ,

+    0 /* IAccessible::put_accName */ ,

+    0 /* IAccessible::put_accValue */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::role */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_3::get_selectionRanges */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_4::setSelectionRanges */

+};

+

+

+static const PRPC_STUB_FUNCTION IAccessible2_4_table[] =

+{

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2

+};

+

+CInterfaceStubVtbl _IAccessible2_4StubVtbl =

+{

+    &IID_IAccessible2_4,

+    &IAccessible2_4_ServerInfo,

+    51,

+    &IAccessible2_4_table[-3],

+    CStdStubBuffer_DELEGATING_METHODS

+};

+

+

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -6967,8 +7227,8 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =

     {

-    1410,

     1454,

+    1498,

     76

     };

 

@@ -7021,10 +7281,10 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =

     {

-    1492,

-    1530,

-    1568,

-    1606

+    1536,

+    1574,

+    1612,

+    1650

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =

@@ -7071,7 +7331,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0007, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0008, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -7081,25 +7341,25 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleText_FormatStringOffsetTable[] =

     {

-    1644,

     1688,

+    1732,

     76,

-    1744,

-    1812,

-    1850,

-    1906,

-    1956,

-    2006,

-    2068,

-    2130,

-    2192,

-    2230,

-    2268,

-    2318,

-    2356,

-    2406,

-    2468,

-    2506

+    1788,

+    1856,

+    1894,

+    1950,

+    2000,

+    2050,

+    2112,

+    2174,

+    2236,

+    2274,

+    2312,

+    2362,

+    2400,

+    2450,

+    2512,

+    2550

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =

@@ -7167,26 +7427,26 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleText2_FormatStringOffsetTable[] =

     {

-    1644,

     1688,

+    1732,

     76,

-    1744,

-    1812,

-    1850,

-    1906,

-    1956,

-    2006,

-    2068,

-    2130,

-    2192,

-    2230,

-    2268,

-    2318,

-    2356,

-    2406,

-    2468,

-    2506,

-    2544

+    1788,

+    1856,

+    1894,

+    1950,

+    2000,

+    2050,

+    2112,

+    2174,

+    2236,

+    2274,

+    2312,

+    2362,

+    2400,

+    2450,

+    2512,

+    2550,

+    2588

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo =

@@ -7255,13 +7515,13 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =

     {

-    1644,

-    2606,

+    1688,

     2650,

     2694,

     2738,

-    2776,

-    2826

+    2782,

+    2820,

+    2870

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =

@@ -7323,11 +7583,11 @@
     328,

     384,

     428,

-    2876,

     2920,

     2964,

-    3002,

-    3040

+    3008,

+    3046,

+    3084

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =

@@ -7387,28 +7647,28 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =

     {

-    1644,

     1688,

+    1732,

     76,

-    1744,

-    1812,

-    1850,

-    1906,

-    1956,

-    2006,

-    2068,

-    2130,

-    2192,

-    2230,

-    2268,

-    2318,

-    2356,

-    2406,

-    2468,

-    2506,

-    3078,

-    3116,

-    3160

+    1788,

+    1856,

+    1894,

+    1950,

+    2000,

+    2050,

+    2112,

+    2174,

+    2236,

+    2274,

+    2312,

+    2362,

+    2400,

+    2450,

+    2512,

+    2550,

+    3122,

+    3160,

+    3204

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =

@@ -7479,29 +7739,29 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] =

     {

-    1644,

     1688,

+    1732,

     76,

-    1744,

-    1812,

-    1850,

-    1906,

-    1956,

-    2006,

-    2068,

-    2130,

-    2192,

-    2230,

-    2268,

-    2318,

-    2356,

-    2406,

-    2468,

-    2506,

-    3078,

-    3116,

+    1788,

+    1856,

+    1894,

+    1950,

+    2000,

+    2050,

+    2112,

+    2174,

+    2236,

+    2274,

+    2312,

+    2362,

+    2400,

+    2450,

+    2512,

+    2550,

+    3122,

     3160,

-    3204

+    3204,

+    3248

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo =

@@ -7573,35 +7833,35 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =

     {

-    3248,

-    3298,

-    3336,

-    3386,

+    3292,

+    3342,

+    3380,

     3430,

-    3480,

+    3474,

     3524,

     3568,

-    2964,

-    3002,

-    3606,

-    3644,

-    3682,

+    3612,

+    3008,

+    3046,

+    3650,

+    3688,

     3726,

-    3776,

+    3770,

     3820,

     3864,

-    3914,

-    3964,

-    4014,

-    4052,

+    3908,

+    3958,

+    4008,

+    4058,

     4096,

     4140,

-    4190,

-    4228,

-    4266,

-    4304,

-    4342,

-    4410

+    4184,

+    4234,

+    4272,

+    4310,

+    4348,

+    4386,

+    4454

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =

@@ -7679,26 +7939,26 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =

     {

-    3248,

-    3298,

+    3292,

+    3342,

     284,

-    4448,

-    1812,

-    4486,

-    4524,

-    3568,

-    4562,

+    4492,

+    1856,

+    4530,

+    4568,

+    3612,

     4606,

     4650,

     4694,

     4738,

-    4776,

+    4782,

     4820,

     4864,

-    4902,

-    4940,

-    4978,

-    5016

+    4908,

+    4946,

+    4984,

+    5022,

+    5060

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =

@@ -7768,14 +8028,14 @@
 static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =

     {

     208,

-    5054,

-    76,

-    4448,

     5098,

-    4486,

+    76,

+    4492,

     5142,

-    5180,

-    5242

+    4530,

+    5186,

+    5224,

+    5286

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =

@@ -7834,8 +8094,8 @@
 static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =

     {

     0,

-    5280,

-    5330

+    5324,

+    5374

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =

@@ -7881,7 +8141,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0017, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -7893,8 +8153,8 @@
     {

     0,

     38,

-    5374,

-    5412

+    5418,

+    5456

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =

@@ -7947,7 +8207,7 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] =

     {

-    5450

+    5494

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo =

@@ -7991,7 +8251,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0019, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0020, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 static const MIDL_STUB_DESC Object_StubDesc = 

@@ -8037,6 +8297,7 @@
     ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl,

+    ( CInterfaceProxyVtbl *) &_IAccessible2_4ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,

     0

@@ -8061,6 +8322,7 @@
     ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl,

+    ( CInterfaceStubVtbl *) &_IAccessible2_4StubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,

     0

@@ -8085,6 +8347,7 @@
     "IAccessibleText2",

     "IAccessibleDocument",

     "IAccessible2_2",

+    "IAccessible2_4",

     "IAccessibleRelation",

     "IAccessibleText",

     0

@@ -8109,6 +8372,7 @@
     0,

     0,

     &IID_IAccessible,

+    &IID_IAccessible,

     0,

     0,

     0

@@ -8121,12 +8385,12 @@
 {

     IID_BS_LOOKUP_SETUP

 

-    IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 19, 16 )

+    IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 20, 16 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 )

-    IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 19, *pIndex )

+    IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 20, *pIndex )

     

 }

 

@@ -8137,7 +8401,7 @@
     (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList,

     (const IID ** ) & _ia2_api_all_BaseIIDList,

     & _ia2_api_all_IID_Lookup, 

-    19,

+    20,

     2,

     0, /* table of [async_uuid] interfaces */

     0, /* Filler1 */

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h
index 1f9c421..5632075 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h
@@ -80,6 +80,13 @@
 #endif 	/* __IAccessible2_3_FWD_DEFINED__ */

 

 

+#ifndef __IAccessible2_4_FWD_DEFINED__

+#define __IAccessible2_4_FWD_DEFINED__

+typedef interface IAccessible2_4 IAccessible2_4;

+

+#endif 	/* __IAccessible2_4_FWD_DEFINED__ */

+

+

 #ifndef __IAccessibleComponent_FWD_DEFINED__

 #define __IAccessibleComponent_FWD_DEFINED__

 typedef interface IAccessibleComponent IAccessibleComponent;

@@ -2243,15 +2250,491 @@
 #endif 	/* __IAccessible2_3_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0005 */

+#ifndef __IAccessible2_4_INTERFACE_DEFINED__

+#define __IAccessible2_4_INTERFACE_DEFINED__

+

+/* interface IAccessible2_4 */

+/* [uuid][object] */ 

+

+

+EXTERN_C const IID IID_IAccessible2_4;

+

+#if defined(__cplusplus) && !defined(CINTERFACE)

+    

+    MIDL_INTERFACE("610a7bec-91bb-444d-a336-a0daf13c4c29")

+    IAccessible2_4 : public IAccessible2_3

+    {

+    public:

+        virtual HRESULT STDMETHODCALLTYPE setSelectionRanges( 

+            /* [in] */ long nRanges,

+            /* [size_is][in] */ IA2Range *ranges) = 0;

+        

+    };

+    

+    

+#else 	/* C style interface */

+

+    typedef struct IAccessible2_4Vtbl

+    {

+        BEGIN_INTERFACE

+        

+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 

+            IAccessible2_4 * This,

+            /* [in] */ REFIID riid,

+            /* [annotation][iid_is][out] */ 

+            _COM_Outptr_  void **ppvObject);

+        

+        ULONG ( STDMETHODCALLTYPE *AddRef )( 

+            IAccessible2_4 * This);

+        

+        ULONG ( STDMETHODCALLTYPE *Release )( 

+            IAccessible2_4 * This);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 

+            IAccessible2_4 * This,

+            /* [out] */ UINT *pctinfo);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 

+            IAccessible2_4 * This,

+            /* [in] */ UINT iTInfo,

+            /* [in] */ LCID lcid,

+            /* [out] */ ITypeInfo **ppTInfo);

+        

+        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 

+            IAccessible2_4 * This,

+            /* [in] */ REFIID riid,

+            /* [size_is][in] */ LPOLESTR *rgszNames,

+            /* [range][in] */ UINT cNames,

+            /* [in] */ LCID lcid,

+            /* [size_is][out] */ DISPID *rgDispId);

+        

+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 

+            IAccessible2_4 * 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);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ IDispatch **ppdispParent);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *pcountChildren);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( 

+            IAccessible2_4 * This,

+            /* [in] */ VARIANT varChild,

+            /* [retval][out] */ IDispatch **ppdispChild);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszName);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszValue);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszDescription);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ VARIANT *pvarRole);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ VARIANT *pvarState);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszHelp);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( 

+            IAccessible2_4 * This,

+            /* [out] */ BSTR *pszHelpFile,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ long *pidTopic);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszKeyboardShortcut);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ VARIANT *pvarChild);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ VARIANT *pvarChildren);

+        

+        /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [retval][out] */ BSTR *pszDefaultAction);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( 

+            IAccessible2_4 * This,

+            /* [in] */ long flagsSelect,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( 

+            IAccessible2_4 * This,

+            /* [out] */ long *pxLeft,

+            /* [out] */ long *pyTop,

+            /* [out] */ long *pcxWidth,

+            /* [out] */ long *pcyHeight,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( 

+            IAccessible2_4 * This,

+            /* [in] */ long navDir,

+            /* [optional][in] */ VARIANT varStart,

+            /* [retval][out] */ VARIANT *pvarEndUpAt);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( 

+            IAccessible2_4 * This,

+            /* [in] */ long xLeft,

+            /* [in] */ long yTop,

+            /* [retval][out] */ VARIANT *pvarChild);

+        

+        /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild);

+        

+        /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [in] */ BSTR szName);

+        

+        /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( 

+            IAccessible2_4 * This,

+            /* [optional][in] */ VARIANT varChild,

+            /* [in] */ BSTR szValue);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *nRelations);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( 

+            IAccessible2_4 * This,

+            /* [in] */ long relationIndex,

+            /* [retval][out] */ IAccessibleRelation **relation);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( 

+            IAccessible2_4 * This,

+            /* [in] */ long maxRelations,

+            /* [length_is][size_is][out] */ IAccessibleRelation **relations,

+            /* [retval][out] */ long *nRelations);

+        

+        HRESULT ( STDMETHODCALLTYPE *role )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *role);

+        

+        HRESULT ( STDMETHODCALLTYPE *scrollTo )( 

+            IAccessible2_4 * This,

+            /* [in] */ enum IA2ScrollType scrollType);

+        

+        HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( 

+            IAccessible2_4 * This,

+            /* [in] */ enum IA2CoordinateType coordinateType,

+            /* [in] */ long x,

+            /* [in] */ long y);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( 

+            IAccessible2_4 * This,

+            /* [out] */ long *groupLevel,

+            /* [out] */ long *similarItemsInGroup,

+            /* [retval][out] */ long *positionInGroup);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ AccessibleStates *states);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ BSTR *extendedRole);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ BSTR *localizedExtendedRole);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *nExtendedStates);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( 

+            IAccessible2_4 * This,

+            /* [in] */ long maxExtendedStates,

+            /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,

+            /* [retval][out] */ long *nExtendedStates);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( 

+            IAccessible2_4 * This,

+            /* [in] */ long maxLocalizedExtendedStates,

+            /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,

+            /* [retval][out] */ long *nLocalizedExtendedStates);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *uniqueID);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ HWND *windowHandle);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ long *indexInParent);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ IA2Locale *locale);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( 

+            IAccessible2_4 * This,

+            /* [retval][out] */ BSTR *attributes);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )( 

+            IAccessible2_4 * This,

+            /* [in] */ BSTR name,

+            /* [retval][out] */ VARIANT *attribute);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )( 

+            IAccessible2_4 * This,

+            /* [out] */ IUnknown **accessible,

+            /* [retval][out] */ long *caretOffset);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )( 

+            IAccessible2_4 * This,

+            /* [in] */ BSTR type,

+            /* [in] */ long maxTargets,

+            /* [size_is][size_is][out] */ IUnknown ***targets,

+            /* [retval][out] */ long *nTargets);

+        

+        /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectionRanges )( 

+            IAccessible2_4 * This,

+            /* [size_is][size_is][out] */ IA2Range **ranges,

+            /* [retval][out] */ long *nRanges);

+        

+        HRESULT ( STDMETHODCALLTYPE *setSelectionRanges )( 

+            IAccessible2_4 * This,

+            /* [in] */ long nRanges,

+            /* [size_is][in] */ IA2Range *ranges);

+        

+        END_INTERFACE

+    } IAccessible2_4Vtbl;

+

+    interface IAccessible2_4

+    {

+        CONST_VTBL struct IAccessible2_4Vtbl *lpVtbl;

+    };

+

+    

+

+#ifdef COBJMACROS

+

+

+#define IAccessible2_4_QueryInterface(This,riid,ppvObject)	\

+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

+

+#define IAccessible2_4_AddRef(This)	\

+    ( (This)->lpVtbl -> AddRef(This) ) 

+

+#define IAccessible2_4_Release(This)	\

+    ( (This)->lpVtbl -> Release(This) ) 

+

+

+#define IAccessible2_4_GetTypeInfoCount(This,pctinfo)	\

+    ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) 

+

+#define IAccessible2_4_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\

+    ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) 

+

+#define IAccessible2_4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\

+    ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) 

+

+#define IAccessible2_4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\

+    ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) 

+

+

+#define IAccessible2_4_get_accParent(This,ppdispParent)	\

+    ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) 

+

+#define IAccessible2_4_get_accChildCount(This,pcountChildren)	\

+    ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) 

+

+#define IAccessible2_4_get_accChild(This,varChild,ppdispChild)	\

+    ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) 

+

+#define IAccessible2_4_get_accName(This,varChild,pszName)	\

+    ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) 

+

+#define IAccessible2_4_get_accValue(This,varChild,pszValue)	\

+    ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) 

+

+#define IAccessible2_4_get_accDescription(This,varChild,pszDescription)	\

+    ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) 

+

+#define IAccessible2_4_get_accRole(This,varChild,pvarRole)	\

+    ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) 

+

+#define IAccessible2_4_get_accState(This,varChild,pvarState)	\

+    ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) 

+

+#define IAccessible2_4_get_accHelp(This,varChild,pszHelp)	\

+    ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) 

+

+#define IAccessible2_4_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic)	\

+    ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) 

+

+#define IAccessible2_4_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut)	\

+    ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) 

+

+#define IAccessible2_4_get_accFocus(This,pvarChild)	\

+    ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) 

+

+#define IAccessible2_4_get_accSelection(This,pvarChildren)	\

+    ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) 

+

+#define IAccessible2_4_get_accDefaultAction(This,varChild,pszDefaultAction)	\

+    ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) 

+

+#define IAccessible2_4_accSelect(This,flagsSelect,varChild)	\

+    ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) 

+

+#define IAccessible2_4_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild)	\

+    ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) 

+

+#define IAccessible2_4_accNavigate(This,navDir,varStart,pvarEndUpAt)	\

+    ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) 

+

+#define IAccessible2_4_accHitTest(This,xLeft,yTop,pvarChild)	\

+    ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) 

+

+#define IAccessible2_4_accDoDefaultAction(This,varChild)	\

+    ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) 

+

+#define IAccessible2_4_put_accName(This,varChild,szName)	\

+    ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) 

+

+#define IAccessible2_4_put_accValue(This,varChild,szValue)	\

+    ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) 

+

+

+#define IAccessible2_4_get_nRelations(This,nRelations)	\

+    ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) 

+

+#define IAccessible2_4_get_relation(This,relationIndex,relation)	\

+    ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) 

+

+#define IAccessible2_4_get_relations(This,maxRelations,relations,nRelations)	\

+    ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) 

+

+#define IAccessible2_4_role(This,role)	\

+    ( (This)->lpVtbl -> role(This,role) ) 

+

+#define IAccessible2_4_scrollTo(This,scrollType)	\

+    ( (This)->lpVtbl -> scrollTo(This,scrollType) ) 

+

+#define IAccessible2_4_scrollToPoint(This,coordinateType,x,y)	\

+    ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) 

+

+#define IAccessible2_4_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup)	\

+    ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) 

+

+#define IAccessible2_4_get_states(This,states)	\

+    ( (This)->lpVtbl -> get_states(This,states) ) 

+

+#define IAccessible2_4_get_extendedRole(This,extendedRole)	\

+    ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) 

+

+#define IAccessible2_4_get_localizedExtendedRole(This,localizedExtendedRole)	\

+    ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) 

+

+#define IAccessible2_4_get_nExtendedStates(This,nExtendedStates)	\

+    ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) 

+

+#define IAccessible2_4_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates)	\

+    ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) 

+

+#define IAccessible2_4_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates)	\

+    ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) 

+

+#define IAccessible2_4_get_uniqueID(This,uniqueID)	\

+    ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) 

+

+#define IAccessible2_4_get_windowHandle(This,windowHandle)	\

+    ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) 

+

+#define IAccessible2_4_get_indexInParent(This,indexInParent)	\

+    ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) 

+

+#define IAccessible2_4_get_locale(This,locale)	\

+    ( (This)->lpVtbl -> get_locale(This,locale) ) 

+

+#define IAccessible2_4_get_attributes(This,attributes)	\

+    ( (This)->lpVtbl -> get_attributes(This,attributes) ) 

+

+

+#define IAccessible2_4_get_attribute(This,name,attribute)	\

+    ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) 

+

+#define IAccessible2_4_get_accessibleWithCaret(This,accessible,caretOffset)	\

+    ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) 

+

+#define IAccessible2_4_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets)	\

+    ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) 

+

+

+#define IAccessible2_4_get_selectionRanges(This,ranges,nRanges)	\

+    ( (This)->lpVtbl -> get_selectionRanges(This,ranges,nRanges) ) 

+

+

+#define IAccessible2_4_setSelectionRanges(This,nRanges,ranges)	\

+    ( (This)->lpVtbl -> setSelectionRanges(This,nRanges,ranges) ) 

+

+#endif /* COBJMACROS */

+

+

+#endif 	/* C style interface */

+

+

+

+

+#endif 	/* __IAccessible2_4_INTERFACE_DEFINED__ */

+

+

+/* interface __MIDL_itf_ia2_api_all_0000_0006 */

 /* [local] */ 

 

 typedef long IA2Color;

 

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec;

 

 #ifndef __IAccessibleComponent_INTERFACE_DEFINED__

 #define __IAccessibleComponent_INTERFACE_DEFINED__

@@ -2465,7 +2948,7 @@
 #endif 	/* __IAccessibleValue_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0007 */

+/* interface __MIDL_itf_ia2_api_all_0000_0008 */

 /* [local] */ 

 

 typedef struct IA2TextSegment

@@ -2487,8 +2970,8 @@
     } ;

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_s_ifspec;

 

 #ifndef __IAccessibleText_INTERFACE_DEFINED__

 #define __IAccessibleText_INTERFACE_DEFINED__

@@ -4943,7 +5426,7 @@
 #endif 	/* __IAccessibleImage_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0017 */

+/* interface __MIDL_itf_ia2_api_all_0000_0018 */

 /* [local] */ 

 

 

@@ -4987,8 +5470,8 @@
     } ;

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec;

 

 #ifndef __IAccessibleApplication_INTERFACE_DEFINED__

 #define __IAccessibleApplication_INTERFACE_DEFINED__

@@ -5180,7 +5663,7 @@
 #endif 	/* __IAccessibleDocument_INTERFACE_DEFINED__ */

 

 

-/* interface __MIDL_itf_ia2_api_all_0000_0019 */

+/* interface __MIDL_itf_ia2_api_all_0000_0020 */

 /* [local] */ 

 

 

@@ -5188,8 +5671,8 @@
 

 

 

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_c_ifspec;

-extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_s_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_c_ifspec;

+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_s_ifspec;

 

 

 #ifndef __IAccessible2Lib_LIBRARY_DEFINED__

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c
index 513877b..2edf9310 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c
@@ -82,6 +82,9 @@
 MIDL_DEFINE_GUID(IID, IID_IAccessible2_3,0x5BE18059,0x762E,0x4E73,0x94,0x76,0xAB,0xA2,0x94,0xFE,0xD4,0x11);

 

 

+MIDL_DEFINE_GUID(IID, IID_IAccessible2_4,0x610a7bec,0x91bb,0x444d,0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29);

+

+

 MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);

 

 

diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c
index 76491ae9..86483ef 100644
--- a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c
+++ b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c
@@ -49,8 +49,8 @@
 

 #include "ia2_api_all.h"

 

-#define TYPE_FORMAT_STRING_SIZE   1563                              

-#define PROC_FORMAT_STRING_SIZE   5239                              

+#define TYPE_FORMAT_STRING_SIZE   1589                              

+#define PROC_FORMAT_STRING_SIZE   5281                              

 #define EXPR_FORMAT_STRING_SIZE   1                                 

 #define TRANSMIT_AS_TABLE_SIZE    0            

 #define WIRE_MARSHAL_TABLE_SIZE   3            

@@ -121,6 +121,13 @@
 extern const MIDL_STUB_DESC Object_StubDesc;

 

 

+extern const MIDL_SERVER_INFO IAccessible2_4_ServerInfo;

+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo;

+

+

+extern const MIDL_STUB_DESC Object_StubDesc;

+

+

 extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;

 extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;

 

@@ -1492,36 +1499,35 @@
 /* 1342 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_locationInParent */

+	/* Procedure setSelectionRanges */

 

 /* 1344 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1346 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1350 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1350 */	NdrFcShort( 0x32 ),	/* 50 */

 /* 1352 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1354 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1356 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1358 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1354 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1356 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1358 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 1360 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 1362 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1364 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1364 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 1366 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter x */

+	/* Parameter nRanges */

 

-/* 1368 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1368 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 1370 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 1372 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter y */

+	/* Parameter ranges */

 

-/* 1374 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1374 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 1376 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1378 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 1378 */	NdrFcShort( 0x54c ),	/* Type Offset=1356 */

 

 	/* Return value */

 

@@ -1530,155 +1536,193 @@
 /* 1384 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_foreground */

+	/* Procedure get_locationInParent */

 

 /* 1386 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1388 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1392 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1394 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1392 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1394 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 1396 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1398 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1398 */	NdrFcShort( 0x40 ),	/* 64 */

 /* 1400 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 1402 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 1404 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1406 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1408 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter foreground */

+	/* Parameter x */

 

 /* 1410 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 1412 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 1414 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter y */

 

-/* 1416 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1416 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 1418 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 1420 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_currentValue */

+	/* Return value */

 

-/* 1422 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1422 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1424 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1426 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_foreground */

+

+/* 1428 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1424 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1428 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1430 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1432 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1434 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1436 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1430 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1434 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1436 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1438 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1440 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1442 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 1438 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1440 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1442 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1444 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1444 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1446 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1448 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1450 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter currentValue */

+	/* Parameter foreground */

 

-/* 1446 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 1448 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1450 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

+/* 1452 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1454 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1456 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1452 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1454 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1456 */	0x8,		/* FC_LONG */

+/* 1458 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1460 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1462 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_currentValue */

+

+/* 1464 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1466 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1470 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 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 */

+/* 1480 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1482 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1484 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1486 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter currentValue */

+

+/* 1488 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 1490 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1492 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

+

+	/* Return value */

+

+/* 1494 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1496 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1498 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setCurrentValue */

 

-/* 1458 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1500 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1460 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1464 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1466 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 1468 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1470 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1472 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 1502 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1506 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1508 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 1510 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1512 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1514 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1474 */	0x8,		/* 8 */

+/* 1516 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 1476 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1478 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1480 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1518 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1520 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1522 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter value */

 

-/* 1482 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 1484 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1486 */	NdrFcShort( 0x54c ),	/* Type Offset=1356 */

+/* 1524 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 1526 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1528 */	NdrFcShort( 0x566 ),	/* Type Offset=1382 */

 

 	/* Return value */

 

-/* 1488 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1490 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1492 */	0x8,		/* FC_LONG */

+/* 1530 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1532 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1534 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_maximumValue */

 

-/* 1494 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1536 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1496 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1500 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 1502 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1504 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1506 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1508 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1538 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1542 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 1544 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1546 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1548 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1550 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1510 */	0x8,		/* 8 */

+/* 1552 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1512 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1514 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1516 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1554 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1556 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1558 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter maximumValue */

 

-/* 1518 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 1520 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1522 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

+/* 1560 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 1562 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1564 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

 

 	/* Return value */

 

-/* 1524 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1526 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1528 */	0x8,		/* FC_LONG */

+/* 1566 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1568 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1570 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_minimumValue */

 

-/* 1530 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1572 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1532 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1536 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 1538 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1540 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1542 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1544 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1574 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1578 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 1580 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1582 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1584 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1586 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 1546 */	0x8,		/* 8 */

+/* 1588 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1548 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1550 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1552 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1590 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1592 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1594 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter minimumValue */

 

-/* 1554 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 1556 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1558 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

+/* 1596 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 1598 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1600 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

 

 	/* Return value */

 

-/* 1560 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1562 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1564 */	0x8,		/* FC_LONG */

+/* 1602 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1604 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1606 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure copyText */

@@ -1686,166 +1730,166 @@
 

 	/* Procedure addSelection */

 

-/* 1566 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1568 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1572 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 1574 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1576 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1578 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1580 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 1582 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 1584 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1586 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1588 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter startOffset */

-

-

-	/* Parameter startOffset */

-

-/* 1590 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1592 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1594 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-

-	/* Parameter endOffset */

-

-/* 1596 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1598 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1600 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-

-	/* Return value */

-

-/* 1602 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1604 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1606 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_attributes */

-

 /* 1608 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 1610 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1614 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1616 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 1618 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1620 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1622 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x5,		/* 5 */

+/* 1614 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 1616 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1618 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1620 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1622 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 1624 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1626 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 1626 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1628 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 1630 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

+

+

+	/* Parameter startOffset */

 

 /* 1632 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 1634 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 1636 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter startOffset */

+	/* Parameter endOffset */

 

-/* 1638 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Parameter endOffset */

+

+/* 1638 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 1640 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 1642 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter endOffset */

+	/* Return value */

 

-/* 1644 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+

+	/* Return value */

+

+/* 1644 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 1646 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 1648 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_attributes */

+

+/* 1650 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1652 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1656 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1658 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 1660 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1662 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 1664 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x5,		/* 5 */

+/* 1666 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1668 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1670 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1672 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter offset */

+

+/* 1674 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1676 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1678 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter startOffset */

+

+/* 1680 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1682 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1684 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter endOffset */

+

+/* 1686 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1688 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1690 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Parameter textAttributes */

 

-/* 1650 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1652 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1654 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 1692 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1694 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1696 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1656 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1658 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1660 */	0x8,		/* FC_LONG */

+/* 1698 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1700 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1702 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_characterExtents */

 

-/* 1662 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1704 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1664 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1668 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 1670 */	NdrFcShort( 0x20 ),	/* x86 Stack size/offset = 32 */

-/* 1672 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1674 */	NdrFcShort( 0x78 ),	/* 120 */

-/* 1676 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1706 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1710 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 1712 */	NdrFcShort( 0x20 ),	/* x86 Stack size/offset = 32 */

+/* 1714 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1716 */	NdrFcShort( 0x78 ),	/* 120 */

+/* 1718 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x7,		/* 7 */

-/* 1678 */	0x8,		/* 8 */

+/* 1720 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1680 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1682 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1684 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1722 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1724 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1726 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 1686 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1688 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1690 */	0x8,		/* FC_LONG */

+/* 1728 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1730 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1732 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordType */

 

-/* 1692 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1694 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1696 */	0xd,		/* FC_ENUM16 */

+/* 1734 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1736 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1738 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 1698 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1700 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1702 */	0x8,		/* FC_LONG */

+/* 1740 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1742 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1744 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 1704 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1706 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1708 */	0x8,		/* FC_LONG */

+/* 1746 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1748 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1750 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter width */

 

-/* 1710 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1712 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1714 */	0x8,		/* FC_LONG */

+/* 1752 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1754 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1756 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter height */

 

-/* 1716 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1718 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 1720 */	0x8,		/* FC_LONG */

+/* 1758 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1760 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 1762 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1722 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1724 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 1726 */	0x8,		/* FC_LONG */

+/* 1764 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1766 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 1768 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nRows */

@@ -1853,29 +1897,29 @@
 

 	/* Procedure get_nSelections */

 

-/* 1728 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1770 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1730 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1734 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 1736 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1738 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1740 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1742 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1772 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1776 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 1778 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1780 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1782 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1784 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 1744 */	0x8,		/* 8 */

+/* 1786 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1746 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1748 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1750 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1788 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1790 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1792 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowCount */

 

 

 	/* Parameter nSelections */

 

-/* 1752 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1754 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1756 */	0x8,		/* FC_LONG */

+/* 1794 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1796 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1798 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -1883,752 +1927,715 @@
 

 	/* Return value */

 

-/* 1758 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1760 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1762 */	0x8,		/* FC_LONG */

+/* 1800 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1802 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1804 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_offsetAtPoint */

 

-/* 1764 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1806 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1766 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1770 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1772 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 1774 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 1776 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 1778 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1808 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1812 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1814 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 1816 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 1818 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 1820 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x5,		/* 5 */

-/* 1780 */	0x8,		/* 8 */

+/* 1822 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1782 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1784 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1786 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1824 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1826 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1828 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter x */

 

-/* 1788 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1790 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1792 */	0x8,		/* FC_LONG */

+/* 1830 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1832 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1834 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 1794 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1796 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1798 */	0x8,		/* FC_LONG */

+/* 1836 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1838 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1840 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordType */

 

-/* 1800 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1802 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1804 */	0xd,		/* FC_ENUM16 */

+/* 1842 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1844 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1846 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter offset */

 

-/* 1806 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1808 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1810 */	0x8,		/* FC_LONG */

+/* 1848 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1850 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1852 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 1812 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1814 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1816 */	0x8,		/* FC_LONG */

+/* 1854 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1856 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1858 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selection */

 

-/* 1818 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1860 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1820 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1824 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 1826 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1828 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1830 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1832 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 1862 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1866 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 1868 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1870 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1872 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 1874 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 1834 */	0x8,		/* 8 */

+/* 1876 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 1836 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1838 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1840 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1878 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1880 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1882 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 1842 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1844 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1846 */	0x8,		/* FC_LONG */

+/* 1884 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1886 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1888 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 1848 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1850 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1852 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-/* 1854 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1856 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1858 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 1860 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1862 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1864 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_text */

-

-/* 1866 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1868 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1872 */	NdrFcShort( 0xa ),	/* 10 */

-/* 1874 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1876 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1878 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 1880 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x4,		/* 4 */

-/* 1882 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1884 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1886 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1888 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter startOffset */

-

-/* 1890 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1892 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1890 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1892 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 1894 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 1896 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1898 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1896 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1898 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 1900 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 1902 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1904 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1906 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_text */

+

+/* 1908 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 1910 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1914 */	NdrFcShort( 0xa ),	/* 10 */

+/* 1916 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 1918 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1920 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 1922 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x4,		/* 4 */

+/* 1924 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 1926 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1928 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1930 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter startOffset */

+

+/* 1932 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1934 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1936 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter endOffset */

+

+/* 1938 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1940 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1942 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Parameter text */

 

-/* 1902 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1904 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1906 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 1944 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 1946 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1948 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1908 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1910 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1912 */	0x8,		/* FC_LONG */

+/* 1950 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 1952 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 1954 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textBeforeOffset */

 

-/* 1914 */	0x33,		/* FC_AUTO_HANDLE */

+/* 1956 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1916 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1920 */	NdrFcShort( 0xb ),	/* 11 */

-/* 1922 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 1924 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1926 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1928 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 1958 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 1962 */	NdrFcShort( 0xb ),	/* 11 */

+/* 1964 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 1966 */	NdrFcShort( 0xe ),	/* 14 */

+/* 1968 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 1970 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 1930 */	0x8,		/* 8 */

+/* 1972 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1932 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1934 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1936 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1974 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 1976 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1978 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 1938 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1940 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1942 */	0x8,		/* FC_LONG */

+/* 1980 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1982 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1984 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 1944 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 1946 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1948 */	0xd,		/* FC_ENUM16 */

+/* 1986 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 1988 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1990 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 1950 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1952 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1954 */	0x8,		/* FC_LONG */

+/* 1992 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 1994 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1996 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 1956 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 1958 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 1960 */	0x8,		/* FC_LONG */

+/* 1998 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2000 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2002 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 1962 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 1964 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 1966 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2004 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2006 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2008 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 1968 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 1970 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 1972 */	0x8,		/* FC_LONG */

+/* 2010 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2012 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2014 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textAfterOffset */

 

-/* 1974 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2016 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 1976 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 1980 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1982 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 1984 */	NdrFcShort( 0xe ),	/* 14 */

-/* 1986 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 1988 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2018 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2022 */	NdrFcShort( 0xc ),	/* 12 */

+/* 2024 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 2026 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2028 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2030 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 1990 */	0x8,		/* 8 */

+/* 2032 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 1992 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 1994 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1996 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2034 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2036 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2038 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 1998 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2000 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2002 */	0x8,		/* FC_LONG */

+/* 2040 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2042 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2044 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2004 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2006 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2008 */	0xd,		/* FC_ENUM16 */

+/* 2046 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2048 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2050 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2010 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2012 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2014 */	0x8,		/* FC_LONG */

+/* 2052 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2054 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2056 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2016 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2018 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2020 */	0x8,		/* FC_LONG */

+/* 2058 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2060 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2062 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2022 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2024 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2026 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2064 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2066 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2068 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2028 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2030 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 2032 */	0x8,		/* FC_LONG */

+/* 2070 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2072 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2074 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_textAtOffset */

 

-/* 2034 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2076 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2036 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2040 */	NdrFcShort( 0xd ),	/* 13 */

-/* 2042 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 2044 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2046 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2048 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2078 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2082 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2084 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 2086 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2088 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2090 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2050 */	0x8,		/* 8 */

+/* 2092 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2052 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2054 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2094 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2096 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2098 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2058 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2060 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2062 */	0x8,		/* FC_LONG */

+/* 2100 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2102 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2104 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter boundaryType */

 

-/* 2064 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2066 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2068 */	0xd,		/* FC_ENUM16 */

+/* 2106 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2108 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2110 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2070 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2072 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2074 */	0x8,		/* FC_LONG */

+/* 2112 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2114 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2116 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2076 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2078 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2080 */	0x8,		/* FC_LONG */

+/* 2118 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2120 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2122 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2082 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2084 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2086 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 2124 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2126 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2128 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 2088 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2090 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 2092 */	0x8,		/* FC_LONG */

+/* 2130 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2132 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2134 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure removeSelection */

 

-/* 2094 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2136 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2096 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2100 */	NdrFcShort( 0xe ),	/* 14 */

-/* 2102 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2104 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2106 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2108 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2138 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2142 */	NdrFcShort( 0xe ),	/* 14 */

+/* 2144 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2146 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2148 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2150 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2110 */	0x8,		/* 8 */

+/* 2152 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2112 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2114 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2116 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2154 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2156 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2158 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2118 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2120 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2122 */	0x8,		/* FC_LONG */

+/* 2160 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2162 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2164 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2124 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2126 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2128 */	0x8,		/* FC_LONG */

+/* 2166 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2168 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2170 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setCaretOffset */

 

-/* 2130 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2172 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2132 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2136 */	NdrFcShort( 0xf ),	/* 15 */

-/* 2138 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2140 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2142 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2144 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2174 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2178 */	NdrFcShort( 0xf ),	/* 15 */

+/* 2180 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2182 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2184 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2186 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2146 */	0x8,		/* 8 */

+/* 2188 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2148 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2150 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2152 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2190 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2192 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2194 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2154 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2156 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2158 */	0x8,		/* FC_LONG */

+/* 2196 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2198 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2200 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2160 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2162 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2164 */	0x8,		/* FC_LONG */

+/* 2202 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2204 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2206 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setSelection */

 

-/* 2166 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2208 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2168 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2172 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2174 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2176 */	NdrFcShort( 0x18 ),	/* 24 */

-/* 2178 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2180 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2210 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2214 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2216 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2218 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 2220 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2222 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 2182 */	0x8,		/* 8 */

+/* 2224 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2184 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2186 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2188 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2226 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2228 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2230 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter selectionIndex */

 

-/* 2190 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2192 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2194 */	0x8,		/* FC_LONG */

+/* 2232 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2234 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2236 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2196 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2198 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2200 */	0x8,		/* FC_LONG */

+/* 2238 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2240 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2242 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2202 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2204 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2206 */	0x8,		/* FC_LONG */

+/* 2244 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2246 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2248 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2208 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2210 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2212 */	0x8,		/* FC_LONG */

+/* 2250 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2252 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2254 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nCharacters */

 

-/* 2214 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2256 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2216 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2220 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 2222 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2224 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2226 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2228 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2258 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2262 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 2264 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2266 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2268 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2270 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2230 */	0x8,		/* 8 */

+/* 2272 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2232 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2234 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2236 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2274 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2276 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2278 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter nCharacters */

 

-/* 2238 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2240 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2242 */	0x8,		/* FC_LONG */

+/* 2280 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2282 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2284 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2244 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2246 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2248 */	0x8,		/* FC_LONG */

+/* 2286 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2288 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2290 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure scrollSubstringTo */

 

-/* 2250 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2292 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2252 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2256 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 2258 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2260 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 2262 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2264 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2294 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2298 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 2300 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2302 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2304 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2306 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 2266 */	0x8,		/* 8 */

+/* 2308 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2268 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2270 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2272 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2312 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2314 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startIndex */

 

-/* 2274 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2276 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2278 */	0x8,		/* FC_LONG */

+/* 2316 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2318 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2320 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endIndex */

 

-/* 2280 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2282 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2284 */	0x8,		/* FC_LONG */

+/* 2322 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2324 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2326 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter scrollType */

 

-/* 2286 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2288 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2290 */	0xd,		/* FC_ENUM16 */

+/* 2328 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2330 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2332 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2292 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2294 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2296 */	0x8,		/* FC_LONG */

+/* 2334 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2336 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2338 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure scrollSubstringToPoint */

 

-/* 2298 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2340 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2300 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2304 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 2306 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 2308 */	NdrFcShort( 0x26 ),	/* 38 */

-/* 2310 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2312 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2342 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2346 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 2348 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 2350 */	NdrFcShort( 0x26 ),	/* 38 */

+/* 2352 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2354 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x6,		/* 6 */

-/* 2314 */	0x8,		/* 8 */

+/* 2356 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2316 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2318 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2320 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2358 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2360 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2362 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startIndex */

 

-/* 2322 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2324 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2326 */	0x8,		/* FC_LONG */

+/* 2364 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2366 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2368 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endIndex */

 

-/* 2328 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2330 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2332 */	0x8,		/* FC_LONG */

+/* 2370 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2372 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2374 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter coordinateType */

 

-/* 2334 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2336 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2338 */	0xd,		/* FC_ENUM16 */

+/* 2376 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2378 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2380 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 2340 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2342 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2344 */	0x8,		/* FC_LONG */

+/* 2382 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2384 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2386 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 2346 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2348 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2350 */	0x8,		/* FC_LONG */

+/* 2388 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2390 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2392 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2352 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2354 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 2356 */	0x8,		/* FC_LONG */

+/* 2394 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2396 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 2398 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_newText */

 

-/* 2358 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2400 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2360 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2364 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 2366 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2368 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2370 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2372 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2402 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2406 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 2408 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2410 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2412 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2414 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2374 */	0x8,		/* 8 */

+/* 2416 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2376 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2378 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2380 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2418 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2420 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2422 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter newText */

 

-/* 2382 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 2384 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2386 */	NdrFcShort( 0x55a ),	/* Type Offset=1370 */

+/* 2424 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 2426 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2428 */	NdrFcShort( 0x574 ),	/* Type Offset=1396 */

 

 	/* Return value */

 

-/* 2388 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2390 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2392 */	0x8,		/* FC_LONG */

+/* 2430 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2432 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2434 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_oldText */

 

-/* 2394 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2436 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2396 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2400 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 2402 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2404 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2406 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2408 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 2438 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2442 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 2444 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2446 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2448 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2450 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 2410 */	0x8,		/* 8 */

+/* 2452 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2412 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2414 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2416 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2454 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2456 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2458 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter oldText */

 

-/* 2418 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 2420 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2422 */	NdrFcShort( 0x55a ),	/* Type Offset=1370 */

+/* 2460 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 2462 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2464 */	NdrFcShort( 0x574 ),	/* Type Offset=1396 */

 

 	/* Return value */

 

-/* 2424 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2426 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2428 */	0x8,		/* FC_LONG */

+/* 2466 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2468 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2470 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_attributeRange */

 

-/* 2430 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2472 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2432 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2436 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 2438 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 2440 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2442 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 2444 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

+/* 2474 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2478 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2480 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 2482 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2484 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 2486 */	0x47,		/* Oi2 Flags:  srv must size, clt must size, has return, has ext, */

 			0x6,		/* 6 */

-/* 2446 */	0x8,		/* 8 */

+/* 2488 */	0x8,		/* 8 */

 			0x7,		/* Ext Flags:  new corr desc, clt corr check, srv corr check, */

-/* 2448 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2450 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2452 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2490 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2492 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2494 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter offset */

 

-/* 2454 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2456 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2458 */	0x8,		/* FC_LONG */

+/* 2496 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2498 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2500 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter filter */

 

-/* 2460 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

-/* 2462 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2464 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2502 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */

+/* 2504 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2506 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Parameter startOffset */

 

-/* 2466 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2468 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2470 */	0x8,		/* FC_LONG */

+/* 2508 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2510 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2512 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2472 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2474 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2476 */	0x8,		/* FC_LONG */

+/* 2514 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2516 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2518 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter attributeValues */

 

-/* 2478 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 2480 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2482 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

-/* 2484 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2486 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 2488 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure deleteText */

-

-/* 2490 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2492 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2496 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 2498 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2500 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2502 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2504 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 2506 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2508 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2510 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2512 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter startOffset */

-

-/* 2514 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2516 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2518 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter endOffset */

-

-/* 2520 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2522 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2524 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 2520 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 2522 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2524 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

 /* 2526 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2528 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2528 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

 /* 2530 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure insertText */

+	/* Procedure deleteText */

 

 /* 2532 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2534 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2538 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 2538 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 2540 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2542 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2542 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 2544 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2546 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2546 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x3,		/* 3 */

 /* 2548 */	0x8,		/* 8 */

-			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

+			0x1,		/* Ext Flags:  new corr desc, */

 /* 2550 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2552 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2552 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2554 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

 

 /* 2556 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2558 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 2560 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter text */

+	/* Parameter endOffset */

 

-/* 2562 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2562 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2564 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2566 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2566 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

@@ -2637,36 +2644,35 @@
 /* 2572 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure cutText */

+	/* Procedure insertText */

 

 /* 2574 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2576 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2580 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2580 */	NdrFcShort( 0x5 ),	/* 5 */

 /* 2582 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2584 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2584 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2586 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2588 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2588 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 2590 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

 /* 2592 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2594 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2594 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 2596 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter startOffset */

+	/* Parameter offset */

 

 /* 2598 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2600 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 2602 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter endOffset */

+	/* Parameter text */

 

-/* 2604 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2604 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

 /* 2606 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2608 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 2608 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

@@ -2675,168 +2681,169 @@
 /* 2614 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure pasteText */

+	/* Procedure cutText */

 

 /* 2616 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2618 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2622 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 2624 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2626 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2622 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 2624 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2626 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 2628 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2630 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 2632 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 2634 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2636 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 2638 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter offset */

+	/* Parameter startOffset */

 

 /* 2640 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2642 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 2644 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter endOffset */

 

-/* 2646 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2646 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 2648 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 2650 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 2652 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2654 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2656 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure pasteText */

+

+/* 2658 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2660 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2664 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 2666 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2668 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2670 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2672 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 2674 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 2676 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2678 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2680 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter offset */

+

+/* 2682 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2684 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2686 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 2688 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2690 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2692 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure replaceText */

 

-/* 2652 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2694 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2654 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2658 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2660 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2662 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2664 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2666 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2696 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2700 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2702 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2704 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2706 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2708 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 2668 */	0x8,		/* 8 */

+/* 2710 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2670 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2672 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2674 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2712 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2714 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2716 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2676 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2678 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2680 */	0x8,		/* FC_LONG */

+/* 2718 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2720 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2722 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2682 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2684 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2686 */	0x8,		/* FC_LONG */

+/* 2724 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2726 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2728 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter text */

 

-/* 2688 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2690 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2692 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

+/* 2730 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2732 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2734 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

-/* 2694 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2696 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2698 */	0x8,		/* FC_LONG */

+/* 2736 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2738 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2740 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure setAttributes */

 

-/* 2700 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2742 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2702 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2706 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2708 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 2710 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 2712 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2714 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

+/* 2744 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2748 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 2750 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 2752 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 2754 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2756 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 2716 */	0x8,		/* 8 */

+/* 2758 */	0x8,		/* 8 */

 			0x5,		/* Ext Flags:  new corr desc, srv corr check, */

-/* 2718 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2720 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2722 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2760 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2762 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2764 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter startOffset */

 

-/* 2724 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2726 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2728 */	0x8,		/* FC_LONG */

+/* 2766 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2768 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2770 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter endOffset */

 

-/* 2730 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2732 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2734 */	0x8,		/* FC_LONG */

+/* 2772 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2774 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2776 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter attributes */

 

-/* 2736 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

-/* 2738 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2740 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

-

-	/* Return value */

-

-/* 2742 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2744 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2746 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_anchor */

-

-/* 2748 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2750 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2754 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 2756 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2758 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2760 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2762 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2764 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 2766 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 2768 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2770 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter index */

-

-/* 2772 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 2774 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2776 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter anchor */

-

-/* 2778 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

-/* 2780 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2782 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

+/* 2778 */	NdrFcShort( 0x10b ),	/* Flags:  must size, must free, in, simple ref, */

+/* 2780 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2782 */	NdrFcShort( 0x10e ),	/* Type Offset=270 */

 

 	/* Return value */

 

 /* 2784 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2786 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2786 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2788 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_anchorTarget */

+	/* Procedure get_anchor */

 

 /* 2790 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 2792 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2796 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2796 */	NdrFcShort( 0x9 ),	/* 9 */

 /* 2798 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 2800 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 2802 */	NdrFcShort( 0x8 ),	/* 8 */

@@ -2855,7 +2862,7 @@
 /* 2818 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter anchorTarget */

+	/* Parameter anchor */

 

 /* 2820 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

 /* 2822 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -2868,34 +2875,71 @@
 /* 2830 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_anchorTarget */

+

+/* 2832 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 2834 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2838 */	NdrFcShort( 0xa ),	/* 10 */

+/* 2840 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 2842 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2844 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 2846 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 2848 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 2850 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 2852 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2854 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter index */

+

+/* 2856 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 2858 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2860 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter anchorTarget */

+

+/* 2862 */	NdrFcShort( 0x4113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=16 */

+/* 2864 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2866 */	NdrFcShort( 0x4ee ),	/* Type Offset=1262 */

+

+	/* Return value */

+

+/* 2868 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2870 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2872 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_nRows */

 

 

 	/* Procedure get_startIndex */

 

-/* 2832 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2874 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2834 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2838 */	NdrFcShort( 0xb ),	/* 11 */

-/* 2840 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2842 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2844 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2846 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2876 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2880 */	NdrFcShort( 0xb ),	/* 11 */

+/* 2882 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2884 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2886 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2888 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2848 */	0x8,		/* 8 */

+/* 2890 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2850 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2852 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2854 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2892 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2894 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2896 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowCount */

 

 

 	/* Parameter index */

 

-/* 2856 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2858 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2860 */	0x8,		/* FC_LONG */

+/* 2898 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2900 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2902 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -2903,9 +2947,9 @@
 

 	/* Return value */

 

-/* 2862 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2864 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2866 */	0x8,		/* FC_LONG */

+/* 2904 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2906 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2908 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedChildren */

@@ -2913,29 +2957,29 @@
 

 	/* Procedure get_endIndex */

 

-/* 2868 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2910 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2870 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2874 */	NdrFcShort( 0xc ),	/* 12 */

-/* 2876 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2878 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2880 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2882 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2912 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2916 */	NdrFcShort( 0xc ),	/* 12 */

+/* 2918 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2920 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2922 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2924 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2884 */	0x8,		/* 8 */

+/* 2926 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2886 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2888 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2890 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2928 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2930 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2932 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter cellCount */

 

 

 	/* Parameter index */

 

-/* 2892 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2894 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2896 */	0x8,		/* FC_LONG */

+/* 2934 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2936 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2938 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -2943,120 +2987,83 @@
 

 	/* Return value */

 

-/* 2898 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2900 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2902 */	0x8,		/* FC_LONG */

+/* 2940 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2942 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2944 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_valid */

 

-/* 2904 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2946 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2906 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2910 */	NdrFcShort( 0xd ),	/* 13 */

-/* 2912 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2914 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2916 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 2918 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2948 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2952 */	NdrFcShort( 0xd ),	/* 13 */

+/* 2954 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2956 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2958 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 2960 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2920 */	0x8,		/* 8 */

+/* 2962 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2922 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2924 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2926 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2964 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2966 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2968 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter valid */

 

-/* 2928 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2930 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2932 */	0x3,		/* FC_SMALL */

+/* 2970 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 2972 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 2974 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2934 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2936 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2938 */	0x8,		/* FC_LONG */

+/* 2976 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 2978 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 2980 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nHyperlinks */

 

-/* 2940 */	0x33,		/* FC_AUTO_HANDLE */

+/* 2982 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2942 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2946 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 2948 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 2950 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2952 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 2954 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 2984 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 2988 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 2990 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 2992 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 2994 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 2996 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 2956 */	0x8,		/* 8 */

+/* 2998 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 2958 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2960 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2962 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3000 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3002 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3004 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter hyperlinkCount */

 

-/* 2964 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 2966 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 2968 */	0x8,		/* FC_LONG */

+/* 3006 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3008 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3010 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 2970 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 2972 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 2974 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_hyperlink */

-

-/* 2976 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 2978 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 2982 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 2984 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 2986 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2988 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 2990 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 2992 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 2994 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2996 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 2998 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter index */

-

-/* 3000 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3002 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3004 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter hyperlink */

-

-/* 3006 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3008 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3010 */	NdrFcShort( 0x572 ),	/* Type Offset=1394 */

-

-	/* Return value */

-

 /* 3012 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3014 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3014 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 3016 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hyperlinkIndex */

+	/* Procedure get_hyperlink */

 

 /* 3018 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3020 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3024 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 3024 */	NdrFcShort( 0x17 ),	/* 23 */

 /* 3026 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 3028 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3030 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3032 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3030 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3032 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3034 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3064,19 +3071,18 @@
 /* 3038 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3040 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter charIndex */

+	/* Parameter index */

 

 /* 3042 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3044 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 3046 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter hyperlinkIndex */

+	/* Parameter hyperlink */

 

-/* 3048 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3048 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3050 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3052 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3052 */	NdrFcShort( 0x58c ),	/* Type Offset=1420 */

 

 	/* Return value */

 

@@ -3085,30 +3091,31 @@
 /* 3058 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_hyperlinks */

+	/* Procedure get_hyperlinkIndex */

 

 /* 3060 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3062 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3066 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 3066 */	NdrFcShort( 0x18 ),	/* 24 */

 /* 3068 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3070 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3070 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3072 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3074 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3074 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x3,		/* 3 */

 /* 3076 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3078 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3078 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3080 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3082 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter hyperlinks */

+	/* Parameter charIndex */

 

-/* 3084 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3084 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3086 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3088 */	NdrFcShort( 0x588 ),	/* Type Offset=1416 */

+/* 3088 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter nHyperlinks */

+	/* Parameter hyperlinkIndex */

 

 /* 3090 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3092 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -3122,34 +3129,71 @@
 /* 3100 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_hyperlinks */

+

+/* 3102 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3104 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3108 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 3110 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3112 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3114 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3116 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

+/* 3118 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3120 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3122 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3124 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter hyperlinks */

+

+/* 3126 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3128 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3130 */	NdrFcShort( 0x5a2 ),	/* Type Offset=1442 */

+

+	/* Parameter nHyperlinks */

+

+/* 3132 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3134 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3136 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 3138 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3140 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3142 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_cellAt */

 

 

 	/* Procedure get_accessibleAt */

 

-/* 3102 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3144 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3104 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3108 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 3110 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3112 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3114 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3116 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3146 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3150 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 3152 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3154 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3156 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3158 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3118 */	0x8,		/* 8 */

+/* 3160 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3120 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3122 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3124 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3162 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3164 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3166 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

 

 	/* Parameter row */

 

-/* 3126 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3128 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3130 */	0x8,		/* FC_LONG */

+/* 3168 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3170 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3172 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

@@ -3157,9 +3201,9 @@
 

 	/* Parameter column */

 

-/* 3132 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3134 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3136 */	0x8,		/* FC_LONG */

+/* 3174 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3176 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3178 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter cell */

@@ -3167,18 +3211,18 @@
 

 	/* Parameter accessible */

 

-/* 3138 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3140 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3142 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 3180 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3182 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3184 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 3144 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3146 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3148 */	0x8,		/* FC_LONG */

+/* 3186 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3188 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3190 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_caption */

@@ -3186,214 +3230,177 @@
 

 	/* Procedure get_caption */

 

-/* 3150 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3192 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3152 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3156 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 3158 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3160 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3162 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3164 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3194 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3198 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 3200 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3202 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3204 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3206 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 3166 */	0x8,		/* 8 */

+/* 3208 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3168 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3170 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3172 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3210 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3212 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3214 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter accessible */

 

 

 	/* Parameter accessible */

 

-/* 3174 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3176 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3178 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 3216 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3218 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3220 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 

 	/* Return value */

 

-/* 3180 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3182 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3184 */	0x8,		/* FC_LONG */

+/* 3222 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3224 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3226 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_childIndex */

 

-/* 3186 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3228 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3188 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3192 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 3194 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3196 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3198 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3200 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3230 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3234 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 3236 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3238 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3240 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3242 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 3202 */	0x8,		/* 8 */

+/* 3244 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3204 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3206 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3208 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3246 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3248 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3250 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowIndex */

 

-/* 3210 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3212 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3214 */	0x8,		/* FC_LONG */

+/* 3252 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3254 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3256 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnIndex */

 

-/* 3216 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3218 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3220 */	0x8,		/* FC_LONG */

+/* 3258 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3260 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3262 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter cellIndex */

 

-/* 3222 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3224 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3226 */	0x8,		/* FC_LONG */

+/* 3264 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3266 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3268 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3228 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3230 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3232 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnDescription */

-

-/* 3234 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3236 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3240 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 3242 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3244 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3246 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3248 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3250 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3252 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3254 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3256 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter column */

-

-/* 3258 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3260 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3262 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter description */

-

-/* 3264 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 3266 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3268 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

 /* 3270 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3272 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3272 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 3274 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnExtentAt */

+	/* Procedure get_columnDescription */

 

 /* 3276 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3278 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3282 */	NdrFcShort( 0x7 ),	/* 7 */

-/* 3284 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3286 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3288 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3290 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

+/* 3282 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 3284 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3286 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3288 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3290 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 3292 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3294 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3294 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 3296 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3298 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 3300 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3302 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 3304 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter column */

+	/* Parameter description */

 

-/* 3306 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3306 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 3308 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3310 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3310 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

-	/* Parameter nColumnsSpanned */

+	/* Return value */

 

-/* 3312 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3312 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 3314 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 3316 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Procedure get_columnExtentAt */

 

-/* 3318 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3320 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3322 */	0x8,		/* FC_LONG */

+/* 3318 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3320 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3324 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 3326 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3328 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3330 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3332 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 3334 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3336 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3338 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3340 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 3342 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3344 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3346 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnHeader */

+	/* Parameter column */

 

-/* 3324 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3326 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3330 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3332 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3334 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3336 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3338 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3340 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3342 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3344 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3348 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3350 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3352 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter accessibleTable */

-

-/* 3348 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3350 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3352 */	NdrFcShort( 0x5a6 ),	/* Type Offset=1446 */

-

-	/* Parameter startingRowIndex */

+	/* Parameter nColumnsSpanned */

 

 /* 3354 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3356 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3356 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 3358 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3360 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3362 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3362 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 3364 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_columnIndex */

+	/* Procedure get_columnHeader */

 

 /* 3366 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3368 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3372 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3372 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3374 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3376 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3376 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3378 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3380 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3380 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3382 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3401,14 +3408,13 @@
 /* 3386 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3388 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cellIndex */

+	/* Parameter accessibleTable */

 

-/* 3390 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3390 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3392 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3394 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3394 */	NdrFcShort( 0x5c0 ),	/* Type Offset=1472 */

 

-	/* Parameter columnIndex */

+	/* Parameter startingRowIndex */

 

 /* 3396 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3398 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -3422,159 +3428,160 @@
 /* 3406 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_nSelectedRows */

-

-

-	/* Procedure get_nColumns */

+	/* Procedure get_columnIndex */

 

 /* 3408 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3410 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3414 */	NdrFcShort( 0xa ),	/* 10 */

-/* 3416 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3418 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3414 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 3416 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3418 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3420 */	NdrFcShort( 0x24 ),	/* 36 */

 /* 3422 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 3424 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3426 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3428 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3430 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter rowCount */

+	/* Parameter cellIndex */

 

-

-	/* Parameter columnCount */

-

-/* 3432 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3432 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3434 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 3436 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter columnIndex */

 

-

-	/* Return value */

-

-/* 3438 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3438 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3440 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 3442 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_nSelectedColumns */

-

-/* 3444 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3446 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3450 */	NdrFcShort( 0xd ),	/* 13 */

-/* 3452 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3454 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3456 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3458 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

-/* 3460 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3462 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3464 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3466 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter columnCount */

-

-/* 3468 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3470 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3472 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

 	/* Return value */

 

-/* 3474 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3476 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3478 */	0x8,		/* FC_LONG */

+/* 3444 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3446 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3448 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedRows */

 

-/* 3480 */	0x33,		/* FC_AUTO_HANDLE */

+

+	/* Procedure get_nColumns */

+

+/* 3450 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3482 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3486 */	NdrFcShort( 0xe ),	/* 14 */

-/* 3488 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3490 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3492 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3494 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3452 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3456 */	NdrFcShort( 0xa ),	/* 10 */

+/* 3458 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3460 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3462 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3464 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 3496 */	0x8,		/* 8 */

+/* 3466 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3498 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3500 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3502 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3468 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3470 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3472 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowCount */

 

-/* 3504 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3506 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3508 */	0x8,		/* FC_LONG */

+

+	/* Parameter columnCount */

+

+/* 3474 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3476 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3478 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3510 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3512 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+

+	/* Return value */

+

+/* 3480 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3482 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3484 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_nSelectedColumns */

+

+/* 3486 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3488 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3492 */	NdrFcShort( 0xd ),	/* 13 */

+/* 3494 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3496 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3498 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3500 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 3502 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3504 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3506 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3508 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter columnCount */

+

+/* 3510 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3512 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 3514 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowDescription */

+	/* Return value */

 

-/* 3516 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3518 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3522 */	NdrFcShort( 0xf ),	/* 15 */

-/* 3524 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3526 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3528 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3530 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3532 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3534 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3536 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3538 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter row */

-

-/* 3540 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3542 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3544 */	0x8,		/* FC_LONG */

+/* 3516 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3518 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3520 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter description */

+	/* Procedure get_nSelectedRows */

 

-/* 3546 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 3548 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3550 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 3522 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3524 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3528 */	NdrFcShort( 0xe ),	/* 14 */

+/* 3530 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3532 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3534 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3536 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 3538 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3540 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3542 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3544 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter rowCount */

+

+/* 3546 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3548 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3550 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3552 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3554 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3554 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 3556 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowExtentAt */

+	/* Procedure get_rowDescription */

 

 /* 3558 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3560 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3564 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3566 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3568 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 3570 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3572 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

+/* 3564 */	NdrFcShort( 0xf ),	/* 15 */

+/* 3566 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3568 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3570 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3572 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 3574 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3576 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3576 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 3578 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3580 */	NdrFcShort( 0x0 ),	/* 0 */

 

@@ -3585,74 +3592,74 @@
 /* 3586 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter column */

+	/* Parameter description */

 

-/* 3588 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3588 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

 /* 3590 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3592 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3592 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

-	/* Parameter nRowsSpanned */

+	/* Return value */

 

-/* 3594 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3594 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 3596 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 3598 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Return value */

+	/* Procedure get_rowExtentAt */

 

-/* 3600 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3602 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3604 */	0x8,		/* FC_LONG */

+/* 3600 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3602 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3606 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3608 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3610 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3612 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3614 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 3616 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3618 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3620 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3622 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 3624 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3626 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3628 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowHeader */

+	/* Parameter column */

 

-/* 3606 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3608 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3612 */	NdrFcShort( 0x11 ),	/* 17 */

-/* 3614 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3616 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3618 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3620 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 3622 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3624 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3626 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3628 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3630 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3632 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3634 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter accessibleTable */

-

-/* 3630 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3632 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3634 */	NdrFcShort( 0x5a6 ),	/* Type Offset=1446 */

-

-	/* Parameter startingColumnIndex */

+	/* Parameter nRowsSpanned */

 

 /* 3636 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3638 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3638 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 3640 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 3642 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3644 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3644 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 3646 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowIndex */

+	/* Procedure get_rowHeader */

 

 /* 3648 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3650 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3654 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 3654 */	NdrFcShort( 0x11 ),	/* 17 */

 /* 3656 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3658 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3658 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3660 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3662 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 3662 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 3664 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

@@ -3660,14 +3667,13 @@
 /* 3668 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3670 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cellIndex */

+	/* Parameter accessibleTable */

 

-/* 3672 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3672 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

 /* 3674 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3676 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 3676 */	NdrFcShort( 0x5c0 ),	/* Type Offset=1472 */

 

-	/* Parameter rowIndex */

+	/* Parameter startingColumnIndex */

 

 /* 3678 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3680 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -3681,212 +3687,212 @@
 /* 3688 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedChildren */

+	/* Procedure get_rowIndex */

 

 /* 3690 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3692 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3696 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 3698 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3696 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 3698 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 3700 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3702 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3704 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x4,		/* 4 */

+/* 3704 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 3706 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3708 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 3708 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3710 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3712 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter maxChildren */

+	/* Parameter cellIndex */

 

 /* 3714 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3716 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

 /* 3718 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter children */

+	/* Parameter rowIndex */

 

-/* 3720 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3720 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 3722 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3724 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

+/* 3724 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Parameter nChildren */

+	/* Return value */

 

-/* 3726 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3726 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

 /* 3728 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 3730 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Procedure get_selectedChildren */

+

+/* 3732 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3734 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3738 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 3740 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3742 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3744 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3746 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x4,		/* 4 */

+/* 3748 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 3750 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3752 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3754 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter maxChildren */

+

+/* 3756 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3758 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3760 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter children */

+

+/* 3762 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3764 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3766 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

+

+	/* Parameter nChildren */

+

+/* 3768 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3770 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3772 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 3732 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3734 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3736 */	0x8,		/* FC_LONG */

+/* 3774 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3776 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3778 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selectedColumns */

 

-/* 3738 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3780 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3740 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3744 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 3746 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3748 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3750 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3752 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3782 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3786 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 3788 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3790 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3792 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3794 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3754 */	0x8,		/* 8 */

+/* 3796 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3756 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3758 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3760 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3798 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3800 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3802 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter maxColumns */

 

-/* 3762 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3764 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3766 */	0x8,		/* FC_LONG */

+/* 3804 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3806 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3808 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columns */

 

-/* 3768 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 3770 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3772 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

+/* 3810 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3812 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3814 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

 	/* Parameter nColumns */

 

-/* 3774 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3776 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3778 */	0x8,		/* FC_LONG */

+/* 3816 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3818 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3820 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3780 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3782 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3784 */	0x8,		/* FC_LONG */

+/* 3822 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3824 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3826 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_selectedRows */

 

-/* 3786 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3828 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3788 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3792 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 3794 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3796 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3798 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 3800 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3830 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3834 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 3836 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 3838 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3840 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 3842 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x4,		/* 4 */

-/* 3802 */	0x8,		/* 8 */

+/* 3844 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 3804 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 3806 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3808 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3846 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 3848 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3850 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter maxRows */

 

-/* 3810 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3812 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3814 */	0x8,		/* FC_LONG */

+/* 3852 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 3854 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3856 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rows */

 

-/* 3816 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 3818 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3820 */	NdrFcShort( 0x5bc ),	/* Type Offset=1468 */

+/* 3858 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 3860 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3862 */	NdrFcShort( 0x5d6 ),	/* Type Offset=1494 */

 

 	/* Parameter nRows */

 

-/* 3822 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3824 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3826 */	0x8,		/* FC_LONG */

+/* 3864 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3866 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3868 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3828 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3830 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3832 */	0x8,		/* FC_LONG */

+/* 3870 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3872 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3874 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_summary */

 

-/* 3834 */	0x33,		/* FC_AUTO_HANDLE */

+/* 3876 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3836 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3840 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 3842 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3844 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3846 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3848 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 3878 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 3882 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 3884 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3886 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3888 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 3890 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 3850 */	0x8,		/* 8 */

+/* 3892 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 3852 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3854 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3856 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3894 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3896 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 3898 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter accessible */

 

-/* 3858 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 3860 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3862 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

-

-	/* Return value */

-

-/* 3864 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3866 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3868 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_isColumnSelected */

-

-/* 3870 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 3872 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3876 */	NdrFcShort( 0x17 ),	/* 23 */

-/* 3878 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 3880 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 3882 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 3884 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 3886 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 3888 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3890 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 3892 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter column */

-

-/* 3894 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3896 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 3898 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter isSelected */

-

-/* 3900 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3902 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3904 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 3900 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 3902 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 3904 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 3906 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3908 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3908 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 3910 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRowSelected */

+	/* Procedure get_isColumnSelected */

 

 /* 3912 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3914 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3918 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 3918 */	NdrFcShort( 0x17 ),	/* 23 */

 /* 3920 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 3922 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3924 */	NdrFcShort( 0x21 ),	/* 33 */

@@ -3898,7 +3904,7 @@
 /* 3932 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 3934 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 3936 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 3938 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

@@ -3919,17 +3925,17 @@
 /* 3952 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isSelected */

+	/* Procedure get_isRowSelected */

 

 /* 3954 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 3956 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 3960 */	NdrFcShort( 0x19 ),	/* 25 */

-/* 3962 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 3964 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 3960 */	NdrFcShort( 0x18 ),	/* 24 */

+/* 3962 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 3964 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 3966 */	NdrFcShort( 0x21 ),	/* 33 */

 /* 3968 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x4,		/* 4 */

+			0x3,		/* 3 */

 /* 3970 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 3972 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -3943,245 +3949,283 @@
 /* 3982 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Parameter column */

-

-/* 3984 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 3986 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 3988 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

 	/* Parameter isSelected */

 

-/* 3990 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 3992 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 3994 */	0x3,		/* FC_SMALL */

+/* 3984 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 3986 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 3988 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 3996 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 3998 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4000 */	0x8,		/* FC_LONG */

+/* 3990 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 3992 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 3994 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_isSelected */

+

+/* 3996 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 3998 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4002 */	NdrFcShort( 0x19 ),	/* 25 */

+/* 4004 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 4006 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 4008 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 4010 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x4,		/* 4 */

+/* 4012 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4014 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4016 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4018 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 4020 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4022 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4024 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter column */

+

+/* 4026 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4028 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4030 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Parameter isSelected */

+

+/* 4032 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4034 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4036 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4038 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4040 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 4042 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectRow */

 

-/* 4002 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4044 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4004 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4008 */	NdrFcShort( 0x1a ),	/* 26 */

-/* 4010 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4012 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4014 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4016 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4046 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4050 */	NdrFcShort( 0x1a ),	/* 26 */

+/* 4052 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4054 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4056 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4058 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4018 */	0x8,		/* 8 */

+/* 4060 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4020 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4022 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4024 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4062 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4064 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4066 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4026 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4028 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4030 */	0x8,		/* FC_LONG */

+/* 4068 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4070 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4072 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4032 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4034 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4036 */	0x8,		/* FC_LONG */

+/* 4074 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4076 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4078 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectColumn */

 

-/* 4038 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4080 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4040 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4044 */	NdrFcShort( 0x1b ),	/* 27 */

-/* 4046 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4048 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4050 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4052 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4082 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4086 */	NdrFcShort( 0x1b ),	/* 27 */

+/* 4088 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4090 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4092 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4094 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4054 */	0x8,		/* 8 */

+/* 4096 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4056 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4058 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4060 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4098 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4100 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4102 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4062 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4064 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4066 */	0x8,		/* FC_LONG */

+/* 4104 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4106 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4108 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4068 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4070 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4072 */	0x8,		/* FC_LONG */

+/* 4110 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4112 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4114 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectRow */

 

-/* 4074 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4116 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4076 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4080 */	NdrFcShort( 0x1c ),	/* 28 */

-/* 4082 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4084 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4086 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4088 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4118 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4122 */	NdrFcShort( 0x1c ),	/* 28 */

+/* 4124 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4126 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4128 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4130 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4090 */	0x8,		/* 8 */

+/* 4132 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4092 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4094 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4096 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4134 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4136 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4138 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4098 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4100 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4102 */	0x8,		/* FC_LONG */

+/* 4140 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4142 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4144 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4104 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4106 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4108 */	0x8,		/* FC_LONG */

+/* 4146 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4148 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4150 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectColumn */

 

-/* 4110 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4152 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4112 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4116 */	NdrFcShort( 0x1d ),	/* 29 */

-/* 4118 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4120 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4122 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4124 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4154 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4158 */	NdrFcShort( 0x1d ),	/* 29 */

+/* 4160 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4162 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4164 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4166 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4126 */	0x8,		/* 8 */

+/* 4168 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4128 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4130 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4132 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4170 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4172 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4174 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4134 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4136 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4138 */	0x8,		/* FC_LONG */

+/* 4176 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4178 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4180 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4140 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4142 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4144 */	0x8,		/* FC_LONG */

+/* 4182 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4184 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4186 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowColumnExtentsAtIndex */

 

-/* 4146 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4188 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4148 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4152 */	NdrFcShort( 0x1e ),	/* 30 */

-/* 4154 */	NdrFcShort( 0x20 ),	/* x86 Stack size/offset = 32 */

-/* 4156 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4158 */	NdrFcShort( 0x91 ),	/* 145 */

-/* 4160 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4190 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4194 */	NdrFcShort( 0x1e ),	/* 30 */

+/* 4196 */	NdrFcShort( 0x20 ),	/* x86 Stack size/offset = 32 */

+/* 4198 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4200 */	NdrFcShort( 0x91 ),	/* 145 */

+/* 4202 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x7,		/* 7 */

-/* 4162 */	0x8,		/* 8 */

+/* 4204 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4164 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4166 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4168 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4206 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4208 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4210 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter index */

 

-/* 4170 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4172 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4174 */	0x8,		/* FC_LONG */

+/* 4212 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4214 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4216 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter row */

 

-/* 4176 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4178 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4180 */	0x8,		/* FC_LONG */

+/* 4218 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4220 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4222 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4182 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4184 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4186 */	0x8,		/* FC_LONG */

+/* 4224 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4226 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4228 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rowExtents */

 

-/* 4188 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4190 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4192 */	0x8,		/* FC_LONG */

+/* 4230 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4232 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 4234 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnExtents */

 

-/* 4194 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4196 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 4198 */	0x8,		/* FC_LONG */

+/* 4236 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4238 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 4240 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 4200 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4202 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 4204 */	0x3,		/* FC_SMALL */

+/* 4242 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4244 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 4246 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4206 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4208 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 4210 */	0x8,		/* FC_LONG */

+/* 4248 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4250 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 4252 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_modelChange */

 

-/* 4212 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4254 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4214 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4218 */	NdrFcShort( 0x1f ),	/* 31 */

-/* 4220 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4222 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4224 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4226 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4256 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4260 */	NdrFcShort( 0x1f ),	/* 31 */

+/* 4262 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4264 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4266 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4268 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 4228 */	0x8,		/* 8 */

+/* 4270 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4230 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4232 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4234 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4272 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4274 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4276 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter modelChange */

 

-/* 4236 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 4238 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4240 */	NdrFcShort( 0x5da ),	/* Type Offset=1498 */

+/* 4278 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 4280 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4282 */	NdrFcShort( 0x5f4 ),	/* Type Offset=1524 */

 

 	/* Return value */

 

-/* 4242 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4244 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4246 */	0x8,		/* FC_LONG */

+/* 4284 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4286 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4288 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowExtent */

@@ -4189,29 +4233,29 @@
 

 	/* Procedure get_nColumns */

 

-/* 4248 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4290 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4250 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4254 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 4256 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4258 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4260 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4262 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4292 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4296 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 4298 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4300 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4302 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4304 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4264 */	0x8,		/* 8 */

+/* 4306 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4266 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4268 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4270 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4308 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4310 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4312 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter nRowsSpanned */

 

 

 	/* Parameter columnCount */

 

-/* 4272 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4274 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4276 */	0x8,		/* FC_LONG */

+/* 4314 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4316 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4318 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -4219,9 +4263,9 @@
 

 	/* Return value */

 

-/* 4278 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4280 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4282 */	0x8,		/* FC_LONG */

+/* 4320 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4322 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4324 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_rowIndex */

@@ -4229,29 +4273,29 @@
 

 	/* Procedure get_nSelectedCells */

 

-/* 4284 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4326 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4286 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4290 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4292 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4294 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4296 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4298 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4328 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4332 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4334 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4336 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4338 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4340 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4300 */	0x8,		/* 8 */

+/* 4342 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4302 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4304 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4306 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4344 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4346 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4348 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter rowIndex */

 

 

 	/* Parameter cellCount */

 

-/* 4308 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4310 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4312 */	0x8,		/* FC_LONG */

+/* 4350 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4352 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4354 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

@@ -4259,88 +4303,51 @@
 

 	/* Return value */

 

-/* 4314 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4316 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4318 */	0x8,		/* FC_LONG */

+/* 4356 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4358 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4360 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_nSelectedColumns */

 

-/* 4320 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4362 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4322 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4326 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 4328 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4330 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4332 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4334 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4364 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4368 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 4370 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4372 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4374 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4376 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4336 */	0x8,		/* 8 */

+/* 4378 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4338 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4340 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4342 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4380 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4382 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4384 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter columnCount */

 

-/* 4344 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4346 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4348 */	0x8,		/* FC_LONG */

+/* 4386 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4388 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4390 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4350 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4352 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4354 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_rowDescription */

-

-/* 4356 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4358 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4362 */	NdrFcShort( 0xb ),	/* 11 */

-/* 4364 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4366 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4368 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4370 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 4372 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4374 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 4376 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4378 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter row */

-

-/* 4380 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4382 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4384 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter description */

-

-/* 4386 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 4388 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4390 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

-

-	/* Return value */

-

 /* 4392 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4394 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4394 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 4396 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedCells */

+	/* Procedure get_rowDescription */

 

 /* 4398 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4400 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4404 */	NdrFcShort( 0xc ),	/* 12 */

+/* 4404 */	NdrFcShort( 0xb ),	/* 11 */

 /* 4406 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4408 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4410 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4408 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4410 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4412 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x3,		/* 3 */

 /* 4414 */	0x8,		/* 8 */

@@ -4349,19 +4356,19 @@
 /* 4418 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4420 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter cells */

+	/* Parameter row */

 

-/* 4422 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

+/* 4422 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 4424 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4426 */	NdrFcShort( 0x5e8 ),	/* Type Offset=1512 */

-

-	/* Parameter nSelectedCells */

-

-/* 4428 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4430 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4432 */	0x8,		/* FC_LONG */

+/* 4426 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter description */

+

+/* 4428 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 4430 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4432 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

 	/* Return value */

 

 /* 4434 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

@@ -4369,12 +4376,12 @@
 /* 4438 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedColumns */

+	/* Procedure get_selectedCells */

 

 /* 4440 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4442 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4446 */	NdrFcShort( 0xd ),	/* 13 */

+/* 4446 */	NdrFcShort( 0xc ),	/* 12 */

 /* 4448 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4450 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4452 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4386,13 +4393,13 @@
 /* 4460 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4462 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter selectedColumns */

+	/* Parameter cells */

 

 /* 4464 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4466 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4468 */	NdrFcShort( 0x606 ),	/* Type Offset=1542 */

+/* 4468 */	NdrFcShort( 0x602 ),	/* Type Offset=1538 */

 

-	/* Parameter nColumns */

+	/* Parameter nSelectedCells */

 

 /* 4470 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4472 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -4406,12 +4413,12 @@
 /* 4480 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_selectedRows */

+	/* Procedure get_selectedColumns */

 

 /* 4482 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4484 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4488 */	NdrFcShort( 0xe ),	/* 14 */

+/* 4488 */	NdrFcShort( 0xd ),	/* 13 */

 /* 4490 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4492 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4494 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4423,13 +4430,13 @@
 /* 4502 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4504 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter selectedRows */

+	/* Parameter selectedColumns */

 

 /* 4506 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4508 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4510 */	NdrFcShort( 0x606 ),	/* Type Offset=1542 */

+/* 4510 */	NdrFcShort( 0x620 ),	/* Type Offset=1568 */

 

-	/* Parameter nRows */

+	/* Parameter nColumns */

 

 /* 4512 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4514 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -4443,80 +4450,79 @@
 /* 4522 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_summary */

+	/* Procedure get_selectedRows */

 

 /* 4524 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4526 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4530 */	NdrFcShort( 0xf ),	/* 15 */

-/* 4532 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4530 */	NdrFcShort( 0xe ),	/* 14 */

+/* 4532 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4534 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4536 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4536 */	NdrFcShort( 0x24 ),	/* 36 */

 /* 4538 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 4540 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4542 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 4542 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 4544 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4546 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter accessible */

+	/* Parameter selectedRows */

 

-/* 4548 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 4548 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4550 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4552 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 4552 */	NdrFcShort( 0x620 ),	/* Type Offset=1568 */

 

-	/* Return value */

+	/* Parameter nRows */

 

-/* 4554 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4554 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4556 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 4558 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isColumnSelected */

+	/* Return value */

 

-/* 4560 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4560 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4562 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4564 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_summary */

+

+/* 4566 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4562 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4566 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 4568 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4570 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4572 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 4574 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 4576 */	0x8,		/* 8 */

+/* 4568 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4572 */	NdrFcShort( 0xf ),	/* 15 */

+/* 4574 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4576 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4578 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4580 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 4582 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4578 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4580 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4582 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4584 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4586 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4588 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter column */

+	/* Parameter accessible */

 

-/* 4584 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4586 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4588 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter isSelected */

-

-/* 4590 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4592 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4594 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 4590 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 4592 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4594 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

 /* 4596 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4598 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4598 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 4600 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isRowSelected */

+	/* Procedure get_isColumnSelected */

 

 /* 4602 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4604 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4608 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 4608 */	NdrFcShort( 0x10 ),	/* 16 */

 /* 4610 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4612 */	NdrFcShort( 0x8 ),	/* 8 */

 /* 4614 */	NdrFcShort( 0x21 ),	/* 33 */

@@ -4528,7 +4534,7 @@
 /* 4622 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4624 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter row */

+	/* Parameter column */

 

 /* 4626 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

 /* 4628 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

@@ -4549,17 +4555,17 @@
 /* 4642 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure selectRow */

+	/* Procedure get_isRowSelected */

 

 /* 4644 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4646 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4650 */	NdrFcShort( 0x12 ),	/* 18 */

-/* 4652 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4650 */	NdrFcShort( 0x11 ),	/* 17 */

+/* 4652 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4654 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4656 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4656 */	NdrFcShort( 0x21 ),	/* 33 */

 /* 4658 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+			0x3,		/* 3 */

 /* 4660 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

 /* 4662 */	NdrFcShort( 0x0 ),	/* 0 */

@@ -4573,179 +4579,180 @@
 /* 4672 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Parameter isSelected */

+

+/* 4674 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4676 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4678 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

 	/* Return value */

 

-/* 4674 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4676 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4678 */	0x8,		/* FC_LONG */

+/* 4680 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4682 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4684 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure selectRow */

+

+/* 4686 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4688 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4692 */	NdrFcShort( 0x12 ),	/* 18 */

+/* 4694 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4696 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4698 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4700 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 4702 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4704 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4706 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4708 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter row */

+

+/* 4710 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4712 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4714 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4716 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4718 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4720 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure selectColumn */

 

-/* 4680 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4722 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4682 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4686 */	NdrFcShort( 0x13 ),	/* 19 */

-/* 4688 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4690 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4692 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4694 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4724 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4728 */	NdrFcShort( 0x13 ),	/* 19 */

+/* 4730 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4732 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4734 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4736 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4696 */	0x8,		/* 8 */

+/* 4738 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4698 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4700 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4702 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4740 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4742 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4744 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4704 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4706 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4708 */	0x8,		/* FC_LONG */

+/* 4746 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4748 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4750 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4710 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4712 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4714 */	0x8,		/* FC_LONG */

+/* 4752 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4754 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4756 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectRow */

 

-/* 4716 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4758 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4718 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4722 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 4724 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4726 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4728 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4730 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4760 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4764 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 4766 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4768 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4770 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4772 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4732 */	0x8,		/* 8 */

+/* 4774 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4734 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4736 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4738 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4776 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4778 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4780 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4740 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4742 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4744 */	0x8,		/* FC_LONG */

+/* 4782 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4784 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4786 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4746 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4748 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4750 */	0x8,		/* FC_LONG */

+/* 4788 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4790 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4792 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure unselectColumn */

 

-/* 4752 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4794 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4754 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4758 */	NdrFcShort( 0x15 ),	/* 21 */

-/* 4760 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4762 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4764 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4766 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4796 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4800 */	NdrFcShort( 0x15 ),	/* 21 */

+/* 4802 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4804 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4806 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4808 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x2,		/* 2 */

-/* 4768 */	0x8,		/* 8 */

+/* 4810 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4770 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4772 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4774 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4812 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4814 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4816 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter column */

 

-/* 4776 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 4778 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4780 */	0x8,		/* FC_LONG */

+/* 4818 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 4820 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4822 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4782 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4784 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4786 */	0x8,		/* FC_LONG */

+/* 4824 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4826 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4828 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_modelChange */

 

-/* 4788 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4830 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4790 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4794 */	NdrFcShort( 0x16 ),	/* 22 */

-/* 4796 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4798 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4800 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 4802 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 4832 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4836 */	NdrFcShort( 0x16 ),	/* 22 */

+/* 4838 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4840 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4842 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 4844 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 4804 */	0x8,		/* 8 */

+/* 4846 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4806 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4808 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4810 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4848 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4850 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4852 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter modelChange */

 

-/* 4812 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

-/* 4814 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4816 */	NdrFcShort( 0x5da ),	/* Type Offset=1498 */

-

-	/* Return value */

-

-/* 4818 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4820 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4822 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_columnHeaderCells */

-

-/* 4824 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4826 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4830 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 4832 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4834 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4836 */	NdrFcShort( 0x24 ),	/* 36 */

-/* 4838 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x3,		/* 3 */

-/* 4840 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 4842 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 4844 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4846 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter cellAccessibles */

-

-/* 4848 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

-/* 4850 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4852 */	NdrFcShort( 0x5e8 ),	/* Type Offset=1512 */

-

-	/* Parameter nColumnHeaderCells */

-

-/* 4854 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4856 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4858 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

+/* 4854 */	NdrFcShort( 0x6113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=24 */

+/* 4856 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4858 */	NdrFcShort( 0x5f4 ),	/* Type Offset=1524 */

 

 	/* Return value */

 

 /* 4860 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 4862 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4862 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 4864 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_rowHeaderCells */

+	/* Procedure get_columnHeaderCells */

 

 /* 4866 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4868 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4872 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 4872 */	NdrFcShort( 0x4 ),	/* 4 */

 /* 4874 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4876 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4878 */	NdrFcShort( 0x24 ),	/* 36 */

@@ -4761,9 +4768,9 @@
 

 /* 4890 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4892 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4894 */	NdrFcShort( 0x5e8 ),	/* Type Offset=1512 */

+/* 4894 */	NdrFcShort( 0x602 ),	/* Type Offset=1538 */

 

-	/* Parameter nRowHeaderCells */

+	/* Parameter nColumnHeaderCells */

 

 /* 4896 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4898 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

@@ -4777,297 +4784,334 @@
 /* 4906 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_isSelected */

+	/* Procedure get_rowHeaderCells */

 

 /* 4908 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 4910 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4914 */	NdrFcShort( 0x9 ),	/* 9 */

-/* 4916 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4914 */	NdrFcShort( 0x7 ),	/* 7 */

+/* 4916 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 4918 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4920 */	NdrFcShort( 0x21 ),	/* 33 */

-/* 4922 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x2,		/* 2 */

+/* 4920 */	NdrFcShort( 0x24 ),	/* 36 */

+/* 4922 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x3,		/* 3 */

 /* 4924 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 4926 */	NdrFcShort( 0x0 ),	/* 0 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 4926 */	NdrFcShort( 0x1 ),	/* 1 */

 /* 4928 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 4930 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter isSelected */

+	/* Parameter cellAccessibles */

 

-/* 4932 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4932 */	NdrFcShort( 0x2013 ),	/* Flags:  must size, must free, out, srv alloc size=8 */

 /* 4934 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4936 */	0x3,		/* FC_SMALL */

-			0x0,		/* 0 */

+/* 4936 */	NdrFcShort( 0x602 ),	/* Type Offset=1538 */

 

-	/* Return value */

+	/* Parameter nRowHeaderCells */

 

-/* 4938 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4938 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 4940 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 4942 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

+	/* Return value */

+

+/* 4944 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4946 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4948 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_isSelected */

+

+/* 4950 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 4952 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4956 */	NdrFcShort( 0x9 ),	/* 9 */

+/* 4958 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 4960 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4962 */	NdrFcShort( 0x21 ),	/* 33 */

+/* 4964 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x2,		/* 2 */

+/* 4966 */	0x8,		/* 8 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 4968 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4970 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4972 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter isSelected */

+

+/* 4974 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 4976 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 4978 */	0x3,		/* FC_SMALL */

+			0x0,		/* 0 */

+

+	/* Return value */

+

+/* 4980 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 4982 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 4984 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

 	/* Procedure get_rowColumnExtents */

 

-/* 4944 */	0x33,		/* FC_AUTO_HANDLE */

+/* 4986 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 4946 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 4950 */	NdrFcShort( 0xa ),	/* 10 */

-/* 4952 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

-/* 4954 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4956 */	NdrFcShort( 0x91 ),	/* 145 */

-/* 4958 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 4988 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 4992 */	NdrFcShort( 0xa ),	/* 10 */

+/* 4994 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */

+/* 4996 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 4998 */	NdrFcShort( 0x91 ),	/* 145 */

+/* 5000 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x6,		/* 6 */

-/* 4960 */	0x8,		/* 8 */

+/* 5002 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 4962 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4964 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 4966 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5004 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5006 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5008 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter row */

 

-/* 4968 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4970 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 4972 */	0x8,		/* FC_LONG */

+/* 5010 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5012 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 5014 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter column */

 

-/* 4974 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4976 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 4978 */	0x8,		/* FC_LONG */

+/* 5016 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5018 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5020 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter rowExtents */

 

-/* 4980 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4982 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 4984 */	0x8,		/* FC_LONG */

+/* 5022 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5024 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5026 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter columnExtents */

 

-/* 4986 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4988 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 4990 */	0x8,		/* FC_LONG */

+/* 5028 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5030 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

+/* 5032 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter isSelected */

 

-/* 4992 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 4994 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 4996 */	0x3,		/* FC_SMALL */

+/* 5034 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5036 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 5038 */	0x3,		/* FC_SMALL */

 			0x0,		/* 0 */

 

 	/* Return value */

 

-/* 4998 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5000 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

-/* 5002 */	0x8,		/* FC_LONG */

+/* 5040 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5042 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */

+/* 5044 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_table */

 

-/* 5004 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5046 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5006 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5010 */	NdrFcShort( 0xb ),	/* 11 */

-/* 5012 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 5014 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5016 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5018 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5048 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5052 */	NdrFcShort( 0xb ),	/* 11 */

+/* 5054 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5056 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5058 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5060 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5020 */	0x8,		/* 8 */

+/* 5062 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5022 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5024 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5026 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5064 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5066 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5068 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter table */

 

-/* 5028 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 5030 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 5032 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 5070 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5072 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 5074 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 5034 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5036 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 5038 */	0x8,		/* FC_LONG */

+/* 5076 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5078 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5080 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_imagePosition */

 

-/* 5040 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5082 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5042 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5046 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 5048 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

-/* 5050 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5052 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 5054 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+/* 5084 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5088 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 5090 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */

+/* 5092 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 5094 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 5096 */	0x44,		/* Oi2 Flags:  has return, has ext, */

 			0x4,		/* 4 */

-/* 5056 */	0x8,		/* 8 */

+/* 5098 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5058 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5060 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5062 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5100 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5102 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5104 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter coordinateType */

 

-/* 5064 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

-/* 5066 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 5068 */	0xd,		/* FC_ENUM16 */

+/* 5106 */	NdrFcShort( 0x48 ),	/* Flags:  in, base type, */

+/* 5108 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 5110 */	0xd,		/* FC_ENUM16 */

 			0x0,		/* 0 */

 

 	/* Parameter x */

 

-/* 5070 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5072 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 5074 */	0x8,		/* FC_LONG */

+/* 5112 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

+/* 5114 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5116 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Parameter y */

 

-/* 5076 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5078 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 5080 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Return value */

-

-/* 5082 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5084 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 5086 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Procedure get_imageSize */

-

-/* 5088 */	0x33,		/* FC_AUTO_HANDLE */

-			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5090 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5094 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 5096 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

-/* 5098 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5100 */	NdrFcShort( 0x40 ),	/* 64 */

-/* 5102 */	0x44,		/* Oi2 Flags:  has return, has ext, */

-			0x3,		/* 3 */

-/* 5104 */	0x8,		/* 8 */

-			0x1,		/* Ext Flags:  new corr desc, */

-/* 5106 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5108 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5110 */	NdrFcShort( 0x0 ),	/* 0 */

-

-	/* Parameter height */

-

-/* 5112 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5114 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 5116 */	0x8,		/* FC_LONG */

-			0x0,		/* 0 */

-

-	/* Parameter width */

-

 /* 5118 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

-/* 5120 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5120 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

 /* 5122 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Return value */

 

 /* 5124 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5126 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5126 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 5128 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_toolkitName */

+	/* Procedure get_imageSize */

 

 /* 5130 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

 /* 5132 */	NdrFcLong( 0x0 ),	/* 0 */

 /* 5136 */	NdrFcShort( 0x5 ),	/* 5 */

-/* 5138 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5138 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */

 /* 5140 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5142 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5144 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

-			0x2,		/* 2 */

+/* 5142 */	NdrFcShort( 0x40 ),	/* 64 */

+/* 5144 */	0x44,		/* Oi2 Flags:  has return, has ext, */

+			0x3,		/* 3 */

 /* 5146 */	0x8,		/* 8 */

-			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5148 */	NdrFcShort( 0x1 ),	/* 1 */

+			0x1,		/* Ext Flags:  new corr desc, */

+/* 5148 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5150 */	NdrFcShort( 0x0 ),	/* 0 */

 /* 5152 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter name */

+	/* Parameter height */

 

-/* 5154 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5154 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5156 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 5158 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 5158 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

 

-	/* Return value */

+	/* Parameter width */

 

-/* 5160 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5160 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */

 /* 5162 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

 /* 5164 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

-	/* Procedure get_toolkitVersion */

+	/* Return value */

 

-/* 5166 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5166 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5168 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5170 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_toolkitName */

+

+/* 5172 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5168 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5172 */	NdrFcShort( 0x6 ),	/* 6 */

-/* 5174 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 5176 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5178 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5180 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5174 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5178 */	NdrFcShort( 0x5 ),	/* 5 */

+/* 5180 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5182 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5184 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5186 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5182 */	0x8,		/* 8 */

+/* 5188 */	0x8,		/* 8 */

 			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

-/* 5184 */	NdrFcShort( 0x1 ),	/* 1 */

-/* 5186 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5188 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5190 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 5192 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5194 */	NdrFcShort( 0x0 ),	/* 0 */

 

-	/* Parameter version */

+	/* Parameter name */

 

-/* 5190 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

-/* 5192 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 5194 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+/* 5196 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5198 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 5200 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

 

 	/* Return value */

 

-/* 5196 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5198 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 5200 */	0x8,		/* FC_LONG */

+/* 5202 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5204 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5206 */	0x8,		/* FC_LONG */

+			0x0,		/* 0 */

+

+	/* Procedure get_toolkitVersion */

+

+/* 5208 */	0x33,		/* FC_AUTO_HANDLE */

+			0x6c,		/* Old Flags:  object, Oi2 */

+/* 5210 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5214 */	NdrFcShort( 0x6 ),	/* 6 */

+/* 5216 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5218 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5220 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5222 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+			0x2,		/* 2 */

+/* 5224 */	0x8,		/* 8 */

+			0x3,		/* Ext Flags:  new corr desc, clt corr check, */

+/* 5226 */	NdrFcShort( 0x1 ),	/* 1 */

+/* 5228 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5230 */	NdrFcShort( 0x0 ),	/* 0 */

+

+	/* Parameter version */

+

+/* 5232 */	NdrFcShort( 0x2113 ),	/* Flags:  must size, must free, out, simple ref, srv alloc size=8 */

+/* 5234 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 5236 */	NdrFcShort( 0x20 ),	/* Type Offset=32 */

+

+	/* Return value */

+

+/* 5238 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5240 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5242 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 	/* Procedure get_anchorTarget */

 

-/* 5202 */	0x33,		/* FC_AUTO_HANDLE */

+/* 5244 */	0x33,		/* FC_AUTO_HANDLE */

 			0x6c,		/* Old Flags:  object, Oi2 */

-/* 5204 */	NdrFcLong( 0x0 ),	/* 0 */

-/* 5208 */	NdrFcShort( 0x3 ),	/* 3 */

-/* 5210 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 5212 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5214 */	NdrFcShort( 0x8 ),	/* 8 */

-/* 5216 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

+/* 5246 */	NdrFcLong( 0x0 ),	/* 0 */

+/* 5250 */	NdrFcShort( 0x3 ),	/* 3 */

+/* 5252 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 5254 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5256 */	NdrFcShort( 0x8 ),	/* 8 */

+/* 5258 */	0x45,		/* Oi2 Flags:  srv must size, has return, has ext, */

 			0x2,		/* 2 */

-/* 5218 */	0x8,		/* 8 */

+/* 5260 */	0x8,		/* 8 */

 			0x1,		/* Ext Flags:  new corr desc, */

-/* 5220 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5222 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 5224 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5262 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5264 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 5266 */	NdrFcShort( 0x0 ),	/* 0 */

 

 	/* Parameter accessible */

 

-/* 5226 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

-/* 5228 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 5230 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

+/* 5268 */	NdrFcShort( 0x13 ),	/* Flags:  must size, must free, out, */

+/* 5270 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 5272 */	NdrFcShort( 0x2e ),	/* Type Offset=46 */

 

 	/* Return value */

 

-/* 5232 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

-/* 5234 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 5236 */	0x8,		/* FC_LONG */

+/* 5274 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */

+/* 5276 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 5278 */	0x8,		/* FC_LONG */

 			0x0,		/* 0 */

 

 			0x0

@@ -6007,163 +6051,181 @@
 /* 1350 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

 /* 1352 */	

+			0x11, 0x0,	/* FC_RP */

+/* 1354 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1356) */

+/* 1356 */	

+			0x21,		/* FC_BOGUS_ARRAY */

+			0x3,		/* 3 */

+/* 1358 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1360 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x0,		/*  */

+/* 1362 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1364 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 1366 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1370 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1372 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+			0x0,		/* 0 */

+/* 1374 */	NdrFcShort( 0xffc0 ),	/* Offset= -64 (1310) */

+/* 1376 */	0x5c,		/* FC_PAD */

+			0x5b,		/* FC_END */

+/* 1378 */	

 			0x12, 0x0,	/* FC_UP */

-/* 1354 */	NdrFcShort( 0xff90 ),	/* Offset= -112 (1242) */

-/* 1356 */	0xb4,		/* FC_USER_MARSHAL */

+/* 1380 */	NdrFcShort( 0xff76 ),	/* Offset= -138 (1242) */

+/* 1382 */	0xb4,		/* FC_USER_MARSHAL */

 			0x83,		/* 131 */

-/* 1358 */	NdrFcShort( 0x2 ),	/* 2 */

-/* 1360 */	NdrFcShort( 0x10 ),	/* 16 */

-/* 1362 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1364 */	NdrFcShort( 0xfff4 ),	/* Offset= -12 (1352) */

-/* 1366 */	

+/* 1384 */	NdrFcShort( 0x2 ),	/* 2 */

+/* 1386 */	NdrFcShort( 0x10 ),	/* 16 */

+/* 1388 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1390 */	NdrFcShort( 0xfff4 ),	/* Offset= -12 (1378) */

+/* 1392 */	

 			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/* 1368 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1370) */

-/* 1370 */	

+/* 1394 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1396) */

+/* 1396 */	

 			0x1a,		/* FC_BOGUS_STRUCT */

 			0x3,		/* 3 */

-/* 1372 */	NdrFcShort( 0xc ),	/* 12 */

-/* 1374 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1376 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1376) */

-/* 1378 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+/* 1398 */	NdrFcShort( 0xc ),	/* 12 */

+/* 1400 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1402 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1402) */

+/* 1404 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 1380 */	NdrFcShort( 0xfabc ),	/* Offset= -1348 (32) */

-/* 1382 */	0x8,		/* FC_LONG */

+/* 1406 */	NdrFcShort( 0xfaa2 ),	/* Offset= -1374 (32) */

+/* 1408 */	0x8,		/* FC_LONG */

 			0x8,		/* FC_LONG */

-/* 1384 */	0x5c,		/* FC_PAD */

+/* 1410 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 1386 */	

+/* 1412 */	

 			0x11, 0x0,	/* FC_RP */

-/* 1388 */	NdrFcShort( 0xfba2 ),	/* Offset= -1118 (270) */

-/* 1390 */	

-			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

-/* 1392 */	0x3,		/* FC_SMALL */

-			0x5c,		/* FC_PAD */

-/* 1394 */	

-			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 1396 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1398) */

-/* 1398 */	

-			0x2f,		/* FC_IP */

-			0x5a,		/* FC_CONSTANT_IID */

-/* 1400 */	NdrFcLong( 0x1c20f2b ),	/* 29495083 */

-/* 1404 */	NdrFcShort( 0x3dd2 ),	/* 15826 */

-/* 1406 */	NdrFcShort( 0x400f ),	/* 16399 */

-/* 1408 */	0x94,		/* 148 */

-			0x9f,		/* 159 */

-/* 1410 */	0xad,		/* 173 */

-			0x0,		/* 0 */

-/* 1412 */	0xbd,		/* 189 */

-			0xab,		/* 171 */

-/* 1414 */	0x1d,		/* 29 */

-			0x41,		/* 65 */

+/* 1414 */	NdrFcShort( 0xfb88 ),	/* Offset= -1144 (270) */

 /* 1416 */	

-			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1418 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1420) */

+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */

+/* 1418 */	0x3,		/* FC_SMALL */

+			0x5c,		/* FC_PAD */

 /* 1420 */	

-			0x13, 0x0,	/* FC_OP */

+			0x11, 0x10,	/* FC_RP [pointer_deref] */

 /* 1422 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1424) */

 /* 1424 */	

-			0x21,		/* FC_BOGUS_ARRAY */

-			0x3,		/* 3 */

-/* 1426 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1428 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x54,		/* FC_DEREFERENCE */

-/* 1430 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1432 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1434 */	NdrFcLong( 0xffffffff ),	/* -1 */

-/* 1438 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1440 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

-			0x0,		/* 0 */

-/* 1442 */	NdrFcShort( 0xffd4 ),	/* Offset= -44 (1398) */

-/* 1444 */	0x5c,		/* FC_PAD */

-			0x5b,		/* FC_END */

-/* 1446 */	

-			0x11, 0x10,	/* FC_RP [pointer_deref] */

-/* 1448 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1450) */

-/* 1450 */	

 			0x2f,		/* FC_IP */

 			0x5a,		/* FC_CONSTANT_IID */

-/* 1452 */	NdrFcLong( 0x35ad8070 ),	/* 900563056 */

-/* 1456 */	NdrFcShort( 0xc20c ),	/* -15860 */

-/* 1458 */	NdrFcShort( 0x4fb4 ),	/* 20404 */

-/* 1460 */	0xb0,		/* 176 */

-			0x94,		/* 148 */

-/* 1462 */	0xf4,		/* 244 */

-			0xf7,		/* 247 */

-/* 1464 */	0x27,		/* 39 */

-			0x5d,		/* 93 */

-/* 1466 */	0xd4,		/* 212 */

-			0x69,		/* 105 */

-/* 1468 */	

+/* 1426 */	NdrFcLong( 0x1c20f2b ),	/* 29495083 */

+/* 1430 */	NdrFcShort( 0x3dd2 ),	/* 15826 */

+/* 1432 */	NdrFcShort( 0x400f ),	/* 16399 */

+/* 1434 */	0x94,		/* 148 */

+			0x9f,		/* 159 */

+/* 1436 */	0xad,		/* 173 */

+			0x0,		/* 0 */

+/* 1438 */	0xbd,		/* 189 */

+			0xab,		/* 171 */

+/* 1440 */	0x1d,		/* 29 */

+			0x41,		/* 65 */

+/* 1442 */	

 			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1470 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1472) */

-/* 1472 */	

+/* 1444 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1446) */

+/* 1446 */	

 			0x13, 0x0,	/* FC_OP */

-/* 1474 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1476) */

-/* 1476 */	

-			0x1c,		/* FC_CVARRAY */

-			0x3,		/* 3 */

-/* 1478 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1480 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x0,		/*  */

-/* 1482 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

-/* 1484 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

-/* 1486 */	0x28,		/* Corr desc:  parameter, FC_LONG */

-			0x54,		/* FC_DEREFERENCE */

-/* 1488 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

-/* 1490 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1492 */	0x8,		/* FC_LONG */

-			0x5b,		/* FC_END */

-/* 1494 */	

-			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

-/* 1496 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1498) */

-/* 1498 */	

-			0x1a,		/* FC_BOGUS_STRUCT */

-			0x3,		/* 3 */

-/* 1500 */	NdrFcShort( 0x14 ),	/* 20 */

-/* 1502 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1504 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1504) */

-/* 1506 */	0xd,		/* FC_ENUM16 */

-			0x8,		/* FC_LONG */

-/* 1508 */	0x8,		/* FC_LONG */

-			0x8,		/* FC_LONG */

-/* 1510 */	0x8,		/* FC_LONG */

-			0x5b,		/* FC_END */

-/* 1512 */	

-			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

-/* 1514 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1516) */

-/* 1516 */	

-			0x13, 0x0,	/* FC_OP */

-/* 1518 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1520) */

-/* 1520 */	

+/* 1448 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1450) */

+/* 1450 */	

 			0x21,		/* FC_BOGUS_ARRAY */

 			0x3,		/* 3 */

-/* 1522 */	NdrFcShort( 0x0 ),	/* 0 */

-/* 1524 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+/* 1452 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1454 */	0x28,		/* Corr desc:  parameter, FC_LONG */

 			0x54,		/* FC_DEREFERENCE */

-/* 1526 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1528 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1530 */	NdrFcLong( 0xffffffff ),	/* -1 */

-/* 1534 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1536 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+/* 1456 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1458 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1460 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1464 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1466 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

 			0x0,		/* 0 */

-/* 1538 */	NdrFcShort( 0xfa30 ),	/* Offset= -1488 (50) */

-/* 1540 */	0x5c,		/* FC_PAD */

+/* 1468 */	NdrFcShort( 0xffd4 ),	/* Offset= -44 (1424) */

+/* 1470 */	0x5c,		/* FC_PAD */

 			0x5b,		/* FC_END */

-/* 1542 */	

+/* 1472 */	

+			0x11, 0x10,	/* FC_RP [pointer_deref] */

+/* 1474 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1476) */

+/* 1476 */	

+			0x2f,		/* FC_IP */

+			0x5a,		/* FC_CONSTANT_IID */

+/* 1478 */	NdrFcLong( 0x35ad8070 ),	/* 900563056 */

+/* 1482 */	NdrFcShort( 0xc20c ),	/* -15860 */

+/* 1484 */	NdrFcShort( 0x4fb4 ),	/* 20404 */

+/* 1486 */	0xb0,		/* 176 */

+			0x94,		/* 148 */

+/* 1488 */	0xf4,		/* 244 */

+			0xf7,		/* 247 */

+/* 1490 */	0x27,		/* 39 */

+			0x5d,		/* 93 */

+/* 1492 */	0xd4,		/* 212 */

+			0x69,		/* 105 */

+/* 1494 */	

 			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1496 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1498) */

+/* 1498 */	

+			0x13, 0x0,	/* FC_OP */

+/* 1500 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1502) */

+/* 1502 */	

+			0x1c,		/* FC_CVARRAY */

+			0x3,		/* 3 */

+/* 1504 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1506 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x0,		/*  */

+/* 1508 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */

+/* 1510 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */

+/* 1512 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x54,		/* FC_DEREFERENCE */

+/* 1514 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */

+/* 1516 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1518 */	0x8,		/* FC_LONG */

+			0x5b,		/* FC_END */

+/* 1520 */	

+			0x11, 0x4,	/* FC_RP [alloced_on_stack] */

+/* 1522 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1524) */

+/* 1524 */	

+			0x1a,		/* FC_BOGUS_STRUCT */

+			0x3,		/* 3 */

+/* 1526 */	NdrFcShort( 0x14 ),	/* 20 */

+/* 1528 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1530 */	NdrFcShort( 0x0 ),	/* Offset= 0 (1530) */

+/* 1532 */	0xd,		/* FC_ENUM16 */

+			0x8,		/* FC_LONG */

+/* 1534 */	0x8,		/* FC_LONG */

+			0x8,		/* FC_LONG */

+/* 1536 */	0x8,		/* FC_LONG */

+			0x5b,		/* FC_END */

+/* 1538 */	

+			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1540 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1542) */

+/* 1542 */	

+			0x13, 0x0,	/* FC_OP */

 /* 1544 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1546) */

 /* 1546 */	

+			0x21,		/* FC_BOGUS_ARRAY */

+			0x3,		/* 3 */

+/* 1548 */	NdrFcShort( 0x0 ),	/* 0 */

+/* 1550 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+			0x54,		/* FC_DEREFERENCE */

+/* 1552 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1554 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1556 */	NdrFcLong( 0xffffffff ),	/* -1 */

+/* 1560 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1562 */	0x4c,		/* FC_EMBEDDED_COMPLEX */

+			0x0,		/* 0 */

+/* 1564 */	NdrFcShort( 0xfa16 ),	/* Offset= -1514 (50) */

+/* 1566 */	0x5c,		/* FC_PAD */

+			0x5b,		/* FC_END */

+/* 1568 */	

+			0x11, 0x14,	/* FC_RP [alloced_on_stack] [pointer_deref] */

+/* 1570 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1572) */

+/* 1572 */	

 			0x13, 0x0,	/* FC_OP */

-/* 1548 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1550) */

-/* 1550 */	

+/* 1574 */	NdrFcShort( 0x2 ),	/* Offset= 2 (1576) */

+/* 1576 */	

 			0x1b,		/* FC_CARRAY */

 			0x3,		/* 3 */

-/* 1552 */	NdrFcShort( 0x4 ),	/* 4 */

-/* 1554 */	0x28,		/* Corr desc:  parameter, FC_LONG */

+/* 1578 */	NdrFcShort( 0x4 ),	/* 4 */

+/* 1580 */	0x28,		/* Corr desc:  parameter, FC_LONG */

 			0x54,		/* FC_DEREFERENCE */

-/* 1556 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

-/* 1558 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

-/* 1560 */	0x8,		/* FC_LONG */

+/* 1582 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */

+/* 1584 */	NdrFcShort( 0x0 ),	/* Corr flags:  */

+/* 1586 */	0x8,		/* FC_LONG */

 			0x5b,		/* FC_END */

 

 			0x0

@@ -6909,7 +6971,204 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0005, ver. 0.0,

+/* Object interface: IAccessible2_4, ver. 0.0,

+   GUID={0x610a7bec,0x91bb,0x444d,{0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29}} */

+

+#pragma code_seg(".orpc")

+static const unsigned short IAccessible2_4_FormatStringOffsetTable[] =

+    {

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    (unsigned short) -1,

+    450,

+    486,

+    528,

+    576,

+    612,

+    648,

+    696,

+    744,

+    780,

+    816,

+    852,

+    888,

+    936,

+    984,

+    1020,

+    1056,

+    1092,

+    1128,

+    1164,

+    1206,

+    1248,

+    1302,

+    1344

+    };

+

+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo =

+    {

+    &Object_StubDesc,

+    ia2_api_all__MIDL_ProcFormatString.Format,

+    &IAccessible2_4_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0

+    };

+

+

+static const MIDL_SERVER_INFO IAccessible2_4_ServerInfo = 

+    {

+    &Object_StubDesc,

+    0,

+    ia2_api_all__MIDL_ProcFormatString.Format,

+    &IAccessible2_4_FormatStringOffsetTable[-3],

+    0,

+    0,

+    0,

+    0};

+CINTERFACE_PROXY_VTABLE(51) _IAccessible2_4ProxyVtbl = 

+{

+    &IAccessible2_4_ProxyInfo,

+    &IID_IAccessible2_4,

+    IUnknown_QueryInterface_Proxy,

+    IUnknown_AddRef_Proxy,

+    IUnknown_Release_Proxy ,

+    0 /* IDispatch::GetTypeInfoCount */ ,

+    0 /* IDispatch::GetTypeInfo */ ,

+    0 /* IDispatch::GetIDsOfNames */ ,

+    0 /* IDispatch_Invoke_Proxy */ ,

+    0 /* IAccessible::get_accParent */ ,

+    0 /* IAccessible::get_accChildCount */ ,

+    0 /* IAccessible::get_accChild */ ,

+    0 /* IAccessible::get_accName */ ,

+    0 /* IAccessible::get_accValue */ ,

+    0 /* IAccessible::get_accDescription */ ,

+    0 /* IAccessible::get_accRole */ ,

+    0 /* IAccessible::get_accState */ ,

+    0 /* IAccessible::get_accHelp */ ,

+    0 /* IAccessible::get_accHelpTopic */ ,

+    0 /* IAccessible::get_accKeyboardShortcut */ ,

+    0 /* IAccessible::get_accFocus */ ,

+    0 /* IAccessible::get_accSelection */ ,

+    0 /* IAccessible::get_accDefaultAction */ ,

+    0 /* IAccessible::accSelect */ ,

+    0 /* IAccessible::accLocation */ ,

+    0 /* IAccessible::accNavigate */ ,

+    0 /* IAccessible::accHitTest */ ,

+    0 /* IAccessible::accDoDefaultAction */ ,

+    0 /* IAccessible::put_accName */ ,

+    0 /* IAccessible::put_accValue */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::role */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_3::get_selectionRanges */ ,

+    (void *) (INT_PTR) -1 /* IAccessible2_4::setSelectionRanges */

+};

+

+

+static const PRPC_STUB_FUNCTION IAccessible2_4_table[] =

+{

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    STUB_FORWARDING_FUNCTION,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2,

+    NdrStubCall2

+};

+

+CInterfaceStubVtbl _IAccessible2_4StubVtbl =

+{

+    &IID_IAccessible2_4,

+    &IAccessible2_4_ServerInfo,

+    51,

+    &IAccessible2_4_table[-3],

+    CStdStubBuffer_DELEGATING_METHODS

+};

+

+

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -6919,8 +7178,8 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =

     {

-    1344,

     1386,

+    1428,

     72

     };

 

@@ -6973,10 +7232,10 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =

     {

-    1422,

-    1458,

-    1494,

-    1530

+    1464,

+    1500,

+    1536,

+    1572

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =

@@ -7023,7 +7282,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0007, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0008, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -7033,25 +7292,25 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleText_FormatStringOffsetTable[] =

     {

-    1566,

     1608,

+    1650,

     72,

-    1662,

-    1728,

-    1764,

-    1818,

-    1866,

-    1914,

-    1974,

-    2034,

-    2094,

-    2130,

-    2166,

-    2214,

-    2250,

-    2298,

-    2358,

-    2394

+    1704,

+    1770,

+    1806,

+    1860,

+    1908,

+    1956,

+    2016,

+    2076,

+    2136,

+    2172,

+    2208,

+    2256,

+    2292,

+    2340,

+    2400,

+    2436

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =

@@ -7119,26 +7378,26 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleText2_FormatStringOffsetTable[] =

     {

-    1566,

     1608,

+    1650,

     72,

-    1662,

-    1728,

-    1764,

-    1818,

-    1866,

-    1914,

-    1974,

-    2034,

-    2094,

-    2130,

-    2166,

-    2214,

-    2250,

-    2298,

-    2358,

-    2394,

-    2430

+    1704,

+    1770,

+    1806,

+    1860,

+    1908,

+    1956,

+    2016,

+    2076,

+    2136,

+    2172,

+    2208,

+    2256,

+    2292,

+    2340,

+    2400,

+    2436,

+    2472

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo =

@@ -7207,13 +7466,13 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =

     {

-    1566,

-    2490,

+    1608,

     2532,

     2574,

     2616,

-    2652,

-    2700

+    2658,

+    2694,

+    2742

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =

@@ -7275,11 +7534,11 @@
     312,

     366,

     408,

-    2748,

     2790,

     2832,

-    2868,

-    2904

+    2874,

+    2910,

+    2946

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =

@@ -7339,28 +7598,28 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =

     {

-    1566,

     1608,

+    1650,

     72,

-    1662,

-    1728,

-    1764,

-    1818,

-    1866,

-    1914,

-    1974,

-    2034,

-    2094,

-    2130,

-    2166,

-    2214,

-    2250,

-    2298,

-    2358,

-    2394,

-    2940,

-    2976,

-    3018

+    1704,

+    1770,

+    1806,

+    1860,

+    1908,

+    1956,

+    2016,

+    2076,

+    2136,

+    2172,

+    2208,

+    2256,

+    2292,

+    2340,

+    2400,

+    2436,

+    2982,

+    3018,

+    3060

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =

@@ -7431,29 +7690,29 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] =

     {

-    1566,

     1608,

+    1650,

     72,

-    1662,

-    1728,

-    1764,

-    1818,

-    1866,

-    1914,

-    1974,

-    2034,

-    2094,

-    2130,

-    2166,

-    2214,

-    2250,

-    2298,

-    2358,

-    2394,

-    2940,

-    2976,

+    1704,

+    1770,

+    1806,

+    1860,

+    1908,

+    1956,

+    2016,

+    2076,

+    2136,

+    2172,

+    2208,

+    2256,

+    2292,

+    2340,

+    2400,

+    2436,

+    2982,

     3018,

-    3060

+    3060,

+    3102

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo =

@@ -7525,35 +7784,35 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =

     {

-    3102,

-    3150,

-    3186,

-    3234,

+    3144,

+    3192,

+    3228,

     3276,

-    3324,

+    3318,

     3366,

     3408,

-    2832,

-    2868,

-    3444,

-    3480,

-    3516,

+    3450,

+    2874,

+    2910,

+    3486,

+    3522,

     3558,

-    3606,

+    3600,

     3648,

     3690,

-    3738,

-    3786,

-    3834,

-    3870,

+    3732,

+    3780,

+    3828,

+    3876,

     3912,

     3954,

-    4002,

-    4038,

-    4074,

-    4110,

-    4146,

-    4212

+    3996,

+    4044,

+    4080,

+    4116,

+    4152,

+    4188,

+    4254

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =

@@ -7631,26 +7890,26 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =

     {

-    3102,

-    3150,

+    3144,

+    3192,

     270,

-    4248,

-    1728,

-    4284,

-    4320,

-    3408,

-    4356,

+    4290,

+    1770,

+    4326,

+    4362,

+    3450,

     4398,

     4440,

     4482,

     4524,

-    4560,

+    4566,

     4602,

     4644,

-    4680,

-    4716,

-    4752,

-    4788

+    4686,

+    4722,

+    4758,

+    4794,

+    4830

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =

@@ -7720,14 +7979,14 @@
 static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =

     {

     198,

-    4824,

-    72,

-    4248,

     4866,

-    4284,

+    72,

+    4290,

     4908,

-    4944,

-    5004

+    4326,

+    4950,

+    4986,

+    5046

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =

@@ -7786,8 +8045,8 @@
 static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =

     {

     0,

-    5040,

-    5088

+    5082,

+    5130

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =

@@ -7833,7 +8092,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0017, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 

@@ -7845,8 +8104,8 @@
     {

     0,

     36,

-    5130,

-    5166

+    5172,

+    5208

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =

@@ -7899,7 +8158,7 @@
 #pragma code_seg(".orpc")

 static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] =

     {

-    5202

+    5244

     };

 

 static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo =

@@ -7943,7 +8202,7 @@
 };

 

 

-/* Standard interface: __MIDL_itf_ia2_api_all_0000_0019, ver. 0.0,

+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0020, ver. 0.0,

    GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */

 

 static const MIDL_STUB_DESC Object_StubDesc = 

@@ -7989,6 +8248,7 @@
     ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl,

+    ( CInterfaceProxyVtbl *) &_IAccessible2_4ProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,

     ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,

     0

@@ -8013,6 +8273,7 @@
     ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl,

+    ( CInterfaceStubVtbl *) &_IAccessible2_4StubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,

     ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,

     0

@@ -8037,6 +8298,7 @@
     "IAccessibleText2",

     "IAccessibleDocument",

     "IAccessible2_2",

+    "IAccessible2_4",

     "IAccessibleRelation",

     "IAccessibleText",

     0

@@ -8061,6 +8323,7 @@
     0,

     0,

     &IID_IAccessible,

+    &IID_IAccessible,

     0,

     0,

     0

@@ -8073,12 +8336,12 @@
 {

     IID_BS_LOOKUP_SETUP

 

-    IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 19, 16 )

+    IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 20, 16 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 )

     IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 )

-    IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 19, *pIndex )

+    IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 20, *pIndex )

     

 }

 

@@ -8089,7 +8352,7 @@
     (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList,

     (const IID ** ) & _ia2_api_all_BaseIIDList,

     & _ia2_api_all_IID_Lookup, 

-    19,

+    20,

     2,

     0, /* table of [async_uuid] interfaces */

     0, /* Filler1 */

diff --git a/tools/grit/grit/tool/newgrd.py b/tools/grit/grit/tool/newgrd.py
index 24c863f..385a806 100644
--- a/tools/grit/grit/tool/newgrd.py
+++ b/tools/grit/grit/tool/newgrd.py
@@ -76,7 +76,7 @@
     if len(args) != 1:
       print 'This tool requires exactly one argument, the name of the output file.'
       return 2
-    filename = my_arguments[0]
+    filename = args[0]
     with util.WrapOutputStream(open(filename, 'w'), 'utf-8') as out:
       out.write(_FILE_CONTENTS)
     print "Wrote file %s" % filename
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index cf63c57..5239200 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -31137,6 +31137,7 @@
   <int value="-1261263046"
       label="RemoveUsageOfDeprecatedGaiaSigninEndpoint:disabled"/>
   <int value="-1259901957" label="VrBrowserKeyboard:disabled"/>
+  <int value="-1256823053" label="WebRtcHWVP9Encoding:enabled"/>
   <int value="-1255427595" label="HomePageButtonForceEnabled:enabled"/>
   <int value="-1254070521" label="enable-slimming-paint-invalidation"/>
   <int value="-1253608371" label="IncognitoStrings:disabled"/>
@@ -32064,6 +32065,7 @@
   <int value="392782890" label="SafeBrowsingTelemetryForApkDownloads:enabled"/>
   <int value="393704200" label="account-consistency"/>
   <int value="398903399" label="GenericSensorExtraClasses:disabled"/>
+  <int value="399039205" label="enable-webrtc-hw-vp9-encoding"/>
   <int value="400272381" label="LazyFrameLoading:disabled"/>
   <int value="400322063" label="ash-disable-screen-orientation-lock"/>
   <int value="401983950" label="enable-spdy4"/>
@@ -32354,6 +32356,7 @@
       label="OmniboxUIExperimentElideSuggestionUrlAfterHost:enabled"/>
   <int value="908523940" label="PassiveEventListenersDueToFling:disabled"/>
   <int value="909439558" label="disable-device-discovery"/>
+  <int value="910725730" label="WebRtcHWVP9Encoding:disabled"/>
   <int value="912119426" label="InfiniteSessionRestore:disabled"/>
   <int value="913138924" label="RecurrentInterstitialFeature:disabled"/>
   <int value="916316159" label="disable-new-app-list-mixer"/>
@@ -45729,7 +45732,7 @@
       label="resource_coordinator.mojom.FrameCoordinationUnit"/>
   <int value="1374541190" label="payments.mojom.PaymentManager"/>
   <int value="1416694600" label="payments.mojom.PaymentRequest"/>
-  <int value="1419976867" label="blink.mojom.DedicatedWorkerFactory"/>
+  <int value="1419976867" label="blink.mojom.DedicatedWorkerHostFactory"/>
   <int value="1448556545" label="content.mojom.InputInjector"/>
   <int value="1548931182" label="shape_detection.mojom.FaceDetectionProvider"/>
   <int value="1558900994" label="device.mojom.NFC"/>
@@ -53054,12 +53057,13 @@
 
 <enum name="UnifiedConsentSyncAndGoogleServicesSettings">
   <int value="0" label="None of the services are enabled"/>
-  <int value="1" label="(Obsolete)'Sync and all Google services' is enabled"/>
-  <int value="2" label="'Activity and interactions' is enabled"/>
+  <int value="1" label="(Obsolete) 'Sync and all Google services' is enabled"/>
+  <int value="2" label="(Obsolete) 'Activity and interactions' is enabled"/>
   <int value="3" label="'Make searches and browsing better' is enabled"/>
-  <int value="4" label="'Safe browsing extended reporting' is enabled"/>
-  <int value="5" label="'Enhanced spell check' is enabled"/>
-  <int value="6" label="All services were enabled during opt-in"/>
+  <int value="4"
+      label="(Obsolete) 'Safe browsing extended reporting' is enabled"/>
+  <int value="5" label="(Obsolete) 'Enhanced spell check' is enabled"/>
+  <int value="6" label="(Obsolete) All services were enabled during opt-in"/>
 </enum>
 
 <enum name="UnifiedConsentSyncDataTypesOffAfterAdvancedOptIn">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index a185bd8..860e6cd 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -2167,6 +2167,18 @@
   </summary>
 </histogram>
 
+<histogram name="Android.Language.WrongLanguageAfterResume" enum="Boolean"
+    expires_after="2019-08-01">
+  <owner>tiborg@chromium.org</owner>
+  <owner>digit@chromium.org</owner>
+  <summary>
+    Reports whether Chrome was started in a language other than the system
+    language but we support the system language. That can happen if the user
+    changes the system language and the required language split cannot be
+    installed in time.
+  </summary>
+</histogram>
+
 <histogram
     name="Android.MainActivity.ExplicitMainViewIntentDispatched.OnCreate"
     enum="BooleanDispatched">
@@ -12065,6 +12077,16 @@
   </summary>
 </histogram>
 
+<histogram name="Bluetooth.Availability" enum="BluetoothAvailability"
+    expires_after="2019-12-31">
+  <owner>kenrb@chromium.org</owner>
+  <owner>kpaulhamus@chromium.org</owner>
+  <summary>
+    Determines the availability and capabilities of the Bluetooth driver. This
+    metric is logged on startup.
+  </summary>
+</histogram>
+
 <histogram name="Bluetooth.ConnectedDeviceCount" units="devices">
   <owner>adlr@chromium.org</owner>
   <summary>
@@ -76090,6 +76112,9 @@
 
 <histogram name="OSX.BluetoothAvailability" enum="BluetoothAvailability"
     expires_after="2018-08-30">
+  <obsolete>
+    Obsolete as of Chrome 73. This has been replaced by Bluetooth.Availability.
+  </obsolete>
   <owner>erikchen@chromium.org</owner>
   <summary>
     The availability and capabilities of the Bluetooth driver on OSX devices.
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc
index 71666916..9b37614 100644
--- a/ui/accessibility/platform/ax_platform_node_base.cc
+++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -78,13 +78,13 @@
   return nullptr;
 }
 
-gfx::NativeViewAccessible AXPlatformNodeBase::GetParent() {
+gfx::NativeViewAccessible AXPlatformNodeBase::GetParent() const {
   if (delegate_)
     return delegate_->GetParent();
   return nullptr;
 }
 
-int AXPlatformNodeBase::GetChildCount() {
+int AXPlatformNodeBase::GetChildCount() const {
   if (delegate_)
     return delegate_->GetChildCount();
   return 0;
@@ -307,14 +307,14 @@
 }
 
 bool AXPlatformNodeBase::SetTextSelection(int start_offset, int end_offset) {
+  if (!delegate_)
+    return false;
+
   AXActionData action_data;
   action_data.action = ax::mojom::Action::kSetSelection;
   action_data.anchor_node_id = action_data.focus_node_id = GetData().id;
   action_data.anchor_offset = start_offset;
   action_data.focus_offset = end_offset;
-  if (!delegate_)
-    return false;
-
   return delegate_->AccessibilityPerformAction(action_data);
 }
 
@@ -325,9 +325,10 @@
 }
 
 // TODO(crbug.com/865101) Remove this once the autofill state works.
-bool AXPlatformNodeBase::IsFocusedInputWithSuggestions() {
+bool AXPlatformNodeBase::IsFocusedInputWithSuggestions() const {
   return HasInputSuggestions() && IsPlainTextField() &&
-         delegate_->GetFocus() == GetNativeViewAccessible();
+         delegate_->GetFocus() ==
+             const_cast<AXPlatformNodeBase*>(this)->GetNativeViewAccessible();
 }
 
 bool AXPlatformNodeBase::IsPlainTextField() const {
@@ -346,13 +347,14 @@
          GetData().HasState(ax::mojom::State::kRichlyEditable);
 }
 
-std::string AXPlatformNodeBase::GetInnerText() {
+std::string AXPlatformNodeBase::GetInnerText() const {
   if (IsTextOnlyObject())
     return GetStringAttribute(ax::mojom::StringAttribute::kName);
 
   std::string text;
   for (int i = 0; i < GetChildCount(); ++i) {
-    gfx::NativeViewAccessible child_accessible = ChildAtIndex(i);
+    gfx::NativeViewAccessible child_accessible =
+        const_cast<AXPlatformNodeBase*>(this)->ChildAtIndex(i);
     AXPlatformNodeBase* child = FromNativeViewAccessible(child_accessible);
     if (!child)
       continue;
@@ -377,7 +379,7 @@
   }
 }
 
-base::string16 AXPlatformNodeBase::GetRangeValueText() {
+base::string16 AXPlatformNodeBase::GetRangeValueText() const {
   float fval;
   base::string16 value =
       GetString16Attribute(ax::mojom::StringAttribute::kValue);
@@ -572,7 +574,7 @@
   }
 }
 
-bool AXPlatformNodeBase::IsChildOfLeaf() {
+bool AXPlatformNodeBase::IsChildOfLeaf() const {
   AXPlatformNodeBase* ancestor = FromNativeViewAccessible(GetParent());
 
   while (ancestor) {
@@ -619,11 +621,11 @@
              GetIntAttribute(ax::mojom::IntAttribute::kScrollYMax);
 }
 
-std::string AXPlatformNodeBase::GetText() {
+std::string AXPlatformNodeBase::GetText() const {
   return GetInnerText();
 }
 
-base::string16 AXPlatformNodeBase::GetValue() {
+base::string16 AXPlatformNodeBase::GetValue() const {
   // Expose slider value.
   if (IsRangeValueSupported()) {
     return GetRangeValueText();
@@ -1008,7 +1010,7 @@
   // child object it points to.
   base::string16 hypertext;
   for (int i = 0; i < child_count; ++i) {
-    auto* child = FromNativeViewAccessible(delegate_->ChildAtIndex(i));
+    const auto* child = FromNativeViewAccessible(delegate_->ChildAtIndex(i));
 
     DCHECK(child);
     // Similar to Firefox, we don't expose text-only objects in IA2 hypertext.
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h
index 0b89a8f8..d3a83f39 100644
--- a/ui/accessibility/platform/ax_platform_node_base.h
+++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -54,8 +54,8 @@
   // These are simple wrappers to our delegate.
   const AXNodeData& GetData() const;
   gfx::NativeViewAccessible GetFocus();
-  gfx::NativeViewAccessible GetParent();
-  int GetChildCount();
+  gfx::NativeViewAccessible GetParent() const;
+  int GetChildCount() const;
   gfx::NativeViewAccessible ChildAtIndex(int index);
 
   // This needs to be implemented for each platform.
@@ -165,7 +165,7 @@
   // Returns true if an ancestor of this node (not including itself) is a
   // leaf node, meaning that this node is not actually exposed to the
   // platform.
-  bool IsChildOfLeaf();
+  bool IsChildOfLeaf() const;
 
   // Returns true if this is a leaf node on this platform, meaning any
   // children should not be exposed to this platform's native accessibility
@@ -189,9 +189,9 @@
 
   bool HasFocus();
 
-  virtual std::string GetText();
+  virtual std::string GetText() const;
 
-  virtual base::string16 GetValue();
+  virtual base::string16 GetValue() const;
 
   // Represents a non-static text node in IAccessibleHypertext (and ATK in the
   // future). This character is embedded in the response to
@@ -217,18 +217,18 @@
   // such as for the Autofill feature. The suggestion popup can be either hidden
   // and available or already visible. This indicates next down arrow key will
   // navigate within the suggestion popup.
-  bool IsFocusedInputWithSuggestions();
+  bool IsFocusedInputWithSuggestions() const;
   bool IsRichTextField() const;
   bool IsRangeValueSupported() const;
 
   // Get the range value text, which might come from aria-valuetext or
   // a floating-point value. This is different from the value string
   // attribute used in input controls such as text boxes and combo boxes.
-  base::string16 GetRangeValueText();
+  base::string16 GetRangeValueText() const;
 
   // |GetInnerText| recursively includes all the text from descendants such as
   // text found in any embedded object.
-  std::string GetInnerText();
+  std::string GetInnerText() const;
 
   // Cast a gfx::NativeViewAccessible to an AXPlatformNodeBase if it is one,
   // or return NULL if it's not an instance of this class.
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index 8303f08..d1809a2 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -520,7 +520,7 @@
   return -1;
 }
 
-base::string16 AXPlatformNodeWin::GetTextAsString16() {
+base::string16 AXPlatformNodeWin::GetTextAsString16() const {
   if (IsChildOfLeaf())
     return base::UTF8ToUTF16(AXPlatformNodeBase::GetText());
 
@@ -1380,6 +1380,108 @@
 }
 
 //
+// IAccessible2_3 implementation.
+//
+
+IFACEMETHODIMP AXPlatformNodeWin::get_selectionRanges(IA2Range** ranges,
+                                                      LONG* nRanges) {
+  COM_OBJECT_VALIDATE_2_ARGS(ranges, nRanges);
+  AXPlatformNode::NotifyAddAXModeFlags(kScreenReaderAndHTMLAccessibilityModes);
+  int32_t anchor_id = GetDelegate()->GetTreeData().sel_anchor_object_id;
+  auto* anchor_node =
+      static_cast<AXPlatformNodeWin*>(GetDelegate()->GetFromNodeID(anchor_id));
+  if (!anchor_node)
+    return E_FAIL;
+  int anchor_offset = int{GetDelegate()->GetTreeData().sel_anchor_offset};
+
+  int32_t focus_id = GetDelegate()->GetTreeData().sel_focus_object_id;
+  auto* focus_node =
+      static_cast<AXPlatformNodeWin*>(GetDelegate()->GetFromNodeID(focus_id));
+  if (!focus_node)
+    return E_FAIL;
+  int focus_offset = int{GetDelegate()->GetTreeData().sel_focus_offset};
+
+  if (!IsDescendant(anchor_node) || !IsDescendant(focus_node))
+    return S_FALSE;  // No selection within this subtree.
+
+  *ranges = reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range)));
+  anchor_node->AddRef();
+  ranges[0]->anchor = static_cast<IAccessible*>(anchor_node);
+  ranges[0]->anchorOffset = anchor_offset;
+  focus_node->AddRef();
+  ranges[0]->active = static_cast<IAccessible*>(focus_node);
+  ranges[0]->activeOffset = focus_offset;
+  *nRanges = 1;
+  return S_OK;
+}
+
+//
+// IAccessible2_4 implementation.
+//
+
+IFACEMETHODIMP AXPlatformNodeWin::setSelectionRanges(LONG nRanges,
+                                                     IA2Range* ranges) {
+  COM_OBJECT_VALIDATE();
+  // Blink supports only one selection range for now.
+  if (nRanges != 1)
+    return E_INVALIDARG;
+  if (!ranges)
+    return E_INVALIDARG;
+  AXPlatformNode::NotifyAddAXModeFlags(kScreenReaderAndHTMLAccessibilityModes);
+
+  if (!ranges->anchor)
+    return E_INVALIDARG;
+  if (!ranges->active)
+    return E_INVALIDARG;
+
+  Microsoft::WRL::ComPtr<IAccessible> anchor;
+  if (FAILED(ranges->anchor->QueryInterface(IID_PPV_ARGS(&anchor))))
+    return E_INVALIDARG;
+
+  Microsoft::WRL::ComPtr<IAccessible> focus;
+  if (FAILED(ranges->active->QueryInterface(IID_PPV_ARGS(&focus))))
+    return E_INVALIDARG;
+
+  const auto* anchor_node =
+      static_cast<AXPlatformNodeWin*>(FromNativeViewAccessible(anchor.Get()));
+  const auto* focus_node =
+      static_cast<AXPlatformNodeWin*>(FromNativeViewAccessible(focus.Get()));
+  if (!anchor_node || !focus_node)
+    return E_INVALIDARG;
+
+  if (ranges->anchorOffset < 0 || ranges->activeOffset < 0)
+    return E_INVALIDARG;
+
+  if (anchor_node->IsTextOnlyObject() || anchor_node->IsPlainTextField()) {
+    if (size_t{ranges->anchorOffset} >
+        anchor_node->GetTextAsString16().length()) {
+      return E_INVALIDARG;
+    }
+  } else {
+    if (ranges->anchorOffset > anchor_node->GetChildCount())
+      return E_INVALIDARG;
+  }
+
+  if (focus_node->IsTextOnlyObject() || focus_node->IsPlainTextField()) {
+    if (size_t{ranges->activeOffset} > focus_node->GetTextAsString16().length())
+      return E_INVALIDARG;
+  } else {
+    if (ranges->activeOffset > focus_node->GetChildCount())
+      return E_INVALIDARG;
+  }
+
+  AXActionData action_data;
+  action_data.action = ax::mojom::Action::kSetSelection;
+  action_data.anchor_node_id = anchor_node->GetData().id;
+  action_data.anchor_offset = int32_t{ranges->anchorOffset};
+  action_data.focus_node_id = focus_node->GetData().id;
+  action_data.focus_offset = int32_t{ranges->activeOffset};
+  if (GetDelegate()->AccessibilityPerformAction(action_data))
+    return S_OK;
+  return S_FALSE;
+}
+
+//
 // IAccessibleEx implementation.
 //
 
@@ -2632,9 +2734,8 @@
     return S_FALSE;
 
   AXPlatformNodeBase* table = GetTable();
-  if (!table) {
+  if (!table)
     return S_FALSE;
-  }
 
   int column = GetTableColumn();
   int columns = GetTableColumnCount();
@@ -2866,9 +2967,9 @@
   if (selection_start >= 0 && selection_end >= 0 &&
       selection_start != selection_end) {
     // We should ignore the direction of the selection when exposing start and
-    // end offsets. According to the IA2 Spec the end offset is always increased
-    // by one past the end of the selection. This wouldn't make sense if
-    // end < start.
+    // end offsets. According to the IA2 Spec the end offset is always
+    // increased by one past the end of the selection. This wouldn't make
+    // sense if end < start.
     if (selection_end < selection_start)
       std::swap(selection_start, selection_end);
 
@@ -3903,10 +4004,10 @@
 
     case ax::mojom::Role::kPane:
     case ax::mojom::Role::kWindow:
-      // Do not return ROLE_SYSTEM_WINDOW as that is a special MSAA system role
-      // used to indicate a real native window object. It is automatically
-      // created by oleacc.dll as a parent of the root of our hierarchy,
-      // matching the HWND.
+      // Do not return ROLE_SYSTEM_WINDOW as that is a special MSAA system
+      // role used to indicate a real native window object. It is
+      // automatically created by oleacc.dll as a parent of the root of our
+      // hierarchy, matching the HWND.
       return ROLE_SYSTEM_PANE;
 
     case ax::mojom::Role::kIgnored:
@@ -3955,10 +4056,10 @@
       return "log";
 
     case ax::mojom::Role::kGenericContainer:
-      // Use html tag if available. In the case where there is no tag, e.g. for
-      // anonymous content inserted by blink, treat it as a "div". This can
-      // occur if the markup had a block and inline element as siblings -- blink
-      // will wrap the inline with a block in this case.
+      // Use html tag if available. In the case where there is no tag, e.g.
+      // for anonymous content inserted by blink, treat it as a "div". This
+      // can occur if the markup had a block and inline element as siblings --
+      // blink will wrap the inline with a block in this case.
       if (html_tag.empty())
         return "div";
       return html_tag;
@@ -4179,10 +4280,9 @@
       break;
     case ax::mojom::Role::kMeter:
       // TODO(accessibiity) Uncomment IA2_ROLE_LEVEL_BAR once screen readers
-      // adopt it. Currently, a <meter> ends up being spoken as a progress bar,
-      // which is confusing.
-      // IA2_ROLE_LEVEL_BAR is the correct mapping according to CORE-AAM.
-      // ia2_role = IA2_ROLE_LEVEL_BAR;
+      // adopt it. Currently, a <meter> ends up being spoken as a progress
+      // bar, which is confusing. IA2_ROLE_LEVEL_BAR is the correct mapping
+      // according to CORE-AAM. ia2_role = IA2_ROLE_LEVEL_BAR;
       break;
     case ax::mojom::Role::kNavigation:
       ia2_role = IA2_ROLE_LANDMARK;
@@ -4731,9 +4831,9 @@
       if (data.role == ax::mojom::Role::kToggleButton) {
         properties.emplace_back(L"pressed=false");
       } else if (data.role == ax::mojom::Role::kSwitch) {
-        // ARIA switches are exposed to Windows accessibility as toggle buttons.
-        // For maximum compatibility with ATs, we expose both the pressed and
-        // checked states.
+        // ARIA switches are exposed to Windows accessibility as toggle
+        // buttons. For maximum compatibility with ATs, we expose both the
+        // pressed and checked states.
         properties.emplace_back(L"pressed=false");
         properties.emplace_back(L"checked=false");
       } else {
@@ -4744,9 +4844,9 @@
       if (data.role == ax::mojom::Role::kToggleButton) {
         properties.emplace_back(L"pressed=true");
       } else if (data.role == ax::mojom::Role::kSwitch) {
-        // ARIA switches are exposed to Windows accessibility as toggle buttons.
-        // For maximum compatibility with ATs, we expose both the pressed and
-        // checked states.
+        // ARIA switches are exposed to Windows accessibility as toggle
+        // buttons. For maximum compatibility with ATs, we expose both the
+        // pressed and checked states.
         properties.emplace_back(L"pressed=true");
         properties.emplace_back(L"checked=true");
       } else {
@@ -5337,7 +5437,7 @@
   return UIA_DocumentControlTypeId;
 }
 
-base::string16 AXPlatformNodeWin::GetValue() {
+base::string16 AXPlatformNodeWin::GetValue() const {
   base::string16 value = AXPlatformNodeBase::GetValue();
 
   // If this doesn't have a value and is linked then set its value to the URL
@@ -5411,7 +5511,7 @@
   return data.HasState(ax::mojom::State::kFocusable);
 }
 
-int AXPlatformNodeWin::MSAAState() {
+int AXPlatformNodeWin::MSAAState() const {
   const AXNodeData& data = GetData();
   int msaa_state = 0;
 
@@ -5438,8 +5538,8 @@
   // TODO(crbug.com/865101) Use
   // data.HasState(ax::mojom::State::kAutofillAvailable) instead of
   // IsFocusedInputWithSuggestions() and rmove the below comment: Note:
-  // suggestions are special-cased here because there is no way for the browser
-  // to know when a suggestion popup is available.
+  // suggestions are special-cased here because there is no way for the
+  // browser to know when a suggestion popup is available.
   if (data.HasIntAttribute(ax::mojom::IntAttribute::kHasPopup) ||
       IsFocusedInputWithSuggestions())
     msaa_state |= STATE_SYSTEM_HASPOPUP;
@@ -5501,9 +5601,9 @@
       if (data.role == ax::mojom::Role::kToggleButton) {
         msaa_state |= STATE_SYSTEM_PRESSED;
       } else if (data.role == ax::mojom::Role::kSwitch) {
-        // ARIA switches are exposed to Windows accessibility as toggle buttons.
-        // For maximum compatibility with ATs, we expose both the pressed and
-        // checked states.
+        // ARIA switches are exposed to Windows accessibility as toggle
+        // buttons. For maximum compatibility with ATs, we expose both the
+        // pressed and checked states.
         msaa_state |= STATE_SYSTEM_PRESSED | STATE_SYSTEM_CHECKED;
       } else {
         msaa_state |= STATE_SYSTEM_CHECKED;
@@ -5538,7 +5638,7 @@
   // Handle STATE_SYSTEM_FOCUSED
   //
   gfx::NativeViewAccessible focus = GetDelegate()->GetFocus();
-  if (focus == GetNativeViewAccessible())
+  if (focus == const_cast<AXPlatformNodeWin*>(this)->GetNativeViewAccessible())
     msaa_state |= STATE_SYSTEM_FOCUSED;
 
   // In focused single selection UI menus and listboxes, mirror item selection
@@ -5640,7 +5740,8 @@
 }
 
 base::string16 AXPlatformNodeWin::TextForIAccessibleText() {
-  // Special case allows us to get text even in non-HTML case, e.g. browser UI.
+  // Special case allows us to get text even in non-HTML case, e.g. browser
+  // UI.
   if (IsPlainTextField())
     return GetString16Attribute(ax::mojom::StringAttribute::kValue);
   return GetTextAsString16();
@@ -5758,7 +5859,8 @@
   return S_OK;
 }
 
-// TODO(dmazzoni): Remove this function once combo box refactoring is complete.
+// TODO(dmazzoni): Remove this function once combo box refactoring is
+// complete.
 bool AXPlatformNodeWin::IsAncestorComboBox() {
   auto* parent =
       static_cast<AXPlatformNodeWin*>(FromNativeViewAccessible(GetParent()));
@@ -5840,10 +5942,11 @@
       auto* sibling = static_cast<AXPlatformNodeWin*>(
           FromNativeViewAccessible(GetDelegate()->ChildAtIndex(i)));
       DCHECK(sibling);
-      if (sibling->IsTextOnlyObject())
+      if (sibling->IsTextOnlyObject()) {
         hypertext_offset += (int32_t)sibling->GetTextAsString16().size();
-      else
+      } else {
         ++hypertext_offset;
+      }
     }
     return hypertext_offset;
   }
@@ -5874,14 +5977,14 @@
     AXPlatformNodeWin* endpoint_object,
     int endpoint_offset) {
   // There are three cases:
-  // 1. Either the selection endpoint is inside this object or is an ancestor of
-  // of this object. endpoint_offset should be returned.
+  // 1. Either the selection endpoint is inside this object or is an ancestor
+  // of of this object. endpoint_offset should be returned.
   // 2. The selection endpoint is a pure descendant of this object. The offset
   // of the character corresponding to the subtree in which the endpoint is
   // located should be returned.
   // 3. The selection endpoint is in a completely different part of the tree.
-  // Either 0 or text_length should be returned depending on the direction that
-  // one needs to travel to find the endpoint.
+  // Either 0 or text_length should be returned depending on the direction
+  // that one needs to travel to find the endpoint.
 
   // Case 1.
   //
@@ -6024,9 +6127,9 @@
   // to guess what has changed.
   // -- NOT EDITABLE --
   // When part of the text changes, assume the entire node's text changed. For
-  // example, if "car" changes to "cat" then assume all 3 letters changed. Note,
-  // it is possible (though rare) that CharacterData methods are used to remove,
-  // insert, replace or append a substring.
+  // example, if "car" changes to "cat" then assume all 3 letters changed.
+  // Note, it is possible (though rare) that CharacterData methods are used to
+  // remove, insert, replace or append a substring.
   bool allow_partial_text_node_changes =
       GetData().HasState(ax::mojom::State::kEditable);
   size_t prefix_index = 0;
@@ -6066,7 +6169,7 @@
   if (!anchor_object)
     return -1;
 
-  int anchor_offset = GetDelegate()->GetTreeData().sel_anchor_offset;
+  int anchor_offset = int{GetDelegate()->GetTreeData().sel_anchor_offset};
   return GetHypertextOffsetFromEndpoint(anchor_object, anchor_offset);
 }
 
@@ -6077,7 +6180,7 @@
   if (!focus_object)
     return -1;
 
-  int focus_offset = GetDelegate()->GetTreeData().sel_focus_offset;
+  int focus_offset = int{GetDelegate()->GetTreeData().sel_focus_offset};
   return GetHypertextOffsetFromEndpoint(focus_object, focus_offset);
 }
 
@@ -6107,8 +6210,8 @@
   // object character.
   // Only case 3 refers to a valid selection because cases 1 and 2 fall
   // outside this object in their entirety.
-  // Selections that span more than one character are by definition inside this
-  // object, so checking them is not necessary.
+  // Selections that span more than one character are by definition inside
+  // this object, so checking them is not necessary.
   if (*selection_start == *selection_end && !HasCaret()) {
     *selection_start = -1;
     *selection_end = -1;
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h
index 130b5c8..8124c35 100644
--- a/ui/accessibility/platform/ax_platform_node_win.h
+++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -218,10 +218,11 @@
 extern AX_EXPORT base::ObserverList<IAccessible2UsageObserver>::Unchecked&
 GetIAccessible2UsageObserverList();
 
+// TODO(nektar): Remove multithread superclass since we don't support it.
 class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2"))
     AXPlatformNodeWin : public CComObjectRootEx<CComMultiThreadModel>,
-                        public IDispatchImpl<IAccessible2_2,
-                                             &IID_IAccessible2,
+                        public IDispatchImpl<IAccessible2_4,
+                                             &IID_IAccessible2_4,
                                              &LIBID_IAccessible2Lib>,
                         public IAccessibleEx,
                         public IAccessibleText,
@@ -245,11 +246,17 @@
                         public AXPlatformNodeBase {
  public:
   BEGIN_COM_MAP(AXPlatformNodeWin)
+    // TODO(nektar): Change the following to COM_INTERFACE_ENTRY(IDispatch).
     COM_INTERFACE_ENTRY2(IDispatch, IAccessible2_2)
+    COM_INTERFACE_ENTRY2(IUnknown, IDispatchImpl)
+    // TODO(nektar): Find a way to remove the following entry because it's not
+    // an interface.
     COM_INTERFACE_ENTRY(AXPlatformNodeWin)
     COM_INTERFACE_ENTRY(IAccessible)
     COM_INTERFACE_ENTRY(IAccessible2)
     COM_INTERFACE_ENTRY(IAccessible2_2)
+    COM_INTERFACE_ENTRY(IAccessible2_3)
+    COM_INTERFACE_ENTRY(IAccessible2_4)
     COM_INTERFACE_ENTRY(IAccessibleEx)
     COM_INTERFACE_ENTRY(IAccessibleText)
     COM_INTERFACE_ENTRY(IAccessibleTable)
@@ -285,12 +292,12 @@
   // AXPlatformNodeBase overrides.
   void Destroy() override;
   int GetIndexInParent() override;
-  base::string16 GetValue() override;
+  base::string16 GetValue() const override;
 
   // For the moment, we add a special version of this method which returns a
   // base::string16, but once the hypertext generation code is shared between
   // platforms we can just override AXPlatformNodeBase::GetText().
-  base::string16 GetTextAsString16();
+  base::string16 GetTextAsString16() const;
 
   //
   // IAccessible methods.
@@ -418,6 +425,18 @@
                                          LONG* caret_offset) override;
 
   //
+  // IAccessible2_3 methods.
+  //
+
+  IFACEMETHODIMP get_selectionRanges(IA2Range** ranges, LONG* nRanges);
+
+  //
+  // IAccessible2_4 methods.
+  //
+
+  IFACEMETHODIMP setSelectionRanges(LONG nRanges, IA2Range* ranges);
+
+  //
   // IAccessibleEx methods.
   //
 
@@ -822,7 +841,7 @@
  protected:
   AXPlatformNodeWin();
 
-  int MSAAState();
+  int MSAAState() const;
 
   int MSAARole();
   std::string StringOverrideForMSAARole();
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
index fbabaaf..a8acf70 100644
--- a/ui/android/BUILD.gn
+++ b/ui/android/BUILD.gn
@@ -187,47 +187,6 @@
   ]
 }
 
-# Generate an Android resources target that contains localized strings
-# describing the current locale used by the Android framework to display
-# UI strings. These are used by org.chromium.ui.base.LocalizationUtils.
-#
-# Variables:
-#    ui_locales: List of Chromium locale names to generate resources for.
-#
-template("generate_ui_locale_resources") {
-  _generating_target_name = "${target_name}__generate"
-  _rebased_output_zip_path = rebase_path(target_gen_dir, root_gen_dir)
-  _output_zip = "${root_out_dir}/resource_zips/${_rebased_output_zip_path}/" +
-                "${target_name}.zip"
-
-  _locales = invoker.ui_locales
-  _depfile = "$target_gen_dir/$target_name.d"
-
-  action(_generating_target_name) {
-    script = "build/create_ui_locale_resources.py"
-    depfile = _depfile
-    outputs = [
-      _output_zip,
-    ]
-    args = [
-      "--locale-list=$_locales",
-      "--depfile",
-      rebase_path(_depfile, root_build_dir),
-      "--output-zip",
-      rebase_path(_output_zip, root_build_dir),
-    ]
-  }
-
-  android_generated_resources(target_name) {
-    generating_target_name = ":$_generating_target_name"
-    generated_resources_zip = _output_zip
-  }
-}
-
-generate_ui_locale_resources("ui_locale_string_resources") {
-  ui_locales = locales
-}
-
 android_resources("ui_java_resources") {
   custom_package = "org.chromium.ui"
   resource_dirs = [ "java/res" ]
@@ -237,7 +196,6 @@
   }
 
   deps = [
-    ":ui_locale_string_resources",
     ":ui_strings_grd",
   ]
 }
diff --git a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
index 54215e2c..d9fb9ef 100644
--- a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
+++ b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
@@ -82,36 +82,6 @@
     }
 
     /**
-     * @return the current Chromium locale used to display UI elements.
-     *
-     * This matches what the Android framework resolves localized string resources to, using the
-     * system locale and the application's resources. For example, if the system uses a locale
-     * that is not supported by Chromium resources (e.g. 'fur-rIT'), Android will likely fallback
-     * to 'en-rUS' strings when Resources.getString() is called, and this method will return the
-     * matching Chromium name (i.e. 'en-US').
-     *
-     * Using this value is only necessary to ensure that the strings accessed from the locale .pak
-     * files from C++ match the resources displayed by the Java-based UI views.
-     */
-    public static String getUiLocaleStringForCompressedPak() {
-        String uiLocale = ContextUtils.getApplicationContext().getResources().getString(
-                org.chromium.ui.R.string.current_detected_ui_locale_name);
-        return uiLocale;
-    }
-
-    /**
-     * @return the language of the current Chromium locale used to display UI elements.
-     */
-    public static String getUiLanguageStringForCompressedPak() {
-        String uiLocale = getUiLocaleStringForCompressedPak();
-        int pos = uiLocale.indexOf('-');
-        if (pos > 0) {
-            return uiLocale.substring(0, pos);
-        }
-        return uiLocale;
-    }
-
-    /**
      * Return the asset split language associated with a given Chromium language.
      *
      * This matches the directory used to store language-based assets in bundle APK splits.
@@ -176,11 +146,7 @@
      *         but true for ("en-US", "en") (USA locale + English language).
      */
     public static boolean chromiumLocaleMatchesLanguage(String locale, String lang) {
-        int pos = locale.indexOf('-');
-        if (pos > 0) {
-            return locale.substring(0, pos).equals(lang);
-        }
-        return locale.equals(lang);
+        return LocaleUtils.toLanguage(locale).equals(lang);
     }
 
     private static native int nativeGetFirstStrongCharacterDirection(String string);
diff --git a/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java b/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java
index 6d7fda3..5f6e5a8 100644
--- a/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java
+++ b/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java
@@ -44,10 +44,11 @@
 
     private class ExtractTask extends AsyncTask<Void> {
         private final List<Runnable> mCompletionCallbacks = new ArrayList<Runnable>();
+        private final String mUiLanguage;
 
         private void doInBackgroundImpl() {
             final File outputDir = getOutputDir();
-            String[] assetPaths = detectFilesToExtract();
+            String[] assetPaths = detectFilesToExtract(mUiLanguage);
 
             // Use a suffix for extracted files in order to guarantee that the version of the file
             // on disk matches up with the version of the APK.
@@ -124,6 +125,10 @@
                 TraceEvent.end("ResourceExtractor.ExtractTask.onPostExecute");
             }
         }
+
+        public ExtractTask(String uiLanguage) {
+            mUiLanguage = uiLanguage;
+        }
     }
 
     private ExtractTask mExtractTask;
@@ -137,7 +142,7 @@
         return sInstance;
     }
 
-    private static String[] detectFilesToExtract() {
+    private static String[] detectFilesToExtract(String uiLanguage) {
         Locale defaultLocale = Locale.getDefault();
         String androidLanguage = defaultLocale.getLanguage();
         String chromiumLanguage = LocaleUtils.getUpdatedLanguageForChromium(androidLanguage);
@@ -145,7 +150,6 @@
         // NOTE: The UI language will differ from the application's language
         // when the system locale is not directly supported by Chrome's
         // resources.
-        String uiLanguage = LocalizationUtils.getUiLanguageStringForCompressedPak();
         Log.i(TAG, "Using UI locale %s, system locale: %s (Android name: %s)", uiLanguage,
                 chromiumLanguage, androidLanguage);
 
@@ -300,7 +304,7 @@
      * AsyncTask. Call waitForCompletion() at the point resources
      * are needed to block until the task completes.
      */
-    public void startExtractingResources() {
+    public void startExtractingResources(String uiLanguage) {
         if (mExtractTask != null) {
             return;
         }
@@ -313,7 +317,7 @@
             return;
         }
 
-        mExtractTask = new ExtractTask();
+        mExtractTask = new ExtractTask(uiLanguage);
         mExtractTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }
 
diff --git a/ui/android/java/src/org/chromium/ui/widget/Toast.java b/ui/android/java/src/org/chromium/ui/widget/Toast.java
index aa8a39f..7ae15c5 100644
--- a/ui/android/java/src/org/chromium/ui/widget/Toast.java
+++ b/ui/android/java/src/org/chromium/ui/widget/Toast.java
@@ -29,6 +29,8 @@
     public static final int LENGTH_SHORT = android.widget.Toast.LENGTH_SHORT;
     public static final int LENGTH_LONG = android.widget.Toast.LENGTH_LONG;
 
+    private static int sExtraYOffset;
+
     private android.widget.Toast mToast;
     private ViewGroup mSWLayout;
 
@@ -61,6 +63,8 @@
 
             setView(toast.getView());
         }
+        mToast.setGravity(
+                mToast.getGravity(), mToast.getXOffset(), mToast.getYOffset() + sExtraYOffset);
     }
 
     public android.widget.Toast getAndroidToast() {
@@ -155,4 +159,13 @@
             throws Resources.NotFoundException {
         return makeText(context, context.getResources().getText(resId), duration);
     }
+
+    /**
+     * Set extra Y offset for toasts all toasts created with this class. This can be overridden by
+     * calling {@link Toast#setGravity(int, int, int)} on an individual toast.
+     * @param yOffsetPx The Y offset from the normal toast position in px.
+     */
+    public static void setGlobalExtraYOffset(int yOffsetPx) {
+        sExtraYOffset = yOffsetPx;
+    }
 }
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn
index 5d09ab6..31e616eb 100644
--- a/ui/webui/resources/cr_elements/BUILD.gn
+++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -14,6 +14,7 @@
     "cr_dialog:closure_compile",
     "cr_drawer:closure_compile",
     "cr_expand_button:closure_compile",
+    "cr_icon_button:closure_compile",
     "cr_input:closure_compile",
     "cr_link_row:closure_compile",
     "cr_profile_avatar_selector:closure_compile",
diff --git a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html
index 066ce12..d57b3e3 100644
--- a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html
+++ b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html
@@ -1,17 +1,18 @@
 <link rel="import" href="../../html/polymer.html">
 
+<link rel="import" href="../cr_icon_button/cr_icon_button.html">
 <link rel="import" href="../cr_icons_css.html">
 <link rel="import" href="../shared_style_css.html">
 <link rel="import" href="../shared_vars_css.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
 
 <dom-module id="cr-expand-button">
   <template>
-    <style include="cr-icons cr-shared-style">
+    <style include="cr-shared-style cr-icons">
       :host {
         @apply --cr-actionable;
         align-items: center;
         display: flex;
+        outline: none;
       }
 
       :host([disabled]) {
@@ -19,10 +20,6 @@
         pointer-events: none;
       }
 
-      paper-icon-button-light {
-        @apply --cr-paper-icon-button-margin;
-      }
-
       #label {
         flex: 1;
         padding: var(--cr-section-vertical-padding) 0;
@@ -30,12 +27,9 @@
     </style>
 
     <div id="label"><slot></slot></div>
-    <paper-icon-button-light class$="[[iconName_(expanded)]]">
-      <button disabled="[[disabled]]" aria-label$="[[alt]]"
-          aria-pressed$="[[getAriaPressed_(expanded)]]"
-          tabindex$="[[tabIndex]]">
-      </button>
-    </paper-icon-button-light>
+    <cr-icon-button class$="[[iconName_(expanded)]]" disabled="[[disabled]]"
+        aria-label$="[[alt]]" aria-pressed$="[[getAriaPressed_(expanded)]]"
+        tabindex="[[tabIndex]]"></cr-icon-button>
   </template>
   <script src="cr_expand_button.js"></script>
 </dom-module>
diff --git a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
index 2637e07..5c667fc 100644
--- a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
+++ b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
@@ -15,12 +15,20 @@
      * If true, the button is in the expanded state and will show the
      * 'expand-less' icon. If false, the button shows the 'expand-more' icon.
      */
-    expanded: {type: Boolean, value: false, notify: true},
+    expanded: {
+      type: Boolean,
+      value: false,
+      notify: true,
+    },
 
     /**
      * If true, the button will be disabled and grayed out.
      */
-    disabled: {type: Boolean, value: false, reflectToAttribute: true},
+    disabled: {
+      type: Boolean,
+      value: false,
+      reflectToAttribute: true,
+    },
 
     /** A11y text descriptor for this control. */
     alt: String,
@@ -29,24 +37,13 @@
       type: Number,
       value: 0,
     },
-
   },
 
   listeners: {
-    'blur': 'onBlur_',
     'click': 'toggleExpand_',
-    'focus': 'onFocus_',
-    'keypress': 'onKeyPress_',
-    'pointerdown': 'onPointerDown_',
   },
 
   /**
-   * Used to differentiate pointer and keyboard click events.
-   * @private {boolean}
-   */
-  fromPointer_: false,
-
-  /**
    * @param {boolean} expanded
    * @private
    */
@@ -62,31 +59,6 @@
     return expanded ? 'icon-expand-less' : 'icon-expand-more';
   },
 
-  /** @private */
-  onBlur_: function() {
-    this.updateRippleHoldDown_(false);
-  },
-
-  /** @private */
-  onFocus_: function() {
-    this.updateRippleHoldDown_(true);
-  },
-
-  /**
-   * @param {!Event} event
-   * @private
-   */
-  onKeyPress_: function(event) {
-    if (event.key == ' ' || event.key == 'Enter') {
-      this.updateRippleHoldDown_(true);
-    }
-  },
-
-  /** @private */
-  onPointerDown_: function() {
-    this.fromPointer_ = true;
-  },
-
   /**
    * @param {!Event} event
    * @private
@@ -99,22 +71,6 @@
 
     this.expanded = !this.expanded;
 
-    // If this event originated from a pointer, then |ripple.holdDown| should
-    // preemptively be set to false to allow ripple to animate.
-    if (this.fromPointer_) {
-      this.updateRippleHoldDown_(false);
-    }
-    this.fromPointer_ = false;
-  },
-
-  /**
-   * @param {boolean} holdDown
-   * @private
-   */
-  updateRippleHoldDown_: function(holdDown) {
-    const button = /** @type {{ensureRipple: Function, getRipple: Function}} */
-        (this.$$('paper-icon-button-light'));
-    button.ensureRipple();
-    button.getRipple().holdDown = holdDown;
+    this.$$('cr-icon-button').focus();
   },
 });
diff --git a/ui/webui/resources/cr_elements/cr_icon_button/BUILD.gn b/ui/webui/resources/cr_elements/cr_icon_button/BUILD.gn
new file mode 100644
index 0000000..6264d36
--- /dev/null
+++ b/ui/webui/resources/cr_elements/cr_icon_button/BUILD.gn
@@ -0,0 +1,17 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/closure_compiler/compile_js.gni")
+
+js_type_check("closure_compile") {
+  deps = [
+    ":cr_icon_button",
+  ]
+}
+
+js_library("cr_icon_button") {
+  deps = [
+    "//third_party/polymer/v1_0/components-chromium/paper-behaviors:paper-ripple-behavior-extracted",
+  ]
+}
diff --git a/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.html b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.html
new file mode 100644
index 0000000..9212a29
--- /dev/null
+++ b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.html
@@ -0,0 +1,71 @@
+<link rel="import" href="../../html/polymer.html">
+
+<link rel="import" href="../shared_vars_css.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/paper-behaviors/paper-ripple-behavior.html">
+
+<dom-module id="cr-icon-button">
+  <template>
+    <style>
+      :host {
+        --cr-icon-button-color: var(--google-grey-refresh-700);
+        --cr-icon-button-icon-padding: 8px;
+        --cr-icon-button-icon-size: 20px;
+        --cr-icon-button-ripple-color: var(--google-grey-900);
+        --cr-icon-button-ripple-size: calc(var(--cr-icon-button-icon-size) +
+            2 * var(--cr-icon-button-icon-padding));
+        --cr-icon-button-size: var(--cr-icon-button-ripple-size);
+        background-position: center;
+        background-repeat: no-repeat;
+        background-size: var(--cr-icon-button-icon-size);
+        color: var(--cr-icon-button-color);
+        cursor: pointer;
+        height: var(--cr-icon-button-size);
+        margin-inline-end: var(--cr-icon-ripple-margin);
+        margin-inline-start: var(--cr-icon-button-margin-start);
+        outline: none;
+        user-select: none;
+        width: var(--cr-icon-button-size);
+      }
+
+      :host([disabled]) {
+        cursor: initial;
+        opacity: var(--cr-disabled-opacity);
+        pointer-events: none;
+      }
+
+      :host-context([dir=rtl]) {
+        transform: scaleX(-1);  /* Invert X: flip on the Y axis (aka mirror). */
+      }
+
+      :host-context([dark]) {
+        --cr-icon-button-color: var(--google-grey-refresh-500);
+        --cr-icon-button-ripple-color: var(--google-grey-refresh-500);
+      }
+
+      :host paper-ripple {
+        --paper-ripple-opacity: .15;
+        color: var(--cr-icon-button-ripple-color);
+      }
+
+      :host-context([dark]) paper-ripple {
+        --paper-ripple-opacity: .4;
+      }
+
+      #icon {
+        height: var(--cr-icon-button-ripple-size);
+        /* The |_rippleContainer| must be position relative. */
+        position: relative;
+        width: var(--cr-icon-button-ripple-size);
+      }
+
+      iron-icon {
+        --iron-icon-height: var(--cr-icon-button-icon-size);
+        --iron-icon-width: var(--cr-icon-button-icon-size);
+        padding: var(--cr-icon-button-icon-padding);
+      }
+    </style>
+    <div id="icon"></div>
+  </template>
+  <script src="cr_icon_button.js"></script>
+</dom-module>
diff --git a/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.js b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.js
new file mode 100644
index 0000000..2d909e1
--- /dev/null
+++ b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.js
@@ -0,0 +1,165 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview 'cr-icon-button' is a button which displays an icon with a
+ * ripple. It can be interacted with like a normal button using click as well as
+ * space and enter to effectively click the button and fire a 'click' event.
+ *
+ * There are two sources to icons, cr-icons and iron-iconset-svg. The cr-icon's
+ * are defined as background images with a reference to a resource file
+ * associated with a CSS class name. The iron-icon's are defined as inline SVG's
+ * under a key that is stored in a global map that is accessible to the
+ * iron-icon element.
+ *
+ * Example of using a cr-icon:
+ * <link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html">
+ * <dom-module id="module">
+ *   <template>
+ *     <style includes="cr-icons"></style>
+ *     <cr-icon-button class="icon-class-name"></cr-icon-button>
+ *   </template>
+ * </dom-module>
+ *
+ * Example of using an iron-icon:
+ * <link rel="import" href="chrome://resources/cr_elements/icons.html">
+ * <cr-icon-button iron-icon="cr:icon-key"></cr-icon-button>
+ */
+Polymer({
+  is: 'cr-icon-button',
+
+  behaviors: [
+    Polymer.PaperRippleBehavior,
+  ],
+
+  properties: {
+    disabled: {
+      type: Boolean,
+      value: false,
+      reflectToAttribute: true,
+      observer: 'disabledChanged_',
+    },
+
+    ironIcon: {
+      type: String,
+      observer: 'onIronIconChanged_',
+    },
+  },
+
+  hostAttributes: {
+    'aria-disabled': 'false',
+    role: 'button',
+    tabindex: 0,
+  },
+
+  listeners: {
+    blur: 'hideRipple_',
+    click: 'onClick_',
+    focus: 'showRipple_',
+    keydown: 'onKeyDown_',
+    keyup: 'onKeyUp_',
+    up: 'hideRipple_',
+  },
+
+  /** @private */
+  hideRipple_: function() {
+    this.getRipple().holdDown = false;
+  },
+
+  /** @private */
+  showRipple_: function() {
+    this.getRipple().holdDown = true;
+  },
+
+  /** @private */
+  disabledChanged_: function() {
+    if (this.disabled) {
+      this.blur();
+    }
+    this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
+    this.setAttribute('tabindex', this.disabled ? '-1' : '0');
+  },
+
+  /**
+   * @param {!Event} e
+   * @private
+   */
+  onClick_: function(e) {
+    if (this.disabled) {
+      e.stopImmediatePropagation();
+    }
+  },
+
+  /** @private */
+  onIronIconChanged_: function() {
+    let ironIconElement = this.$$('iron-icon');
+    if (this.ironIcon) {
+      if (!ironIconElement) {
+        ironIconElement = document.createElement('iron-icon');
+        this.$.icon.appendChild(ironIconElement);
+      }
+      ironIconElement.icon = this.ironIcon;
+      return;
+    }
+
+    if (ironIconElement) {
+      ironIconElement.remove();
+    }
+  },
+
+  /**
+   * @param {!KeyboardEvent} e
+   * @private
+   */
+  onIconKeydown_: function(e) {
+    if (e.shiftKey && e.key === 'Tab') {
+      this.focus();
+    }
+  },
+
+  /**
+   * @param {!KeyboardEvent} e
+   * @private
+   */
+  onKeyDown_: function(e) {
+    if (e.key != ' ' && e.key != 'Enter') {
+      return;
+    }
+
+    e.preventDefault();
+    e.stopPropagation();
+    if (e.repeat) {
+      return;
+    }
+
+    if (e.key == 'Enter') {
+      this.click();
+    }
+  },
+
+  /**
+   * @param {!KeyboardEvent} e
+   * @private
+   */
+  onKeyUp_: function(e) {
+    if (e.key == ' ' || e.key == 'Enter') {
+      e.preventDefault();
+      e.stopPropagation();
+    }
+
+    if (e.key == ' ') {
+      this.click();
+    }
+  },
+
+  // customize the element's ripple
+  _createRipple: function() {
+    this._rippleContainer = this.$.icon;
+    const ripple = Polymer.PaperRippleBehavior._createRipple();
+    ripple.id = 'ink';
+    ripple.setAttribute('recenters', '');
+    ripple.classList.add('circle');
+    return ripple;
+  },
+});
diff --git a/ui/webui/resources/cr_elements/cr_icons_css.html b/ui/webui/resources/cr_elements/cr_icons_css.html
index a686eea..7a99559 100644
--- a/ui/webui/resources/cr_elements/cr_icons_css.html
+++ b/ui/webui/resources/cr_elements/cr_icons_css.html
@@ -33,149 +33,209 @@
         width: var(--cr-icon-ripple-size);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).no-overlap {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).no-overlap {
         margin-inline-end: 0;
         margin-inline-start: 0;
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-back {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-arrow-back {
         background-image: url(../images/icon_arrow_back.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-back {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-arrow-back {
         background-image: url(../images/dark/icon_arrow_back.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-cancel {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-cancel {
         background-image: url(../images/icon_cancel.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-cancel {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-cancel {
         background-image: url(../images/dark/icon_cancel.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-cancel {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-toolbar-cancel {
         background-image: url(../images/icon_toolbar_cancel.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-cancel {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-toolbar-cancel {
         background-image: url(../images/dark/icon_toolbar_cancel.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-clear {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-clear {
         background-image: url(../images/icon_clear.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-clear {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-clear {
         background-image: url(../images/dark/icon_clear.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-delete-gray {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-delete-gray {
         background-image: url(../images/icon_delete_gray.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-delete-gray {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-delete-gray {
         background-image: url(../images/dark/icon_delete_gray.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-picture-delete {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-picture-delete {
         background-image: url(../images/icon_picture_delete.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-picture-delete {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-picture-delete {
         background-image: url(../images/dark/icon_picture_delete.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-less {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-expand-less {
         background-image: url(../images/icon_expand_less.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-less {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-expand-less {
         background-image: url(../images/dark/icon_expand_less.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-more {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-expand-more {
         background-image: url(../images/icon_expand_more.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-more {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-expand-more {
         background-image: url(../images/dark/icon_expand_more.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-external {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-external {
         background-image: url(../images/open_in_new.svg);
       }
       /* Open in new is the same for light and dark mode. */
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-menu {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-toolbar-menu {
         background-image: url(../images/icon_toolbar_menu.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-menu {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-toolbar-menu {
         background-image: url(../images/dark/icon_toolbar_menu.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-more-vert {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-more-vert {
         background-image: url(../images/icon_more_vert.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-more-vert {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-more-vert {
         background-image: url(../images/dark/icon_more_vert.svg);
       }
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-more-vert-light-mode {
+        background-image: url(../images/icon_more_vert.svg);
+      }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-refresh {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-refresh {
         background-image: url(../images/icon_refresh.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-refresh {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-refresh {
         background-image: url(../images/dark/icon_refresh.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-settings {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-settings {
         background-image: url(../images/icon_settings.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-settings {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-settings {
         background-image: url(../images/dark/icon_settings.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-search {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-search {
         background-image: url(../images/icon_search.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-search {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-search {
         background-image: url(../images/dark/icon_search.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-dropdown {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-arrow-dropdown {
         background-image: url(../images/icon_arrow_dropdown.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-dropdown {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-arrow-dropdown {
         background-image: url(../images/dark/icon_arrow_dropdown.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).subpage-arrow {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).subpage-arrow {
         background-image: url(../images/arrow_right.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).subpage-arrow {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).subpage-arrow {
         background-image: url(../images/dark/arrow_right.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-visibility {
         background-image: url(../images/icon_visibility.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-visibility {
         background-image: url(../images/dark/icon_visibility.svg);
       }
 
-      :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility-off {
+      :-webkit-any(paper-icon-button-light,
+                   cr-icon-button,
+                   .cr-icon).icon-visibility-off {
         background-image: url(../images/icon_visibility_off.svg);
       }
-      :host-context([dark])
-          :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility-off {
+      :host-context([dark]) :-webkit-any(paper-icon-button-light,
+                                         cr-icon-button,
+                                         .cr-icon).icon-visibility-off {
         background-image: url(../images/dark/icon_visibility_off.svg);
       }
     </style>
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
index 5c86c8c..22ae33b2 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
@@ -1,15 +1,16 @@
 <link rel="import" href="../../html/polymer.html">
 
+<link rel="import" href="../cr_icon_button/cr_icon_button.html">
 <link rel="import" href="../cr_search_field/cr_search_field_behavior.html">
+<link rel="import" href="../cr_icons_css.html">
 <link rel="import" href="../icons.html">
 <link rel="import" href="../shared_style_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html">
 
 <dom-module id="cr-toolbar-search-field">
   <template>
-    <style include="cr-shared-style">
+    <style include="cr-shared-style cr-icons">
       :host {
         align-items: center;
         display: flex;
@@ -23,8 +24,7 @@
         display: none !important;
       }
 
-      paper-icon-button-light,
-      paper-icon-button {
+      paper-icon-button-light {
         height: 32px;
         margin: 6px;
         min-width: 32px;
@@ -32,6 +32,17 @@
         width: 32px;
       }
 
+      cr-icon-button {
+        --cr-icon-button-color: white;
+        --cr-icon-button-icon-padding: 6px;
+        --cr-icon-button-ripple-color: white;
+        margin: 6px;
+      }
+
+      :host-context([dark]) cr-icon-button {
+        --cr-icon-button-color: var(--google-grey-200);
+      }
+
       #icon {
         transition: margin 150ms, opacity 200ms;
       }
@@ -136,10 +147,10 @@
       <paper-spinner-lite active="[[isSpinnerShown_]]">
       </paper-spinner-lite>
     </template>
-    <paper-icon-button id="icon" icon="cr:search" title="[[label]]"
-        tabindex$="[[computeIconTabIndex_(narrow)]]"
-        aria-hidden$="[[computeIconAriaHidden_(narrow)]]">
-    </paper-icon-button>
+    <cr-icon-button id="icon" iron-icon="cr:search" title="[[label]]"
+        tabindex$="[[computeIconTabIndex_(narrow, hasSearchText)]]"
+        aria-hidden$="[[computeIconAriaHidden_(narrow, hasSearchText)]]">
+    </cr-icon-button>
     <div id="searchTerm">
       <label id="prompt" for="searchInput" aria-hidden="true">[[label]]</label>
       <input id="searchInput"
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
index 0c785aa..cef431c 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
@@ -77,7 +77,7 @@
    * @private
    */
   computeIconTabIndex_: function(narrow) {
-    return narrow ? 0 : -1;
+    return narrow && !this.hasSearchText ? 0 : -1;
   },
 
   /**
@@ -86,7 +86,7 @@
    * @private
    */
   computeIconAriaHidden_: function(narrow) {
-    return Boolean(!narrow).toString();
+    return Boolean(!narrow || this.hasSearchText).toString();
   },
 
   /**
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
index e750064d..9e35dc8 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
@@ -1,15 +1,14 @@
 <link rel="import" href="../../html/polymer.html">
 
-<link rel="import" href="../cr_icons_css.html">
+<link rel="import" href="../cr_icon_button/cr_icon_button.html">
 <link rel="import" href="../icons.html">
 <link rel="import" href="../paper_button_style_css.html">
 <link rel="import" href="../shared_vars_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
 
 <dom-module id="cr-toolbar-selection-overlay">
   <template>
-    <style include="cr-icons paper-button-style">
+    <style include="paper-button-style">
       :host {
         background-color: white;
         border-bottom: 1px solid var(--google-grey-300);
@@ -59,30 +58,23 @@
         flex: 1;
       }
 
-      paper-icon-button-light {
+
+      cr-icon-button {
         height: 36px;
         margin-inline-end: 24px;
         margin-inline-start: 2px;
         width: 36px;
       }
-
-      button iron-icon {
-        height: 20px;
-        width: 20px;
-      }
     </style>
     <template is="dom-if" if="[[hasShown_]]">
       <div id="overlay-content">
-        <paper-icon-button-light>
-          <button on-tap="onClearSelectionTap_" title="[[cancelLabel]]">
-            <iron-icon icon="cr:clear"></iron-icon>
-          </button>
-        </paper-icon-button-light>
+        <cr-icon-button title="[[cancelLabel]]" iron-icon="cr:clear"
+            on-click="onClearSelectionClick_"></cr-icon-button>
         <div id="number-selected">[[selectionLabel_]]</div>
-        <paper-button on-tap="onClearSelectionTap_">
+        <paper-button on-click="onClearSelectionClick_">
           [[cancelLabel]]
         </paper-button>
-        <paper-button id="delete" on-tap="onDeleteTap_"
+        <paper-button id="delete" on-click="onDeleteClick_"
             disabled="[[deleteDisabled]]">
           [[deleteLabel]]
         </paper-button>
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js
index f0cfb40..1afd0dca 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js
@@ -48,12 +48,12 @@
   },
 
   /** @private */
-  onClearSelectionTap_: function() {
+  onClearSelectionClick_: function() {
     this.fire('clear-selected-items');
   },
 
   /** @private */
-  onDeleteTap_: function() {
+  onDeleteClick_: function() {
     this.fire('delete-selected-items');
   },
 
diff --git a/ui/webui/resources/cr_elements_resources.grdp b/ui/webui/resources/cr_elements_resources.grdp
index 5b2191a..502175ea 100644
--- a/ui/webui/resources/cr_elements_resources.grdp
+++ b/ui/webui/resources/cr_elements_resources.grdp
@@ -69,6 +69,14 @@
              file="cr_elements/cr_expand_button/cr_expand_button.js"
              type="chrome_html"
              compress="gzip" />
+  <structure name="IDR_CR_ELEMENTS_CR_ICON_BUTTON_HTML"
+             file="cr_elements/cr_icon_button/cr_icon_button.html"
+             type="chrome_html"
+             compress="gzip" />
+  <structure name="IDR_CR_ELEMENTS_CR_ICON_BUTTON_JS"
+             file="cr_elements/cr_icon_button/cr_icon_button.js"
+             type="chrome_html"
+             compress="gzip" />
   <structure name="IDR_CR_ELEMENTS_ICONS_HTML"
              file="cr_elements/icons.html"
              type="chrome_html"