[arvados] updated: 2.7.0-5313-g4ad6191d53

git repository hosting git at public.arvados.org
Mon Nov 6 20:28:29 UTC 2023


Summary of changes:
 .licenseignore                                     |   21 +
 AUTHORS                                            |    1 +
 apps/workbench/Gemfile                             |    7 +-
 apps/workbench/Gemfile.lock                        |   60 +-
 .../app/assets/stylesheets/application.css.scss    |   11 +
 .../app/controllers/application_controller.rb      |    6 +-
 .../app/controllers/collections_controller.rb      |    6 +-
 .../controllers/container_requests_controller.rb   |    2 +-
 .../app/controllers/projects_controller.rb         |    6 +-
 .../app/controllers/work_units_controller.rb       |    2 +-
 apps/workbench/app/models/arvados_base.rb          |    4 +-
 apps/workbench/app/views/layouts/body.html.erb     |   28 +-
 .../app/views/workflows/_show_definition.html.erb  |    2 +-
 .../workbench/test/integration/ajax_errors_test.rb |    2 +-
 .../test/integration/collection_upload_test.rb     |    6 +-
 apps/workbench/test/integration/search_box_test.rb |    2 +-
 .../collection_unit_test.rb                        |    2 +-
 build/package-build-dockerfiles/rocky8/Dockerfile  |    2 +-
 build/package-test-dockerfiles/rocky8/Dockerfile   |    2 +-
 build/run-build-packages-one-target.sh             |   39 +-
 build/run-build-test-packages-one-target.sh        |   11 +-
 build/run-library.sh                               |   17 +-
 build/run-tests.sh                                 |   38 +-
 cmd/arvados-client/container_gateway.go            |   30 +-
 cmd/arvados-client/container_gateway_test.go       |  128 +-
 doc/README.textile                                 |    2 +-
 doc/Rakefile                                       |    4 +-
 doc/_config.yml                                    |   22 +-
 .../_multi_host_install_custom_certificates.liquid |   11 +-
 doc/_includes/_ssl_config_multi.liquid             |   33 +
 doc/admin/diagnostics.html.textile.liquid          |   16 +
 .../logs-table-management.html.textile.liquid      |   12 +-
 ...restricting-upload-download.html.textile.liquid |    4 +-
 doc/admin/scoped-tokens.html.textile.liquid        |    2 +
 doc/admin/upgrading.html.textile.liquid            |   43 +-
 doc/admin/user-management-cli.html.textile.liquid  |    2 +-
 doc/admin/user-management.html.textile.liquid      |   43 +-
 doc/api/crunch-scripts.html.textile.liquid         |    4 +-
 doc/api/index.html.textile.liquid                  |    8 +-
 .../api_client_authorizations.html.textile.liquid  |   11 +-
 doc/api/methods/collections.html.textile.liquid    |    2 +-
 doc/api/methods/groups.html.textile.liquid         |    4 +-
 doc/api/methods/humans.html.textile.liquid         |    4 +-
 doc/api/methods/job_tasks.html.textile.liquid      |    4 +-
 doc/api/methods/jobs.html.textile.liquid           |    4 +-
 doc/api/methods/keep_disks.html.textile.liquid     |    6 +-
 doc/api/methods/nodes.html.textile.liquid          |    4 +
 .../methods/pipeline_instances.html.textile.liquid |    4 +-
 .../methods/pipeline_templates.html.textile.liquid |    4 +-
 doc/api/methods/repositories.html.textile.liquid   |    4 +
 doc/api/methods/specimens.html.textile.liquid      |    4 +-
 doc/api/methods/traits.html.textile.liquid         |    4 +-
 doc/api/tokens.html.textile.liquid                 |    4 +-
 doc/images/switch-to-wb1.png                       |  Bin 35755 -> 0 bytes
 doc/images/switch-to-wb2.png                       |  Bin 43350 -> 0 bytes
 doc/images/wgs-tutorial/image1.png                 |  Bin 223266 -> 79811 bytes
 doc/images/wgs-tutorial/image4.png                 |  Bin 78882 -> 156330 bytes
 doc/images/wgs-tutorial/image5.png                 |  Bin 315990 -> 217834 bytes
 doc/images/wgs-tutorial/image6.png                 |  Bin 287176 -> 30881 bytes
 doc/images/wgs-tutorial/image7.png                 |  Bin 0 -> 103920 bytes
 doc/images/wgs-tutorial/image8.png                 |  Bin 0 -> 80845 bytes
 .../install-dispatch-cloud.html.textile.liquid     |    2 +-
 .../install-workbench2-app.html.textile.liquid     |    2 +-
 doc/install/salt-multi-host.html.textile.liquid    |   80 +-
 doc/install/workbench.html.textile.liquid          |    6 +
 doc/pysdk_pdoc.py                                  |   51 +
 doc/user/topics/arv-copy.html.textile.liquid       |   32 +-
 .../topics/workbench-migration.html.textile.liquid |    8 -
 ...l-keep-collection-lifecycle.html.textile.liquid |    8 +-
 .../tutorials/wgs-tutorial.html.textile.liquid     |   73 +-
 lib/boot/helpers.go                                |    2 +-
 lib/cloud/ec2/ec2.go                               |   29 +-
 lib/cloud/ec2/ec2_test.go                          |    9 +-
 lib/cloud/interfaces.go                            |   14 +
 lib/config/config.default.yml                      |   17 +-
 lib/config/export.go                               |    1 +
 lib/controller/federation_test.go                  |    2 +-
 lib/controller/handler.go                          |   11 +-
 lib/controller/localdb/container_test.go           |    3 +
 lib/controller/localdb/login_oidc.go               |   33 +-
 lib/controller/rpc/conn_test.go                    |   36 +-
 lib/crunchrun/crunchrun.go                         |   23 +-
 lib/crunchrun/crunchrun_test.go                    |   10 +-
 lib/diagnostics/cmd.go                             |  147 +-
 lib/dispatchcloud/dispatcher_test.go               |   18 +-
 lib/dispatchcloud/scheduler/interfaces.go          |    1 +
 lib/dispatchcloud/scheduler/run_queue.go           |   32 +-
 lib/dispatchcloud/scheduler/run_queue_test.go      |  115 +
 lib/dispatchcloud/worker/pool.go                   |   42 +-
 lib/install/deps.go                                |   22 +-
 lib/service/cmd.go                                 |   23 +-
 lib/service/cmd_test.go                            |   71 +-
 sdk/cli/Gemfile                                    |    1 -
 sdk/cli/arvados-cli.gemspec                        |   13 +-
 sdk/cwl/arvados_cwl/__init__.py                    |   14 +-
 sdk/cwl/arvados_cwl/arv-cwl-schema-v1.2.yml        |   19 +
 sdk/cwl/arvados_cwl/arvcontainer.py                |   12 +-
 sdk/cwl/arvados_cwl/arvtool.py                     |    9 +-
 sdk/cwl/arvados_cwl/arvworkflow.py                 |  104 +-
 sdk/cwl/arvados_cwl/context.py                     |    3 +
 sdk/cwl/arvados_cwl/executor.py                    |   24 +-
 sdk/cwl/arvados_cwl/pathmapper.py                  |    3 +-
 sdk/cwl/arvados_cwl/runner.py                      |   43 +-
 sdk/cwl/setup.py                                   |    5 +-
 sdk/cwl/tests/arvados-tests.yml                    |    6 +
 sdk/cwl/tests/test_container.py                    |    6 +-
 sdk/cwl/tests/test_submit.py                       |  119 +-
 sdk/cwl/tests/tool/submit_tool_map.cwl             |   24 +
 sdk/cwl/tests/wf/expect_upload_wrapper_map.cwl     |   88 +
 sdk/cwl/tests/wf/runseparate-wf.cwl                |   68 +
 sdk/cwl/tests/wf/submit_wf_map.cwl                 |   25 +
 sdk/go/arvados/config.go                           |   14 +-
 sdk/go/arvados/keep_service.go                     |    3 +-
 sdk/go/arvados/tls_certs.go                        |   23 +
 sdk/go/arvados/tls_certs_test.go                   |   32 +
 sdk/go/arvados/tls_certs_test_showenv.go           |   22 +
 sdk/go/arvadosclient/arvadosclient.go              |   36 +-
 sdk/python/arvados-v1-discovery.json               | 3824 ++++++++++----------
 sdk/python/arvados/__init__.py                     |    9 +
 sdk/python/arvados/_pycurlhelper.py                |    1 +
 sdk/python/arvados/api.py                          |  223 +-
 sdk/python/arvados/collection.py                   | 2223 +++++++-----
 sdk/python/arvados/commands/arv_copy.py            |  288 +-
 sdk/python/arvados/commands/federation_migrate.py  |   15 +-
 sdk/python/arvados/commands/get.py                 |    3 +-
 sdk/python/arvados/commands/keepdocker.py          |   15 +-
 sdk/python/arvados/commands/migrate19.py           |    2 +
 sdk/python/arvados/crunch.py                       |    2 +
 sdk/python/arvados/http_to_keep.py                 |   62 +-
 sdk/python/arvados/retry.py                        |   58 +-
 sdk/python/arvados/safeapi.py                      |    4 +-
 sdk/python/arvados/stream.py                       |    2 +
 sdk/python/arvados/util.py                         |  111 +-
 sdk/python/discovery2pydoc.py                      |   20 +-
 sdk/python/setup.py                                |   15 +-
 sdk/python/tests/test_http.py                      |   35 +-
 sdk/python/tests/test_util.py                      |   43 +-
 sdk/ruby-google-api-client/.gitignore              |   20 +
 sdk/ruby-google-api-client/.rspec                  |    2 +
 sdk/ruby-google-api-client/.travis.yml             |   23 +
 sdk/ruby-google-api-client/.yardopts               |    7 +
 sdk/ruby-google-api-client/CHANGELOG.md            |  178 +
 sdk/ruby-google-api-client/CONTRIBUTING.md         |   32 +
 sdk/ruby-google-api-client/Gemfile                 |    9 +
 sdk/ruby-google-api-client/LICENSE                 |  202 ++
 sdk/ruby-google-api-client/README.md               |    7 +
 sdk/ruby-google-api-client/Rakefile                |   41 +
 .../arvados-google-api-client.gemspec              |   46 +
 sdk/ruby-google-api-client/lib/cacerts.pem         | 2183 +++++++++++
 .../lib/compat/multi_json.rb                       |   19 +
 .../lib/google/api_client.rb                       |  756 ++++
 .../api_client/auth/compute_service_account.rb     |   28 +
 .../lib/google/api_client/auth/file_storage.rb     |   59 +
 .../lib/google/api_client/auth/installed_app.rb    |  126 +
 .../lib/google/api_client/auth/jwt_asserter.rb     |  126 +
 .../lib/google/api_client/auth/key_utils.rb        |   93 +
 .../lib/google/api_client/auth/pkcs12.rb           |   41 +
 .../lib/google/api_client/auth/storage.rb          |  102 +
 .../google/api_client/auth/storages/file_store.rb  |   58 +
 .../google/api_client/auth/storages/redis_store.rb |   54 +
 .../lib/google/api_client/batch.rb                 |  326 ++
 .../lib/google/api_client/charset.rb               |   33 +
 .../lib/google/api_client/client_secrets.rb        |  179 +
 .../lib/google/api_client/discovery.rb             |   19 +
 .../lib/google/api_client/discovery/api.rb         |  310 ++
 .../lib/google/api_client/discovery/media.rb       |   77 +
 .../lib/google/api_client/discovery/method.rb      |  363 ++
 .../lib/google/api_client/discovery/resource.rb    |  156 +
 .../lib/google/api_client/discovery/schema.rb      |  117 +
 .../lib/google/api_client/environment.rb           |   42 +
 .../lib/google/api_client/errors.rb                |   65 +
 .../lib/google/api_client/logging.rb               |   32 +
 .../lib/google/api_client/media.rb                 |  260 ++
 .../lib/google/api_client/railtie.rb               |   18 +
 .../lib/google/api_client/reference.rb             |   27 +
 .../lib/google/api_client/request.rb               |  318 ++
 .../lib/google/api_client/result.rb                |  255 ++
 .../lib/google/api_client/service.rb               |  233 ++
 .../lib/google/api_client/service/batch.rb         |  110 +
 .../lib/google/api_client/service/request.rb       |  144 +
 .../lib/google/api_client/service/resource.rb      |   40 +
 .../lib/google/api_client/service/result.rb        |  162 +
 .../google/api_client/service/simple_file_store.rb |  151 +
 .../google/api_client/service/stub_generator.rb    |   61 +
 .../lib/google/api_client/service_account.rb       |   21 +
 .../lib/google/api_client/version.rb               |   26 +
 sdk/ruby-google-api-client/rakelib/gem.rake        |   34 +
 sdk/ruby-google-api-client/rakelib/git.rake        |   45 +
 sdk/ruby-google-api-client/rakelib/metrics.rake    |   22 +
 sdk/ruby-google-api-client/rakelib/spec.rake       |   22 +
 sdk/ruby-google-api-client/rakelib/wiki.rake       |   82 +
 sdk/ruby-google-api-client/rakelib/yard.rake       |   29 +
 sdk/ruby-google-api-client/script/package          |    8 +
 sdk/ruby-google-api-client/script/release          |   14 +
 .../fixtures/files/auth_stored_credentials.json    |    8 +
 .../spec/fixtures/files/client_secrets.json        |    1 +
 .../spec/fixtures/files/privatekey.p12             |  Bin 0 -> 1732 bytes
 .../spec/fixtures/files/sample.txt                 |   33 +
 .../spec/fixtures/files/secret.pem                 |   19 +
 .../spec/fixtures/files/zoo.json                   |  584 +++
 .../spec/google/api_client/auth/storage_spec.rb    |  122 +
 .../api_client/auth/storages/file_store_spec.rb    |   40 +
 .../api_client/auth/storages/redis_store_spec.rb   |   70 +
 .../spec/google/api_client/batch_spec.rb           |  248 ++
 .../spec/google/api_client/client_secrets_spec.rb  |   53 +
 .../spec/google/api_client/discovery_spec.rb       |  708 ++++
 .../spec/google/api_client/gzip_spec.rb            |   98 +
 .../spec/google/api_client/media_spec.rb           |  178 +
 .../spec/google/api_client/request_spec.rb         |   29 +
 .../spec/google/api_client/result_spec.rb          |  207 ++
 .../spec/google/api_client/service_account_spec.rb |  169 +
 .../spec/google/api_client/service_spec.rb         |  618 ++++
 .../google/api_client/simple_file_store_spec.rb    |  133 +
 .../spec/google/api_client_spec.rb                 |  352 ++
 sdk/ruby-google-api-client/spec/spec_helper.rb     |   66 +
 sdk/ruby-google-api-client/yard/bin/yard-wiki      |    9 +
 .../yard/lib/yard-google-code.rb                   |   12 +
 .../yard/lib/yard/cli/wiki.rb                      |   44 +
 .../yard/lib/yard/rake/wikidoc_task.rb             |   27 +
 .../yard/lib/yard/serializers/wiki_serializer.rb   |   68 +
 .../yard/lib/yard/templates/helpers/wiki_helper.rb |  502 +++
 .../yard/templates/default/class/setup.rb          |   43 +
 .../yard/templates/default/docstring/setup.rb      |   54 +
 .../yard/templates/default/method/setup.rb         |    8 +
 .../yard/templates/default/method_details/setup.rb |    8 +
 .../yard/templates/default/module/setup.rb         |  133 +
 .../yard/templates/default/tags/setup.rb           |   55 +
 sdk/ruby/Gemfile                                   |    5 +-
 sdk/ruby/arvados.gemspec                           |   13 +-
 sdk/ruby/lib/arvados.rb                            |   10 +-
 sdk/ruby/test/sdk_fixtures.rb                      |    2 +-
 sdk/ruby/test/test_keep_manifest.rb                |    2 -
 sdk/ruby/test/test_request_id.rb                   |    4 +-
 services/api/Gemfile                               |   30 +-
 services/api/Gemfile.lock                          |  343 +-
 services/api/app/assets/config/manifest.js         |    7 +
 .../api/app/controllers/application_controller.rb  |    5 +-
 .../controllers/arvados/v1/groups_controller.rb    |    2 +-
 .../app/controllers/arvados/v1/nodes_controller.rb |    2 +-
 .../controllers/arvados/v1/schema_controller.rb    |    2 +-
 .../app/controllers/arvados/v1/users_controller.rb |   19 +-
 .../api/app/controllers/database_controller.rb     |    8 +-
 services/api/app/controllers/static_controller.rb  |    2 +-
 .../app/controllers/user_sessions_controller.rb    |  114 +-
 services/api/app/middlewares/arvados_api_token.rb  |   49 +-
 .../api/app/models/api_client_authorization.rb     |  219 +-
 services/api/app/models/arvados_model.rb           |    9 +-
 services/api/app/models/authorized_key.rb          |    6 +-
 services/api/app/models/container.rb               |   21 +-
 services/api/app/models/container_request.rb       |   28 +-
 services/api/app/models/group.rb                   |  101 +-
 services/api/app/models/job.rb                     |    4 +-
 services/api/app/models/keep_disk.rb               |    2 +-
 services/api/app/models/node.rb                    |   11 +-
 services/api/app/models/pipeline_instance.rb       |    5 +-
 services/api/app/models/user.rb                    |   16 +-
 services/api/app/models/virtual_machine.rb         |    4 +-
 services/api/app/models/workflow.rb                |    4 +-
 services/api/bin/rails                             |   11 +-
 services/api/bin/rake                              |    9 +-
 services/api/bin/setup                             |   31 +-
 services/api/config.ru                             |   10 +-
 services/api/config/application.rb                 |   74 +-
 services/api/config/arvados_config.rb              |    6 +-
 services/api/config/boot.rb                        |    9 +-
 services/api/config/environment.rb                 |   10 +-
 .../application_controller_renderer.rb             |    4 -
 services/api/config/initializers/assets.rb         |   13 +-
 services/api/config/initializers/authorization.rb  |    2 +
 .../api/config/initializers/backtrace_silencers.rb |   11 +-
 .../initializers/clear_empty_content_type.rb       |   26 +
 .../config/initializers/content_security_policy.rb |   46 +-
 .../api/config/initializers/cookies_serializer.rb  |    6 +-
 services/api/config/initializers/custom_types.rb   |    2 +
 services/api/config/initializers/eventbus.rb       |   31 -
 .../initializers/filter_parameter_logging.rb       |   12 +-
 services/api/config/initializers/inflections.rb    |   18 +-
 services/api/config/initializers/mime_types.rb     |    5 -
 .../config/initializers/new_framework_defaults.rb  |   26 -
 .../initializers/new_framework_defaults_5_2.rb     |   42 -
 .../api/config/initializers/permissions_policy.rb  |   11 +
 services/api/config/initializers/reload_config.rb  |    2 +-
 .../config/initializers/request_id_middleware.rb   |    4 +-
 .../api/config/initializers/wrap_parameters.rb     |   14 +-
 services/api/config/locales/en.yml                 |   34 +-
 .../20130118002239_rename_metadata_attributes.rb   |    4 +-
 ...203180223_set_group_class_on_anonymous_group.rb |    4 +-
 ...tion_portable_data_hash_with_hinted_manifest.rb |    2 +-
 .../20180917205609_recompute_file_names_index.rb   |    2 +-
 .../migrate/20220726034131_write_via_all_users.rb  |   10 +-
 .../20221219165512_dedup_permission_links.rb       |    4 +-
 ...d_btree_name_index_to_collections_and_groups.rb |   24 +
 .../20231013000000_compute_permission_index.rb     |   27 +
 services/api/db/structure.sql                      |   83 +-
 services/api/lib/can_be_an_owner.rb                |    8 +-
 services/api/lib/config_loader.rb                  |   12 +-
 services/api/lib/db_current_time.rb                |    4 +-
 services/api/lib/enable_jobs_api.rb                |    2 +-
 services/api/lib/has_uuid.rb                       |    8 +-
 services/api/lib/migrate_yaml_to_json.rb           |    8 +-
 services/api/lib/serializers.rb                    |    2 +-
 .../api/lib/tasks/manage_long_lived_tokens.rake    |    2 +-
 services/api/lib/trashable.rb                      |    6 +-
 services/api/lib/update_permissions.rb             |   67 +-
 services/api/lib/update_priorities.rb              |    4 +-
 services/api/script/arvados-git-sync.rb            |    4 +-
 .../api/script/migrate-gitolite-to-uuid-storage.rb |    4 +-
 services/api/test/fixtures/collections.yml         |    8 +-
 services/api/test/fixtures/container_requests.yml  |   60 +-
 services/api/test/fixtures/containers.yml          |   40 +-
 services/api/test/fixtures/job_tasks.yml           |    4 +-
 services/api/test/fixtures/jobs.yml                |  112 +-
 services/api/test/fixtures/keep_disks.yml          |   18 +-
 services/api/test/fixtures/logs.yml                |   70 +-
 services/api/test/fixtures/nodes.yml               |   16 +-
 services/api/test/fixtures/pipeline_instances.yml  |   76 +-
 services/api/test/fixtures/workflows.yml           |    6 +-
 .../api_client_authorizations_controller_test.rb   |   13 +
 .../arvados/v1/collections_controller_test.rb      |   14 +
 .../v1/container_requests_controller_test.rb       |    4 +-
 .../arvados/v1/groups_controller_test.rb           |    2 +-
 .../arvados/v1/management_controller_test.rb       |    3 +-
 .../functional/arvados/v1/users_controller_test.rb |   16 +-
 .../functional/user_sessions_controller_test.rb    |  110 +-
 .../api_client_authorizations_api_test.rb          |  130 +-
 .../api_client_authorizations_scopes_test.rb       |   51 +-
 services/api/test/integration/cross_origin_test.rb |    4 +-
 .../test/integration/discovery_document_test.rb    |   12 +-
 services/api/test/integration/http_quirks_test.rb  |   16 +
 services/api/test/integration/remote_user_test.rb  |   88 +-
 .../api/test/integration/user_sessions_test.rb     |    2 +-
 services/api/test/test_helper.rb                   |   14 +-
 services/api/test/unit/arvados_model_test.rb       |   10 +-
 services/api/test/unit/collection_test.rb          |  106 +-
 services/api/test/unit/container_request_test.rb   |  170 +-
 services/api/test/unit/container_test.rb           |  238 +-
 .../api/test/unit/create_superuser_token_test.rb   |    2 +-
 services/api/test/unit/group_test.rb               |   58 +-
 services/api/test/unit/link_test.rb                |    6 +-
 services/api/test/unit/log_test.rb                 |    2 +-
 services/api/test/unit/owner_test.rb               |    8 +-
 services/api/test/unit/permission_test.rb          |   18 +-
 services/api/test/unit/repository_test.rb          |    2 +-
 services/api/test/unit/user_test.rb                |    4 +-
 services/api/test/unit/workflow_test.rb            |   18 +-
 services/keep-balance/balance.go                   |   18 +-
 services/keep-balance/balance_run_test.go          |    8 +
 services/keep-balance/balance_test.go              |   66 +-
 services/keep-web/handler.go                       |   38 +-
 services/keep-web/handler_test.go                  |   56 +-
 services/keepstore/azure_blob_volume.go            |    7 +-
 services/keepstore/command.go                      |    8 +-
 services/keepstore/handlers.go                     |    6 +-
 services/keepstore/keepstore.go                    |    4 +-
 services/keepstore/s3aws_volume.go                 |    6 +-
 services/keepstore/trash_worker.go                 |    6 +-
 services/keepstore/unix_volume.go                  |    7 +-
 services/keepstore/volume.go                       |   10 +-
 services/login-sync/Gemfile                        |    4 +-
 services/login-sync/arvados-login-sync.gemspec     |    7 +-
 services/workbench2/Makefile                       |    7 +-
 .../cypress/fixtures/workflow_directory_array.yaml |   20 +
 .../cypress/integration/banner-tooltip.spec.js     |    2 +-
 .../cypress/integration/collection.spec.js         | 1710 +++++----
 .../cypress/integration/create-workflow.spec.js    |   79 +-
 .../cypress/integration/page-not-found.spec.js     |    5 +-
 .../workbench2/cypress/integration/process.spec.js | 1751 +++++----
 .../workbench2/cypress/integration/project.spec.js |  638 ++--
 .../workbench2/cypress/integration/search.spec.js  |  346 +-
 .../integration/virtual-machine-admin.spec.js      |  316 +-
 services/workbench2/cypress/support/commands.js    |  835 +++--
 services/workbench2/package.json                   |   12 +-
 services/workbench2/src/common/html-sanitize.ts    |   51 +
 .../collection-panel-files.tsx                     |  974 ++---
 .../copy-to-clipboard-snackbar.tsx                 |   80 +-
 .../data-explorer/data-explorer.test.tsx           |  111 +-
 .../src/components/data-explorer/data-explorer.tsx |  364 +-
 .../data-table-filters-popover.tsx                 |  147 +-
 .../data-table-filters/data-table-filters-tree.tsx |    6 +-
 .../data-table-multiselect-popover.tsx             |  149 +
 .../src/components/data-table/data-table.test.tsx  |  257 +-
 .../src/components/data-table/data-table.tsx       |  429 ++-
 .../src/components/dropdown-menu/dropdown-menu.tsx |   22 +-
 services/workbench2/src/components/icon/icon.tsx   |  406 ++-
 .../multiselect-toolbar/MultiselectToolbar.tsx     |  213 ++
 .../ms-kind-action-differentiator.ts               |   21 +
 .../ms-toolbar-action-filters.ts                   |   35 +
 .../src/components/select-field/select-field.tsx   |   85 +-
 services/workbench2/src/index.tsx                  |  285 +-
 services/workbench2/src/models/tree.test.ts        |   31 +
 services/workbench2/src/models/tree.ts             |   34 +-
 .../collection-service-files-response.ts           |    2 +-
 .../collection-service/collection-service.ts       |  144 +-
 .../common-service/trashable-resource-service.ts   |   20 +-
 .../all-processes-panel-middleware-service.ts      |   12 +-
 .../src/store/breadcrumbs/breadcrumbs-actions.ts   |  179 +-
 .../collection-panel/collection-panel-action.ts    |   12 +-
 .../store/collections/collection-copy-actions.ts   |   86 +-
 .../store/collections/collection-move-actions.ts   |   45 +-
 .../collections/collection-partial-copy-actions.ts |    8 +-
 .../collections/collection-partial-move-actions.ts |    2 +-
 .../src/store/context-menu/context-menu-actions.ts |  397 +-
 .../src/store/copy-dialog/copy-dialog.ts           |    3 +-
 .../store/data-explorer/data-explorer-action.ts    |   73 +-
 .../data-explorer-middleware-service.ts            |    5 +-
 .../data-explorer/data-explorer-middleware.ts      |  178 +-
 .../workbench2/src/store/dialog/dialog-reducer.ts  |   10 +-
 .../workbench2/src/store/dialog/with-dialog.ts     |   25 +-
 ...oup-details-panel-members-middleware-service.ts |    4 +
 .../link-panel/link-panel-middleware-service.ts    |    4 +
 .../src/store/move-to-dialog/move-to-dialog.ts     |    3 +-
 .../src/store/multiselect/multiselect-actions.tsx  |   35 +
 .../src/store/multiselect/multiselect-reducer.tsx  |   31 +
 .../src/store/navigation/navigation-action.ts      |  138 +-
 .../open-in-new-tab/open-in-new-tab.actions.ts     |   37 +-
 .../process-logs-panel-actions.ts                  |   48 +-
 .../store/process-panel/process-panel-actions.ts   |  163 +-
 .../store/process-panel/process-panel-reducer.ts   |   17 +-
 .../src/store/processes/process-copy-actions.ts    |  120 +-
 .../src/store/processes/process-move-actions.ts    |   63 +-
 .../src/store/processes/process-update-actions.ts  |   31 +-
 services/workbench2/src/store/processes/process.ts |   14 +-
 .../src/store/processes/processes-actions.ts       |  264 +-
 .../project-panel/project-panel-action-bind.ts     |    9 +
 .../store/project-panel/project-panel-action.ts    |   25 +-
 .../project-panel-middleware-service.ts            |  126 +-
 .../src/store/projects/project-lock-actions.ts     |   39 +-
 .../src/store/projects/project-move-actions.ts     |   71 +-
 .../src/store/projects/project-update-actions.ts   |   65 +-
 .../resource-type-filters.test.ts                  |   70 +-
 .../src/store/resources/resources-actions.ts       |    4 +-
 .../src/store/resources/resources-reducer.ts       |   24 +-
 .../workbench2/src/store/resources/resources.ts    |    1 -
 .../run-process-panel/run-process-panel-actions.ts |    1 -
 .../search-results-middleware-service.ts           |    4 +-
 .../shared-with-me-middleware-service.ts           |    2 +
 services/workbench2/src/store/store.ts             |  257 +-
 .../subprocess-panel-middleware-service.ts         |   46 +-
 .../trash-panel/trash-panel-middleware-service.ts  |    2 +
 .../workbench2/src/store/trash/trash-actions.ts    |  178 +-
 .../workbench2/src/store/tree-picker/picker-id.tsx |   15 +-
 .../store/tree-picker/tree-picker-actions.test.ts  |  192 +
 .../src/store/tree-picker/tree-picker-actions.ts   |  350 +-
 .../store/tree-picker/tree-picker-reducer.test.ts  |    2 +-
 .../src/store/tree-picker/tree-picker-reducer.ts   |   17 +-
 .../store/users/user-panel-middleware-service.ts   |    7 +
 .../virtual-machines/virtual-machines-actions.ts   |  122 +-
 .../src/store/workbench/workbench-actions.ts       | 1246 +++----
 .../store/workflow-panel/workflow-panel-actions.ts |    2 -
 .../src/views-components/baner/banner.tsx          |   81 +-
 .../api-client-authorization-action-set.ts         |   50 +-
 .../action-sets/collection-action-set.ts           |  185 +-
 .../collection-files-item-action-set.ts            |  157 +-
 .../action-sets/favorite-action-set.ts             |   30 +-
 .../context-menu/action-sets/group-action-set.ts   |   65 +-
 .../action-sets/group-member-action-set.ts         |   50 +-
 .../action-sets/keep-service-action-set.ts         |   48 +-
 .../context-menu/action-sets/link-action-set.ts    |   48 +-
 .../action-sets/permission-edit-action-set.ts      |   50 +-
 .../action-sets/process-resource-action-set.ts     |  231 +-
 .../context-menu/action-sets/project-action-set.ts |  199 +-
 .../action-sets/project-admin-action-set.ts        |   99 +-
 .../action-sets/repository-action-set.ts           |   67 +-
 .../action-sets/resource-action-set.ts             |   22 +-
 .../action-sets/root-project-action-set.ts         |   38 +-
 .../action-sets/search-results-action-set.ts       |   38 +-
 .../context-menu/action-sets/ssh-key-action-set.ts |   48 +-
 .../context-menu/action-sets/trash-action-set.ts   |   24 +-
 .../action-sets/trashed-collection-action-set.ts   |   68 +-
 .../context-menu/action-sets/user-action-set.ts    |  148 +-
 .../action-sets/virtual-machine-action-set.ts      |   50 +-
 .../action-sets/workflow-action-set.ts             |  109 +-
 .../context-menu/context-menu-action-set.ts        |    3 +-
 .../views-components/context-menu/context-menu.tsx |   68 +-
 .../data-explorer/data-explorer.tsx                |   24 +-
 .../views-components/data-explorer/renderers.tsx   | 1416 ++++----
 .../views-components/dialog-copy/dialog-copy.tsx   |   83 +-
 .../dialog-copy/dialog-process-rerun.tsx           |   34 +-
 .../dialog-forms/copy-collection-dialog.ts         |   30 +-
 .../dialog-forms/copy-process-dialog.ts            |   12 +-
 .../dialog-forms/move-project-dialog.ts            |   17 +-
 .../form-fields/collection-form-fields.tsx         |    2 +-
 .../views-components/main-app-bar/account-menu.tsx |   10 -
 .../views-components/main-app-bar/main-app-bar.tsx |    3 +-
 .../main-app-bar/notifications-menu.tsx            |   57 +-
 .../ms-collection-action-set.ts                    |   38 +
 .../multiselect-toolbar/ms-process-action-set.ts   |   37 +
 .../multiselect-toolbar/ms-project-action-set.ts   |   38 +
 .../generic-projects-tree-picker.tsx               |   18 +-
 .../projects-tree-picker/projects-tree-picker.tsx  |   12 +-
 .../projects-tree-picker/tree-picker-field.tsx     |   63 +-
 .../search-bar/search-bar-view.tsx                 |  178 +-
 .../all-processes-panel/all-processes-panel.tsx    |  109 +-
 .../views/collection-panel/collection-panel.tsx    |    7 +-
 .../src/views/inactive-panel/inactive-panel.tsx    |    3 +-
 .../src/views/login-panel/login-panel.tsx          |    3 +-
 .../src/views/not-found-panel/not-found-panel.tsx  |   27 +
 .../src/views/process-panel/process-io-card.tsx    | 1014 +++---
 .../src/views/process-panel/process-panel-root.tsx |  121 +-
 .../src/views/process-panel/process-panel.tsx      |   85 +-
 .../src/views/project-panel/project-panel.tsx      |  201 +-
 .../inputs/directory-array-input.tsx               |  165 +-
 .../run-process-panel/inputs/directory-input.tsx   |   39 +-
 .../run-process-panel/inputs/file-array-input.tsx  |    9 +-
 .../views/run-process-panel/inputs/file-input.tsx  |    1 +
 .../run-process-panel/inputs/project-input.tsx     |    1 +
 .../views/subprocess-panel/subprocess-panel.tsx    |   10 +-
 .../virtual-machine-user-panel.tsx                 |    3 +-
 .../workbench2/src/views/workbench/workbench.tsx   |  479 ++-
 .../workflow-panel/registered-workflow-panel.tsx   |    9 +-
 services/workbench2/src/websocket/websocket.ts     |   38 +-
 services/workbench2/tools/run-integration-tests.sh |    4 +-
 services/workbench2/yarn.lock                      | 1481 +++++---
 services/ws/event_source.go                        |   39 +-
 services/ws/handler.go                             |    6 +-
 services/ws/permission.go                          |   28 +-
 services/ws/permission_test.go                     |    4 +-
 services/ws/service.go                             |    2 +-
 services/ws/session_v0_test.go                     |  203 +-
 tools/arvbox/lib/arvbox/docker/Dockerfile.base     |    6 +-
 tools/compute-images/scripts/base.sh               |   63 +-
 .../crunchstat_summary/summarizer.py               |    7 +-
 tools/salt-install/common.sh                       |   17 +
 .../aws/dashboards/arvados_overview.json           | 3375 +++++++++--------
 .../aws/dashboards/ssl-certificate-monitor.json    |  606 ++++
 .../multi_host/aws/pillars/arvados.sls             |   24 +-
 .../multi_host/aws/pillars/nginx_passenger.sls     |    2 +-
 .../aws/pillars/nginx_workbench_configuration.sls  |   14 +
 .../multi_host/aws/pillars/postgresql.sls          |    3 +-
 .../multi_host/aws/pillars/prometheus_server.sls   |  114 +-
 .../multi_host/aws/states/custom_certs.sls         |   34 +-
 .../multi_host/aws/states/host_entries.sls         |    3 +
 .../multiple_hostnames/pillars/arvados.sls         |   13 +-
 .../pillars/nginx_keepproxy_configuration.sls      |    2 +-
 .../pillars/nginx_keepweb_configuration.sls        |    2 +-
 .../pillars/nginx_webshell_configuration.sls       |    2 +-
 .../pillars/nginx_websocket_configuration.sls      |    2 +-
 .../pillars/nginx_workbench_configuration.sls      |   14 +
 .../multiple_hostnames/states/custom_certs.sls     |   36 +-
 .../multiple_hostnames/states/snakeoil_certs.sls   |    4 +-
 .../single_hostname/pillars/arvados.sls            |   13 +-
 .../single_hostname/states/custom_certs.sls        |   36 +-
 .../single_hostname/states/snakeoil_certs.sls      |    4 +-
 tools/salt-install/installer.sh                    |  665 ++--
 .../local.params.example.multiple_hosts            |   18 +-
 ...l.params.example.single_host_multiple_hostnames |    6 +-
 ...ocal.params.example.single_host_single_hostname |    6 +-
 tools/salt-install/provision.sh                    |   32 +-
 548 files changed, 36171 insertions(+), 17163 deletions(-)
 delete mode 100644 doc/images/switch-to-wb1.png
 delete mode 100644 doc/images/switch-to-wb2.png
 create mode 100644 doc/images/wgs-tutorial/image7.png
 create mode 100644 doc/images/wgs-tutorial/image8.png
 create mode 100755 doc/pysdk_pdoc.py
 create mode 100644 sdk/cwl/tests/tool/submit_tool_map.cwl
 create mode 100644 sdk/cwl/tests/wf/expect_upload_wrapper_map.cwl
 create mode 100644 sdk/cwl/tests/wf/runseparate-wf.cwl
 create mode 100644 sdk/cwl/tests/wf/submit_wf_map.cwl
 create mode 100644 sdk/go/arvados/tls_certs.go
 create mode 100644 sdk/go/arvados/tls_certs_test.go
 create mode 100644 sdk/go/arvados/tls_certs_test_showenv.go
 create mode 100644 sdk/ruby-google-api-client/.gitignore
 create mode 100644 sdk/ruby-google-api-client/.rspec
 create mode 100644 sdk/ruby-google-api-client/.travis.yml
 create mode 100644 sdk/ruby-google-api-client/.yardopts
 create mode 100644 sdk/ruby-google-api-client/CHANGELOG.md
 create mode 100644 sdk/ruby-google-api-client/CONTRIBUTING.md
 create mode 100644 sdk/ruby-google-api-client/Gemfile
 create mode 100644 sdk/ruby-google-api-client/LICENSE
 create mode 100644 sdk/ruby-google-api-client/README.md
 create mode 100644 sdk/ruby-google-api-client/Rakefile
 create mode 100644 sdk/ruby-google-api-client/arvados-google-api-client.gemspec
 create mode 100644 sdk/ruby-google-api-client/lib/cacerts.pem
 create mode 100644 sdk/ruby-google-api-client/lib/compat/multi_json.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/compute_service_account.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/file_storage.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/installed_app.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/jwt_asserter.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/key_utils.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/pkcs12.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/storage.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/storages/file_store.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/auth/storages/redis_store.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/batch.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/charset.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/client_secrets.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/discovery.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/discovery/api.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/discovery/media.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/discovery/method.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/discovery/resource.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/discovery/schema.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/environment.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/errors.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/logging.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/media.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/railtie.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/reference.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/request.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/result.rb
 create mode 100755 sdk/ruby-google-api-client/lib/google/api_client/service.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/service/batch.rb
 create mode 100755 sdk/ruby-google-api-client/lib/google/api_client/service/request.rb
 create mode 100755 sdk/ruby-google-api-client/lib/google/api_client/service/resource.rb
 create mode 100755 sdk/ruby-google-api-client/lib/google/api_client/service/result.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/service/simple_file_store.rb
 create mode 100755 sdk/ruby-google-api-client/lib/google/api_client/service/stub_generator.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/service_account.rb
 create mode 100644 sdk/ruby-google-api-client/lib/google/api_client/version.rb
 create mode 100644 sdk/ruby-google-api-client/rakelib/gem.rake
 create mode 100644 sdk/ruby-google-api-client/rakelib/git.rake
 create mode 100644 sdk/ruby-google-api-client/rakelib/metrics.rake
 create mode 100644 sdk/ruby-google-api-client/rakelib/spec.rake
 create mode 100644 sdk/ruby-google-api-client/rakelib/wiki.rake
 create mode 100644 sdk/ruby-google-api-client/rakelib/yard.rake
 create mode 100755 sdk/ruby-google-api-client/script/package
 create mode 100755 sdk/ruby-google-api-client/script/release
 create mode 100644 sdk/ruby-google-api-client/spec/fixtures/files/auth_stored_credentials.json
 create mode 100644 sdk/ruby-google-api-client/spec/fixtures/files/client_secrets.json
 create mode 100644 sdk/ruby-google-api-client/spec/fixtures/files/privatekey.p12
 create mode 100644 sdk/ruby-google-api-client/spec/fixtures/files/sample.txt
 create mode 100644 sdk/ruby-google-api-client/spec/fixtures/files/secret.pem
 create mode 100644 sdk/ruby-google-api-client/spec/fixtures/files/zoo.json
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/auth/storage_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/auth/storages/file_store_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/auth/storages/redis_store_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/batch_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/client_secrets_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/discovery_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/gzip_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/media_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/request_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/result_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/service_account_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/service_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client/simple_file_store_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/google/api_client_spec.rb
 create mode 100644 sdk/ruby-google-api-client/spec/spec_helper.rb
 create mode 100755 sdk/ruby-google-api-client/yard/bin/yard-wiki
 create mode 100644 sdk/ruby-google-api-client/yard/lib/yard-google-code.rb
 create mode 100644 sdk/ruby-google-api-client/yard/lib/yard/cli/wiki.rb
 create mode 100644 sdk/ruby-google-api-client/yard/lib/yard/rake/wikidoc_task.rb
 create mode 100644 sdk/ruby-google-api-client/yard/lib/yard/serializers/wiki_serializer.rb
 create mode 100644 sdk/ruby-google-api-client/yard/lib/yard/templates/helpers/wiki_helper.rb
 create mode 100644 sdk/ruby-google-api-client/yard/templates/default/class/setup.rb
 create mode 100644 sdk/ruby-google-api-client/yard/templates/default/docstring/setup.rb
 create mode 100644 sdk/ruby-google-api-client/yard/templates/default/method/setup.rb
 create mode 100644 sdk/ruby-google-api-client/yard/templates/default/method_details/setup.rb
 create mode 100644 sdk/ruby-google-api-client/yard/templates/default/module/setup.rb
 create mode 100644 sdk/ruby-google-api-client/yard/templates/default/tags/setup.rb
 create mode 100644 services/api/app/assets/config/manifest.js
 create mode 100644 services/api/config/initializers/clear_empty_content_type.rb
 delete mode 100644 services/api/config/initializers/eventbus.rb
 delete mode 100644 services/api/config/initializers/new_framework_defaults.rb
 delete mode 100644 services/api/config/initializers/new_framework_defaults_5_2.rb
 create mode 100644 services/api/config/initializers/permissions_policy.rb
 create mode 100644 services/api/db/migrate/20230922000000_add_btree_name_index_to_collections_and_groups.rb
 create mode 100644 services/api/db/migrate/20231013000000_compute_permission_index.rb
 create mode 100644 services/api/test/integration/http_quirks_test.rb
 create mode 100644 services/workbench2/cypress/fixtures/workflow_directory_array.yaml
 create mode 100644 services/workbench2/src/common/html-sanitize.ts
 create mode 100644 services/workbench2/src/components/data-table-multiselect-popover/data-table-multiselect-popover.tsx
 create mode 100644 services/workbench2/src/components/multiselect-toolbar/MultiselectToolbar.tsx
 create mode 100644 services/workbench2/src/components/multiselect-toolbar/ms-kind-action-differentiator.ts
 create mode 100644 services/workbench2/src/components/multiselect-toolbar/ms-toolbar-action-filters.ts
 create mode 100644 services/workbench2/src/store/multiselect/multiselect-actions.tsx
 create mode 100644 services/workbench2/src/store/multiselect/multiselect-reducer.tsx
 create mode 100644 services/workbench2/src/store/project-panel/project-panel-action-bind.ts
 create mode 100644 services/workbench2/src/store/tree-picker/tree-picker-actions.test.ts
 create mode 100644 services/workbench2/src/views-components/multiselect-toolbar/ms-collection-action-set.ts
 create mode 100644 services/workbench2/src/views-components/multiselect-toolbar/ms-process-action-set.ts
 create mode 100644 services/workbench2/src/views-components/multiselect-toolbar/ms-project-action-set.ts
 create mode 100644 tools/salt-install/config_examples/multi_host/aws/dashboards/ssl-certificate-monitor.json

       via  4ad6191d53207a8b2d4c0c8a30b18119daaa5fbc (commit)
       via  56a2e5c346622637639e2c93cabba14cf853bb11 (commit)
       via  b6c0e611996b07c10f65c6fb3c204e7ca5a1b29b (commit)
       via  9c78326f370f1875e41422e2d2c8a3c5a86c5bf8 (commit)
       via  894e1a3d70e9ec1b3e8619d1822410d665fabab4 (commit)
       via  525e81bdbe18ea369f5a61a713e743608bab2e42 (commit)
       via  5fec43173f9744cbf49e422468a71cd8a9b5d9d3 (commit)
       via  3ed6fab9c3ec7ca31133e4d4c750d546727b1847 (commit)
       via  ed1d6f12ddd0bd0f46ee47bf560cada40cd00835 (commit)
       via  c51e59e03bc721de2837db7958415766bd7b46c8 (commit)
       via  14c8fb3d5ae381e6bc0609530209ee7f7a584fe3 (commit)
       via  8e913832ad289fd28700f4081046b7de48688130 (commit)
       via  365e79dc8fdeeed324c3e6f4f20ce200f4d28c3c (commit)
       via  5b30fab0552f623a35ff5b89b90dab82dfcee258 (commit)
       via  235f2d60f025823a72927d7ce56f4214c92cc875 (commit)
       via  9f32ba406d862fa0ad79ac7c23c6b0aced1bdf13 (commit)
       via  66088cabf30c5291ad8894e7009d9c9af466c158 (commit)
       via  359be27e63987690c6e14813c763ea349f4a9534 (commit)
       via  c84ffebec2f5f7d8db00a2ce82e7c764ccb4cdd8 (commit)
       via  26e2f985f4c2b511c59977e4c63158649f296624 (commit)
       via  88e18b7b9826b05e8485a6a99593ecda850969d7 (commit)
       via  7435f58364e90b8bf75db21602592ff0e7559b48 (commit)
       via  9f40073eab9f4368bfb215c27edf4fcf52ef80b8 (commit)
       via  788884922ce53e8884ff55f0fb11cb967629b72f (commit)
       via  be13306c210c458dfd74f9a1aab8377534f8760f (commit)
       via  5b15a8ec15e1afb4eb5e61af59bf237dd346ff8e (commit)
       via  79c3a619453df42b1177f92a442700906ff13c64 (commit)
       via  c9b029a3b2efaf6babe458cfaa70b08a3debd4cc (commit)
       via  60542dcecbffe14a43098d9e68ee6ae05868df1e (commit)
       via  680b25f82fce487c636e841a4a3d83379e5a4264 (commit)
       via  3f3686330be2141f0cacc511eabac15cc8449e7c (commit)
       via  763bf38c5dd4763619bd72394f604a173fcdc510 (commit)
       via  5c43d687670c99b960c4fe113bc77690fc348614 (commit)
       via  40df049fb776b8bfaea738d8b476f8e5c4748919 (commit)
       via  ed0c116ff4767049c4d1d24358a7a15df051f8c4 (commit)
       via  a12de3eeb2f75458120357ed520bb511242104bd (commit)
       via  24c13908a2cf5e4367899ad0af6b53cb294679e1 (commit)
       via  2966d83fa4e18eb62d1bbb1c9a0c39d9d845112f (commit)
       via  e11c6c520d8d01397f58a5cda1fe7e5e5e06acab (commit)
       via  75b017ae9d566d523e448aaeb863c4d89b3548fe (commit)
       via  da83807d6bcef1c1f0bb78479c5ec17f150f5eda (commit)
       via  9b9ada224856e289cdd9e81954c4ea3c3bc1fe68 (commit)
       via  01c6fe633e9e535dc95b62114744033acaedb4ee (commit)
       via  818611f4561ec927935f2cc1e71c767800899c8a (commit)
       via  9c9c2ba3eb1b7c3a411348f373abcdc308aec0bb (commit)
       via  f153e5c6803719fa847705c456a536072395e68c (commit)
       via  ebbb591d0d68e10934e3c8132b24b12a70daaf99 (commit)
       via  2195844ba309db0ec552aa8b14a7f02cf74e9b7b (commit)
       via  8833f20a45011437ef37bef17a031398894774d2 (commit)
       via  645785be096302899e754354504aaaffde4d4760 (commit)
       via  6280dbe8a31b9fe9afcf28041cecd29382bfa437 (commit)
       via  382460d9b5614598bfc6a28f93a1e140df45ab4a (commit)
       via  f361686b04e978c652f4d7442f12511fdfd06719 (commit)
       via  a9435ce3d745bef944e739d672efc9108253a296 (commit)
       via  85d79eb901f52a2fb10fae4bc64b8f9a18dff781 (commit)
       via  099468843d687fdc8c6fbb0f0e3dc54f59d0de15 (commit)
       via  c9125cabaeb7a345f9180db5b9f6442b1c091f07 (commit)
       via  1a1adf32d7b12322f3ab3bf5b0ddd3bd55d061d7 (commit)
       via  7b9b34fce607cd1785c2029f9b8dc316153f3d10 (commit)
       via  4fd40fe19bb3837efe50971b5d9359b0c1c87c93 (commit)
       via  b7589d1ba97904174ba427e245d35998d23c6b70 (commit)
       via  9fd9c53ee729dd533a1ff42e31cfd6f5b227fb0e (commit)
       via  2508b089d2369bf57811f9f96c14c2ee22dd664f (commit)
       via  0708f5dd30018816be89fc3ec02c29b9ecb92953 (commit)
       via  7b51c206b53b1c542be66bd0e277ff2ad87894c0 (commit)
       via  1d6706fd7ae3f1c69508b1c25afccd85f6362e34 (commit)
       via  4e46cf6d5000e931ddd1607e40087571664a8a11 (commit)
       via  5c898f83a2bdd822a27484664e771dc4c5027851 (commit)
       via  23064a8e0ced7fb43269434e73d553c0338fd6b8 (commit)
       via  91ebfb6d3812313dfa13caa75a6e5fb426c0d519 (commit)
       via  407ea7b545e9529afe12503635e09cad23a96060 (commit)
       via  5f2c5c47d88f8225c63e3cc060cf6f55faad257c (commit)
       via  4ec55841b965ae33aad66479bf4d4ad41e6a0b62 (commit)
       via  92eefe98ca9631ee971881fc46f8a1829ac897b9 (commit)
       via  6796b44d4934ddff098e1bfcf7b842ec11e4e210 (commit)
       via  eccb6ba135ebe1bc73bdeeed89150d3c4ee26126 (commit)
       via  a83c43f946e516ec43924c30e7f083325a6f3730 (commit)
       via  2a2f9c29ef2994b8dd25130715aeb46e66777763 (commit)
       via  20798b41fd3a5c012141391403d7caf066f46086 (commit)
       via  5729de6b47d3e1bf40f4b2869ffcc6fbf88d0085 (commit)
       via  452a671ede48733833eb84d1a5c19f0441db606a (commit)
       via  ba12e336967fad5b32c1a6599aa15296b6d36ccc (commit)
       via  a5af979df2c162b6f7918e0997fe2b800a88fa45 (commit)
       via  220869d94387efb179d1692ada16f39049f56700 (commit)
       via  cba2e466c8708c1a89ae2d766d31fa9d04d6f3be (commit)
       via  1d904d1e54b91edefc95dee9326bb726eb646d9c (commit)
       via  0f0562320c97412d12a5c7d7f1c89b807c9d0325 (commit)
       via  621cd0a2fc6dd8c1b63eeb687b4c4b7efb130f14 (commit)
       via  91492fc934a2ce4c265efc338823a36bf871df38 (commit)
       via  a754365302a9066f5ed4f27b743dd93507fe2059 (commit)
       via  305ca4a6af3a93c0c85adadc330ac6b0c6abddf4 (commit)
       via  3eda00155a3d816c7e65632c7da9896ffb04faae (commit)
       via  15469ba0284ac7d26de058cff4ae4e6ce6abc74f (commit)
       via  528c6dfb58318bca6deefc3f1097122ddd735203 (commit)
       via  c38a6d84f0dc5bf5a5048095396a9142de9938d5 (commit)
       via  614e675e6706505bab6d15aaf916d6c2e4ec1de0 (commit)
       via  c29c2feb691b5abbffaf8f177222d2973ad1b19f (commit)
       via  17d60c7ce9d7a358ab59c43d5c8d3afe506e5dad (commit)
       via  a86a6544f54720c5941a32187235ef5287caee07 (commit)
       via  1d068f13d0c9148dcee20c7802bf61956f8e3267 (commit)
       via  42d962946371fa4d388f834da3f301b3912648f3 (commit)
       via  461a55e53382e6acd402fc5c5ff3f944865daac2 (commit)
       via  bc80b56b75691f7571e3b86f3bb50cc26ce9d5b0 (commit)
       via  4727334c7ef28cdb7fb2df89211c09eb5d51bef4 (commit)
       via  e3ad9c3190f3dfad24e4d437149cf2a4462b2464 (commit)
       via  adec01514f703975a19b56b2582f6cfb06f1c79f (commit)
       via  07fd56f100ce60ed9dd70365a83bf6984bcb9601 (commit)
       via  780b538596d1d66bab3e14b7399c04cc92a4dbe0 (commit)
       via  11e786a3643a6813b13a1322d18cba74a1a0233a (commit)
       via  72964a6aba83a007fdafebb5131197fbe0e33929 (commit)
       via  162665e037ec2de3203e8ed34991b1f443462382 (commit)
       via  bc01781d2a6cbfed6d2bdf94397f97c60308eb64 (commit)
       via  266c340d47ed162c44e0e3d321619734d4500109 (commit)
       via  ab9e90bcdc6db96aed24c9362efa87ce99e1f923 (commit)
       via  084ea0c0c8e078dc006e19d2aa851a30817b01c8 (commit)
       via  aa7fdb114d208a401980f3001e7adcb252bdc95c (commit)
       via  e9ed1eb8ec39f40d859489cc2b66687328b3adbc (commit)
       via  85ec07b3d4f0a14285a0d20db682c282e490e7e7 (commit)
       via  7bdffdeb9ccec113d1d9b848423be60d85a501ed (commit)
       via  df52ddea81128be94fb49fb5bedd7be692ac949f (commit)
       via  94c05a1d46dfda5766c3a3a6a220e3471fd4b5ec (commit)
       via  97e40209600c094eac15085627e49da52ab0f517 (commit)
       via  6a16dad57c5d082d00199a13440357b8ff204a77 (commit)
       via  2c0334b2c3209b1fbfe52373ce9108a45149c80c (commit)
       via  4eb78e44b6f046607d0b22cf2dbe3133e458463d (commit)
       via  bd8c170d90e2fbb56c5e72717df61e971f518b84 (commit)
       via  a3e925e4c779c93c08805191f3973d7d7ebbec23 (commit)
       via  7fec33bab2fb68405a1c641d3cd956d21487e14b (commit)
       via  f155ad2074ac6afea41f7cfe04be3eb489e7e259 (commit)
       via  a4257a0f91ce403f09c01a89e982e5e336a0f033 (commit)
       via  4841996e3529dc42aa0cbae94389fad85bdde2f6 (commit)
       via  ade2c46d4922fff269f4708a0f5a623a3d10bc6c (commit)
       via  5e63fe519acff84cda7307a4a2d96d5f3cb06759 (commit)
       via  c8c1fd28b0a587a91041e02da13918ca34a5ce6f (commit)
       via  350def36fb45c1448e98c4a0bf3f149dee2d5405 (commit)
       via  fa88d59460b053577e5403e27465495d369353f6 (commit)
       via  eaa738a4bf29f2147271c7e5f2c529a1f84ee01c (commit)
       via  e246fb0492e76b16ea863aa637b872b0a1e4d4fc (commit)
       via  ad73e81695d3501253f64acd5a63e83deb45c279 (commit)
       via  4417a36247e40e7b2204b19324922940395c5361 (commit)
       via  0be244512a2de99fa3757990697d5bb01d9c6c6c (commit)
       via  d2af4451671655838f1b3b16ec86c7c37ec7e8e0 (commit)
       via  2c2339c775f9112f5da638b2beb81d8b6d5abc2b (commit)
       via  58afb8dfcfa3fefa8e1b28dc418b97c51a73b7dc (commit)
       via  51ab4e57c3e395bee108270e0b3620bffb0c5856 (commit)
       via  e10e24d713e5c31cbc34efca458f5718eb6eb000 (commit)
       via  773f01cbf25bdb7bb4fd110e5e845ee71148a536 (commit)
       via  1c447844404aff3cb812cf42a915ba3b87c75986 (commit)
       via  9850ac96ab2c11b9776d56beef98d18e4dbdc27d (commit)
       via  9d1eefc4d62b60af68c2d9ba83f2f58c862198c6 (commit)
       via  fde75b5aebfc2b83ff17128528f6fbcca5f03c5b (commit)
       via  375779392bdbb3c6cfba4432bbf40448c5e56c16 (commit)
       via  df566fda61e84d8d99ac133ecc3dbc8726dff40f (commit)
       via  73a20dc01eb18185bbccbbe3878b9fc56e4cbad8 (commit)
       via  80360e3149727e7c3249468782ce605ff3d42a5e (commit)
       via  36e6e87437b3605e9f72b21ae0a63d7fcdf7c47c (commit)
       via  c30fc0c76112671804c2bab41c561f1a6f381920 (commit)
       via  5dc68f920a97034ad92e07caacf92165279c0a63 (commit)
       via  9ff9b33208ebffbb5be7fbe0a684b981f16e0533 (commit)
       via  f9eebd01bb13511dd9644a061a709ac115c47d47 (commit)
       via  86ab45de6b3924d50172411c24242dd265b5e9fc (commit)
       via  b89baf6ccf8ef6de4b3ab139ebf48bc53d4140ed (commit)
       via  927e6781a1bb21e5ef1d887b89916685601b8fd4 (commit)
       via  5e4f9bc4bba1ec5032f853266bd3f747e3d52588 (commit)
       via  950735385f7d8871839e7690e7310218cb6dd9a0 (commit)
       via  66997af197a01e972764bc395feecb92f3bf0a94 (commit)
       via  fcdb05d9562984d2414c15c2b6f34f7ff95c6ef6 (commit)
       via  2d8e23a659259186e098d119e84407a216d5be6b (commit)
       via  a4e232d9de469211536e1733520e2cb54bce9f95 (commit)
       via  ec4ad3f3b7ac2126d36479cd63b58135a98a9f33 (commit)
       via  10801e63c5029a2fffc3599235dddab62a2f3480 (commit)
       via  66a1e8588bcefb2886b4ed3e34d5f748394c4c9d (commit)
       via  20d7f7ebaaf9e1841d48a5048df8a7193b7c9a8e (commit)
       via  822ba3d61d93ff19c41861ddf1be2fcca20765fb (commit)
       via  65b22662b8a9370e9a85d8de639283c378a3dad1 (commit)
       via  9ecdc799a7f75f971c5d79aa812b7d75686c413a (commit)
       via  6d1c41d6fd83824669cd1a6d714ea6da1ae7ab4c (commit)
       via  0dc881dfb7cc567f27429686f972ba0bf877d651 (commit)
       via  0b6ccff62d345dcb196890a24e78a1681ead7638 (commit)
       via  ff8bab30fa2c0dabc4ef54d538b6979adf813beb (commit)
       via  04af9f8d5ec001805f4e8f4e208ee8bf7be5f8fa (commit)
       via  514a342ebb895c8a2a0e41649e9b375f5eb8b74a (commit)
       via  59a77c79b4d5a2286eeed3f33af78d0b30caea48 (commit)
       via  f1b0b5b85b7479156aaaa55c0f2def6ffd7d3a40 (commit)
       via  e84fb97573407f2ddabdcfb3b905d201d0a300a5 (commit)
       via  11ba28b72d1bb268066756381c645710a80bd211 (commit)
       via  840619fe8363099a9222b2cdda2d9e5d266a5801 (commit)
       via  c2ba0170975fd01e2b3d9229b491ef2dc8c2f010 (commit)
       via  72a8bf2138429b61dfc9710cc41932396b6f5b4f (commit)
       via  e4342872b52b88c232952317041fb4426faceb9b (commit)
       via  ddfb91e9eee0902fba8b972e2724b2eb4707654a (commit)
       via  92308b1b044dee2970c4409a0da660ccbecce945 (commit)
       via  e579262441bc63d300de37eef08c827e0d69ead6 (commit)
       via  29bf848cd280e8873dc82b7407bac31390e8dc9d (commit)
       via  09749ef22f0e66b55aa6f448f23dbeadcd2e6321 (commit)
       via  26510a8ee080eac922abd6c981e2f077fe1a2f58 (commit)
       via  841194f2456f9f4874fe6ebe1e4639c0b0421b97 (commit)
       via  7a26b8b5d6691e51647dda8a1c4a73abf3b3c097 (commit)
       via  9794246986e474c0b1c659c6463c3870362a0600 (commit)
       via  e5ac7f35c6fcc3c0db6dbc60e84ce7147bb85cce (commit)
       via  fe8da34676be7c6fbb1042fcfcabee19bfa424d0 (commit)
       via  e3d4acd463436a0ed7e57a79c1b48ef010b53a76 (commit)
       via  df1ebc0e3184afd3fb66414651fc1aec713928bf (commit)
       via  c1bc5396fd54f376a11741cfb7ce420b5929a5a5 (commit)
       via  eba78b04f0313786bec3f6dfd4c992f69060a8a1 (commit)
       via  348571756698f34074a5448ceee4eb7590ca3cd7 (commit)
       via  2d1d16aaae709b0f0b3c582c7cbb9c30f451842e (commit)
       via  c13ae783174624c9f1c48bf090e44fb4b9501320 (commit)
       via  6d918ec7f9bb4ffc58d6e482a63031c8a51e20ed (commit)
       via  030a7ee62740e5f7def3a7333d1c8996b3111fef (commit)
       via  4b58bfc5b58db18e4816102f9850757f0884a42e (commit)
       via  322ff98d31140a365faa48e9dc78fc079c4b1ee9 (commit)
       via  4960b0e0b6af812e2c34c040163b1ebfa9506bb7 (commit)
       via  401c2c71179825e6c3350177c0f46c503d66a061 (commit)
       via  55f6306112865521082eae53f8b42eb5bc874905 (commit)
       via  2d80ba8feac6b59b24e4f536ed29698789c276c6 (commit)
       via  3c0213756adf7694a993db1e6dc87568ed89c74d (commit)
       via  6ad3e0ec18c16248aad6922a8f9fb594f8eda76c (commit)
       via  c01fc0b27737f2fc0535f4fe2f1fe614bc308354 (commit)
       via  4419f1fcdbee8eb8b9c8da8825df7d307b124eed (commit)
       via  c9e5e85ab5665baaf4fde6a87cd5f163dadba010 (commit)
       via  be461c33036baefa10dfa2b424721d37b64f3e76 (commit)
       via  c14aed71863a2a485b56bffcc70048f6d4dc5df0 (commit)
       via  bb8f9b8724cc2baf6b311d8cfcc25f45f4ad2cc1 (commit)
       via  78701caa6b3f07425ac32eb95c60107af91f42f7 (commit)
       via  91e3daf696cda4f9c8bee8ef73a2f15ce0476b6e (commit)
       via  cbda91a4e67fc2cd88ddfb54e5faf4605a79c6c7 (commit)
       via  f05038cfab2cc9bea0c34088e478177fb9b0a439 (commit)
       via  4a1735427d84743f6c2f3576263fdcae397cf9e9 (commit)
       via  a04b65f896ea8e070bf087dc15ef552e16b48106 (commit)
       via  cdc9e2ceeb7518f2f8bec47531151a521830fb2b (commit)
       via  5199588a10410b200aa2c01a75fce7963296fd09 (commit)
       via  974cabe78a811766a812206e287a6c488bcc6c52 (commit)
       via  48231f0daea46cc2022bb0f153c2419fe7283911 (commit)
       via  0127a60904f8f392d60111c07ac80f461fe26c22 (commit)
       via  d3a9348beaefdd355a0a88ac9f43ad243ae2603d (commit)
       via  a542b89c232184ccbb7435784f32d76f7a11a892 (commit)
       via  3b40453701265dc66f8efb5865d29cf508f3ca43 (commit)
       via  e506be286860ea57065816465fd22c203b9b145a (commit)
       via  df893c906a6387ade4767425ad8c68e2289ca359 (commit)
       via  72f74086108b60a46458895411dd9afdaae8f383 (commit)
       via  345b5f9d1bae7ee8cda5383d4ac9abea6b54ca51 (commit)
       via  0ccf8be1713e2a21ad4214d6f64913d1a9d8c8e7 (commit)
       via  f79ee597833b880551baff9aef059919d80d5cd7 (commit)
       via  1a38a6a9a715f0fca6d2f53e38ddd3b338e1bfe0 (commit)
       via  5ea8f6ef6a823bdbcec036cded13d03be4d3724b (commit)
       via  5fa710bf0218bd474233fd5867b15cc6622e6b31 (commit)
       via  0213fdd808604f83ef79d0e0a415d8311e018a2f (commit)
       via  bdcaea37455b72c345c7305e6a7bc4ba63d5c1b7 (commit)
       via  0d868ba0ba58f1bdf4e75d8651d894c39d1f69ff (commit)
       via  455630923ff4cc392410251f6fb1c2ac330cd2c3 (commit)
       via  20432a4533136a5ab9fa52c2e2ec2d90a855ecfb (commit)
       via  8cc6fad164fa9d3bdf0fb5965967031a8e1ce9e2 (commit)
       via  544f1dceeb4e5fcc63b683d3edac48e62bca5958 (commit)
       via  17ecd8b1d6bf57e0f3e1f1e70dcc589188cad670 (commit)
       via  e9b8af6b59b16f9a9595bae87fac13c4e0969f23 (commit)
       via  4aa8d709fe8483c295a6d16dadffb5b11848e5b8 (commit)
       via  80794f079f005fd3d927b9d330a46bcc96a1a132 (commit)
       via  a29e101e0b0c184206f454932874bc5b23667d75 (commit)
       via  aba81749d2477043232b82300c0ce15548b61888 (commit)
       via  03a9907f84d2722bd11ce8c3095de4a5ad3e07b6 (commit)
       via  171491643aa3934ef9bd93fa1596fe5c386cedfc (commit)
       via  8e6de8fb13348e6e0b0ab47d91ab65f99033e174 (commit)
       via  25c0de8aa20f801212dda2dff23216289487d08f (commit)
       via  f63db3e0224e57695adb2c5fa975586065f6669f (commit)
       via  95bfd77307f5d4571bbcf01565361ec991bc6575 (commit)
       via  4c34de655fc7f8839b205b48f460a168f302dd63 (commit)
       via  a00b606ae871e9919fec54b81cedae338b6e4531 (commit)
       via  84ec45edc5fdaa21c7d3e3401c877b90de40a972 (commit)
       via  101971b92790b8461ac4c3387014fe70cb7787e5 (commit)
       via  1cc3a7c037077e3d64fda794e239c0096b3f033c (commit)
       via  a5ff50e39038478731fec15a855f73a118c3aafa (commit)
       via  eec7aaeb9c8c2feb708ed68ff38b67be7f29afb5 (commit)
       via  7d974e3dc14efa8c05f1a02fa6ee7be37ee2b8a6 (commit)
       via  c11d6bb3f15d4b6f2ba18a26f355bb944a5ef090 (commit)
       via  26d627007be2bd8fc68844b43651b1897a56e391 (commit)
       via  76d90fca59fbc3cd21ea1af01922eeaf63f2e79a (commit)
       via  59342f2ec8fe1ec2c7ba63a556b2003c23e687fe (commit)
       via  bdd30cdf232d735d8fcc16b65d34f3cee5338f35 (commit)
       via  778531e6b32ee2de9ca4a5f58e7c281330b8f2a4 (commit)
       via  cc10d951ab00b84ef5534a74e2aaa538fbc05801 (commit)
       via  a646dc012008ba2f73e5b3707598640fa5f9f1c3 (commit)
       via  f517db038748fd39adaf395a400e79c6c2b3b3d0 (commit)
       via  7db74f672f64b3e647a98c1d8e5978b50d79538d (commit)
       via  260fad7638148cadd52b9a2411a6717485553aea (commit)
       via  1c0fefc8ec275b53d4adef0546e2c3b8847d8b93 (commit)
       via  9bc1495877f624d3d0787384f7cbddc6aedd8bab (commit)
       via  09489ada444106d040898c9e013a3cdb00328432 (commit)
       via  7f60303ffcf3aff1db6d808c1939ea6a3c5148b1 (commit)
       via  89573e33f317da0633acce7b4160435e20318ca7 (commit)
       via  ef2d81c44fd0df585d89265859e36e23e1bc567b (commit)
       via  249df8a49b8a6f0e52a10515d787ee19f7ff6c14 (commit)
       via  cb8b7a2e6087106451c79a1ef8cea38cfa7af5f4 (commit)
       via  857b16aff9c3e16d3be35d329f745528aa4acf70 (commit)
       via  f7f65f4f57d166716e26aed2967942935d6b59c2 (commit)
       via  3def82c401e28a430b222bee86ede13158165976 (commit)
       via  c1b5417d1036da83283b7c84ff7cae5c553ada27 (commit)
       via  56add69a087e8c94f3e8c99fb04501f7f570aaeb (commit)
       via  2cf2121b848c11f5753c54d89415dae67a6f037d (commit)
       via  5d0960df88dad180fba1b662f9d5ee5c4e269d24 (commit)
       via  6bed090af13bba56d6cfe5f5a96add95000fa87c (commit)
       via  6f20d77e7eb89cad79fb486d8df681294c16f20a (commit)
       via  b71489842c2b04a5d311db61e5078df375f0c51b (commit)
       via  182ef83a9e654c313383008778372f02d3f0e4f1 (commit)
       via  284a69986ca9e9057752b60a3e7099c426129060 (commit)
       via  203f0082b029ff4b88d7f9f719d14e0a89eb6f6b (commit)
       via  4e527029e462d60779c7b40ed2ad8b1cbe6eddd3 (commit)
       via  d4896785f36c82edc5fbf14a2e58d94623c09c1c (commit)
       via  6b9cb4f828257684edba0809461fa2f508d20f15 (commit)
       via  6271a0f335b359cde84a04dbf4d4f07f63ca7fc6 (commit)
       via  5e1a45ef888c6b3eda51c9e41f0eb3c22f3c2b43 (commit)
       via  ba0c5cf6838e36740881c4dd9639043b527bf82d (commit)
       via  5e3f6c9ad492c43044c88ebdc7eea6bdff667f46 (commit)
       via  d4fb5ff8307f22f49a78f8a1a804e3bf534c6173 (commit)
       via  52b9bbcab345d2d9ffbb18bc8d946c1d12180271 (commit)
       via  a3548962424791bf575eb1ef68aac09b785cfdbd (commit)
       via  6c12272392a344a16ee4ca1b210551d522c1dc82 (commit)
       via  773c4d491fdb5a6b228165e3ff2f62db7c1f2237 (commit)
       via  2d453cb79b4e94ed3d559e7874e0d1670daf82da (commit)
       via  78668c47fb945a3371231415c8e6ad44895bd0ff (commit)
       via  a0f98a50de61aa4ef6a8beab91e1e08970196ee7 (commit)
       via  8efb99776ee267be4f626baef911408d1dda6429 (commit)
       via  2fe4245dc28c738fca783b83bcae65c213da41bc (commit)
       via  fd507a52e72e992a3fd19309de65905341630396 (commit)
       via  5cf405e6a51c6c96fc35d8dfba135132c2f57b67 (commit)
       via  8528ba00c107167599a5cadddc4782a7d6fc2251 (commit)
       via  4ed6415ef859ccca13a46c77046f9febfb05bb2b (commit)
       via  01b836fc5b405d03f77155687c9f42664935008a (commit)
       via  d90fffe9d937d3e05c04106904b18dc4da235bc6 (commit)
       via  8aeb3c81d60d665a1ab83684c1615b003c1ebbca (commit)
       via  53592764d7a3299857adb6db6cad2eba29788428 (commit)
       via  a47889b33a2b09d0246611d759547f55b8dda7e6 (commit)
       via  e26fdc06a54e8b4fb7c22f78d335d02d2d7c3ea5 (commit)
       via  05132236c874d69a06b379b835131861c3e5926a (commit)
       via  26cb1fd09826e6460febda92e1b06c3a05c90b28 (commit)
       via  7888c50a75bdadd042548828ba7da7f2d94e6f6c (commit)
       via  56d7ccfa86942fc066a8e3d527c339902ac353e2 (commit)
       via  e6e51406134e71d493f5258917915136709bcda2 (commit)
       via  9d70bbd8258e1223e89c14992dfe7ac1d56a11ae (commit)
       via  44821dc84765936ce99fa2d760ef683281f0a578 (commit)
       via  540e89bcb91a9f2f1f2828083eea632581953aa8 (commit)
       via  2bd3f83db9934198b658b7035a7be65017b754d9 (commit)
       via  23575ae95aab42c4c4d9c2b5ee0236fab004dccb (commit)
       via  da766e40d5119f23689a3d1859fd1473b4d7ad5f (commit)
       via  73931b1077dbf1f6cb195dfc427b1a7a6fe89a33 (commit)
       via  8d6c085a1a7f0a7895245949a250d11d15117cf9 (commit)
       via  aceb1f665394d84ec238d6654b5447a37c2bc3b3 (commit)
       via  1f21d1dbfc538a7298f70525cb304542e8bf8bc0 (commit)
       via  82b22d772bfa4c6c422ecb4f57084562357aedbf (commit)
       via  37be20bf76bba0f6dc6fd40f0fcc3d012c6b7e49 (commit)
       via  9e16e70e7f9bc9fd0e0a52eca9a9c37a45ef3639 (commit)
       via  1fa83e67963bf49010b502ebf12f3b716ed6df7f (commit)
       via  ee9d2efeaefb43fa77bdc567ddff0a46d3453a74 (commit)
       via  25bd0899e19240eb1468f94c7b174959ff547761 (commit)
       via  13d9ed51e225684409712d6da4715c0f6037e930 (commit)
       via  3c40555d09e8bee6db8e0c9d3169cf66b8a92c3d (commit)
       via  178013be0ccd804cb0579942ba50faa7cc68d52e (commit)
       via  4b15593e83bf1a6e1c84c1e18af4b11b9fa1d134 (commit)
       via  27ae52da2c6bbe5ecd0bf2262b3f190597b7415c (commit)
       via  8dfe6805d1bbfc0dac16bade360c2545d0519852 (commit)
       via  2a7fd99c212c33a1ec9911f8529fa5afc59a7bb2 (commit)
       via  33f0193ee7e0c7660413077c86304ecd30c080b3 (commit)
       via  e186e23688c92f91e4cbf564dee5018789e0b8ad (commit)
       via  5bfb2e1cb9f87c2e62aaae870a8789ed132eba50 (commit)
       via  4ef379e48ed887a2c6f5eeeb84753bd0ec68c124 (commit)
       via  d9c4c82329d110b180003a36142e0a8e4d11ccc8 (commit)
       via  cb8dda3b04dc65e5b9a87593ae3d985d008b6f0b (commit)
       via  7f5aa7c58dde29568ecb7b6bfb16f6b762c0ac1c (commit)
       via  3b5ffa7cf6d51c5842b3421b41804b925d6cde3f (commit)
       via  5529d102df411367c672d13bdb93a5cb0c7d0127 (commit)
       via  64381eec0141c807f4b15093042450e2f680c46d (commit)
       via  d8b1191390b3d56740f133b021936f352ca49d55 (commit)
       via  905c83db0b70400bd596388f5b3676adedcf8eb0 (commit)
       via  0043311bd95a8da91d0cc774542e7b008da46a42 (commit)
       via  9a930f08a3b78221cea9cd90a8e8c9a77e3eb068 (commit)
       via  be61dec610e6cfd400c3e616eb3a30a062e25116 (commit)
       via  37044d922164855ba5cc443e775037ab12cdbf95 (commit)
       via  7415e01eb23989648fb4850b5a0569796973445f (commit)
       via  218c89998f66809177b40ee46aeb6dcbfdf1d596 (commit)
       via  49638a3dc44b79c711d44443c1d03ee02360bbb5 (commit)
       via  ad040e37430803ffa7db4f1856a4e362ad2cebfe (commit)
       via  cd84111169de72138bf831690946031d5a3c156a (commit)
       via  1298d37ebe4b6558ebeac68915208e3fa5405968 (commit)
       via  312bc8bb5bb01f8dc3fbf98a98a5de402172ba88 (commit)
       via  e78c96c45d3021120384c12286b7208a53358f6e (commit)
       via  e4842b4e0901470a984f5b9244a8b89bb7726f42 (commit)
       via  2f5d32c82d865c6760fd857a2bef235592f4e4a8 (commit)
       via  d69e82869d237a5665142cdfe1d783e8fb49d23d (commit)
       via  c68eb6b39deba5d850d1b0ba7b59ec42850d8cdb (commit)
       via  3bce3f7ad3a50e6e8c7da962691e53d45d808894 (commit)
       via  a1b1d0f1b3413681d26132f1ca06098ca8f1e8e3 (commit)
       via  19414f258a2a1e354e8721888dcdf68d937b0ec4 (commit)
       via  5e732ed46fedff23e619535cef7f04a86e18a9c7 (commit)
       via  4ace1969ce7b8d1a75eec8ebc7ea3611c4ebb6e8 (commit)
       via  ca3155fabcfe6dd61b2151c52861b2786e9bec40 (commit)
       via  c03ce6b41430afbe6afea76c9448f6895fd18781 (commit)
       via  4fc63fca58814fdc6ac21b08fe7b8c2d84e2c3f7 (commit)
       via  b1fb83ab538f6690822c16e5d08264278cb5942b (commit)
       via  31c39c3ea1729dc555d2d2bcc210dfd9b6ed6d70 (commit)
       via  497c6e358e3dac2e44456d319e81fa130e7479c7 (commit)
       via  627f0941ad141017f3bc214395e69b1367c2b20f (commit)
       via  e78d91e8d1758c075ea35faa8538eab40ebcbfaa (commit)
       via  f23064f5b8ce4f8c28edda478dfa8e773e61d8f5 (commit)
       via  371aed14aedb33ed2279a1decab6c6c310fca028 (commit)
       via  70f0fb817d242a804a9e1647b526348742416b52 (commit)
       via  b4e0af034e1454e39f3e7b2e38c5ed944d9fd1ba (commit)
       via  ebeaa637c88e314feebea81037c4706467f1a090 (commit)
       via  707c3f219b6cf7baea3f5d2960343dc637cb7a9f (commit)
       via  fcd1d0754f12f601967067ed1931d0d380f5a426 (commit)
       via  45f934ab9b1d0b6b9ce1797aa37660c28d5b114c (commit)
       via  e52080d58838ddb5b1c157113e8a4876db7ba924 (commit)
       via  afac7abd6f7ee614cd1bbe7413d196f7c149387e (commit)
       via  c32f2129960b060195b773f19d8582f1c693953d (commit)
       via  4cfc0ca7c782696ffb92337e3be9fbe3ed43a360 (commit)
       via  9717f88d29310067fa70e19fb9afb3679c036bc4 (commit)
       via  b87f98819a9d71c55ab8b4512f5feb8c604f6921 (commit)
       via  dfadcc1a6ccb7128784c4894cbd297272db094d9 (commit)
       via  a1caf98fffd0c8c9b925b3102d857ce61bbe1f47 (commit)
       via  fe79ab0df1b03383c52283a3dcd37020bebd08cb (commit)
       via  c949ee986d103f3ec7fcb68b3bb6d3eff5ae06e1 (commit)
       via  35fb3a159f7a2c755c619916c907776854e51300 (commit)
       via  8cb7d5136d376fe28e09963eb51bee4657e9061a (commit)
       via  f361c2439d0b2a9b8ac839b62a868884261e7897 (commit)
       via  f251e3bd63d9570b64937e5531c3dd75e9f7c79b (commit)
       via  03598c4817ba5b1685f29caad07863de6ca7349b (commit)
       via  7cc5a6c7761f89eeec37a7947ff5aa33390558d6 (commit)
       via  70fdd8e9069a8880b59c85fc1423948d46bf5a62 (commit)
       via  855321c266433c2b73a683c9b7e4e1e9ea389264 (commit)
       via  c156f0caa8190269a03a34272480b4ada80fc4f6 (commit)
       via  f05f9bcf98985d6f6a3998924ff597a15c2eadde (commit)
       via  f34a8d68bdd096cf1b019a9806bd1e6eba028d77 (commit)
       via  17c1f9f6bd6eea9321d36a45b9dfc1ca1f4fb51d (commit)
       via  5de32fb197f6b98d0722c2aacc0bfb8f63a6516f (commit)
       via  1eb8ce5b0258f71d936ca12f71986c94e183e268 (commit)
       via  6e91ab41ffa1509dd1d4e2b8ecb559dd429c6ea4 (commit)
       via  d0713d7531b41a29265e921d12cbb9542116ba1a (commit)
       via  c161fce0c125c2c5b9b0ba62288a0e0adb50b19b (commit)
       via  2f4be67955e48bb65d008ecd9ff6da9d8fe77028 (commit)
       via  fbf4cce4343f12e51df1452433c347abe5deef51 (commit)
       via  119d8d1502dddf00ba2fc088238299922723cbaa (commit)
       via  bbd42ba4d776f89a45df35c6c453d061f92857eb (commit)
       via  c5308511f31f9713ce961a72b29c39b7b64baaa6 (commit)
       via  4d0420a83d27a90b8b15dda10f27a1b89c4ca1b6 (commit)
       via  71fe4cbb67a0f222c79db71aff86180d6c880c83 (commit)
       via  68b5966bf4a5d80d6667abab421a4309ad688a38 (commit)
       via  507ae159f9c1eb0dd6a406a3987243aab7f05866 (commit)
       via  2309d8a0970d603fa1bd6b23f1fae7f97bb2f7e1 (commit)
       via  e5682f2f1490de87f7727a364c717c06d5f58eee (commit)
       via  462f912b233957d9c944063d1f7872f0d32c7e13 (commit)
       via  859bae14d31fe063ed1204be7300083b3216de60 (commit)
       via  a9d431d649c84f52a55852f687052b3c4f67a3eb (commit)
       via  a72ffbbf30cba20f3d5b2324d4b016a82786df10 (commit)
       via  577e47a434702a8bdad5669b3d470cfde5241033 (commit)
       via  55c0fe472ca9938c93a78bbff0e0fb1b5e51a54e (commit)
       via  76fe6edc8d158f67c600f75c6bb351d7a679b71e (commit)
       via  38da1ff0a3990e643cbfbd5fa548597a1618055a (commit)
       via  171267ba19481f363e35332eb3a7fac3c63cbbcb (commit)
       via  781c06ee0633709137ba3a4d305eb6e1db2a6dfb (commit)
       via  e9c6bbebe8d9a3e22d239a51b1a0fae575b3dacb (commit)
       via  fb10daa75864def53d1f0ffa7da3cece8cebe9d0 (commit)
       via  f7a4118c87ae1df4a42efdad3695e6fcb5d60854 (commit)
       via  b80db2511622b7600fa7a03e7db4c5c82cf61d39 (commit)
       via  1a3746a005fb857cc6760fde34e78cbcbb7d11e5 (commit)
       via  1bde07ef5884a55bbb47aaf30a90b122a4810617 (commit)
       via  0486a1fe8e98fb613eceabfd745875ed2b0d4395 (commit)
       via  8671a18c6f71d9c57fa10d650c476cace51e70db (commit)
       via  8360ba81b48f6883b453f13756432a3d599c3042 (commit)
       via  5c51ae289e62018591602da31748970fd0abee97 (commit)
       via  47358b0f717b1c9f70e8e8a28b4258b9d235ef44 (commit)
       via  dbff37e90136caf5264148c95b7568ccff978f77 (commit)
       via  06e815a5ab6a9a9a118014b41f023c46237156f1 (commit)
       via  5534b46d016782428c8acc5ee2ff91958f9a0e0c (commit)
       via  c79e65e93760c758aa297b9eb5561c69b36a1d46 (commit)
       via  84f02cea829ead38669efcfcffb2ef0a984e27dc (commit)
       via  ae041e1ca4cceaf6c94b818a2823377cdd5c55a4 (commit)
       via  37d61b71dad8e424563f1223f068a676ad7baf8e (commit)
       via  27542ce48fa48c5bbe16e96a3ffd1cea0be0cc47 (commit)
       via  3e3cd928c063419a580c2202fb1b18b8784909e1 (commit)
       via  bc6b0f0c9586c28245e352189d7149a65417e0cf (commit)
       via  4d422259ee1fb0db9bada72ba6b100641c2f59f9 (commit)
       via  e7139d6d1f00eaeb998a3fc5efaaa247436ee4df (commit)
       via  0b8032ec5be5dd474b47842b7630075c1d9413c2 (commit)
       via  ef8fb604ad4a868cae8ed6ad31c1fd1520dd73e0 (commit)
       via  78a6653e701b8835ae9b4c674100ec12f6082167 (commit)
       via  5e0a0433e3ed3da21765735e0e83454bcc10b439 (commit)
       via  28a7883c373533979f2cc7c5e750221eb8f5f1ec (commit)
       via  f1d068a91bc746ba66eead495648214f5506557e (commit)
       via  9fff947ecd25b0494e8e3c6a27a4fa4fea67668f (commit)
       via  259b3769c02913cd968ab3294140f86108738e24 (commit)
       via  0134919a1425efa859fd0fa205b037944c033f23 (commit)
       via  76b8dd0af0db0b79cc6d12b07a138d7357e12960 (commit)
       via  ee0307d05caf3eeed3d1acb8398937fadd2c7c25 (commit)
       via  750b2c391b5418bfd3db88e59429abad9fde6c1e (commit)
       via  ccc29ca7f0afff5b6d038553e1feb2c4b1666392 (commit)
       via  7ff688a46feb12ff62afcc35a287048f3e49fb27 (commit)
       via  d230941e87d4619683e4f3f7b44f19dab5017bd0 (commit)
       via  4b6a2f564bb933d5411e75f664e859d6be891e61 (commit)
       via  7f8c4a43bdd1eb200245ead83ba4aee20c0e1776 (commit)
       via  24fc2a5a701dd4bb6edf503efee992942ea5b667 (commit)
       via  a60309a6b134ca66fa66a71c489e633a84f52f0f (commit)
       via  13d657b6685b6396ef352dce0a561605e664736c (commit)
       via  0284278f61c66ccd75a6559c815ca299e912665f (commit)
       via  21fd1f3889338c2dcacd28b5f59411f4ccf37f9a (commit)
       via  27dd462657b3b7434780de3250d0b2b0a75cea65 (commit)
       via  1fca88a96c086d7d1c22690ad2659781a5b2f5e9 (commit)
       via  17a36a0dbba1512c754fede99c95e3efdb0a647f (commit)
       via  d984ecbc6d9dc0e3cee65862b64ef49a34cd238b (commit)
       via  3e0b4a50ac52b12a7dd5548ad78e19ec5c89213d (commit)
       via  b14178ed3abb38af96dd896087b4b9e2a28e24f8 (commit)
       via  b1b392eaa7f08c3a66ab8a0f2bf80f02d7a6e16d (commit)
       via  4abc0252edc8b00fc76e6481ce731f2bba607fe3 (commit)
       via  fd295849b9409da87db170d60ccd3fed2bcb674c (commit)
       via  15853007bf1fc8ad000bb35dafdd3ca6bfa8ae26 (commit)
       via  20d73cf87fced0816460c7b5443735ab3be60c85 (commit)
       via  3836b558f804ba750e7ee54eff826134ba0fb868 (commit)
       via  94a979b5126e6bb4e4a1779e512131ffe32525c1 (commit)
       via  0003e564b19e35386320f13e5efb1dc85cb5b6b8 (commit)
       via  066ca68f5d4a77420693f1628ed6e8706a29e942 (commit)
       via  6aa156daa7b8437e1c223235e7311bf506b8d75f (commit)
       via  1ed677b796afad92b5f232165912ab269c0b4b8a (commit)
       via  ae8a15ce76c696274aa6e11c4b92b9cb881945df (commit)
       via  2a7873aae58a48bf6d090f8240d6b2f6a3c16ce8 (commit)
       via  855c976976c98bbee406d1d394fa9941aff04363 (commit)
       via  f008d518f04b5619c26af0d532b8ee98344e6ae0 (commit)
       via  0b1dbb67fe7e901c5864e0c6fbf399e0423b4f50 (commit)
       via  3eb18d6011258ff8302d9759701521ef941317d0 (commit)
       via  4d81ad116a849e1eec5ef66c8b1c8a0a96b2a9f3 (commit)
       via  1dd5c2820af7e5b80d0a7670284ec502a662b1c1 (commit)
       via  349c26fa8bf0de53d915c81a03da65d99c53de0c (commit)
       via  fb3fc4623f6070467abdaa5e642a2e7680afc0ab (commit)
       via  d21e28a3bf41876211f5180c40b3a7a2ee0ef979 (commit)
       via  697d7287fe8b09b75b0590da1a0a6727d9ff8135 (commit)
       via  aa8fc7c76beeaea11333f37a4374ed73468b90e0 (commit)
       via  da6977f8adf37a5064d9936e06f6097830e18206 (commit)
       via  847b48357c29638d2be2118419f014ac304ce4a7 (commit)
       via  da7616d99dd0e97fb27c7054cfff96edf7b0a856 (commit)
       via  db23424881b1424a848ad4ef9e7850159bf02934 (commit)
       via  944167de1b048138756f13db7ec8649552021598 (commit)
       via  8f2000d51c22eb84249ffb471b7caadc4e7946c7 (commit)
       via  28adb02b60e444601b4b5a7aaaaffd33f033f75d (commit)
       via  21cd5b27b11b0e9ccf593102e93da052c03eb902 (commit)
       via  02df52f57d09e4c52f552cc6a64ac9ae172e77dc (commit)
       via  6757ee08c6e340923ac7fe82df11c791f4570e53 (commit)
       via  fe1e13def76957fb16380e0cf6ffab7adc6f8f2d (commit)
       via  10cb874c56f52092bc0b3eaf538df7d0f9e88e1c (commit)
       via  dcd1eb916a9f138302cad37cb9fb43f7ad5f9e7c (commit)
       via  3eac0867978f405cb3bb5fdb1db8c5a98fc26056 (commit)
       via  0d0bba245866ba3bfabaa7e32a8805d3dde39fd0 (commit)
       via  6a6f1fb165c757bdb357b75cc9f124638d57c50a (commit)
       via  d19314bd279aecc7ed840dc779589a888881c1ba (commit)
       via  415dc31c97916ea15fd5c44c96c6e44c7d0bb1e5 (commit)
       via  f368e1d521486fcb9726e4b31a1ae32eb838247d (commit)
       via  63ccd91836697464ac41c6de9337f24f39211796 (commit)
       via  7ed22caf822b166651cabd78ff6c5a3488681e00 (commit)
       via  0b4b24d06d23465bcae707c042e459a2026d0b88 (commit)
       via  8e49ee764b483948524b74eff103ce0ba229593b (commit)
       via  9df4e63d32ef1a4d3f1edf9c7a42f9a75e4a5d2f (commit)
       via  a46b2b1b30e53b304c682a4f4c885aeb0023cb25 (commit)
       via  b9639ee11c7e14faae6ef17fc72882fed42cee9f (commit)
       via  d999033fd6fd2635e3a72013fcfc5e8c7779fde6 (commit)
       via  2622ebf8dc320480335ecc4fb5fee514fc3141e8 (commit)
       via  fda72888594ff5b203b0fc7bbb6c5c4897917f9c (commit)
       via  3bbb377043e08f71029837f13a4dd229cf1c46a9 (commit)
       via  814030babe381f7c1a5b7937d61f144b7ca8f7cb (commit)
       via  91ae01aa83e1991975303dad1dbb4d883e243700 (commit)
       via  74134bf87384212505a73ba02843134a785e18e1 (commit)
       via  9b0e8d3f85d77e8b6550a26c78db26cc36020c27 (commit)
       via  8510735db8031aa929af098acfc00d713e758221 (commit)
       via  262ebe3d52c9574e6502fbf595158c84c3862ef2 (commit)
       via  d6d8ec7884639f6b6a2a81e0125d8ac6071e6db4 (commit)
       via  f8ca44f9caf2d63a8d145e47038b2bdbd0766a26 (commit)
       via  ec670e9fa0b03f43ce6ceaf4acb6658d189e0461 (commit)
       via  7ac37a54f05cc975ed26a77e204ffb650ccca1e4 (commit)
       via  0244bf13b35401520517f733e060404d93d00b93 (commit)
       via  95823b0e19a4b492f44b31ee4acdf223aebe2e17 (commit)
       via  66a1e15a8265df9caee4eb9233a938c48ee37fc9 (commit)
       via  16683c7dc3c408c743efba52b60de6f826069e97 (commit)
       via  3a295bf0e723c0da9afb46a46d3858f66f6da2ac (commit)
       via  0fda40c21f520739e206f536f934137608862690 (commit)
       via  2ba98c3332a8c59db9c339b833ed1f7e953cf76d (commit)
       via  b2343e24a5dc6592a73f5bc2c7e1244a1b3ab9e0 (commit)
       via  9719c9f35751300cc187f94056f12f66dc3a316a (commit)
       via  1a414e7f0d3a05fe07d60195335ed971fb48bcac (commit)
       via  740289938b5bf9b8355a1f9c497d307009d675bb (commit)
       via  f819c4a051f33cf505c527518103041b9ca0b234 (commit)
       via  39c3e81e268fa547dc4c14e81ffe1b465f9d1bf6 (commit)
       via  e313235b5561e1a9fbd83a7bf9406f79faae6526 (commit)
       via  27df982625364471e4f92c9c1313cbc8497b0b33 (commit)
       via  9c7e953d1b88d1a338f2a290f10f17ee4721710c (commit)
       via  d1bbe8cf9458a1ca62f4f10502be05eb243affad (commit)
       via  03fca7b8d10857c306ac18ad61faf312c32e7fcb (commit)
       via  c6eb3920ad323bf1b57c875bf5484058b84287f6 (commit)
       via  170666a40a6a8a08bf1b2a38d12e3fe234fdd410 (commit)
       via  a5313c9bb00ec428d4281eec4603ff78ec07a676 (commit)
       via  bb9f607c8e81ded7555d64bd6b4ae49f99142dc1 (commit)
       via  571b278b35fa2702b7fb4bbe22ed0fe10d966cb8 (commit)
       via  fda7086f43f8041dd1cf8a3b6263917994c171a8 (commit)
       via  6f655029c11da77aa69313f03da6bf23b655f580 (commit)
       via  ca7bc2d47889bcd90bfbcd93dd96dab637dfbf01 (commit)
       via  b02bfe3028a72ef625c24b66bf90952cb7830afa (commit)
       via  d6511e61234d5fa2b10cb7749cbaede346e0f68d (commit)
       via  f926429461149a221bed723edbf07e1c272ace47 (commit)
       via  73e58f3098534db6250da2a1b567636f926bb909 (commit)
       via  20e9a9bdc6c209c579f8bb47af9cd3713cfd339b (commit)
       via  78ff1829051402c0dd5b9d0403bbc8cdc13edc5e (commit)
       via  2f88bc5487b29cbf90e5a37fc044fe33900609fe (commit)
       via  17092bb129a39e066e704f52416132640eb042c1 (commit)
       via  2bed0748ab1ed3e0941d5fb22733f775d757fff6 (commit)
       via  bfa522576637fed3725d5c73305eb23f996f0b0f (commit)
       via  0c8e067012d3f11b925aac84f41927d3df08d829 (commit)
       via  df72a3681da56b7eac8e17524b49008d4b28e32f (commit)
       via  8ae04bc41c256e89a835f8ce6ea81bd28031ae26 (commit)
       via  f3821f99170dfa0e8b2cce8f2bc2b5b82725c45f (commit)
       via  a1eeecf2f8118e2aad8a6345aa7c1afb9cce5a29 (commit)
       via  c06f4edb1ee40038369e62817ab2f0e90af6ee40 (commit)
       via  cb8f443c665370b661083f14a39788242254199e (commit)
       via  5326f5c2a7fcd37e1e8d7da19406f81b881e1c99 (commit)
       via  474167c5ce6e20aaea0c62f385c45d25021e59df (commit)
       via  1819e16f1981edf6d40ac05be99c301f52aa4309 (commit)
       via  30881d71694c070f39778d23d67a2bc1e83d5212 (commit)
       via  814d6f6d926d135e0bf716958c7b3444101df5fc (commit)
       via  ddbc978b52694dfe231c4bc01b1d3d60a6ade0d0 (commit)
       via  50ce4df6407461825005180cb89f6caf144bf2d5 (commit)
       via  fd145d2cd11a839fa70c3b22c05ef9fc3cca5a86 (commit)
       via  adf6d1facd14f16f4e40ea35d1cb3c6c3e81c6b9 (commit)
       via  3ef99c7ebb23b7840ff11d045c4f1494de751ad0 (commit)
       via  0cb0075c7b2c0b27ee6f0f2366d445b5b36546b0 (commit)
       via  3d1568d67ff618c548ee057daf3878e4608e4073 (commit)
       via  71eeabe55c1c2d8ed2c92fbf6f07fcf99832281f (commit)
       via  b1f8ac3c0d83a5d9756537357bc64cf5df79fd19 (commit)
       via  18c4bab286ab5208532e4051f3b4da6664338ce7 (commit)
       via  80d25c219b8a0b39f9365faf2257f26ed78d230c (commit)
       via  53be124a6f0d69b8735024e2460084c4e2e8f097 (commit)
       via  4666fedaed1f0b368bd98273f83c29a3fad5615e (commit)
       via  31fac0a6f55225d36a942e98642966c65f1487b6 (commit)
       via  3648b9a9ee1de844ac638d40391cc912cc6d5a9a (commit)
       via  c428db0f3de9e7c55cc1e7500d079a0422459b7e (commit)
       via  e6858bd2924245745027468af2b4d6a6d80d9e76 (commit)
       via  6404615a5722d0788433a678003725363fa2a450 (commit)
       via  5c61e39ba476fed01b41d07ff186b9bbc9ae7f12 (commit)
       via  05baf20957c475a153eee853b0fdcc8dc0207078 (commit)
       via  34d3c18fed988d330e36cffb527808d2ba471929 (commit)
       via  0e9637c77c0643bf594f03d24f6a615f7e3b38d2 (commit)
       via  862a844c638555c62f3da069474a6354ae6dd548 (commit)
       via  4a3827c44b90b29ef57e1972504418912a2093d0 (commit)
       via  8418d5abdc385601eb1f1ced465d5f9f66ac32f6 (commit)
       via  a27a122825711e4ca4a5d7e24ed2f6ac8f525d21 (commit)
       via  7de9612071ad5bd745d4a43147db4c2c3c252549 (commit)
       via  9ddc8b85dc89738af7d6b6eda0794d107d2d8d7e (commit)
       via  60ce5bb082ea3561d8dec975ac1fc1b9cc55891f (commit)
       via  2a87a93d489d01f182c1be1e59fe7fe44740d9f7 (commit)
       via  c2135d9dcf160367e3e4c878cf14ec0d2cdc2695 (commit)
       via  bd7cf179f34f2dad2e537369cc4e97d24f145ab9 (commit)
       via  bbb24a5d2eabafe22f8ff138762fb89dff480962 (commit)
       via  10a337b807953521ce3c1b389ebc21be7eeef47e (commit)
       via  146ccad83a93fa103f30a8e8c3afc89b08869b53 (commit)
       via  5538bded1fe7c577df6ecc0dd05cd0424b8dc56f (commit)
       via  2d326459b2c05621a4c51ea50c59b209955f457a (commit)
       via  f06f1e33fa1706318a85141323a0e70175fad55f (commit)
       via  ef4541b6ebe6254affb4203fc70d6c1b2ccf39d4 (commit)
       via  0fd0dca2f41268198f0b703eff128cdc68cda078 (commit)
       via  0d7b3d040ffd866e496cab5a66788258c1dcf2ed (commit)
       via  b05de26a5116861519e8e310bb47fee2fb0a9d20 (commit)
       via  876dddad36fa1c69ff3d827cfcfb0d01c2fdb1bb (commit)
       via  83d411990c88695753d5578afd273a363d7c6bd1 (commit)
       via  00f66633e083ebfd31035cc33e82e8bdca4a492d (commit)
       via  5c31b69356b119aa46526271f16f1669e8e04712 (commit)
       via  ee3f767141a1d25cb4525da847c8363c16125bb7 (commit)
       via  d7bd7126d361fc4c026f11b7f39e076de047d512 (commit)
       via  1e2405093b16a097bf50ac4ee2123408a2efee48 (commit)
       via  d85ee643d632097bfa0afff7b15f3ae534955503 (commit)
       via  e73ce124fa471295253a3f594c26f4d7d5f85440 (commit)
       via  2a3965d976ee150ea93139b7572b39ed36272dc1 (commit)
       via  b160f24685a25e2702a6c9fcb7ab02c172a5d35b (commit)
       via  855a7fc823f79d4ac0d025b7140ff5c13abf749c (commit)
       via  dca6f3448c94f69d4b3054e30a701c605eb9674f (commit)
       via  04f6565616eb6cc92ce8d50662e068e96448a573 (commit)
       via  8b128286c5485bea624c1a90d38a5dcd15885ec6 (commit)
       via  5249137d4c355cce90ee3e87a4d055a4734e27e7 (commit)
       via  c7669755876342b84677f5b7ca3f6722db557263 (commit)
       via  98c3d6e25042101879c70ba5d2a0041b5783b168 (commit)
       via  327220db08b644925981ffdd5c86efa93d2fc034 (commit)
       via  f5238bbf12854667a308e634a7d6654754417a82 (commit)
       via  9d7735f031710985286094f6acd95215a6a7959b (commit)
       via  b95cf48adad8b7f03fdd3230d7761bb63309e317 (commit)
       via  a4ff02e6368846527e6d93f0ca48a9d64604b1b3 (commit)
       via  9d7803dee836891a67daa739b0372694b8096c4d (commit)
       via  630651c4b5f79ea24324818721baea4a43f9290d (commit)
       via  105510adf25a9d821761e9f945ef2cb534f90607 (commit)
       via  89830508b2b76e9ec3d650eb7ed1c71c83985192 (commit)
       via  d1fe3c2277958e80269936d2bf053efaa47c9bb9 (commit)
       via  4143d900e0314b98d12f68ee554f7d6c2c4ff486 (commit)
       via  370e01c4afa7d62c041ff9b18b54e2502f74cdba (commit)
       via  a49e63847551b2a97603b0ba19fe7ce60f062f59 (commit)
       via  189473cc9ebe37312017ca2e53f73675c9dd4c8f (commit)
       via  8aa50442ab92b4789a8f93532c5aa40e4fecddf3 (commit)
       via  57f25bce5e8834d88a192080a25219aec7d7f6a1 (commit)
       via  e8e23506129fed01c2612c64fac137aa78c9a8dc (commit)
       via  c45740b81c294acb81667371d37730592d558b98 (commit)
       via  f63888ab61f0ca4d1b5c8e5a5e25030725682355 (commit)
       via  903e568a65b67cd18ed1976f26abc501e3e81d85 (commit)
       via  e27109078a098685e8189bb238b9bd37abe29b21 (commit)
       via  cb7380d256c20b2a7cedf822c4394e6485b1dcc4 (commit)
       via  0bc54ed4c93c5dca037336e0acdf4d00e2fa84c1 (commit)
       via  2a975aa877d29205f5e3bcb56ad13342c4e1198b (commit)
       via  d1ca5308e995599a19576e0bbcbe8a8818a942a4 (commit)
       via  f7307ec35dec9eb47276539e08dffe146bdf6153 (commit)
       via  ef4e924a5c5e15a661ac18e50a600a2cdfddcbc3 (commit)
       via  d68dc4d27e0d5299f9576804959aa48eaed24145 (commit)
       via  35c38a1ce840f86c12464ab740752f8e0947807e (commit)
       via  664e21290a56f67abde9e009a8949f5324ee9350 (commit)
       via  fb67a021e7e1bb430af73104807f92cc25adc6fe (commit)
       via  aa7a254d23f202a19d3ef81d8073affc77e29b38 (commit)
       via  794c6a90f766a992c88e8dc8a0055a18d897069e (commit)
       via  9cd5601134845dcc947b77d97ede00a0e104ff56 (commit)
       via  ed0a8921c0f6a6afa478fc77de9202fac3405683 (commit)
       via  cc69b49b0edec3e72079ea5616d72aabbef94b5d (commit)
       via  0e1ac4ea6a271aacde744f4ef019f80ef976a162 (commit)
       via  e2991a0fa50bc3f397f45a8436cb11acedc71c1b (commit)
       via  a267e3453f6c43e5e16d8fd77ed1740972558562 (commit)
       via  747df1ad8bd3400340ea8d3787e4f37f8717300d (commit)
       via  2a6cc8e09ea0ad28124dfe984815162840adffbb (commit)
       via  1d6bc0df181050f363b1d33db11f3b88f6e6b815 (commit)
       via  c4c16ad68276522bb387371e47333ce499657df9 (commit)
       via  4241e2c99e753304610f1309702fd301852f619a (commit)
       via  bfafe1b0c8504e8016c897aefb95ba966d81ae3a (commit)
       via  4dc0665ccc5e8ee17a84684c4fc2bd32f38a0440 (commit)
       via  e8b46f3cc24427c36b773c8d6c8872390b880f17 (commit)
       via  d9033a4f2abab0c825e76d39625a5a9f2d9ccd2f (commit)
       via  0b45f0d8b63f7b7c133a9ffe7eb2de041aacb24e (commit)
       via  34354325b82054d82b71635e19cc9cf640982feb (commit)
       via  2c38f9fd090b580d2880371597c3aa8d02df69b7 (commit)
       via  fee207e8bdb780389ad385bd831c8f11f0793ac6 (commit)
       via  889102f6fb30682c5bd6269c2dea29dfcfbb6f2a (commit)
       via  4289ab5b5f070baab9cc73d420b7fef87afa8f35 (commit)
       via  ef4c5c1f2f1e81821a1bd56b5d1cd1cbbf3af623 (commit)
       via  f421551018ebf25f3a9896abbeabcf6918d63e09 (commit)
       via  0dafa5e4eebaeabecb4cc8169effc1a55af6d83c (commit)
       via  f369139b32850e2a32e3dc9faf0fe2deb7b2b996 (commit)
       via  47bdbc124e1cc13415e62c07ed0cb3d1195e5291 (commit)
       via  7d204ac507ec05a8ebf839c8d0d570de4c412931 (commit)
       via  280cdff3140a3335120b84759170bc0cc28372e1 (commit)
       via  1636ed0f9decc15beecc685c1002bb41a8b109f7 (commit)
       via  06ad346e9d10062f7fab24f7526dfa69f941668b (commit)
       via  6cb3c6b6c4c4ded544ddc47905243d3d0ccb9694 (commit)
       via  ee6f8ae6f983f2beb1afa94f9332f9e244fbbb9d (commit)
       via  361c8ccc7476a35a6904706402dab0a7c05e2ea7 (commit)
       via  55b4a94715b6923dc2ecd8ccd64dbe96f42efa98 (commit)
       via  7feb61f70dd393f9fd6256fd85abc8c228be6edc (commit)
       via  8ce4d052feaf61c272a50afe2ff703e35cac2a64 (commit)
       via  1d7315ee9bec3d9528da171d92fdcd9fa92f4b62 (commit)
       via  1601c616fe494b50de98cec4c4bfdb0713ce7246 (commit)
       via  84ddf9ba3cca1b4d48da5e828d32eb394dff3c4e (commit)
       via  31a78788bd0db6957bc754a078c880d6f6b5f23d (commit)
       via  7e3cacdb0ecde219278c8297395b4f0f2d67ad2a (commit)
       via  be3b436f583b9def2d36589e67c8a4ad9281d725 (commit)
       via  a631c4003a589228572e10a0bfcd261f6d385c78 (commit)
       via  1f0ea6338e4aa35a70563a340657e9d5f25287a3 (commit)
       via  250e9e7b2d4888b647312d416609d622b6d91b70 (commit)
       via  71fbe4a825139399ee1503e4c27da336671f1b00 (commit)
       via  c793138209cbbe48e8925fd9900857e41cffe5d0 (commit)
       via  8f453134d75269f6c98c2c55dba214f2451e008e (commit)
       via  6b9d4bc8796b0303cb18582a811e33de21f7d930 (commit)
       via  8c2b734ef1b597a3df3da34ee9e4cca4d7dd2662 (commit)
       via  ab23fe7539ac4cd32334be4ad52256daacc9262e (commit)
       via  40cbcd8e7e47308aca555a7eb25160c64bd1e21f (commit)
       via  bd04489a431ccca59c746dd57f73407030f7949a (commit)
       via  85593ba93885fc5404dd7b2b416521db3fbd2738 (commit)
       via  4a72c529bf18b722823f2fdbe26ee9cfafcbe382 (commit)
       via  6ac2952366f18defadeb4eaafc30d23abdb3d1d3 (commit)
       via  0b31876250ed4064425d5713097522815abe54d2 (commit)
       via  0211d4b6d3d72751866631bd1efffb09831fdbc0 (commit)
       via  b0b03cc363c8d3a3e3b7633280928d1fa794f96c (commit)
       via  1c849c7e7a135f61c71d4b619a0ff1040b7beac4 (commit)
       via  01fc90b3fcb1804a33aa575722ae47a925154c45 (commit)
       via  3d157007f6bec653f524a4df5e4e69d825df9765 (commit)
       via  1cf7975319b8cdf4a02d8a42a451bd8efe9a39b6 (commit)
       via  d8c489df3b0ecc6e0b99574b42df99395e062a97 (commit)
       via  f9e02b0cc41ec2091624c74e456824eedb80ce23 (commit)
       via  3047a97c6f458ab10412d10c13f7e70f225db40d (commit)
       via  4b87212c41670c6bc7f44a23cb592f64ccaa2eb7 (commit)
       via  f85e73087e64922d29e6791d50be34f5f641b734 (commit)
       via  e214ac57f377bc92bf2b334ee20bdfd498c84e59 (commit)
       via  6e40390d2696abaa47d5529ba76dc54beac31239 (commit)
       via  f9ccc6efdfb8ec6548e5e1d28a122f5ae5fb3f93 (commit)
       via  8b2c139778d086eaad39eb9d21c6fa6b5e854947 (commit)
       via  5fea10a1d71ac153b0f4bf0d670bb748b04584c7 (commit)
       via  8799e3a689b1fcbbb0024486483c950db278f983 (commit)
       via  30d0ffc698aefb825de4c62e30751a053ed50117 (commit)
       via  cd37e4bfeace8790e7f25c0172c2657cb4cb685c (commit)
       via  3dcd88a884d18ae35979e2bcf211c42d4a5ef7ca (commit)
       via  c2d64a2484e882cd07b3ac7f2134eed2d58b12eb (commit)
       via  000fedfbfbc90f0a0bd336ad2f10722e539bef65 (commit)
       via  e88dabaf4c234a52861fc3a1b2a85363c4d5da15 (commit)
       via  83ab4a681f4f12c6ce2353a558d2b9b5f3a0f0b6 (commit)
       via  9bd9ceb75c9b6e7bf92fd5f53c4468cdf795fae1 (commit)
       via  1fca089d622036e21db40e94f24f85e375969e5c (commit)
       via  b425658f2fc7d927b2c8b5b4e4ad4843ec83dbc9 (commit)
       via  fc45135fcd0ba927b43e70ca4fe216c36d7a3021 (commit)
       via  f9c1ab67ba7f2bccc92e219648d4676550cb4318 (commit)
       via  2c6bf97b205fcec2cca80f51785cac6699947c2a (commit)
       via  5d2a6d4842aea02cef845d6449e5b76b6e282692 (commit)
       via  9f51031a00f0b6abf60cbbb1dd6818e60892d40e (commit)
       via  e421d1734dbb5d2e7d365633bb5a4ecd1e8dfdcd (commit)
       via  6a37993df725bbe699fa01b92810c28d6b80edfc (commit)
       via  ac5bef80aa19a944cfe4f659d26c7f68ce8c2e61 (commit)
       via  aeef8f3a5cfabad1edf4619e325feef811742ff6 (commit)
       via  39f53ae4e22333aef1744d79803e3d9b46e57e38 (commit)
       via  92a074bc18a838aeb0ada8555fbf749f7b150c82 (commit)
       via  09037027389b169f65dd274106d2c065d8ec66c8 (commit)
       via  c8418d49768593fa13f63f1a1b7e0125ea792d27 (commit)
       via  e28035d7adcbd83eca4f5b566785ccf7bd2915db (commit)
       via  dd8cee65b296d52cf5a78e04979f8b7b3f4b179d (commit)
       via  2c567fd720180db894b204dd518b50297712cbe3 (commit)
       via  6539bfc118a46812e91b37642e331a5e198a9412 (commit)
       via  7fb35aab06139e208b006c55977cbf607dc58e28 (commit)
       via  94100bb3d16aa9a0f8b202800fc40d2bebdcd0dc (commit)
       via  5941c0d877ce89b5487b9675a1e28c35d406ab95 (commit)
       via  016689fa7c69b5a82079082b3eddf69a55dad538 (commit)
       via  3270a47fa821da9dc57c600a14bde581ff397431 (commit)
       via  7c714b836e7146cb767861e51cf2c990e8844998 (commit)
       via  4d441b043749c5eb09619533a52054561c7b98fb (commit)
       via  4d3c1801b7dccf5f2938b2a9ddbbb88da0e32e96 (commit)
       via  9bbc3224fff220f88caa324d6232713ae3445e12 (commit)
       via  a3e0ea84510b67400f203598eca7b91286ca84b5 (commit)
       via  c58b35021249095b2a09063af856b0823365e177 (commit)
       via  4665331502c7a6169e990bb1358278bb798f9f3b (commit)
       via  18d3cccd6a471ce4b75460836730ed0918b36439 (commit)
       via  8e26241e1ca00195d8361a982888875fcc70c7bc (commit)
       via  d54349d2a6c38b64efd483686021e0d2fefeb4d6 (commit)
       via  ba2f082495c58665aaca27e5714e1e65d2162f51 (commit)
       via  ff7ae9088d754aeea29fd84be6cb3c1d6d307bd3 (commit)
       via  2f630f6c1d89c50b83bd3b4cc88854ca6e95629a (commit)
       via  11155d3c39e34f1be62beca84eed6cbe2b75e8b4 (commit)
       via  9ba98b63d72e4e7f7041039815f161e946827b74 (commit)
       via  0e5070c3562118c6573430007b282fe71b2915ff (commit)
       via  6795eeece9ab889cc1698e3fad6ef53100ac49f8 (commit)
       via  e77169a7f4bb0097a8e1900b931e78abb4c82070 (commit)
       via  a16101ac8954c71daedf435af52da42e681510fb (commit)
       via  8d99b5b46cdd9bc80580716e63e095f92122ab97 (commit)
       via  1ff1a8e355132fdbb4ab1d7da215fb68216418be (commit)
       via  9e552843298fb88de2bee4ad3b8944a3205a785c (commit)
       via  992a698b0a9def23ffd2067cc18545ad1e1b8391 (commit)
       via  45bc8f4898c3b92e6bf6ebf67df3833cb9f83ea8 (commit)
       via  3f50b2dcbdf87b5c93437357cc581c0262188967 (commit)
       via  e5e0118b5048dc99265a41419de1c98a6ebad586 (commit)
       via  10856af027e1d4d2fbf1cd28fea0135cdd72b1aa (commit)
       via  64fc8e74d9aa822e07ea129890878b709a2d91de (commit)
       via  9236de5593853162f502f8fd0af08dcbd785d013 (commit)
       via  3bc7d52764c7dc6d7561e26974bdd515b9d7da98 (commit)
       via  5e751681dd3d103ae4a4a2b89cd4c65b2b5620ca (commit)
       via  0020c0d006d1149f2b738f2c82cbf61d7126dce6 (commit)
       via  e1c1e7e95d02bfcff186c7c867c49d4795edb1e2 (commit)
       via  4656b73ff91824bf9d9b515559fe869546ae4d5b (commit)
       via  c656b1aaeb1f696dce4cafa37b18e0f3da0ea6f7 (commit)
       via  6c5267359a374c6fd66702a0eea44d24becf604d (commit)
       via  56657a8f65a89dddf275132a8d430e677a50207d (commit)
       via  bc3d05d7c40c40165a1f12b41ce5ab4fdb393f24 (commit)
       via  5858999045c59a4ad6baf7ebbba77b086f541d91 (commit)
       via  b7430aeb8cf2a57e4bbccbf620ce42d45110793d (commit)
       via  efb3938f7c5b5cb823eb8777f12db33f2e29503d (commit)
       via  16363939b9b30feccad515368739152c416c0959 (commit)
       via  53fae929866a0a13ddb5b2a6f28b14e3be6017aa (commit)
       via  eb045d41e50c1a3fb0a232b7f47dcaa4921e556a (commit)
       via  47ed766eeaee877108e0a0ba4d74a5c2319d65d8 (commit)
       via  aa1eb64332158807cc850c7d1b4ee38c96d48ce3 (commit)
       via  a9d46c03598fe182259848bab59639d140e033cd (commit)
       via  a7b40becc607563b42f608a6a6531133b2b3d5ea (commit)
       via  f7a4db959de4a379c7ae61fe68f32de1633e558b (commit)
       via  1dda547904769b1b191c26657f5bce59c5bd526c (commit)
       via  fe410c49eb2440f0f701dc800cf33b99cca57312 (commit)
       via  0a23bd4144a5519774b0f557c8d8ad11ffc3225e (commit)
       via  236191e9c9e2dc8055e0eb83acab4732f884cf23 (commit)
       via  31cc7826a87870ff95a1492a5d83ae8c5875985f (commit)
       via  2ccab7b59323a75aeb329abdd1d600bb7d4072dd (commit)
       via  2666acc24a70086e72312eebcdc1d856fa72f3c2 (commit)
       via  574cdbd739e9ff29aead16322fe4876993ad4fbb (commit)
       via  a666d527701c528fe4ff584cd567693b43a1228d (commit)
       via  c44ca3afc17ccb58aec4a36293c7546f5ee0abaf (commit)
       via  3d4b424c364e5266c8ab31694dcc8ce357cdc257 (commit)
       via  d326f2e6308ae6ea07295046332bc2ca78dffc3e (commit)
       via  daf301d08beb0e4c3fbe334f768ece4040105b8b (commit)
       via  8fd8670301c8d674ac603fbbb2ab413a35155042 (commit)
       via  41ac517b8b58d98282432a9d0704b1265e4d952d (commit)
       via  c2e7a4a948455bf8eb028feeeb3f870655ef290d (commit)
       via  3f8f2aff6f20be461b1f303ca9bb654a39fa28e3 (commit)
       via  39482b09e23d2803062444b495e81bc0b3f8f9be (commit)
       via  cc743fa4022fc775eb845b86e2b484639a7bdaa0 (commit)
       via  10b5bcba7a17cb89003bf14f6d06566953c5f9bd (commit)
       via  f1237d48b934febc55671dc6e2b6d2b7148d8018 (commit)
       via  7dbe179f9501c06752d232472a3cf06c2397f236 (commit)
       via  925f2b7278f0ff5945b039d8050b8560dba72043 (commit)
       via  44d113131bf8b3c7d1651d1bda99f6fd7aead876 (commit)
       via  5626cb4a6e01f4ba8a8f6f53c858ae9ff513eb3c (commit)
       via  c651d69674202e1bb521db9dbf49500e250228ce (commit)
       via  96b697bd5f8d903c0cffbc3ea98f2563450a1912 (commit)
       via  ddd6af9ca9fde1ea231c42ead81f723dce4eb728 (commit)
       via  9dfd8a132d57a5a79bf55712ccbb7e6fc80597db (commit)
       via  99a3c8d2210f97797185641c08f483d8947cb00c (commit)
       via  33ea36ca469b26f39c9d490e6c0e5091c1efc00f (commit)
       via  11bae1fde0abb4fd054f74599939ce5a88f673c7 (commit)
       via  0d4eaf3bbfcd0e5eb8bab3c25f15a934ec4c5d73 (commit)
       via  eec8c167cb07c52b0372a519709f8009c0757fa3 (commit)
       via  7545efddb6f477702a5b91c5d57d149fb246aaa7 (commit)
       via  2599184e887a03e25259df48ae19f1f696da0f88 (commit)
       via  8eea813905fccc25bac11f00a69c704913231727 (commit)
       via  1121bb7fe686b067b51eb5a3b4124493266212e7 (commit)
       via  b8301b0dd57e3a77871af3292bbe275ae92d5d3f (commit)
       via  2b9ac92b7e4702857c827b58739d321a23a02fe9 (commit)
       via  1e5f09a594a1be9e6dce0ce7c311cab27bd2c3fb (commit)
       via  af61568cbe1cf224f4fb872d1dd030ac160f96d1 (commit)
       via  49ca24c16f523880e103f506cac0a526acec22fa (commit)
       via  0dee0cbc521c9a765aa27dd39797dcdb4820cb8a (commit)
       via  0f25fbe793075926ff20d76d0d88515831c07dd9 (commit)
       via  1632e98a05f8b50ddb7eee75cba0645ea099497b (commit)
       via  b866e07d700d9c204e81d5d5aa9a91adead5ea86 (commit)
       via  80c41c99fc91c9818dbc7c5840b584de4d48ae23 (commit)
       via  b6ef9b00ad41bbc7e75f0f7245c0a7226152c6da (commit)
       via  bd1ce540d48505e5eb216cf47f4807946ffcffc3 (commit)
       via  d59901bf1edb4e4cb620ed4bcb0ea5134e25bf31 (commit)
       via  c50f92c50cb77b879ed247d789bd944f18e3f95e (commit)
       via  2eb6da99d33264aa1cdf95b6c6a848fe21c6e4ec (commit)
       via  17e540d0deb735c66e3905a1e42a4e175516faba (commit)
       via  d021ed55039d2df71cbe8546a37439f186beac85 (commit)
       via  d9f7ae0ae21c18cdb2445da822d0ab92815880e8 (commit)
       via  f1c5b65baf5a01a6108e6d4e295d2936426c5110 (commit)
       via  1a381ab963d8b8c70a8b8ffd05afa64f6e06ebb0 (commit)
       via  6c0359720c16f91070142ac9ce343622d3bf233f (commit)
       via  b8ebcb3c219adab1671e57ef584b185b271df72d (commit)
       via  c02f2ce6a4d1ab7aba417ee786c0f2d86d05b6ef (commit)
       via  5b45f8f3518a5c460cabe692fadc1b1a751b04ba (commit)
       via  772d3a76710d0419d4590047700127955fa4dd58 (commit)
       via  3c668430ce18b9a9f67900be37dda47afb0ca0d4 (commit)
       via  c2c1232c19ca089f42607a4fc08971c2187c4125 (commit)
       via  9fd15b31c4e6e2c3af07f8f4812acdda09ca5594 (commit)
       via  06cdb76670763fd60f6dba71e385a98867c87ac1 (commit)
       via  0bc3d4936be6d173ea7dbb535360ff588bd3ad11 (commit)
       via  04ec835ca132cd04bba58587f9c17e5e4d70a3ab (commit)
       via  84ae475d556ca807574007202eeb6759a3ca6638 (commit)
       via  5d314e6454b740df1f7b32f8c91493ab05993a7c (commit)
       via  321533455c39d687b32a9c4d09416c6752b89c96 (commit)
       via  6205c8e67cb639b2f3b5bc181be027d1ea53685a (commit)
       via  f70943ca40d5107cbc0e0e8d198ba630c48f3ddc (commit)
       via  ed4742d8d47260cc84d40a42d0d117fcb03bf969 (commit)
       via  f736ac4d9735600af24d8b71dd7b1fa40b4b055e (commit)
       via  04978a336380c8e44ca536450323eabb5d869542 (commit)
       via  dd5f5c70a722ce384f525c7a75eaf11065a350c9 (commit)
       via  cef31d7bca20b76132f1a9113dc6869c02beedc6 (commit)
       via  66ed5248ad2acd02f092407dd99fcca282ea396c (commit)
       via  49a411254844e9ee9594f5a928513180e94c2e20 (commit)
       via  4726e71d44cbb15109d98de2848c3542072e33d4 (commit)
       via  4db82cfee4c2b33c7069395755bf79e1fa1e798e (commit)
       via  90338cb26760c808d4c22baa26e8bcd63c05db29 (commit)
       via  a989f9ad51deb69d4c1822c6fe22e27d1e3c8e85 (commit)
       via  0c6551cf1325453fb612f58d4759b50f1fe51118 (commit)
       via  8b6a103bbf970eb09bd496d7b0a4c0f0b4c318f7 (commit)
       via  175032e07b929a1df3d7eec30dcda465f545d2c7 (commit)
       via  ed6e58a45c526528052de51f6a585f731b9f3907 (commit)
       via  1b70d95cbe73cdfdc9a54d15a73b6838ba8bc4d2 (commit)
       via  e0afbdaf059ceaf3a1897b04bf4466438824b262 (commit)
       via  55e101c365193a5f3098f9eb75c5219c2188d50c (commit)
       via  01229ff71038431d2e60a278978ca81a614e1091 (commit)
       via  ba38697528df5aee2525631fbe2dc8af93bd47b6 (commit)
       via  38e54b7d49ac2040a19977724aecb9af019050b2 (commit)
       via  93b0cb9b7e688a7759f64113532dfa3238263d8d (commit)
       via  99dae4e56079956ceeda90ca6b1e771ac33fc7ed (commit)
       via  4b6e032e1b148f2e67cfbc875fd59abca1ef6e6f (commit)
       via  abf64d53140cdea8becfc932829fab348f35923c (commit)
       via  92ad3a293a6cf727ecfff77618be4ad287ec95cf (commit)
       via  4db326a3ed9019020bcd5c3a2a6c80ade303f2a6 (commit)
       via  2dcdec1191dcd579bbc915aca82e68ca4c7a264d (commit)
       via  f59696cd8b0688b074548cf1941172e774b05b2d (commit)
       via  1c300f091f244070950cd7c849a718ba26210bbc (commit)
       via  b08b19e8c33199ae97acbb33528daa56d01b4225 (commit)
       via  2b746cb37980d455bb3541e539c3f378b1086b8c (commit)
       via  55977abb40f21e2dab5bb5c4e071d8d1d4f857a7 (commit)
       via  7bd5347d55fa747cbc3a92a61c512adb79ffaf39 (commit)
       via  d27e73605deca1532a7663a29ba22037106fbeba (commit)
       via  436e23c59a7f1e51c1911d6033453d631f34548c (commit)
       via  9387bfa5938aa45d7e6d1d4f01fc8d45114201a5 (commit)
       via  6cdcbcc195eaa5143a72c6c9b6aba15c0e30081f (commit)
       via  476532fac69e8c5ff1f16c8e851837f46a81cc58 (commit)
       via  aab1dce800994dbc5242f74310fa521c7d4e09c2 (commit)
       via  9f9e3bea5e3ff846793fafdf5ebcb530d031df49 (commit)
       via  88e123ddf74b117171f8bd768c02f7a4e649f3ae (commit)
       via  63ef7350ecf96176050f247f954f8bec7c19d0ae (commit)
       via  8068cd19008a18d491e53c21d5c2077de0a38bb8 (commit)
       via  589d3e8ccbc54bcaf6a62d4ab9a900875eb01100 (commit)
       via  0484a9af6e10654422a7649ef73aaa1faf3200f4 (commit)
       via  03fb777e1d4d46d38308dd1bab56e47090e0c41d (commit)
       via  fd7ec30674dc712e70d1dbf3735c03e3d43ff432 (commit)
       via  9eeb2e1bbad26d7d19913c3984d85cc52e59829c (commit)
       via  541409402036e8692ad8133982d98693afd7d9fc (commit)
       via  b3dabec63a6340ea6b62d908245e1cd3438898fa (commit)
       via  cc9542e9c186c462df876eb1bcf4e6a986ed4acf (commit)
       via  bb4e15b9f4ba8017f10e2c4eafa22d36e39a5390 (commit)
       via  06af19a1124b9f278ab14c37b1e6bed14214ca91 (commit)
       via  af104f8c5f1e98c864f00cd7ecb1ee84dc53846f (commit)
       via  15a372cedb6e53fce2d17c2acf66910b4d6f22f3 (commit)
       via  ef065ce8d656f383b691c2cd62c76c0748321d68 (commit)
       via  b869319d1dc8ae68de7994e80d8f80a0dee51ac0 (commit)
       via  a9ae33bb47882623c8b276eeb78f83f212f85ad3 (commit)
       via  4fa30fc051592156cf6e33e1db7da5aace1373e4 (commit)
       via  7724b20e9a9bfa9154f7242bffa08d8de5bea4ff (commit)
       via  de443469de325d2dcf6f3967251068cd5e4f2c84 (commit)
       via  d2907c9d7959f4e88daebfb6685e714d7e971526 (commit)
       via  e399dd76b0e33b04da5b7e8392bb546f17adc6fa (commit)
       via  10d63d385ec219377e49177de3124809ebc0a540 (commit)
       via  6fc526bd21bad8672782139dbc082e86b13a8eaa (commit)
       via  5c4323b11ccea3fb8e5a140253cd7b539dfa48e1 (commit)
       via  f159ab7285fe2bd15400a1d04785eba3161a0bff (commit)
       via  105dbd64f29c811118cff4104dea89c3c6f6084e (commit)
       via  27ae32d2e7cebf14daa5e4cdfa3a5a4b813dcd76 (commit)
       via  d9a108415b8b0a7c1b0fd34e1b9985d0f36af56a (commit)
       via  9a2217a6bbebc708d0c6b8d6dcb91fe20cbc6a86 (commit)
       via  b8bd8e396403abb86c1c9385b739cce9575fd619 (commit)
       via  547034d1e3d96fd70c747d89f9d465138e55db3a (commit)
       via  75ee556a9967dac62b4538f5fddfbe694c78d1ad (commit)
       via  960796d23d4c47d83beb42797cc899fcc9f7a574 (commit)
       via  13d590631b387a97ed673d97377e069fb458856d (commit)
       via  1fa3fb25d99ac15ce8a3faeb4debb5972328f263 (commit)
       via  b4745890f5277e4181377208ef924ac8cdf8e86e (commit)
       via  fea9f00597a76e5c91f3f06ffa3ddf89032a986e (commit)
       via  320b04935494bf0722c2862309222ea309ab5ce2 (commit)
       via  3affee9bc0d714c8d6c7bfe4f770cadd98d99876 (commit)
       via  0d2cbe26df8bcb7f6cc84e3de7a0ef2263e69a7d (commit)
       via  a281c1bcf5e696e7e945b7a825220ea3c562722f (commit)
       via  aae60143cb4079243629cd0c5d28be8f45c02b49 (commit)
       via  9682ef3971574a6c4d9668c12971b7018506635d (commit)
       via  f336ab34a7e648c59c2725bed7959b3553529b7f (commit)
       via  a656c138621ceb463f8dc3795a272d34373e7ef8 (commit)
       via  af87738e069753c209db476a5a37f450764e9440 (commit)
       via  ccade868a962ac0f687777c0c5b0f3680b6384ed (commit)
       via  f9623467220d97b902165c34f86a30940ae79dac (commit)
       via  029b296f259d7b3e90dbb7250bd86422cdeb4005 (commit)
       via  c7e96763c7fbe1317a23b78f9d7cf2b04383f24e (commit)
       via  ee64afa019d7ff3d6fdf15dc6cedc3d676748a2e (commit)
       via  ef2abc04932ef00793410f526833e863b3f0d0a4 (commit)
       via  7d370c6d10e4c5f4dccddb01460201bd13f366b3 (commit)
       via  d91ddd752f1f48dec7ebf25004bdb9b4c2e26261 (commit)
       via  eb78080080e9357526fa23e08cd33c924530a4a0 (commit)
       via  4d56bb8b1b49a48b2d9f8c06e6c1c566f739ebfb (commit)
       via  286a7152f2984ca4704b4174a4c6cadca793c28e (commit)
       via  1dee705828cd68a9d1ba84e3874da226fc6ee83e (commit)
       via  b9dddedc96e26910a31bef73f8fefaa544fd532e (commit)
       via  b4c37949dc19a383e199ff3a7992526dd36cacf7 (commit)
       via  0b49c3fd2e11c63d0b778c2867499bfa7ec6ae1f (commit)
       via  76fe65a650d2fe8737956942edf8e6dea5da896a (commit)
       via  9af308a5f8a7145f5a2a6457beaef508d56ea4de (commit)
       via  38f5bc5baff1f97970e3430bfb90a61075e7a3fc (commit)
       via  f63bf8199f61a2dd3509cd68eca412770eb56885 (commit)
       via  b0846efa4ae2813488680cd793516ec3ed8f4ec7 (commit)
       via  d6ed864b0ae99a2791faf80be73df0b34fed0333 (commit)
       via  316f1c6bd42467a6d513a442e25a5a7989d92662 (commit)
       via  20eff1df7dbbc0ee551355afec529f0bb725d4a7 (commit)
       via  d346426d4d60190c867824fe8119d6943ca5dc40 (commit)
       via  00eb093580575ca7066b51e0624a7a1d9d02faa0 (commit)
       via  0986b4e64f46f23a60a6d1bbd40a85f6a05643c6 (commit)
       via  7a343496ac6dca86c1e0e51d57591107689d6ca8 (commit)
       via  2140cbf244e97dc1f94dd22c47d296b420d9cf6f (commit)
       via  0246ecf1f56c95cdc5a736a7e27f033ef0c984c0 (commit)
       via  c3ad4f3498453eb7789890f121497fe5c7637e01 (commit)
       via  9114d45e537f2e3646e95db40275a4d76ba5834c (commit)
       via  f92c5524603e483b16d2d9306d4d11b0b23a0834 (commit)
       via  5572a73fdf5e64ae2b9e4993aa5d1c1008b6e3ea (commit)
       via  61fc497f2cdaa5a52bb37d203fc816a7d8430027 (commit)
       via  3eb108acc93e46c13b4c1b4479df35067e9f168f (commit)
       via  6b9c146ebce7bc4df0b69df88bc60904d3ee597e (commit)
       via  73002ccc1416df272bbe0ffe439a9b66df33c84c (commit)
       via  be265da6d4313f6408a84ecda425adc17b08607d (commit)
       via  ecf330f17797ae47a8678121386178963d4e11ac (commit)
       via  3bd7056e8683add7c6279fac5e7741d9af3b736e (commit)
       via  c183d6ddfd14d0c1a6708127f78558dae9377aa4 (commit)
       via  733655684ae4aa7b9267710b6cfc7b199843b12a (commit)
       via  4b7fd4490ca7f9add32a49387cf87ddc03c94958 (commit)
       via  e50442091c69fa6d52353555140f2c814c34b039 (commit)
       via  638f8a810c056014bed7b4bd303db7b2de9e08ca (commit)
       via  35d35f49ed56d06b2648fc68ed313f69e983f773 (commit)
       via  3fe9fec711a4c86cd12f446cbb61551adb28e55f (commit)
       via  793e983fbe4f775a6c776ce0b2b3b7b0d245bf7e (commit)
       via  ddc49fdd2b2e32fd009f1981433a904a2ceba67f (commit)
       via  c67444734d724ee93c9e951a48da81902663eb2e (commit)
       via  de394a55c6c7b107b20661253748ea984e748d0b (commit)
       via  e26ebaf981dcda084a41fd5773c725dbbf57636d (commit)
       via  82d480e924e6a4975b885d3a6c5100b2d4e9bd58 (commit)
       via  61c4c034b4e332826e2255e5705cb5e941dc0006 (commit)
       via  a6e80cbb8829f29ac73192c2a1b0ce6ac5f4419b (commit)
       via  99529740bc3d8b043c77c1e9733060fcdae2c7b1 (commit)
       via  c7ba3a5df00a3668fa5dfdafb0a2c500326d36fe (commit)
       via  7e48c8913c1c00e783f8dcc9f536fa2bd89e640c (commit)
       via  bbcc946f33227973a8954179a0a386cbc010dda6 (commit)
       via  f96412cf23909df8565d2bba524bccd3c332d77e (commit)
       via  3a9d58108af35baf4cbaba576ecfeaf6b41af9cb (commit)
       via  f462322be590be24f07772d46952c6614d806370 (commit)
       via  bbe6cec3034cfba21327aff26b37bd601b73ac7c (commit)
       via  719e576051cdbe6f5950f666248c0a64aacbd061 (commit)
       via  478795477985abe1f0f32caf2cbd4eae8b2d203f (commit)
       via  5cdee47abac7b966996e1eb0faa368b83f006970 (commit)
       via  9d68bf115cef67a3798da716c33c559ed7dc1b07 (commit)
       via  541054e88dad90258e583a726b5f63a2bf811138 (commit)
       via  5b71f47a4d144450174433fadd6f44fdb69815b2 (commit)
       via  d61916b11041ff97be8797a19ddd56b21319ba6d (commit)
       via  003b046116f5747f2cdbfe2799e4edfcadc465cf (commit)
       via  1b232831c4fc7516bf5cccf9131610a24a4d407a (commit)
       via  bc844db311b1344b3f1306e57c93df170c6c8b62 (commit)
       via  a9523bca32dcb49095d8e1f47c407ea20a930582 (commit)
       via  831ee13c3a2210715166343054ab966bdd3748a7 (commit)
       via  139302fd5ecc9e4d4b39f99c99ccbf2f51e0a78d (commit)
       via  e88fdbfef65b2f0e297cf05ce5191ba49035d493 (commit)
       via  89b0e1c31ad719100b01073d359fd454c75ac387 (commit)
       via  a22a8338f2d5b1c3659265fad3336aef30f93e96 (commit)
       via  e6ba0f68606cf6050ecdb890d6eb7b7bcd2dcbc0 (commit)
       via  6331247e7ac78a4228992ff8b707f3a1709eb8e0 (commit)
       via  31132ffbb96b5514887594ce01bd758442eadda7 (commit)
       via  63783453e6d9ea02c5fdf1f0310daaf80230b9bb (commit)
       via  25786356d321efb88af4b71951589b1b2776ff87 (commit)
       via  a6d7aa570e8c4ff1bbb5891c48c406ef1d5a1529 (commit)
       via  0d45cbe27b77a6641fc5c0ea2d3fe5de93c8c6af (commit)
       via  e4b6f8528e38e139ef15638ace6d2f524e4755d3 (commit)
       via  10f9db8ac643a1536ffa10c4cb8c1f685192e3d6 (commit)
       via  991fc862310c917d9b70bae00412f30fa52c23d3 (commit)
       via  6aba0e8caddebf916794193ba28a582bebb68b64 (commit)
       via  6901797894781150c8a6ca0552a91624d18eab0d (commit)
       via  70ed84ffec97bfb04591c01304b0a413c481dd61 (commit)
       via  d371bc3cbf6c733aa5e7c65a1838088e3ce9102b (commit)
       via  6ff87d41e6d23c296beeaaae3abde1a5311e9953 (commit)
      from  0f5b0542513b572959e39400bae42e69aeb1a7b6 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 4ad6191d53207a8b2d4c0c8a30b18119daaa5fbc
Merge: 56a2e5c346 8e913832ad
Author: Tom Clegg <tom at curii.com>
Date:   Mon Nov 6 12:14:51 2023 -0500

    Merge branch 'main' from workbench2.git
    
    refs #18874
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>


commit 8e913832ad289fd28700f4081046b7de48688130
Merge: 5c43d68767 5b30fab055
Author: Peter Amstutz <peter.amstutz at curii.com>
Date:   Tue Oct 31 13:53:33 2023 -0400

    Merge branch '21067-process-panel-error' refs #21067
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curii.com>


commit 5b30fab0552f623a35ff5b89b90dab82dfcee258
Author: Peter Amstutz <peter.amstutz at curii.com>
Date:   Mon Oct 30 15:24:39 2023 -0400

    21067: Fix bug deleting projects from shared-with-me
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curii.com>

diff --git a/cypress/integration/page-not-found.spec.js b/cypress/integration/page-not-found.spec.js
index 4df4135c87..6eab27c827 100644
--- a/cypress/integration/page-not-found.spec.js
+++ b/cypress/integration/page-not-found.spec.js
@@ -45,8 +45,7 @@ describe('Page not found tests', function() {
             cy.goToPath(path);
 
             // then
-            cy.get('[data-cy=not-found-page]').should('not.exist');
-            cy.get('[data-cy=not-found-content]').should('exist');
+            cy.get('[data-cy=not-found-view]').should('exist');
         });
     });
-})
\ No newline at end of file
+})
diff --git a/src/store/trash/trash-actions.ts b/src/store/trash/trash-actions.ts
index 884293a90e..62b669220e 100644
--- a/src/store/trash/trash-actions.ts
+++ b/src/store/trash/trash-actions.ts
@@ -9,104 +9,112 @@ import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions";
 import { trashPanelActions } from "store/trash-panel/trash-panel-action";
 import { activateSidePanelTreeItem, loadSidePanelTreeProjects } from "store/side-panel-tree/side-panel-tree-actions";
 import { projectPanelActions } from "store/project-panel/project-panel-action-bind";
+import { sharedWithMePanelActions } from "store/shared-with-me-panel/shared-with-me-panel-actions";
 import { ResourceKind } from "models/resource";
 import { navigateTo, navigateToTrash } from "store/navigation/navigation-action";
-import { matchCollectionRoute } from "routes/routes";
+import { matchCollectionRoute, matchSharedWithMeRoute } from "routes/routes";
 
 export const toggleProjectTrashed =
     (uuid: string, ownerUuid: string, isTrashed: boolean, isMulti: boolean) =>
-    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
-        let errorMessage = "";
-        let successMessage = "";
-        let untrashedResource;
-        try {
-            if (isTrashed) {
-                errorMessage = "Could not restore project from trash";
-                successMessage = "Restored project from trash";
-                untrashedResource = await services.groupsService.untrash(uuid);
-                dispatch<any>(isMulti || !untrashedResource ? navigateToTrash : navigateTo(uuid));
-                dispatch<any>(activateSidePanelTreeItem(uuid));
-            } else {
-                errorMessage = "Could not move project to trash";
-                successMessage = "Added project to trash";
-                await services.groupsService.trash(uuid);
-                dispatch<any>(loadSidePanelTreeProjects(ownerUuid));
-                dispatch<any>(navigateTo(ownerUuid));
-            }
-            if (untrashedResource) {
-                dispatch(
-                    snackbarActions.OPEN_SNACKBAR({
-                        message: successMessage,
-                        hideDuration: 2000,
-                        kind: SnackbarKind.SUCCESS,
-                    })
-                );
-            }
-        } catch (e) {
-            if (e.status === 422) {
-                dispatch(
-                    snackbarActions.OPEN_SNACKBAR({
-                        message: "Could not restore project from trash: Duplicate name at destination",
-                        kind: SnackbarKind.ERROR,
-                    })
-                );
-            } else {
-                dispatch(
-                    snackbarActions.OPEN_SNACKBAR({
-                        message: errorMessage,
-                        kind: SnackbarKind.ERROR,
-                    })
-                );
+        async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
+            let errorMessage = "";
+            let successMessage = "";
+            let untrashedResource;
+            try {
+                if (isTrashed) {
+                    errorMessage = "Could not restore project from trash";
+                    successMessage = "Restored project from trash";
+                    untrashedResource = await services.groupsService.untrash(uuid);
+                    dispatch<any>(isMulti || !untrashedResource ? navigateToTrash : navigateTo(uuid));
+                    dispatch<any>(activateSidePanelTreeItem(uuid));
+                } else {
+                    errorMessage = "Could not move project to trash";
+                    successMessage = "Added project to trash";
+                    await services.groupsService.trash(uuid);
+                    dispatch<any>(loadSidePanelTreeProjects(ownerUuid));
+
+                    const { location } = getState().router;
+                    if (matchSharedWithMeRoute(location ? location.pathname : "")) {
+                        dispatch(sharedWithMePanelActions.REQUEST_ITEMS());
+                    }
+                    else {
+                        dispatch<any>(navigateTo(ownerUuid));
+                    }
+                }
+                if (untrashedResource) {
+                    dispatch(
+                        snackbarActions.OPEN_SNACKBAR({
+                            message: successMessage,
+                            hideDuration: 2000,
+                            kind: SnackbarKind.SUCCESS,
+                        })
+                    );
+                }
+            } catch (e) {
+                if (e.status === 422) {
+                    dispatch(
+                        snackbarActions.OPEN_SNACKBAR({
+                            message: "Could not restore project from trash: Duplicate name at destination",
+                            kind: SnackbarKind.ERROR,
+                        })
+                    );
+                } else {
+                    dispatch(
+                        snackbarActions.OPEN_SNACKBAR({
+                            message: errorMessage,
+                            kind: SnackbarKind.ERROR,
+                        })
+                    );
+                }
             }
-        }
-    };
+        };
 
 export const toggleCollectionTrashed =
     (uuid: string, isTrashed: boolean) =>
-    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
-        let errorMessage = "";
-        let successMessage = "";
-        try {
-            if (isTrashed) {
-                const { location } = getState().router;
-                errorMessage = "Could not restore collection from trash";
-                successMessage = "Restored from trash";
-                await services.collectionService.untrash(uuid);
-                if (matchCollectionRoute(location ? location.pathname : "")) {
-                    dispatch(navigateToTrash);
+        async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
+            let errorMessage = "";
+            let successMessage = "";
+            try {
+                if (isTrashed) {
+                    const { location } = getState().router;
+                    errorMessage = "Could not restore collection from trash";
+                    successMessage = "Restored from trash";
+                    await services.collectionService.untrash(uuid);
+                    if (matchCollectionRoute(location ? location.pathname : "")) {
+                        dispatch(navigateToTrash);
+                    }
+                    dispatch(trashPanelActions.REQUEST_ITEMS());
+                } else {
+                    errorMessage = "Could not move collection to trash";
+                    successMessage = "Added to trash";
+                    await services.collectionService.trash(uuid);
+                    dispatch(projectPanelActions.REQUEST_ITEMS());
                 }
-                dispatch(trashPanelActions.REQUEST_ITEMS());
-            } else {
-                errorMessage = "Could not move collection to trash";
-                successMessage = "Added to trash";
-                await services.collectionService.trash(uuid);
-                dispatch(projectPanelActions.REQUEST_ITEMS());
-            }
-            dispatch(
-                snackbarActions.OPEN_SNACKBAR({
-                    message: successMessage,
-                    hideDuration: 2000,
-                    kind: SnackbarKind.SUCCESS,
-                })
-            );
-        } catch (e) {
-            if (e.status === 422) {
                 dispatch(
                     snackbarActions.OPEN_SNACKBAR({
-                        message: "Could not restore collection from trash: Duplicate name at destination",
-                        kind: SnackbarKind.ERROR,
-                    })
-                );
-            } else {
-                dispatch(
-                    snackbarActions.OPEN_SNACKBAR({
-                        message: errorMessage,
-                        kind: SnackbarKind.ERROR,
+                        message: successMessage,
+                        hideDuration: 2000,
+                        kind: SnackbarKind.SUCCESS,
                     })
                 );
+            } catch (e) {
+                if (e.status === 422) {
+                    dispatch(
+                        snackbarActions.OPEN_SNACKBAR({
+                            message: "Could not restore collection from trash: Duplicate name at destination",
+                            kind: SnackbarKind.ERROR,
+                        })
+                    );
+                } else {
+                    dispatch(
+                        snackbarActions.OPEN_SNACKBAR({
+                            message: errorMessage,
+                            kind: SnackbarKind.ERROR,
+                        })
+                    );
+                }
             }
-        }
-    };
+        };
 
 export const toggleTrashed = (kind: ResourceKind, uuid: string, ownerUuid: string, isTrashed: boolean) => (dispatch: Dispatch) => {
     if (kind === ResourceKind.PROJECT) {
diff --git a/src/views/collection-panel/collection-panel.tsx b/src/views/collection-panel/collection-panel.tsx
index eed9c7de71..d93d6e9258 100644
--- a/src/views/collection-panel/collection-panel.tsx
+++ b/src/views/collection-panel/collection-panel.tsx
@@ -37,7 +37,7 @@ import { Link as ButtonLink } from '@material-ui/core';
 import { ResourceWithName, ResponsiblePerson } from 'views-components/data-explorer/renderers';
 import { MPVContainer, MPVPanelContent, MPVPanelState } from 'components/multi-panel-view/multi-panel-view';
 import { resourceIsFrozen } from 'common/frozen-resources';
-import { DefaultView } from "components/default-view/default-view";
+import { NotFoundView } from 'views/not-found-panel/not-found-panel';
 
 type CssRules = 'root'
     | 'button'
@@ -230,16 +230,10 @@ export const CollectionPanel = withStyles(styles)(connect(
                             </Card>
                         </MPVPanelContent>
                     </MPVContainer >
-                    : <Grid
-                        container
-                        alignItems="center"
-                        justify="center"
-                        style={{ minHeight: "100%" }}>
-                        <DefaultView
-                            icon={CollectionIcon}
-                            messages={["Collection not found"]}
-                        />
-                    </Grid>
+                    : <NotFoundView
+                        icon={CollectionIcon}
+                        messages={["Collection not found"]}
+                    />
                     ;
             }
 
diff --git a/src/views/not-found-panel/not-found-panel.tsx b/src/views/not-found-panel/not-found-panel.tsx
index 148c331e29..f54c00c32a 100644
--- a/src/views/not-found-panel/not-found-panel.tsx
+++ b/src/views/not-found-panel/not-found-panel.tsx
@@ -3,8 +3,12 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { RootState } from 'store/store';
+import React from 'react';
 import { connect } from 'react-redux';
 import { NotFoundPanelRoot, NotFoundPanelRootDataProps } from 'views/not-found-panel/not-found-panel-root';
+import { Grid } from '@material-ui/core';
+import { DefaultView } from "components/default-view/default-view";
+import { IconType } from 'components/icon/icon';
 
 const mapStateToProps = (state: RootState): NotFoundPanelRootDataProps => {
     return {
@@ -17,3 +21,26 @@ const mapDispatchToProps = null;
 
 export const NotFoundPanel = connect(mapStateToProps, mapDispatchToProps)
     (NotFoundPanelRoot) as any;
+
+export interface NotFoundViewDataProps {
+    messages: string[];
+    icon?: IconType;
+}
+
+// TODO: optionally pass in the UUID and check if the
+// reason the item is not found is because
+// it or a parent project is actually in the trash.
+// If so, offer to untrash the item or the parent project.
+export const NotFoundView =
+    ({ messages, icon: Icon }: NotFoundViewDataProps) =>
+        <Grid
+            container
+            alignItems="center"
+            justify="center"
+            style={{ minHeight: "100%" }}
+            data-cy="not-found-view">
+            <DefaultView
+                icon={Icon}
+                messages={messages}
+            />
+        </Grid>;
diff --git a/src/views/process-panel/process-panel-root.tsx b/src/views/process-panel/process-panel-root.tsx
index d019d1418f..7a24089901 100644
--- a/src/views/process-panel/process-panel-root.tsx
+++ b/src/views/process-panel/process-panel-root.tsx
@@ -3,8 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import React from "react";
-import { Grid, StyleRulesCallback, WithStyles, withStyles } from "@material-ui/core";
-import { DefaultView } from "components/default-view/default-view";
+import { StyleRulesCallback, WithStyles, withStyles } from "@material-ui/core";
 import { ProcessIcon } from "components/icon/icon";
 import { Process } from "store/processes/process";
 import { SubprocessPanel } from "views/subprocess-panel/subprocess-panel";
@@ -24,6 +23,7 @@ import { AuthState } from "store/auth/auth-reducer";
 import { ProcessCmdCard } from "./process-cmd-card";
 import { ContainerRequestResource } from "models/container-request";
 import { OutputDetails, NodeInstanceType } from "store/process-panel/process-panel";
+import { NotFoundView } from 'views/not-found-panel/not-found-panel';
 
 type CssRules = "root";
 
@@ -209,16 +209,10 @@ export const ProcessPanelRoot = withStyles(styles)(
                 </MPVPanelContent>
             </MPVContainer>
         ) : (
-            <Grid
-                container
-                alignItems="center"
-                justify="center"
-                style={{ minHeight: "100%" }}>
-                <DefaultView
-                    icon={ProcessIcon}
-                    messages={["Process not found"]}
-                />
-            </Grid>
+            <NotFoundView
+                icon={ProcessIcon}
+                messages={["Process not found"]}
+            />
         );
     }
 );
diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx
index 2f274c97d5..2cc751bffd 100644
--- a/src/views/project-panel/project-panel.tsx
+++ b/src/views/project-panel/project-panel.tsx
@@ -6,7 +6,7 @@ import React from 'react';
 import withStyles from '@material-ui/core/styles/withStyles';
 import { DispatchProp, connect } from 'react-redux';
 import { RouteComponentProps } from 'react-router';
-import { StyleRulesCallback, WithStyles, Grid } from '@material-ui/core';
+import { StyleRulesCallback, WithStyles } from '@material-ui/core';
 
 import { DataExplorer } from 'views-components/data-explorer/data-explorer';
 import { DataColumns } from 'components/data-table/data-table';
@@ -51,7 +51,7 @@ import { GroupClass, GroupResource } from 'models/group';
 import { CollectionResource } from 'models/collection';
 import { resourceIsFrozen } from 'common/frozen-resources';
 import { ProjectResource } from 'models/project';
-import { DefaultView } from "components/default-view/default-view";
+import { NotFoundView } from 'views/not-found-panel/not-found-panel';
 
 type CssRules = 'root' | 'button';
 
@@ -276,16 +276,11 @@ export const ProjectPanel = withStyles(styles)(
                             defaultViewMessages={DEFAULT_VIEW_MESSAGES}
                         />
                     </div>
-                    : <Grid
-                        container
-                        alignItems="center"
-                        justify="center"
-                        style={{ minHeight: "100%" }}>
-                        <DefaultView
-                            icon={ProjectIcon}
-                            messages={["Project not found"]}
-                        />
-                    </Grid>;
+                    :
+                    <NotFoundView
+                        icon={ProjectIcon}
+                        messages={["Project not found"]}
+                    />
             }
 
             isCurrentItemChild = (resource: Resource) => {
diff --git a/src/views/workflow-panel/registered-workflow-panel.tsx b/src/views/workflow-panel/registered-workflow-panel.tsx
index da273719bf..50192e543d 100644
--- a/src/views/workflow-panel/registered-workflow-panel.tsx
+++ b/src/views/workflow-panel/registered-workflow-panel.tsx
@@ -12,8 +12,7 @@ import {
     Card,
     CardHeader,
     CardContent,
-    IconButton,
-    Grid
+    IconButton
 } from '@material-ui/core';
 import { connect, DispatchProp } from "react-redux";
 import { RouteComponentProps } from 'react-router';
@@ -27,7 +26,7 @@ import { getResource } from 'store/resources/resources';
 import { openContextMenu, resourceUuidToContextMenuKind } from 'store/context-menu/context-menu-actions';
 import { MPVContainer, MPVPanelContent, MPVPanelState } from 'components/multi-panel-view/multi-panel-view';
 import { ProcessIOCard, ProcessIOCardType } from 'views/process-panel/process-io-card';
-import { DefaultView } from "components/default-view/default-view";
+import { NotFoundView } from 'views/not-found-panel/not-found-panel';
 
 type CssRules = 'root'
     | 'button'
@@ -202,16 +201,11 @@ export const RegisteredWorkflowPanel = withStyles(styles)(connect(
                             </Card>
                         </MPVPanelContent>
                     </MPVContainer>
-                    : <Grid
-                        container
-                        alignItems="center"
-                        justify="center"
-                        style={{ minHeight: "100%" }}>
-                        <DefaultView
-                            icon={WorkflowIcon}
-                            messages={["Workflow not found"]}
-                        />
-                    </Grid>;
+                    :
+                    <NotFoundView
+                        icon={WorkflowIcon}
+                        messages={["Workflow not found"]}
+                    />
             }
 
             handleContextMenu = (event: React.MouseEvent<any>) => {

commit 26e2f985f4c2b511c59977e4c63158649f296624
Merge: e11c6c520d 5c43d68767
Author: Peter Amstutz <peter.amstutz at curii.com>
Date:   Fri Oct 27 13:52:35 2023 -0400

    Merge branch 'main' into 21067-process-panel-error
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curii.com>


commit e11c6c520d8d01397f58a5cda1fe7e5e5e06acab
Author: Peter Amstutz <peter.amstutz at curii.com>
Date:   Thu Oct 26 17:15:51 2023 -0400

    21067: Remove unused imports
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curii.com>

diff --git a/src/index.tsx b/src/index.tsx
index b0bda23ba8..ede257dc5d 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -64,7 +64,6 @@ import {
     runningProcessResourceAdminActionSet,
     readOnlyProcessResourceActionSet,
 } from "views-components/context-menu/action-sets/process-resource-action-set";
-import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions";
 import { trashedCollectionActionSet } from "views-components/context-menu/action-sets/trashed-collection-action-set";
 import { setBuildInfo } from "store/app-info/app-info-actions";
 import { getBuildInfo } from "common/app-info";
@@ -89,8 +88,6 @@ import {
 } from "views-components/context-menu/action-sets/project-admin-action-set";
 import { permissionEditActionSet } from "views-components/context-menu/action-sets/permission-edit-action-set";
 import { workflowActionSet, readOnlyWorkflowActionSet } from "views-components/context-menu/action-sets/workflow-action-set";
-import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions";
-import { openNotFoundDialog } from "./store/not-found-panel/not-found-panel-action";
 import { storeRedirects } from "./common/redirect-to";
 import { searchResultsActionSet } from "views-components/context-menu/action-sets/search-results-action-set";
 
diff --git a/src/store/process-panel/process-panel-actions.ts b/src/store/process-panel/process-panel-actions.ts
index 66de2f69f3..81f8dd6ba0 100644
--- a/src/store/process-panel/process-panel-actions.ts
+++ b/src/store/process-panel/process-panel-actions.ts
@@ -8,10 +8,9 @@ import { Dispatch } from "redux";
 import { ProcessStatus } from "store/processes/process";
 import { RootState } from "store/store";
 import { ServiceRepository } from "services/services";
-import { navigateTo, navigateToWorkflows } from "store/navigation/navigation-action";
+import { navigateTo } from "store/navigation/navigation-action";
 import { snackbarActions } from "store/snackbar/snackbar-actions";
 import { SnackbarKind } from "../snackbar/snackbar-actions";
-import { showWorkflowDetails } from "store/workflow-panel/workflow-panel-actions";
 import { loadSubprocessPanel, subprocessPanelActions } from "../subprocess-panel/subprocess-panel-actions";
 import { initProcessLogsPanel, processLogsPanelActions } from "store/process-logs-panel/process-logs-panel-actions";
 import { CollectionFile } from "models/collection-file";
diff --git a/src/store/project-panel/project-panel-middleware-service.ts b/src/store/project-panel/project-panel-middleware-service.ts
index b2ddb46c66..b72058d56e 100644
--- a/src/store/project-panel/project-panel-middleware-service.ts
+++ b/src/store/project-panel/project-panel-middleware-service.ts
@@ -35,7 +35,6 @@ import { updatePublicFavorites } from "store/public-favorites/public-favorites-a
 import { selectedFieldsOfGroup } from "models/group";
 import { defaultCollectionSelectedFields } from "models/collection";
 import { containerRequestFieldsNoMounts } from "models/container-request";
-import { openNotFoundDialog } from "store/not-found-panel/not-found-panel-action";
 
 export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService {
     constructor(private services: ServiceRepository, id: string) {

commit 75b017ae9d566d523e448aaeb863c4d89b3548fe
Author: Peter Amstutz <peter.amstutz at curii.com>
Date:   Thu Oct 26 16:56:28 2023 -0400

    21067: Better handling of missing output/logs on process panel.
    
    A few other important changes:
    
    * Similar to the change in #21077, this removes the default error
    snackbar popups any time a 400 error happens.  This reduces user
    confusion, particularly when "harmless" errors would occur.
    
    * The collection files component will no longer give an "unhandled
    rejection" React failure when it can't load the file list (this took
    forever to track down.)
    
    * Collections, projects and workflows will now default to a "not
    found" panel if they fail to load.  Previously, collections and
    workflows would show nothing at all, and projects would show an empty
    list.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curii.com>

diff --git a/src/components/collection-panel-files/collection-panel-files.tsx b/src/components/collection-panel-files/collection-panel-files.tsx
index 83de48dec8..f1e50e0f0b 100644
--- a/src/components/collection-panel-files/collection-panel-files.tsx
+++ b/src/components/collection-panel-files/collection-panel-files.tsx
@@ -311,6 +311,8 @@ export const CollectionPanelFiles = withStyles(styles)(
                             return { ...next, ...prev };
                         }, {});
                     setPathData(state => ({ ...state, ...newState }));
+                }, () => {
+                    // Nothing to do
                 })
                 .finally(() => {
                     setIsLoading(false);
diff --git a/src/index.tsx b/src/index.tsx
index a3f6c1ee79..b0bda23ba8 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -153,25 +153,13 @@ fetchConfig().then(({ config, apiHost }) => {
 
     const services = createServices(config, {
         progressFn: (id, working) => {
-            //store.dispatch(progressIndicatorActions.TOGGLE_WORKING({ id, working }));
         },
         errorFn: (id, error, showSnackBar: boolean) => {
             if (showSnackBar) {
                 console.error("Backend error:", error);
-
-                if (error.status === 404) {
-                    store.dispatch(openNotFoundDialog());
-                } else if (error.status === 401 && error.errors[0].indexOf("Not logged in") > -1) {
+                if (error.status === 401 && error.errors[0].indexOf("Not logged in") > -1) {
                     // Catch auth errors when navigating and redirect to login preserving url location
                     store.dispatch(logout(false, true));
-                } else {
-                    store.dispatch(
-                        snackbarActions.OPEN_SNACKBAR({
-                            message: `${error.errors ? error.errors[0] : error.message}`,
-                            kind: SnackbarKind.ERROR,
-                            hideDuration: 8000,
-                        })
-                    );
                 }
             }
         },
diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts
index de8f258708..e50e5ed350 100644
--- a/src/services/collection-service/collection-service.ts
+++ b/src/services/collection-service/collection-service.ts
@@ -53,11 +53,14 @@ export class CollectionService extends TrashableResourceService<CollectionResour
     }
 
     async files(uuid: string) {
-        const request = await this.keepWebdavClient.propfind(`c=${uuid}`);
-        if (request.responseXML != null) {
-            return extractFilesData(request.responseXML);
+        try {
+            const request = await this.keepWebdavClient.propfind(`c=${uuid}`);
+            if (request.responseXML != null) {
+                return extractFilesData(request.responseXML);
+            }
+        } catch (e) {
+            return Promise.reject(e);
         }
-
         return Promise.reject();
     }
 
diff --git a/src/store/process-logs-panel/process-logs-panel-actions.ts b/src/store/process-logs-panel/process-logs-panel-actions.ts
index 87a2fa12aa..4e52431eeb 100644
--- a/src/store/process-logs-panel/process-logs-panel-actions.ts
+++ b/src/store/process-logs-panel/process-logs-panel-actions.ts
@@ -13,7 +13,7 @@ import { Process, getProcess } from 'store/processes/process';
 import { navigateTo } from 'store/navigation/navigation-action';
 import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions';
 import { CollectionFile, CollectionFileType } from "models/collection-file";
-import { ContainerRequestResource } from "models/container-request";
+import { ContainerRequestResource, ContainerRequestState } from "models/container-request";
 
 const SNIPLINE = `================ ✀ ================ ✀ ========= Some log(s) were skipped ========= ✀ ================ ✀ ================`;
 const LOG_TIMESTAMP_PATTERN = /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{9}Z/;
@@ -40,15 +40,16 @@ export const setProcessLogsPanelFilter = (filter: string) =>
 
 export const initProcessLogsPanel = (processUuid: string) =>
     async (dispatch: Dispatch, getState: () => RootState, { logService }: ServiceRepository) => {
+        let process: Process | undefined;
         try {
             dispatch(processLogsPanelActions.RESET_PROCESS_LOGS_PANEL());
-            const process = getProcess(processUuid)(getState().resources);
+            process = getProcess(processUuid)(getState().resources);
             if (process?.containerRequest?.uuid) {
                 // Get log file size info
                 const logFiles = await loadContainerLogFileList(process.containerRequest, logService);
 
                 // Populate lastbyte 0 for each file
-                const filesWithProgress = logFiles.map((file) => ({file, lastByte: 0}));
+                const filesWithProgress = logFiles.map((file) => ({ file, lastByte: 0 }));
 
                 // Fetch array of LogFragments
                 const logLines = await loadContainerLogFileContents(filesWithProgress, logService, process);
@@ -57,13 +58,16 @@ export const initProcessLogsPanel = (processUuid: string) =>
                 const initialState = createInitialLogPanelState(logFiles, logLines);
                 dispatch(processLogsPanelActions.INIT_PROCESS_LOGS_PANEL(initialState));
             }
-        } catch(e) {
+        } catch (e) {
             // On error, populate empty state to allow polling to start
             const initialState = createInitialLogPanelState([], []);
             dispatch(processLogsPanelActions.INIT_PROCESS_LOGS_PANEL(initialState));
             // Only show toast on errors other than 404 since 404 is expected when logs do not exist yet
             if (e.status !== 404) {
-                dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Could not load process logs', hideDuration: 2000, kind: SnackbarKind.ERROR }));
+                dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Error loading process logs', hideDuration: 4000, kind: SnackbarKind.ERROR }));
+            }
+            if (e.status === 404 && process?.containerRequest.state === ContainerRequestState.FINAL) {
+                dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Log collection was trashed or deleted.', hideDuration: 4000, kind: SnackbarKind.WARNING }));
             }
         }
     };
@@ -88,7 +92,7 @@ export const pollProcessLogs = (processUuid: string) =>
                     const isChanged = !isNew && currentStateLogLastByte < updatedFile.size;
 
                     if (isNew || isChanged) {
-                        return acc.concat({file: updatedFile, lastByte: currentStateLogLastByte});
+                        return acc.concat({ file: updatedFile, lastByte: currentStateLogLastByte });
                     } else {
                         return acc;
                     }
@@ -132,17 +136,17 @@ const loadContainerLogFileList = async (containerRequest: ContainerRequestResour
  * @returns LogFragment[] containing a single LogFragment corresponding to each input file
  */
 const loadContainerLogFileContents = async (logFilesWithProgress: FileWithProgress[], logService: LogService, process: Process) => (
-    (await Promise.allSettled(logFilesWithProgress.filter(({file}) => file.size > 0).map(({file, lastByte}) => {
+    (await Promise.allSettled(logFilesWithProgress.filter(({ file }) => file.size > 0).map(({ file, lastByte }) => {
         const requestSize = file.size - lastByte;
         if (requestSize > maxLogFetchSize) {
             const chunkSize = Math.floor(maxLogFetchSize / 2);
-            const firstChunkEnd = lastByte+chunkSize-1;
+            const firstChunkEnd = lastByte + chunkSize - 1;
             return Promise.all([
                 logService.getLogFileContents(process.containerRequest, file, lastByte, firstChunkEnd),
-                logService.getLogFileContents(process.containerRequest, file, file.size-chunkSize, file.size-1)
+                logService.getLogFileContents(process.containerRequest, file, file.size - chunkSize, file.size - 1)
             ] as Promise<(LogFragment)>[]);
         } else {
-            return Promise.all([logService.getLogFileContents(process.containerRequest, file, lastByte, file.size-1)]);
+            return Promise.all([logService.getLogFileContents(process.containerRequest, file, lastByte, file.size - 1)]);
         }
     })).then((res) => {
         if (res.length && res.every(promiseResult => (promiseResult.status === 'rejected'))) {
@@ -150,7 +154,7 @@ const loadContainerLogFileContents = async (logFilesWithProgress: FileWithProgre
             //   error if every request failed
             const error = res.find(
                 (promiseResult): promiseResult is PromiseRejectedResult => promiseResult.status === 'rejected'
-              )?.reason;
+            )?.reason;
             return Promise.reject(error);
         }
         return res.filter((promiseResult): promiseResult is PromiseFulfilledResult<LogFragment[]> => (
@@ -161,16 +165,16 @@ const loadContainerLogFileContents = async (logFilesWithProgress: FileWithProgre
             //   (prevent incorrect snipline generation or an un-resumable situation)
             !!promiseResult.value.every(logFragment => logFragment.contents.length)
         )).map(one => one.value)
-    })).map((logResponseSet)=> {
+    })).map((logResponseSet) => {
         // For any multi fragment response set, modify the last line of non-final chunks to include a line break and snip line
         //   Don't add snip line as a separate line so that sorting won't reorder it
         for (let i = 1; i < logResponseSet.length; i++) {
-            const fragment = logResponseSet[i-1];
-            const lastLineIndex = fragment.contents.length-1;
+            const fragment = logResponseSet[i - 1];
+            const lastLineIndex = fragment.contents.length - 1;
             const lastLineContents = fragment.contents[lastLineIndex];
             const newLastLine = `${lastLineContents}\n${SNIPLINE}`;
 
-            logResponseSet[i-1].contents[lastLineIndex] = newLastLine;
+            logResponseSet[i - 1].contents[lastLineIndex] = newLastLine;
         }
 
         // Merge LogFragment Array (representing multiple log line arrays) into single LogLine[] / LogFragment
@@ -181,7 +185,7 @@ const loadContainerLogFileContents = async (logFilesWithProgress: FileWithProgre
     })
 );
 
-const createInitialLogPanelState = (logFiles: CollectionFile[], logFragments: LogFragment[]): {filters: string[], logs: ProcessLogs} => {
+const createInitialLogPanelState = (logFiles: CollectionFile[], logFragments: LogFragment[]): { filters: string[], logs: ProcessLogs } => {
     const logs = groupLogs(logFiles, logFragments);
     const filters = Object.keys(logs);
     return { filters, logs };
@@ -201,12 +205,12 @@ const groupLogs = (logFiles: CollectionFile[], logFragments: LogFragment[]): Pro
 
     const groupedLogs = logFragments.reduce((grouped, fragment) => ({
         ...grouped,
-        [fragment.logType as string]: {lastByte: fetchLastByteNumber(logFiles, fragment.logType), contents: fragment.contents}
+        [fragment.logType as string]: { lastByte: fetchLastByteNumber(logFiles, fragment.logType), contents: fragment.contents }
     }), {});
 
     return {
-        [MAIN_FILTER_TYPE]: {lastByte: undefined, contents: mainLogs},
-        [ALL_FILTER_TYPE]: {lastByte: undefined, contents: allLogs},
+        [MAIN_FILTER_TYPE]: { lastByte: undefined, contents: mainLogs },
+        [ALL_FILTER_TYPE]: { lastByte: undefined, contents: allLogs },
         ...groupedLogs,
     }
 };
@@ -233,9 +237,9 @@ const mergeMultilineLoglines = (logFragments: LogFragment[]) => (
                     // Partial line without timestamp detected
                     if (i > 0) {
                         // If not first line, copy line to previous line
-                        const previousLineContents = fragmentCopy.contents[i-1];
+                        const previousLineContents = fragmentCopy.contents[i - 1];
                         const newPreviousLineContents = `${previousLineContents}\n${lineContents}`;
-                        fragmentCopy.contents[i-1] = newPreviousLineContents;
+                        fragmentCopy.contents[i - 1] = newPreviousLineContents;
                     }
                     // Delete the current line and prevent iterating
                     fragmentCopy.contents.splice(i, 1);
@@ -283,7 +287,7 @@ export const navigateToLogCollection = (uuid: string) =>
             await services.collectionService.get(uuid);
             dispatch<any>(navigateTo(uuid));
         } catch {
-            dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Could not request collection', hideDuration: 2000, kind: SnackbarKind.ERROR }));
+            dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Log collection was trashed or deleted.', hideDuration: 4000, kind: SnackbarKind.WARNING }));
         }
     };
 
diff --git a/src/store/process-panel/process-panel-actions.ts b/src/store/process-panel/process-panel-actions.ts
index 03e36aac98..66de2f69f3 100644
--- a/src/store/process-panel/process-panel-actions.ts
+++ b/src/store/process-panel/process-panel-actions.ts
@@ -59,7 +59,7 @@ export const navigateToOutput = (uuid: string) => async (dispatch: Dispatch<any>
         await services.collectionService.get(uuid);
         dispatch<any>(navigateTo(uuid));
     } catch {
-        dispatch(snackbarActions.OPEN_SNACKBAR({ message: "This collection does not exists!", hideDuration: 2000, kind: SnackbarKind.ERROR }));
+        dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Output collection was trashed or deleted.", hideDuration: 4000, kind: SnackbarKind.WARNING }));
     }
 };
 
@@ -159,8 +159,7 @@ export const updateOutputParams = () => async (dispatch: Dispatch<any>, getState
 };
 
 export const openWorkflow = (uuid: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-    dispatch<any>(navigateToWorkflows);
-    dispatch<any>(showWorkflowDetails(uuid));
+    dispatch<any>(navigateTo(uuid));
 };
 
 export const initProcessPanelFilters = processPanelActions.SET_PROCESS_PANEL_FILTERS([
diff --git a/src/store/project-panel/project-panel-middleware-service.ts b/src/store/project-panel/project-panel-middleware-service.ts
index c0c0cd1873..b2ddb46c66 100644
--- a/src/store/project-panel/project-panel-middleware-service.ts
+++ b/src/store/project-panel/project-panel-middleware-service.ts
@@ -35,6 +35,7 @@ import { updatePublicFavorites } from "store/public-favorites/public-favorites-a
 import { selectedFieldsOfGroup } from "models/group";
 import { defaultCollectionSelectedFields } from "models/collection";
 import { containerRequestFieldsNoMounts } from "models/container-request";
+import { openNotFoundDialog } from "store/not-found-panel/not-found-panel-action";
 
 export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService {
     constructor(private services: ServiceRepository, id: string) {
@@ -69,7 +70,12 @@ export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService
                         rowsPerPage: dataExplorer.rowsPerPage,
                     })
                 );
-                api.dispatch(couldNotFetchProjectContents());
+                if (e.status === 404) {
+                    // It'll just show up as not found
+                }
+                else {
+                    api.dispatch(couldNotFetchProjectContents());
+                }
             } finally {
                 if (!background) { api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); }
             }
diff --git a/src/store/workbench/workbench-actions.ts b/src/store/workbench/workbench-actions.ts
index b03400d5ae..f2dae2c524 100644
--- a/src/store/workbench/workbench-actions.ts
+++ b/src/store/workbench/workbench-actions.ts
@@ -109,6 +109,12 @@ export const isWorkbenchLoading = (state: RootState) => {
 export const handleFirstTimeLoad = (action: any) => async (dispatch: Dispatch<any>, getState: () => RootState) => {
     try {
         await dispatch(action);
+    } catch (e) {
+        snackbarActions.OPEN_SNACKBAR({
+            message: "Error " + e,
+            hideDuration: 8000,
+            kind: SnackbarKind.WARNING,
+        })
     } finally {
         if (isWorkbenchLoading(getState())) {
             dispatch(progressIndicatorActions.STOP_WORKING(WORKBENCH_LOADING_SCREEN));
diff --git a/src/views/collection-panel/collection-panel.tsx b/src/views/collection-panel/collection-panel.tsx
index 8cf19c03fe..eed9c7de71 100644
--- a/src/views/collection-panel/collection-panel.tsx
+++ b/src/views/collection-panel/collection-panel.tsx
@@ -37,6 +37,7 @@ import { Link as ButtonLink } from '@material-ui/core';
 import { ResourceWithName, ResponsiblePerson } from 'views-components/data-explorer/renderers';
 import { MPVContainer, MPVPanelContent, MPVPanelState } from 'components/multi-panel-view/multi-panel-view';
 import { resourceIsFrozen } from 'common/frozen-resources';
+import { DefaultView } from "components/default-view/default-view";
 
 type CssRules = 'root'
     | 'button'
@@ -229,7 +230,17 @@ export const CollectionPanel = withStyles(styles)(connect(
                             </Card>
                         </MPVPanelContent>
                     </MPVContainer >
-                    : null;
+                    : <Grid
+                        container
+                        alignItems="center"
+                        justify="center"
+                        style={{ minHeight: "100%" }}>
+                        <DefaultView
+                            icon={CollectionIcon}
+                            messages={["Collection not found"]}
+                        />
+                    </Grid>
+                    ;
             }
 
             handleContextMenu = (event: React.MouseEvent<any>) => {
diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx
index 4c94ab8d2d..2f274c97d5 100644
--- a/src/views/project-panel/project-panel.tsx
+++ b/src/views/project-panel/project-panel.tsx
@@ -6,7 +6,7 @@ import React from 'react';
 import withStyles from '@material-ui/core/styles/withStyles';
 import { DispatchProp, connect } from 'react-redux';
 import { RouteComponentProps } from 'react-router';
-import { StyleRulesCallback, WithStyles } from '@material-ui/core';
+import { StyleRulesCallback, WithStyles, Grid } from '@material-ui/core';
 
 import { DataExplorer } from 'views-components/data-explorer/data-explorer';
 import { DataColumns } from 'components/data-table/data-table';
@@ -51,6 +51,7 @@ import { GroupClass, GroupResource } from 'models/group';
 import { CollectionResource } from 'models/collection';
 import { resourceIsFrozen } from 'common/frozen-resources';
 import { ProjectResource } from 'models/project';
+import { DefaultView } from "components/default-view/default-view";
 
 type CssRules = 'root' | 'button';
 
@@ -238,6 +239,7 @@ const DEFAULT_VIEW_MESSAGES = ['Your project is empty.', 'Please create a projec
 interface ProjectPanelDataProps {
     currentItemId: string;
     resources: ResourcesState;
+    project: GroupResource;
     isAdmin: boolean;
     userUuid: string;
     dataExplorerItems: any;
@@ -245,17 +247,24 @@ interface ProjectPanelDataProps {
 
 type ProjectPanelProps = ProjectPanelDataProps & DispatchProp & WithStyles<CssRules> & RouteComponentProps<{ id: string }>;
 
-export const ProjectPanel = withStyles(styles)(
-    connect((state: RootState) => ({
-        currentItemId: getProperty(PROJECT_PANEL_CURRENT_UUID)(state.properties),
+const mapStateToProps = (state: RootState) => {
+    const currentItemId = getProperty<string>(PROJECT_PANEL_CURRENT_UUID)(state.properties);
+    const project = getResource<GroupResource>(currentItemId || "")(state.resources);
+    return {
+        currentItemId,
+        project,
         resources: state.resources,
         userUuid: state.auth.user!.uuid,
-    }))(
+    };
+}
+
+export const ProjectPanel = withStyles(styles)(
+    connect(mapStateToProps)(
         class extends React.Component<ProjectPanelProps> {
             render() {
                 const { classes } = this.props;
 
-                return (
+                return this.props.project ?
                     <div data-cy='project-panel' className={classes.root}>
                         <DataExplorer
                             id={PROJECT_PANEL_ID}
@@ -267,7 +276,16 @@ export const ProjectPanel = withStyles(styles)(
                             defaultViewMessages={DEFAULT_VIEW_MESSAGES}
                         />
                     </div>
-                );
+                    : <Grid
+                        container
+                        alignItems="center"
+                        justify="center"
+                        style={{ minHeight: "100%" }}>
+                        <DefaultView
+                            icon={ProjectIcon}
+                            messages={["Project not found"]}
+                        />
+                    </Grid>;
             }
 
             isCurrentItemChild = (resource: Resource) => {
diff --git a/src/views/workflow-panel/registered-workflow-panel.tsx b/src/views/workflow-panel/registered-workflow-panel.tsx
index 5973efedc8..da273719bf 100644
--- a/src/views/workflow-panel/registered-workflow-panel.tsx
+++ b/src/views/workflow-panel/registered-workflow-panel.tsx
@@ -13,6 +13,7 @@ import {
     CardHeader,
     CardContent,
     IconButton,
+    Grid
 } from '@material-ui/core';
 import { connect, DispatchProp } from "react-redux";
 import { RouteComponentProps } from 'react-router';
@@ -26,6 +27,7 @@ import { getResource } from 'store/resources/resources';
 import { openContextMenu, resourceUuidToContextMenuKind } from 'store/context-menu/context-menu-actions';
 import { MPVContainer, MPVPanelContent, MPVPanelState } from 'components/multi-panel-view/multi-panel-view';
 import { ProcessIOCard, ProcessIOCardType } from 'views/process-panel/process-io-card';
+import { DefaultView } from "components/default-view/default-view";
 
 type CssRules = 'root'
     | 'button'
@@ -200,7 +202,16 @@ export const RegisteredWorkflowPanel = withStyles(styles)(connect(
                             </Card>
                         </MPVPanelContent>
                     </MPVContainer>
-                    : null;
+                    : <Grid
+                        container
+                        alignItems="center"
+                        justify="center"
+                        style={{ minHeight: "100%" }}>
+                        <DefaultView
+                            icon={WorkflowIcon}
+                            messages={["Workflow not found"]}
+                        />
+                    </Grid>;
             }
 
             handleContextMenu = (event: React.MouseEvent<any>) => {

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list