From 27d6e85a614cfdcd065ac4850e6adcf843f9c242 Mon Sep 17 00:00:00 2001 From: Jeremy Elbourn Date: Tue, 20 Sep 2016 21:37:20 -0700 Subject: [PATCH 01/10] all expect sidenav --- src/lib/button-toggle/button-toggle.ts | 6 +- src/lib/button/button.ts | 9 +- src/lib/core/annotations/field-value.spec.ts | 34 - src/lib/core/annotations/field-value.ts | 31 - .../core/coersion/boolean-property.spec.ts | 48 + src/lib/core/coersion/boolean-property.ts | 4 + src/lib/core/core.ts | 3 - src/lib/input/input.ts | 60 +- src/lib/slide-toggle/slide-toggle.ts | 11 +- src/lib/slider/slider.ts | 15 +- src/lib/tabs/tabs.ts | 5 +- test/.chrome/Consent To Send Stats | 1 + test/.chrome/Default/Cache/27832d29274a3d0a_0 | Bin 0 -> 2994 bytes test/.chrome/Default/Cache/index | Bin 0 -> 24 bytes .../Default/Cache/index-dir/the-real-index | Bin 0 -> 68 bytes test/.chrome/Default/Cookies | Bin 0 -> 7168 bytes test/.chrome/Default/Cookies-journal | 0 test/.chrome/Default/Current Session | Bin 0 -> 182 bytes test/.chrome/Default/Current Tabs | Bin 0 -> 662 bytes test/.chrome/Default/Extension Cookies | Bin 0 -> 7168 bytes .../.chrome/Default/Extension Cookies-journal | 0 .../Default/Extension Rules/000003.log | Bin 0 -> 152 bytes test/.chrome/Default/Extension Rules/CURRENT | 1 + test/.chrome/Default/Extension Rules/LOCK | 0 test/.chrome/Default/Extension Rules/LOG | 1 + .../Default/Extension Rules/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/Extension State/000003.log | Bin 0 -> 25321 bytes test/.chrome/Default/Extension State/CURRENT | 1 + test/.chrome/Default/Extension State/LOCK | 0 test/.chrome/Default/Extension State/LOG | 1 + .../Default/Extension State/MANIFEST-000001 | Bin 0 -> 41 bytes .../4.6_0/_metadata/computed_hashes.json | 1 + .../4.6_0/_metadata/verified_contents.json | 1 + .../4.6_0/background_compiled.js | 8543 ++++++ .../4.6_0/beyondcorp_bundled.pac.js | 1141 + .../1x/googlelogo_color_112x36dp.png | Bin 0 -> 2449 bytes .../beyondcorp_cn_connectivity_large.png | Bin 0 -> 3152 bytes .../beyondcorp_cn_connectivity_medium.png | Bin 0 -> 902 bytes .../beyondcorp_cn_connectivity_small.png | Bin 0 -> 553 bytes .../4.6_0/images/beyondcorp_error_large.png | Bin 0 -> 2856 bytes .../4.6_0/images/beyondcorp_error_medium.png | Bin 0 -> 811 bytes .../4.6_0/images/beyondcorp_error_small.png | Bin 0 -> 518 bytes .../4.6_0/images/beyondcorp_locked_large.png | Bin 0 -> 7546 bytes .../4.6_0/images/beyondcorp_locked_medium.png | Bin 0 -> 1459 bytes .../4.6_0/images/beyondcorp_locked_small.png | Bin 0 -> 787 bytes .../4.6_0/images/beyondcorp_unknown_large.png | Bin 0 -> 3092 bytes .../images/beyondcorp_unknown_medium.png | Bin 0 -> 821 bytes .../4.6_0/images/beyondcorp_unknown_small.png | Bin 0 -> 547 bytes .../images/beyondcorp_unlocked_large.png | Bin 0 -> 3019 bytes .../images/beyondcorp_unlocked_medium.png | Bin 0 -> 1553 bytes .../images/beyondcorp_unlocked_small.png | Bin 0 -> 1553 bytes .../4.6_0/images/collapse.png | Bin 0 -> 930 bytes .../4.6_0/images/expand.png | Bin 0 -> 942 bytes .../4.6_0/images/ic_help_grey600_18dp.png | Bin 0 -> 297 bytes .../4.6_0/images/ic_settings_24px.png | Bin 0 -> 222 bytes .../4.6_0/maia.css | 1 + .../4.6_0/manifest.json | 27 + .../4.6_0/options.html | 186 + .../4.6_0/options_compiled.js | 10299 +++++++ .../4.6_0/options_css_compiled.css | 1 + .../4.6_0/popup.html | 148 + .../4.6_0/popup_compiled.js | 9704 ++++++ .../4.6_0/popup_css_compiled.css | 1 + .../0.9.41_0/_metadata/verified_contents.json | 1 + .../0.9.41_0/add.png | Bin 0 -> 126 bytes .../0.9.41_0/aes.js | 448 + .../0.9.41_0/appid.js | 240 + .../0.9.41_0/appletgnubbyfactory.js | 595 + .../0.9.41_0/appletupdate-onload.js | 25 + .../0.9.41_0/appletupdate.html | 49 + .../0.9.41_0/approvedorigins.js | 24 + .../0.9.41_0/archive.png | Bin 0 -> 160 bytes .../0.9.41_0/b64.js | 85 + .../0.9.41_0/background.js | 924 + .../0.9.41_0/blob.js | 302 + .../0.9.41_0/chainedhelper.js | 172 + .../0.9.41_0/check.png | Bin 0 -> 597 bytes .../0.9.41_0/close.png | Bin 0 -> 210 bytes .../0.9.41_0/closeable.js | 14 + .../0.9.41_0/countdown.js | 51 + .../0.9.41_0/countdowntimer.js | 182 + .../0.9.41_0/debug.js | 99 + .../0.9.41_0/debug.png | Bin 0 -> 198 bytes .../0.9.41_0/delegatinghelper.js | 177 + .../0.9.41_0/delete.png | Bin 0 -> 94 bytes .../0.9.41_0/devicefactoryregistry.js | 38 + .../0.9.41_0/devicestatuscodes.js | 59 + .../0.9.41_0/enroller.js | 572 + .../0.9.41_0/enrollresponse.js | 90 + .../0.9.41_0/errorcodes.js | 28 + .../0.9.41_0/exclamation_red.png | Bin 0 -> 386 bytes .../0.9.41_0/exclamation_yellow.png | Bin 0 -> 351 bytes .../0.9.41_0/external_libraries_compiled.js | 7296 +++++ .../0.9.41_0/externalhelper.js | 113 + .../0.9.41_0/factoryregistry.js | 68 + .../0.9.41_0/generichelper.js | 45 + .../0.9.41_0/gnubbies.js | 408 + .../0.9.41_0/gnubby-128.ico | Bin 0 -> 19361 bytes .../0.9.41_0/gnubby-16.ico | Bin 0 -> 630 bytes .../0.9.41_0/gnubby-32.ico | Bin 0 -> 1773 bytes .../0.9.41_0/gnubby-48.ico | Bin 0 -> 3446 bytes .../0.9.41_0/gnubby-cardmanager.js | 295 + .../0.9.41_0/gnubby-firmware.js | 90 + .../0.9.41_0/gnubby-ssh.js | 320 + .../0.9.41_0/gnubby-u2f.js | 165 + .../0.9.41_0/gnubby.js | 858 + .../0.9.41_0/gnubbydevice.js | 130 + .../0.9.41_0/gnubbydeviceidcache.js | 119 + .../0.9.41_0/gnubbyfactory.js | 52 + .../0.9.41_0/googleappid.js | 102 + .../0.9.41_0/googleapprovedorigins.js | 29 + .../0.9.41_0/googlecorpindividualattest.js | 37 + .../0.9.41_0/gstaticorigincheck.js | 57 + .../0.9.41_0/helperwhitelist.js | 82 + .../0.9.41_0/hidgnubbydevice.js | 546 + .../0.9.41_0/individualattest.js | 20 + .../0.9.41_0/inherits.js | 16 + .../0.9.41_0/logging.js | 18 + .../0.9.41_0/manifest.json | 36 + .../0.9.41_0/manual-tests.js | 338 + .../0.9.41_0/messagetypes.js | 18 + .../0.9.41_0/multiplesigner.js | 350 + .../0.9.41_0/options-handlers.js | 446 + .../0.9.41_0/options-onload.js | 1047 + .../0.9.41_0/options-versions.js | 233 + .../0.9.41_0/options.html | 158 + .../0.9.41_0/origincheck.js | 23 + .../0.9.41_0/pin.html | 47 + .../0.9.41_0/question.png | Bin 0 -> 421 bytes .../0.9.41_0/refresh.png | Bin 0 -> 252 bytes .../0.9.41_0/registeringhelper.js | 201 + .../0.9.41_0/requesthelper.js | 78 + .../0.9.41_0/requestqueue.js | 190 + .../0.9.41_0/settings.png | Bin 0 -> 275 bytes .../0.9.41_0/sha256.js | 177 + .../0.9.41_0/signer.js | 558 + .../0.9.41_0/singlesigner.js | 501 + .../0.9.41_0/ssh-agent-ui.js | 121 + .../0.9.41_0/ssh-agent.js | 1677 + .../0.9.41_0/ssh.png | Bin 0 -> 6798 bytes .../0.9.41_0/ssh2.js | 93 + .../0.9.41_0/sshforwardhelper.js | 109 + .../0.9.41_0/textfetcher.js | 59 + .../0.9.41_0/timer.js | 41 + .../0.9.41_0/touch.html | 42 + .../0.9.41_0/ui-onload.js | 6 + .../0.9.41_0/usbenrollhandler.js | 338 + .../0.9.41_0/usbgnubbydevice.js | 578 + .../0.9.41_0/usbhelper.js | 23 + .../0.9.41_0/usbsignhandler.js | 259 + .../0.9.41_0/util.js | 258 + .../0.9.41_0/watchdog.js | 91 + .../0.9.41_0/webrequest.js | 417 + .../0.9.41_0/webrequestsender.js | 148 + .../0.9.41_0/window-timer.js | 52 + .../51.0.2704.53_0/_locales/am/messages.json | 792 + .../51.0.2704.53_0/_locales/ar/messages.json | 792 + .../51.0.2704.53_0/_locales/bg/messages.json | 792 + .../51.0.2704.53_0/_locales/bn/messages.json | 792 + .../51.0.2704.53_0/_locales/ca/messages.json | 792 + .../51.0.2704.53_0/_locales/cs/messages.json | 792 + .../51.0.2704.53_0/_locales/da/messages.json | 792 + .../51.0.2704.53_0/_locales/de/messages.json | 792 + .../51.0.2704.53_0/_locales/el/messages.json | 792 + .../51.0.2704.53_0/_locales/en/messages.json | 792 + .../_locales/en_GB/messages.json | 792 + .../51.0.2704.53_0/_locales/es/messages.json | 792 + .../_locales/es_419/messages.json | 792 + .../51.0.2704.53_0/_locales/et/messages.json | 792 + .../51.0.2704.53_0/_locales/fa/messages.json | 792 + .../_locales/fake_bidi/messages.json | 792 + .../51.0.2704.53_0/_locales/fi/messages.json | 792 + .../51.0.2704.53_0/_locales/fil/messages.json | 792 + .../51.0.2704.53_0/_locales/fr/messages.json | 792 + .../51.0.2704.53_0/_locales/gu/messages.json | 792 + .../51.0.2704.53_0/_locales/he/messages.json | 792 + .../51.0.2704.53_0/_locales/hi/messages.json | 792 + .../51.0.2704.53_0/_locales/hr/messages.json | 792 + .../51.0.2704.53_0/_locales/hu/messages.json | 792 + .../51.0.2704.53_0/_locales/id/messages.json | 792 + .../51.0.2704.53_0/_locales/it/messages.json | 792 + .../51.0.2704.53_0/_locales/ja/messages.json | 792 + .../51.0.2704.53_0/_locales/kn/messages.json | 792 + .../51.0.2704.53_0/_locales/ko/messages.json | 792 + .../51.0.2704.53_0/_locales/lt/messages.json | 792 + .../51.0.2704.53_0/_locales/lv/messages.json | 792 + .../51.0.2704.53_0/_locales/ml/messages.json | 792 + .../51.0.2704.53_0/_locales/mr/messages.json | 792 + .../51.0.2704.53_0/_locales/ms/messages.json | 792 + .../51.0.2704.53_0/_locales/nb/messages.json | 792 + .../51.0.2704.53_0/_locales/nl/messages.json | 792 + .../51.0.2704.53_0/_locales/pl/messages.json | 792 + .../_locales/pt_BR/messages.json | 792 + .../_locales/pt_PT/messages.json | 792 + .../51.0.2704.53_0/_locales/ro/messages.json | 792 + .../51.0.2704.53_0/_locales/ru/messages.json | 792 + .../51.0.2704.53_0/_locales/sk/messages.json | 792 + .../51.0.2704.53_0/_locales/sl/messages.json | 792 + .../51.0.2704.53_0/_locales/sr/messages.json | 792 + .../51.0.2704.53_0/_locales/sv/messages.json | 792 + .../51.0.2704.53_0/_locales/sw/messages.json | 792 + .../51.0.2704.53_0/_locales/ta/messages.json | 792 + .../51.0.2704.53_0/_locales/te/messages.json | 792 + .../51.0.2704.53_0/_locales/th/messages.json | 792 + .../51.0.2704.53_0/_locales/tr/messages.json | 792 + .../51.0.2704.53_0/_locales/uk/messages.json | 792 + .../51.0.2704.53_0/_locales/vi/messages.json | 792 + .../_locales/zh_CN/messages.json | 792 + .../_locales/zh_TW/messages.json | 792 + .../_metadata/verified_contents.json | 1 + .../51.0.2704.53_0/activation_handler.js | 168 + .../51.0.2704.53_0/activity.js | 38 + .../51.0.2704.53_0/app_launcher.js | 177 + .../51.0.2704.53_0/application.js | 215 + .../51.0.2704.53_0/apps_v2_migration.js | 102 + .../51.0.2704.53_0/auth_init.js | 50 + .../51.0.2704.53_0/background.html | 32 + .../51.0.2704.53_0/background.js | 62 + .../51.0.2704.53_0/base.js | 875 + .../51.0.2704.53_0/bump_scroller.js | 109 + .../51.0.2704.53_0/butter_bar.css | 40 + .../51.0.2704.53_0/butter_bar.js | 98 + .../51.0.2704.53_0/callstack.js | 113 + .../51.0.2704.53_0/chromoting128.webp | Bin 0 -> 4360 bytes .../51.0.2704.53_0/chromoting16.webp | Bin 0 -> 573 bytes .../51.0.2704.53_0/chromoting48.webp | Bin 0 -> 1400 bytes .../51.0.2704.53_0/chromoting_event.js | 380 + .../51.0.2704.53_0/client_plugin.js | 237 + .../client_plugin_host_desktop_impl.js | 89 + .../51.0.2704.53_0/client_plugin_impl.js | 770 + .../51.0.2704.53_0/client_session.js | 707 + .../51.0.2704.53_0/client_session_factory.js | 124 + .../51.0.2704.53_0/clipboard.js | 215 + .../51.0.2704.53_0/combined_host_list_api.js | 197 + .../51.0.2704.53_0/connected_view.js | 240 + .../connection_dropped_dialog.js | 74 + .../51.0.2704.53_0/connection_info.js | 55 + .../51.0.2704.53_0/connection_stats.css | 18 + .../51.0.2704.53_0/connection_stats.js | 159 + .../51.0.2704.53_0/console_wrapper.js | 149 + .../51.0.2704.53_0/crd_auth_dialog.js | 76 + .../51.0.2704.53_0/crd_event_handlers.js | 64 + .../51.0.2704.53_0/crd_experimental.js | 58 + .../51.0.2704.53_0/crd_main.css | 13 + .../51.0.2704.53_0/crd_main.js | 185 + .../51.0.2704.53_0/credentials_provider.js | 115 + .../51.0.2704.53_0/credits.html | 25371 ++++++++++++++++ .../51.0.2704.53_0/credits_css.css | 60 + .../51.0.2704.53_0/credits_js.js | 20 + .../51.0.2704.53_0/cs_oauth2_trampoline.js | 28 + .../cs_third_party_auth_trampoline.js | 13 + .../51.0.2704.53_0/desktop_connected_view.js | 307 + .../51.0.2704.53_0/desktop_remoting.js | 263 + .../desktop_remoting_activity.js | 185 + .../51.0.2704.53_0/desktop_viewport.js | 369 + .../51.0.2704.53_0/disclosure_arrow_down.webp | Bin 0 -> 72 bytes .../disclosure_arrow_right.webp | Bin 0 -> 48 bytes .../51.0.2704.53_0/dns_blackhole_checker.js | 183 + .../51.0.2704.53_0/drag.webp | Bin 0 -> 148 bytes .../51.0.2704.53_0/error.js | 241 + .../51.0.2704.53_0/event_handlers.js | 33 + .../51.0.2704.53_0/experiments.js | 113 + .../fallback_signal_strategy.js | 342 + .../51.0.2704.53_0/feedback.js | 79 + .../51.0.2704.53_0/format_iq.js | 698 + .../51.0.2704.53_0/fullscreen.js | 71 + .../51.0.2704.53_0/fullscreen_v1.js | 107 + .../51.0.2704.53_0/fullscreen_v2.js | 147 + .../51.0.2704.53_0/gcd_client.js | 276 + .../51.0.2704.53_0/gcd_host_list_api.js | 182 + .../51.0.2704.53_0/gnubby_auth_handler.js | 177 + .../51.0.2704.53_0/host.js | 81 + .../51.0.2704.53_0/host_controller.js | 500 + .../51.0.2704.53_0/host_daemon_facade.js | 495 + .../51.0.2704.53_0/host_desktop.js | 44 + .../51.0.2704.53_0/host_install_dialog.js | 175 + .../51.0.2704.53_0/host_installer.js | 175 + .../51.0.2704.53_0/host_list.js | 483 + .../51.0.2704.53_0/host_list_api.js | 125 + .../51.0.2704.53_0/host_options.js | 223 + .../51.0.2704.53_0/host_screen.js | 394 + .../51.0.2704.53_0/host_session.js | 120 + .../51.0.2704.53_0/host_setup_dialog.js | 576 + .../host_setup_instructions.webp | Bin 0 -> 652 bytes .../51.0.2704.53_0/host_table_entry.js | 414 + .../51.0.2704.53_0/icon_close.webp | Bin 0 -> 410 bytes .../51.0.2704.53_0/icon_cross.webp | Bin 0 -> 142 bytes .../51.0.2704.53_0/icon_disconnect.webp | Bin 0 -> 360 bytes .../51.0.2704.53_0/icon_fullscreen.webp | Bin 0 -> 298 bytes .../51.0.2704.53_0/icon_host.webp | Bin 0 -> 828 bytes .../51.0.2704.53_0/icon_maximize_restore.webp | Bin 0 -> 350 bytes .../51.0.2704.53_0/icon_minimize.webp | Bin 0 -> 176 bytes .../51.0.2704.53_0/icon_options.webp | Bin 0 -> 226 bytes .../51.0.2704.53_0/icon_pencil.webp | Bin 0 -> 422 bytes .../51.0.2704.53_0/icon_warning.webp | Bin 0 -> 928 bytes .../51.0.2704.53_0/identity.js | 246 + .../infographic_my_computers.webp | Bin 0 -> 2460 bytes .../infographic_remote_assistance.webp | Bin 0 -> 2762 bytes .../51.0.2704.53_0/ipc.js | 187 + .../51.0.2704.53_0/it2me_activity.js | 187 + .../51.0.2704.53_0/it2me_host_facade.js | 345 + .../51.0.2704.53_0/l10n.js | 114 + .../51.0.2704.53_0/legacy_host_list_api.js | 218 + .../51.0.2704.53_0/local_host_section.js | 191 + .../51.0.2704.53_0/main.css | 798 + .../51.0.2704.53_0/main.html | 1015 + .../51.0.2704.53_0/manifest.json | 38 + .../51.0.2704.53_0/me2me_activity.js | 481 + .../51.0.2704.53_0/menu_button.css | 95 + .../51.0.2704.53_0/menu_button.js | 103 + .../51.0.2704.53_0/message_window.css | 13 + .../51.0.2704.53_0/message_window.html | 29 + .../51.0.2704.53_0/message_window.js | 156 + .../51.0.2704.53_0/modal_dialogs.js | 376 + ...native_message_host_log_message_handler.js | 59 + .../network_connectivity_detector.js | 125 + .../51.0.2704.53_0/oauth2.js | 450 + .../51.0.2704.53_0/oauth2_api.js | 81 + .../51.0.2704.53_0/oauth2_api_impl.js | 243 + .../51.0.2704.53_0/open_sans.css | 12 + .../51.0.2704.53_0/open_sans.woff | Bin 0 -> 21956 bytes .../51.0.2704.53_0/options_menu.js | 153 + .../51.0.2704.53_0/paired_client_manager.js | 287 + .../51.0.2704.53_0/platform.js | 138 + .../51.0.2704.53_0/plugin_settings.js | 70 + .../51.0.2704.53_0/plus.webp | Bin 0 -> 114 bytes .../51.0.2704.53_0/protocol_extension.js | 48 + .../protocol_extension_manager.js | 123 + .../51.0.2704.53_0/public_session.css | 14 + .../51.0.2704.53_0/public_session.html | 153 + .../51.0.2704.53_0/public_session_main.js | 53 + .../51.0.2704.53_0/reload.webp | Bin 0 -> 570 bytes .../remoting_client_plugin_newlib.pexe | Bin 0 -> 3497004 bytes .../51.0.2704.53_0/remoting_client_pnacl.nmf | 11 + .../51.0.2704.53_0/scale-to-fit.webp | Bin 0 -> 216 bytes .../51.0.2704.53_0/session_logger.js | 523 + .../51.0.2704.53_0/signal_strategy.js | 113 + .../51.0.2704.53_0/spinner.gif | Bin 0 -> 2850 bytes .../51.0.2704.53_0/stats_accumulator.js | 170 + .../51.0.2704.53_0/suspend_detector.js | 74 + .../51.0.2704.53_0/tcp_socket.js | 202 + .../51.0.2704.53_0/telemetry_event_writer.js | 197 + .../third_party_host_permissions.js | 107 + .../third_party_token_fetcher.js | 177 + .../51.0.2704.53_0/tick.webp | Bin 0 -> 176 bytes .../51.0.2704.53_0/toolbar.css | 94 + .../51.0.2704.53_0/toolbar.js | 179 + .../51.0.2704.53_0/typecheck.js | 249 + .../51.0.2704.53_0/ui_mode.js | 298 + .../51.0.2704.53_0/viewport.js | 152 + .../51.0.2704.53_0/wcs.js | 125 + .../51.0.2704.53_0/wcs_adapter.js | 148 + .../51.0.2704.53_0/wcs_loader.js | 146 + .../51.0.2704.53_0/wcs_sandbox.html | 24 + .../51.0.2704.53_0/wcs_sandbox_container.js | 303 + .../51.0.2704.53_0/wcs_sandbox_content.js | 226 + .../51.0.2704.53_0/window_frame.css | 206 + .../51.0.2704.53_0/window_frame.js | 225 + .../window_message_dispatcher.js | 106 + .../51.0.2704.53_0/window_shape.js | 148 + .../51.0.2704.53_0/xhr.js | 468 + .../51.0.2704.53_0/xhr_event_writer.js | 176 + .../51.0.2704.53_0/xhr_proxy.js | 86 + .../51.0.2704.53_0/xmpp_connection.js | 344 + .../51.0.2704.53_0/xmpp_error_cache.js | 138 + .../51.0.2704.53_0/xmpp_login_handler.js | 325 + .../51.0.2704.53_0/xmpp_stream_parser.js | 258 + .../1.22_0/_locales/af/messages.json | 1 + .../1.22_0/_locales/am/messages.json | 59 + .../1.22_0/_locales/ar/messages.json | 59 + .../1.22_0/_locales/bg/messages.json | 59 + .../1.22_0/_locales/bn/messages.json | 59 + .../1.22_0/_locales/ca/messages.json | 59 + .../1.22_0/_locales/cs/messages.json | 59 + .../1.22_0/_locales/da/messages.json | 59 + .../1.22_0/_locales/de/messages.json | 59 + .../1.22_0/_locales/el/messages.json | 59 + .../1.22_0/_locales/en/messages.json | 78 + .../1.22_0/_locales/en_GB/messages.json | 59 + .../1.22_0/_locales/es/messages.json | 59 + .../1.22_0/_locales/es_419/messages.json | 59 + .../1.22_0/_locales/et/messages.json | 59 + .../1.22_0/_locales/eu/messages.json | 1 + .../1.22_0/_locales/fa/messages.json | 59 + .../1.22_0/_locales/fi/messages.json | 59 + .../1.22_0/_locales/fil/messages.json | 59 + .../1.22_0/_locales/fr/messages.json | 59 + .../1.22_0/_locales/fr_CA/messages.json | 59 + .../1.22_0/_locales/gl/messages.json | 1 + .../1.22_0/_locales/gu/messages.json | 59 + .../1.22_0/_locales/he/messages.json | 59 + .../1.22_0/_locales/hi/messages.json | 59 + .../1.22_0/_locales/hr/messages.json | 59 + .../1.22_0/_locales/hu/messages.json | 59 + .../1.22_0/_locales/hy/messages.json | 1 + .../1.22_0/_locales/id/messages.json | 59 + .../1.22_0/_locales/is/messages.json | 1 + .../1.22_0/_locales/it/messages.json | 59 + .../1.22_0/_locales/iw/messages.json | 1 + .../1.22_0/_locales/ja/messages.json | 59 + .../1.22_0/_locales/ka/messages.json | 1 + .../1.22_0/_locales/km/messages.json | 1 + .../1.22_0/_locales/kn/messages.json | 59 + .../1.22_0/_locales/ko/messages.json | 59 + .../1.22_0/_locales/ky/messages.json | 1 + .../1.22_0/_locales/lo/messages.json | 1 + .../1.22_0/_locales/lt/messages.json | 59 + .../1.22_0/_locales/lv/messages.json | 59 + .../1.22_0/_locales/mk/messages.json | 1 + .../1.22_0/_locales/ml/messages.json | 59 + .../1.22_0/_locales/mn/messages.json | 1 + .../1.22_0/_locales/mr/messages.json | 59 + .../1.22_0/_locales/ms/messages.json | 59 + .../1.22_0/_locales/my/messages.json | 1 + .../1.22_0/_locales/nb/messages.json | 59 + .../1.22_0/_locales/ne/messages.json | 1 + .../1.22_0/_locales/nl/messages.json | 59 + .../1.22_0/_locales/no/messages.json | 1 + .../1.22_0/_locales/pl/messages.json | 59 + .../1.22_0/_locales/pt_BR/messages.json | 59 + .../1.22_0/_locales/pt_PT/messages.json | 59 + .../1.22_0/_locales/ro/messages.json | 59 + .../1.22_0/_locales/ru/messages.json | 59 + .../1.22_0/_locales/si/messages.json | 1 + .../1.22_0/_locales/sk/messages.json | 59 + .../1.22_0/_locales/sl/messages.json | 59 + .../1.22_0/_locales/sr/messages.json | 59 + .../1.22_0/_locales/sv/messages.json | 59 + .../1.22_0/_locales/sw/messages.json | 59 + .../1.22_0/_locales/ta/messages.json | 59 + .../1.22_0/_locales/te/messages.json | 59 + .../1.22_0/_locales/th/messages.json | 59 + .../1.22_0/_locales/tr/messages.json | 59 + .../1.22_0/_locales/uk/messages.json | 59 + .../1.22_0/_locales/vi/messages.json | 59 + .../1.22_0/_locales/zh_CN/messages.json | 59 + .../1.22_0/_locales/zh_HK/messages.json | 1 + .../1.22_0/_locales/zh_TW/messages.json | 59 + .../1.22_0/_locales/zu/messages.json | 1 + .../1.22_0/_metadata/computed_hashes.json | 1 + .../1.22_0/_metadata/verified_contents.json | 1 + .../1.22_0/background_compiled-bundle.js | 10091 ++++++ .../1.22_0/background_compiled.MF | 12 + .../1.22_0/background_compiled.js | 55 + .../1.22_0/content_script_compiled-bundle.js | 8832 ++++++ .../1.22_0/content_script_compiled.MF | 9 + .../1.22_0/content_script_compiled.js | 32 + .../1.22_0/icon128.png | Bin 0 -> 3557 bytes .../1.22_0/logo_password_alert.png | Bin 0 -> 6408 bytes .../1.22_0/managed_policy_schema.json | 27 + .../1.22_0/manifest.json | 34 + .../1.22_0/password_warning.html | 22 + .../1.22_0/password_warning.js | 87 + .../1.22_0/phishing_warning.html | 21 + .../1.22_0/phishing_warning.js | 116 + .../1.22_0/warning.css | 138 + test/.chrome/Default/Favicons | Bin 0 -> 20480 bytes test/.chrome/Default/Favicons-journal | 0 test/.chrome/Default/GPUCache/data_0 | Bin 0 -> 8192 bytes test/.chrome/Default/GPUCache/data_1 | Bin 0 -> 270336 bytes test/.chrome/Default/GPUCache/data_2 | Bin 0 -> 8192 bytes test/.chrome/Default/GPUCache/data_3 | Bin 0 -> 8192 bytes test/.chrome/Default/GPUCache/index | Bin 0 -> 262512 bytes test/.chrome/Default/History | Bin 0 -> 94208 bytes test/.chrome/Default/History Provider Cache | Bin 0 -> 481 bytes test/.chrome/Default/History-journal | 0 test/.chrome/Default/Last Session | Bin 0 -> 1419 bytes .../000003.log | 0 .../beknehfpfkghjoafdifaflglpjkojoco/CURRENT | 1 + .../beknehfpfkghjoafdifaflglpjkojoco/LOCK | 0 .../beknehfpfkghjoafdifaflglpjkojoco/LOG | 1 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../000003.log | 0 .../gbchcmhmhahfdphkhkmpfmihenigjmpp/CURRENT | 1 + .../gbchcmhmhahfdphkhkmpfmihenigjmpp/LOCK | 0 .../gbchcmhmhahfdphkhkmpfmihenigjmpp/LOG | 1 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../000003.log | Bin 0 -> 51 bytes .../aihpiglmnhnhijdnjghpfnlledckkhja/CURRENT | 1 + .../aihpiglmnhnhijdnjghpfnlledckkhja/LOCK | 0 .../aihpiglmnhnhijdnjghpfnlledckkhja/LOG | 3 + .../aihpiglmnhnhijdnjghpfnlledckkhja/LOG.old | 1 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../chrome-devtools_devtools_0.localstorage | Bin 0 -> 3072 bytes ...e-devtools_devtools_0.localstorage-journal | 0 test/.chrome/Default/Login Data | Bin 0 -> 18432 bytes test/.chrome/Default/Login Data-journal | 0 .../000003.log | Bin 0 -> 1240 bytes .../noondiphcddnnabmjcihcjfbhfklnnep/CURRENT | 1 + .../noondiphcddnnabmjcihcjfbhfklnnep/LOCK | 0 .../noondiphcddnnabmjcihcjfbhfklnnep/LOG | 3 + .../noondiphcddnnabmjcihcjfbhfklnnep/LOG.old | 1 + .../MANIFEST-000001 | Bin 0 -> 41 bytes test/.chrome/Default/Network Action Predictor | Bin 0 -> 13312 bytes .../Default/Network Action Predictor-journal | 0 test/.chrome/Default/Network Persistent State | 1 + test/.chrome/Default/Preferences | 1 + test/.chrome/Default/QuotaManager | Bin 0 -> 15360 bytes test/.chrome/Default/QuotaManager-journal | 0 test/.chrome/Default/README | 1 + test/.chrome/Default/Secure Preferences | 1 + test/.chrome/Default/Shortcuts | Bin 0 -> 20480 bytes test/.chrome/Default/Shortcuts-journal | 0 test/.chrome/Default/Top Sites | Bin 0 -> 20480 bytes test/.chrome/Default/Top Sites-journal | 0 test/.chrome/Default/Visited Links | Bin 0 -> 131072 bytes test/.chrome/Default/Web Data | Bin 0 -> 53248 bytes test/.chrome/Default/Web Data-journal | 0 .../data_reduction_proxy_leveldb/000003.log | 0 .../data_reduction_proxy_leveldb/CURRENT | 1 + .../Default/data_reduction_proxy_leveldb/LOCK | 0 .../Default/data_reduction_proxy_leveldb/LOG | 3 + .../data_reduction_proxy_leveldb/LOG.old | 1 + .../MANIFEST-000001 | Bin 0 -> 41 bytes test/.chrome/Default/databases/Databases.db | Bin 0 -> 7168 bytes .../Default/databases/Databases.db-journal | 0 test/.chrome/Local State | 1 + test/.chrome/ShaderCache/GPUCache/data_0 | Bin 0 -> 45056 bytes test/.chrome/ShaderCache/GPUCache/data_1 | Bin 0 -> 270336 bytes test/.chrome/ShaderCache/GPUCache/data_2 | Bin 0 -> 8192 bytes test/.chrome/ShaderCache/GPUCache/data_3 | Bin 0 -> 4202496 bytes test/.chrome/ShaderCache/GPUCache/index | Bin 0 -> 262512 bytes test/.chrome/chrome_shutdown_ms.txt | Bin 0 -> 3 bytes test/browser-providers.js | 339 + 524 files changed, 171451 insertions(+), 93 deletions(-) delete mode 100644 src/lib/core/annotations/field-value.spec.ts delete mode 100644 src/lib/core/annotations/field-value.ts create mode 100644 src/lib/core/coersion/boolean-property.spec.ts create mode 100644 src/lib/core/coersion/boolean-property.ts create mode 100644 test/.chrome/Consent To Send Stats create mode 100644 test/.chrome/Default/Cache/27832d29274a3d0a_0 create mode 100644 test/.chrome/Default/Cache/index create mode 100644 test/.chrome/Default/Cache/index-dir/the-real-index create mode 100644 test/.chrome/Default/Cookies create mode 100644 test/.chrome/Default/Cookies-journal create mode 100644 test/.chrome/Default/Current Session create mode 100644 test/.chrome/Default/Current Tabs create mode 100644 test/.chrome/Default/Extension Cookies create mode 100644 test/.chrome/Default/Extension Cookies-journal create mode 100644 test/.chrome/Default/Extension Rules/000003.log create mode 100644 test/.chrome/Default/Extension Rules/CURRENT create mode 100644 test/.chrome/Default/Extension Rules/LOCK create mode 100644 test/.chrome/Default/Extension Rules/LOG create mode 100644 test/.chrome/Default/Extension Rules/MANIFEST-000001 create mode 100644 test/.chrome/Default/Extension State/000003.log create mode 100644 test/.chrome/Default/Extension State/CURRENT create mode 100644 test/.chrome/Default/Extension State/LOCK create mode 100644 test/.chrome/Default/Extension State/LOG create mode 100644 test/.chrome/Default/Extension State/MANIFEST-000001 create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/computed_hashes.json create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/verified_contents.json create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/background_compiled.js create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/beyondcorp_bundled.pac.js create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/googlelogo/1x/googlelogo_color_112x36dp.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_cn_connectivity_large.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_cn_connectivity_medium.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_cn_connectivity_small.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_error_large.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_error_medium.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_error_small.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_locked_large.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_locked_medium.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_locked_small.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_unknown_large.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_unknown_medium.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_unknown_small.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_unlocked_large.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_unlocked_medium.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/beyondcorp_unlocked_small.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/collapse.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/expand.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/ic_help_grey600_18dp.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/images/ic_settings_24px.png create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/maia.css create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/manifest.json create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/options.html create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/options_compiled.js create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/options_css_compiled.css create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/popup.html create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/popup_compiled.js create mode 100644 test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/popup_css_compiled.css create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/_metadata/verified_contents.json create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/add.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/aes.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/appid.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/appletgnubbyfactory.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/appletupdate-onload.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/appletupdate.html create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/approvedorigins.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/archive.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/b64.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/background.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/blob.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/chainedhelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/check.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/close.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/closeable.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/countdown.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/countdowntimer.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delegatinghelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delete.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/devicefactoryregistry.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/devicestatuscodes.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/enroller.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/enrollresponse.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/errorcodes.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/exclamation_red.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/exclamation_yellow.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/external_libraries_compiled.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/externalhelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/factoryregistry.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/generichelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubbies.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-128.ico create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-16.ico create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-32.ico create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-48.ico create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-cardmanager.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-firmware.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-ssh.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby-u2f.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubby.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubbydevice.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubbydeviceidcache.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gnubbyfactory.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/googleappid.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/googleapprovedorigins.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/googlecorpindividualattest.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/gstaticorigincheck.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/helperwhitelist.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/hidgnubbydevice.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/individualattest.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/inherits.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/logging.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/manifest.json create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/manual-tests.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/messagetypes.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/multiplesigner.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/options-handlers.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/options-onload.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/options-versions.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/options.html create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/origincheck.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/pin.html create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/question.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/refresh.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/registeringhelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requesthelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requestqueue.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/settings.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/sha256.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/signer.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/singlesigner.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent-ui.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh.png create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh2.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/sshforwardhelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/textfetcher.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/timer.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/touch.html create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ui-onload.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbenrollhandler.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbgnubbydevice.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbhelper.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbsignhandler.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/util.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/watchdog.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequest.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequestsender.js create mode 100644 test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/window-timer.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/am/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ar/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bg/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bn/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ca/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/cs/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/da/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/de/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/el/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en_GB/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es_419/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/et/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fa/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fake_bidi/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fi/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fil/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fr/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/gu/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/he/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hi/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hr/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hu/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/id/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/it/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ja/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/kn/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ko/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lt/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lv/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ml/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/mr/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ms/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nb/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nl/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pl/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_BR/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_PT/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ro/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ru/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sk/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sl/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sr/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sv/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sw/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ta/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/te/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/th/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/tr/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/uk/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/vi/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_CN/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_TW/messages.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_metadata/verified_contents.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activation_handler.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activity.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/app_launcher.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/application.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/apps_v2_migration.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/auth_init.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.html create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/base.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/bump_scroller.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/callstack.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting128.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting16.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting48.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting_event.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_host_desktop_impl.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_impl.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session_factory.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/clipboard.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/combined_host_list_api.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connected_view.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_dropped_dialog.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_info.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/console_wrapper.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_auth_dialog.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_event_handlers.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_experimental.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credentials_provider.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits.html create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_css.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_js.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_oauth2_trampoline.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_third_party_auth_trampoline.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_connected_view.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting_activity.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_viewport.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/disclosure_arrow_down.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/disclosure_arrow_right.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/dns_blackhole_checker.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/drag.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/error.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/event_handlers.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/experiments.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fallback_signal_strategy.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/feedback.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/format_iq.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v1.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v2.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_client.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_host_list_api.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gnubby_auth_handler.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_controller.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_daemon_facade.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_desktop.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_install_dialog.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_installer.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_list.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_list_api.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_options.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_screen.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_session.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_setup_dialog.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_setup_instructions.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_table_entry.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_close.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_cross.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_disconnect.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_fullscreen.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_host.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_maximize_restore.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_minimize.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_options.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_pencil.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/icon_warning.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/identity.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/infographic_my_computers.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/infographic_remote_assistance.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/ipc.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/it2me_activity.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/it2me_host_facade.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/l10n.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/legacy_host_list_api.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/local_host_section.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/main.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/main.html create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/manifest.json create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/me2me_activity.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/menu_button.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/menu_button.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/message_window.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/message_window.html create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/message_window.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/modal_dialogs.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/native_message_host_log_message_handler.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/network_connectivity_detector.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/oauth2.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/oauth2_api.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/oauth2_api_impl.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/open_sans.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/open_sans.woff create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/options_menu.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/paired_client_manager.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/platform.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/plugin_settings.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/plus.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/protocol_extension.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/protocol_extension_manager.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/public_session.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/public_session.html create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/public_session_main.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/reload.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/remoting_client_plugin_newlib.pexe create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/remoting_client_pnacl.nmf create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/scale-to-fit.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/session_logger.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/signal_strategy.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/spinner.gif create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/stats_accumulator.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/suspend_detector.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/tcp_socket.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/telemetry_event_writer.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/third_party_host_permissions.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/third_party_token_fetcher.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/tick.webp create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/toolbar.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/toolbar.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/typecheck.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/ui_mode.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/viewport.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/wcs.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/wcs_adapter.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/wcs_loader.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/wcs_sandbox.html create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/wcs_sandbox_container.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/wcs_sandbox_content.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/window_frame.css create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/window_frame.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/window_message_dispatcher.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/window_shape.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xhr.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xhr_event_writer.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xhr_proxy.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xmpp_connection.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xmpp_error_cache.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xmpp_login_handler.js create mode 100644 test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/xmpp_stream_parser.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/af/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/am/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ar/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/bg/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/bn/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ca/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/cs/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/da/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/de/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/el/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/en/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/en_GB/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/es/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/es_419/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/et/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/eu/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/fa/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/fi/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/fil/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/fr/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/fr_CA/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/gl/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/gu/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/he/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/hi/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/hr/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/hu/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/hy/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/id/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/is/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/it/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/iw/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ja/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ka/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/km/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/kn/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ko/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ky/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/lo/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/lt/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/lv/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/mk/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ml/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/mn/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/mr/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ms/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/my/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/nb/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ne/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/nl/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/no/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/pl/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/pt_BR/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/pt_PT/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ro/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ru/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/si/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/sk/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/sl/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/sr/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/sv/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/sw/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/ta/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/te/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/th/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/tr/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/uk/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/vi/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/zh_CN/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/zh_HK/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/zh_TW/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_locales/zu/messages.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_metadata/computed_hashes.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/_metadata/verified_contents.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/background_compiled-bundle.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/background_compiled.MF create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/background_compiled.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/content_script_compiled-bundle.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/content_script_compiled.MF create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/content_script_compiled.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/icon128.png create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/logo_password_alert.png create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/managed_policy_schema.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/manifest.json create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/password_warning.html create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/password_warning.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/phishing_warning.html create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/phishing_warning.js create mode 100644 test/.chrome/Default/Extensions/noondiphcddnnabmjcihcjfbhfklnnep/1.22_0/warning.css create mode 100644 test/.chrome/Default/Favicons create mode 100644 test/.chrome/Default/Favicons-journal create mode 100644 test/.chrome/Default/GPUCache/data_0 create mode 100644 test/.chrome/Default/GPUCache/data_1 create mode 100644 test/.chrome/Default/GPUCache/data_2 create mode 100644 test/.chrome/Default/GPUCache/data_3 create mode 100644 test/.chrome/Default/GPUCache/index create mode 100644 test/.chrome/Default/History create mode 100644 test/.chrome/Default/History Provider Cache create mode 100644 test/.chrome/Default/History-journal create mode 100644 test/.chrome/Default/Last Session create mode 100644 test/.chrome/Default/Local App Settings/beknehfpfkghjoafdifaflglpjkojoco/000003.log create mode 100644 test/.chrome/Default/Local App Settings/beknehfpfkghjoafdifaflglpjkojoco/CURRENT create mode 100644 test/.chrome/Default/Local App Settings/beknehfpfkghjoafdifaflglpjkojoco/LOCK create mode 100644 test/.chrome/Default/Local App Settings/beknehfpfkghjoafdifaflglpjkojoco/LOG create mode 100644 test/.chrome/Default/Local App Settings/beknehfpfkghjoafdifaflglpjkojoco/MANIFEST-000001 create mode 100644 test/.chrome/Default/Local App Settings/gbchcmhmhahfdphkhkmpfmihenigjmpp/000003.log create mode 100644 test/.chrome/Default/Local App Settings/gbchcmhmhahfdphkhkmpfmihenigjmpp/CURRENT create mode 100644 test/.chrome/Default/Local App Settings/gbchcmhmhahfdphkhkmpfmihenigjmpp/LOCK create mode 100644 test/.chrome/Default/Local App Settings/gbchcmhmhahfdphkhkmpfmihenigjmpp/LOG create mode 100644 test/.chrome/Default/Local App Settings/gbchcmhmhahfdphkhkmpfmihenigjmpp/MANIFEST-000001 create mode 100644 test/.chrome/Default/Local Extension Settings/aihpiglmnhnhijdnjghpfnlledckkhja/000003.log create mode 100644 test/.chrome/Default/Local Extension Settings/aihpiglmnhnhijdnjghpfnlledckkhja/CURRENT create mode 100644 test/.chrome/Default/Local Extension Settings/aihpiglmnhnhijdnjghpfnlledckkhja/LOCK create mode 100644 test/.chrome/Default/Local Extension Settings/aihpiglmnhnhijdnjghpfnlledckkhja/LOG create mode 100644 test/.chrome/Default/Local Extension Settings/aihpiglmnhnhijdnjghpfnlledckkhja/LOG.old create mode 100644 test/.chrome/Default/Local Extension Settings/aihpiglmnhnhijdnjghpfnlledckkhja/MANIFEST-000001 create mode 100644 test/.chrome/Default/Local Storage/chrome-devtools_devtools_0.localstorage create mode 100644 test/.chrome/Default/Local Storage/chrome-devtools_devtools_0.localstorage-journal create mode 100644 test/.chrome/Default/Login Data create mode 100644 test/.chrome/Default/Login Data-journal create mode 100644 test/.chrome/Default/Managed Extension Settings/noondiphcddnnabmjcihcjfbhfklnnep/000003.log create mode 100644 test/.chrome/Default/Managed Extension Settings/noondiphcddnnabmjcihcjfbhfklnnep/CURRENT create mode 100644 test/.chrome/Default/Managed Extension Settings/noondiphcddnnabmjcihcjfbhfklnnep/LOCK create mode 100644 test/.chrome/Default/Managed Extension Settings/noondiphcddnnabmjcihcjfbhfklnnep/LOG create mode 100644 test/.chrome/Default/Managed Extension Settings/noondiphcddnnabmjcihcjfbhfklnnep/LOG.old create mode 100644 test/.chrome/Default/Managed Extension Settings/noondiphcddnnabmjcihcjfbhfklnnep/MANIFEST-000001 create mode 100644 test/.chrome/Default/Network Action Predictor create mode 100644 test/.chrome/Default/Network Action Predictor-journal create mode 100644 test/.chrome/Default/Network Persistent State create mode 100644 test/.chrome/Default/Preferences create mode 100644 test/.chrome/Default/QuotaManager create mode 100644 test/.chrome/Default/QuotaManager-journal create mode 100644 test/.chrome/Default/README create mode 100644 test/.chrome/Default/Secure Preferences create mode 100644 test/.chrome/Default/Shortcuts create mode 100644 test/.chrome/Default/Shortcuts-journal create mode 100644 test/.chrome/Default/Top Sites create mode 100644 test/.chrome/Default/Top Sites-journal create mode 100644 test/.chrome/Default/Visited Links create mode 100644 test/.chrome/Default/Web Data create mode 100644 test/.chrome/Default/Web Data-journal create mode 100644 test/.chrome/Default/data_reduction_proxy_leveldb/000003.log create mode 100644 test/.chrome/Default/data_reduction_proxy_leveldb/CURRENT create mode 100644 test/.chrome/Default/data_reduction_proxy_leveldb/LOCK create mode 100644 test/.chrome/Default/data_reduction_proxy_leveldb/LOG create mode 100644 test/.chrome/Default/data_reduction_proxy_leveldb/LOG.old create mode 100644 test/.chrome/Default/data_reduction_proxy_leveldb/MANIFEST-000001 create mode 100644 test/.chrome/Default/databases/Databases.db create mode 100644 test/.chrome/Default/databases/Databases.db-journal create mode 100644 test/.chrome/Local State create mode 100644 test/.chrome/ShaderCache/GPUCache/data_0 create mode 100644 test/.chrome/ShaderCache/GPUCache/data_1 create mode 100644 test/.chrome/ShaderCache/GPUCache/data_2 create mode 100644 test/.chrome/ShaderCache/GPUCache/data_3 create mode 100644 test/.chrome/ShaderCache/GPUCache/index create mode 100644 test/.chrome/chrome_shutdown_ms.txt create mode 100644 test/browser-providers.js diff --git a/src/lib/button-toggle/button-toggle.ts b/src/lib/button-toggle/button-toggle.ts index 1f4d3785ed0e..241e47cba6e0 100644 --- a/src/lib/button-toggle/button-toggle.ts +++ b/src/lib/button-toggle/button-toggle.ts @@ -21,7 +21,8 @@ import { FormsModule, } from '@angular/forms'; import {Observable} from 'rxjs/Observable'; -import {BooleanFieldValue, MdUniqueSelectionDispatcher} from '../core'; +import {MdUniqueSelectionDispatcher} from '../core'; +import {coerceBooleanProperty} from '../core/coersion/boolean-property'; export type ToggleType = 'checkbox' | 'radio'; @@ -102,13 +103,12 @@ export class MdButtonToggleGroup implements AfterViewInit, ControlValueAccessor } @Input() - @BooleanFieldValue() get disabled(): boolean { return this._disabled; } set disabled(value) { - this._disabled = (value != null && value !== false) ? true : null; + this._disabled = coerceBooleanProperty(value); } @Input() diff --git a/src/lib/button/button.ts b/src/lib/button/button.ts index 03ac5438f1a3..d09d55b18ad9 100644 --- a/src/lib/button/button.ts +++ b/src/lib/button/button.ts @@ -10,7 +10,8 @@ import { ModuleWithProviders, } from '@angular/core'; import {CommonModule} from '@angular/common'; -import {BooleanFieldValue, MdRippleModule} from '../core'; +import {MdRippleModule} from '../core'; +import {coerceBooleanProperty} from '../core/coersion/boolean-property'; // TODO(jelbourn): Make the `isMouseDown` stuff done with one global listener. // TODO(kara): Convert attribute selectors to classes when attr maps become available @@ -41,7 +42,11 @@ export class MdButton { _isMouseDown: boolean = false; /** Whether the ripple effect on click should be disabled. */ - @Input() @BooleanFieldValue() disableRipple: boolean = false; + private _disableRipple: boolean = false; + + @Input() + get disableRipple() { return this._disableRipple; } + set disableRipple(v) { this._disableRipple = coerceBooleanProperty(v); } constructor(private _elementRef: ElementRef, private _renderer: Renderer) { } diff --git a/src/lib/core/annotations/field-value.spec.ts b/src/lib/core/annotations/field-value.spec.ts deleted file mode 100644 index 55bcc5d25c0a..000000000000 --- a/src/lib/core/annotations/field-value.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {BooleanFieldValue} from './field-value'; - -describe('BooleanFieldValue', () => { - it('should work for null values', () => { - let x = new BooleanFieldValueTest(); - - x.field = null; - expect(x.field).toBe(false); - - x.field = undefined; - expect(x.field).toBe(false); - }); - - it('should work for string values', () => { - let x = new BooleanFieldValueTest(); - - (x).field = 'hello'; - expect(x.field).toBe(true); - - (x).field = 'true'; - expect(x.field).toBe(true); - - (x).field = ''; - expect(x.field).toBe(true); - - (x).field = 'false'; - expect(x.field).toBe(false); - }); -}); - - -class BooleanFieldValueTest { - @BooleanFieldValue() field: boolean; -} diff --git a/src/lib/core/annotations/field-value.ts b/src/lib/core/annotations/field-value.ts deleted file mode 100644 index 46001c9812f6..000000000000 --- a/src/lib/core/annotations/field-value.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Annotation Factory that allows HTML style boolean attributes. For example, - * a field declared like this: - - * @Directive({ selector: 'component' }) class MyComponent { - * @Input() @BooleanFieldValueFactory() myField: boolean; - * } - * - * You could set it up this way: - * - * or: - * - * @deprecated - */ -function booleanFieldValueFactory() { - return function booleanFieldValueMetadata(target: any, key: string): void { - const defaultValue = target[key]; - const localKey = `__md_private_symbol_${key}`; - target[localKey] = defaultValue; - - Object.defineProperty(target, key, { - get() { return (this)[localKey]; }, - set(value: boolean) { - (this)[localKey] = value != null && `${value}` !== 'false'; - } - }); - }; -} - - -export { booleanFieldValueFactory as BooleanFieldValue }; diff --git a/src/lib/core/coersion/boolean-property.spec.ts b/src/lib/core/coersion/boolean-property.spec.ts new file mode 100644 index 000000000000..b16c4ea75714 --- /dev/null +++ b/src/lib/core/coersion/boolean-property.spec.ts @@ -0,0 +1,48 @@ +import {coerceBooleanProperty} from './boolean-property'; + + +describe('coerceBooleanProperty', () => { + it('should coerce undefined to false', () => { + expect(coerceBooleanProperty(undefined)).toBe(false); + }); + + it('should coerce null to false', () => { + expect(coerceBooleanProperty(null)).toBe(false); + }); + + it('should coerce the empty string to true', () => { + expect(coerceBooleanProperty('')).toBe(true); + }); + + it('should coerce zero to true', () => { + expect(coerceBooleanProperty(0)).toBe(true); + }); + + it('should coerce the string "false" to false', () => { + expect(coerceBooleanProperty('false')).toBe(false); + }); + + it('should coerce the boolean false to false', () => { + expect(coerceBooleanProperty(false)).toBe(false); + }); + + it('should coerce the boolean true to true', () => { + expect(coerceBooleanProperty(true)).toBe(true); + }); + + it('should coerce the string "true" to true', () => { + expect(coerceBooleanProperty('true')).toBe(true); + }); + + it('should coerce an arbitrary string to true', () => { + expect(coerceBooleanProperty('pink')).toBe(true); + }); + + it('should coerce an object to true', () => { + expect(coerceBooleanProperty({})).toBe(true); + }); + + it('should coerce an array to true', () => { + expect(coerceBooleanProperty([])).toBe(true); + }); +}); diff --git a/src/lib/core/coersion/boolean-property.ts b/src/lib/core/coersion/boolean-property.ts new file mode 100644 index 000000000000..eebe9f2f2d66 --- /dev/null +++ b/src/lib/core/coersion/boolean-property.ts @@ -0,0 +1,4 @@ +/** Coerces a data-bound value (typically a string) to a boolean. */ +export function coerceBooleanProperty(value: any): boolean { + return value != null && `${value}` !== 'false'; +} diff --git a/src/lib/core/core.ts b/src/lib/core/core.ts index 21bdb492d739..968f9e40c9dd 100644 --- a/src/lib/core/core.ts +++ b/src/lib/core/core.ts @@ -70,9 +70,6 @@ export {applyCssTransform} from './style/apply-transform'; // Error export {MdError} from './errors/error'; -// Annotations. -export {BooleanFieldValue} from './annotations/field-value'; - // Misc export {ComponentType} from './overlay/generic-component-type'; diff --git a/src/lib/input/input.ts b/src/lib/input/input.ts index 66c4fbe4bec4..64f01f4771ce 100644 --- a/src/lib/input/input.ts +++ b/src/lib/input/input.ts @@ -24,8 +24,9 @@ import { FormsModule, } from '@angular/forms'; import {CommonModule} from '@angular/common'; -import {BooleanFieldValue, MdError} from '../core'; +import {MdError} from '../core'; import {Observable} from 'rxjs/Observable'; +import {coerceBooleanProperty} from '../core/coersion/boolean-property'; const noop = () => {}; @@ -118,9 +119,22 @@ export class MdInput implements ControlValueAccessor, AfterContentInit, OnChange */ @Input('aria-label') ariaLabel: string; @Input('aria-labelledby') ariaLabelledBy: string; - @Input('aria-disabled') @BooleanFieldValue() ariaDisabled: boolean; - @Input('aria-required') @BooleanFieldValue() ariaRequired: boolean; - @Input('aria-invalid') @BooleanFieldValue() ariaInvalid: boolean; + + private _ariaDisabled: boolean; + private _ariaRequired: boolean; + private _ariaInvalid: boolean; + + @Input('aria-disabled') + get ariaDisabled(): boolean { return this._ariaDisabled; } + set ariaDisabled(value) { this._ariaDisabled = coerceBooleanProperty(value); } + + @Input('aria-required') + get ariaRequired(): boolean { return this._ariaRequired; } + set ariaRequired(value) { this._ariaRequired = coerceBooleanProperty(value); } + + @Input('aria-invalid') + get ariaInvalid(): boolean { return this._ariaInvalid; } + set ariaInvalid(value) { this._ariaInvalid = coerceBooleanProperty(value); } /** * Content directives. @@ -141,14 +155,11 @@ export class MdInput implements ControlValueAccessor, AfterContentInit, OnChange */ @Input() align: 'start' | 'end' = 'start'; @Input() dividerColor: 'primary' | 'accent' | 'warn' = 'primary'; - @Input() @BooleanFieldValue() floatingPlaceholder: boolean = true; @Input() hintLabel: string = ''; @Input() autocomplete: string; @Input() autocorrect: string; @Input() autocapitalize: string; - @Input() @BooleanFieldValue() autofocus: boolean = false; - @Input() @BooleanFieldValue() disabled: boolean = false; @Input() id: string = `md-input-${nextUniqueId++}`; @Input() list: string = null; @Input() max: string | number = null; @@ -156,14 +167,43 @@ export class MdInput implements ControlValueAccessor, AfterContentInit, OnChange @Input() min: string | number = null; @Input() minlength: number = null; @Input() placeholder: string = null; - @Input() @BooleanFieldValue() readonly: boolean = false; - @Input() @BooleanFieldValue() required: boolean = false; - @Input() @BooleanFieldValue() spellcheck: boolean = false; @Input() step: number = null; @Input() tabindex: number = null; @Input() type: string = 'text'; @Input() name: string = null; + private _floatingPlaceholder: boolean; + private _autofocus: boolean; + private _disabled: boolean; + private _readonly: boolean; + private _required: boolean; + private _spellcheck: boolean; + + @Input() + get floatingPlaceholder(): boolean { return this._floatingPlaceholder; } + set floatingPlaceholder(value) { this._floatingPlaceholder = coerceBooleanProperty(value); } + + @Input() + get autofocus(): boolean { return this._autofocus; } + set autofocus(value) { this._autofocus = coerceBooleanProperty(value); } + + @Input() + get disabled(): boolean { return this._disabled; } + set disabled(value) { this._disabled = coerceBooleanProperty(value); } + + @Input() + get readonly(): boolean { return this._readonly; } + set readonly(value) { this._readonly = coerceBooleanProperty(value); } + + @Input() + get required(): boolean { return this._required; } + set required(value) { this._required = coerceBooleanProperty(value); } + + @Input() + get spellcheck(): boolean { return this._spellcheck; } + set spellcheck(value) { this._spellcheck = coerceBooleanProperty(value); } + + private _blurEmitter: EventEmitter = new EventEmitter(); private _focusEmitter: EventEmitter = new EventEmitter(); diff --git a/src/lib/slide-toggle/slide-toggle.ts b/src/lib/slide-toggle/slide-toggle.ts index a8aaa1d07223..2292914d2b4d 100644 --- a/src/lib/slide-toggle/slide-toggle.ts +++ b/src/lib/slide-toggle/slide-toggle.ts @@ -18,8 +18,9 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; -import {BooleanFieldValue, applyCssTransform} from '../core'; +import {applyCssTransform} from '../core'; import {Observable} from 'rxjs/Observable'; +import {coerceBooleanProperty} from '../core/coersion/boolean-property'; import {MdGestureConfig} from '../core'; @@ -69,14 +70,18 @@ export class MdSlideToggle implements AfterContentInit, ControlValueAccessor { // Needs to be public to support AOT compilation (as host binding). _hasFocus: boolean = false; - @Input() @BooleanFieldValue() disabled: boolean = false; - @Input() @BooleanFieldValue() required: boolean = false; @Input() name: string = null; @Input() id: string = this._uniqueId; @Input() tabIndex: number = 0; @Input() ariaLabel: string = null; @Input() ariaLabelledby: string = null; + private _disabled: boolean = false; + + @Input() + get disabled(): boolean { return this._disabled; } + set disabled(value) { this._disabled = coerceBooleanProperty(value); } + private _change: EventEmitter = new EventEmitter(); @Output() change: Observable = this._change.asObservable(); diff --git a/src/lib/slider/slider.ts b/src/lib/slider/slider.ts index 8c80ee4ad7ee..7a7688ac0297 100644 --- a/src/lib/slider/slider.ts +++ b/src/lib/slider/slider.ts @@ -15,8 +15,9 @@ import { FormsModule, } from '@angular/forms'; import {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser'; -import {BooleanFieldValue, MdGestureConfig, applyCssTransform} from '../core'; +import {MdGestureConfig, applyCssTransform} from '../core'; import {Input as HammerInput} from 'hammerjs'; +import {coerceBooleanProperty} from '../core/coersion/boolean-property'; /** * Visually, a 30px separation between tick marks looks best. This is very subjective but it is @@ -58,16 +59,20 @@ export class MdSlider implements AfterContentInit, ControlValueAccessor { /** The dimensions of the slider. */ private _sliderDimensions: ClientRect = null; + private _disabled: boolean = false; + @Input() - @BooleanFieldValue() @HostBinding('class.md-slider-disabled') @HostBinding('attr.aria-disabled') - disabled: boolean = false; + get disabled(): boolean { return this._disabled; } + set disabled(value) { this._disabled = coerceBooleanProperty(value); } /** Whether or not to show the thumb label. */ + private _thumbLabel: boolean = false; + @Input('thumb-label') - @BooleanFieldValue() - thumbLabel: boolean = false; + get thumbLabel(): boolean { return this._thumbLabel; } + set thumbLabel(value) { this._thumbLabel = coerceBooleanProperty(value); } /** The miniumum value that the slider can have. */ private _min: number = 0; diff --git a/src/lib/tabs/tabs.ts b/src/lib/tabs/tabs.ts index ee77040a63d1..b44ca9ab6364 100644 --- a/src/lib/tabs/tabs.ts +++ b/src/lib/tabs/tabs.ts @@ -21,6 +21,8 @@ import {MdInkBar} from './ink-bar'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import {RIGHT_ARROW, LEFT_ARROW, ENTER} from '../core'; +import {coerceBooleanProperty} from '../core/coersion/boolean-property'; + /** Used to generate unique ID's for each tab component */ let nextId = 0; @@ -38,11 +40,10 @@ export class MdTab { @ContentChild(MdTabLabel) label: MdTabLabel; @ContentChild(MdTabContent) content: MdTabContent; - // TODO: Replace this when BooleanFieldValue is removed. private _disabled = false; @Input('disabled') set disabled(value: boolean) { - this._disabled = (value != null && `${value}` !== 'false'); + this._disabled = coerceBooleanProperty(value); } get disabled(): boolean { return this._disabled; diff --git a/test/.chrome/Consent To Send Stats b/test/.chrome/Consent To Send Stats new file mode 100644 index 000000000000..2d5749653379 --- /dev/null +++ b/test/.chrome/Consent To Send Stats @@ -0,0 +1 @@ +5E5AC7AA-2DEA-4A12-BA71-3822C28A4E29 \ No newline at end of file diff --git a/test/.chrome/Default/Cache/27832d29274a3d0a_0 b/test/.chrome/Default/Cache/27832d29274a3d0a_0 new file mode 100644 index 0000000000000000000000000000000000000000..d21844a07ea71d850c95e4138577c4d3bd9bead2 GIT binary patch literal 2994 zcmb_ePmkL~6gL7ck@y5$UcD;qO0gZUx?$H%7Qv=1rK;LPDnLR)V|yG=W6zlJc$01E zg#%xpNJxAD`caS&5(h5u1vqi!R58;W zvhjZY{cqpl!%CGZ0?*4tM6y(rDmXlNckI2#;^}yA|8Q?~us^vpyLUYQ^!^PLBMPgOa!`1@Cf76( zDO4qC><(@#hy+)J@e)cAEva&u0K#J+SyrDCd0ufA5yb>Y?h6*V1IIyF4Z4()_-Fty zQA}m@=nj!NnRxYwUd|X_LMmx8wG(o}P@Ic@Hb|OHZT)G3IxQ%^=VU>>wPV%{$DAsH zMo@)Azo^*B)ILV6sIoK11GYhqUsGGrwemEa>ky?xmQ+n2%x^je_J#{5If^)8bX5qc zw$83ttkP*r5gB#N#}F82ijmAI(MNRZ4^p(?2~UnE2dj_POEa{1JMUtQ!H{e4OEf-Q$JPu%IHk+NH z=KoGSKEBo`W-%JsR4=h8KeDuuv1<$CgN9v=2s?1Y4KDm&s%>-}Pl<}KDe>eTND zjp`+PMA78#0nKZ=o{?%_bsYO%sIrdLmR-*uX)K+wQaL6-0^owv9;}RYygF$H|K1t= zZm75u)3DlDC&8S@NRm3BdQ3aNU2rI7Wswo|`8g;T5Iebe$?26w#FZiTiFkY20Kakp zZpUaJoON66Yh896ZN{n$#%&A&v=*-G(gg(nu@UHiDMiL&*ohveC#+z9 zdrdBAh1x9WnX)ZsUBU*bIN7RG+X2+1O6S{Gh}$|o&&RFF$ybkC!?uZA!|MN!+d4qc z#jTO{!nidDYd=20B0KR+b;Z%dtA~<_?vSQ0$Ls`f#IoyFf$cvdWjVE*zSeZ;2@V@( zPBG=x)lC*>6YQ8cPuQP_8R5%jY~cdwsFYN8tU52-N3$CrJh(OSh?b0~u;XaaW+Jld z`3M{^*^506vHAw0hZv7^d!JxmF<7NoVK2t{Vd7Od2kNb6h|t@5Zo?3@p_I|oCZVWQ z&|s`*8e5MRb~9*9>n~(gv#8mXkz|FcIdtQn*S)z9jqsYPo^Q4eEcK*!hGgQ^CP%Hz z?E35bZ+&}1Jpc1GoP2Npu>AR_fu4aaYmN8o)*IH-)8Cyxp1RgAU)9gMxc=dMe&6$5 zANEEgxOd0e9{K{4dWN|*BMLkB$21;-zYiZ(91r+o@DBrjFTkU>?#{I+lw(;z;9K9k TV_6!2-xvJXf9hXbxqx7b%un8x^E`y!Nm{ke+uRU E0KP;HssI20 literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Cookies b/test/.chrome/Default/Cookies new file mode 100644 index 0000000000000000000000000000000000000000..4f886fa48d9a3dd18b41b8749b692fd5814028e1 GIT binary patch literal 7168 zcmeH}&1(}u6u@^f=|(NJDwL({Wu!n4PaT^WOW-yqSHrZBb58D~LSI(QPHG z0H8cTNKq73AH zmZ{$)hm<)y!ak$K=WY<}Q^Il^HPfh@sA6xLJ18xHsy0f5){k2?c|p^wRBsac7_O@^4?joTlsGoyPIY4oRjbMK)Qb zZj>!^Xck&?BZ4^%e5cD@;X>WqGHb}L){)(?EYz?o+YJ*vtyP{FwO#bs+${{Xp}M&v zq!P)3k3BNhb$~nF@xBoA_Lvws3~5BzsRk4nal3-mxM77h=V9P?dXpm^ENEcYC2Y!) zsEwJED4m#&HqD1d!>XfFA-zH4`cq~dm;&(3a@62bQzL+%bT>)_As^{U*VI1== zE0!(^Um-kJ;4%CKzn(M4rMZ%TBrqVL!*wv_4uJDe2gwzXxeQk>rfz`v{g40Z;d=>E v5|9LDjX?bV_v8Qjta&c|l>{V#QT%_CEF=L*VAcqX;{W%oc`p5x1SEmKG-5~D literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Cookies-journal b/test/.chrome/Default/Cookies-journal new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/test/.chrome/Default/Current Session b/test/.chrome/Default/Current Session new file mode 100644 index 0000000000000000000000000000000000000000..9ba10678a2c7918926df0e22a453edbbd5168dbe GIT binary patch literal 182 zcmWIc3l3&vU|`^6-~>@1z{|kT0iusBE&4}u9+0OA@l2!kyRf5H8%f z^A7gS=SMz>VEsd8hIuoOnMbm#ENcNcgy%81@1fn&ZJ;Ulh|RTLroLa+MPAP9l}?j* z82RJHbQFau34>Sx9rj%!#~mtq;GOhu{EjU5h44VrmPp~#O4KOWTe4nbMI=Rn7(+xv z$5>#B5%Um=^$-Cug)cr!`JEp$1;)p!_i?Q{c(PHhba6L##tfJA?z?Bf-EX=34EOW{ zb7RGu&dGI(6ZB~}R3)b_GfWsYdyb6)Kk>lypIP7Rx9?8BX(xQ{{cEey<{w%KS67^U WqTOHr6&Za3pWT380ERmhGjM_T&-ouG(t%Wq=j0<_Jh(B~`MDf2BeETu3 zmQoo zSS`HfMwAE^_)cHA(uAh9Z8dPM-o&+*ZR1w0y3?}o%SQEu+1SI+t-aD%8g5#7NrIdEiwEPrX7_lH?VpfwB5B1$>5DMCMMwo2a^^Mc*LZQ@Q5f>qe z#NbSuPFe32%UMk~4G4x&!r%8~5;>$Vf+6iBu68QPWT69ddOi=2?+ydPqe6N~kjz9V z#4Bque6U@wZND}fo6pRPBLI(#NU;|S8BJf$pQlzV!KuVwB-8IooPtZTBlHEJU+B9W zR8t5j1TGl@214u0!*c5eo-FK4zB$fe{LTgbgT)LomJ{O94Tx56dL9WKE{N#!a^;$| z6`>P=PS9`kVC$^8GJylor`{ag@}> z)URFoUD7xG^yS+x(3hVbT(V=i3jWCcA31I4*I^yLTc_qaEh(qI&3@ymlXdg;o8N-} z+g5@@f7Sm%xwOsoBTKb3SKGcY*}Lyjwx5RY{l@p$GU|$|E3S>Nm;c@{^~d{rbG9s3 z;r!)C|N2+|>EHdGzwymq`spM4g?i`T{+&OQ-l>wl`||A%zrfUWQj8KR~B0Jb+ z`4uv~E?owiE?!ryweG4uV8;zEN`O{PBHan*qOc zC1_>j&^mB#9BJA_S>GBge7(EK$n)%EDFshn%vwWL6%|G`qotmMCl(Rn9VAR_g0`RQT56ljiu z+v}wQh1~f(POqTosvTF=bh>)6jo2rA(@W@ycJ~EUkWt0Wl;@?JcFHPz@M~Q1`#=L! zeB>1e3I+xpx_zIWL*u$5dnnH9BcUlzk5-*3UQaYV+q4#5DzQFvg_K*d2BD}o|4rJ z)OhMmmC8(yz+(Lg!g)1f&S%}w%9~Kg*9y-bq;;d((lwNustG8V?h%Rab!b`z90bzu z2La-0H;|&C^~*HCH!)gCy5^Rph7qZ6$B}KiY~RwdKe5uwp1q!Ri8oEwV-?hgL}r=o zNZJj}h4W#&%P1{9=_y#mz4zP`C7E4~o0w|RoC(joXv!NaMfM)`V^xxDM2Bq#2}Hr^ zTh}WIipc{J>yrs)6=}GxqiI3_q;6uaqgSxDLvpn`^mD?>0!7hCg{<8b*b)IRhvY49 z#aIk^3bG^Z4+SR)jB===Q1edU4Mz|Pl?gTJIg>Cj(P~_K2i4;-JXyY))XA;1*Oh}o z7>vcE9NK!#Hy?S8bvfC90xtvHu8!D*J|aQlZFKM8uD2tzk;e&+nzbjy&Gn+en%wq= z2E=ad8BPS~69fnsDeu(s(8Vr2dZg>}8FeNP)FxrNyT_v+-K%=}0>U29r-;0f$m6*a z-P5pL`K({SZWizTYbao3)4B0eEf+=co44y9nsC8~w^{Iy#DF!A7FJfs9`=E4p^qmh z-Pm128_tTR^{Lfxx_QH{821Jx=WxZz#ck*%eh^%9>#{j}wy6U%>bm8*h_>4@W#_63 ztdLR|jOoJ^K{`gg@!N8{;V2^pu2njM@GN+N25ko~M?aj)KyRxg@ zTd5^0^!h8fc*NbW;ujTg8-Z7HsN=gh^D+rcFBJvfr4wcNSke9(q?Nolh@&8hhfYko z#f9X$4LavAEi$Oe(*r;#^32BV14#z#^#hnwJ#ZGzC zH)+E^Z6M`voD*QT*W)d11PfIAP(_{t7U&}R9)Xrtb0s!3S6Nh>i)s9d43^_K@bf6u zw;tNJ5;^Kbd8>BKIhwoUu6OW5Xf4=Qgmp?brm6CfcC(wxP0vE|S+0af!~&sLAJWU@ zneMw5Z8?0klM}{vh9nVfoXOK9?=CmP0B{W?)pXj)g>@Vp?1SAYT*=9CuG7Bosz?5m zQ+PW^5sP)yR-Vo?msY9+5s`S8TNEMENERSbf^HZ@1&8X#bvM)LKY`_HPqyQvgW6he z!$JO)i_sSczffRDHuOK%>sZJ}AOdfN`4YBzh=|I~b*#;k2uQT1|l>Z62DPsmhU-F0{P7 zbNZG8yDdMFq!^Z9tf@Ulu87udUNBgjX$uq^ z1ffJPG|wm?%xORmycjH+3?Q9xAPC@MA9)m~uNIRE?zw*-Q&o4a?oXGurqKq|5X5bu z?`rHq=wd~z+lqAl^G4Gd7cs=g*llING6Y6&UI>xL%^&zj+L;A~;v1 z+Ux0!^E*5u;MrsIAPPelB4zP7n7ezeCGyQpB_S~=O>}7XDD-Xnhv%XW(s$p1c|u_2zq}A zAZL(y(@;bzxJ=r$K=Nu2dP$Y8#-GHUQwmb`q0V=jg}67`nFtP|&ki@-DxTHzJeqroo?*b9`vlYCXi=|OL#Nm{~JQZID1yb2+RrQg zLip{!{rx{%{D%K=>o4Z(Gog*2tiR}-1gY}c=dAjt_|5h0H?k(KS==!VB)UyYZ{=vW ziaFTgI@ivK^BnK+!59<58I21hd28b(3SaGw;lshB=x3PK=wgNMMw#(m-{K1E%7zmy z17BXip`G^{h2KD%QSY;BQUKha+%D3Vgve2QgH!t&t=$ec)CQR0GT+gpg=SN!7(_DB zCvqH#wn?koU&|l*ZB&vhN3ZB=19gu;k-kL&B_?Y+*Rw$b?}u00YAEryAOd;r^@cdn(_G5v_qV`0@%&V$%qnRkPYiGqC!hCh|Q2B38Qam6DYoc)HNgZ zFAX!uWba#FfEfUz4f^Z->ER2bC8W7i>_dD)J#8&1VkvAPmDhUDdh@JS3?X-acqa&y ztv3xPLkwVE$ff!8152J9-kD!GT}FKw(*eJBv|*T)WJzqnGL`cL5xy~vL*tGC6?Whp zk?9Rc?mqFlp|$dgqhgbl%%OuKGkHa>Jxt}0OxjjhfO!Yc_aN*%+l&~gAk9ew#~_7U zhvlrvZ2$zSB6Ug!m1zLS?fG7z4SdqNR9(T5z6-R@8S>qYjPzKF6VK+DJh4!7rWb!+ z>!gRuWX*E}*?V-qkqK{rb!VdU__m!2c%SlcfgzDBs5nLOCIxrYTQ_^Jm^|pS`*R>b z;O09T%+Y&-V4ycF;8|@?zr^Fj%b05wxmey7^UsTYb5Vj3rNXb8J-~GVV%8;JrWqDM zCJHzJ20H@wn30;++wkyFe;G+2djXy2t`n45X@!zK&A3X0=|Zt?;8pzT(CY@AToFKD^V1clz*7AKvN1JAHVk5AXEhoj$zN zhj;paiFf+1|L|X-zy53A{PLgX-~Ye=p^rZF(T6_z&_^Ho=tCcU(w07HOP{o*PukKa zZRwM?^hsO#q%D2YmOg1qpR}dFsA)^O_Pw@GvoAmT5w?BhiT=umC;FrrebS6RX-1zk zqfeUAN8a|4w|(SoA9>qH-u98VedKK)dD}k6|vz4R$B6cFk&*W%<=NQgzN0*&Qjv%1oyi155n#h8LQnMt;@@RQIT8zBU zm)>~F-h9neQd_?C?8%fb>S4?N>l_ZlMkF?9*G-(&%ZS0iESl+i-fJ7}zl&; zQy*uyZchuXgzgP$Vu`FZOl6c`@(6!}a-VNS0&pIH2Pm#Ab9E2tDZr7V!#zR!5!iPV zNbdL7=~{yxwN2$Yz$|Mnk~9O&*+Cc%wR|AjX;=I`sawMEVy*yEcDsyG4hvj18%#z! zaC{uy)eVi_HheztG_?)nQm_+bYTcH5hypOr%yJ_?*;=rZ)IWIwaS)RzaLWs4+HW)n z_72@!^U^|~2T7%Ch2<^bFm*r9mk&$g2j^&kr!pc<&-o^tPBdRjpo+Ej6hee?-8LwU zkZC^TOQ|>Gf^c=@rCZ9zX;Kq5R=o<8AMrubQ|{a!LPYh?#I>z?xW#MXtd3S3mp2Ap z;bwK7bR@KkAJA}8m7-nK{Mb1uBsRN1*S4g;?(KYxx_1sO4+{(AW3rO^&u!r=B4i!L zaZ={(1=h>#@YoepYRFC_hKb4J&O9o8*7`H02g$h65LY}l4&E6|@38w$Tbg~@ zGz8mtu+ezJ2)9taw*kjUM*AiBwJ`e0;%H=!=_cOTvFB-f3euNbFx(OnXI&tX1@=^> z%-S?WG#(B=xz;X5EeaHV^t`0e45V+9KLGMskV`zhLw$+sgDMv6=_DrK%;t2(6?T6a^<&XIrHPhmvJiYyZV#ljYsFlQhDeTCIJ|;jBtM>I9_6T;og<(|<~;>w z`APaxLPg@_=8j{i&@=2jWJ>D8H%S|kpYGm2pZ(+wmn8y>?3t}leDOX*I7FzUAAM7s z$vV@@HOSr>@oJD!Pha(Wv!xE}jD(%I`sS@pGDwi8#D_0-{LH=siK1*0yRSOa7i-=} zz39vftrCbCp(mIno;52ID-ThdH?10)%Emg7DolI^cmv@CLmwXF8lx-RU)X9@)l61=zgJJ|8(-T!NAC4wp##8(*sJ23LyS&7Qq862Gj3c;d#g97> z?gz>0c7T0e_EO~T6pP&6d_BY-9j>-6Zi)pai29koFK3K3Q`|dksx+6_OAI&scv`Ae zA^g;ZF}xx4zN^wc%S8bD4m2iNK^}B(6v@jBwho{!JEWdT7AC0PNA3!xzgqldm*kjz za6lPx%9l=`ZC-T1WlK*$debwGuLKBvwom3g?lTQ(mthkyY{w%9Y*-{98twA?KZEkHDQlt$M_h1eI+*}`vA^Ui?ixIObltc$^a7j<#y z=)9NPaapgFEYp^Y;Q?{mkCPy5I{?)8pdPXNnaTMXdsOu_vesRVhH)`ii)`zu2Oc61 zjO9{AsKXTnuEZu92|-5SLVsfpA~w9)U@yWt~PdOjntaQsSj%u3H! z(w!|U$1?>eFCF&K)A`*V{b1Koh^GATm|gP8ba%2WgXs~9HJVZPp1fug@ru&4UZQKq zjknh4Sq#@My{df%4+A!NHwz6td?SVYpf?n}1=^VG@*(4OH)1kIxdvZHIj9sPOIj6n zw{VB;(R@<@>=0_gb?j5ea?nA*X}ZyTmQ4LvKDXCpAGDLse(B!Dh*JF=YatYw?+5K~ za3Eej8xozvLJ;CUrU=@42QF`(_bSMjOqfXB*pcbWxXZa+0rjCXtD9gwdk{_N(ZlnG z2w?v(=&2lgcU*+YM1ZStJ4e5x+pEEL=i!W;*~s~w^IUK3OPmZ<mQd8CU zJ;~ELf@WEyp(HN>FTxG)_e7Bi=Uhf59reyRlSN3xeq`SMP1m>rWT0MA5ZCe5w>Hp% zfVp4&%Un-ByZ0=+bm7pxg)Hkc9xrnom7`gFGSSV7$-(FopgmPEeDO!59RBNiS66;4 zzrG)KNdjbWSzz>hN}Rm& z(>i#II|$z_VS|9@Q(dLEuE-wLn;~EOD!vZr(?7tk1Kx&Bn{U{bc}a$aDV%aSdr+tt z-;9~v3p0H5msNsBG+Zs_G0xre=C%@ph#ZRWU=hJdpwqguF{yw;9g;PqvlyrtSwFHf z&JPF`8=Gvv>^pNpsCj@pW7=w3_hR?}zS{i#-?8oZIj;G=fA{PE{lYbW?SpGRxaNav zKDg$CYd*NrYl>{o`LQ|KlH4 z{IT!g4~jS`leTQjsLa!$tjoF`^0q3ot}0&bF#O-^8Y`K=#*`Dw}g z<=Y#4x$38VvR((5ub%kd4bie>Q+FNvt>6Csm#mB8%b)+tx68C<-~Uo|Nndo;(tr6j zkDB=^nV0GEwEu3cu5-RzhTOlgS6$lgU!C!zsmT6U*Zi4fzLxFZ`^nkA|2zNuYlZi4 LIq5?``tAP#RP-() literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extension State/CURRENT b/test/.chrome/Default/Extension State/CURRENT new file mode 100644 index 000000000000..7ed683d17118 --- /dev/null +++ b/test/.chrome/Default/Extension State/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/test/.chrome/Default/Extension State/LOCK b/test/.chrome/Default/Extension State/LOCK new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/test/.chrome/Default/Extension State/LOG b/test/.chrome/Default/Extension State/LOG new file mode 100644 index 000000000000..e5af2211bf23 --- /dev/null +++ b/test/.chrome/Default/Extension State/LOG @@ -0,0 +1 @@ +2016/06/15-12:11:56.428 3662 Reusing MANIFEST /usr/local/google/home/jelbourn/material2/test/.chrome/Default/Extension State/MANIFEST-000001 diff --git a/test/.chrome/Default/Extension State/MANIFEST-000001 b/test/.chrome/Default/Extension State/MANIFEST-000001 new file mode 100644 index 0000000000000000000000000000000000000000..18e5cab72c1550d8dc398e3413eea91bee24db77 GIT binary patch literal 41 wcmbPQv-7AD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei0J`GZPB~05;AINdN!< literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/computed_hashes.json b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/computed_hashes.json new file mode 100644 index 000000000000..c5ccf074f8ef --- /dev/null +++ b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/computed_hashes.json @@ -0,0 +1 @@ +{"file_hashes":[{"block_hashes":["MhfqxMrEhKS39vmjnsWhkJl6bV/RwSnusa0sNVw5I9I=","pYhGARjc5p6IF1iEd44Nb2USKs9FcJdb99hKikUS4Ns=","vr9xyDFPXVvtGNR6ODBwnIwLWOaxxh1R6lAFHuUBWKY=","uVsE24uslGofbQRwjsIUNclMoDyDoDhY881jB+7+JuQ=","nZiG0NPslwFDXbMt74CyhtIwODYazSngl338w+Jqb9g=","upaEBjEWMZh+yKOuSWDC3aB5M6WQhkoPnPdrtdX2VXs=","GVCUDgzUUgE5MIHuQWDTBZ07eTfgw20/WmSLiRVTm1k=","EARBIfMRoDsi2eMX5UrbUPdvFVcs1kCHSFlVYkYbiHI=","KD1Q3+/b/sdNXF/6ka6gw5/vkyBSV7yW7YnAuADJWb8=","dCWo1GRpwl5vrDThCqtvQOKo4l0u3JSep0qYM+vp5aM=","j6BskT33stcqCVw8MB9cFXGVEbMLP3bw3F4dwvu17aY=","76L6k3ly6gs+FQHWWP4nGq0OHPmSY1f8B8veefV4NmI=","ey4VoZH/2ZergRB+7dBZJ1nIoFThqpr0OHkDeUobfa8=","q9YjccluRBqCf6Idubsbamyh/Bee621/JIoktQ+7A0I=","/K5tLBafLk1Scf7kEE/OIHqfZOMjyAJ3kgbRKrvVPeg=","Cm+m+DjyHceS8AeiuWwZ57wbogtENOzsClLEawzmhx0=","Tn+c5VAmC8ZzNfpRT0/Obuk02/JjK8b5Jc0Y8DuaSCI=","vAi9Mn3WRmLooKBQQPb+PWZv3uYEH3EQsZbUApnEdGw=","YEtophT8ebMg9rd/6+6Iw4m+jrDgKKYggED3DTqKSAA=","N7RBpZ+iSqeHMhggYOMEh9pJ66pI349PBbVx4Vlfjjk=","HzjzdVi3OyPVp3AbAl8asuGjboijYYmwNqW+Wlfcj2Q=","d1OIprRiWs9I8c4sZw0n8ewYuUZbM/PbD3j90K8lRLw=","JK1ZC+20RIXA8kNYS/Gtr3pXIUQxcJzUO5HFqhBA6io=","SCTrIdrm+13ZHiPitx3ObCfjr+DEJuB154ZtqTtMJiI=","ZUKETrE9nHatJxSAogD6ET2UgwwUqBAyhyyEt1VShr0=","QXLCFbkeGvF1v4Vj9XFV7L/5Xn6uDBqrKoYMkpko1No=","UoFUfiIxKNc41eYtDSJn7ZyojVgbfuhTA/Vx+cahxTg=","qEo0kM8BvZLlv8px64X8RXB+79oEAfuOmF8OSukotn0=","WB/vUt4tCasyuk2F3n2lRCFW48DPBQhZOJGCOmcNlfw=","h4v8HapVUVFJ198VegZnEAA36km9WRonq3QMEZrM0hI=","vuKdprz4OAEvJT4UbkIvkdMHtPTqHOyKuTSN2jqA0VM=","dp4Xl247ARBsbGVUI2LDgMuNXXp6FGcPwQlDcUvZ9zU=","HvwlGCzslDumTWzkwMhGnhYsgOKLpjHiVZEQQqxIgKE=","flaFj0NbfxoJAm7nk5bdxPV59ER43nhyz2HsEEb7g/o=","Cz02952ydu5AhG8ggbpNRSpgSM41WM57bWVtkkgRP8A=","nFXOz1Z170ijqz5Dz/vCGfYiBIe6p7rGUGFpzuE7tp4=","LEgMelxX3iC19hZY8LC8fuJgzR9V9Q8Q+HafC4rix5o=","8ndBRhfRImabd+VSnLl1PRkpp4IL/LiKdH2vjp9f3js=","M6pF6V2t+T8mvbdDMaITGeEr2M9zkPzUYzcdpJvMYhw=","m4aYY43YZML33IF3Uk7699aSMUUVLQ2xxWDXZeclO2I=","V3gCMnwTciQVhaSo2nvZD3aedZoBe4U6RQEnRbNm0iM=","RyzijiIxXm1q0MyFVXXMBVilZrZIemhwXIYarGyvADw=","kco5RslB2/9UylJRXdd9aSz9hTujlIW+xu3wt5BXhi0=","9f6pnYg3naVE7eGR5pklkrTlgXPALjo3OxsEg/rrb/w=","/L9Rm5aJFL/q/MV+8aE1F77CjrvzAnws99cEsHpS6kk=","jYFJMwQ1achA5J9/kLnWgTb6n/bUp+VR37YNVXyVzFg=","OEXmpFtvmC09ywlKnIkOoeAropdJQCSZm1lWbKJbLeo=","6o5Z9nJWkINIQe9EOMJ6VdaI2AuZ6w7WBLBTrxn9fm0=","PvLUcAIx4rQeugvPzpu9NyR1GuwNdpW6nYb5oRNPH98=","S/nmVgtAG2apPVDnpmcmdrvoefx09mmbC8tPw+TQASs=","tnotvVQrQO379ykJ/oNe162x4Wv6/EF8FsKoQWgdsSY=","0TBxfKiwfrDW12K4hUerhuKWxqRtjzUSuYDlyJD+9OY=","sqd4/5PvaufzGpeLXeOHd3DOpFmDqBFj7eEfqWzZRoA=","dK49XSdOyruSCWWzBiDIf84xuz6V+62uzr3jPSJjQLI=","RgziaktD2Vv2lqNO2OWlHKVCv3vhTqpdBFg0O0tj9Xo=","W3R9hX5ic7+cslFFSIWhHzxDHLHZNlWEWLWgxCWGH5g=","6Mut4uwpXntbGJQUWk+vaZfC1w8wohnSr7fZFglLTeo=","PqV5oZDl4fvEaFKaZM/vMYLDKjVSORAA7k9swgjFmC8=","m5lbSUacmgbD3M4r8OKS7FCNs92CisFS6OYHZdmHcgo=","u4h7Xja8Fp9uCzRsx5NHxknCXy1c3kLqM2nE4zsWGg4=","iVkjuVr9zFR81oIv2B51HRdd6eoY7p6ivKp/EyY8Eq8=","Ev8Q7kNfXbxik9REi7Ms25R51/TIQrCXFXXZVXNLSdQ=","0Q61F0t2OOiDVPdqSMVjOkeuUM2zZHoumn+hsyWi37M=","TcHudROwWa3usEaHnjVmj8HtbPfEF6AXsGKy4xJnWn8=","8H/VkUhLhcVgkDYTaPHC88H/Agb45LY9gbxDbccMtrg=","JJHUfNVNrc1NprOSRx+9NmX252Q5qX1dj8OfJoXZcgs=","k+F+lBJrSTSE236uxWiEgeX06cMGm8Ju0nBdkaKYTpc=","FnYnlRwxj9Gj23wdasDrfBYIWP6BP9xXAQW1JAnXZK0=","3APfhmRqurbB2/HWqMyvh1XUaT7XMeAbZ4J4LmZcnR0=","mEL9LAcbJoP0iscx2yY8yF148jVVOuMQI2E2JUJH2+8=","I0hsZ4lysTm8Gt8ykHXFlAHcffkTL9mQ2s1huHN6Ozg=","Pd0pddB8b6pucih7hf99WPAv/0q+GqGPnWn3pcLH2iE=","aMAl+P3jtJh3ivhOnJ37niI3DNXEI3BOwWimAysThZ4=","eoLdSxTgFZJQLwPTceefQ5dERQ4KXxlp9CmfwlmN+MM=","85LGfJ5CO84P7weCrDN+k6tG4mI3MlgVvNjtaFR0hM4=","2toYAZSljZRDxfeYPo+ccZ+/M0EGQZN+yfBky7CKRg8=","a27guoeg0k1EOlc9Asad+/JQFQ1wvqJj/LcNk20bGxE=","spa9ncuJfL4lNcgmHeA0BirYNo9z8mhJIReKOMWsjIc=","WwvJHGQtifNTT3AfAE2Vduv6iLgU3k4rMI4LdREoUE4=","3Qj0GfL0ZVPNzk8dGSZM14SAuV7o9F/pr4NMCaE0B1k=","JrqJWMk8xMBL8pcqnLpKQacVKHfLJWJ41MAZ+IZ3xsU=","Mvt5MQDijLv7kWcFCtJ9cEE9fdcmeJf++FqdVpaMGSI=","6Q/m/PCLSoIfcefbBVoTJDKbgLdQwrhcyPGtirqr2a8=","phb6bNAQx525PCM0fgESFA5Vcg2Vkqg9upSqGy5OZAQ=","JiYAwVl6oRjH5SzAPpr54D3XPWI6De6YJDQ6f2cEdQw=","s43u7CxONgFtpCgOusOWnZISyOVsgNyXQduZN8f/BCA=","R+XV0FOx5dcqKrDYg/Dc4H/T/Afo13LnmxxbThXr/i0=","VFYg8V6f06wjSegKJezuuaXU1e5xeZRKVnOSJpbsR8c=","74lz+oinZwAdMTDPpyBkHIYr0hCWuLy8lipSR5N5920=","cX7X5NWH2IEEGNqtrYpI/GJtRe0JjF9HeYnPHGaKyos=","Vm74aTzHmq1PPfoFa/WUwJvvsRCc91WMLUp2dul0E/0=","r8N1priDY00Csm0anxs36pedBwQn17GSJH1VfcCAnbE=","mPcDs4kIolm5s9AlDNSW2a4/f+gZfDb9l54Bt7y6Hok=","Xr8dOjpFu1Y9vvoVfkONGvuZO2ugBPGdLvrqKuD9ip8=","JKjkOcDH/HOqYHJkF7+yhYFLD1veiNFuJ050NXo5R+c=","CFOobTdpNstyeROqsuzbpwkH77/C8ipd3LbOr0CcuHU=","Gz6sYCv91SIU4B/AEihmGPcW8kR14Hovm3WhzJLHn+c=","VZP/HvfNjyMFg6KuiarSLxy8d6SsYONbsw8YWFNeTVo=","6Gia8BNrHI2rzSZSzwZ7oveVM0ZsM2QJnm9JGqudGwM=","bwIrGPdb6qms3Xxjl6L2+9HsBxWKI2TdhbAX7nw/h1M=","+4TZSVotNeJ+CZKi1ej70kCVjwzs6SPIj6n1lPiF8t4=","IwMcS0FOehvGdNt5LEDEX2UNv5KyDTyIeDnMn7rAaY8=","96u8V91KbaJOE7ByTXSGS1C0R4GWgUnC8ZRWFuefDGw=","43GTZ6ieKXePJAXd6ZvM6Lkqu/bKukU7Xv9FOloUYQc=","1tihOAF2h9Z5dNhdSBYAF2IiGxnOcZUh7JzV49l1rI8=","FowBdhlKoaRsmEL6dUuE/+X8+Np+klDOV1tPrcHiKuo=","lW1ucMOkzEJ5ximq/okD1FPhf1LDcl8wHdhTx2vXQf0=","FUqQW+h1auonozQXGvEhaDnLpEFA65EcLsFJUGRqCd0=","RcNMAK7rOQXqhwCLQa354jtj2E7av1G3y2EWW7/0MqA=","U/PEi1QAsCy9t5JMLiJDYumJENdWrVVfuvUu+Irq0Ps=","mHsMBHHMefZsOB1VF82YQ1QVxhn14qHr7c2B9mPcdVg=","b0RQK52Ny3hHRd5mavBxJvvflMNYOaWWN0adFmiCKA8=","zHwBcM6m1UAoiYUIpa0vLjPNr1d7bMlZg4uK6q254B4=","TaYfAJgkaLNzCfv8DSdaCv3t7YW/6ptki4uP8LU6GS8=","zurzEhKhMb6hAHpntZnNqPYfGSbv5WrlK3JmXmDOV28=","Y82ANv8I4OTcm22k69tEMlCDEoKLW6uU0x981ygBskA=","LldVmbK8zJC3fDceRGEmsu8MbWp8sTSGgOe//GAqawA=","ARwkCrrx0GxXffxHD6MbA/n/M3Mmak4t45Uikux698Y=","uuLFQXxS/jLve4gBVyQ4GiJUIEQ92OtKZBL8wRhXyWM=","WLY7XQpn+ABtVtCudJiaaNjKRHgV7bgaKevkpwzSXDM=","wsGmp5JHCXfzVnsBvLN10pYsBkqdvFKqlHsLUzrQiUM=","FacdRp/lZ3E0k81eEjuCUa6LN44JVEF7X93zo8FmOls=","JE8B3jFh4pZBQ2nMSxF5Z3nssDXOmqyiDdldhUaBYXE=","u2AaIuYiOe/Kr6jCC55QI9XfpmQhFQc3Vno5HO9KydA=","1cDf4CcrHNbriIO2uvnN8bnyGU1gYXrlh5/pjjyOphU=","BFzBwcp6DrZZoQW+c4H586NrX+qDMLLLyGeqInyWKXo=","tJ/z48r7YxClh1JVJuhyZF9qDIJ0PbOf40uf0D1gY68=","GQ4EX99wkEbIblxZaTaE3+dOsa0l3nxlV2ebDgMIsuE=","ABHmVq4t/7ZZF4pDHzwHJ132mvnqHcrKOvFD/QfoL/M=","EkkMujBbX1TZU7mPD4fJAG6gP+XRnHA4BVn37zjNAUI=","MRSJ6ifXfY1+AfV0mfJ6WKV4V0w4PBLJFRowJCXWkMg=","tYsrWjj3v8nspBn/rL5w3u89Spu0S48e39cN0yIzAz4=","kD8vDnNZx8MIzYm/A3oPrXdBZjouVIeDHFBMwHW3EhE=","3HAw8lG0rsE8qSNN6jYZfOB7Si+5fM9inXLUkVc4CJE=","8jGybhLD3XL3jxe7tJZmv16MeGPbsqyD0zbDJN2Q6OE=","AWUtfwI8sqIq4yw2LGYE0EoVsgTvOVnwTW2yoI40L28=","BwG0iLc7hMOK5updLPBkaSD8ii2NFE+XwrBHBJ1sLG4=","6WRIX4J0h+YzXpngJ2KxabXc/GMjo888nSfgy5i0qDI=","2yeFy91rbk8eBCJ8NBOkmLm310x6ZEfMnldCEad4hus=","nHIg29N/vcifBRjZemm9faGH0us0yxAUnyUbACVqa0M=","3tvUV5DHX0ZfJEOaqp867X0HEBe03+Gq4GOHG9fpKN0=","rQ0SFnGZCpQFjadq/R9glTbo5f6UU7NY/wrZOaq4oEg=","xp1b12cmkTf3AwfSIXZ9Fr3tVC1BtL8BvX2ZOyds7ww=","KFq0W7p56Y9XTfm1YziNxOLlqK0zKKZDuVTUrfvIQYQ=","9EsH4syxyUPEnpu1DYzcmASTrEQrsOQmsWXNqUZZL5Q=","SW9sT5V+FdXPXDl9q/iUrOox3bsujPqge27zRePjsW4=","bxWvbnl0zsBTfhpB7iRhUB0ujRLPaioR+HH/8NYhFAk=","/2oJ+SoOXXJ5EtnMN8LgdW9wBo8tWCbvSRzR4PjzcHE="],"block_size":4096,"path":"background_compiled.js"},{"block_hashes":["jyr11VKgB+JaznEkJQSky7JYwSsOtnhXBwT04enDb/Y=","mkuOk2sLAVlXJxrfO9A6T9zucPQdJCVqxSo9wsS2p0Q=","1tN1SY7CeJV8mNqQVFYfjmvvMEcquLr9BCr2NFcIhc0=","VF5lBQnl12wjXKJ+EvUbvJe/rrj3um0RUrgDq3JbYRw=","O6wP4Ww7leWXgxq408WL39V+dsAEaDbDMgVgrKhITkY=","VoQzu6fBxEGZu2Tcu6+q2i7Rsh+1AU9GkxR+oFZOoLs=","NGkTfifsanwjdui1/jjRoEyf39NZSINbGPsCjM70i9k=","BE7Bd8DYsB24fyC9wjyXAxjmVLcY+6nx+suDP5EAlX4=","tQCq+LSc1OJ02WIHM48zmGO/4n52okMZmPMdSic6M0E="],"block_size":4096,"path":"beyondcorp_bundled.pac.js"},{"block_hashes":["ns1eGCFqllAh95TMH9JVdn+EN84d1sbC/0zup8zABz0="],"block_size":4096,"path":"googlelogo/1x/googlelogo_color_112x36dp.png"},{"block_hashes":["wYVyCyfy1Gk9kyDKtyYkKCzG9xXk9iOadJnstQjLSjo="],"block_size":4096,"path":"images/beyondcorp_cn_connectivity_large.png"},{"block_hashes":["7vWnrL572fen7Ti9xlDnG5JdSZNcF9Wd0dFom1FfGXU="],"block_size":4096,"path":"images/beyondcorp_cn_connectivity_medium.png"},{"block_hashes":["R+iTWHZCkR60tjaty113hmxW/hafR1/xVQZHDvavoy8="],"block_size":4096,"path":"images/beyondcorp_cn_connectivity_small.png"},{"block_hashes":["w7DfLHTaoQqFCY4xdsKkVPrybSPzBwDcIHP/O+Crrmk="],"block_size":4096,"path":"images/beyondcorp_error_large.png"},{"block_hashes":["IUjQkRCzNo6jBUimp+ubhxGcUTZ9F0YR1DUmEqFCNWA="],"block_size":4096,"path":"images/beyondcorp_error_medium.png"},{"block_hashes":["iVS0dL7ufM9us/qtlfmEcKbvvoCTm4K29PaEOPxO0No="],"block_size":4096,"path":"images/beyondcorp_error_small.png"},{"block_hashes":["Kr3cqzntmcQzPMIaYVa465Vj3670UwsUXnnpEo32ILQ="],"block_size":4096,"path":"images/beyondcorp_unknown_large.png"},{"block_hashes":["1Fb8tFjc91SyQvh0O1QQOstMfejyR8O3jwK8E2OiHHg="],"block_size":4096,"path":"images/beyondcorp_unknown_medium.png"},{"block_hashes":["7rjPxWyq88P82coyaq3zurezT3YAl4w6gQU90AO9qwM="],"block_size":4096,"path":"images/beyondcorp_unknown_small.png"},{"block_hashes":["3hQdSOrNocZCBpmyOkOV3kKbPNfayWqh1cQtiANJVyA="],"block_size":4096,"path":"images/beyondcorp_unlocked_large.png"},{"block_hashes":["rX9e7F8Dt/GI9D+fs+OwxrVgide+RA3Se8JvZaoSmCU="],"block_size":4096,"path":"images/collapse.png"},{"block_hashes":["GwrWScELXojx9k7JzicYLA5nC/gEo8ujxcq0HkHLYMU="],"block_size":4096,"path":"images/expand.png"},{"block_hashes":["cONBhr9TKzLb1wn0YGJf6wao137UOGU3s+1xIonQu5A="],"block_size":4096,"path":"images/ic_help_grey600_18dp.png"},{"block_hashes":["AKXZXYiYUYUlR3CuV76U0uiq+3UpJetkAGww71hsCbA="],"block_size":4096,"path":"images/ic_settings_24px.png"},{"block_hashes":["lI1FqFkPMrs4nrJF4QiILja8ncU7v+FoS89Ce29/QmM=","AlGG1AtufE//kpwtBXjwzGNA7gV5DzjtMdfojUETWdE=","GH8fU6oesocyzrXyfDzxF75L7bDjirymMaX7Oi4varQ=","1q2QObJRBu5IMpzTaAaDnJnNY+SIU/RvnuJ0K0Q3scI=","2vtt+d9VbpzwB7uDkKz2iQ08f+raBYQtc6Wh4tMrZYY=","LPpkAL6B8lacsmKflZve1d8C4VZNyziIFlQD9j+gjTI=","7yWbRldEGDeb8ETeJafmD2M0RllABcNNQrnHvcrQ29g=","AE9cJTtSLSWjMhw0e7CaQ9LCGVfYbV9qBdXZ+fvvcuM=","++GsXqrFlZv0KPSkObQPki3NWi5twLRBqZmZpp+fYKM=","F1Ptv/xE3aCoNYzWkYLyPO9m/GGcODgskLd/DDrqfhE=","ssu5ie1ej1RJjBxTHbQFsqeYCwPBHIoBBhYuZTnOFSQ="],"block_size":4096,"path":"maia.css"},{"block_hashes":["Vnm27GMoxRQf82QX3Ik7Uu7sbd+gIjZAxYCJsg5FT80=","u07dRjWFToD+u+YUZQyUmf4B8x9013VbtxAubY7s8L8="],"block_size":4096,"path":"options.html"},{"block_hashes":["MhfqxMrEhKS39vmjnsWhkJl6bV/RwSnusa0sNVw5I9I=","pYhGARjc5p6IF1iEd44Nb2USKs9FcJdb99hKikUS4Ns=","vr9xyDFPXVvtGNR6ODBwnIwLWOaxxh1R6lAFHuUBWKY=","uVsE24uslGofbQRwjsIUNclMoDyDoDhY881jB+7+JuQ=","nZiG0NPslwFDXbMt74CyhtIwODYazSngl338w+Jqb9g=","upaEBjEWMZh+yKOuSWDC3aB5M6WQhkoPnPdrtdX2VXs=","GVCUDgzUUgE5MIHuQWDTBZ07eTfgw20/WmSLiRVTm1k=","EARBIfMRoDsi2eMX5UrbUPdvFVcs1kCHSFlVYkYbiHI=","KD1Q3+/b/sdNXF/6ka6gw5/vkyBSV7yW7YnAuADJWb8=","dCWo1GRpwl5vrDThCqtvQOKo4l0u3JSep0qYM+vp5aM=","j6BskT33stcqCVw8MB9cFXGVEbMLP3bw3F4dwvu17aY=","wEJ+mXhsVjLYh+ECy4+FGveZVIiVo1ya/2/2LwZHLAo=","zEcwFXSPXe1gHF7admFZ4hL1evnzwl6gDRB7Fn+oy70=","S4PGNvjGgmQx/PDNiKYlhNAvA+uQm3Wkp4XFtbC06pY=","aQjF14sRBRlUGeWrTVf/HzpjN+IqJw2QF3Zgxo58LFc=","dt6RonJCxU+cYb7IFw0jDzKsz4bF4FdXB3nRn9nDbyU=","F6k9kuN6HSKrzJ+mMQ+9YQLQGOmhlddayHPup3TJW3o=","S2/TyK7zYyAJ2wBQ4GdPpBZkWjUToizVOV8G6NO20Nk=","Ybk/ZRfoQmiXCPbJe6NZVStaLZWG6+7eqfh/qjVi0e8=","3Np8nf1tJWmD3yYI0QUsprHmJ21nurZB5aBInFK/idM=","ZuHSFt3kzjWj3LZpCtwdBemuLwNQu8R6Ek67FBEtL1Q=","JYiPkElW4V8r5K2KVChWW+iVO6KXeW8+YyMKMNNZNIQ=","hAYSMHTFrX0yDryv0bvafJax3hrU7M1NonnE9LfVGKo=","OYDqyCCNcXxCcNzzrSTPVgYbkMG5T73t1kNPrd1yyi0=","5bTzka/jSqZOd8BususQmxK+z31d5SjcblL37KohI6Q=","zJYGz6LHsnbKLFhDTj/1/HHA3ZsIDrtyLwl6KC1pbCg=","3dgBTefUcVRVjDrpWUrwcZ6qZ9n5lCk/4xH6P/6FH8I=","vmRV2ajT34rcLc8Uy18Sg/NGOVguqeJUEtC+d/tXa+4=","+cZ49fkBdIhFy3ISvIsxLaRlXKOyZ8VG58qX8mSHBq0=","JarRcfu05lA7YpUgwCGDtn6oyAbg0vRJeRyIw0sH1Mw=","l8tfVryjghFrQo+RNm2p/KWs0uJsdFoL/HW2/j+eTk0=","U3P9FH+RSHIAx0yVemm4hMPN4OTV4Jr3CA51Te1gVVc=","HwWyyb9Yh0qXj1KQePC71+QytY1YSl+fWkHeGnYMDc8=","XzdiLMj0/Q9sSzFVOYblxDYQbAu5s0uyLhYKfcSSGTo=","NLBGl95Lls988FECRqv11JSS2BoFUSQcPjwOq9As3xE=","S+weqsVPAELMytQYXWpKHoZtx9dBlhy+8ah+cxE9xOc=","lK+wdosBpcZ4dcnuXwA0/gl7NRV7Nguhr00mzJy69A0=","8iL0fzChhfcSjCnFTfNbR4rdJZH2ApY6r9Aczq77WbU=","rb6uqFzhXmN8KSZAnAK2NmnSlDFvpUQKV8JiSql6NFE=","qUiJprpQvg21qE+Hjhj9/wORubCfFCzZ4M8zuMcZqEs=","Jj2UWBBv7Xrq/WzZOph5HgvB+4EbnKQlrXXEs6vwDNU=","sit07QB+rzp7cRxbyyTOgXth0ytT318OlDAHGvs6Lh4=","adRG1IS4H+0pD8pDESTYd0aata9a58Uf0RoA3vUAs9I=","3mZrkIhhTMEzOmBENMb7aEDIUVOW9dI+9dqWbyPIC40=","iLPNroCc60lCzVrVmh8bPjDs6f/Fj7gCBkWh3+Gsvww=","OVkWRUy0/kqrGBFh6mClfZpg7Op7zDg0PBfoDaLpKJY=","ONdh6o6TEIocVRdub33e2gLabiOU3a8/bJ0ZB+qLwSI=","MhjhaY4Wt7XcjD4oMY8qX+iU51YPE60biwunsTbrdhU=","w33mH5az6rXllKEOuk5DW1Mn3tf7B7tO8htLzfoyVaA=","Qjt4YR1Sm5vrxW6689yIs1Xz2z1ylNj7ZnXJAIyXXvg=","yUDMB4mh6nJgAEQiBilrNU40cYO/XSWltRdkkz7IKUQ=","PKrqOzZ/WEaSSAES+3eqlgzLhU7Qb/UJ5m8Fqt1GecE=","AnRsjuXxiA/H31wVtSn+UKAdvY62RmjhVSOoE7ot8NA=","Jw3HvdY5ZgpSwYFRJQFVYxVoig9GzTFjiZy6RA/aEaM=","I35HdnarOftLogeurIbeGSiaxs6WS0mUh4exS8LvpcU=","dqi6jDEy+/n+jNPhrQzmK3chf3khLZCEuSbroE5QuJc=","4Vb+7gvDdCM5Mc5aqG539iUSj+eVYFTS/s1faEEt4Kg=","ewP9A77wQ6sBs5bewsBLKk3BtjrHRqTzdZ70dEcwbdc=","eaZsoQs6OZma+s/Gc/6ydl3x7TR+tJgL0KYVLGtZ52I=","sShIe8Tzhd/9rqNp/bBN1GCZmet4S0vFM8jV+LJ4j7o=","5O1NTsWjTlcksw/di4D3gLa5VAeZFCVaSr/LpCUnZ+U=","bx5rCDaWRCTdMCsizT+asH8a1DBdiKD8V9brWRElxsU=","8nfArLf/ldQEdPCemxIN+C9oVh6hBy9EJLvb4oIXQWE=","4Q8soQKF+naTC0Hl4tZ9qycQqXB4Ppn71HeEA7cuCt8=","hESPTyABbTYdsHksY+5FwbQ78Nw+MnKJqsr8wsZ6C7Q=","N1YxdJ+8W5KSzySKoFeuXoyDRBb1g/xpGG9a4BPuv2k=","RZ1xvBu2vHZRQf2YmqbL4+aPcE+Vo1Jh39wJdHYM8DM=","LNC6Ilt5QvtH4YsSDd4WsUXVvVzeWlUtm76iq5HdKJA=","9jMu5/IZ8gW8xpx5b5DBfkDoLpzwyy2z0de3I+wl8xg=","I3x/atC+vkz1GhLvo061S+798e6M29+SWk/+rHB5kFk=","7AW+tlMzIPkgGiFdJWFtZa/lPvfbjo8VtlKRQakpIJE=","w/b2vs+5mKAS+kqUPqXkbHJHokS2FrsodBIAXh4w45U=","nbCec5c24qYEIuSRN9IxljUFzSmdizDyj37TP/UEdLI=","b1uYh/sC5ANqwnk6pc5MbE/EYZpktqu4qNDbsbSgA8M=","uZLGQ3mvoaDNlKUlTfJje+7ZF5CdnKO4ynK5tLCL3BE=","XHAbt24qxBuGafvInX+08V8Qk7c+pZ/1G69Cp2qjS/8=","eOjSYrnwSjuwWV2597fQWyAN85OejCYUzOIGFkg7W9g=","ZzTo3In8UxKAqGjyAsNl+OsYGNgOTwUSzn1A4idDUrY=","PkZ32aSG3c6uTbkMNY8+6EBVF9swD0mST5PwheeNkDc=","7S4+d/DsvJDbYVUX5vV9M6L2WKQVPbTZScFgUd+N/us=","dr5LqRgn+htdenMoc8/CgkpZCfrai3VfPKfOV4slmUc=","r/dIUANyqK5TZBaXFnImqtupMBM6xCOcNkAg8wHNHWo=","Ksuj53zTOgsN66kEAqA2R5XBnTb17WlKrBX4Sh2rc/I=","IzhQ5hqBsuR4q8leacIM0nnoJCGHnSPgvEkhy9vUMig=","h7qt+aaFSNu11afwtYAvhusa8as/dUT4QtJKLHhquak=","TIg/VOv9PyfTk1U3CUAsH2bgo7z5HdoaiR87g0A9SWU=","LbcLPXhbhxdnwdXEYRvXNJt/tMOqiLIVabzd/ELzUnY=","CEsA8LJJo4i3sfPKcYiBDWumlW1bL51RmL8QFyJqV4E=","CcXmtf+zzNDFiW3jUL+F29StDe88FhwqwlL2MSeSm9s=","U59igLO1tyIjrAK9S7xAIHf8BxDZx8kQj6pHAbU6Rx4=","ArnFDBkQg9hAcWnTmko/48PS95clrNEkY8/kVZISg7U=","qtPYiThasZSkZdeRkrgEZcYYO3BaiRrtbss7VuFNpeI=","9zU6C15bvSn3EnoI3j7O+nhChq4jRLjZKITb8ChDfjE=","c/10d+ZmZy2nKPr8mno5Z2dvF+r+YVnHEPSn2IypK6Y=","uIqLKxkReBXyCe3YPsLWHuFVVD2mMvtQzG2Mi70gPaA=","TRqQrOsNXFikxX9GRrryfdEC2e8UlQDpeIYJB5Yeoh0=","NNXet+hy5WPcBY6ewxidBJ84StLOh6qrAE3lYW1uY7E=","g2sV2z0YNrc+hqEfbp21bgHL1676C+DCUrx7QOBCyp8=","nvQ8aNuZGyCUm1La0jly/kvcFZsO+Q3yZ5lj9EQSpok=","JIsP4kDVNDJ0b0v+EK/8wVsjSqfxGmCWaYIZ/SUGUh4=","tbZt1DyJlM8zLUZbYQMewvuopruVLKK4u751GjzOA3M=","IW1Z1h90msgmHkpe7XDiP9qU8c1CVlhSKb2q4nYpLbY=","ZuibFxXHN95KwcwFe3CqD5FucrlRUaepwyB7vxTQNJs=","JLWfYIiPRPLTb7WofYw3ijNlkkxf7IvwNAafEvzlh9Q=","PWHiSUXBMlY0usMv8Wn4ZGYAisEeSY7k5mGwNWOXEJc=","s2gqWk3ybZEjMFt+zHa+Oplw6OjH505eTgOQ8F9Ish4=","y0l1CRyy+vhq8/vYpcToFtzp3PQhicIuU0LJWLur0cU=","z454vRp1zUB5qZ53GpVqALfLyQCyQZwzh26mSyStKkc=","iWE5TUUNIMBhU6lkd/K7Dl0zudi3KT6I0lY+DEwhDOM=","bfSNv3ZhUjpid9icF238os8rdQOunM2OHtTH43bdOD4=","JpOQy1Cn+BfEF4xSwDGJjflYZkq9r0mQqoZgtD1bYOA=","D66cstghc+eXRAloh4ArruE58bjcHsveB5RUhKCT3bs=","KBWpHx/64Swaln3dqMSIJSzPEX1k9+fgaocuhYGNv4U=","ILKuQ4o4l7BV+gizytlCrs05+mY+oBXqA7GtLvfzHro=","ROoyXv5rGjMgLg+4wbmQstnDkkcoWvc28l6aiFwBEac=","MLmzoDIjEDzAsrc+f4oHgwtZIzuujAjcl5ebEZk/lsI=","Ki2X1DMHjtnTp6pDYwVu2WkCwHwtrO1pq+kiIXgOUAw=","1+pJLzkFCY0wGtMVZ1IDeDfBtlamZJk7v8+A5SRXebY=","2HSPgJbM8O1SyGoQe0+W3GJxpMLl6DvEdLGvih+uIUU=","YJHA/5F8Cw84ZDY0bZXz1Wt+wx+Ot8jrZXtSy8AkJPY=","r20wFoEAe4dbHzQ9RaEriq3n3/Eb306coO17bbwcxgE=","ohYAQrq/Ij50TZt6fR7aLGmmKXkA033bKqt3A4tBd9k=","WK+wDc9/TlZerSiZ23rEmnIpR2qzbZU+t0HRfjNpII0=","1/dd5B8EPoavSWk9RJp+GsfEtitY4rAC6TRN4BeKX6Q=","skS1t38PaBn6AEtEF0dVHn9HLoRu76JCL6zAwSsC3q4=","YnSDiNi/roa+ItOqs65eg3ZRLCWmKtBLRXn+OW/RCFM=","dn1weTQrmOL+hQ15oYNCFiaIkTypiuQmdT93u2IoE5Y=","auavbTJBRldJF9Libb/jFA1cX90uYfDFpei7LtZhshg=","+DQSGq+wY7BbxM2TMKXxWdZXbHEyQfv1EoipoaLeYR0=","ilCaWy9uQFJVLBS6w6CISmAcTd+bf1zC1Rm3exWjXbY=","HIPtHV7mL4ocI+SqBVPGLjeMkoZ0XFb5N/OXsipta+A=","uoQ8wFB8m6lXjSLyc2BqFl1pzYdzbYfulqjSFqJs6eg=","7vbj9Lby4In22XqwFPt1zUhEemrTCeimFgqIWUTRpao=","f0/cRNSV9rlhIJT9eRFmXEf7RIPym07vVhbwO412c5U=","QnYIIfYAyZJxd6VBqcUd00U6J7i5UFA22v8ez/wi+Vo=","0tHC6YsJIGj6w9oYO/KN2ytgMIP3sQvEXIs6ofjm6eo=","b7r9J5MYrIyTZibYnfhGc4/KxslCfDipqIZj2h2mZkI=","MZYNJBKfy2+tOnBWPxFtODgQ6W8KIz/DoCICpHcVPxo=","Y3Y8UIMY2x8OE4hdQjpAMK815tCO5pS5YJeYxJubUF8=","I0ahnLsSTHegWR+N1QQmQPDeZ1sjdHvybiyuKpazk5o=","MsS1pUSQmbf7xuaFLCHzqsR9MaGW4/Bo7TiLQ0m5zG8=","BB/Cvw5sNe8bi4jJcYOL/3McApcI9TLQpsQRweSbwcc=","cR5PwoPk/d7FDaZUDDNnuGyNWWDYbGXletGOzh26kHU=","PVx28htPKALTDY9urTQrsMeR2GyqI9Ro0pSnZ9ZVBNg=","wwGOHGIU0Pl9XuV6N8rhiQxCD/13svsi9IuIm6Vbh5U=","TZwPSF3FnPwcrCcYOlgeveT6bfebhxXsSiMizq8DWLc=","NeYLkymqgjqZTv8dDUUeeH46J+MaEWWqDru/M2Cp8iY=","JNIvHgrQGy/yNSGsGtm4K3369SU94c/qe5gZnYdwqAQ=","eaENM1Wvh0W04i6BW3AUUA28UG2TuZYFf+M6LTN8Pr4=","eON5x88jw6UZgjA5BqOwk18/rtMBgxNIqVNOndi60wI=","XQiYdwFG5HNDIr8+1B06df08qUWJK+P9mQWbIgidssE=","ILANYPKl5yTEt1lBSbbtOupTfo0MIKrZL746lz0jocY=","ESzfA7p9UJVW2L0jdsBuXdEUrL5q/7QmEhVZHKIZMdw=","J3BmeiY1AV5pTqy3AqeF9LZBwB7sD1D/kook3TbSaqg=","tjnYbPRwOFAXBtDGnfufXsh02d8OvoxXxm9G1Dor6+M=","T8f2ZJXOPfFKddEfm4IaCQcdwq4O06NV6HG/M7jSNKY=","1z6y3/W+swvsWs4ZkxOrNyV+0ChjMvCHBZSkvwo9ios=","4SMk5il2yLTIZMOMEfCMank5POdgU3JIslwY/PiycjU=","joiLNQrMXElufvkRI8RnUBhZ7M/fFqkBPpk4A17dCuc=","pH5vK6iMH+OOXX5OdEiCwuIpz61bFsuZ43SisdBIEQs=","QS4Q56gFGxDEQpjK7hrI6eFmtauD14tVSr61OgnA3Wc=","0AGl6FM6X0ay+NAnDaITd4/cNaGHzfWnkuhwml/xz70=","izOjy3jQsafFAAvHAJU2K5V6e2ayYMo4JQNoGVhjFn4=","dSrBUkTZ5OwUQmRhSCoxEzbt2OqOFzzqs0BfpkUjkFA=","avbUJWFFoCEMCk9u9Fev1k9Bt5fJojnkBpimpEKJ4FA=","/i+z75Lc9J5yMMaOACKsx6M65WHT6UFgNfRSu1U5KQQ="],"block_size":4096,"path":"options_compiled.js"},{"block_hashes":["1rldrKotmYDYHjQ7xB8+NBUxQN8A/Edypa4ubRd5oGQ="],"block_size":4096,"path":"options_css_compiled.css"},{"block_hashes":["WrGPwcZFLXaqW2JgdGFHVJH4sKm2xipC+EHdPZU2Amg=","k+trWoQwzBHGAQ5mW3kXLeb2xBT/Ey/AAYHmI5QlmGs="],"block_size":4096,"path":"popup.html"},{"block_hashes":["MhfqxMrEhKS39vmjnsWhkJl6bV/RwSnusa0sNVw5I9I=","pYhGARjc5p6IF1iEd44Nb2USKs9FcJdb99hKikUS4Ns=","vr9xyDFPXVvtGNR6ODBwnIwLWOaxxh1R6lAFHuUBWKY=","uVsE24uslGofbQRwjsIUNclMoDyDoDhY881jB+7+JuQ=","nZiG0NPslwFDXbMt74CyhtIwODYazSngl338w+Jqb9g=","/JIioN+//MzubuyxgV52UqxeuNcJDB7ff+LIPULk20U=","kzBq6WSbX3DTxWhsLGltUf4nDKECOGJ93fIJyLmew2A=","H6NacJRJ55Npd0spYkZiiBeHJhGETZaAl+Mp7OEOtZo=","2eo3GnL1Fg4Au3qOVlyYQ1QiD6FIQixWhIX5CotOE3s=","Jf3NB+whDoxfhCUJzjyCAVCs5Yqh2QI0KRUTFzFe6Kg=","CZ/Oe2uV+8gUKCMMuw6BsH1Z0I+0o5RqRsgY0/Bqi2A=","HwXnZ0KtYZJ3bA09R0ciyrQIjRYFubhIoUALdEsUQcA=","0FS++UsCXNhRglNnsOFwZ5Cnl91Y02QQTH8UsH0k/V8=","awXOzkmxWkzslBC7vJkm+H/AKGTlrWIAcFdoPe4fJKs=","P2kf7/hrMWxRw/HPkIi55nK0roxyJRwrNH5qAsk7RSU=","ZlykcuZP5CAVQfxK0qXz9k/Ey2pO+MZ7+5Lwm2fuYQ4=","Cwk+go0APO9rbbzRk/gVcJerummmgYgDRzAdJXjleuM=","pImZByjMiN0WKApdXlV6RXqJsSDxUsdSqS18YeozY7E=","pvRhRhxozz0zzqoOumS2/GGgc2Uz08hJLK63GqcH8zQ=","1TbCwnTTqdyYjt7z7u0m7c+5B3gBl/vhEdk4Y7J05Ws=","MDZGJgcR380sUeuphQPv8AJCLj4+cMXGor5n2FrIKDo=","UO6n7H5O/PbEl5Cs8cFJycGeX2JwGd9fz49yHU0ghlY=","BmRNHIQHZ4ezwQj6EJTIXSLpIIsOoSPSMRdRlOJoIMQ=","LWKJh4pTg5r/DE2cmYYAFRs0M5BF3CtsFe5RMPBVYg4=","1D4Q+jtWZu9bK2XVIeYEbyFDR4izo/OpCyLa+NnVPBY=","i6xd/7xDIMqzcYJWyYEVHTT7fpWI0mdCjkKafRrp5uI=","6Yvwv+exbrxc2cf7eW+CTkarKGLiE18HbJF71ad1h4U=","BHd35VjkbmgMaq1RetZxegKyHQkEQmuMHoduHa6Dj0g=","XZGFm4GVBvDs/0c63n/yU/fKIpujLwa7uWCl7K/DfA8=","Xz7ZvGSQrU/q8w3ym5yOHucANQuXKmfrIgrALPgnVkI=","ldZZqJO9RMRTqsq+2ETHgaxnQffQqQLZEmXmQ2XguP0=","5K2eGJuuRtJgsRfkpMxqJxG5W22z2SxlpYvEZWpydZ8=","SjUTKymu+euFVjfj2V6kyVNPRCz/A9fOq706uVkd7cs=","+Zsw0o8WiDmtEjLV0MpqTNLXc5s1BJahKBU4b6obCMA=","6SKgTJtQOPDKf0etJLECoGUBfrWsXKvmkHpBCMhCXpE=","aKLszLTiwVt1p9rvXyKncxEzNZ7hPVRb2VPit3qspi8=","mg0CA1Tb8TgxRNYbcxRvFDX8+osDf+eMM9JTr2bALEs=","2ksgnfe6p7/xEJOOAUpsICOVAlYQX03sehh/gyiB+P0=","pJsRG3AsxGEOLvCrDkUULAfGfotcvnEsn002ZdPdT/E=","nsuE556CO6My9KO+fT6ISKaFJ/QH09LZh+aeerYMPKs=","+yMG7UBC3iSP2CW/RkcJxo3edS/F33EEGD46I85+CBA=","TF498DABEzxnrCvc9yH7CfhuuSApwVyXmXLl0pG+IQY=","oYz99gJuBGThwnIvFsvCiTU1dxBUwNL+dd3p7t/OFlE=","lYql3zfOXXu9O20M+Oi4prMMjICfiRx6makVEd2xt6s=","zFbkuvZHRzdsWxrQtyVDHJD3JAaJpdz4UxwjG3c6YGQ=","95XdjpH4fPRXjPWlV3eAgIBfiHC/6YVNTtdOdC6LmYA=","Eeo/dN8UeIFa4PFdSku4aWl+uiI9qS2QDJEJGZp3+Ic=","1CZPLOSj8tNxqPxSReUuCCRxUIYfF2aJEZzcot+5sDw=","W30oZxyhozMWXsL6v79zvKOZGagHmWWdxtpDJhaa9XA=","IM0MJReahqUP9HbDvQHZWVEG19fJOGiWE/ap2x0rGHY=","1hKK/NGFTNULR9bLcylN7gAS533nGuobOaDn7K21qLA=","r/jKb7cxhB08Vvf9x7raXqk5UQIiEzjO/sv9/kB90cQ=","Er+n+vdi+CdQb2MHvnzlqhTU8UYDjIoVhOhebt/66dU=","TLLEbbipZidqVpVrojnVnbha+US87znzIXLAiJOFVTI=","CeTE1Ie8SFdvg5XCQPBbnWTn7zTcs3dYJprt0nxYUFE=","+B9QzGgtFXakK2tymueu6kkBihHCTBVQX1ymqIWSIQ8=","h2zyfM8fcdI3KtjIQRqs8mqLghc3V2sgSNGmIJNzuVc=","hJSqtKlfDu+rPG0OKoXHs/94ITeB5pBFVi5K2NcKkNs=","0WRdOcfDHzlIonNvc5XddAgYF6c2EA5KNrxFIdGKah4=","aA6rFwQxjLpfa4oWV2xH12xZVY0LVahyuSSbUlwGGiM=","fukSBsylJyeCNZ2p8Rq17w/VgvnzaKDIcHM5FauScow=","W+CNd1OvkTZmqSbzytYs6jLGLuuEwmYY0S0qL033Rq0=","dKRKU4n0Xu2VEYmNQOZDBK7Z2gftO0Zt+416yZzNdo8=","DJKx733FuZjSWpewvg7cOOGTyoIyFQkTRBrhgE1636I=","umvd0ihil3EMaq1YQ5FgMsK4rWm8QOybTtFthwAcf1k=","AI8iE/uds5uQOWL9Ew8X9JC2tgOAT6o436jwHuDqvBc=","Pec7oA4WGJ/CJw3MEZ3XGgkTXAOShDYrD5IQ/K6qdXE=","6CBsOsoWbdl5WDlqHbaADCVixA8/VSvnf7Vd8aSvAGc=","RgPC7KhRMoEH18+gheQTMTNu7/FDvwTaHt3z+gWbE8w=","kaN20KO6OhIuMv/nFjvd3o/qNZCIy/nwgVS6mYIhH2c=","iThuwA3ahpVrtlfhaT7/JCkHcjzXkILJSLZ7a8RV1lc=","AKOySopjDmNrds82m+1yNvYO1GpQLg4EW/bbxP2/Q/U=","EvPmZ3/o+viNTEm74Yr61tTBgWU/3sM65hLTbasuuGQ=","0otCpuNZDwbUeCArSgRhhdz+QSQ4YNSf3JAAfxFj61U=","f7ocpA4RISRMfdBDvOJmKYqJ/DlgoENxS5QtMeQdVxs=","OjAoI0BcUUu3ObgEs2pIbm0fOCqOqTb0FWrngF06lFs=","G5bPGGUikSQykvMaaN2Nk5yKuSx67Tz3OOvPsGBAXKI=","IN0pdZyU8Q/H8Fvr81fcXBvJgbKqaqvENRCcot/rx5A=","WZd3kc95729hjON/xHzYZ/lgFv/IsSSzjTUFCeG02ps=","cnjhNbAEpu3uM00IItX8SarF/+lQg+pAYYCGKOigy3Y=","QTRVsZYLpPVrO+n8ZHJ+FcManN4xpKc6iVx8gnP4foI=","YBRSByX/aglBW5+JtS4PHLmglxrK1fsJ1Q3IMx8aQjA=","yGPLW/mhlaUmH86J7AJSjldHGhTJSTx2VFN5sZlbPVI=","FE+U9tj9KjD2yrrKJkNnp8980pp2be4D1ERzejgqAkw=","dC2aPmymb8sjQJFdRPmtY2WwdChZIwGKzeSWml8veJ0=","FuZvpTJDUx4aOEXXECJ1ekkXZZ33aRjbXiwqQJqTcVw=","rkaNZr+Dr3svxcFcgiKSL70W14MQKBwDQzJuQDizfvk=","qz+axKjFKbW5y3kMRcw6SHc8OfZaRbQ+S3bGHvEDQUI=","la3olAzsqFDTWGBKUoxRCkmVuaW69TJkjeqAipGtfhs=","gJmomlyN3Wbpz9XcoeALLHMtY2/n038O3W0uLhxZA44=","/NhOWcA1v2Wkhd0KOaYk59gxQn33mYObn7EsgrlvIgo=","jMkTbszrHaN1xFb9Q3aH0pK0OkcJA+acV02jPdh/qD8=","EKr5+OxSbU64pjyTOvHt1QYukYHfJNISfOkv5HstO0o=","N0NsJ15nLLCw9ky7EWqAUE+Pbdv2w8JGrTUEIR1dNFk=","87tYscHV7xk9O2hEZYAE0vqbogxyIMzCyner2ywU3uQ=","AFbEK73gh60ZZdnOFUy2YFx5ulTRnrGXX3GPJ8wpoWc=","KxwfFkbk3J141Xzh8pRMDJrjtaNMFgF+WckNO1I6fNk=","7yom6kwWXHFaXmVccL8rIkvi9WA42Qlvf3d156nuirY=","hwiLeOQFaU7p8Yx+p/ULTYWp6hyP8n4YUmJXgdqGM2k=","zO2URMuhHBcmmPlOyZ9tT8akTJq4VeLHRae0olsmTOM=","HHf4xEFvUXWSkKTrM1zXIJx/vpkpDkK5MY/+czu7CoA=","a7ugew7JmF9TeDp1N3yukg1NIsWjL8Tu+HC8Ujh6qz8=","ZmTaPGOV028tOzbnn1fJuo0qH54S7z7375CAdGRMoEo=","IvC0hfVagDLh8BYsmFAfAD64V56GLCwMsgVlh4Do3ss=","8OVfzKRerVnzLJ7Q/iE2kH2TMrFbJd/H1ojNvyRJfkE=","BC8E85niMLtdrxaIV7NEPh2Yc8OZuf+s5DYRFa3HA/E=","nl/0fy/EWJcOQDJoXMr5E1kNDdOC/f2KxYlpULiAIsI=","8+quhVIu/kiMCMKTfxp51WE8cBw9muB1y0FR6GqpEmk=","sl8LqIQAjU6xF5+aRcHqaSHzI7rzprjh/3yQgiPlwiA=","3MQGUcDTG4tMWa5VNtSJTZHoLKq39xOgFQhmiLxFgnc=","4oLoH3FfaivRI1yGrNsbe+yWEEH1N277ko+cFSRKlnE=","Bofj9G7vEFdKzj3/odgvYtk6tf8aIAGwpbgsEp5imWA=","1344Q9GrGjskVnU5mrXCKI5AZiA6W3vg6da0Ye/DJ4g=","UJ0vBb34G6TpuYBVGq3bxDeA7F+y8wM7Paj4Hq8mWeU=","Ld2IUmxVTgmbjgBLGblCTEkidm3173OaO0gNkF0vLrQ=","b0R4a8DPUW+PX0S1OwiR5smTN1ljBQ+EmstV2ReP0gk=","LcuEHCNOc2OG1kCj6W7Dguqmmb0x6h1K67juo8aRtuY=","SfjtMgfX0lI0rCu9yXd9fqkQ8tVJoiytGkbZge2kYXg=","BBL2swsNbzwJGfhDZKpq3xxqP7C7JzpAzyfiFJydagA=","OK0DaoxuIXO6UvYfmtq4VJQDJxnM1929hzrPMXPnWl0=","+G0ZkpOl27atFrx7dmUwOMcgatlu07WyZXjrU7r1wgM=","Ipr7Bs8bCGqzfLhIWsofsZComB0W3GnD2GsMSZAA2ms=","hOQfUwqi7XibxEJnP3um/vH+8ItbNJno9vIyd4XTANM=","g6Fzqv7eA1c/rxcWppkLTTEOeQQRIWin777Qrx2C7HY=","/xiywQBmW4DUQo+Uu0tVtklo1HlzXqZOfZQZirHDL4o=","zVjCPDS1Rycy0TkaJgqECxnZWx5rqEIlkCkdi1pCT/o=","/u9oF2uOarMFKIT6EPYKJeDK5HSBVD5z2vi7cSmrXY0=","NTYlXSsH3LuROMBHt/MnjLm7H4r1gO05k51WcaWf8go=","fYQlAjF5DUhdQuDd8O+cz5s/2o4p0wOAX399P1OkPZY=","4LelCFEa5ercjiLylBi6P2IBSSyWXtSe5xWQaTuP4dU=","sfnsXYgcbFWSr8LmZwE398l3D6aIhCteJbiXt/8xoiM=","Jd64mvexxBwlMYiUP2zquQMZG/7pzZnhXIPfDtycBvI=","iqwFDkC1JoGrLpksbjpHiKhFK4WZ7he0Ku5/N0Z/Gnc=","tdW41daPyIAf4QIwN1DKD4MMqO5IwKKKtB6ZboMQ5oE=","rjMz/+3MF1opKULsy1K+zO09EqCcV3zIY7qp7AMCN5I=","T28wsKTtJrIdV94kZO46frHngG/aOeRGfPnbke5GL3I=","skEB3XM4kkcSbgVKMuM1P7b5rjcXduJ0rOWxwMdU+dg=","D7Icj4LBItr7JdLy9Y//+RGvrFPbomUvtHMXIM+lp4U=","T5gUsAi7s3J63NFy2RjTXI8qnzCvfHcvHx2UM8ceIeQ=","u7k3xIt/edEPbiFhy2E3ecPfWatJoo4DEPNMHPiQ08w=","oKwGcaZHehG8vaexVnom6m0D/zkhtyiz6ScjQ2mguTA=","vIS/V0RglFMAIDvV5BEzOxBI6l67MGWaupR/8o5rbRA=","Sxfdl26EJN+WcivFEwRoY2SMyv9KMKjRJtbc5ArH/qE=","zRzxVQ90mpA19NhVV9yGtS6MhBQDkxY7Le9ca+GR01E=","o9zmg10exExCfN0sDQvNcFmoz7JofIByhhyz0W/8TAE=","bfSEbH42lovRr/W16bT+fBIR8RWm0YrfRZ9DChyJFX0=","+V7CQXEGdOrBEBJjTyTFf9e6AZKTaNT1QsLE9nznTSA=","uNGCJ71FPWCMuhP/X/5STd2Ov5J57azi9XRkwko+J+U=","+WVwTgbGHWkvvfx4xwYXzQkZguSRW6Sr+MTzU1jPPF8=","SRy1tdKfAWnTCiVJ8fZPNJ/gfscRQx9z0f6+nTTad0E=","dBjUvNNgkTl0mu70rN0zLSnR3MSVphTO6YBArRL8Xqw=","Dhu02Q1zARnQeEoA6dbcJ3U2LX/qCVEcXxAejUHDKoc=","I9KHVUJHnlSEFcY65HeZXBS+T5vsh1sSZmHp9kPnSf0=","m63x+KWWRYwdX4VE4nKvnkceU9EHK0UroDDDAglOZS0=","bUtEsb3+blj3LlkxMaFbQ4tIr4S2x3ldap6s8gzirLQ=","mZqqesViE8cKhLcdkDnY5zb+Kk91mBD+uQfMfndGM6k=","OzVKzFDStBHF3H+tWLOQ280QNmFt+FTrZ20qxUZeaOY=","62LjG5ypN5Y6up014la1nOlWSDS+aXwX2NywctCkfQ4=","G/xlGgol8YUAKLQAV063KdMn85j267mVnqh0kbxbhc0=","L9g0ubFDoGBrvDAySlqcWJ6Vo164kdRALC7kOPlrEqc=","uCzaqao1EAWhHrLaCL0taS25PFuOvT1xuem2dsaVBXQ=","tJHjKWIs1RQrpxTpZAVoQT1MQy/fvjMl+t9QVVSmNIY="],"block_size":4096,"path":"popup_compiled.js"},{"block_hashes":["c+UO+qSAh3rdhKEIdnpo2nw/CZ+aeV6uq95PLrvZ9c4="],"block_size":4096,"path":"popup_css_compiled.css"}],"version":2} \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/verified_contents.json b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/verified_contents.json new file mode 100644 index 000000000000..77c1630ecbf3 --- /dev/null +++ b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJiYWNrZ3JvdW5kX2NvbXBpbGVkLmpzIiwicm9vdF9oYXNoIjoiWlFxZTZXVlgxWDI5MDZBUWhCeWM5OG5wQ3ctSjhiVU9PVHBibHJKUHY1dyJ9LHsicGF0aCI6ImJleW9uZGNvcnBfYnVuZGxlZC5wYWMuanMiLCJyb290X2hhc2giOiJsSUktQWl1NElGeVl0WGpNSVFqblQ1d2YwUVVIU2RaaUVCQWNjRUZBdlhzIn0seyJwYXRoIjoiZ29vZ2xlbG9nby8xeC9nb29nbGVsb2dvX2NvbG9yXzExMngzNmRwLnBuZyIsInJvb3RfaGFzaCI6Im5zMWVHQ0ZxbGxBaDk1VE1IOUpWZG4tRU44NGQxc2JDXzB6dXA4ekFCejAifSx7InBhdGgiOiJpbWFnZXMvYmV5b25kY29ycF9jbl9jb25uZWN0aXZpdHlfbGFyZ2UucG5nIiwicm9vdF9oYXNoIjoid1lWeUN5ZnkxR2s5a3lES3R5WWtLQ3pHOXhYazlpT2FkSm5zdFFqTFNqbyJ9LHsicGF0aCI6ImltYWdlcy9iZXlvbmRjb3JwX2NuX2Nvbm5lY3Rpdml0eV9tZWRpdW0ucG5nIiwicm9vdF9oYXNoIjoiN3ZXbnJMNTcyZmVuN1RpOXhsRG5HNUpkU1pOY0Y5V2QwZEZvbTFGZkdYVSJ9LHsicGF0aCI6ImltYWdlcy9iZXlvbmRjb3JwX2NuX2Nvbm5lY3Rpdml0eV9zbWFsbC5wbmciLCJyb290X2hhc2giOiJSLWlUV0haQ2tSNjB0amF0eTExM2hteFdfaGFmUjFfeFZRWkhEdmF2b3k4In0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfZXJyb3JfbGFyZ2UucG5nIiwicm9vdF9oYXNoIjoidzdEZkxIVGFvUXFGQ1k0eGRzS2tWUHJ5YlNQekJ3RGNJSFBfTy1DcnJtayJ9LHsicGF0aCI6ImltYWdlcy9iZXlvbmRjb3JwX2Vycm9yX21lZGl1bS5wbmciLCJyb290X2hhc2giOiJJVWpRa1JDek5vNmpCVWltcC11Ymh4R2NVVFo5RjBZUjFEVW1FcUZDTldBIn0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfZXJyb3Jfc21hbGwucG5nIiwicm9vdF9oYXNoIjoiaVZTMGRMN3VmTTl1c19xdGxmbUVjS2J2dm9DVG00SzI5UGFFT1B4TzBObyJ9LHsicGF0aCI6ImltYWdlcy9iZXlvbmRjb3JwX2xvY2tlZF9sYXJnZS5wbmciLCJyb290X2hhc2giOiJteEdQX0xvcThCUnEwZ2tyZGplM01icVJUQzNDQURpRVB3WDhvdEZ4Q01RIn0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfbG9ja2VkX21lZGl1bS5wbmciLCJyb290X2hhc2giOiJkRmFMNkpCVi1odk5nMzJoRzRPSnNIY2J5NGU0Sk05eVRMWDJPY3BsZHRzIn0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfbG9ja2VkX3NtYWxsLnBuZyIsInJvb3RfaGFzaCI6InFGUHl6bTFhUUJpa254RVlwcGI0U3JIYk1RcmZCVjlXcGFOSDZFQ1dXbWsifSx7InBhdGgiOiJpbWFnZXMvYmV5b25kY29ycF91bmtub3duX2xhcmdlLnBuZyIsInJvb3RfaGFzaCI6IktyM2Nxem50bWNRelBNSWFZVmE0NjVWajM2NzBVd3NVWG5ucEVvMzJJTFEifSx7InBhdGgiOiJpbWFnZXMvYmV5b25kY29ycF91bmtub3duX21lZGl1bS5wbmciLCJyb290X2hhc2giOiIxRmI4dEZqYzkxU3lRdmgwTzFRUU9zdE1mZWp5UjhPM2p3SzhFMk9pSEhnIn0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfdW5rbm93bl9zbWFsbC5wbmciLCJyb290X2hhc2giOiI3cmpQeFd5cTg4UDgyY295YXEzenVyZXpUM1lBbDR3NmdRVTkwQU85cXdNIn0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfdW5sb2NrZWRfbGFyZ2UucG5nIiwicm9vdF9oYXNoIjoiM2hRZFNPck5vY1pDQnBteU9rT1Yza0tiUE5mYXlXcWgxY1F0aUFOSlZ5QSJ9LHsicGF0aCI6ImltYWdlcy9iZXlvbmRjb3JwX3VubG9ja2VkX21lZGl1bS5wbmciLCJyb290X2hhc2giOiJXRldCQ3BjY2JpOWV6T1ZWNnJYdWVJeXU1TFd4MXpva2ZtbGpPWnVQeDVFIn0seyJwYXRoIjoiaW1hZ2VzL2JleW9uZGNvcnBfdW5sb2NrZWRfc21hbGwucG5nIiwicm9vdF9oYXNoIjoiV0ZXQkNwY2NiaTllek9WVjZyWHVlSXl1NUxXeDF6b2tmbWxqT1p1UHg1RSJ9LHsicGF0aCI6ImltYWdlcy9jb2xsYXBzZS5wbmciLCJyb290X2hhc2giOiJyWDllN0Y4RHRfR0k5RC1mcy1Pd3hyVmdpZGUtUkEzU2U4SnZaYW9TbUNVIn0seyJwYXRoIjoiaW1hZ2VzL2V4cGFuZC5wbmciLCJyb290X2hhc2giOiJHd3JXU2NFTFhvang5azdKemljWUxBNW5DX2dFbzh1anhjcTBIa0hMWU1VIn0seyJwYXRoIjoiaW1hZ2VzL2ljX2hlbHBfZ3JleTYwMF8xOGRwLnBuZyIsInJvb3RfaGFzaCI6ImNPTkJocjlUS3pMYjF3bjBZR0pmNndhbzEzN1VPR1Uzcy0xeElvblF1NUEifSx7InBhdGgiOiJpbWFnZXMvaWNfc2V0dGluZ3NfMjRweC5wbmciLCJyb290X2hhc2giOiJBS1haWFlpWVVZVWxSM0N1Vjc2VTB1aXEtM1VwSmV0a0FHd3c3MWhzQ2JBIn0seyJwYXRoIjoibWFpYS5jc3MiLCJyb290X2hhc2giOiJ5WW5HdmZaT0VTM29aZkxUekV1dUY1SlY1Zm9TZTUtNFlIWTFnQlBLSzE0In0seyJjYW5vbmljYWxfanNvbl9yb290X2hhc2giOiI5dUFMaXFBcENBUUJPTnVMS2RLOGRzMldOVjVFdHlrOTVVRHQ1WE1ETHBFIiwicGF0aCI6Im1hbmlmZXN0Lmpzb24iLCJyb290X2hhc2giOiJidEVkNWREaUNzdVFZS1ZKQjhRTFY4c0Q4cW9XcTA3OHpjOWVZSFhuWGNJIn0seyJwYXRoIjoib3B0aW9ucy5odG1sIiwicm9vdF9oYXNoIjoiWkZxQjI0bUJ6RGhUQ0d2S0Q5QnpNeDdYa0d2S2UtaWFzZTVxcnFJWnhadyJ9LHsicGF0aCI6Im9wdGlvbnNfY29tcGlsZWQuanMiLCJyb290X2hhc2giOiJjUXpZbC1iN1I2X1JDWkhaTDB2MzFubnFlWHpwWXplTk1Ec0NENnkzaXpvIn0seyJwYXRoIjoib3B0aW9uc19jc3NfY29tcGlsZWQuY3NzIiwicm9vdF9oYXNoIjoiMXJsZHJLb3RtWURZSGpRN3hCOC1OQlV4UU44QV9FZHlwYTR1YlJkNW9HUSJ9LHsicGF0aCI6InBvcHVwLmh0bWwiLCJyb290X2hhc2giOiI2UEt4OExEQnotVS11UVRGcnF5RVhaMTEwc2pLc21ySF9LVEFOblFfcWdnIn0seyJwYXRoIjoicG9wdXBfY29tcGlsZWQuanMiLCJyb290X2hhc2giOiJrelczRUpncU5PYUY2d1ZpMGZzYjVXN0VLeDBIRVl4dS1JT3RiVU51dExnIn0seyJwYXRoIjoicG9wdXBfY3NzX2NvbXBpbGVkLmNzcyIsInJvb3RfaGFzaCI6ImMtVU8tcVNBaDNyZGhLRUlkbnBvMm53X0NaLWFlVjZ1cTk1UExydlo5YzQifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJhaWhwaWdsbW5obmhpamRuamdocGZubGxlZGNra2hqYSIsIml0ZW1fdmVyc2lvbiI6IjQuNiIsInByb3RvY29sX3ZlcnNpb24iOjF9","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"CANwwyAcVoPKSS8VowPBtt9NiSEeZG5MsjIaxyEENzBWKrWPpY4lJfsvCBAq4AiDQsGzQaKJXe2gDU_XMAHlL9a0roFvAKglIxyjywD46oIqY6-q9ypPML-EuGGKCwPSC152GZEselWN1cbkS5X-90QC3RJWC6Lf__OHDXmP2-qqAajN57-uUJtfHmnIUtYNUPLvB-n5lRMGIOD0mZ-Mf3ygNrHS-Djkz_PDoRE0b6EBm6lm5aJEErk_SU5GHYUQefoIRrTtUna8R_pHNJLI2csigcekR98X15LHDbgQQUyRfkM0f2KUgcHpbRPoqEmt7z4D7IC-3TWaSuGgCAIMDg"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"DTsLBtF7TIkbltMUkF_8cEtjf5KZEI3uGjbX0RRjq7tP5M8McidY15vEiaAdWIKMK_jr95Pcu7oK8DeDGCgrETtdNz7UpNpAKTgzLcXzOaiAZhPsTLcWT6XMVUSHDaD7lzBmibTd5IhdB1suGpd7Ka3NZm-HI8xomHeGqP0ZEJQpnlqywWsFvv2vHWPDqP2b7qV0gaRAkl7CzEuTW-souyW2R43bBnTGd8LmawI740gaa1JqxzC-eLVlOaRx8vwwWbqBTBaGHrToHT7tP5CnGRd_zlMeetHNiEM8AsI6FRUewVmaK0StBSsZcEipDGiR4saXZ2Fy1Jc2sRXzxz58NQ"}]}}] \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/background_compiled.js b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/background_compiled.js new file mode 100644 index 000000000000..cfd4185602da --- /dev/null +++ b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/background_compiled.js @@ -0,0 +1,8543 @@ +'use strict';var $jscomp = {scope:{}, getGlobal:function(maybeGlobal) { + return "undefined" != typeof window && window === maybeGlobal ? maybeGlobal : "undefined" != typeof global ? global : maybeGlobal; +}}; +$jscomp.global = $jscomp.getGlobal(this); +$jscomp.initSymbol = function() { + $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); + $jscomp.initSymbol = function() { + }; +}; +$jscomp.symbolCounter_ = 0; +$jscomp.Symbol = function(description) { + return "jscomp_symbol_" + description + $jscomp.symbolCounter_++; +}; +$jscomp.initSymbolIterator = function() { + $jscomp.initSymbol(); + $jscomp.global.Symbol.iterator || ($jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); + $jscomp.initSymbolIterator = function() { + }; +}; +$jscomp.makeIterator = function(iterable) { + $jscomp.initSymbolIterator(); + if (iterable[$jscomp.global.Symbol.iterator]) { + return iterable[$jscomp.global.Symbol.iterator](); + } + var index = 0; + return {next:function() { + return index == iterable.length ? {done:!0} : {done:!1, value:iterable[index++]}; + }}; +}; +$jscomp.arrayFromIterator = function(iterator) { + for (var i, arr = [];!(i = iterator.next()).done;) { + arr.push(i.value); + } + return arr; +}; +$jscomp.arrayFromIterable = function(iterable) { + return iterable instanceof Array ? iterable : $jscomp.arrayFromIterator($jscomp.makeIterator(iterable)); +}; +$jscomp.inherits = function(childCtor, parentCtor) { + function tempCtor() { + } + tempCtor.prototype = parentCtor.prototype; + childCtor.prototype = new tempCtor; + childCtor.prototype.constructor = childCtor; + for (var p in parentCtor) { + if ($jscomp.global.Object.defineProperties) { + var descriptor = $jscomp.global.Object.getOwnPropertyDescriptor(parentCtor, p); + descriptor && $jscomp.global.Object.defineProperty(childCtor, p, descriptor); + } else { + childCtor[p] = parentCtor[p]; + } + } +}; +$jscomp.array = $jscomp.array || {}; +$jscomp.array.done_ = function() { + return {done:!0, value:void 0}; +}; +$jscomp.array.arrayIterator_ = function(array, func) { + array instanceof String && (array = String(array)); + var i = 0; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + var $jscomp$compprop0 = {}, iter = ($jscomp$compprop0.next = function() { + if (i < array.length) { + var index = i++; + return {value:func(index, array[index]), done:!1}; + } + iter.next = $jscomp.array.done_; + return {done:!0, value:void 0}; + }, $jscomp$compprop0[Symbol.iterator] = function() { + return iter; + }, $jscomp$compprop0); + return iter; +}; +$jscomp.array.findInternal_ = function(array, callback, thisArg) { + array instanceof String && (array = String(array)); + for (var len = array.length, i = 0;i < len;i++) { + var value = array[i]; + if (callback.call(thisArg, value, i, array)) { + return {i:i, v:value}; + } + } + return {i:-1, v:void 0}; +}; +$jscomp.array.from = function(arrayLike, opt_mapFn, opt_thisArg) { + opt_mapFn = void 0 === opt_mapFn ? function(x) { + return x; + } : opt_mapFn; + var result = []; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + if (arrayLike[Symbol.iterator]) { + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + for (var iter = arrayLike[Symbol.iterator](), next;!(next = iter.next()).done;) { + result.push(opt_mapFn.call(opt_thisArg, next.value)); + } + } else { + for (var len = arrayLike.length, i = 0;i < len;i++) { + result.push(opt_mapFn.call(opt_thisArg, arrayLike[i])); + } + } + return result; +}; +$jscomp.array.of = function(elements) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 0;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 0] = arguments[$jscomp$restIndex]; + } + return $jscomp.array.from($jscomp$restParams); +}; +$jscomp.array.entries = function() { + return $jscomp.array.arrayIterator_(this, function(i, v) { + return [i, v]; + }); +}; +$jscomp.array.installHelper_ = function(method, fn) { + !Array.prototype[method] && Object.defineProperties && Object.defineProperty && Object.defineProperty(Array.prototype, method, {configurable:!0, enumerable:!1, writable:!0, value:fn}); +}; +$jscomp.array.entries$install = function() { + $jscomp.array.installHelper_("entries", $jscomp.array.entries); +}; +$jscomp.array.keys = function() { + return $jscomp.array.arrayIterator_(this, function(i) { + return i; + }); +}; +$jscomp.array.keys$install = function() { + $jscomp.array.installHelper_("keys", $jscomp.array.keys); +}; +$jscomp.array.values = function() { + return $jscomp.array.arrayIterator_(this, function(_, v) { + return v; + }); +}; +$jscomp.array.values$install = function() { + $jscomp.array.installHelper_("values", $jscomp.array.values); +}; +$jscomp.array.copyWithin = function(target, start, opt_end) { + var len = this.length; + target = Number(target); + start = Number(start); + opt_end = Number(null != opt_end ? opt_end : len); + if (target < start) { + for (opt_end = Math.min(opt_end, len);start < opt_end;) { + start in this ? this[target++] = this[start++] : (delete this[target++], start++); + } + } else { + for (opt_end = Math.min(opt_end, len + start - target), target += opt_end - start;opt_end > start;) { + --opt_end in this ? this[--target] = this[opt_end] : delete this[target]; + } + } + return this; +}; +$jscomp.array.copyWithin$install = function() { + $jscomp.array.installHelper_("copyWithin", $jscomp.array.copyWithin); +}; +$jscomp.array.fill = function(value, opt_start, opt_end) { + null != opt_end && value.length || (opt_end = this.length || 0); + opt_end = Number(opt_end); + for (var i = Number((void 0 === opt_start ? 0 : opt_start) || 0);i < opt_end;i++) { + this[i] = value; + } + return this; +}; +$jscomp.array.fill$install = function() { + $jscomp.array.installHelper_("fill", $jscomp.array.fill); +}; +$jscomp.array.find = function(callback, opt_thisArg) { + return $jscomp.array.findInternal_(this, callback, opt_thisArg).v; +}; +$jscomp.array.find$install = function() { + $jscomp.array.installHelper_("find", $jscomp.array.find); +}; +$jscomp.array.findIndex = function(callback, opt_thisArg) { + return $jscomp.array.findInternal_(this, callback, opt_thisArg).i; +}; +$jscomp.array.findIndex$install = function() { + $jscomp.array.installHelper_("findIndex", $jscomp.array.findIndex); +}; +$jscomp.Map = function(opt_iterable) { + opt_iterable = void 0 === opt_iterable ? [] : opt_iterable; + this.data_ = {}; + this.head_ = $jscomp.Map.createHead_(); + this.size = 0; + if (opt_iterable) { + for (var $jscomp$iter$1 = $jscomp.makeIterator(opt_iterable), $jscomp$key$item = $jscomp$iter$1.next();!$jscomp$key$item.done;$jscomp$key$item = $jscomp$iter$1.next()) { + var item = $jscomp$key$item.value; + this.set(item[0], item[1]); + } + } +}; +$jscomp.Map.checkBrowserConformance_ = function() { + var Map = $jscomp.global.Map; + if (!Map || !Map.prototype.entries || !Object.seal) { + return !1; + } + try { + var key = Object.seal({x:4}), map = new Map($jscomp.makeIterator([[key, "s"]])); + if ("s" != map.get(key) || 1 != map.size || map.get({x:4}) || map.set({x:4}, "t") != map || 2 != map.size) { + return !1; + } + var iter = map.entries(), item = iter.next(); + if (item.done || item.value[0] != key || "s" != item.value[1]) { + return !1; + } + item = iter.next(); + return item.done || 4 != item.value[0].x || "t" != item.value[1] || !iter.next().done ? !1 : !0; + } catch (err) { + return !1; + } +}; +$jscomp.Map.createHead_ = function() { + var head = {}; + return head.previous = head.next = head.head = head; +}; +$jscomp.Map.getId_ = function(obj) { + if (!(obj instanceof Object)) { + return String(obj); + } + $jscomp.Map.key_ in obj || obj instanceof Object && Object.isExtensible && Object.isExtensible(obj) && $jscomp.Map.defineProperty_(obj, $jscomp.Map.key_, ++$jscomp.Map.index_); + return $jscomp.Map.key_ in obj ? obj[$jscomp.Map.key_] : " " + obj; +}; +$jscomp.Map.prototype.set = function(key, value) { + var $jscomp$destructuring$var0 = this.maybeGetEntry_(key), id = $jscomp$destructuring$var0.id, list = $jscomp$destructuring$var0.list, entry = $jscomp$destructuring$var0.entry; + list || (list = this.data_[id] = []); + entry ? entry.value = value : (entry = {next:this.head_, previous:this.head_.previous, head:this.head_, key:key, value:value}, list.push(entry), this.head_.previous.next = entry, this.head_.previous = entry, this.size++); + return this; +}; +$jscomp.Map.prototype.clear = function() { + this.data_ = {}; + this.head_ = this.head_.previous = $jscomp.Map.createHead_(); + this.size = 0; +}; +$jscomp.Map.prototype.has = function(key) { + return !!this.maybeGetEntry_(key).entry; +}; +$jscomp.Map.prototype.get = function(key) { + var entry = this.maybeGetEntry_(key).entry; + return entry && entry.value; +}; +$jscomp.Map.prototype.maybeGetEntry_ = function(key) { + var id = $jscomp.Map.getId_(key), list = this.data_[id]; + if (list) { + for (var index = 0;index < list.length;index++) { + var entry = list[index]; + if (key !== key && entry.key !== entry.key || key === entry.key) { + return {id:id, list:list, index:index, entry:entry}; + } + } + } + return {id:id, list:list, index:-1, entry:void 0}; +}; +$jscomp.Map.prototype.entries = function() { + return this.iter_(function(entry) { + return [entry.key, entry.value]; + }); +}; +$jscomp.Map.prototype.keys = function() { + return this.iter_(function(entry) { + return entry.key; + }); +}; +$jscomp.Map.prototype.values = function() { + return this.iter_(function(entry) { + return entry.value; + }); +}; +$jscomp.Map.prototype.forEach = function(callback, opt_thisArg) { + for (var $jscomp$iter$2 = $jscomp.makeIterator(this.entries()), $jscomp$key$entry = $jscomp$iter$2.next();!$jscomp$key$entry.done;$jscomp$key$entry = $jscomp$iter$2.next()) { + var entry = $jscomp$key$entry.value; + callback.call(opt_thisArg, entry[1], entry[0], this); + } +}; +$jscomp.Map.prototype.iter_ = function(func) { + var map = this, entry = this.head_; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + var $jscomp$compprop3 = {}; + return $jscomp$compprop3.next = function() { + if (entry) { + for (;entry.head != map.head_;) { + entry = entry.previous; + } + for (;entry.next != entry.head;) { + return entry = entry.next, {done:!1, value:func(entry)}; + } + entry = null; + } + return {done:!0, value:void 0}; + }, $jscomp$compprop3[Symbol.iterator] = function() { + return this; + }, $jscomp$compprop3; +}; +$jscomp.Map.index_ = 0; +$jscomp.Map.defineProperty_ = Object.defineProperty ? function(obj, key, value) { + Object.defineProperty(obj, key, {value:String(value)}); +} : function(obj, key, value) { + obj[key] = String(value); +}; +$jscomp.Map.Entry_ = function() { +}; +$jscomp.Map.ASSUME_NO_NATIVE = !1; +$jscomp.Map$install = function() { + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + !$jscomp.Map.ASSUME_NO_NATIVE && $jscomp.Map.checkBrowserConformance_() ? $jscomp.Map = $jscomp.global.Map : ($jscomp.initSymbol(), $jscomp.initSymbolIterator(), $jscomp.Map.prototype[Symbol.iterator] = $jscomp.Map.prototype.entries, $jscomp.initSymbol(), $jscomp.Map.key_ = Symbol("map-id-key")); + $jscomp.Map$install = function() { + }; +}; +$jscomp.math = $jscomp.math || {}; +$jscomp.math.clz32 = function(x) { + x = Number(x) >>> 0; + if (0 === x) { + return 32; + } + var result = 0; + 0 === (x & 4294901760) && (x <<= 16, result += 16); + 0 === (x & 4278190080) && (x <<= 8, result += 8); + 0 === (x & 4026531840) && (x <<= 4, result += 4); + 0 === (x & 3221225472) && (x <<= 2, result += 2); + 0 === (x & 2147483648) && result++; + return result; +}; +$jscomp.math.imul = function(a, b) { + a = Number(a); + b = Number(b); + var al = a & 65535, bl = b & 65535; + return al * bl + ((a >>> 16 & 65535) * bl + al * (b >>> 16 & 65535) << 16 >>> 0) | 0; +}; +$jscomp.math.sign = function(x) { + x = Number(x); + return 0 === x || isNaN(x) ? x : 0 < x ? 1 : -1; +}; +$jscomp.math.log10 = function(x) { + return Math.log(x) / Math.LN10; +}; +$jscomp.math.log2 = function(x) { + return Math.log(x) / Math.LN2; +}; +$jscomp.math.log1p = function(x) { + x = Number(x); + if (.25 > x && -.25 < x) { + for (var y = x, d = 1, z = x, zPrev = 0, s = 1;zPrev != z;) { + y *= x, s *= -1, z = (zPrev = z) + s * y / ++d; + } + return z; + } + return Math.log(1 + x); +}; +$jscomp.math.expm1 = function(x) { + x = Number(x); + if (.25 > x && -.25 < x) { + for (var y = x, d = 1, z = x, zPrev = 0;zPrev != z;) { + y *= x / ++d, z = (zPrev = z) + y; + } + return z; + } + return Math.exp(x) - 1; +}; +$jscomp.math.cosh = function(x) { + x = Number(x); + return (Math.exp(x) + Math.exp(-x)) / 2; +}; +$jscomp.math.sinh = function(x) { + x = Number(x); + return 0 === x ? x : (Math.exp(x) - Math.exp(-x)) / 2; +}; +$jscomp.math.tanh = function(x) { + x = Number(x); + if (0 === x) { + return x; + } + var y = Math.exp(2 * -Math.abs(x)), z = (1 - y) / (1 + y); + return 0 > x ? -z : z; +}; +$jscomp.math.acosh = function(x) { + x = Number(x); + return Math.log(x + Math.sqrt(x * x - 1)); +}; +$jscomp.math.asinh = function(x) { + x = Number(x); + if (0 === x) { + return x; + } + var y = Math.log(Math.abs(x) + Math.sqrt(x * x + 1)); + return 0 > x ? -y : y; +}; +$jscomp.math.atanh = function(x) { + x = Number(x); + return ($jscomp.math.log1p(x) - $jscomp.math.log1p(-x)) / 2; +}; +$jscomp.math.hypot = function(x, y, rest) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 2;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 2] = arguments[$jscomp$restIndex]; + } + x = Number(x); + y = Number(y); + for (var max = Math.max(Math.abs(x), Math.abs(y)), $jscomp$iter$4 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$4.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$4.next()) { + max = Math.max(max, Math.abs($jscomp$key$z.value)); + } + if (1E100 < max || 1E-100 > max) { + x /= max; + y /= max; + for (var sum = x * x + y * y, $jscomp$iter$5 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$5.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$5.next()) { + var z$12 = $jscomp$key$z.value, z$12 = Number(z$12) / max, sum = sum + z$12 * z$12 + } + return Math.sqrt(sum) * max; + } + for (var sum$13 = x * x + y * y, $jscomp$iter$6 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$6.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$6.next()) { + var z$14 = $jscomp$key$z.value, z$14 = Number(z$14), sum$13 = sum$13 + z$14 * z$14 + } + return Math.sqrt(sum$13); +}; +$jscomp.math.trunc = function(x) { + x = Number(x); + if (isNaN(x) || Infinity === x || -Infinity === x || 0 === x) { + return x; + } + var y = Math.floor(Math.abs(x)); + return 0 > x ? -y : y; +}; +$jscomp.math.cbrt = function(x) { + if (0 === x) { + return x; + } + x = Number(x); + var y = Math.pow(Math.abs(x), 1 / 3); + return 0 > x ? -y : y; +}; +$jscomp.number = $jscomp.number || {}; +$jscomp.number.isFinite = function(x) { + return "number" !== typeof x ? !1 : !isNaN(x) && Infinity !== x && -Infinity !== x; +}; +$jscomp.number.isInteger = function(x) { + return $jscomp.number.isFinite(x) ? x === Math.floor(x) : !1; +}; +$jscomp.number.isNaN = function(x) { + return "number" === typeof x && isNaN(x); +}; +$jscomp.number.isSafeInteger = function(x) { + return $jscomp.number.isInteger(x) && Math.abs(x) <= $jscomp.number.MAX_SAFE_INTEGER; +}; +$jscomp.number.EPSILON = Math.pow(2, -52); +$jscomp.number.MAX_SAFE_INTEGER = 9007199254740991; +$jscomp.number.MIN_SAFE_INTEGER = -9007199254740991; +$jscomp.object = $jscomp.object || {}; +$jscomp.object.assign = function(target, sources) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 1;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 1] = arguments[$jscomp$restIndex]; + } + for (var $jscomp$iter$7 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$source = $jscomp$iter$7.next();!$jscomp$key$source.done;$jscomp$key$source = $jscomp$iter$7.next()) { + var source = $jscomp$key$source.value; + if (source) { + for (var key in source) { + Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); + } + } + } + return target; +}; +$jscomp.object.is = function(left, right) { + return left === right ? 0 !== left || 1 / left === 1 / right : left !== left && right !== right; +}; +$jscomp.Set = function(opt_iterable) { + opt_iterable = void 0 === opt_iterable ? [] : opt_iterable; + this.map_ = new $jscomp.Map; + if (opt_iterable) { + for (var $jscomp$iter$8 = $jscomp.makeIterator(opt_iterable), $jscomp$key$item = $jscomp$iter$8.next();!$jscomp$key$item.done;$jscomp$key$item = $jscomp$iter$8.next()) { + this.add($jscomp$key$item.value); + } + } + this.size = this.map_.size; +}; +$jscomp.Set.checkBrowserConformance_ = function() { + var Set = $jscomp.global.Set; + if (!Set || !Set.prototype.entries || !Object.seal) { + return !1; + } + var value = Object.seal({x:4}), set = new Set($jscomp.makeIterator([value])); + if (set.has(value) || 1 != set.size || set.add(value) != set || 1 != set.size || set.add({x:4}) != set || 2 != set.size) { + return !1; + } + var iter = set.entries(), item = iter.next(); + if (item.done || item.value[0] != value || item.value[1] != value) { + return !1; + } + item = iter.next(); + return item.done || item.value[0] == value || 4 != item.value[0].x || item.value[1] != item.value[0] ? !1 : iter.next().done; +}; +$jscomp.Set.prototype.add = function(value) { + this.map_.set(value, value); + this.size = this.map_.size; + return this; +}; +$jscomp.Set.prototype.clear = function() { + this.map_.clear(); + this.size = 0; +}; +$jscomp.Set.prototype.has = function(value) { + return this.map_.has(value); +}; +$jscomp.Set.prototype.entries = function() { + return this.map_.entries(); +}; +$jscomp.Set.prototype.values = function() { + return this.map_.values(); +}; +$jscomp.Set.prototype.forEach = function(callback, opt_thisArg) { + var $jscomp$this = this; + this.map_.forEach(function(value) { + return callback.call(opt_thisArg, value, value, $jscomp$this); + }); +}; +$jscomp.Set.ASSUME_NO_NATIVE = !1; +$jscomp.Set$install = function() { + !$jscomp.Set.ASSUME_NO_NATIVE && $jscomp.Set.checkBrowserConformance_() ? $jscomp.Set = $jscomp.global.Set : ($jscomp.Map$install(), $jscomp.initSymbol(), $jscomp.initSymbolIterator(), $jscomp.Set.prototype[Symbol.iterator] = $jscomp.Set.prototype.values); + $jscomp.Set$install = function() { + }; +}; +$jscomp.string = $jscomp.string || {}; +$jscomp.string.noNullOrUndefined_ = function(str, func) { + if (null == str) { + throw new TypeError("The 'this' value for String.prototype." + func + " must not be null or undefined"); + } +}; +$jscomp.string.noRegExp_ = function(str, func) { + if (str instanceof RegExp) { + throw new TypeError("First argument to String.prototype." + func + " must not be a regular expression"); + } +}; +$jscomp.string.fromCodePoint = function(codepoints) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 0;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 0] = arguments[$jscomp$restIndex]; + } + for (var result = "", $jscomp$iter$9 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$code = $jscomp$iter$9.next();!$jscomp$key$code.done;$jscomp$key$code = $jscomp$iter$9.next()) { + var code = $jscomp$key$code.value, code = +code; + if (0 > code || 1114111 < code || code !== Math.floor(code)) { + throw new RangeError("invalid_code_point " + code); + } + 65535 >= code ? result += String.fromCharCode(code) : (code -= 65536, result += String.fromCharCode(code >>> 10 & 1023 | 55296), result += String.fromCharCode(code & 1023 | 56320)); + } + return result; +}; +$jscomp.string.repeat = function(copies) { + $jscomp.string.noNullOrUndefined_(this, "repeat"); + var string = String(this); + if (0 > copies || 1342177279 < copies) { + throw new RangeError("Invalid count value"); + } + copies |= 0; + for (var result = "";copies;) { + if (copies & 1 && (result += string), copies >>>= 1) { + string += string; + } + } + return result; +}; +$jscomp.string.repeat$install = function() { + String.prototype.repeat || (String.prototype.repeat = $jscomp.string.repeat); +}; +$jscomp.string.codePointAt = function(position) { + $jscomp.string.noNullOrUndefined_(this, "codePointAt"); + var string = String(this), size = string.length; + position = Number(position) || 0; + if (0 <= position && position < size) { + position |= 0; + var first = string.charCodeAt(position); + if (55296 > first || 56319 < first || position + 1 === size) { + return first; + } + var second = string.charCodeAt(position + 1); + return 56320 > second || 57343 < second ? first : 1024 * (first - 55296) + second + 9216; + } +}; +$jscomp.string.codePointAt$install = function() { + String.prototype.codePointAt || (String.prototype.codePointAt = $jscomp.string.codePointAt); +}; +$jscomp.string.includes = function(searchString, opt_position) { + opt_position = void 0 === opt_position ? 0 : opt_position; + $jscomp.string.noRegExp_(searchString, "includes"); + $jscomp.string.noNullOrUndefined_(this, "includes"); + return -1 !== String(this).indexOf(searchString, opt_position); +}; +$jscomp.string.includes$install = function() { + String.prototype.includes || (String.prototype.includes = $jscomp.string.includes); +}; +$jscomp.string.startsWith = function(searchString, opt_position) { + opt_position = void 0 === opt_position ? 0 : opt_position; + $jscomp.string.noRegExp_(searchString, "startsWith"); + $jscomp.string.noNullOrUndefined_(this, "startsWith"); + var string = String(this); + searchString += ""; + for (var strLen = string.length, searchLen = searchString.length, i = Math.max(0, Math.min(opt_position | 0, string.length)), j = 0;j < searchLen && i < strLen;) { + if (string[i++] != searchString[j++]) { + return !1; + } + } + return j >= searchLen; +}; +$jscomp.string.startsWith$install = function() { + String.prototype.startsWith || (String.prototype.startsWith = $jscomp.string.startsWith); +}; +$jscomp.string.endsWith = function(searchString, opt_position) { + $jscomp.string.noRegExp_(searchString, "endsWith"); + $jscomp.string.noNullOrUndefined_(this, "endsWith"); + var string = String(this); + searchString += ""; + void 0 === opt_position && (opt_position = string.length); + for (var i = Math.max(0, Math.min(opt_position | 0, string.length)), j = searchString.length;0 < j && 0 < i;) { + if (string[--i] != searchString[--j]) { + return !1; + } + } + return 0 >= j; +}; +$jscomp.string.endsWith$install = function() { + String.prototype.endsWith || (String.prototype.endsWith = $jscomp.string.endsWith); +}; +$jscomp.array.entries$install(); +$jscomp.string.repeat$install(); +var goog = goog || {}; +goog.global = this; +goog.isDef = function(val) { + return void 0 !== val; +}; +goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) { + var parts = name.split("."), cur = opt_objectToExportTo || goog.global; + parts[0] in cur || !cur.execScript || cur.execScript("var " + parts[0]); + for (var part;parts.length && (part = parts.shift());) { + !parts.length && goog.isDef(opt_object) ? cur[part] = opt_object : cur = cur[part] ? cur[part] : cur[part] = {}; + } +}; +goog.define = function(name, defaultValue) { + goog.exportPath_(name, defaultValue); +}; +goog.DEBUG = !0; +goog.LOCALE = "en"; +goog.TRUSTED_SITE = !0; +goog.STRICT_MODE_COMPATIBLE = !1; +goog.DISALLOW_TEST_ONLY_CODE = !goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1; +goog.provide = function(name) { + if (goog.isInModuleLoader_()) { + throw Error("goog.provide can not be used within a goog.module."); + } + goog.constructNamespace_(name); +}; +goog.constructNamespace_ = function(name, opt_obj) { + goog.exportPath_(name, opt_obj); +}; +goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module = function(name) { + if (!goog.isString(name) || !name || -1 == name.search(goog.VALID_MODULE_RE_)) { + throw Error("Invalid module identifier"); + } + if (!goog.isInModuleLoader_()) { + throw Error("Module " + name + " has been loaded incorrectly."); + } + if (goog.moduleLoaderState_.moduleName) { + throw Error("goog.module may only be called once per module."); + } + goog.moduleLoaderState_.moduleName = name; +}; +goog.module.get = function() { +}; +goog.module.getInternal_ = function() { +}; +goog.moduleLoaderState_ = null; +goog.isInModuleLoader_ = function() { + return null != goog.moduleLoaderState_; +}; +goog.module.declareLegacyNamespace = function() { + goog.moduleLoaderState_.declareLegacyNamespace = !0; +}; +goog.setTestOnly = function(opt_message) { + if (goog.DISALLOW_TEST_ONLY_CODE) { + throw opt_message = opt_message || "", Error("Importing test-only code into non-debug environment" + (opt_message ? ": " + opt_message : ".")); + } +}; +goog.forwardDeclare = function() { +}; +goog.getObjectByName = function(name, opt_obj) { + for (var parts = name.split("."), cur = opt_obj || goog.global, part;part = parts.shift();) { + if (goog.isDefAndNotNull(cur[part])) { + cur = cur[part]; + } else { + return null; + } + } + return cur; +}; +goog.globalize = function(obj, opt_global) { + var global = opt_global || goog.global, x; + for (x in obj) { + global[x] = obj[x]; + } +}; +goog.addDependency = function(relPath, provides, requires, opt_loadFlags) { + if (goog.DEPENDENCIES_ENABLED) { + var provide, require, path = relPath.replace(/\\/g, "/"), deps = goog.dependencies_; + opt_loadFlags && "boolean" !== typeof opt_loadFlags || (opt_loadFlags = opt_loadFlags ? {module:"goog"} : {}); + for (var i = 0;provide = provides[i];i++) { + deps.nameToPath[provide] = path, deps.loadFlags[path] = opt_loadFlags; + } + for (var j = 0;require = requires[j];j++) { + path in deps.requires || (deps.requires[path] = {}), deps.requires[path][require] = !0; + } + } +}; +goog.useStrictRequires = !1; +goog.ENABLE_DEBUG_LOADER = !0; +goog.logToConsole_ = function(msg) { + goog.global.console && goog.global.console.error(msg); +}; +goog.require = function() { +}; +goog.basePath = ""; +goog.nullFunction = function() { +}; +goog.abstractMethod = function() { + throw Error("unimplemented abstract method"); +}; +goog.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor); + return ctor.instance_ = new ctor; + }; +}; +goog.instantiatedSingletons_ = []; +goog.LOAD_MODULE_USING_EVAL = !0; +goog.SEAL_MODULE_EXPORTS = goog.DEBUG; +goog.loadedModules_ = {}; +goog.DEPENDENCIES_ENABLED = !1; +goog.ALWAYS_TRANSPILE = !1; +goog.NEVER_TRANSPILE = !1; +goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {loadFlags:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() { + var doc = goog.global.document; + return null != doc && "write" in doc; +}, goog.findBasePath_ = function() { + if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + } else { + if (goog.inHtmlDocument_()) { + for (var scripts = goog.global.document.getElementsByTagName("SCRIPT"), i = scripts.length - 1;0 <= i;--i) { + var src = scripts[i].src, qmark = src.lastIndexOf("?"), l = -1 == qmark ? src.length : qmark; + if ("base.js" == src.substr(l - 7, 7)) { + goog.basePath = src.substr(0, l - 7); + break; + } + } + } + } +}, goog.importScript_ = function(src, opt_sourceText) { + (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(src, opt_sourceText) && (goog.dependencies_.written[src] = !0); +}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importProcessedScript_ = function(src, isModule, needsTranspile) { + goog.importScript_("", 'goog.retrieveAndExec_("' + src + '", ' + isModule + ", " + needsTranspile + ");"); +}, goog.queuedModules_ = [], goog.wrapModule_ = function(srcUrl, scriptText) { + return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(scriptText + "\n//# sourceURL=" + srcUrl + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + scriptText + "\n;return exports});\n//# sourceURL=" + srcUrl + "\n"; +}, goog.loadQueuedModules_ = function() { + var count = goog.queuedModules_.length; + if (0 < count) { + var queue = goog.queuedModules_; + goog.queuedModules_ = []; + for (var i = 0;i < count;i++) { + goog.maybeProcessDeferredPath_(queue[i]); + } + } +}, goog.maybeProcessDeferredDep_ = function(name) { + goog.isDeferredModule_(name) && goog.allDepsAreAvailable_(name) && goog.maybeProcessDeferredPath_(goog.basePath + goog.getPathFromDeps_(name)); +}, goog.isDeferredModule_ = function(name) { + var path = goog.getPathFromDeps_(name), loadFlags = path && goog.dependencies_.loadFlags[path] || {}; + return path && ("goog" == loadFlags.module || goog.needsTranspile_(loadFlags.lang)) ? goog.basePath + path in goog.dependencies_.deferred : !1; +}, goog.allDepsAreAvailable_ = function(name) { + var path = goog.getPathFromDeps_(name); + if (path && path in goog.dependencies_.requires) { + for (var requireName in goog.dependencies_.requires[path]) { + if (!goog.isProvided_(requireName) && !goog.isDeferredModule_(requireName)) { + return !1; + } + } + } + return !0; +}, goog.maybeProcessDeferredPath_ = function(abspath) { + if (abspath in goog.dependencies_.deferred) { + var src = goog.dependencies_.deferred[abspath]; + delete goog.dependencies_.deferred[abspath]; + goog.globalEval(src); + } +}, goog.loadModuleFromUrl = function() { +}, goog.loadModule = function(moduleDef) { + var previousState = goog.moduleLoaderState_; + try { + goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1}; + var exports; + if (goog.isFunction(moduleDef)) { + exports = moduleDef.call(goog.global, {}); + } else { + if (goog.isString(moduleDef)) { + exports = goog.loadModuleFromSource_.call(goog.global, moduleDef); + } else { + throw Error("Invalid module definition"); + } + } + var moduleName = goog.moduleLoaderState_.moduleName; + if (!goog.isString(moduleName) || !moduleName) { + throw Error('Invalid module name "' + moduleName + '"'); + } + goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(exports); + goog.loadedModules_[moduleName] = exports; + } finally { + goog.moduleLoaderState_ = previousState; + } +}, goog.loadModuleFromSource_ = function(JSCompiler_OptimizeArgumentsArray_p0) { + eval(JSCompiler_OptimizeArgumentsArray_p0); + return {}; +}, goog.writeScriptSrcNode_ = function(src) { + goog.global.document.write(' + BeyondCorp Options + + + + + +
Options Saved.
+ +
+
+ +
+

+ Options +

+

+ Changes will automatically be saved. +

+
+ +
+

China Connectivity

+ + +

+ Check this box to reveal the On: China option in the BeyondCorp + extension menu. This setting allows Googlers based in or traveling to + China to access websites outside of China. This does not apply to Hong Kong or + Taiwan. Please note that the connection will only work on the + + corp network (e.g., Google-A, Google, Wired) or on + + OpenVPN. +

+
+ +
+

Add Additional PAC URL Query Parameters

+ +
+ + +

+ Press enter, or leave the text box to save.
+ As an example: foo=1&bar=2 would append the extra + query parameters to the proxyconfig url (note some options are + always prepended, and can't be overridden here). +

+
+ +
+
+ + +
+
+

+ About this extension. +

+

+ This extension enables consistent access to corp/prod URLs (even when on public + networks). It is designed to be on at all times. In certain cases, you will need to + temporarily turn the extension off by clicking the extension's icon and choosing + a different connection setting from the dropdown menu. For examples of these situations, + please see below in the Connection Settings Scenarios + section of this page. +

+
+
+ +
+

+ Connection Settings Scenarios +

+

+ This extension operates by setting your browser proxy settings. + The following are situations where you may need to change the connection settings: +

+ +
+ +
+

+ Accessing a home router, printer, modem (private RFC1918 or RFC6598 IP address) +

+
+

+ Click the extension icon and choose "Off: Direct" to + access the non-corp private IP. When you are done, switch back to "On". +

+
+
+
+ +
+ +
+

+ Using different proxy settings +

+
+

+ If you need to use alternative proxy settings (either manually changing or via + another extension), choose "Off: System/Alternate Proxy". + When you are done, switch back to "On". Alternatively, + you can use an incognito window, a different Chrome profile, or another browser. +

+
+
+
+ +

+ For additional help, please visit + + go/beyondcorp-extension-help. +

+
+ +
+

+ Reporting Bugs +

+
+ To open a bug report, please visit + + go/beyondcorp-extension-bug and attach all required items to the bug report: +
    +
  1. + the extension log (bcx.log) + +
  2. +
  3. chrome://net-internals dump
  4. +
+
+
+
+ +
+

+ How do I gather a chrome://net-internals dump? +

+
+
    +
  1. + Navigate to + chrome://net-internals and leave the tab open in a new tab. +
  2. +
  3. + On a separate tab, reproduce the issue (e.g., attempt to visit the site that + is failing, or take the action that was causing issue). +
  4. +
  5. + On the chrome://net-internals tab, click "Save to file". +
  6. +
+
+
+
+
+ +
+ +
+
+ + + diff --git a/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/options_compiled.js b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/options_compiled.js new file mode 100644 index 000000000000..06d990e9d19d --- /dev/null +++ b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/options_compiled.js @@ -0,0 +1,10299 @@ +'use strict';var $jscomp = {scope:{}, getGlobal:function(maybeGlobal) { + return "undefined" != typeof window && window === maybeGlobal ? maybeGlobal : "undefined" != typeof global ? global : maybeGlobal; +}}; +$jscomp.global = $jscomp.getGlobal(this); +$jscomp.initSymbol = function() { + $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); + $jscomp.initSymbol = function() { + }; +}; +$jscomp.symbolCounter_ = 0; +$jscomp.Symbol = function(description) { + return "jscomp_symbol_" + description + $jscomp.symbolCounter_++; +}; +$jscomp.initSymbolIterator = function() { + $jscomp.initSymbol(); + $jscomp.global.Symbol.iterator || ($jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); + $jscomp.initSymbolIterator = function() { + }; +}; +$jscomp.makeIterator = function(iterable) { + $jscomp.initSymbolIterator(); + if (iterable[$jscomp.global.Symbol.iterator]) { + return iterable[$jscomp.global.Symbol.iterator](); + } + var index = 0; + return {next:function() { + return index == iterable.length ? {done:!0} : {done:!1, value:iterable[index++]}; + }}; +}; +$jscomp.arrayFromIterator = function(iterator) { + for (var i, arr = [];!(i = iterator.next()).done;) { + arr.push(i.value); + } + return arr; +}; +$jscomp.arrayFromIterable = function(iterable) { + return iterable instanceof Array ? iterable : $jscomp.arrayFromIterator($jscomp.makeIterator(iterable)); +}; +$jscomp.inherits = function(childCtor, parentCtor) { + function tempCtor() { + } + tempCtor.prototype = parentCtor.prototype; + childCtor.prototype = new tempCtor; + childCtor.prototype.constructor = childCtor; + for (var p in parentCtor) { + if ($jscomp.global.Object.defineProperties) { + var descriptor = $jscomp.global.Object.getOwnPropertyDescriptor(parentCtor, p); + descriptor && $jscomp.global.Object.defineProperty(childCtor, p, descriptor); + } else { + childCtor[p] = parentCtor[p]; + } + } +}; +$jscomp.array = $jscomp.array || {}; +$jscomp.array.done_ = function() { + return {done:!0, value:void 0}; +}; +$jscomp.array.arrayIterator_ = function(array, func) { + array instanceof String && (array = String(array)); + var i = 0; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + var $jscomp$compprop0 = {}, iter = ($jscomp$compprop0.next = function() { + if (i < array.length) { + var index = i++; + return {value:func(index, array[index]), done:!1}; + } + iter.next = $jscomp.array.done_; + return {done:!0, value:void 0}; + }, $jscomp$compprop0[Symbol.iterator] = function() { + return iter; + }, $jscomp$compprop0); + return iter; +}; +$jscomp.array.findInternal_ = function(array, callback, thisArg) { + array instanceof String && (array = String(array)); + for (var len = array.length, i = 0;i < len;i++) { + var value = array[i]; + if (callback.call(thisArg, value, i, array)) { + return {i:i, v:value}; + } + } + return {i:-1, v:void 0}; +}; +$jscomp.array.from = function(arrayLike, opt_mapFn, opt_thisArg) { + opt_mapFn = void 0 === opt_mapFn ? function(x) { + return x; + } : opt_mapFn; + var result = []; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + if (arrayLike[Symbol.iterator]) { + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + for (var iter = arrayLike[Symbol.iterator](), next;!(next = iter.next()).done;) { + result.push(opt_mapFn.call(opt_thisArg, next.value)); + } + } else { + for (var len = arrayLike.length, i = 0;i < len;i++) { + result.push(opt_mapFn.call(opt_thisArg, arrayLike[i])); + } + } + return result; +}; +$jscomp.array.of = function(elements) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 0;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 0] = arguments[$jscomp$restIndex]; + } + return $jscomp.array.from($jscomp$restParams); +}; +$jscomp.array.entries = function() { + return $jscomp.array.arrayIterator_(this, function(i, v) { + return [i, v]; + }); +}; +$jscomp.array.installHelper_ = function(method, fn) { + !Array.prototype[method] && Object.defineProperties && Object.defineProperty && Object.defineProperty(Array.prototype, method, {configurable:!0, enumerable:!1, writable:!0, value:fn}); +}; +$jscomp.array.entries$install = function() { + $jscomp.array.installHelper_("entries", $jscomp.array.entries); +}; +$jscomp.array.keys = function() { + return $jscomp.array.arrayIterator_(this, function(i) { + return i; + }); +}; +$jscomp.array.keys$install = function() { + $jscomp.array.installHelper_("keys", $jscomp.array.keys); +}; +$jscomp.array.values = function() { + return $jscomp.array.arrayIterator_(this, function(_, v) { + return v; + }); +}; +$jscomp.array.values$install = function() { + $jscomp.array.installHelper_("values", $jscomp.array.values); +}; +$jscomp.array.copyWithin = function(target, start, opt_end) { + var len = this.length; + target = Number(target); + start = Number(start); + opt_end = Number(null != opt_end ? opt_end : len); + if (target < start) { + for (opt_end = Math.min(opt_end, len);start < opt_end;) { + start in this ? this[target++] = this[start++] : (delete this[target++], start++); + } + } else { + for (opt_end = Math.min(opt_end, len + start - target), target += opt_end - start;opt_end > start;) { + --opt_end in this ? this[--target] = this[opt_end] : delete this[target]; + } + } + return this; +}; +$jscomp.array.copyWithin$install = function() { + $jscomp.array.installHelper_("copyWithin", $jscomp.array.copyWithin); +}; +$jscomp.array.fill = function(value, opt_start, opt_end) { + null != opt_end && value.length || (opt_end = this.length || 0); + opt_end = Number(opt_end); + for (var i = Number((void 0 === opt_start ? 0 : opt_start) || 0);i < opt_end;i++) { + this[i] = value; + } + return this; +}; +$jscomp.array.fill$install = function() { + $jscomp.array.installHelper_("fill", $jscomp.array.fill); +}; +$jscomp.array.find = function(callback, opt_thisArg) { + return $jscomp.array.findInternal_(this, callback, opt_thisArg).v; +}; +$jscomp.array.find$install = function() { + $jscomp.array.installHelper_("find", $jscomp.array.find); +}; +$jscomp.array.findIndex = function(callback, opt_thisArg) { + return $jscomp.array.findInternal_(this, callback, opt_thisArg).i; +}; +$jscomp.array.findIndex$install = function() { + $jscomp.array.installHelper_("findIndex", $jscomp.array.findIndex); +}; +$jscomp.Map = function(opt_iterable) { + opt_iterable = void 0 === opt_iterable ? [] : opt_iterable; + this.data_ = {}; + this.head_ = $jscomp.Map.createHead_(); + this.size = 0; + if (opt_iterable) { + for (var $jscomp$iter$1 = $jscomp.makeIterator(opt_iterable), $jscomp$key$item = $jscomp$iter$1.next();!$jscomp$key$item.done;$jscomp$key$item = $jscomp$iter$1.next()) { + var item = $jscomp$key$item.value; + this.set(item[0], item[1]); + } + } +}; +$jscomp.Map.checkBrowserConformance_ = function() { + var Map = $jscomp.global.Map; + if (!Map || !Map.prototype.entries || !Object.seal) { + return !1; + } + try { + var key = Object.seal({x:4}), map = new Map($jscomp.makeIterator([[key, "s"]])); + if ("s" != map.get(key) || 1 != map.size || map.get({x:4}) || map.set({x:4}, "t") != map || 2 != map.size) { + return !1; + } + var iter = map.entries(), item = iter.next(); + if (item.done || item.value[0] != key || "s" != item.value[1]) { + return !1; + } + item = iter.next(); + return item.done || 4 != item.value[0].x || "t" != item.value[1] || !iter.next().done ? !1 : !0; + } catch (err) { + return !1; + } +}; +$jscomp.Map.createHead_ = function() { + var head = {}; + return head.previous = head.next = head.head = head; +}; +$jscomp.Map.getId_ = function(obj) { + if (!(obj instanceof Object)) { + return String(obj); + } + $jscomp.Map.key_ in obj || obj instanceof Object && Object.isExtensible && Object.isExtensible(obj) && $jscomp.Map.defineProperty_(obj, $jscomp.Map.key_, ++$jscomp.Map.index_); + return $jscomp.Map.key_ in obj ? obj[$jscomp.Map.key_] : " " + obj; +}; +$jscomp.Map.prototype.set = function(key, value) { + var $jscomp$destructuring$var0 = this.maybeGetEntry_(key), id = $jscomp$destructuring$var0.id, list = $jscomp$destructuring$var0.list, entry = $jscomp$destructuring$var0.entry; + list || (list = this.data_[id] = []); + entry ? entry.value = value : (entry = {next:this.head_, previous:this.head_.previous, head:this.head_, key:key, value:value}, list.push(entry), this.head_.previous.next = entry, this.head_.previous = entry, this.size++); + return this; +}; +$jscomp.Map.prototype.clear = function() { + this.data_ = {}; + this.head_ = this.head_.previous = $jscomp.Map.createHead_(); + this.size = 0; +}; +$jscomp.Map.prototype.has = function(key) { + return !!this.maybeGetEntry_(key).entry; +}; +$jscomp.Map.prototype.get = function(key) { + var entry = this.maybeGetEntry_(key).entry; + return entry && entry.value; +}; +$jscomp.Map.prototype.maybeGetEntry_ = function(key) { + var id = $jscomp.Map.getId_(key), list = this.data_[id]; + if (list) { + for (var index = 0;index < list.length;index++) { + var entry = list[index]; + if (key !== key && entry.key !== entry.key || key === entry.key) { + return {id:id, list:list, index:index, entry:entry}; + } + } + } + return {id:id, list:list, index:-1, entry:void 0}; +}; +$jscomp.Map.prototype.entries = function() { + return this.iter_(function(entry) { + return [entry.key, entry.value]; + }); +}; +$jscomp.Map.prototype.keys = function() { + return this.iter_(function(entry) { + return entry.key; + }); +}; +$jscomp.Map.prototype.values = function() { + return this.iter_(function(entry) { + return entry.value; + }); +}; +$jscomp.Map.prototype.forEach = function(callback, opt_thisArg) { + for (var $jscomp$iter$2 = $jscomp.makeIterator(this.entries()), $jscomp$key$entry = $jscomp$iter$2.next();!$jscomp$key$entry.done;$jscomp$key$entry = $jscomp$iter$2.next()) { + var entry = $jscomp$key$entry.value; + callback.call(opt_thisArg, entry[1], entry[0], this); + } +}; +$jscomp.Map.prototype.iter_ = function(func) { + var map = this, entry = this.head_; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + var $jscomp$compprop3 = {}; + return $jscomp$compprop3.next = function() { + if (entry) { + for (;entry.head != map.head_;) { + entry = entry.previous; + } + for (;entry.next != entry.head;) { + return entry = entry.next, {done:!1, value:func(entry)}; + } + entry = null; + } + return {done:!0, value:void 0}; + }, $jscomp$compprop3[Symbol.iterator] = function() { + return this; + }, $jscomp$compprop3; +}; +$jscomp.Map.index_ = 0; +$jscomp.Map.defineProperty_ = Object.defineProperty ? function(obj, key, value) { + Object.defineProperty(obj, key, {value:String(value)}); +} : function(obj, key, value) { + obj[key] = String(value); +}; +$jscomp.Map.Entry_ = function() { +}; +$jscomp.Map.ASSUME_NO_NATIVE = !1; +$jscomp.Map$install = function() { + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + !$jscomp.Map.ASSUME_NO_NATIVE && $jscomp.Map.checkBrowserConformance_() ? $jscomp.Map = $jscomp.global.Map : ($jscomp.initSymbol(), $jscomp.initSymbolIterator(), $jscomp.Map.prototype[Symbol.iterator] = $jscomp.Map.prototype.entries, $jscomp.initSymbol(), $jscomp.Map.key_ = Symbol("map-id-key")); + $jscomp.Map$install = function() { + }; +}; +$jscomp.math = $jscomp.math || {}; +$jscomp.math.clz32 = function(x) { + x = Number(x) >>> 0; + if (0 === x) { + return 32; + } + var result = 0; + 0 === (x & 4294901760) && (x <<= 16, result += 16); + 0 === (x & 4278190080) && (x <<= 8, result += 8); + 0 === (x & 4026531840) && (x <<= 4, result += 4); + 0 === (x & 3221225472) && (x <<= 2, result += 2); + 0 === (x & 2147483648) && result++; + return result; +}; +$jscomp.math.imul = function(a, b) { + a = Number(a); + b = Number(b); + var al = a & 65535, bl = b & 65535; + return al * bl + ((a >>> 16 & 65535) * bl + al * (b >>> 16 & 65535) << 16 >>> 0) | 0; +}; +$jscomp.math.sign = function(x) { + x = Number(x); + return 0 === x || isNaN(x) ? x : 0 < x ? 1 : -1; +}; +$jscomp.math.log10 = function(x) { + return Math.log(x) / Math.LN10; +}; +$jscomp.math.log2 = function(x) { + return Math.log(x) / Math.LN2; +}; +$jscomp.math.log1p = function(x) { + x = Number(x); + if (.25 > x && -.25 < x) { + for (var y = x, d = 1, z = x, zPrev = 0, s = 1;zPrev != z;) { + y *= x, s *= -1, z = (zPrev = z) + s * y / ++d; + } + return z; + } + return Math.log(1 + x); +}; +$jscomp.math.expm1 = function(x) { + x = Number(x); + if (.25 > x && -.25 < x) { + for (var y = x, d = 1, z = x, zPrev = 0;zPrev != z;) { + y *= x / ++d, z = (zPrev = z) + y; + } + return z; + } + return Math.exp(x) - 1; +}; +$jscomp.math.cosh = function(x) { + x = Number(x); + return (Math.exp(x) + Math.exp(-x)) / 2; +}; +$jscomp.math.sinh = function(x) { + x = Number(x); + return 0 === x ? x : (Math.exp(x) - Math.exp(-x)) / 2; +}; +$jscomp.math.tanh = function(x) { + x = Number(x); + if (0 === x) { + return x; + } + var y = Math.exp(2 * -Math.abs(x)), z = (1 - y) / (1 + y); + return 0 > x ? -z : z; +}; +$jscomp.math.acosh = function(x) { + x = Number(x); + return Math.log(x + Math.sqrt(x * x - 1)); +}; +$jscomp.math.asinh = function(x) { + x = Number(x); + if (0 === x) { + return x; + } + var y = Math.log(Math.abs(x) + Math.sqrt(x * x + 1)); + return 0 > x ? -y : y; +}; +$jscomp.math.atanh = function(x) { + x = Number(x); + return ($jscomp.math.log1p(x) - $jscomp.math.log1p(-x)) / 2; +}; +$jscomp.math.hypot = function(x, y, rest) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 2;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 2] = arguments[$jscomp$restIndex]; + } + x = Number(x); + y = Number(y); + for (var max = Math.max(Math.abs(x), Math.abs(y)), $jscomp$iter$4 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$4.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$4.next()) { + max = Math.max(max, Math.abs($jscomp$key$z.value)); + } + if (1E100 < max || 1E-100 > max) { + x /= max; + y /= max; + for (var sum = x * x + y * y, $jscomp$iter$5 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$5.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$5.next()) { + var z$12 = $jscomp$key$z.value, z$12 = Number(z$12) / max, sum = sum + z$12 * z$12 + } + return Math.sqrt(sum) * max; + } + for (var sum$13 = x * x + y * y, $jscomp$iter$6 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$6.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$6.next()) { + var z$14 = $jscomp$key$z.value, z$14 = Number(z$14), sum$13 = sum$13 + z$14 * z$14 + } + return Math.sqrt(sum$13); +}; +$jscomp.math.trunc = function(x) { + x = Number(x); + if (isNaN(x) || Infinity === x || -Infinity === x || 0 === x) { + return x; + } + var y = Math.floor(Math.abs(x)); + return 0 > x ? -y : y; +}; +$jscomp.math.cbrt = function(x) { + if (0 === x) { + return x; + } + x = Number(x); + var y = Math.pow(Math.abs(x), 1 / 3); + return 0 > x ? -y : y; +}; +$jscomp.number = $jscomp.number || {}; +$jscomp.number.isFinite = function(x) { + return "number" !== typeof x ? !1 : !isNaN(x) && Infinity !== x && -Infinity !== x; +}; +$jscomp.number.isInteger = function(x) { + return $jscomp.number.isFinite(x) ? x === Math.floor(x) : !1; +}; +$jscomp.number.isNaN = function(x) { + return "number" === typeof x && isNaN(x); +}; +$jscomp.number.isSafeInteger = function(x) { + return $jscomp.number.isInteger(x) && Math.abs(x) <= $jscomp.number.MAX_SAFE_INTEGER; +}; +$jscomp.number.EPSILON = Math.pow(2, -52); +$jscomp.number.MAX_SAFE_INTEGER = 9007199254740991; +$jscomp.number.MIN_SAFE_INTEGER = -9007199254740991; +$jscomp.object = $jscomp.object || {}; +$jscomp.object.assign = function(target, sources) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 1;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 1] = arguments[$jscomp$restIndex]; + } + for (var $jscomp$iter$7 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$source = $jscomp$iter$7.next();!$jscomp$key$source.done;$jscomp$key$source = $jscomp$iter$7.next()) { + var source = $jscomp$key$source.value; + if (source) { + for (var key in source) { + Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); + } + } + } + return target; +}; +$jscomp.object.is = function(left, right) { + return left === right ? 0 !== left || 1 / left === 1 / right : left !== left && right !== right; +}; +$jscomp.Set = function(opt_iterable) { + opt_iterable = void 0 === opt_iterable ? [] : opt_iterable; + this.map_ = new $jscomp.Map; + if (opt_iterable) { + for (var $jscomp$iter$8 = $jscomp.makeIterator(opt_iterable), $jscomp$key$item = $jscomp$iter$8.next();!$jscomp$key$item.done;$jscomp$key$item = $jscomp$iter$8.next()) { + this.add($jscomp$key$item.value); + } + } + this.size = this.map_.size; +}; +$jscomp.Set.checkBrowserConformance_ = function() { + var Set = $jscomp.global.Set; + if (!Set || !Set.prototype.entries || !Object.seal) { + return !1; + } + var value = Object.seal({x:4}), set = new Set($jscomp.makeIterator([value])); + if (set.has(value) || 1 != set.size || set.add(value) != set || 1 != set.size || set.add({x:4}) != set || 2 != set.size) { + return !1; + } + var iter = set.entries(), item = iter.next(); + if (item.done || item.value[0] != value || item.value[1] != value) { + return !1; + } + item = iter.next(); + return item.done || item.value[0] == value || 4 != item.value[0].x || item.value[1] != item.value[0] ? !1 : iter.next().done; +}; +$jscomp.Set.prototype.add = function(value) { + this.map_.set(value, value); + this.size = this.map_.size; + return this; +}; +$jscomp.Set.prototype.clear = function() { + this.map_.clear(); + this.size = 0; +}; +$jscomp.Set.prototype.has = function(value) { + return this.map_.has(value); +}; +$jscomp.Set.prototype.entries = function() { + return this.map_.entries(); +}; +$jscomp.Set.prototype.values = function() { + return this.map_.values(); +}; +$jscomp.Set.prototype.forEach = function(callback, opt_thisArg) { + var $jscomp$this = this; + this.map_.forEach(function(value) { + return callback.call(opt_thisArg, value, value, $jscomp$this); + }); +}; +$jscomp.Set.ASSUME_NO_NATIVE = !1; +$jscomp.Set$install = function() { + !$jscomp.Set.ASSUME_NO_NATIVE && $jscomp.Set.checkBrowserConformance_() ? $jscomp.Set = $jscomp.global.Set : ($jscomp.Map$install(), $jscomp.initSymbol(), $jscomp.initSymbolIterator(), $jscomp.Set.prototype[Symbol.iterator] = $jscomp.Set.prototype.values); + $jscomp.Set$install = function() { + }; +}; +$jscomp.string = $jscomp.string || {}; +$jscomp.string.noNullOrUndefined_ = function(str, func) { + if (null == str) { + throw new TypeError("The 'this' value for String.prototype." + func + " must not be null or undefined"); + } +}; +$jscomp.string.noRegExp_ = function(str, func) { + if (str instanceof RegExp) { + throw new TypeError("First argument to String.prototype." + func + " must not be a regular expression"); + } +}; +$jscomp.string.fromCodePoint = function(codepoints) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 0;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 0] = arguments[$jscomp$restIndex]; + } + for (var result = "", $jscomp$iter$9 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$code = $jscomp$iter$9.next();!$jscomp$key$code.done;$jscomp$key$code = $jscomp$iter$9.next()) { + var code = $jscomp$key$code.value, code = +code; + if (0 > code || 1114111 < code || code !== Math.floor(code)) { + throw new RangeError("invalid_code_point " + code); + } + 65535 >= code ? result += String.fromCharCode(code) : (code -= 65536, result += String.fromCharCode(code >>> 10 & 1023 | 55296), result += String.fromCharCode(code & 1023 | 56320)); + } + return result; +}; +$jscomp.string.repeat = function(copies) { + $jscomp.string.noNullOrUndefined_(this, "repeat"); + var string = String(this); + if (0 > copies || 1342177279 < copies) { + throw new RangeError("Invalid count value"); + } + copies |= 0; + for (var result = "";copies;) { + if (copies & 1 && (result += string), copies >>>= 1) { + string += string; + } + } + return result; +}; +$jscomp.string.repeat$install = function() { + String.prototype.repeat || (String.prototype.repeat = $jscomp.string.repeat); +}; +$jscomp.string.codePointAt = function(position) { + $jscomp.string.noNullOrUndefined_(this, "codePointAt"); + var string = String(this), size = string.length; + position = Number(position) || 0; + if (0 <= position && position < size) { + position |= 0; + var first = string.charCodeAt(position); + if (55296 > first || 56319 < first || position + 1 === size) { + return first; + } + var second = string.charCodeAt(position + 1); + return 56320 > second || 57343 < second ? first : 1024 * (first - 55296) + second + 9216; + } +}; +$jscomp.string.codePointAt$install = function() { + String.prototype.codePointAt || (String.prototype.codePointAt = $jscomp.string.codePointAt); +}; +$jscomp.string.includes = function(searchString, opt_position) { + opt_position = void 0 === opt_position ? 0 : opt_position; + $jscomp.string.noRegExp_(searchString, "includes"); + $jscomp.string.noNullOrUndefined_(this, "includes"); + return -1 !== String(this).indexOf(searchString, opt_position); +}; +$jscomp.string.includes$install = function() { + String.prototype.includes || (String.prototype.includes = $jscomp.string.includes); +}; +$jscomp.string.startsWith = function(searchString, opt_position) { + opt_position = void 0 === opt_position ? 0 : opt_position; + $jscomp.string.noRegExp_(searchString, "startsWith"); + $jscomp.string.noNullOrUndefined_(this, "startsWith"); + var string = String(this); + searchString += ""; + for (var strLen = string.length, searchLen = searchString.length, i = Math.max(0, Math.min(opt_position | 0, string.length)), j = 0;j < searchLen && i < strLen;) { + if (string[i++] != searchString[j++]) { + return !1; + } + } + return j >= searchLen; +}; +$jscomp.string.startsWith$install = function() { + String.prototype.startsWith || (String.prototype.startsWith = $jscomp.string.startsWith); +}; +$jscomp.string.endsWith = function(searchString, opt_position) { + $jscomp.string.noRegExp_(searchString, "endsWith"); + $jscomp.string.noNullOrUndefined_(this, "endsWith"); + var string = String(this); + searchString += ""; + void 0 === opt_position && (opt_position = string.length); + for (var i = Math.max(0, Math.min(opt_position | 0, string.length)), j = searchString.length;0 < j && 0 < i;) { + if (string[--i] != searchString[--j]) { + return !1; + } + } + return 0 >= j; +}; +$jscomp.string.endsWith$install = function() { + String.prototype.endsWith || (String.prototype.endsWith = $jscomp.string.endsWith); +}; +$jscomp.array.entries$install(); +$jscomp.string.repeat$install(); +var goog = goog || {}; +goog.global = this; +goog.isDef = function(val) { + return void 0 !== val; +}; +goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) { + var parts = name.split("."), cur = opt_objectToExportTo || goog.global; + parts[0] in cur || !cur.execScript || cur.execScript("var " + parts[0]); + for (var part;parts.length && (part = parts.shift());) { + !parts.length && goog.isDef(opt_object) ? cur[part] = opt_object : cur = cur[part] ? cur[part] : cur[part] = {}; + } +}; +goog.define = function(name, defaultValue) { + goog.exportPath_(name, defaultValue); +}; +goog.DEBUG = !0; +goog.LOCALE = "en"; +goog.TRUSTED_SITE = !0; +goog.STRICT_MODE_COMPATIBLE = !1; +goog.DISALLOW_TEST_ONLY_CODE = !goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1; +goog.provide = function(name) { + if (goog.isInModuleLoader_()) { + throw Error("goog.provide can not be used within a goog.module."); + } + goog.constructNamespace_(name); +}; +goog.constructNamespace_ = function(name, opt_obj) { + goog.exportPath_(name, opt_obj); +}; +goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module = function(name) { + if (!goog.isString(name) || !name || -1 == name.search(goog.VALID_MODULE_RE_)) { + throw Error("Invalid module identifier"); + } + if (!goog.isInModuleLoader_()) { + throw Error("Module " + name + " has been loaded incorrectly."); + } + if (goog.moduleLoaderState_.moduleName) { + throw Error("goog.module may only be called once per module."); + } + goog.moduleLoaderState_.moduleName = name; +}; +goog.module.get = function() { +}; +goog.module.getInternal_ = function() { +}; +goog.moduleLoaderState_ = null; +goog.isInModuleLoader_ = function() { + return null != goog.moduleLoaderState_; +}; +goog.module.declareLegacyNamespace = function() { + goog.moduleLoaderState_.declareLegacyNamespace = !0; +}; +goog.setTestOnly = function(opt_message) { + if (goog.DISALLOW_TEST_ONLY_CODE) { + throw opt_message = opt_message || "", Error("Importing test-only code into non-debug environment" + (opt_message ? ": " + opt_message : ".")); + } +}; +goog.forwardDeclare = function() { +}; +goog.getObjectByName = function(name, opt_obj) { + for (var parts = name.split("."), cur = opt_obj || goog.global, part;part = parts.shift();) { + if (goog.isDefAndNotNull(cur[part])) { + cur = cur[part]; + } else { + return null; + } + } + return cur; +}; +goog.globalize = function(obj, opt_global) { + var global = opt_global || goog.global, x; + for (x in obj) { + global[x] = obj[x]; + } +}; +goog.addDependency = function(relPath, provides, requires, opt_loadFlags) { + if (goog.DEPENDENCIES_ENABLED) { + var provide, require, path = relPath.replace(/\\/g, "/"), deps = goog.dependencies_; + opt_loadFlags && "boolean" !== typeof opt_loadFlags || (opt_loadFlags = opt_loadFlags ? {module:"goog"} : {}); + for (var i = 0;provide = provides[i];i++) { + deps.nameToPath[provide] = path, deps.loadFlags[path] = opt_loadFlags; + } + for (var j = 0;require = requires[j];j++) { + path in deps.requires || (deps.requires[path] = {}), deps.requires[path][require] = !0; + } + } +}; +goog.useStrictRequires = !1; +goog.ENABLE_DEBUG_LOADER = !0; +goog.logToConsole_ = function(msg) { + goog.global.console && goog.global.console.error(msg); +}; +goog.require = function() { +}; +goog.basePath = ""; +goog.nullFunction = function() { +}; +goog.abstractMethod = function() { + throw Error("unimplemented abstract method"); +}; +goog.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor); + return ctor.instance_ = new ctor; + }; +}; +goog.instantiatedSingletons_ = []; +goog.LOAD_MODULE_USING_EVAL = !0; +goog.SEAL_MODULE_EXPORTS = goog.DEBUG; +goog.loadedModules_ = {}; +goog.DEPENDENCIES_ENABLED = !1; +goog.ALWAYS_TRANSPILE = !1; +goog.NEVER_TRANSPILE = !1; +goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {loadFlags:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() { + var doc = goog.global.document; + return null != doc && "write" in doc; +}, goog.findBasePath_ = function() { + if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + } else { + if (goog.inHtmlDocument_()) { + for (var scripts = goog.global.document.getElementsByTagName("SCRIPT"), i = scripts.length - 1;0 <= i;--i) { + var src = scripts[i].src, qmark = src.lastIndexOf("?"), l = -1 == qmark ? src.length : qmark; + if ("base.js" == src.substr(l - 7, 7)) { + goog.basePath = src.substr(0, l - 7); + break; + } + } + } + } +}, goog.importScript_ = function(src, opt_sourceText) { + (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(src, opt_sourceText) && (goog.dependencies_.written[src] = !0); +}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importProcessedScript_ = function(src, isModule, needsTranspile) { + goog.importScript_("", 'goog.retrieveAndExec_("' + src + '", ' + isModule + ", " + needsTranspile + ");"); +}, goog.queuedModules_ = [], goog.wrapModule_ = function(srcUrl, scriptText) { + return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(scriptText + "\n//# sourceURL=" + srcUrl + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + scriptText + "\n;return exports});\n//# sourceURL=" + srcUrl + "\n"; +}, goog.loadQueuedModules_ = function() { + var count = goog.queuedModules_.length; + if (0 < count) { + var queue = goog.queuedModules_; + goog.queuedModules_ = []; + for (var i = 0;i < count;i++) { + goog.maybeProcessDeferredPath_(queue[i]); + } + } +}, goog.maybeProcessDeferredDep_ = function(name) { + goog.isDeferredModule_(name) && goog.allDepsAreAvailable_(name) && goog.maybeProcessDeferredPath_(goog.basePath + goog.getPathFromDeps_(name)); +}, goog.isDeferredModule_ = function(name) { + var path = goog.getPathFromDeps_(name), loadFlags = path && goog.dependencies_.loadFlags[path] || {}; + return path && ("goog" == loadFlags.module || goog.needsTranspile_(loadFlags.lang)) ? goog.basePath + path in goog.dependencies_.deferred : !1; +}, goog.allDepsAreAvailable_ = function(name) { + var path = goog.getPathFromDeps_(name); + if (path && path in goog.dependencies_.requires) { + for (var requireName in goog.dependencies_.requires[path]) { + if (!goog.isProvided_(requireName) && !goog.isDeferredModule_(requireName)) { + return !1; + } + } + } + return !0; +}, goog.maybeProcessDeferredPath_ = function(abspath) { + if (abspath in goog.dependencies_.deferred) { + var src = goog.dependencies_.deferred[abspath]; + delete goog.dependencies_.deferred[abspath]; + goog.globalEval(src); + } +}, goog.loadModuleFromUrl = function() { +}, goog.loadModule = function(moduleDef) { + var previousState = goog.moduleLoaderState_; + try { + goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1}; + var exports; + if (goog.isFunction(moduleDef)) { + exports = moduleDef.call(goog.global, {}); + } else { + if (goog.isString(moduleDef)) { + exports = goog.loadModuleFromSource_.call(goog.global, moduleDef); + } else { + throw Error("Invalid module definition"); + } + } + var moduleName = goog.moduleLoaderState_.moduleName; + if (!goog.isString(moduleName) || !moduleName) { + throw Error('Invalid module name "' + moduleName + '"'); + } + goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(exports); + goog.loadedModules_[moduleName] = exports; + } finally { + goog.moduleLoaderState_ = previousState; + } +}, goog.loadModuleFromSource_ = function(JSCompiler_OptimizeArgumentsArray_p0) { + eval(JSCompiler_OptimizeArgumentsArray_p0); + return {}; +}, goog.writeScriptSrcNode_ = function(src) { + goog.global.document.write(' + + + BeyondCorp + + + + + +

+ Connection Settings +

+ +
+
+ +
+ + + +
+ Sets the recommended proxy settings for your browser. Allows you to use shortened
+              URLs (e.g., go/) and securely access most Google corporate resources even when on
+              external/untrusted networks. + + Sets the recommended proxy settings for your browser. Allows you to use shortened + URLs (e.g., go/) and securely access most Google corporate resources even when on + external/untrusted networks. + +
+ RECOMMENDED +

+ Provides Google corporate connection settings (proxy). +

+
+ + +
+ + + +
+ Use this option if you're having problems accessing websites outside of China. You
+              must be on the corp network or on OpenVPN to use. + + Use this option if you're having problems accessing websites outside of China. You + must be on the corp network or on OpenVPN to use. + +
+

+ Provides access to websites outside of China. +

+
+ + +
+ + + +
+ Provides access to a proxy-switcher that allows Googlers
+              to proxy their browsing sessions through non-Google IPs in
+              arbitrary countries (e.g. for anti-cloaking/anti-abuse work). + + Provides access to a proxy-switcher that allows Googlers to proxy + their browsing sessions through non-Google IPs in arbitrary + countries (e.g. for anti-cloaking/anti-abuse work). You must have + permission from the FlooNet team and the Polyjuice Proxy Chrome + App installed for this to work correctly. + +
+

+ Uses the proxy provided by the Polyjuice Proxy Chrome App. +

+

+ Select a country: +

+ +
+ + +
+ + + +
+ + + Use for authenticating to public WiFi networks such as cafes/airports, configuring + local network devices like private routers, or accessing a network that blocks corp + resources (e.g. travelling in China). + +
+

+ Bypasses all connection settings (proxy). +

+
+ + +
+ + + +
+ Use when you need another extension or proxy file to control your connection settings. + + Use when you need another extension or proxy file to control your connection settings. + +
+

+ Respects your system or other extension connection settings (proxies). +

+
+ +
+
+ + + + diff --git a/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/popup_compiled.js b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/popup_compiled.js new file mode 100644 index 000000000000..58b2e634a33c --- /dev/null +++ b/test/.chrome/Default/Extensions/aihpiglmnhnhijdnjghpfnlledckkhja/4.6_0/popup_compiled.js @@ -0,0 +1,9704 @@ +'use strict';var $jscomp = {scope:{}, getGlobal:function(maybeGlobal) { + return "undefined" != typeof window && window === maybeGlobal ? maybeGlobal : "undefined" != typeof global ? global : maybeGlobal; +}}; +$jscomp.global = $jscomp.getGlobal(this); +$jscomp.initSymbol = function() { + $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); + $jscomp.initSymbol = function() { + }; +}; +$jscomp.symbolCounter_ = 0; +$jscomp.Symbol = function(description) { + return "jscomp_symbol_" + description + $jscomp.symbolCounter_++; +}; +$jscomp.initSymbolIterator = function() { + $jscomp.initSymbol(); + $jscomp.global.Symbol.iterator || ($jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); + $jscomp.initSymbolIterator = function() { + }; +}; +$jscomp.makeIterator = function(iterable) { + $jscomp.initSymbolIterator(); + if (iterable[$jscomp.global.Symbol.iterator]) { + return iterable[$jscomp.global.Symbol.iterator](); + } + var index = 0; + return {next:function() { + return index == iterable.length ? {done:!0} : {done:!1, value:iterable[index++]}; + }}; +}; +$jscomp.arrayFromIterator = function(iterator) { + for (var i, arr = [];!(i = iterator.next()).done;) { + arr.push(i.value); + } + return arr; +}; +$jscomp.arrayFromIterable = function(iterable) { + return iterable instanceof Array ? iterable : $jscomp.arrayFromIterator($jscomp.makeIterator(iterable)); +}; +$jscomp.inherits = function(childCtor, parentCtor) { + function tempCtor() { + } + tempCtor.prototype = parentCtor.prototype; + childCtor.prototype = new tempCtor; + childCtor.prototype.constructor = childCtor; + for (var p in parentCtor) { + if ($jscomp.global.Object.defineProperties) { + var descriptor = $jscomp.global.Object.getOwnPropertyDescriptor(parentCtor, p); + descriptor && $jscomp.global.Object.defineProperty(childCtor, p, descriptor); + } else { + childCtor[p] = parentCtor[p]; + } + } +}; +$jscomp.array = $jscomp.array || {}; +$jscomp.array.done_ = function() { + return {done:!0, value:void 0}; +}; +$jscomp.array.arrayIterator_ = function(array, func) { + array instanceof String && (array = String(array)); + var i = 0; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + var $jscomp$compprop0 = {}, iter = ($jscomp$compprop0.next = function() { + if (i < array.length) { + var index = i++; + return {value:func(index, array[index]), done:!1}; + } + iter.next = $jscomp.array.done_; + return {done:!0, value:void 0}; + }, $jscomp$compprop0[Symbol.iterator] = function() { + return iter; + }, $jscomp$compprop0); + return iter; +}; +$jscomp.array.findInternal_ = function(array, callback, thisArg) { + array instanceof String && (array = String(array)); + for (var len = array.length, i = 0;i < len;i++) { + var value = array[i]; + if (callback.call(thisArg, value, i, array)) { + return {i:i, v:value}; + } + } + return {i:-1, v:void 0}; +}; +$jscomp.array.from = function(arrayLike, opt_mapFn, opt_thisArg) { + opt_mapFn = void 0 === opt_mapFn ? function(x) { + return x; + } : opt_mapFn; + var result = []; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + if (arrayLike[Symbol.iterator]) { + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + for (var iter = arrayLike[Symbol.iterator](), next;!(next = iter.next()).done;) { + result.push(opt_mapFn.call(opt_thisArg, next.value)); + } + } else { + for (var len = arrayLike.length, i = 0;i < len;i++) { + result.push(opt_mapFn.call(opt_thisArg, arrayLike[i])); + } + } + return result; +}; +$jscomp.array.of = function(elements) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 0;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 0] = arguments[$jscomp$restIndex]; + } + return $jscomp.array.from($jscomp$restParams); +}; +$jscomp.array.entries = function() { + return $jscomp.array.arrayIterator_(this, function(i, v) { + return [i, v]; + }); +}; +$jscomp.array.installHelper_ = function(method, fn) { + !Array.prototype[method] && Object.defineProperties && Object.defineProperty && Object.defineProperty(Array.prototype, method, {configurable:!0, enumerable:!1, writable:!0, value:fn}); +}; +$jscomp.array.entries$install = function() { + $jscomp.array.installHelper_("entries", $jscomp.array.entries); +}; +$jscomp.array.keys = function() { + return $jscomp.array.arrayIterator_(this, function(i) { + return i; + }); +}; +$jscomp.array.keys$install = function() { + $jscomp.array.installHelper_("keys", $jscomp.array.keys); +}; +$jscomp.array.values = function() { + return $jscomp.array.arrayIterator_(this, function(_, v) { + return v; + }); +}; +$jscomp.array.values$install = function() { + $jscomp.array.installHelper_("values", $jscomp.array.values); +}; +$jscomp.array.copyWithin = function(target, start, opt_end) { + var len = this.length; + target = Number(target); + start = Number(start); + opt_end = Number(null != opt_end ? opt_end : len); + if (target < start) { + for (opt_end = Math.min(opt_end, len);start < opt_end;) { + start in this ? this[target++] = this[start++] : (delete this[target++], start++); + } + } else { + for (opt_end = Math.min(opt_end, len + start - target), target += opt_end - start;opt_end > start;) { + --opt_end in this ? this[--target] = this[opt_end] : delete this[target]; + } + } + return this; +}; +$jscomp.array.copyWithin$install = function() { + $jscomp.array.installHelper_("copyWithin", $jscomp.array.copyWithin); +}; +$jscomp.array.fill = function(value, opt_start, opt_end) { + null != opt_end && value.length || (opt_end = this.length || 0); + opt_end = Number(opt_end); + for (var i = Number((void 0 === opt_start ? 0 : opt_start) || 0);i < opt_end;i++) { + this[i] = value; + } + return this; +}; +$jscomp.array.fill$install = function() { + $jscomp.array.installHelper_("fill", $jscomp.array.fill); +}; +$jscomp.array.find = function(callback, opt_thisArg) { + return $jscomp.array.findInternal_(this, callback, opt_thisArg).v; +}; +$jscomp.array.find$install = function() { + $jscomp.array.installHelper_("find", $jscomp.array.find); +}; +$jscomp.array.findIndex = function(callback, opt_thisArg) { + return $jscomp.array.findInternal_(this, callback, opt_thisArg).i; +}; +$jscomp.array.findIndex$install = function() { + $jscomp.array.installHelper_("findIndex", $jscomp.array.findIndex); +}; +$jscomp.Map = function(opt_iterable) { + opt_iterable = void 0 === opt_iterable ? [] : opt_iterable; + this.data_ = {}; + this.head_ = $jscomp.Map.createHead_(); + this.size = 0; + if (opt_iterable) { + for (var $jscomp$iter$1 = $jscomp.makeIterator(opt_iterable), $jscomp$key$item = $jscomp$iter$1.next();!$jscomp$key$item.done;$jscomp$key$item = $jscomp$iter$1.next()) { + var item = $jscomp$key$item.value; + this.set(item[0], item[1]); + } + } +}; +$jscomp.Map.checkBrowserConformance_ = function() { + var Map = $jscomp.global.Map; + if (!Map || !Map.prototype.entries || !Object.seal) { + return !1; + } + try { + var key = Object.seal({x:4}), map = new Map($jscomp.makeIterator([[key, "s"]])); + if ("s" != map.get(key) || 1 != map.size || map.get({x:4}) || map.set({x:4}, "t") != map || 2 != map.size) { + return !1; + } + var iter = map.entries(), item = iter.next(); + if (item.done || item.value[0] != key || "s" != item.value[1]) { + return !1; + } + item = iter.next(); + return item.done || 4 != item.value[0].x || "t" != item.value[1] || !iter.next().done ? !1 : !0; + } catch (err) { + return !1; + } +}; +$jscomp.Map.createHead_ = function() { + var head = {}; + return head.previous = head.next = head.head = head; +}; +$jscomp.Map.getId_ = function(obj) { + if (!(obj instanceof Object)) { + return String(obj); + } + $jscomp.Map.key_ in obj || obj instanceof Object && Object.isExtensible && Object.isExtensible(obj) && $jscomp.Map.defineProperty_(obj, $jscomp.Map.key_, ++$jscomp.Map.index_); + return $jscomp.Map.key_ in obj ? obj[$jscomp.Map.key_] : " " + obj; +}; +$jscomp.Map.prototype.set = function(key, value) { + var $jscomp$destructuring$var0 = this.maybeGetEntry_(key), id = $jscomp$destructuring$var0.id, list = $jscomp$destructuring$var0.list, entry = $jscomp$destructuring$var0.entry; + list || (list = this.data_[id] = []); + entry ? entry.value = value : (entry = {next:this.head_, previous:this.head_.previous, head:this.head_, key:key, value:value}, list.push(entry), this.head_.previous.next = entry, this.head_.previous = entry, this.size++); + return this; +}; +$jscomp.Map.prototype.clear = function() { + this.data_ = {}; + this.head_ = this.head_.previous = $jscomp.Map.createHead_(); + this.size = 0; +}; +$jscomp.Map.prototype.has = function(key) { + return !!this.maybeGetEntry_(key).entry; +}; +$jscomp.Map.prototype.get = function(key) { + var entry = this.maybeGetEntry_(key).entry; + return entry && entry.value; +}; +$jscomp.Map.prototype.maybeGetEntry_ = function(key) { + var id = $jscomp.Map.getId_(key), list = this.data_[id]; + if (list) { + for (var index = 0;index < list.length;index++) { + var entry = list[index]; + if (key !== key && entry.key !== entry.key || key === entry.key) { + return {id:id, list:list, index:index, entry:entry}; + } + } + } + return {id:id, list:list, index:-1, entry:void 0}; +}; +$jscomp.Map.prototype.entries = function() { + return this.iter_(function(entry) { + return [entry.key, entry.value]; + }); +}; +$jscomp.Map.prototype.keys = function() { + return this.iter_(function(entry) { + return entry.key; + }); +}; +$jscomp.Map.prototype.values = function() { + return this.iter_(function(entry) { + return entry.value; + }); +}; +$jscomp.Map.prototype.forEach = function(callback, opt_thisArg) { + for (var $jscomp$iter$2 = $jscomp.makeIterator(this.entries()), $jscomp$key$entry = $jscomp$iter$2.next();!$jscomp$key$entry.done;$jscomp$key$entry = $jscomp$iter$2.next()) { + var entry = $jscomp$key$entry.value; + callback.call(opt_thisArg, entry[1], entry[0], this); + } +}; +$jscomp.Map.prototype.iter_ = function(func) { + var map = this, entry = this.head_; + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + var $jscomp$compprop3 = {}; + return $jscomp$compprop3.next = function() { + if (entry) { + for (;entry.head != map.head_;) { + entry = entry.previous; + } + for (;entry.next != entry.head;) { + return entry = entry.next, {done:!1, value:func(entry)}; + } + entry = null; + } + return {done:!0, value:void 0}; + }, $jscomp$compprop3[Symbol.iterator] = function() { + return this; + }, $jscomp$compprop3; +}; +$jscomp.Map.index_ = 0; +$jscomp.Map.defineProperty_ = Object.defineProperty ? function(obj, key, value) { + Object.defineProperty(obj, key, {value:String(value)}); +} : function(obj, key, value) { + obj[key] = String(value); +}; +$jscomp.Map.Entry_ = function() { +}; +$jscomp.Map.ASSUME_NO_NATIVE = !1; +$jscomp.Map$install = function() { + $jscomp.initSymbol(); + $jscomp.initSymbolIterator(); + !$jscomp.Map.ASSUME_NO_NATIVE && $jscomp.Map.checkBrowserConformance_() ? $jscomp.Map = $jscomp.global.Map : ($jscomp.initSymbol(), $jscomp.initSymbolIterator(), $jscomp.Map.prototype[Symbol.iterator] = $jscomp.Map.prototype.entries, $jscomp.initSymbol(), $jscomp.Map.key_ = Symbol("map-id-key")); + $jscomp.Map$install = function() { + }; +}; +$jscomp.math = $jscomp.math || {}; +$jscomp.math.clz32 = function(x) { + x = Number(x) >>> 0; + if (0 === x) { + return 32; + } + var result = 0; + 0 === (x & 4294901760) && (x <<= 16, result += 16); + 0 === (x & 4278190080) && (x <<= 8, result += 8); + 0 === (x & 4026531840) && (x <<= 4, result += 4); + 0 === (x & 3221225472) && (x <<= 2, result += 2); + 0 === (x & 2147483648) && result++; + return result; +}; +$jscomp.math.imul = function(a, b) { + a = Number(a); + b = Number(b); + var al = a & 65535, bl = b & 65535; + return al * bl + ((a >>> 16 & 65535) * bl + al * (b >>> 16 & 65535) << 16 >>> 0) | 0; +}; +$jscomp.math.sign = function(x) { + x = Number(x); + return 0 === x || isNaN(x) ? x : 0 < x ? 1 : -1; +}; +$jscomp.math.log10 = function(x) { + return Math.log(x) / Math.LN10; +}; +$jscomp.math.log2 = function(x) { + return Math.log(x) / Math.LN2; +}; +$jscomp.math.log1p = function(x) { + x = Number(x); + if (.25 > x && -.25 < x) { + for (var y = x, d = 1, z = x, zPrev = 0, s = 1;zPrev != z;) { + y *= x, s *= -1, z = (zPrev = z) + s * y / ++d; + } + return z; + } + return Math.log(1 + x); +}; +$jscomp.math.expm1 = function(x) { + x = Number(x); + if (.25 > x && -.25 < x) { + for (var y = x, d = 1, z = x, zPrev = 0;zPrev != z;) { + y *= x / ++d, z = (zPrev = z) + y; + } + return z; + } + return Math.exp(x) - 1; +}; +$jscomp.math.cosh = function(x) { + x = Number(x); + return (Math.exp(x) + Math.exp(-x)) / 2; +}; +$jscomp.math.sinh = function(x) { + x = Number(x); + return 0 === x ? x : (Math.exp(x) - Math.exp(-x)) / 2; +}; +$jscomp.math.tanh = function(x) { + x = Number(x); + if (0 === x) { + return x; + } + var y = Math.exp(2 * -Math.abs(x)), z = (1 - y) / (1 + y); + return 0 > x ? -z : z; +}; +$jscomp.math.acosh = function(x) { + x = Number(x); + return Math.log(x + Math.sqrt(x * x - 1)); +}; +$jscomp.math.asinh = function(x) { + x = Number(x); + if (0 === x) { + return x; + } + var y = Math.log(Math.abs(x) + Math.sqrt(x * x + 1)); + return 0 > x ? -y : y; +}; +$jscomp.math.atanh = function(x) { + x = Number(x); + return ($jscomp.math.log1p(x) - $jscomp.math.log1p(-x)) / 2; +}; +$jscomp.math.hypot = function(x, y, rest) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 2;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 2] = arguments[$jscomp$restIndex]; + } + x = Number(x); + y = Number(y); + for (var max = Math.max(Math.abs(x), Math.abs(y)), $jscomp$iter$4 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$4.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$4.next()) { + max = Math.max(max, Math.abs($jscomp$key$z.value)); + } + if (1E100 < max || 1E-100 > max) { + x /= max; + y /= max; + for (var sum = x * x + y * y, $jscomp$iter$5 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$5.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$5.next()) { + var z$12 = $jscomp$key$z.value, z$12 = Number(z$12) / max, sum = sum + z$12 * z$12 + } + return Math.sqrt(sum) * max; + } + for (var sum$13 = x * x + y * y, $jscomp$iter$6 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$z = $jscomp$iter$6.next();!$jscomp$key$z.done;$jscomp$key$z = $jscomp$iter$6.next()) { + var z$14 = $jscomp$key$z.value, z$14 = Number(z$14), sum$13 = sum$13 + z$14 * z$14 + } + return Math.sqrt(sum$13); +}; +$jscomp.math.trunc = function(x) { + x = Number(x); + if (isNaN(x) || Infinity === x || -Infinity === x || 0 === x) { + return x; + } + var y = Math.floor(Math.abs(x)); + return 0 > x ? -y : y; +}; +$jscomp.math.cbrt = function(x) { + if (0 === x) { + return x; + } + x = Number(x); + var y = Math.pow(Math.abs(x), 1 / 3); + return 0 > x ? -y : y; +}; +$jscomp.number = $jscomp.number || {}; +$jscomp.number.isFinite = function(x) { + return "number" !== typeof x ? !1 : !isNaN(x) && Infinity !== x && -Infinity !== x; +}; +$jscomp.number.isInteger = function(x) { + return $jscomp.number.isFinite(x) ? x === Math.floor(x) : !1; +}; +$jscomp.number.isNaN = function(x) { + return "number" === typeof x && isNaN(x); +}; +$jscomp.number.isSafeInteger = function(x) { + return $jscomp.number.isInteger(x) && Math.abs(x) <= $jscomp.number.MAX_SAFE_INTEGER; +}; +$jscomp.number.EPSILON = Math.pow(2, -52); +$jscomp.number.MAX_SAFE_INTEGER = 9007199254740991; +$jscomp.number.MIN_SAFE_INTEGER = -9007199254740991; +$jscomp.object = $jscomp.object || {}; +$jscomp.object.assign = function(target, sources) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 1;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 1] = arguments[$jscomp$restIndex]; + } + for (var $jscomp$iter$7 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$source = $jscomp$iter$7.next();!$jscomp$key$source.done;$jscomp$key$source = $jscomp$iter$7.next()) { + var source = $jscomp$key$source.value; + if (source) { + for (var key in source) { + Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); + } + } + } + return target; +}; +$jscomp.object.is = function(left, right) { + return left === right ? 0 !== left || 1 / left === 1 / right : left !== left && right !== right; +}; +$jscomp.Set = function(opt_iterable) { + opt_iterable = void 0 === opt_iterable ? [] : opt_iterable; + this.map_ = new $jscomp.Map; + if (opt_iterable) { + for (var $jscomp$iter$8 = $jscomp.makeIterator(opt_iterable), $jscomp$key$item = $jscomp$iter$8.next();!$jscomp$key$item.done;$jscomp$key$item = $jscomp$iter$8.next()) { + this.add($jscomp$key$item.value); + } + } + this.size = this.map_.size; +}; +$jscomp.Set.checkBrowserConformance_ = function() { + var Set = $jscomp.global.Set; + if (!Set || !Set.prototype.entries || !Object.seal) { + return !1; + } + var value = Object.seal({x:4}), set = new Set($jscomp.makeIterator([value])); + if (set.has(value) || 1 != set.size || set.add(value) != set || 1 != set.size || set.add({x:4}) != set || 2 != set.size) { + return !1; + } + var iter = set.entries(), item = iter.next(); + if (item.done || item.value[0] != value || item.value[1] != value) { + return !1; + } + item = iter.next(); + return item.done || item.value[0] == value || 4 != item.value[0].x || item.value[1] != item.value[0] ? !1 : iter.next().done; +}; +$jscomp.Set.prototype.add = function(value) { + this.map_.set(value, value); + this.size = this.map_.size; + return this; +}; +$jscomp.Set.prototype.clear = function() { + this.map_.clear(); + this.size = 0; +}; +$jscomp.Set.prototype.has = function(value) { + return this.map_.has(value); +}; +$jscomp.Set.prototype.entries = function() { + return this.map_.entries(); +}; +$jscomp.Set.prototype.values = function() { + return this.map_.values(); +}; +$jscomp.Set.prototype.forEach = function(callback, opt_thisArg) { + var $jscomp$this = this; + this.map_.forEach(function(value) { + return callback.call(opt_thisArg, value, value, $jscomp$this); + }); +}; +$jscomp.Set.ASSUME_NO_NATIVE = !1; +$jscomp.Set$install = function() { + !$jscomp.Set.ASSUME_NO_NATIVE && $jscomp.Set.checkBrowserConformance_() ? $jscomp.Set = $jscomp.global.Set : ($jscomp.Map$install(), $jscomp.initSymbol(), $jscomp.initSymbolIterator(), $jscomp.Set.prototype[Symbol.iterator] = $jscomp.Set.prototype.values); + $jscomp.Set$install = function() { + }; +}; +$jscomp.string = $jscomp.string || {}; +$jscomp.string.noNullOrUndefined_ = function(str, func) { + if (null == str) { + throw new TypeError("The 'this' value for String.prototype." + func + " must not be null or undefined"); + } +}; +$jscomp.string.noRegExp_ = function(str, func) { + if (str instanceof RegExp) { + throw new TypeError("First argument to String.prototype." + func + " must not be a regular expression"); + } +}; +$jscomp.string.fromCodePoint = function(codepoints) { + for (var $jscomp$restParams = [], $jscomp$restIndex = 0;$jscomp$restIndex < arguments.length;++$jscomp$restIndex) { + $jscomp$restParams[$jscomp$restIndex - 0] = arguments[$jscomp$restIndex]; + } + for (var result = "", $jscomp$iter$9 = $jscomp.makeIterator($jscomp$restParams), $jscomp$key$code = $jscomp$iter$9.next();!$jscomp$key$code.done;$jscomp$key$code = $jscomp$iter$9.next()) { + var code = $jscomp$key$code.value, code = +code; + if (0 > code || 1114111 < code || code !== Math.floor(code)) { + throw new RangeError("invalid_code_point " + code); + } + 65535 >= code ? result += String.fromCharCode(code) : (code -= 65536, result += String.fromCharCode(code >>> 10 & 1023 | 55296), result += String.fromCharCode(code & 1023 | 56320)); + } + return result; +}; +$jscomp.string.repeat = function(copies) { + $jscomp.string.noNullOrUndefined_(this, "repeat"); + var string = String(this); + if (0 > copies || 1342177279 < copies) { + throw new RangeError("Invalid count value"); + } + copies |= 0; + for (var result = "";copies;) { + if (copies & 1 && (result += string), copies >>>= 1) { + string += string; + } + } + return result; +}; +$jscomp.string.repeat$install = function() { + String.prototype.repeat || (String.prototype.repeat = $jscomp.string.repeat); +}; +$jscomp.string.codePointAt = function(position) { + $jscomp.string.noNullOrUndefined_(this, "codePointAt"); + var string = String(this), size = string.length; + position = Number(position) || 0; + if (0 <= position && position < size) { + position |= 0; + var first = string.charCodeAt(position); + if (55296 > first || 56319 < first || position + 1 === size) { + return first; + } + var second = string.charCodeAt(position + 1); + return 56320 > second || 57343 < second ? first : 1024 * (first - 55296) + second + 9216; + } +}; +$jscomp.string.codePointAt$install = function() { + String.prototype.codePointAt || (String.prototype.codePointAt = $jscomp.string.codePointAt); +}; +$jscomp.string.includes = function(searchString, opt_position) { + opt_position = void 0 === opt_position ? 0 : opt_position; + $jscomp.string.noRegExp_(searchString, "includes"); + $jscomp.string.noNullOrUndefined_(this, "includes"); + return -1 !== String(this).indexOf(searchString, opt_position); +}; +$jscomp.string.includes$install = function() { + String.prototype.includes || (String.prototype.includes = $jscomp.string.includes); +}; +$jscomp.string.startsWith = function(searchString, opt_position) { + opt_position = void 0 === opt_position ? 0 : opt_position; + $jscomp.string.noRegExp_(searchString, "startsWith"); + $jscomp.string.noNullOrUndefined_(this, "startsWith"); + var string = String(this); + searchString += ""; + for (var strLen = string.length, searchLen = searchString.length, i = Math.max(0, Math.min(opt_position | 0, string.length)), j = 0;j < searchLen && i < strLen;) { + if (string[i++] != searchString[j++]) { + return !1; + } + } + return j >= searchLen; +}; +$jscomp.string.startsWith$install = function() { + String.prototype.startsWith || (String.prototype.startsWith = $jscomp.string.startsWith); +}; +$jscomp.string.endsWith = function(searchString, opt_position) { + $jscomp.string.noRegExp_(searchString, "endsWith"); + $jscomp.string.noNullOrUndefined_(this, "endsWith"); + var string = String(this); + searchString += ""; + void 0 === opt_position && (opt_position = string.length); + for (var i = Math.max(0, Math.min(opt_position | 0, string.length)), j = searchString.length;0 < j && 0 < i;) { + if (string[--i] != searchString[--j]) { + return !1; + } + } + return 0 >= j; +}; +$jscomp.string.endsWith$install = function() { + String.prototype.endsWith || (String.prototype.endsWith = $jscomp.string.endsWith); +}; +$jscomp.string.endsWith$install(); +$jscomp.array.entries$install(); +$jscomp.string.repeat$install(); +var goog = goog || {}; +goog.global = this; +goog.isDef = function(val) { + return void 0 !== val; +}; +goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) { + var parts = name.split("."), cur = opt_objectToExportTo || goog.global; + parts[0] in cur || !cur.execScript || cur.execScript("var " + parts[0]); + for (var part;parts.length && (part = parts.shift());) { + !parts.length && goog.isDef(opt_object) ? cur[part] = opt_object : cur = cur[part] ? cur[part] : cur[part] = {}; + } +}; +goog.define = function(name, defaultValue) { + goog.exportPath_(name, defaultValue); +}; +goog.DEBUG = !0; +goog.LOCALE = "en"; +goog.TRUSTED_SITE = !0; +goog.STRICT_MODE_COMPATIBLE = !1; +goog.DISALLOW_TEST_ONLY_CODE = !goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1; +goog.provide = function(name) { + if (goog.isInModuleLoader_()) { + throw Error("goog.provide can not be used within a goog.module."); + } + goog.constructNamespace_(name); +}; +goog.constructNamespace_ = function(name, opt_obj) { + goog.exportPath_(name, opt_obj); +}; +goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module = function(name) { + if (!goog.isString(name) || !name || -1 == name.search(goog.VALID_MODULE_RE_)) { + throw Error("Invalid module identifier"); + } + if (!goog.isInModuleLoader_()) { + throw Error("Module " + name + " has been loaded incorrectly."); + } + if (goog.moduleLoaderState_.moduleName) { + throw Error("goog.module may only be called once per module."); + } + goog.moduleLoaderState_.moduleName = name; +}; +goog.module.get = function() { +}; +goog.module.getInternal_ = function() { +}; +goog.moduleLoaderState_ = null; +goog.isInModuleLoader_ = function() { + return null != goog.moduleLoaderState_; +}; +goog.module.declareLegacyNamespace = function() { + goog.moduleLoaderState_.declareLegacyNamespace = !0; +}; +goog.setTestOnly = function(opt_message) { + if (goog.DISALLOW_TEST_ONLY_CODE) { + throw opt_message = opt_message || "", Error("Importing test-only code into non-debug environment" + (opt_message ? ": " + opt_message : ".")); + } +}; +goog.forwardDeclare = function() { +}; +goog.getObjectByName = function(name, opt_obj) { + for (var parts = name.split("."), cur = opt_obj || goog.global, part;part = parts.shift();) { + if (goog.isDefAndNotNull(cur[part])) { + cur = cur[part]; + } else { + return null; + } + } + return cur; +}; +goog.globalize = function(obj, opt_global) { + var global = opt_global || goog.global, x; + for (x in obj) { + global[x] = obj[x]; + } +}; +goog.addDependency = function(relPath, provides, requires, opt_loadFlags) { + if (goog.DEPENDENCIES_ENABLED) { + var provide, require, path = relPath.replace(/\\/g, "/"), deps = goog.dependencies_; + opt_loadFlags && "boolean" !== typeof opt_loadFlags || (opt_loadFlags = opt_loadFlags ? {module:"goog"} : {}); + for (var i = 0;provide = provides[i];i++) { + deps.nameToPath[provide] = path, deps.loadFlags[path] = opt_loadFlags; + } + for (var j = 0;require = requires[j];j++) { + path in deps.requires || (deps.requires[path] = {}), deps.requires[path][require] = !0; + } + } +}; +goog.useStrictRequires = !1; +goog.ENABLE_DEBUG_LOADER = !0; +goog.logToConsole_ = function(msg) { + goog.global.console && goog.global.console.error(msg); +}; +goog.require = function() { +}; +goog.basePath = ""; +goog.nullFunction = function() { +}; +goog.abstractMethod = function() { + throw Error("unimplemented abstract method"); +}; +goog.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor); + return ctor.instance_ = new ctor; + }; +}; +goog.instantiatedSingletons_ = []; +goog.LOAD_MODULE_USING_EVAL = !0; +goog.SEAL_MODULE_EXPORTS = goog.DEBUG; +goog.loadedModules_ = {}; +goog.DEPENDENCIES_ENABLED = !1; +goog.ALWAYS_TRANSPILE = !1; +goog.NEVER_TRANSPILE = !1; +goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {loadFlags:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() { + var doc = goog.global.document; + return null != doc && "write" in doc; +}, goog.findBasePath_ = function() { + if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + } else { + if (goog.inHtmlDocument_()) { + for (var scripts = goog.global.document.getElementsByTagName("SCRIPT"), i = scripts.length - 1;0 <= i;--i) { + var src = scripts[i].src, qmark = src.lastIndexOf("?"), l = -1 == qmark ? src.length : qmark; + if ("base.js" == src.substr(l - 7, 7)) { + goog.basePath = src.substr(0, l - 7); + break; + } + } + } + } +}, goog.importScript_ = function(src, opt_sourceText) { + (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(src, opt_sourceText) && (goog.dependencies_.written[src] = !0); +}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importProcessedScript_ = function(src, isModule, needsTranspile) { + goog.importScript_("", 'goog.retrieveAndExec_("' + src + '", ' + isModule + ", " + needsTranspile + ");"); +}, goog.queuedModules_ = [], goog.wrapModule_ = function(srcUrl, scriptText) { + return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(scriptText + "\n//# sourceURL=" + srcUrl + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + scriptText + "\n;return exports});\n//# sourceURL=" + srcUrl + "\n"; +}, goog.loadQueuedModules_ = function() { + var count = goog.queuedModules_.length; + if (0 < count) { + var queue = goog.queuedModules_; + goog.queuedModules_ = []; + for (var i = 0;i < count;i++) { + goog.maybeProcessDeferredPath_(queue[i]); + } + } +}, goog.maybeProcessDeferredDep_ = function(name) { + goog.isDeferredModule_(name) && goog.allDepsAreAvailable_(name) && goog.maybeProcessDeferredPath_(goog.basePath + goog.getPathFromDeps_(name)); +}, goog.isDeferredModule_ = function(name) { + var path = goog.getPathFromDeps_(name), loadFlags = path && goog.dependencies_.loadFlags[path] || {}; + return path && ("goog" == loadFlags.module || goog.needsTranspile_(loadFlags.lang)) ? goog.basePath + path in goog.dependencies_.deferred : !1; +}, goog.allDepsAreAvailable_ = function(name) { + var path = goog.getPathFromDeps_(name); + if (path && path in goog.dependencies_.requires) { + for (var requireName in goog.dependencies_.requires[path]) { + if (!goog.isProvided_(requireName) && !goog.isDeferredModule_(requireName)) { + return !1; + } + } + } + return !0; +}, goog.maybeProcessDeferredPath_ = function(abspath) { + if (abspath in goog.dependencies_.deferred) { + var src = goog.dependencies_.deferred[abspath]; + delete goog.dependencies_.deferred[abspath]; + goog.globalEval(src); + } +}, goog.loadModuleFromUrl = function() { +}, goog.loadModule = function(moduleDef) { + var previousState = goog.moduleLoaderState_; + try { + goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1}; + var exports; + if (goog.isFunction(moduleDef)) { + exports = moduleDef.call(goog.global, {}); + } else { + if (goog.isString(moduleDef)) { + exports = goog.loadModuleFromSource_.call(goog.global, moduleDef); + } else { + throw Error("Invalid module definition"); + } + } + var moduleName = goog.moduleLoaderState_.moduleName; + if (!goog.isString(moduleName) || !moduleName) { + throw Error('Invalid module name "' + moduleName + '"'); + } + goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(exports); + goog.loadedModules_[moduleName] = exports; + } finally { + goog.moduleLoaderState_ = previousState; + } +}, goog.loadModuleFromSource_ = function(JSCompiler_OptimizeArgumentsArray_p0) { + eval(JSCompiler_OptimizeArgumentsArray_p0); + return {}; +}, goog.writeScriptSrcNode_ = function(src) { + goog.global.document.write(' + + + + + + + +
+

Please wait, updating security key...

+
+
+ Updating security key + Updating security key +
+
+ + diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/approvedorigins.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/approvedorigins.js new file mode 100644 index 000000000000..7ee946d62cd9 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/approvedorigins.js @@ -0,0 +1,24 @@ +/** + * @fileoverview Provides an interface to check whether the user has approved + * an origin to use security keys. + * + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * Allows the caller to check whether the user has approved the use of + * security keys from an origin. + * @interface + */ +function ApprovedOrigins() {} + +/** + * Checks whether the origin is approved to use security keys. (If not, an + * approval prompt may be shown.) + * @param {string} origin The origin to approve. + * @param {number=} opt_tabId A tab id to display approval prompt in, if + * necessary. + * @return {Promise} A promise for the result of the check. + */ +ApprovedOrigins.prototype.isApprovedOrigin = function(origin, opt_tabId) {}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/archive.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/archive.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4005ccf82498fbfddfbf03b2b0f6efd9732e40 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RY(mh=qLn;`P7f4I6o^$vk*75)G z;Q&*=BN8k4L*MweM9Hs+s&(Re-xTAhw9os*h5spuH4PJ%O-y}}t1#{0A~!J=_fBtl z#*IckLZ|9nW_}lBTkY^sIjikut$>=j&-#fI-PRlN*cxy#SZ!*3xPR)Qqd+SeJYD@< J);T3K0RXfII9UJy literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/b64.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/b64.js new file mode 100644 index 000000000000..0ee902e59c5e --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/b64.js @@ -0,0 +1,85 @@ +// WebSafeBase64Escape and Unescape. +// GOOGLE-INTERNAL mschilder@google.com +function B64_encode(bytes, opt_length) { + if (!opt_length) opt_length = bytes.length; + var b64out = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; + var result = ''; + var shift = 0; + var accu = 0; + var inputIndex = 0; + while (opt_length--) { + accu <<= 8; + accu |= bytes[inputIndex++]; + shift += 8; + while (shift >= 6) { + var i = (accu >> (shift - 6)) & 63; + result += b64out.charAt(i); + shift -= 6; + } + } + if (shift) { + accu <<= 8; + shift += 8; + var i = (accu >> (shift - 6)) & 63; + result += b64out.charAt(i); + } + return result; +} + +// Normal base64 encode; not websafe, including padding. +function base64_encode(bytes, opt_length) { + if (!opt_length) opt_length = bytes.length; + var b64out = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var result = ''; + var shift = 0; + var accu = 0; + var inputIndex = 0; + while (opt_length--) { + accu <<= 8; + accu |= bytes[inputIndex++]; + shift += 8; + while (shift >= 6) { + var i = (accu >> (shift - 6)) & 63; + result += b64out.charAt(i); + shift -= 6; + } + } + if (shift) { + accu <<= 8; + shift += 8; + var i = (accu >> (shift - 6)) & 63; + result += b64out.charAt(i); + } + while (result.length % 4) result += '='; + return result; +} + +var B64_inmap = +[ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 64, + 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, 0, 0, 0, 0 +]; + +function B64_decode(string) { + var bytes = []; + var accu = 0; + var shift = 0; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + if (c < 32 || c > 127 || !B64_inmap[c - 32]) return []; + accu <<= 6; + accu |= (B64_inmap[c - 32] - 1); + shift += 6; + if (shift >= 8) { + bytes.push((accu >> (shift - 8)) & 255); + shift -= 8; + } + } + return bytes; +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/background.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/background.js new file mode 100644 index 000000000000..eee4ef8b10ec --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/background.js @@ -0,0 +1,924 @@ +/** + * @fileoverview gnubbyd in javascript + */ + +'use strict'; + +/** @const */ +var BROWSER_SUPPORTS_TLS_CHANNEL_ID = true; + +/** @const */ +var HTTP_ORIGINS_ALLOWED = false; + +// Show gnubbyd options window. +// If window already is open, reload it. +function gnubbyd_options() { + function open_options() { + chrome.app.window.create( + 'options.html', + { 'id': 'options', 'frame': 'none' }, + function(w) { + if (w) { + w.show(); + w.focus(); + } + }); + } + + var w = chrome.app.window.get('options'); + if (w) { + w.onClosed.addListener(open_options); + w.close(); + } else { + open_options(); + } +} + +chrome.app.runtime.onLaunched.addListener(function() { + gnubbyd_options(); +}); + +// Pay attention to pending updates. +chrome.runtime.onUpdateAvailable.addListener(function(details) { + chrome.runtime.reload(); +}); + +// Singleton tracking available devices. +var gnubbies = new Gnubbies(); +// Only include HID support if it's available in this browser. Register it +// first, though, because it's more likely to succeed on HID devices than +// chrome.usb is, on platforms where chrome.usb can see HID devices as well as +// non-HID ones (Linux in particular.) +if (chrome.hid) { + HidGnubbyDevice.register(gnubbies); +} +UsbGnubbyDevice.register(gnubbies); + +// Try to release all our usb handles at suspend time. +chrome.runtime.onSuspend.addListener(function() { + console.log(UTIL_fmt('onSuspend')); + gnubbies.closeAll(); +}); + + +// SSH / ECredz applet session table. +// Some requests take multiple round-trips between gnubbyd (this) +// and a client. To preserve lock and applet select state across calls, +// clients can specify a time along with SSH_UNLOCK. +// Upon successful unlock, gnubbyd will keep a session on that gnubby for +// that duration. +var ssh_sessions = {}; + +var USB_HELPER = new UsbHelper(); +initSshAgent(USB_HELPER); + +var requestHelper = new RegisteringHelper(); +var FACTORY_REGISTRY = (function() { + var windowTimer = new WindowTimer(); + var xhrTextFetcher = new XhrTextFetcher(); + return new FactoryRegistry( + new GoogleAppIdCheckerFactory(xhrTextFetcher), + new GoogleApprovedOrigins(), + new CountdownTimerFactory(windowTimer), + new GstaticOriginChecker(), + requestHelper, + windowTimer, + xhrTextFetcher); +})(); + +var readyToServe = false; + +// Note we must register message handlers right here in order to properly +// resume from inactivity. +registerExternalMessageHandlers(); + +/** + * Initializes request helpers. + * @return {Promise} A promise that resolves when initialization is complete. + */ +function initRequestHelpers() { + requestHelper.addHelper(USB_HELPER); + + var nativeFwd = lookForSshForwardHelper(); + + var nfcReaderAppId = lookForNfcReader(); + + return Promise.all([nativeFwd, nfcReaderAppId]); +} + +initRequestHelpers().then(function() { + readyToServe = true; +}); + +var DEVICE_FACTORY_REGISTRY = new DeviceFactoryRegistry( + new AppletVerifyingGnubbyFactory(gnubbies), + FACTORY_REGISTRY.getCountdownFactory(), + new GoogleCorpIndividualAttestation()); + +function setNfcReaderAppId(app_id) { + chrome.storage.local.set({nfc_reader_app_id: app_id}); +} + +/** + * Looks for the SSH forward helper. + * @return {Promise} Promise with the result of the check. + */ +function lookForSshForwardHelper() { + return new Promise(function(resolve) { + // Look for the SSH forward helper. + chrome.storage.local.get('disable_forward_to_native', function(stored) { + if (chrome.runtime.lastError || !stored['disable_forward_to_native']) { + resolve(SshForwardHelper.lookForSshForwardHelper(requestHelper)); + } else { + resolve(); + } + }); + }); +} + +/** + * Looks for the NFC reader helper. + * @return {Promise} Promise with the result of the check. + */ +function lookForNfcReader() { + return new Promise(function(resolve) { + // Look for the NFC helper. + chrome.storage.local.get('nfc_reader_app_id', function(stored) { + if (!chrome.runtime.lastError && stored && stored.nfc_reader_app_id) { + registerExternalHelper(stored.nfc_reader_app_id); + setNfcReaderAppId(stored.nfc_reader_app_id); + } + resolve(); + }); + }); +} + +var CORPLOG_URL = 'https://login.corp.google.com/gnubbylog?'; + +/** + * Web url of CA front-end. + * @const + */ +var CA_FRONT_END_PREFIX = 'https://ca-service.corp.google.com/'; +var CA_EXTENDED_FRONT_END_PREFIX = 'https://ca-service-extended.corp.google.com/'; + +/** + * Web urls of login.corp + * @const + */ +var CORP_LOGIN_PREFIX = 'https://login.corp.google.com/'; +var CORP_LOGIN_DEV_PREFIX = 'https://login-dev.corp.google.com/'; +var CORP_LOGIN_TEST_PREFIX = 'https://login-test.corp.google.com/'; + +function isCorpLoginServer(url) { + return (url.indexOf(CORP_LOGIN_PREFIX) == 0 || + url.indexOf(CORP_LOGIN_DEV_PREFIX) == 0 || + url.indexOf(CORP_LOGIN_TEST_PREFIX) == 0); +} + +function isCAServer(url) { + return (url.indexOf(CA_FRONT_END_PREFIX) == 0 || + url.indexOf(CA_EXTENDED_FRONT_END_PREFIX) == 0); +} + +function isWebAction(request) { + if (!request || !request.type) + return false; + switch (request.type) { + case MessageTypes.U2F_REGISTER_REQUEST: + case MessageTypes.U2F_SIGN_REQUEST: + return true; + + default: + return false; + } +} + +/** + * B64-encoded SHA256 hash of the NFC reader helper app's ID. + * @const + */ +var NFC_READER_APP_ID_HASH = 'waX0Zzc7EWrFxv4mf7JH1E1qDXv8nb6kRWVd1CZfO20'; + +/** + * Whitelist of allowed external request helpers. + */ +var HELPER_WHITELIST = new RequestHelperWhitelist(); +HELPER_WHITELIST.addAllowedBlindedExtension(NFC_READER_APP_ID_HASH, 'NFC'); + +/** + * @param {string} senderId of app that sent a message + * @return {boolean} Whether sender app is the remote helper app. + */ +function isNfcReaderApp(senderId) { + return NFC_READER_APP_ID_HASH == B64_encode(sha256HashOfString(senderId)); +} + +/** + * Registers the given extension as an external helper. + * @param {string} id Extension id. + */ +function registerExternalHelper(id) { + var helperAppConfig = { + appId: id, + sendMessage: chrome.runtime.sendMessage, + defaultError: DeviceStatusCodes.TIMEOUT_STATUS + }; + var source = HELPER_WHITELIST.getExtensionMnemonic(id); + if (source) { + helperAppConfig.source = source; + } + var externalHelper = new ExternalHelper(helperAppConfig); + requestHelper.addHelper(externalHelper); +} + +/** + * "Public" methods. + * @param {string?} method Method being called. + * @return {boolean} Whether that method is considered "public". + */ +function publicSshMethod(method) { + if (method) switch (method) { + case 'SSH_CERT_READ': + case 'SSH_PUBKEY': + return true; + } + return false; +} + +/** + * "Public" method access control. + * @param {string} id ID of caller. + * @return {boolean} Whether access to "public" methods is allowed. + */ +function allowedToAccessPublicMethods(id) { + return ((',mohffmbglhghdkfeipidgcneaebcfpim' + // corp ssh monitor + ',' + ).indexOf(',' + id + ',') != -1); +} + +/** + * SshAgent access control. + * @param {string} id ID of caller. + * @param {string?} method Method being called. + * @return {boolean} Whether access to ssh-agent is allowed. + */ +function allowedToAccessSshAgent(id, method) { + if (publicSshMethod(method) && allowedToAccessPublicMethods(id)) { + return true; + } + + return ((',npcpnahjfihkilahpohiieimoffneflm' + // sshinawin + ',kkpmmflhpippiifdmlopcgacojnmniei' + // sshinawin dev + ',eooeadjobbbigamjlmofdhdjofjhahkd' + // sshinatab + ',omhfcecceikimagjkahpkicpegpcegdi' + // sshinatab dev + ',pnhechapfaindjhompbnflcldabbghjo' + // Secure Shell + ',okddffdblfhhnmhodogpojmfkjmhinfp' + // Secure Shell dev + ',gbchcmhmhahfdphkhkmpfmihenigjmpp' + // Chrome Remote Desktop (rel) + ',ljacajndfccfgnfohlgkdphmbnpkjflk' + // chromoting-dev + ',odkaodonbgfohohmklejpjiejmcipmib' + // Chrome Remote Desktop (qa) + ',dokpleeekgeeiehdhmdkeimnkmoifgdd' + // Chrome Remote Desktop (qa2) + ',ajoainacpilcemgiakehflpbkbfipojk' + // Chromoting v2 (internal) + ',ooiklbnjmhbcgemelgfhaeaocllobloj' + // Mosh + ',hmgggebkhjjkiimkjlknpdgapncghehh' + // Mosh (dev) + ',cbmogpclfjjiiabiglhcaapnanpaocfd' + // GCSA dev + ',glbijnegiodlbbhiekfdahpopmibbjgl' + // GCSA stable + ',' + chrome.runtime.id + ',' // self + ).indexOf(',' + id + ',') != -1); +} + +/** + * Pattern for sender.url matching SSH relay servers. + * @const + */ +var SSH_RELAY_HOSTNAME_REGEXP = + /^https:\/\/[a-z][a-z][a-z]\.r\.ext\.google\.com:8022\/.*/; + +/** + * Ssh relay message access control. + * @param {string} id of destination. + * @return {boolean} Whether message forwarding is allowed. + */ +function allowedToReceiveRelayMessage(id) { + return ((',npcpnahjfihkilahpohiieimoffneflm' + // sshinawin + ',kkpmmflhpippiifdmlopcgacojnmniei' + // sshinawin dev + ',eooeadjobbbigamjlmofdhdjofjhahkd' + // sshinatab + ',omhfcecceikimagjkahpkicpegpcegdi' + // sshinatab dev + ',pnhechapfaindjhompbnflcldabbghjo' + // Secure Shell + ',okddffdblfhhnmhodogpojmfkjmhinfp' + // Secure Shell dev + ',').indexOf(',' + id + ',') != -1); +} + +/** + * Check destination and forward request on if allowed. + * @param {Object} request to relay. + * @param {Object} sender of request. + * @param {function(*)} sendResponse callback. + */ +function handleSshRelayMessage(request, sender, sendResponse) { + if (!allowedToReceiveRelayMessage(request.id)) { + console.warn('refusing to relay request to ' + request.id); + return; + } + + chrome.runtime.sendMessage(request.id, request, undefined, sendResponse); +} + +/** + * @typedef {{ + * type: string, + * sessionId: string, + * block: number, + * token: (Uint8Array|Array|Object), + * data: (Uint8Array|Array|Object|undefined) + * }} + */ +var EcrMessage; + +/** + * @typedef {{ + * type: string, + * sessionId: string, + * which: number, + * token: (Uint8Array|Array|Object), + * fp: (Uint8Array|Array|Object), + * input: (Uint8Array|Array|Object|undefined) + * }} + */ +var E2eMessage; + +/** + * Message handler for request coming from 2sv broker or sshinatab and friends. + * This should return true if unsafeSendResponse will be called asynchronously, + * or Chrome will destroy it as soon as this event handler returns. + * @return {boolean} + */ +function messageHandler(request, sender, unsafeSendResponse) { + // Make sure sendResponse as called below does not throw up. + // Typically 'Attempting to use a disconnected port object' occurs. + function sendResponse(r) { + try { + unsafeSendResponse(r); + } catch (e) { + console.warn(UTIL_fmt('caught: ' + e.message)); + } + } + + console.log(UTIL_fmt('onMessageExternal listener: ' + request.type)); + console.log(UTIL_fmt('request')); + // Try not log PIN on console. + var savedPIN = request.pin; + if (savedPIN) { + request.pin = '(redacted security key password)'; + } + console.log(request); + if (savedPIN) { + request.pin = savedPIN; + } + console.log(UTIL_fmt('sender')); + console.log(sender); + + // Verify sender is whitelisted for requested action(s). + if (sender.id) { + // Helper registration? Check whether the extension is whitelisted. + if (request === sender.id && + HELPER_WHITELIST.isExtensionAllowed(sender.id)) { + registerExternalHelper(sender.id); + if (isNfcReaderApp(sender.id)) { + setNfcReaderAppId(sender.id); + sendResponse(/** @type {ExternalHelperAck} */ ({rc: 0})); + } + return false; + } + + // Other app / extension is calling. + // Check against whitelists. + if (!allowedToAccessSshAgent(sender.id, request.type)) { + sendResponse({'rc': 666}); + return false; + } + } else { + // Caller is web page. + if (isCAServer(sender.url)) { + handleSshAgentCommand(request, sender, sendResponse); + } else if (SSH_RELAY_HOSTNAME_REGEXP.test(sender.url)) { + handleSshRelayMessage(request, sender, sendResponse); + } else if (isCorpLoginServer(sender.url) && request && + !isWebAction(request)) { + var g = new Gnubby(); + check_Gnubby(g, request, function(rc, text) { + sendResponse({ + 'rc': rc, + 'message': text}); + g.close(); + }); + } else { + handleWebPageRequest(request, sender, sendResponse); + } + return true; + } + + var g = new Gnubby(); + + var defaultLockTime = 5; + var isSession = false; + + // If caller claims to have a session, try find it. + if (request.sessionId) { + if (ssh_sessions[request.sessionId]) { + g = ssh_sessions[request.sessionId]; + isSession = true; + } + } + + function releaseAndSendResponse(response) { + if (!isSession) { + g.unlock(function(rc) { + g.close(); + if (response) sendResponse(response); + }); + } else { + // In a session; keep lock alive. + if (response) sendResponse(response); + } + }; + + function fail(rc) { + if (rc == -GnubbyDevice.OTHER) { + // Badness. Likely SSH applet in a hissy and might recover with a reset. + // Alternatively, this condition tends to get fixed by re-insert. + logMessage('gnubby.reset', CORPLOG_URL); + g.reset(function() { + releaseAndSendResponse({'rc': rc}); + }); + } else { + releaseAndSendResponse({'rc': rc}); + } + }; + + // Call gnubby f() with SSH applet locked and selected. + function call_on_SSH_applet(f) { + if (isSession) { + // We have a gnubby session, ready to go. + f(); + return; + } + + g.open(null, GnubbyEnumerationTypes.VID_PID, function(rc, gnubbies) { + if (rc != 0) { fail(rc); return; } + g.sync(function(rc) { + if (rc != 0) { fail(rc); return; } + var lockTime = new Uint8Array([defaultLockTime]); + g.lock(lockTime.buffer, function(rc) { + if (rc != 0) { fail(rc); return; } + g.selectSSH(function(rc, data) { + if (rc != 0) { fail(rc); return; } + f(); + }); + }); + }); + }); + }; + + /** + * Parse a public key from a binary array into JSON object. + * @param {Uint8Array} bytes to parse from. + * @param {Object} resp response to fill in. + * @return {number} of bytes consumed. + */ + function parsePublicKey(bytes, resp) { + var off = 0; + + // Check whether the key at hand also certifies its flags and slot. + // If so, pass on that meta data in resp. + if (bytes[off] & SSH2_KF_META_ATTEST) { + resp.meta = UTIL_BytesToHex(bytes.subarray(off, 3 + off)); + off += 3; + } + + var isRSA = (bytes[off] == 0x01) || (bytes[off] == 0x03); + var isECDSA = (bytes[off] == 0x04); + + if (isRSA) { + var el = (bytes[off] == 0x03) ? 1 : 3; + resp.exponent = UTIL_BytesToHex(bytes.subarray(off, el + off)); + off += el; + var apk = UTIL_BytesToHex(bytes.subarray(off, 256 + off)); + if (bytes[off] >= 0x80) { apk = '00' + apk; } + resp.publickey = apk; + off += 256; + } else if (isECDSA) { + resp.publickey = UTIL_BytesToHex(bytes.subarray(off, 65 + off)); + off += 65; + } + + return off; + }; + + var handlers = { + 'SSH_KEYGEN': + function() { call_on_SSH_applet( + function() { + g.generateProtectedKey(UTIL_HexToBytes(request.pin), + function(rc) { + releaseAndSendResponse({'rc': rc}); + }); + }); + }, + + 'SSH_VERSION': + function() { call_on_SSH_applet( + function() { + var res = {}; + g.appletVersion(function(rc, data) { + res.rc = rc; + if (rc) { + releaseAndSendResponse(res); + return; + } + var u8 = new Uint8Array(data); + res.sshVersion = [u8[0], u8[1], u8[2]]; + g.unlock(function(rc) { + res.rc = rc; + if (rc) { + releaseAndSendResponse(res); + return; + } + g.appletVersion(function(rc, data) { + res.rc = rc; + if (rc) { + releaseAndSendResponse(res); + return; + } + var u8 = new Uint8Array(data); + res.u2fVersion = [u8[0], u8[1], u8[2]]; + releaseAndSendResponse(res); + }); + }); + }); + }); + }, + + 'SSH_UNLOCK': + function() { + if (request.ecdh) { + var ecdh = request.ecdh; + var wants_session = false; + var flags = 0; + + if (typeof request.duration === 'number') { + // Client requests a multi-message session. + defaultLockTime = request.duration; + wants_session = true; + } + + if (typeof request.which === 'number') { + flags = request.which; + } else { + // Client failed to specify its key preference. + // Currently we have two cases: + // - regular SSH, which does not require a session. + // - ecredz, which requires a session. + if (wants_session) { + flags = Gnubby.UNLOCK_ECREDZ; + } else { + flags = Gnubby.UNLOCK_SSH; + } + } + + call_on_SSH_applet( + function() { + g.unlockProtectedKey( + ecdh, request.pin, flags, function(rc, data) { + var resp = {'rc': rc}; + if (data) { + resp.token = UTIL_BytesToHex(new Uint8Array(data)); + + if (wants_session) { + // Sessionize this gnubby. + isSession = true; + + // Encrypted token works nicely as sessionId. + var sessionId = resp.token; + ssh_sessions[sessionId] = g; + resp.sessionId = sessionId; + + // Start fail-safe release timer. + // Well-behaved client will have cleaned this up earlier. + window.setTimeout(function() { + var gnubby = ssh_sessions[sessionId]; + if (gnubby) { + console.log( + UTIL_fmt('session ' + sessionId + ' expired')); + gnubby.unlock(function() { gnubby.close(); }); + delete ssh_sessions[sessionId]; + } + }, defaultLockTime * 1000 + 500); + } + } + releaseAndSendResponse(resp); + }); + }); + } + }, + + 'SSH_CERT_WRITE': + function() { + call_on_SSH_applet(function() { + var which = request.which | 0; + var cert = UTIL_HexToBytes(request.cert); + var promote_alternate = request.promote || false; + g.certWrite(which, cert, promote_alternate, function(rc) { + releaseAndSendResponse({'rc': rc}); + }); + }); + }, + + 'SSH_CERT_READ': + function() { + call_on_SSH_applet(function() { + var which = request.which | 0; + g.certRead(which, function(rc, data) { + var resp = {'rc': rc}; + if (rc == 0) { + resp.cert = UTIL_BytesToHex(new Uint8Array(data)); + } + releaseAndSendResponse(resp); + }); + }); + }, + + 'ECR_READ': + function() { + if (!isSession) { + fail(410); + return; + } + var ecrRequest = /** @type {EcrMessage} */ (request); + g.ecredsRead(ecrRequest.block, + UTIL_HexToBytes(ecrRequest.token), + function(rc, data) { + var resp = {'rc': rc}; + if (data) { + resp.data = UTIL_BytesToHex(new Uint8Array(data)); + } + releaseAndSendResponse(resp); + }); + }, + + 'ECR_WRITE': + function() { + if (!isSession) { + fail(410); + return; + } + var ecrRequest = /** @type {EcrMessage} */ (request); + g.ecredsWrite(ecrRequest.block, + UTIL_HexToBytes(ecrRequest.token), + UTIL_HexToBytes(ecrRequest.data), + function(rc, data) { + var resp = {'rc': rc}; + if (data) { + resp.data = UTIL_BytesToHex(new Uint8Array(data)); + } + releaseAndSendResponse(resp); + }); + }, + + 'SSH_RELEASE': + function() { + delete ssh_sessions[request.sessionId]; + if (request.reset) { + if (isSession) { + isSession = false; + logMessage('gnubby.reset', CORPLOG_URL); + g.reset(function() { + releaseAndSendResponse({'rc': 0}); + }); + return; + } + } + isSession = false; + releaseAndSendResponse({'rc': 0}); + }, + + 'SSH_SIGN': + function() { call_on_SSH_applet( + function() { + var which = request.which | 0; + g.signProtectedKey(UTIL_HexToBytes(request.token), + which, + request.input, + function(rc, data) { + if (data) { + var bytes = new Uint8Array(data); + var resp = { 'rc': rc }; + + var off = parsePublicKey(bytes, resp); + + // Signature. + resp.signature = UTIL_BytesToHex(bytes.subarray(off)); + + releaseAndSendResponse(resp); + } else { + releaseAndSendResponse({'rc': rc}); + } + }); + }); + }, + + 'SSH_PUBKEY': + function() { call_on_SSH_applet( + function() { + var which = request.which | 0; + var alternate = request.alternate || false; + g.getProtectedPublicKey(UTIL_HexToBytes(request.challenge), + which, alternate, function(rc, data) { + if (data) { + var bytes = new Uint8Array(data); + var resp = { 'rc': rc }; + + var off = parsePublicKey(bytes, resp); + + // Secure channel data. + resp.ecdh = UTIL_BytesToHex(bytes.subarray(off, off + 65)); + off += 65; + + // Attestation data. + resp.devicekey = UTIL_BytesToHex(bytes.subarray(off, off + 65)); + off += 65; + resp.fingerprint = UTIL_BytesToHex(bytes.subarray(off, off + 32)); + off += 32; + resp.signature = UTIL_BytesToHex(bytes.subarray(off)); + + releaseAndSendResponse(resp); + } else { + releaseAndSendResponse({'rc': rc}); + } + }); + }); + }, + + 'E2E_DECRYPT': + function() { + var e2eRequest = /** @type {E2eMessage} */ (request); + + if (!isSession) { + call_on_SSH_applet(function() { + g.e2eDecrypt(e2eRequest.which | 0, + UTIL_HexToBytes(e2eRequest.token), + UTIL_HexToBytes(e2eRequest.fp), + UTIL_HexToBytes(e2eRequest.input), + function(rc, data) { + var resp = {'rc': rc}; + if (data) { + resp.encrypted_key = UTIL_BytesToHex(new Uint8Array(data)); + } + releaseAndSendResponse(resp); + }); + }); + } else { + g.e2eDecrypt(e2eRequest.which | 0, + UTIL_HexToBytes(e2eRequest.token), + UTIL_HexToBytes(e2eRequest.fp), + UTIL_HexToBytes(e2eRequest.input), + function(rc, data) { + var resp = {'rc': rc}; + if (data) { + resp.encrypted_key = UTIL_BytesToHex(new Uint8Array(data)); + } + releaseAndSendResponse(resp); + }); + } + }, + + 'APPLET_INSTALL': + function() { + check_Gnubby(g, request, function(rc, text) { + releaseAndSendResponse({ + 'rc': rc, + 'message': text}); + }); + }, + + 'STATUS': + function() { + check_Gnubby(g, {}, function(rc, text) { + releaseAndSendResponse({ + 'rc': rc, + 'message': text}); + }); + }, + + 'HELLO': + function() { + sendResponse({'rc': 0, 'message': 'success'}); + }, + + 'GET_LOG': + function() { + sendResponse({'rc': 0, 'logs': UTIL_events}); + }, + + 'OPTIONS': + function() { + gnubbyd_options(); + }, + + 'auth-agent@openssh.com': + function() { + handleSshAgentCommand(request, sender, sendResponse); + } + }; + + var f = handlers[request.type]; + if (f) { + f.call(null); + } else { + var handler = USB_HELPER.getHandler(request); + if (handler && (request.type == 'sign_helper_request')) { + handler.run(sendResponse); + } else { + sendResponse({'rc': 99, + 'message': 'Unknown request "' + request.type + '"'}); + return false; + } + } + + return true; +} + +// Defer to messageHandler, but busy-wait first until readyToServe. +function waitingMessageHandler(request, sender, sendResponse) { + if (readyToServe) { + return messageHandler(request, sender, sendResponse); + } else { + console.log(UTIL_fmt('not ready to serve yet..')); + window.setTimeout( + waitingMessageHandler.bind(null, request, sender, sendResponse), + 100); + return true; + } +} + +// Listen to self for options page asking for stuff. +chrome.runtime.onMessage.addListener(waitingMessageHandler); + +function registerExternalMessageHandlers() { + // Listen to others (sshinatab, ..) + chrome.runtime.onMessageExternal.addListener(waitingMessageHandler); + + // Listen to connection events, and wire up a message handler on the port. + chrome.runtime.onConnectExternal.addListener(function(port) { + var onInitialMessage = function(request) { + console.log(UTIL_fmt('request')); + console.log(request); + port.onMessage.removeListener(onInitialMessage); + switch (request.type) { + case 'auth-agent@openssh.com': + if (port.sender.id && allowedToAccessSshAgent(port.sender.id, null)) { + handleSshAgentConnect(port, request); + } else { + port.disconnect(); + } + break; + default: + // TODO(mschilder): acl check? + handleWebPageConnect(port, request); + break; + } + }; + port.onMessage.addListener(onInitialMessage); + }); +} + +/** + * Set-up listeners for webpage connect. + * @param {Object} port connection is on. + * @param {Object} request that got received on port. + */ +function handleWebPageConnect(port, request) { + var closeable; + + var onMessage = function(request) { + console.log(UTIL_fmt('request')); + console.log(request); + closeable = handleWebPageRequest(request, port.sender, + function(response) { + response['requestId'] = request['requestId']; + port.postMessage(response); + }); + }; + + var onDisconnect = function() { + port.onMessage.removeListener(onMessage); + port.onDisconnect.removeListener(onDisconnect); + if (closeable) closeable.close(); + }; + + port.onMessage.addListener(onMessage); + port.onDisconnect.addListener(onDisconnect); + + // Start work on initial message. + onMessage(request); +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/blob.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/blob.js new file mode 100644 index 000000000000..5876da88267d --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/blob.js @@ -0,0 +1,302 @@ +// Copyright 2011 Google Inc. All Rights Reserved. + +/** + * @fileoverview Class to parse and generate SSH binary messages. + * @author mschilder@google.com (Marius Schilder) + */ +'use strict'; + +/** + * A class for generating SSH-compatible public keys. + * @param {Array=} x Storage for this blob, will be created if not + * provided. + * @constructor + */ +function SshBlob(x) { + /** + * This blob's buffer. + * @type {Array} + * @private + */ + this.buf_ = x ? x : []; + /** + * This blob's current read/write position. + * @type {number} + * @private + */ + this.rptr_ = 0; +} + +/** @return {number} This blob's length, in bytes. */ +SshBlob.prototype.size = function() { + return this.buf_.length; +}; + +/** @return {Array} This blob's underlying buffer. */ +SshBlob.prototype.data = function() { + return this.buf_; +}; + +/** @return {SshBlob} a copy of this */ +SshBlob.prototype.copy = function() { + return new SshBlob(this.buf_.slice(0)); +}; + +/** + * Resets this blob's underlying array. + * @param {Array=} opt_array Array with which to reset the blob. + */ +SshBlob.prototype.reset = function(opt_array) { + this.buf_ = opt_array ? opt_array : []; + this.rptr_ = 0; +}; + +/** Sets this blob's buffer to all 0's, and resets the buffer. */ +SshBlob.prototype.clear = function() { + if (this.buf_) { + for (var i = 0; i < this.buf_.length; ++i) + this.buf_[i] = 0; + } + this.reset(); +}; + +/** Resets the blob's read pointer to the beginning of the buffer. */ +SshBlob.prototype.rewind = function() { + this.rptr_ = 0; +}; + +/** + * Resizes this blob to the given size, which must be within the blob's + * existing size. + * @param {number} s The new size of the blob. + */ +SshBlob.prototype.resize = function(s) { + if (s < 0 || s > this.buf_.length) { + throw new RangeError('Illegal resize ' + s); + } + this.buf_ = this.buf_.splice(0, s); + this.rptr_ = 0; +}; + +/** + * Crops this blob's buffer to begin at the current read position or the + * specified position. + * @param {?number} opt_cnt The beginning position at which to crop. + */ +SshBlob.prototype.crop = function(opt_cnt) { + var cnt = opt_cnt ? opt_cnt : this.rptr_; + this.buf_ = this.buf_.slice(cnt); + this.rptr_ = 0; +}; + +/** + * Unpads this blob the SSH way. + * @param {number=} s + * @return {SshBlob} This blob. + */ +SshBlob.prototype.unpad = function(s) { + if (this.rptr_ != 0) { + throw new RangeError('rptr_ != 0'); + } + var size = s ? s : this.readSize(); + var padlen = this.readByte(); + if (size < (padlen + 1)) { + throw new RangeError('SshBlob too small'); + } + this.crop(); + size -= (padlen + 1); + this.resize(size); + return this; +}; + +/** + * Reads the byte at the current read position. + * @return {number} Read byte. + */ +SshBlob.prototype.readByte = function() { + if (this.rptr_ + 1 > this.buf_.length) { + throw new RangeError('End of SshBlob'); + } + return this.buf_[this.rptr_++] & 255; +}; + +/** + * Reads the big-endian integer at the current read position. + * @return {number} The read size. + */ +SshBlob.prototype.readSize = function() { + if (this.rptr_ + 4 > this.buf_.length) { + throw new RangeError('End of SshBlob'); + } + var rp = this.rptr_; + var tmp = ((this.buf_[rp + 0] & 255) << 24) | + ((this.buf_[rp + 1] & 255) << 16) | + ((this.buf_[rp + 2] & 255) << 8) | + ((this.buf_[rp + 3] & 255)); + this.rptr_ += 4; + return tmp; +}; + +/** + * Reads the specified number of bytes from this blob and returns them as an + * array. + * @param {number} n Number of bytes to read. + * @return {Array} Read bytes. + */ +SshBlob.prototype.readBytes = function(n) { + if (this.rptr_ + n > this.buf_.length) { + throw new RangeError('End of SshBlob'); + } + var tmp = this.buf_.slice(this.rptr_, this.rptr_ + n); + this.rptr_ += n; + return tmp; +}; + +/** + * Reads a length-prefixed byte string and returns its value. + * @return {Array} Read byte string. + */ +SshBlob.prototype.readByteString = function() { + var n = this.readSize(); + return this.readBytes(n); +}; + +/** + * Reads a length-prefixed character string and returns its value. + * @return {string} Read string. + */ +SshBlob.prototype.readString = function() { + var n = this.readSize(); + return UTIL_BytesToString(this.readBytes(n)); +}; + +/** + * Useful for reading initial hello out of socket receive buffer blob. + * @return {Array} Terminated by 0x0a. + */ +SshBlob.prototype.peekEoln = function() { + if (this.rptr_ != 0) { + throw new RangeError('rptr_ != 0'); + } + var i = 0; + var tmp = []; + for (; i < this.buf_.length && this.buf_[i] !== 0xa; ++i) { + if (this.buf_[i] !== 0x0d) { + tmp.push(this.buf_[i]); + } + } + if (i >= this.buf_.length) return null; + this.buf_ = this.buf_.slice(i + 1); // Drop read data from this. + return tmp; +}; + +/** + * @return {number} -1 if SshBlob < 4 bytes. Otherwise, return 32-bit value. + */ +SshBlob.prototype.peekSize = function() { + if (this.rptr_ != 0) return -1; + if (this.buf_.length < 4) return -1; + var t = this.buf_.slice(0, 4); // peek, don't read yet + var n = ((t[0] & 255) << 24) | + ((t[1] & 255) << 16) | + ((t[2] & 255) << 8) | + ((t[3] & 255)); + return n; +}; + +/** + * Reads the length-prefixed blob at the current read position and returns it. + * @return {SshBlob} Read blob. + */ +SshBlob.prototype.readSshBlob = function() { + var n = this.readSize(); + return new SshBlob(this.readBytes(n)); +}; + +/** + * Appends the given byte to this blob. + * @param {number} b + */ +SshBlob.prototype.appendByte = function(b) { + this.buf_.push(b & 255); +}; + +/** + * Appends the given array to this blob. + * @param {Array|Uint8Array} array The array to append. + */ +SshBlob.prototype.appendBytes = function(array) { + var a = array; + if (array.buffer) { // Uint8Array argument. + a = new Array(array.length); + for (var i = 0; i < a.length; ++i) a[i] = array[i]; + } + this.buf_ = this.buf_.concat(a); +}; + +/** + * Appends the value of n as an integer to this blob. + * @param {number} n + */ +SshBlob.prototype.appendSize = function(n) { + this.buf_.push((n >> 24) & 255); + this.buf_.push((n >> 16) & 255); + this.buf_.push((n >> 8) & 255); + this.buf_.push((n) & 255); +}; + +/** + * Appends an array as a length-prefixed byte array to this blob. + * @param {Array|Uint8Array} array The array to append. + */ +SshBlob.prototype.appendByteString = function(array) { + this.appendSize(array.length); + this.appendBytes(array); +}; + +/** + * Appends the given string to this blob. + * @param {string} s + */ +SshBlob.prototype.appendString = function(s) { + var a = UTIL_StringToBytes(s); + this.appendSize(a.length); + this.appendBytes(a); +}; + +/** + * Appends the given blob to this one. + * @param {SshBlob} b + */ +SshBlob.prototype.appendSshBlob = function(b) { + this.appendSize(b.buf_.length); + this.appendBytes(b.buf_); +}; + +/** + * Formats this blob's contents for debugging. + * @param {string=} tag value to prepend to debugging output. + * @return {string} debug string. + */ +SshBlob.prototype.fmt = function(tag) { + tag = tag ? (tag + '[' + this.buf_.length + ']:') : ''; + return UTIL_fmt(tag + UTIL_BytesToHex(this.buf_)); +}; + +/** + * Output debugging info with the provided tag. + * @param {string=} tag + */ +SshBlob.prototype.print = function(tag) { + console.log(this.fmt(tag)); +}; + +/** + * Compute string fingerprint for this. + * @return {string} Base64-encoded SHA256 fingerprint. + */ +SshBlob.prototype.fingerprint = function() { + var sha = new SHA256(); + sha.update(this.buf_); + return B64_encode(sha.digest()); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/chainedhelper.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/chainedhelper.js new file mode 100644 index 000000000000..b70a9e9682d0 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/chainedhelper.js @@ -0,0 +1,172 @@ +/** + * @fileoverview Implements a helper that delegates to one or more helpers, and + * if those fail, chains to another helper upon failure. + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * @param {!HelperRequest} request The request to handle. + * @param {RequestHelper} delegatedHelper A helper to delegate to. + * @param {RequestHelper} chainedHelper A helper to retry with on certain + * failures. + * @param {(function(number): boolean|undefined)} opt_retryPredicate + * A function that returns, for a given helper error state, whether to retry + * the error with the chained helper. (Not providing the function implies + * the chained helper is always tried on error.) + * @constructor + * @implements {RequestHandler} + */ +function ChainedHandler(request, delegatedHelper, chainedHelper, + opt_retryPredicate) { + /** @private {!HelperRequest} */ + this.request_ = request; + /** @private {RequestHelper} */ + this.delegatedHelper_ = delegatedHelper; + /** @private {RequestHelper} */ + this.chainedHelper_ = chainedHelper; + /** @private {(function(number): boolean|undefined)} */ + this.retryPredicate_ = opt_retryPredicate; + + /** @private {boolean} */ + this.done_ = false; +} + +/** + * @param {RequestHandlerCallback} cb Called with the result of the request, + * and an optional source for the result. + * @return {boolean} Whether the request was accepted. + */ +ChainedHandler.prototype.run = function(cb) { + if (this.cb_) { + // Can only handle one request. + return false; + } + /** @private {RequestHandlerCallback} */ + this.cb_ = cb; + /** @private {RequestHandler} */ + this.handler_ = this.delegatedHelper_.getHandler(this.request_); + if (!this.handler_) { + return false; + } + return this.handler_.run(this.helperComplete_.bind(this)); +}; + +/** Closes this helper. */ +ChainedHandler.prototype.close = function() { + this.done_ = true; + if (this.handler_) { + this.handler_.close(); + } +}; + +/** + * Called by this helper's delegated helper upon completion. + * @param {HelperReply} reply The result of the request. + * @param {string=} opt_source The source of the result. + * @private + */ +ChainedHandler.prototype.helperComplete_ = function(reply, opt_source) { + if (this.done_) { + var logMsg = 'delegated helper returned'; + if (reply.code !== undefined) { + logMsg += ' ' + reply.code.toString(16); + } + logMsg += ' after close, ignoring'; + console.log(UTIL_fmt(logMsg)); + return; + } + if (reply.code) { + console.log(UTIL_fmt('delegated helper returned ' + reply.code)); + if (!this.retryPredicate_ || this.retryPredicate_(reply.code)) { + console.log(UTIL_fmt('retrying with chained helper')); + this.handler_ = this.chainedHelper_.getHandler(this.request_); + if (!this.handler_.run(this.notifyComplete_.bind(this))) { + // Seriously, closure? Why is this cast necessary? + var handlerFailedErrorCode = + /** @type {DeviceStatusCodes} */ ( + DeviceStatusCodes.INVALID_DATA_STATUS); + var error = makeHelperErrorResponse(this.request_, + handlerFailedErrorCode); + this.notifyComplete_(error, opt_source); + } + } else { + this.notifyComplete_(reply, opt_source); + } + } else { + this.notifyComplete_(reply, opt_source); + } +}; + +/** + * Call to indicate result to the caller. + * @param {HelperReply} reply The result of the sign request. + * @param {string=} opt_source The source of the sign result. + * @private + */ +ChainedHandler.prototype.notifyComplete_ = function(reply, opt_source) { + if (this.done_) + return; + this.close(); + this.cb_(reply, opt_source); +}; + +/** + * @param {RequestHelper} delegatedHelper A helper to delegate to. + * @param {RequestHelper} chainedHelper A helper to retry with on certain + * failures. + * @param {(function(number): boolean|undefined)} opt_retryPredicate + * A function that returns, for a given helper error state, whether to retry + * the error with the chained helper. (Not providing the function implies + * the chained helper is always tried on error.) + * @constructor + * @implements {RequestHelper} + */ +function ChainedHelper(delegatedHelper, chainedHelper, opt_retryPredicate) { + /** @private {RequestHelper} */ + this.delegatedHelper_ = delegatedHelper; + /** @private {RequestHelper} */ + this.chainedHelper_ = chainedHelper; + /** @private {(function(number): boolean|undefined)} */ + this.retryPredicate_ = opt_retryPredicate; +} + +/** + * @return {RequestHelper} This helper's chained helper. + */ +ChainedHelper.prototype.getChainedHelper = function() { + return this.chainedHelper_; +}; + +/** + * Resets this helper's chained helper. + * @param {RequestHelper} helper The new chained helper. + */ +ChainedHelper.prototype.setChainedHelper = function(helper) { + this.chainedHelper_ = helper; +}; + +/** + * @return {RequestHelper} This helper's delegated helper. + */ +ChainedHelper.prototype.getDelegatedHelper = function() { + return this.delegatedHelper_; +}; + +/** + * Resets this helper's delegated helper. + * @param {RequestHelper} helper The new delegated helper. + */ +ChainedHelper.prototype.setDelegatedHelper = function(helper) { + this.delegatedHelper_ = helper; +}; + +/** + * Gets a handler for a request. + * @param {HelperRequest} request The request to handle. + * @return {RequestHandler} A handler for the request. + */ +ChainedHelper.prototype.getHandler = function(request) { + return new ChainedHandler(request, this.delegatedHelper_, + this.chainedHelper_, this.retryPredicate_); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/check.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/check.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9c466d0df5fac34f86fdbdf746b4ad565285b5 GIT binary patch literal 597 zcmV-b0;>IqP)XgpCj#{BsLOLmTg zrKF4(C=^o4ae%LHWo1eV5KvJ4DE&fnGmqz)Yv?&|-jp!~pJ+9wXKFfLVE5kAGAZfr zU!b#7p^!>}!-u`RtgQh-CS#<)*m%mI-8DE~;IU&qKDM@iM50v6<$#4nQqrG4z4!U? z?4%gc(NhQgL_5iY_V$4gJ-yi2A3uOqs~jA(wR^8GTV`jcp#dZ(H#Qa*10f+bHJO=! zNW>V&p%>~x&yowRt CountdownTimer.TIMER_INTERVAL_MILLIS) { + this.timeoutId = + this.sysTimer_.setInterval(this.timerTick.bind(this), + CountdownTimer.TIMER_INTERVAL_MILLIS); + } else { + // Set a one-shot timer for the last interval. + this.timeoutId = + this.sysTimer_.setTimeout( + this.timerTick.bind(this), this.remainingMillis); + } + return true; +}; + +/** Clears this timer's timeout. Timers that are cleared become expired. */ +CountdownTimer.prototype.clearTimeout = function() { + if (this.timeoutId) { + this.sysTimer_.clearTimeout(this.timeoutId); + this.timeoutId = undefined; + } + this.remainingMillis = 0; +}; + +/** + * @return {number} how many milliseconds are remaining until the timer expires. + */ +CountdownTimer.prototype.millisecondsUntilExpired = function() { + return this.remainingMillis > 0 ? this.remainingMillis : 0; +}; + +/** @return {boolean} whether the timer has expired. */ +CountdownTimer.prototype.expired = function() { + return this.remainingMillis <= 0; +}; + +/** + * Constructs a new clone of this timer, while overriding its callback. + * @param {Function=} cb callback for new timer. + * @return {!Countdown} new clone. + */ +CountdownTimer.prototype.clone = function(cb) { + return new CountdownTimer(this.sysTimer_, this.remainingMillis, cb); +}; + +/** Timer callback. */ +CountdownTimer.prototype.timerTick = function() { + this.remainingMillis -= CountdownTimer.TIMER_INTERVAL_MILLIS; + if (this.expired()) { + this.sysTimer_.clearTimeout(this.timeoutId); + this.timeoutId = undefined; + if (this.cb) { + this.cb(); + } + } +}; + +/** + * A factory for creating CountdownTimers. + * @param {!SystemTimer} sysTimer The system timer implementation. + * @constructor + * @implements {CountdownFactory} + */ +function CountdownTimerFactory(sysTimer) { + /** @private {!SystemTimer} */ + this.sysTimer_ = sysTimer; +} + +/** + * Creates a new timer. + * @param {number} timeoutMillis How long, in milliseconds, the countdown lasts. + * @param {function()=} opt_cb Called back when the countdown expires. + * @return {!Countdown} The timer. + */ +CountdownTimerFactory.prototype.createTimer = + function(timeoutMillis, opt_cb) { + return new CountdownTimer(this.sysTimer_, timeoutMillis, opt_cb); +}; + +/** + * Minimum timeout attenuation, below which a response couldn't be reasonably + * guaranteed, in seconds. + * @const + */ +var MINIMUM_TIMEOUT_ATTENUATION_SECONDS = 1; + +/** + * @param {number} timeoutSeconds Timeout value in seconds. + * @param {number=} opt_attenuationSeconds Attenuation value in seconds. + * @return {number} The timeout value, attenuated to ensure a response can be + * given before the timeout's expiration. + */ +function attenuateTimeoutInSeconds(timeoutSeconds, opt_attenuationSeconds) { + var attenuationSeconds = + opt_attenuationSeconds || MINIMUM_TIMEOUT_ATTENUATION_SECONDS; + if (timeoutSeconds < attenuationSeconds) + return 0; + return timeoutSeconds - attenuationSeconds; +} + +/** + * Default request timeout when none is present in the request, in seconds. + * @const + */ +var DEFAULT_REQUEST_TIMEOUT_SECONDS = 30; + +/** + * Gets the timeout value from the request, if any, substituting + * opt_defaultTimeoutSeconds or DEFAULT_REQUEST_TIMEOUT_SECONDS if the request + * does not contain a timeout value. + * @param {Object} request The request containing the timeout. + * @param {number=} opt_defaultTimeoutSeconds + * @return {number} Timeout value, in seconds. + */ +function getTimeoutValueFromRequest(request, opt_defaultTimeoutSeconds) { + var timeoutValueSeconds; + if (request.hasOwnProperty('timeoutSeconds')) { + timeoutValueSeconds = request['timeoutSeconds']; + } else if (request.hasOwnProperty('timeout')) { + timeoutValueSeconds = request['timeout']; + } else if (opt_defaultTimeoutSeconds !== undefined) { + timeoutValueSeconds = opt_defaultTimeoutSeconds; + } else { + timeoutValueSeconds = DEFAULT_REQUEST_TIMEOUT_SECONDS; + } + return timeoutValueSeconds; +} + +/** + * Creates a new countdown for the given timeout value, attenuated to ensure a + * response is given prior to the countdown's expiration, using the given timer + * factory. + * @param {CountdownFactory} timerFactory The factory to use. + * @param {number} timeoutValueSeconds + * @param {number=} opt_attenuationSeconds Attenuation value in seconds. + * @return {!Countdown} A countdown timer. + */ +function createAttenuatedTimer(timerFactory, timeoutValueSeconds, + opt_attenuationSeconds) { + timeoutValueSeconds = attenuateTimeoutInSeconds(timeoutValueSeconds, + opt_attenuationSeconds); + return timerFactory.createTimer(timeoutValueSeconds * 1000); +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.js new file mode 100644 index 000000000000..cbe5664fda5f --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.js @@ -0,0 +1,99 @@ +/** + * @fileoverview Debugging related routines. + */ + + +/** + * Creates a browser data object with the given values. + * @param {!string} type A string representing the "type" of this browser data + * object. + * @param {!string} serverChallenge The server's challenge, as a base64- + * encoded string. + * @param {!string} origin The server's origin, as seen by the browser. + * @param {Object|string|undefined} opt_tlsChannelId TLS Channel Id + * @return {string} A string representation of the browser data object. + * @private + */ +function originStrippingMakeBrowserData_( + type, serverChallenge, origin, opt_tlsChannelId) { + var browserDataString = original_makeBrowserData(type, serverChallenge, + origin, opt_tlsChannelId); + var browserData = JSON.parse(browserDataString); + delete browserData.origin; + return JSON.stringify(browserData); +} + +/** + * An implementation of AppIdChecker that always returns true. + * @constructor + * @implements AppIdChecker + */ +function AllowAnyAppIdChecker() {} + +/** + * Checks whether all the app ids provided can be asserted by the given origin. + * @param {!Countdown} timer A timer by which to resolve all provided app ids. + * @param {string} origin The origin to check. + * @param {!Array} appIds The app ids to check. + * @param {boolean} allowHttp Whether to allow http:// URLs. + * @param {string=} opt_logMsgUrl A log message URL. + * @return {Promise} A promise for the result of the check + */ +AllowAnyAppIdChecker.prototype.checkAppIds = + function(timer, origin, appIds, allowHttp, opt_logMsgUrl) { + return Promise.resolve(true); +}; + +/** Closes this checker. */ +AllowAnyAppIdChecker.prototype.close = function() {}; + +/** + * A factory to create a AllowAnyAppIdChecker. + * @implements AppIdCheckerFactory + * @constructor + */ +function AllowAnyAppIdCheckerFactory() { + /** @private {!AppIdChecker} */ + this.checker_ = new AllowAnyAppIdChecker(); +} + +/** + * @return {!AppIdChecker} A new AppIdChecker. + */ +AllowAnyAppIdCheckerFactory.prototype.create = function() { + return this.checker_; +}; + +var original_makeBrowserData; +var original_appIdCheckerFactory; + +function enableLocalTestingHacks() { + window.HTTP_ORIGINS_ALLOWED = true; + if (!original_makeBrowserData) { + original_makeBrowserData = makeBrowserData; + makeBrowserData = originStrippingMakeBrowserData_; + } + if (!original_appIdCheckerFactory) { + original_appIdCheckerFactory = FACTORY_REGISTRY.getAppIdCheckerFactory(); + FACTORY_REGISTRY.appIdCheckerFactory_ = new AllowAnyAppIdCheckerFactory(); + } +} + +function disableLocalTestingHacks() { + window.HTTP_ORIGINS_ALLOWED = false; + if (original_makeBrowserData) { + // Static type inference FTL. original_makeBrowserData is obviously not + // undefined here, due to the if clause that got us here, but the assignment + // below appears to confuse the static type checker. + makeBrowserData = + /** @type {function(string, string, string, (Object|string|undefined)): + * string} + */ + (original_makeBrowserData); + original_makeBrowserData = undefined; + } + if (original_appIdCheckerFactory) { + FACTORY_REGISTRY.appIdCheckerFactory_ = original_appIdCheckerFactory; + original_appIdCheckerFactory = undefined; + } +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/debug.png new file mode 100644 index 0000000000000000000000000000000000000000..b305fe61d77db8e92b2d3eee267e6f2c39bb0472 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYdOcknLn;{GUfwQv$U(p%@YIe7 zL6e2s%tBYp``{ZRxPxQ5uKfF(k(~VX&z3%4pY&DVQCzuX!h#ar7maFMOK+H2N|rR` zzLLLk#y+FLL0^F7{Q^s+FKrz%>x_~w@chf;d$odBcR}XbGy8*%pE@cL^1w@AVp4%o xguJHGk^g?3Ss6)vY^x%~;{Gr8;{BD+_;Yu{hd}p;NT9@k literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delegatinghelper.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delegatinghelper.js new file mode 100644 index 000000000000..cb85b07dd8be --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delegatinghelper.js @@ -0,0 +1,177 @@ +/** + * @fileoverview Implements a delegating helper, i.e. one that delegates its + * operations to other helpers. + * @author juanlang@google.com (Juan Lang) + */ + +/** + * @typedef {{ + * helper: !RequestHelper, + * handler: RequestHandler, + * complete: boolean + * }} + */ +var DelegatedHandlerTracker; + +/** + * @param {!HelperRequest} request Request to handle. + * @param {!Array} helpers Helpers to delegate to. + * @constructor + * @implements {RequestHandler} + */ +function DelegatingRequestHandler(request, helpers) { + /** @private {!HelperRequest} */ + this.request_ = request; + /** @private {!Array} */ + this.trackers_ = []; + for (var i = 0; i < helpers.length; i++) { + var tracker = { + helper: helpers[i], + handler: null, + done: false + }; + this.trackers_.push(tracker); + } + /** @private {boolean} */ + this.done_ = false; + /** @private {number} */ + this.stillRunningHelpers_ = 0; +} + +/** + * @param {RequestHandlerCallback} cb Called with the result of the request and + * an optional source for the result. + * @return {boolean} Whether any of this helper's helpers accepted the request. + */ +DelegatingRequestHandler.prototype.run = function(cb) { + if (this.cb_) { + // Can only handle one request. + return false; + } + /** @private {RequestHandlerCallback} */ + this.cb_ = cb; + + var accepted = false; + for (var i = 0; i < this.trackers_.length; i++) { + var tracker = this.trackers_[i]; + tracker.handler = tracker.helper.getHandler(this.request_); + if (tracker.handler) { + if (tracker.handler.run(this.helperComplete_.bind(this, tracker, i))) { + console.log(UTIL_fmt('helper ' + i + ' accepted request')); + accepted = true; + this.stillRunningHelpers_++; + } + } + } + return accepted; +}; + +/** Closes this helper. */ +DelegatingRequestHandler.prototype.close = function() { + this.done_ = true; + for (var i = 0; i < this.trackers_.length; i++) { + if (this.trackers_[i].handler) { + this.trackers_[i].handler.close(); + } + } +}; + +/** + * Called by a helper upon completion. + * @param {DelegatedHandlerTracker} tracker The object tracking the helper. + * @param {number} index The index of the helper that completed. + * @param {HelperReply} reply The result of the sign request. + * @param {string=} opt_source The source of the sign result. + * @private + */ +DelegatingRequestHandler.prototype.helperComplete_ = + function(tracker, index, reply, opt_source) { + var logMsg = 'helper ' + index + ' completed '; + if (reply.code !== undefined) { + logMsg += 'with ' + reply.code.toString(16); + } + if (this.done_) { + logMsg += ' after completion, ignoring'; + console.log(UTIL_fmt(logMsg)); + return; + } + if (tracker.complete) { + logMsg += ' after helper completion, ignoring'; + console.warn(UTIL_fmt(logMsg)); + return; + } + console.log(UTIL_fmt(logMsg)); + tracker.complete = true; + if (reply.code) { + if (!this.stillRunningHelpers_) { + console.error('Wtf? helperComplete has no helper left.'); + } else if (!--this.stillRunningHelpers_) { + this.close(); + console.log(UTIL_fmt('last delegated helper completed, returning ' + + reply.code.toString(16))); + this.cb_(reply, opt_source); + } + } else { + this.close(); + this.cb_(reply, opt_source); + } +}; + +/** + * A helper that delegates to other helpers. + * @constructor + * @implements {RequestHelper} + */ +function DelegatingHelper() { + /** @private {!Array} */ + this.helpers_ = []; + /** @private {!Object} */ + this.externalHelperIds_ = {}; +} + +/** + * Adds a helper to this helper's helpers, if it's not already present. + * @param {!RequestHelper} helper Helper to add. + */ +DelegatingHelper.prototype.addHelper = function(helper) { + // The external helper is a little special, because it's dynamically + // created and registered in response to registration events, and could be + // registered more than once. (It sucks to have to do this, but without a + // pattern like Java's .equals(), I'm not sure what else to do.) + if (helper.constructor == ExternalHelper) { + if (!this.externalHelperIds_[helper.getHelperAppId()]) { + this.externalHelperIds_[helper.getHelperAppId()] = + helper.getHelperAppId(); + this.helpers_.push(helper); + } else { + // Same app id already exists, but maybe it's gotten stale for whatever + // reason. Replace the existing helper with the one given. + var found = false; + for (var i = 0; i < this.helpers_.length; i++) { + if (this.helpers_[i].constructor == ExternalHelper && + this.helpers_[i].getHelperAppId() == helper.getHelperAppId()) { + this.helpers_[i] = helper; + found = true; + break; + } + } + if (!found) { + // Inconsistent state, the app id was in this.externalHelperIds_ but + // not found in this.helpers_. Just add to this.helpers_. + this.helpers_.push(helper); + } + } + } else if (this.helpers_.indexOf(helper) == -1) { + this.helpers_.push(helper); + } +}; + +/** + * Gets a handler for a request. + * @param {HelperRequest} request The request to handle. + * @return {RequestHandler} A handler for the request. + */ +DelegatingHelper.prototype.getHandler = function(request) { + var handler = new DelegatingRequestHandler(request, this.helpers_); + return /** @type {RequestHandler} */ (handler); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delete.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..21809fc3e1237b9519605e4026f1c2cf6da052c9 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYR6SiBLn;`P6} enrollChallenges The enroll challenges to + * validate. + * @param {boolean} appIdRequired Whether the appId property is required on + * each challenge. + * @return {boolean} Whether the given array of challenges is a valid enroll + * challenges array. + */ +function isValidEnrollChallengeArray(enrollChallenges, appIdRequired) { + var seenVersions = {}; + for (var i = 0; i < enrollChallenges.length; i++) { + var enrollChallenge = enrollChallenges[i]; + var version = enrollChallenge['version']; + if (!version) { + // Version is implicitly V1 if not specified. + version = 'U2F_V1'; + } + if (version != 'U2F_V1' && version != 'U2F_V2') { + return false; + } + if (seenVersions[version]) { + // Each version can appear at most once. + return false; + } + seenVersions[version] = version; + if (appIdRequired && !enrollChallenge['appId']) { + return false; + } + if (!enrollChallenge['challenge']) { + // The challenge is required. + return false; + } + } + return true; +} + +/** + * Finds the enroll challenge of the given version in the enroll challlenge + * array. + * @param {Array} enrollChallenges The enroll challenges to + * search. + * @param {string} version Version to search for. + * @return {?EnrollChallenge} The enroll challenge with the given versions, or + * null if it isn't found. + */ +function findEnrollChallengeOfVersion(enrollChallenges, version) { + for (var i = 0; i < enrollChallenges.length; i++) { + if (enrollChallenges[i]['version'] == version) { + return enrollChallenges[i]; + } + } + return null; +} + +/** + * Makes a responseData object for the enroll request with the given parameters. + * @param {EnrollChallenge} enrollChallenge The enroll challenge used to + * register. + * @param {string} u2fVersion Version of gnubby that enrolled. + * @param {string} registrationData The registration data. + * @param {string=} opt_clientData The client data, if available. + * @return {Object} The responseData object. + */ +function makeEnrollResponseData(enrollChallenge, u2fVersion, registrationData, + opt_clientData) { + var responseData = {}; + responseData['registrationData'] = registrationData; + // Echo the used challenge back in the reply. + for (var k in enrollChallenge) { + responseData[k] = enrollChallenge[k]; + } + if (u2fVersion == 'U2F_V2') { + // For U2F_V2, the challenge sent to the gnubby is modified to be the + // hash of the client data. Include the client data. + responseData['clientData'] = opt_clientData; + } + return responseData; +} + +/** + * Gets the expanded sign challenges from an enroll request, potentially by + * modifying the request to contain a challenge value where one was omitted. + * (For enrolling, the server isn't interested in the value of a signature, + * only whether the presented key handle is already enrolled.) + * @param {Object} request The request. + * @return {Array} + */ +function getSignRequestsFromEnrollRequest(request) { + var signChallenges; + if (request.hasOwnProperty('registeredKeys')) { + signChallenges = request['registeredKeys']; + } else { + signChallenges = request['signRequests']; + } + if (signChallenges) { + for (var i = 0; i < signChallenges.length; i++) { + // Make sure each sign challenge has a challenge value. + // The actual value doesn't matter, as long as it's a string. + if (!signChallenges[i].hasOwnProperty('challenge')) { + signChallenges[i]['challenge'] = ''; + } + } + } + return signChallenges; +} + +/** + * Creates a new object to track enrolling with a gnubby. + * @param {!Countdown} timer Timer for enroll request. + * @param {!WebRequestSender} sender The sender of the request. + * @param {function(U2fError)} errorCb Called upon enroll failure. + * @param {function(string, string, (string|undefined))} successCb Called upon + * enroll success with the version of the succeeding gnubby, the enroll + * data, and optionally the browser data associated with the enrollment. + * @param {string=} opt_logMsgUrl The url to post log messages to. + * @constructor + */ +function Enroller(timer, sender, errorCb, successCb, opt_logMsgUrl) { + /** @private {Countdown} */ + this.timer_ = timer; + /** @private {WebRequestSender} */ + this.sender_ = sender; + /** @private {function(U2fError)} */ + this.errorCb_ = errorCb; + /** @private {function(string, string, (string|undefined))} */ + this.successCb_ = successCb; + /** @private {string|undefined} */ + this.logMsgUrl_ = opt_logMsgUrl; + + /** @private {boolean} */ + this.done_ = false; + + /** @private {Object} */ + this.browserData_ = {}; + /** @private {Array} */ + this.encodedEnrollChallenges_ = []; + /** @private {Array} */ + this.encodedSignChallenges_ = []; + // Allow http appIds for http origins. (Broken, but the caller deserves + // what they get.) + /** @private {boolean} */ + this.allowHttp_ = + this.sender_.origin ? this.sender_.origin.indexOf('http://') == 0 : false; + /** @private {Closeable} */ + this.handler_ = null; +} + +/** + * Default timeout value in case the caller never provides a valid timeout. + */ +Enroller.DEFAULT_TIMEOUT_MILLIS = 30 * 1000; + +/** + * Performs an enroll request with the given enroll and sign challenges. + * @param {Array} enrollChallenges A set of enroll challenges. + * @param {Array} signChallenges A set of sign challenges for + * existing enrollments for this user and appId. + * @param {string=} opt_appId The app id for the entire request. + */ +Enroller.prototype.doEnroll = function(enrollChallenges, signChallenges, + opt_appId) { + /** @private {Array} */ + this.enrollChallenges_ = enrollChallenges; + /** @private {Array} */ + this.signChallenges_ = signChallenges; + /** @private {(string|undefined)} */ + this.appId_ = opt_appId; + var self = this; + getTabIdWhenPossible(this.sender_).then(function() { + if (self.done_) return; + self.approveOrigin_(); + }, function() { + self.close(); + self.notifyError_({errorCode: ErrorCodes.BAD_REQUEST}); + }); +}; + +/** + * Ensures the user has approved this origin to use security keys, sending + * to the request to the handler if/when the user has done so. + * @private + */ +Enroller.prototype.approveOrigin_ = function() { + var self = this; + FACTORY_REGISTRY.getApprovedOrigins() + .isApprovedOrigin(this.sender_.origin, this.sender_.tabId) + .then(function(result) { + if (self.done_) return; + if (!result) { + // Origin not approved: rather than give an explicit indication to + // the web page, let a timeout occur. + // NOTE: if you are looking at this in a debugger, this line will + // always be false since the origin of the debugger is different + // than origin of requesting page + if (self.timer_.expired()) { + self.notifyTimeout_(); + return; + } + var newTimer = self.timer_.clone(self.notifyTimeout_.bind(self)); + self.timer_.clearTimeout(); + self.timer_ = newTimer; + return; + } + self.sendEnrollRequestToHelper_(); + }); +}; + +/** + * Notifies the caller of a timeout error. + * @private + */ +Enroller.prototype.notifyTimeout_ = function() { + this.notifyError_({errorCode: ErrorCodes.TIMEOUT}); +}; + +/** + * Performs an enroll request with this instance's enroll and sign challenges, + * by encoding them into a helper request and passing the resulting request to + * the factory registry's helper. + * @private + */ +Enroller.prototype.sendEnrollRequestToHelper_ = function() { + var encodedEnrollChallenges = + this.encodeEnrollChallenges_(this.enrollChallenges_, this.appId_); + // If the request didn't contain a sign challenge, provide one. The value + // doesn't matter. + var defaultSignChallenge = ''; + var encodedSignChallenges = + encodeSignChallenges(this.signChallenges_, defaultSignChallenge, + this.appId_); + var request = { + type: 'enroll_helper_request', + enrollChallenges: encodedEnrollChallenges, + signData: encodedSignChallenges, + logMsgUrl: this.logMsgUrl_ + }; + if (!this.timer_.expired()) { + request.timeout = this.timer_.millisecondsUntilExpired() / 1000.0; + request.timeoutSeconds = this.timer_.millisecondsUntilExpired() / 1000.0; + } + + // Begin fetching/checking the app ids. + var enrollAppIds = []; + if (this.appId_) { + enrollAppIds.push(this.appId_); + } + for (var i = 0; i < this.enrollChallenges_.length; i++) { + if (this.enrollChallenges_[i].hasOwnProperty('appId')) { + enrollAppIds.push(this.enrollChallenges_[i]['appId']); + } + } + // Sanity check + if (!enrollAppIds.length) { + console.warn(UTIL_fmt('empty enroll app ids?')); + this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST}); + return; + } + var self = this; + this.checkAppIds_(enrollAppIds, function(result) { + if (self.done_) return; + if (result) { + self.handler_ = FACTORY_REGISTRY.getRequestHelper().getHandler(request); + if (self.handler_) { + var helperComplete = + /** @type {function(HelperReply)} */ + (self.helperComplete_.bind(self)); + self.handler_.run(helperComplete); + } else { + self.notifyError_({errorCode: ErrorCodes.OTHER_ERROR}); + } + } else { + self.notifyError_({errorCode: ErrorCodes.BAD_REQUEST}); + } + }); +}; + +/** + * Encodes the enroll challenge as an enroll helper challenge. + * @param {EnrollChallenge} enrollChallenge The enroll challenge to encode. + * @param {string=} opt_appId The app id for the entire request. + * @return {EnrollHelperChallenge} The encoded challenge. + * @private + */ +Enroller.encodeEnrollChallenge_ = function(enrollChallenge, opt_appId) { + var encodedChallenge = {}; + var version; + if (enrollChallenge['version']) { + version = enrollChallenge['version']; + } else { + // Version is implicitly V1 if not specified. + version = 'U2F_V1'; + } + encodedChallenge['version'] = version; + encodedChallenge['challengeHash'] = enrollChallenge['challenge']; + var appId; + if (enrollChallenge['appId']) { + appId = enrollChallenge['appId']; + } else { + appId = opt_appId; + } + if (!appId) { + // Sanity check. (Other code should fail if it's not set.) + console.warn(UTIL_fmt('No appId?')); + } + encodedChallenge['appIdHash'] = B64_encode(sha256HashOfString(appId)); + return /** @type {EnrollHelperChallenge} */ (encodedChallenge); +}; + +/** + * Encodes the given enroll challenges using this enroller's state. + * @param {Array} enrollChallenges The enroll challenges. + * @param {string=} opt_appId The app id for the entire request. + * @return {!Array} The encoded enroll challenges. + * @private + */ +Enroller.prototype.encodeEnrollChallenges_ = function(enrollChallenges, + opt_appId) { + var challenges = []; + for (var i = 0; i < enrollChallenges.length; i++) { + var enrollChallenge = enrollChallenges[i]; + var version = enrollChallenge.version; + if (!version) { + // Version is implicitly V1 if not specified. + version = 'U2F_V1'; + } + + if (version == 'U2F_V2') { + var modifiedChallenge = {}; + for (var k in enrollChallenge) { + modifiedChallenge[k] = enrollChallenge[k]; + } + // V2 enroll responses contain signatures over a browser data object, + // which we're constructing here. The browser data object contains, among + // other things, the server challenge. + var serverChallenge = enrollChallenge['challenge']; + var browserData = makeEnrollBrowserData( + serverChallenge, this.sender_.origin, this.sender_.tlsChannelId); + // Replace the challenge with the hash of the browser data. + modifiedChallenge['challenge'] = + B64_encode(sha256HashOfString(browserData)); + this.browserData_[version] = + B64_encode(UTIL_StringToBytes(browserData)); + challenges.push(Enroller.encodeEnrollChallenge_( + /** @type {EnrollChallenge} */ (modifiedChallenge), opt_appId)); + } else { + challenges.push( + Enroller.encodeEnrollChallenge_(enrollChallenge, opt_appId)); + } + } + return challenges; +}; + +/** + * Checks the app ids associated with this enroll request, and calls a callback + * with the result of the check. + * @param {!Array} enrollAppIds The app ids in the enroll challenge + * portion of the enroll request. + * @param {function(boolean)} cb Called with the result of the check. + * @private + */ +Enroller.prototype.checkAppIds_ = function(enrollAppIds, cb) { + var appIds = + UTIL_unionArrays(enrollAppIds, getDistinctAppIds(this.signChallenges_)); + FACTORY_REGISTRY.getOriginChecker() + .canClaimAppIds(this.sender_.origin, appIds) + .then(this.originChecked_.bind(this, appIds, cb)); +}; + +/** + * Called with the result of checking the origin. When the origin is allowed + * to claim the app ids, begins checking whether the app ids also list the + * origin. + * @param {!Array} appIds The app ids. + * @param {function(boolean)} cb Called with the result of the check. + * @param {boolean} result Whether the origin could claim the app ids. + * @private + */ +Enroller.prototype.originChecked_ = function(appIds, cb, result) { + if (!result) { + this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST}); + return; + } + var appIdChecker = FACTORY_REGISTRY.getAppIdCheckerFactory().create(); + appIdChecker. + checkAppIds( + this.timer_.clone(), this.sender_.origin, appIds, this.allowHttp_, + this.logMsgUrl_) + .then(cb); +}; + +/** Closes this enroller. */ +Enroller.prototype.close = function() { + if (this.handler_) { + this.handler_.close(); + this.handler_ = null; + } + this.done_ = true; +}; + +/** + * Notifies the caller with the error. + * @param {U2fError} error Error. + * @private + */ +Enroller.prototype.notifyError_ = function(error) { + if (this.done_) + return; + this.close(); + this.done_ = true; + this.errorCb_(error); +}; + +/** + * Notifies the caller of success with the provided response data. + * @param {string} u2fVersion Protocol version + * @param {string} info Response data + * @param {string|undefined} opt_browserData Browser data used + * @private + */ +Enroller.prototype.notifySuccess_ = + function(u2fVersion, info, opt_browserData) { + if (this.done_) + return; + this.close(); + this.done_ = true; + this.successCb_(u2fVersion, info, opt_browserData); +}; + +/** + * Called by the helper upon completion. + * @param {EnrollHelperReply} reply The result of the enroll request. + * @private + */ +Enroller.prototype.helperComplete_ = function(reply) { + if (reply.code) { + var reportedError = mapDeviceStatusCodeToU2fError(reply.code); + console.log(UTIL_fmt('helper reported ' + reply.code.toString(16) + + ', returning ' + reportedError.errorCode)); + this.notifyError_(reportedError); + } else { + console.log(UTIL_fmt('Gnubby enrollment succeeded!!!!!')); + var browserData; + + if (reply.version == 'U2F_V2') { + // For U2F_V2, the challenge sent to the gnubby is modified to be the hash + // of the browser data. Include the browser data. + browserData = this.browserData_[reply.version]; + } + + this.notifySuccess_(/** @type {string} */ (reply.version), + /** @type {string} */ (reply.enrollData), + browserData); + } +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/enrollresponse.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/enrollresponse.js new file mode 100644 index 000000000000..0e040ed9b98d --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/enrollresponse.js @@ -0,0 +1,90 @@ +/** + * @fileoverview Provides utilities to parse an enroll response. + */ +'use strict'; + +/** + * Gets the byte length of a length field from its first byte. + * @param {number} b The first byte of the length field. + * @return {number} The number of length bytes. + */ +function getLenBytes(b) { + if (b <= 0x80) { + return 1; + } + return 1 + (b & 0x7f); +} + +/** @const */ +var ASN_LENGTH_INDEFINITE = 0xffffffff; + +/** + * Gets the length of the DER-encoded input. + * @param {Uint8Array} u8 The DER-encoded input. + * @return {number} The length of the input, or ASN_LENGTH_INDEFINITE if the + * input has indefinite-length encoding. + */ +function getLengthIndefinite(u8) { + if (u8[1] <= 0x7f) { + return u8[1]; + } + if (u8[1] == 0x80) { + return ASN_LENGTH_INDEFINITE; + } + var lenLen = getLenBytes(u8[1]); + var out = 0; + var offs = 2; + while (--lenLen) { + out <<= 8; + out |= u8[offs++]; + } + return out; +} + +/** + * @typedef {{ + * publicKey: Uint8Array, + * keyHandle: Uint8Array, + * cert: Uint8Array + * }} + */ +var U2fEnrollResponse; + +/** + * Parses the gnubby enroll response into easier-to-parse fields. + * @param {Uint8Array} u8 The enroll response from the gnubby. + * @return {?U2fEnrollResponse} The parsed enroll response. + */ +function parseEnrollResponse(u8) { + if (u8[0] != 5) { + console.warn(UTIL_fmt('Unexpected initial byte: ' + + UTIL_BytesToHex([u8[0]]))); + return null; + } + if (u8[1] != 4) { + console.warn(UTIL_fmt('Unexpected start of public key: ' + + UTIL_BytesToHex([u8[1]]))); + return null; + } + var response = {}; + var khOffs = 66; + response.publicKey = u8.subarray(1, khOffs); + var khLen = u8[khOffs]; + response.keyHandle = u8.subarray(khOffs + 1, khOffs + khLen + 1); + var certOffs = khOffs + 1 + khLen; + if (u8[certOffs] != UTIL_ASN_SEQUENCE) { + console.warn(UTIL_fmt('Unexpected certificate initial byte: ' + + UTIL_BytesToHex([u8[certOffs]]))); + return null; + } + var innerCertLen = getLengthIndefinite(u8.subarray(certOffs)); + if (innerCertLen == ASN_LENGTH_INDEFINITE) { + console.warn(UTIL_fmt('Indefinite length unsupported')); + return null; + } + var certLen = 1 + getLenBytes(u8[certOffs + 1]) + innerCertLen; + var certBytes = u8.subarray(certOffs, certOffs + certLen + 1); + response.cert = certBytes; + return response; +} + diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/errorcodes.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/errorcodes.js new file mode 100644 index 000000000000..5c498ba2c244 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/errorcodes.js @@ -0,0 +1,28 @@ +/** + * @fileoverview Errors reported by top-level request handlers. + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * Response status codes + * @const + * @enum {number} + */ +var ErrorCodes = { + 'OK': 0, + 'OTHER_ERROR': 1, + 'BAD_REQUEST': 2, + 'CONFIGURATION_UNSUPPORTED': 3, + 'DEVICE_INELIGIBLE': 4, + 'TIMEOUT': 5 +}; + +/** + * An error object for responses + * @typedef {{ + * errorCode: ErrorCodes, + * errorMessage: (?string|undefined) + * }} + */ +var U2fError; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/exclamation_red.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/exclamation_red.png new file mode 100644 index 0000000000000000000000000000000000000000..aac3064bb8399806a036631de4d0f5b630d44e51 GIT binary patch literal 386 zcmV-|0e$|7P)C+F+dYRjoy?Y0z1H6vf$DTTMf4x_~ zol<)GnbXEb#zw5HG+e&fZ9I2?ijaH)GJ;$>_vbpHJ998VQb6?S&2IrM?M z*CG47!a|rulsObZKVtSgW9O2ePc?_a(jc`R`q0hG)^5j%6V!8Pt5>bv=PzHV?$AIl z9{Y+=<-O+Ea~wZTJ%>K=(y}wj&L(8>_wSc3oj(tvFI+f#mIw#? zdaBqbXJ%5(p|E0vQ1SHR$CWFWE`c0+`SOJego`Iw#W7q9e9EiPhwNTKcHe*efYErX gQ2K*WFbYNi0Klhx3RTzAH2?qr07*qoM6N<$f)OLUa{vGU literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/exclamation_yellow.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/exclamation_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..9647c3e5321d9ddf490b97f78b568b191157e781 GIT binary patch literal 351 zcmV-l0igbgP)491nIa31f#mrP7M<=-aa~>B6Md}_$Ms}3^ZZM4 xoa1_WTO5&B_%5u_Dd@4=KhnP|R6sz$0S_umAA^J=)&2kg002ovPDHLkV1lAPlpz2B literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/external_libraries_compiled.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/external_libraries_compiled.js new file mode 100644 index 000000000000..fa947420f1ff --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/external_libraries_compiled.js @@ -0,0 +1,7296 @@ +var goog = goog || {}; +goog.global = this; +goog.isDef = function(val) { + return void 0 !== val; +}; +goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) { + var parts = name.split("."), cur = opt_objectToExportTo || goog.global; + parts[0] in cur || !cur.execScript || cur.execScript("var " + parts[0]); + for (var part;parts.length && (part = parts.shift());) { + !parts.length && goog.isDef(opt_object) ? cur[part] = opt_object : cur = cur[part] ? cur[part] : cur[part] = {}; + } +}; +goog.define = function(name, defaultValue) { + goog.exportPath_(name, defaultValue); +}; +goog.DEBUG = !0; +goog.LOCALE = "en"; +goog.TRUSTED_SITE = !0; +goog.STRICT_MODE_COMPATIBLE = !1; +goog.DISALLOW_TEST_ONLY_CODE = !goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1; +goog.provide = function(name) { + if (goog.isInModuleLoader_()) { + throw Error("goog.provide can not be used within a goog.module."); + } + goog.constructNamespace_(name); +}; +goog.constructNamespace_ = function(name, opt_obj) { + goog.exportPath_(name, opt_obj); +}; +goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module = function(name) { + if (!goog.isString(name) || !name || -1 == name.search(goog.VALID_MODULE_RE_)) { + throw Error("Invalid module identifier"); + } + if (!goog.isInModuleLoader_()) { + throw Error("Module " + name + " has been loaded incorrectly."); + } + if (goog.moduleLoaderState_.moduleName) { + throw Error("goog.module may only be called once per module."); + } + goog.moduleLoaderState_.moduleName = name; +}; +goog.module.get = function(name) { + return goog.module.getInternal_(name); +}; +goog.module.getInternal_ = function() { +}; +goog.moduleLoaderState_ = null; +goog.isInModuleLoader_ = function() { + return null != goog.moduleLoaderState_; +}; +goog.module.declareLegacyNamespace = function() { + goog.moduleLoaderState_.declareLegacyNamespace = !0; +}; +goog.setTestOnly = function(opt_message) { + if (goog.DISALLOW_TEST_ONLY_CODE) { + throw opt_message = opt_message || "", Error("Importing test-only code into non-debug environment" + (opt_message ? ": " + opt_message : ".")); + } +}; +goog.forwardDeclare = function() { +}; +goog.getObjectByName = function(name, opt_obj) { + for (var parts = name.split("."), cur = opt_obj || goog.global, part;part = parts.shift();) { + if (goog.isDefAndNotNull(cur[part])) { + cur = cur[part]; + } else { + return null; + } + } + return cur; +}; +goog.globalize = function(obj, opt_global) { + var global = opt_global || goog.global, x; + for (x in obj) { + global[x] = obj[x]; + } +}; +goog.addDependency = function(relPath, provides, requires, opt_loadFlags) { + if (goog.DEPENDENCIES_ENABLED) { + var provide, require, path = relPath.replace(/\\/g, "/"), deps = goog.dependencies_; + opt_loadFlags && "boolean" !== typeof opt_loadFlags || (opt_loadFlags = opt_loadFlags ? {module:"goog"} : {}); + for (var i = 0;provide = provides[i];i++) { + deps.nameToPath[provide] = path, deps.pathIsModule[path] = "goog" == opt_loadFlags.module; + } + for (var j = 0;require = requires[j];j++) { + path in deps.requires || (deps.requires[path] = {}), deps.requires[path][require] = !0; + } + } +}; +goog.useStrictRequires = !1; +goog.ENABLE_DEBUG_LOADER = !0; +goog.logToConsole_ = function(msg) { + goog.global.console && goog.global.console.error(msg); +}; +goog.require = function() { +}; +goog.basePath = ""; +goog.nullFunction = function() { +}; +goog.abstractMethod = function() { + throw Error("unimplemented abstract method"); +}; +goog.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor); + return ctor.instance_ = new ctor; + }; +}; +goog.instantiatedSingletons_ = []; +goog.LOAD_MODULE_USING_EVAL = !0; +goog.SEAL_MODULE_EXPORTS = goog.DEBUG; +goog.loadedModules_ = {}; +goog.DEPENDENCIES_ENABLED = !1; +goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {pathIsModule:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() { + var doc = goog.global.document; + return null != doc && "write" in doc; +}, goog.findBasePath_ = function() { + if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + } else { + if (goog.inHtmlDocument_()) { + for (var scripts = goog.global.document.getElementsByTagName("SCRIPT"), i = scripts.length - 1;0 <= i;--i) { + var src = scripts[i].src, qmark = src.lastIndexOf("?"), l = -1 == qmark ? src.length : qmark; + if ("base.js" == src.substr(l - 7, 7)) { + goog.basePath = src.substr(0, l - 7); + break; + } + } + } + } +}, goog.importScript_ = function(src, opt_sourceText) { + (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(src, opt_sourceText) && (goog.dependencies_.written[src] = !0); +}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importModule_ = function(src) { + goog.importScript_("", 'goog.retrieveAndExecModule_("' + src + '");'); +}, goog.queuedModules_ = [], goog.wrapModule_ = function(srcUrl, scriptText) { + return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(scriptText + "\n//# sourceURL=" + srcUrl + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + scriptText + "\n;return exports});\n//# sourceURL=" + srcUrl + "\n"; +}, goog.loadQueuedModules_ = function() { + var count = goog.queuedModules_.length; + if (0 < count) { + var queue = goog.queuedModules_; + goog.queuedModules_ = []; + for (var i = 0;i < count;i++) { + goog.maybeProcessDeferredPath_(queue[i]); + } + } +}, goog.maybeProcessDeferredDep_ = function(name) { + goog.isDeferredModule_(name) && goog.allDepsAreAvailable_(name) && goog.maybeProcessDeferredPath_(goog.basePath + goog.getPathFromDeps_(name)); +}, goog.isDeferredModule_ = function(name) { + var path = goog.getPathFromDeps_(name); + return path && goog.dependencies_.pathIsModule[path] ? goog.basePath + path in goog.dependencies_.deferred : !1; +}, goog.allDepsAreAvailable_ = function(name) { + var path = goog.getPathFromDeps_(name); + if (path && path in goog.dependencies_.requires) { + for (var requireName in goog.dependencies_.requires[path]) { + if (!goog.isProvided_(requireName) && !goog.isDeferredModule_(requireName)) { + return !1; + } + } + } + return !0; +}, goog.maybeProcessDeferredPath_ = function(abspath) { + if (abspath in goog.dependencies_.deferred) { + var src = goog.dependencies_.deferred[abspath]; + delete goog.dependencies_.deferred[abspath]; + goog.globalEval(src); + } +}, goog.loadModuleFromUrl = function(url) { + goog.retrieveAndExecModule_(url); +}, goog.loadModule = function(moduleDef) { + var previousState = goog.moduleLoaderState_; + try { + goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1}; + var exports; + if (goog.isFunction(moduleDef)) { + exports = moduleDef.call(goog.global, {}); + } else { + if (goog.isString(moduleDef)) { + exports = goog.loadModuleFromSource_.call(goog.global, moduleDef); + } else { + throw Error("Invalid module definition"); + } + } + var moduleName = goog.moduleLoaderState_.moduleName; + if (!goog.isString(moduleName) || !moduleName) { + throw Error('Invalid module name "' + moduleName + '"'); + } + goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(exports); + goog.loadedModules_[moduleName] = exports; + } finally { + goog.moduleLoaderState_ = previousState; + } +}, goog.loadModuleFromSource_ = function(JSCompiler_OptimizeArgumentsArray_p0) { + eval(JSCompiler_OptimizeArgumentsArray_p0); + return {}; +}, goog.writeScriptSrcNode_ = function(src) { + goog.global.document.write(' + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
update in progress, please wait
+ + + +
U2F section + + + +
+
+
SSH section + + + +
+
+
More information about SSH and security keys
+ +
+
+ +
+ +
+
+ diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/origincheck.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/origincheck.js new file mode 100644 index 000000000000..53b363d05f5f --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/origincheck.js @@ -0,0 +1,23 @@ +/** + * @fileoverview Implements a check whether an origin is allowed to assert an + * app id. + * + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * Implements half of the app id policy: whether an origin is allowed to claim + * an app id. For checking whether the app id also lists the origin, + * @see AppIdChecker. + * @interface + */ +function OriginChecker() {} + +/** + * Checks whether the origin is allowed to claim the app ids. + * @param {string} origin The origin claiming the app id. + * @param {!Array} appIds The app ids being claimed. + * @return {Promise} A promise for the result of the check. + */ +OriginChecker.prototype.canClaimAppIds = function(origin, appIds) {}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/pin.html b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/pin.html new file mode 100644 index 000000000000..e218ad0e6097 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/pin.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +
+
+ + +
+
+
+ Waiting for Security Key password + Security Key needs Security Key password +
+
+ + diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/question.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/question.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc106071e904e610db2d885c883d374ddd99dfc GIT binary patch literal 421 zcmV;W0b2fvP)39B40UPO1mg9o>6y?pr}C%AwA#too6!ogx$(JOP$ zpP%HByKUPoc6O>cv^h1aa^;J{LL4E51_+8H99)_uwrW*=KGhrwOM|3EHDQM~^<~+v zvN>^rY7T9Z$o#(Y+m|nd9QO6==g&WWU^?*O!`ruCy~3hTHtYIIhfkmA>QKTVNC$_) ziW!&%)S?^TW*uF5?)Y))Wu|GFE-UY5XA>LsU%q_$1f&TUSIe{AR;|j+q?$uv#Rz)w zgie10CXb&#VKlltX7L28IEHP3Pk9w8kQKDj^T!VujkgM=KNtn0U=#oVxET*E$fWV($9qp;^m-2!ubDvIU45wxj#%gIZ9o4L%Gl$G zEUw&dmI&-I$PfnvR>4R3hBQXK=K%tz%T6xCV)0000} + */ + this.helpers_ = {}; +} + +/** @enum {number} */ +RegisteringHelper.Priority = { + REMOTE_FORWARDING_PRIORITY: 1, + LOCAL_DEVICE_PRIORITY: 2 +}; + +/** + * Gets the helper at the given priority, if any. + * @param {RegisteringHelper.Priority} priority + * @return {(RequestHelper|undefined)} Helper, if any, at the given priority. + * @private + */ +RegisteringHelper.prototype.getHelper_ = function(priority) { + return this.helpers_[priority]; +}; + +/** + * Sets the helper at the given priority. + * @param {RegisteringHelper.Priority} priority + * @param {RequestHelper} helper Helper to set. + * @private + */ +RegisteringHelper.prototype.setHelper_ = function(priority, helper) { + this.helpers_[priority] = helper; +}; + +/** + * Gets the next-higher-priority helper, if any. + * @param {RegisteringHelper.Priority} priority Current priority. + * @return {(RequestHelper|undefined)} Helper, if any, at a higher priority + * than the given priority. + * @private + */ +RegisteringHelper.prototype.getHigherPriorityHelper_ = function(priority) { + return this.helpers_[priority - 1]; +}; + +/** + * Sets the next-higher-priority helper. + * @param {RegisteringHelper.Priority} priority Current priority. + * @param {!RequestHelper} helper Helper to set as the higher-priority helper. + * @private + */ +RegisteringHelper.prototype.setHigherPriorityHelper_ = + function(priority, helper) { + this.helpers_[priority - 1] = helper; +}; + +/** + * Gets the next-lower-priority helper, if any. + * @param {RegisteringHelper.Priority} priority Current priority. + * @return {(RequestHelper|undefined)} Helper, if any, at a lower priority than + * the givepriority. + * @private + */ +RegisteringHelper.prototype.getLowerPriorityHelper_ = function(priority) { + return this.helpers_[priority + 1]; +}; + +/** + * @param {!RequestHelper} helper Helper to add. + * @param {(RegisteringHelper.Priority|undefined)} opt_priority + * Priority at which to add this helper. (The default is local device + * priority.) + * @param {(function(number): boolean)|undefined} opt_retryPredicate + * A function that returns, for a given helper error state, whether to + * retry the error with the next-lower-priority helper. + */ +RegisteringHelper.prototype.addHelper = + function(helper, opt_priority, opt_retryPredicate) { + var priority = opt_priority ? opt_priority : + RegisteringHelper.Priority.LOCAL_DEVICE_PRIORITY; + var existingHelper = this.getHelper_(priority); + if (existingHelper) { + var peerHelper = this.addHelperAsPeer_(existingHelper, helper); + this.setHelper_(priority, peerHelper); + // If there's a higher priority helper, it chains to the existing, + // lower-priority one. The lower priority one may change as a result of + // adding the new peer, so reset the higher-priority's chained helper. + var higherPriorityHelper = this.getHigherPriorityHelper_(priority); + if (higherPriorityHelper) { + higherPriorityHelper.setChainedHelper(peerHelper); + } + } else { + // First one at this priority? + var lowerPriorityHelper = this.getLowerPriorityHelper_(priority); + var higherPriorityHelper = this.getHigherPriorityHelper_(priority); + if (lowerPriorityHelper && higherPriorityHelper) { + // This code branch should be unreachable, because this class only + // supports two priorities. This exception is thrown as a failsafe. + throw new Error('More than two priorities not supported.'); + } else if (lowerPriorityHelper) { + // If there's one of a lower priority, wrap the new helper in a chained + // helper that chains to the lower priority one. + var chainedHelper = new ChainedHelper( + helper, lowerPriorityHelper, opt_retryPredicate); + this.setHelper_(priority, chainedHelper); + } else if (higherPriorityHelper) { + // If there's one of a higher priority, the higher priority helper needs + // to be chained to this one. (Because helper is the first at this + // priority, the higher priority helper is implicitly not yet a chained + // helper.) + var chainedHelper = new ChainedHelper( + higherPriorityHelper, helper, this.pendingRetryPredicate_); + delete this.pendingRetryPredicate_; + this.setHigherPriorityHelper_(priority, chainedHelper); + this.setHelper_(priority, helper); + } else { + // First one at this priority, none at a higher or lower priority: + // just add it, but keep the retry predicate around in case it's needed + // later. + this.setHelper_(priority, helper); + /** @private {(function(number): boolean)|undefined} */ + this.pendingRetryPredicate_ = opt_retryPredicate; + } + } +}; + +/** + * Adds a helper as a peer to an existing helper. + * @param {!RequestHelper} existingHelper + * @param {!RequestHelper} helper + * @return {!RequestHelper} A helper containing the newly added helper as + * a peer of the existing helper. + * @private + */ +RegisteringHelper.prototype.addHelperAsPeer_ = + function(existingHelper, helper) { + var delegatingHelper; + // To make helper a peer of existingHelper, we need to add them both to a + // delegating helper. First we need to find whether there's an existing + // delegating helper to add to, or whether we have to wrap the existing + // helper in one. + if (existingHelper.constructor == ChainedHelper) { + // It's a chained helper: get the chained helper's delegate. + var chainedHelper = existingHelper; + delegatingHelper = chainedHelper.getDelegatedHelper(); + if (delegatingHelper.constructor == DelegatingHelper) { + // If the delegate is itself a delegating helper, just add to it. + delegatingHelper.addHelper(helper); + } else { + // Otherwise, wrap the existing delegate in a new delegating helper + // and add the new helper alongside the existing delegate. + delegatingHelper = new DelegatingHelper(); + delegatingHelper.addHelper(chainedHelper.getDelegatedHelper()); + delegatingHelper.addHelper(helper); + chainedHelper.setDelegatedHelper(delegatingHelper); + } + return existingHelper; + } else if (existingHelper.constructor == DelegatingHelper) { + // If the existing helper helper is already a delegating helper, just + // add the new helper to it. + existingHelper.addHelper(helper); + return existingHelper; + } else { + // Otherwise, create a delegating helper to contain the previous helper + // and the newly added one. + delegatingHelper = new DelegatingHelper(); + delegatingHelper.addHelper(existingHelper); + delegatingHelper.addHelper(helper); + return delegatingHelper; + } +}; + +/** + * Gets a handler for a request. + * @param {HelperRequest} request The request to handle. + * @return {RequestHandler} A handler for the request. + */ +RegisteringHelper.prototype.getHandler = function(request) { + var helper = this.getHelper_( + RegisteringHelper.Priority.REMOTE_FORWARDING_PRIORITY); + if (!helper) { + helper = this.getHelper_( + RegisteringHelper.Priority.LOCAL_DEVICE_PRIORITY); + } + if (helper) { + return helper.getHandler(request); + } + return null; +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requesthelper.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requesthelper.js new file mode 100644 index 000000000000..34c816511ab5 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requesthelper.js @@ -0,0 +1,78 @@ +/** + * @fileoverview Provides a "bottom half" helper to assist with raw requests. + * This fills the same role as the Authenticator-Specific Module component of + * U2F documents, although the API is different. + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * @typedef {{ + * type: string, + * timeout: number + * }} + */ +var HelperRequest; + +/** + * @typedef {{ + * type: string, + * code: (number|undefined) + * }} + */ +var HelperReply; + +/** + * A helper to process requests. + * @interface + */ +function RequestHelper() {} + +/** + * Gets a handler for a request. + * @param {HelperRequest} request The request to handle. + * @return {RequestHandler} A handler for the request. + */ +RequestHelper.prototype.getHandler = function(request) {}; + +/** + * A handler to track an outstanding request. + * @extends {Closeable} + * @interface + */ +function RequestHandler() {} + +/** @typedef {function(HelperReply, string=)} */ +var RequestHandlerCallback; + +/** + * @param {RequestHandlerCallback} cb Called with the result of the request, + * and an optional source for the result. + * @return {boolean} Whether this handler could be run. + */ +RequestHandler.prototype.run = function(cb) {}; + +/** Closes this handler. */ +RequestHandler.prototype.close = function() {}; + +/** + * Makes a response to a helper request with an error code. + * @param {HelperRequest} request The request to make a response to. + * @param {DeviceStatusCodes} code The error code to return. + * @param {string=} opt_defaultType The default response type, if none is + * present in the request. + * @return {HelperReply} The helper error response. + */ +function makeHelperErrorResponse(request, code, opt_defaultType) { + var type; + if (request && request.type) { + type = request.type.replace(/_request$/, '_reply'); + } else { + type = opt_defaultType || 'unknown_type_reply'; + } + var reply = { + 'type': type, + 'code': /** @type {number} */ (code) + }; + return reply; +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requestqueue.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requestqueue.js new file mode 100644 index 000000000000..25bb13315fb6 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/requestqueue.js @@ -0,0 +1,190 @@ +/** + * @fileoverview Queue of pending requests from an origin. + * + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * Represents a queued request. Once given a token, call complete() once the + * request is processed (or dropped.) + * @interface + */ +function QueuedRequestToken() {} + +/** Completes (or cancels) this queued request. */ +QueuedRequestToken.prototype.complete = function() {}; + +/** + * @param {!RequestQueue} queue The queue for this request. + * @param {number} id An id for this request. + * @param {function(QueuedRequestToken)} beginCb Called when work may begin on + * this request. + * @param {RequestToken} opt_prev Previous request in the same queue. + * @param {RequestToken} opt_next Next request in the same queue. + * @constructor + * @implements {QueuedRequestToken} + */ +function RequestToken(queue, id, beginCb, opt_prev, opt_next) { + /** @private {!RequestQueue} */ + this.queue_ = queue; + /** @private {number} */ + this.id_ = id; + /** @type {function(QueuedRequestToken)} */ + this.beginCb = beginCb; + /** @type {RequestToken} */ + this.prev = null; + /** @type {RequestToken} */ + this.next = null; + /** @private {boolean} */ + this.completed_ = false; +} + +/** Completes (or cancels) this queued request. */ +RequestToken.prototype.complete = function() { + if (this.completed_) { + // Either the caller called us more than once, or the timer is firing. + // Either way, nothing more to do here. + return; + } + this.completed_ = true; + this.queue_.complete(this); +}; + +/** @return {boolean} Whether this token has already completed. */ +RequestToken.prototype.completed = function() { + return this.completed_; +}; + +/** + * @param {!SystemTimer} sysTimer A system timer implementation. + * @constructor + */ +function RequestQueue(sysTimer) { + /** @private {!SystemTimer} */ + this.sysTimer_ = sysTimer; + /** @private {RequestToken} */ + this.head_ = null; + /** @private {RequestToken} */ + this.tail_ = null; + /** @private {number} */ + this.id_ = 0; +} + +/** + * Inserts this token into the queue. + * @param {RequestToken} token Queue token + * @private + */ +RequestQueue.prototype.insertToken_ = function(token) { + console.log(UTIL_fmt('token ' + this.id_ + ' inserted')); + if (this.head_ === null) { + this.head_ = token; + this.tail_ = token; + } else { + if (!this.tail_) throw 'Non-empty list missing tail'; + this.tail_.next = token; + token.prev = this.tail_; + this.tail_ = token; + } +}; + +/** + * Removes this token from the queue. + * @param {RequestToken} token Queue token + * @private + */ +RequestQueue.prototype.removeToken_ = function(token) { + if (token.next) { + token.next.prev = token.prev; + } + if (token.prev) { + token.prev.next = token.next; + } + if (this.head_ === token && this.tail_ === token) { + this.head_ = this.tail_ = null; + } else { + if (this.head_ === token) { + this.head_ = token.next; + this.head_.prev = null; + } + if (this.tail_ === token) { + this.tail_ = token.prev; + this.tail_.next = null; + } + } + token.prev = token.next = null; +}; + +/** + * Completes this token's request, and begins the next queued request, if one + * exists. + * @param {RequestToken} token Queue token + */ +RequestQueue.prototype.complete = function(token) { + console.log(UTIL_fmt('token ' + this.id_ + ' completed')); + var next = token.next; + this.removeToken_(token); + if (next) { + next.beginCb(next); + } +}; + +/** @return {boolean} Whether this queue is empty. */ +RequestQueue.prototype.empty = function() { + return this.head_ === null; +}; + +/** + * Queues this request, and, if it's the first request, begins work on it. + * @param {function(QueuedRequestToken)} beginCb Called when work begins on this + * request. + * @param {Countdown} timer Countdown timer + * @return {QueuedRequestToken} A token for the request. + */ +RequestQueue.prototype.queueRequest = function(beginCb, timer) { + var startNow = this.empty(); + var token = new RequestToken(this, ++this.id_, beginCb); + // Clone the timer to set a callback on it, which will ensure complete() is + // eventually called, even if the caller never gets around to it. + timer.clone(token.complete.bind(token)); + this.insertToken_(token); + if (startNow) { + this.sysTimer_.setTimeout(function() { + if (!token.completed()) { + token.beginCb(token); + } + }, 0); + } + return token; +}; + +/** + * @param {!SystemTimer} sysTimer A system timer implementation. + * @constructor + */ +function OriginKeyedRequestQueue(sysTimer) { + /** @private {!SystemTimer} */ + this.sysTimer_ = sysTimer; + /** @private {Object} */ + this.requests_ = {}; +} + +/** + * Queues this request, and, if it's the first request, begins work on it. + * @param {string} appId Application Id + * @param {string} origin Request origin + * @param {function(QueuedRequestToken)} beginCb Called when work begins on this + * request. + * @param {Countdown} timer Countdown timer + * @return {QueuedRequestToken} A token for the request. + */ +OriginKeyedRequestQueue.prototype.queueRequest = + function(appId, origin, beginCb, timer) { + var key = appId + ' ' + origin; + if (!this.requests_.hasOwnProperty(key)) { + this.requests_[key] = new RequestQueue(this.sysTimer_); + } + var queue = this.requests_[key]; + return queue.queueRequest(beginCb, timer); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/settings.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..2777868a07abe680c109f78a473b7e8d937517fd GIT binary patch literal 275 zcmV+u0qp*XP)?>J<@upi|fhrbZmbn;vM)C~%p$R8*IY>ry zr9*k9H-@*r$jqYQ?O*A>(+~rqN&Z<$!*{w0m0WcBM}2WV8}Yxd=0#Zg4EyF#Sc-X8 Zr~;nAj#HMSX} buf A 64 byte buffer + */ +SHA256.prototype._compress = function(buf) { + var W = this._W; + var k = this._k; + + function _rotr(w, r) { return ((w << (32 - r)) | (w >>> r)); }; + + // get 16 big endian words + for (var i = 0; i < 64; i += 4) { + var w = (buf[i] << 24) | + (buf[i + 1] << 16) | + (buf[i + 2] << 8) | + (buf[i + 3]); + W[i / 4] = w; + } + + // expand to 64 words + for (var i = 16; i < 64; ++i) { + var s0 = _rotr(W[i - 15], 7) ^ _rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3); + var s1 = _rotr(W[i - 2], 17) ^ _rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10); + W[i] = (W[i - 16] + s0 + W[i - 7] + s1) & 0xffffffff; + } + + var A = this._chain[0]; + var B = this._chain[1]; + var C = this._chain[2]; + var D = this._chain[3]; + var E = this._chain[4]; + var F = this._chain[5]; + var G = this._chain[6]; + var H = this._chain[7]; + + for (var i = 0; i < 64; ++i) { + var S0 = _rotr(A, 2) ^ _rotr(A, 13) ^ _rotr(A, 22); + var maj = (A & B) ^ (A & C) ^ (B & C); + var t2 = (S0 + maj) & 0xffffffff; + var S1 = _rotr(E, 6) ^ _rotr(E, 11) ^ _rotr(E, 25); + var ch = (E & F) ^ ((~E) & G); + var t1 = (H + S1 + ch + k[i] + W[i]) & 0xffffffff; + + H = G; + G = F; + F = E; + E = (D + t1) & 0xffffffff; + D = C; + C = B; + B = A; + A = (t1 + t2) & 0xffffffff; + } + + this._chain[0] += A; + this._chain[1] += B; + this._chain[2] += C; + this._chain[3] += D; + this._chain[4] += E; + this._chain[5] += F; + this._chain[6] += G; + this._chain[7] += H; +}; + +/** Update the hash with additional data + * @param {Array|Uint8Array} bytes The data + * @param {number=} opt_length How many bytes to hash, if not all */ +SHA256.prototype.update = function(bytes, opt_length) { + if (!opt_length) opt_length = bytes.length; + + this._total += opt_length; + for (var n = 0; n < opt_length; ++n) { + this._buf[this._inbuf++] = bytes[n]; + if (this._inbuf == 64) { + this._compress(this._buf); + this._inbuf = 0; + } + } +}; + +/** Update the hash with a specified range from a data buffer + * @param {Array} bytes The data buffer + * @param {number} start Starting index of the range in bytes + * @param {number} end End index, will not be included in range + */ +SHA256.prototype.updateRange = function(bytes, start, end) { + this._total += (end - start); + for (var n = start; n < end; ++n) { + this._buf[this._inbuf++] = bytes[n]; + if (this._inbuf == 64) { + this._compress(this._buf); + this._inbuf = 0; + } + } +}; + +/** + * Optionally update the hash with additional arguments, and return the + * resulting hash value. + * @param {...*} var_args Data buffers to hash + * @return {Array} the SHA256 hash value. + */ +SHA256.prototype.digest = function(var_args) { + for (var i = 0; i < arguments.length; ++i) + this.update(arguments[i]); + + var digest = new Array(32); + var totalBits = this._total * 8; + + // add pad 0x80 0x00* + if (this._inbuf < 56) + this.update(this._pad, 56 - this._inbuf); + else + this.update(this._pad, 64 - (this._inbuf - 56)); + + // add # bits, big endian + for (var i = 63; i >= 56; --i) { + this._buf[i] = totalBits & 255; + totalBits >>>= 8; + } + + this._compress(this._buf); + + var n = 0; + for (var i = 0; i < 8; ++i) + for (var j = 24; j >= 0; j -= 8) + digest[n++] = (this._chain[i] >> j) & 255; + + return digest; +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/signer.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/signer.js new file mode 100644 index 000000000000..94470f7d6536 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/signer.js @@ -0,0 +1,558 @@ +/** + * @fileoverview Handles web page requests for gnubby sign requests. + * + * @author juanlang@google.com (Juan Lang) + */ + +'use strict'; + +var gnubbySignRequestQueue; + +function initRequestQueue() { + gnubbySignRequestQueue = new OriginKeyedRequestQueue( + FACTORY_REGISTRY.getSystemTimer()); +} + +/** + * Handles a U2F sign request. + * @param {MessageSender} messageSender The message sender. + * @param {Object} request The web page's sign request. + * @param {Function} sendResponse Called back with the result of the sign. + * @return {Closeable} Request handler that should be closed when the browser + * message channel is closed. + */ +function handleU2fSignRequest(messageSender, request, sendResponse) { + var sentResponse = false; + var queuedSignRequest; + + function sendErrorResponse(error) { + sendResponseOnce(sentResponse, queuedSignRequest, + makeU2fErrorResponse(request, error.errorCode, error.errorMessage), + sendResponse); + } + + function sendSuccessResponse(challenge, info, browserData) { + var responseData = makeU2fSignResponseDataFromChallenge(challenge); + addSignatureAndBrowserDataToResponseData(responseData, info, browserData, + 'clientData'); + var response = makeU2fSuccessResponse(request, responseData); + sendResponseOnce(sentResponse, queuedSignRequest, response, sendResponse); + } + + var sender = createSenderFromMessageSender(messageSender); + if (!sender) { + sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST}); + return null; + } + if (sender.origin.indexOf('http://') == 0 && !HTTP_ORIGINS_ALLOWED) { + sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST}); + return null; + } + + queuedSignRequest = + validateAndEnqueueSignRequest( + sender, request, sendErrorResponse, sendSuccessResponse); + return queuedSignRequest; +} + +/** + * Creates a base U2F responseData object from the server challenge. + * @param {SignChallenge} challenge The server challenge. + * @return {Object} The responseData object. + */ +function makeU2fSignResponseDataFromChallenge(challenge) { + var responseData = { + 'keyHandle': challenge['keyHandle'] + }; + return responseData; +} + +/** + * Adds the browser data and signature values to a responseData object. + * @param {Object} responseData The "base" responseData object. + * @param {string} signatureData The signature data. + * @param {string} browserData The browser data generated from the challenge. + * @param {string} browserDataName The name of the browser data key in the + * responseData object. + */ +function addSignatureAndBrowserDataToResponseData(responseData, signatureData, + browserData, browserDataName) { + responseData[browserDataName] = B64_encode(UTIL_StringToBytes(browserData)); + responseData['signatureData'] = signatureData; +} + +/** + * Validates a sign request using the given sign challenges name, and, if valid, + * enqueues the sign request for eventual processing. + * @param {WebRequestSender} sender The sender of the message. + * @param {Object} request The web page's sign request. + * @param {function(U2fError)} errorCb Error callback. + * @param {function(SignChallenge, string, string)} successCb Success callback. + * @return {Closeable} Request handler that should be closed when the browser + * message channel is closed. + */ +function validateAndEnqueueSignRequest(sender, request, errorCb, successCb) { + function timeout() { + errorCb({errorCode: ErrorCodes.TIMEOUT}); + } + + if (!isValidSignRequest(request)) { + errorCb({errorCode: ErrorCodes.BAD_REQUEST}); + return null; + } + + // The typecast is necessary because getSignChallenges can return undefined. + // On the other hand, a valid sign request can't contain an undefined sign + // challenge list, so the typecast is safe. + var signChallenges = /** @type {!Array} */ ( + getSignChallenges(request)); + var appId; + if (request['appId']) { + appId = request['appId']; + } else if (signChallenges.length) { + appId = signChallenges[0]['appId']; + } + // Sanity check + if (!appId) { + console.warn(UTIL_fmt('empty sign appId?')); + errorCb({errorCode: ErrorCodes.BAD_REQUEST}); + return null; + } + var timeoutValueSeconds = getTimeoutValueFromRequest(request); + // Attenuate watchdog timeout value less than the signer's timeout, so the + // watchdog only fires after the signer could reasonably have called back, + // not before. + timeoutValueSeconds = attenuateTimeoutInSeconds(timeoutValueSeconds, + MINIMUM_TIMEOUT_ATTENUATION_SECONDS / 2); + var watchdog = new WatchdogRequestHandler(timeoutValueSeconds, timeout); + var wrappedErrorCb = watchdog.wrapCallback(errorCb); + var wrappedSuccessCb = watchdog.wrapCallback(successCb); + + var timer = createAttenuatedTimer( + FACTORY_REGISTRY.getCountdownFactory(), timeoutValueSeconds); + var logMsgUrl = request['logMsgUrl']; + + // Queue sign requests from the same origin, to protect against simultaneous + // sign-out on many tabs resulting in repeated sign-in requests. + var queuedSignRequest = new QueuedSignRequest(signChallenges, + timer, sender, wrappedErrorCb, wrappedSuccessCb, request['challenge'], + appId, logMsgUrl); + if (!gnubbySignRequestQueue) { + initRequestQueue(); + } + var requestToken = gnubbySignRequestQueue.queueRequest(appId, sender.origin, + queuedSignRequest.begin.bind(queuedSignRequest), timer); + queuedSignRequest.setToken(requestToken); + + watchdog.setCloseable(queuedSignRequest); + return watchdog; +} + +/** + * Returns whether the request appears to be a valid sign request. + * @param {Object} request The request. + * @return {boolean} Whether the request appears valid. + */ +function isValidSignRequest(request) { + var signChallenges = getSignChallenges(request); + if (!signChallenges) { + return false; + } + var hasDefaultChallenge = request.hasOwnProperty('challenge'); + var hasAppId = request.hasOwnProperty('appId'); + // If the sign challenge array is empty, the global appId is required. + if (!hasAppId && (!signChallenges || !signChallenges.length)) { + return false; + } + return isValidSignChallengeArray(signChallenges, !hasDefaultChallenge, + !hasAppId); +} + +/** + * Adapter class representing a queued sign request. + * @param {!Array} signChallenges The sign challenges. + * @param {Countdown} timer Timeout timer + * @param {WebRequestSender} sender Message sender. + * @param {function(U2fError)} errorCb Error callback + * @param {function(SignChallenge, string, string)} successCb Success callback + * @param {string|undefined} opt_defaultChallenge A default sign challenge + * value, if a request does not provide one. + * @param {string|undefined} opt_appId The app id for the entire request. + * @param {string|undefined} opt_logMsgUrl Url to post log messages to + * @constructor + * @implements {Closeable} + */ +function QueuedSignRequest(signChallenges, timer, sender, errorCb, + successCb, opt_defaultChallenge, opt_appId, opt_logMsgUrl) { + /** @private {!Array} */ + this.signChallenges_ = signChallenges; + /** @private {Countdown} */ + this.timer_ = timer.clone(this.close.bind(this)); + /** @private {WebRequestSender} */ + this.sender_ = sender; + /** @private {function(U2fError)} */ + this.errorCb_ = errorCb; + /** @private {function(SignChallenge, string, string)} */ + this.successCb_ = successCb; + /** @private {string|undefined} */ + this.defaultChallenge_ = opt_defaultChallenge; + /** @private {string|undefined} */ + this.appId_ = opt_appId; + /** @private {string|undefined} */ + this.logMsgUrl_ = opt_logMsgUrl; + /** @private {boolean} */ + this.begun_ = false; + /** @private {boolean} */ + this.closed_ = false; +} + +/** Closes this sign request. */ +QueuedSignRequest.prototype.close = function() { + if (this.closed_) return; + var hadBegunSigning = false; + if (this.begun_ && this.signer_) { + this.signer_.close(); + hadBegunSigning = true; + } + if (this.token_) { + if (hadBegunSigning) { + console.log(UTIL_fmt('closing in-progress request')); + } else { + console.log(UTIL_fmt('closing timed-out request before processing')); + } + this.token_.complete(); + } + this.closed_ = true; +}; + +/** + * @param {QueuedRequestToken} token Token for this sign request. + */ +QueuedSignRequest.prototype.setToken = function(token) { + /** @private {QueuedRequestToken} */ + this.token_ = token; +}; + +/** + * Called when this sign request may begin work. + * @param {QueuedRequestToken} token Token for this sign request. + */ +QueuedSignRequest.prototype.begin = function(token) { + if (this.timer_.expired()) { + console.log(UTIL_fmt('Queued request begun after timeout')); + this.close(); + this.errorCb_({errorCode: ErrorCodes.TIMEOUT}); + return; + } + this.begun_ = true; + this.setToken(token); + this.signer_ = new Signer(this.timer_, this.sender_, + this.signerFailed_.bind(this), this.signerSucceeded_.bind(this), + this.logMsgUrl_); + if (!this.signer_.setChallenges(this.signChallenges_, this.defaultChallenge_, + this.appId_)) { + token.complete(); + this.errorCb_({errorCode: ErrorCodes.BAD_REQUEST}); + } + // Signer now has responsibility for maintaining timeout. + this.timer_.clearTimeout(); +}; + +/** + * Called when this request's signer fails. + * @param {U2fError} error The failure reported by the signer. + * @private + */ +QueuedSignRequest.prototype.signerFailed_ = function(error) { + this.token_.complete(); + this.errorCb_(error); +}; + +/** + * Called when this request's signer succeeds. + * @param {SignChallenge} challenge The challenge that was signed. + * @param {string} info The sign result. + * @param {string} browserData Browser data JSON + * @private + */ +QueuedSignRequest.prototype.signerSucceeded_ = + function(challenge, info, browserData) { + this.token_.complete(); + this.successCb_(challenge, info, browserData); +}; + +/** + * Creates an object to track signing with a gnubby. + * @param {Countdown} timer Timer for sign request. + * @param {WebRequestSender} sender The message sender. + * @param {function(U2fError)} errorCb Called when the sign operation fails. + * @param {function(SignChallenge, string, string)} successCb Called when the + * sign operation succeeds. + * @param {string=} opt_logMsgUrl The url to post log messages to. + * @constructor + */ +function Signer(timer, sender, errorCb, successCb, opt_logMsgUrl) { + /** @private {Countdown} */ + this.timer_ = timer.clone(); + /** @private {WebRequestSender} */ + this.sender_ = sender; + /** @private {function(U2fError)} */ + this.errorCb_ = errorCb; + /** @private {function(SignChallenge, string, string)} */ + this.successCb_ = successCb; + /** @private {string|undefined} */ + this.logMsgUrl_ = opt_logMsgUrl; + + /** @private {boolean} */ + this.challengesSet_ = false; + /** @private {boolean} */ + this.done_ = false; + + /** @private {Object} */ + this.browserData_ = {}; + /** @private {Object} */ + this.serverChallenges_ = {}; + // Allow http appIds for http origins. (Broken, but the caller deserves + // what they get.) + /** @private {boolean} */ + this.allowHttp_ = this.sender_.origin ? + this.sender_.origin.indexOf('http://') == 0 : false; + /** @private {Closeable} */ + this.handler_ = null; +} + +/** + * Sets the challenges to be signed. + * @param {Array} signChallenges The challenges to set. + * @param {string=} opt_defaultChallenge A default sign challenge + * value, if a request does not provide one. + * @param {string=} opt_appId The app id for the entire request. + * @return {boolean} Whether the challenges could be set. + */ +Signer.prototype.setChallenges = function(signChallenges, opt_defaultChallenge, + opt_appId) { + if (this.challengesSet_ || this.done_) + return false; + if (this.timer_.expired()) { + this.notifyError_({errorCode: ErrorCodes.TIMEOUT}); + return true; + } + /** @private {Array} */ + this.signChallenges_ = signChallenges; + /** @private {string|undefined} */ + this.defaultChallenge_ = opt_defaultChallenge; + /** @private {string|undefined} */ + this.appId_ = opt_appId; + /** @private {boolean} */ + this.challengesSet_ = true; + + this.checkAppIds_(); + return true; +}; + +/** + * Checks the app ids of incoming requests. + * @private + */ +Signer.prototype.checkAppIds_ = function() { + var appIds = getDistinctAppIds(this.signChallenges_); + if (this.appId_) { + appIds = UTIL_unionArrays([this.appId_], appIds); + } + if (!appIds || !appIds.length) { + var error = { + errorCode: ErrorCodes.BAD_REQUEST, + errorMessage: 'missing appId' + }; + this.notifyError_(error); + return; + } + FACTORY_REGISTRY.getOriginChecker() + .canClaimAppIds(this.sender_.origin, appIds) + .then(this.originChecked_.bind(this, appIds)); +}; + +/** + * Called with the result of checking the origin. When the origin is allowed + * to claim the app ids, begins checking whether the app ids also list the + * origin. + * @param {!Array} appIds The app ids. + * @param {boolean} result Whether the origin could claim the app ids. + * @private + */ +Signer.prototype.originChecked_ = function(appIds, result) { + if (!result) { + var error = { + errorCode: ErrorCodes.BAD_REQUEST, + errorMessage: 'bad appId' + }; + this.notifyError_(error); + return; + } + var appIdChecker = FACTORY_REGISTRY.getAppIdCheckerFactory().create(); + appIdChecker. + checkAppIds( + this.timer_.clone(), this.sender_.origin, + /** @type {!Array} */ (appIds), this.allowHttp_, + this.logMsgUrl_) + .then(this.appIdChecked_.bind(this)); +}; + +/** + * Called with the result of checking app ids. When the app ids are valid, + * adds the sign challenges to those being signed. + * @param {boolean} result Whether the app ids are valid. + * @private + */ +Signer.prototype.appIdChecked_ = function(result) { + if (!result) { + var error = { + errorCode: ErrorCodes.BAD_REQUEST, + errorMessage: 'bad appId' + }; + this.notifyError_(error); + return; + } + if (!this.doSign_()) { + this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST}); + return; + } +}; + +/** + * Begins signing this signer's challenges. + * @return {boolean} Whether the challenge could be added. + * @private + */ +Signer.prototype.doSign_ = function() { + // Create the browser data for each challenge. + for (var i = 0; i < this.signChallenges_.length; i++) { + var challenge = this.signChallenges_[i]; + var serverChallenge; + if (challenge.hasOwnProperty('challenge')) { + serverChallenge = challenge['challenge']; + } else { + serverChallenge = this.defaultChallenge_; + } + if (!serverChallenge) { + console.warn(UTIL_fmt('challenge missing')); + return false; + } + var keyHandle = challenge['keyHandle']; + + var browserData = + makeSignBrowserData(serverChallenge, this.sender_.origin, + this.sender_.tlsChannelId); + this.browserData_[keyHandle] = browserData; + this.serverChallenges_[keyHandle] = challenge; + } + + var encodedChallenges = encodeSignChallenges(this.signChallenges_, + this.defaultChallenge_, this.appId_, this.getChallengeHash_.bind(this)); + + var timeoutSeconds = this.timer_.millisecondsUntilExpired() / 1000.0; + var request = makeSignHelperRequest(encodedChallenges, timeoutSeconds, + this.logMsgUrl_); + this.handler_ = + FACTORY_REGISTRY.getRequestHelper() + .getHandler(/** @type {HelperRequest} */ (request)); + if (!this.handler_) + return false; + return this.handler_.run(this.helperComplete_.bind(this)); +}; + +/** + * @param {string} keyHandle The key handle used with the challenge. + * @param {string} challenge The challenge. + * @return {string} The hashed challenge associated with the key + * handle/challenge pair. + * @private + */ +Signer.prototype.getChallengeHash_ = function(keyHandle, challenge) { + return B64_encode(sha256HashOfString(this.browserData_[keyHandle])); +}; + +/** Closes this signer. */ +Signer.prototype.close = function() { + this.close_(); +}; + +/** + * Closes this signer, and optionally notifies the caller of error. + * @param {boolean=} opt_notifying When true, this method is being called in the + * process of notifying the caller of an existing status. When false, + * the caller is notified with a default error value, ErrorCodes.TIMEOUT. + * @private + */ +Signer.prototype.close_ = function(opt_notifying) { + if (this.handler_) { + this.handler_.close(); + this.handler_ = null; + } + this.timer_.clearTimeout(); + if (!opt_notifying) { + this.notifyError_({errorCode: ErrorCodes.TIMEOUT}); + } +}; + +/** + * Notifies the caller of error. + * @param {U2fError} error Error. + * @private + */ +Signer.prototype.notifyError_ = function(error) { + if (this.done_) + return; + this.done_ = true; + this.close_(true); + this.errorCb_(error); +}; + +/** + * Notifies the caller of success. + * @param {SignChallenge} challenge The challenge that was signed. + * @param {string} info The sign result. + * @param {string} browserData Browser data JSON + * @private + */ +Signer.prototype.notifySuccess_ = function(challenge, info, browserData) { + if (this.done_) + return; + this.done_ = true; + this.close_(true); + this.successCb_(challenge, info, browserData); +}; + +/** + * Called by the helper upon completion. + * @param {HelperReply} helperReply The result of the sign request. + * @param {string=} opt_source The source of the sign result. + * @private + */ +Signer.prototype.helperComplete_ = function(helperReply, opt_source) { + if (helperReply.type != 'sign_helper_reply') { + this.notifyError_({errorCode: ErrorCodes.OTHER_ERROR}); + return; + } + var reply = /** @type {SignHelperReply} */ (helperReply); + + if (reply.code) { + var reportedError = mapDeviceStatusCodeToU2fError(reply.code); + console.log(UTIL_fmt('helper reported ' + reply.code.toString(16) + + ', returning ' + reportedError.errorCode)); + this.notifyError_(reportedError); + } else { + if (this.logMsgUrl_ && opt_source) { + var logMsg = 'signed&source=' + opt_source; + logMessage(logMsg, this.logMsgUrl_); + } + + var key = reply.responseData['keyHandle']; + var browserData = this.browserData_[key]; + // Notify with server-provided challenge, not the encoded one: the + // server-provided challenge contains additional fields it relies on. + var serverChallenge = this.serverChallenges_[key]; + this.notifySuccess_(serverChallenge, reply.responseData.signatureData, + browserData); + } +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/singlesigner.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/singlesigner.js new file mode 100644 index 000000000000..1e6f571538be --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/singlesigner.js @@ -0,0 +1,501 @@ +/** + * @fileoverview A single gnubby signer wraps the process of opening a gnubby, + * signing each challenge in an array of challenges until a success condition + * is satisfied, and finally yielding the gnubby upon success. + * + * @author juanlang@google.com (Juan Lang) + */ + +'use strict'; + +/** + * @typedef {{ + * code: number, + * gnubby: (Gnubby|undefined), + * challenge: (SignHelperChallenge|undefined), + * info: (ArrayBuffer|undefined) + * }} + */ +var SingleSignerResult; + +/** + * Creates a new sign handler with a gnubby. This handler will perform a sign + * operation using each challenge in an array of challenges until its success + * condition is satisified, or an error or timeout occurs. The success condition + * is defined differently depending whether this signer is used for enrolling + * or for signing: + * + * For enroll, success is defined as each challenge yielding wrong data. This + * means this gnubby is not currently enrolled for any of the appIds in any + * challenge. + * + * For sign, success is defined as any challenge yielding ok. + * + * The complete callback is called only when the signer reaches success or + * failure, i.e. when there is no need for this signer to continue trying new + * challenges. + * + * @param {GnubbyDeviceId} gnubbyId Which gnubby to open. + * @param {boolean} forEnroll Whether this signer is signing for an attempted + * enroll operation. + * @param {function(SingleSignerResult)} + * completeCb Called when this signer completes, i.e. no further results are + * possible. + * @param {Countdown} timer An advisory timer, beyond whose expiration the + * signer will not attempt any new operations, assuming the caller is no + * longer interested in the outcome. + * @param {string=} opt_logMsgUrl A URL to post log messages to. + * @constructor + */ +function SingleGnubbySigner(gnubbyId, forEnroll, completeCb, timer, + opt_logMsgUrl) { + /** @private {GnubbyDeviceId} */ + this.gnubbyId_ = gnubbyId; + /** @private {SingleGnubbySigner.State} */ + this.state_ = SingleGnubbySigner.State.INIT; + /** @private {boolean} */ + this.forEnroll_ = forEnroll; + /** @private {function(SingleSignerResult)} */ + this.completeCb_ = completeCb; + /** @private {Countdown} */ + this.timer_ = timer; + /** @private {string|undefined} */ + this.logMsgUrl_ = opt_logMsgUrl; + + /** @private {!Array} */ + this.challenges_ = []; + /** @private {number} */ + this.challengeIndex_ = 0; + /** @private {boolean} */ + this.challengesSet_ = false; + + /** @private {!Object} */ + this.cachedError_ = []; + + /** @private {(function()|undefined)} */ + this.openCanceller_; +} + +/** @enum {number} */ +SingleGnubbySigner.State = { + /** Initial state. */ + INIT: 0, + /** The signer is attempting to open a gnubby. */ + OPENING: 1, + /** The signer's gnubby opened, but is busy. */ + BUSY: 2, + /** The signer has an open gnubby, but no challenges to sign. */ + IDLE: 3, + /** The signer is currently signing a challenge. */ + SIGNING: 4, + /** The signer got a final outcome. */ + COMPLETE: 5, + /** The signer is closing its gnubby. */ + CLOSING: 6, + /** The signer is closed. */ + CLOSED: 7 +}; + +/** + * @return {GnubbyDeviceId} This device id of the gnubby for this signer. + */ +SingleGnubbySigner.prototype.getDeviceId = function() { + return this.gnubbyId_; +}; + +/** + * Closes this signer's gnubby, if it's held. + */ +SingleGnubbySigner.prototype.close = function() { + if (this.state_ == SingleGnubbySigner.State.OPENING) { + if (this.openCanceller_) + this.openCanceller_(); + } + + if (!this.gnubby_) return; + this.state_ = SingleGnubbySigner.State.CLOSING; + this.gnubby_.closeWhenIdle(this.closed_.bind(this)); +}; + +/** + * Called when this signer's gnubby is closed. + * @private + */ +SingleGnubbySigner.prototype.closed_ = function() { + this.gnubby_ = null; + this.state_ = SingleGnubbySigner.State.CLOSED; +}; + +/** + * Begins signing the given challenges. + * @param {Array} challenges The challenges to sign. + * @return {boolean} Whether the challenges were accepted. + */ +SingleGnubbySigner.prototype.doSign = function(challenges) { + if (this.challengesSet_) { + // Can't add new challenges once they've been set. + return false; + } + + if (challenges) { + console.log(this.gnubby_); + console.log(UTIL_fmt('adding ' + challenges.length + ' challenges')); + for (var i = 0; i < challenges.length; i++) { + this.challenges_.push(challenges[i]); + } + } + this.challengesSet_ = true; + + switch (this.state_) { + case SingleGnubbySigner.State.INIT: + this.open_(); + break; + case SingleGnubbySigner.State.OPENING: + // The open has already commenced, so accept the challenges, but don't do + // anything. + break; + case SingleGnubbySigner.State.IDLE: + if (this.challengeIndex_ < challenges.length) { + // Challenges set: start signing. + this.doSign_(this.challengeIndex_); + } else { + // An empty list of challenges can be set during enroll, when the user + // has no existing enrolled gnubbies. It's unexpected during sign, but + // returning WRONG_DATA satisfies the caller in either case. + var self = this; + window.setTimeout(function() { + self.goToError_(DeviceStatusCodes.WRONG_DATA_STATUS); + }, 0); + } + break; + case SingleGnubbySigner.State.SIGNING: + // Already signing, so don't kick off a new sign, but accept the added + // challenges. + break; + default: + return false; + } + return true; +}; + +/** + * Attempts to open this signer's gnubby, if it's not already open. + * @private + */ +SingleGnubbySigner.prototype.open_ = function() { + var appIdHash; + if (this.challenges_.length) { + // Assume the first challenge's appId is representative of all of them. + appIdHash = B64_encode(this.challenges_[0].appIdHash); + } + if (this.state_ == SingleGnubbySigner.State.INIT) { + this.state_ = SingleGnubbySigner.State.OPENING; + this.openCanceller_ = DEVICE_FACTORY_REGISTRY.getGnubbyFactory().openGnubby( + this.gnubbyId_, + this.forEnroll_, + this.openCallback_.bind(this), + appIdHash, + this.logMsgUrl_, + 'singlesigner.js:SingleGnubbySigner.prototype.open_'); + } +}; + +/** + * How long to delay retrying a failed open. + */ +SingleGnubbySigner.OPEN_DELAY_MILLIS = 200; + +/** + * How long to delay retrying a sign requiring touch. + */ +SingleGnubbySigner.SIGN_DELAY_MILLIS = 200; + +/** + * @param {number} rc The result of the open operation. + * @param {Gnubby=} gnubby The opened gnubby, if open was successful (or busy). + * @private + */ +SingleGnubbySigner.prototype.openCallback_ = function(rc, gnubby) { + if (this.state_ != SingleGnubbySigner.State.OPENING && + this.state_ != SingleGnubbySigner.State.BUSY) { + // Open completed after close, perhaps? Ignore. + return; + } + + switch (rc) { + case DeviceStatusCodes.OK_STATUS: + if (!gnubby) { + console.warn(UTIL_fmt('open succeeded but gnubby is null, WTF?')); + } else { + this.gnubby_ = gnubby; + this.gnubby_.version(this.versionCallback_.bind(this)); + } + break; + case DeviceStatusCodes.BUSY_STATUS: + this.gnubby_ = gnubby; + this.state_ = SingleGnubbySigner.State.BUSY; + // If there's still time, retry the open. + if (!this.timer_ || !this.timer_.expired()) { + var self = this; + window.setTimeout(function() { + if (self.gnubby_) { + this.openCanceller_ = DEVICE_FACTORY_REGISTRY + .getGnubbyFactory().openGnubby( + self.gnubbyId_, + self.forEnroll_, + self.openCallback_.bind(self), + self.logMsgUrl_, + 'singlesigner.js:SingleGnubbySigner.prototype.openCallback_'); + } + }, SingleGnubbySigner.OPEN_DELAY_MILLIS); + } else { + this.goToError_(DeviceStatusCodes.BUSY_STATUS); + } + break; + default: + // TODO(juanlang): This won't be confused with success, but should it be + // part of the same namespace as the other error codes, which are + // always in DeviceStatusCodes.*? + this.goToError_(rc, true); + } +}; + +/** + * Called with the result of a version command. + * @param {number} rc Result of version command. + * @param {ArrayBuffer=} opt_data Version. + * @private + */ +SingleGnubbySigner.prototype.versionCallback_ = function(rc, opt_data) { + if (rc == DeviceStatusCodes.BUSY_STATUS) { + if (this.timer_ && this.timer_.expired()) { + this.goToError_(DeviceStatusCodes.TIMEOUT_STATUS); + return; + } + // There's still time: resync and retry. + var self = this; + this.gnubby_.sync(function(code) { + if (code) { + self.goToError_(code, true); + return; + } + self.gnubby_.version(self.versionCallback_.bind(self)); + }); + return; + } + if (rc) { + this.goToError_(rc, true); + return; + } + this.state_ = SingleGnubbySigner.State.IDLE; + this.version_ = UTIL_BytesToString(new Uint8Array(opt_data || [])); + this.doSign_(this.challengeIndex_); +}; + +/** + * @param {number} challengeIndex Index of challenge to sign + * @private + */ +SingleGnubbySigner.prototype.doSign_ = function(challengeIndex) { + if (!this.gnubby_) { + // Already closed? Nothing to do. + return; + } + if (this.timer_ && this.timer_.expired()) { + // If the timer is expired, that means we never got a success response. + // We could have gotten wrong data on a partial set of challenges, but this + // means we don't yet know the final outcome. In any event, we don't yet + // know the final outcome: return timeout. + this.goToError_(DeviceStatusCodes.TIMEOUT_STATUS); + return; + } + if (!this.challengesSet_) { + this.state_ = SingleGnubbySigner.State.IDLE; + return; + } + + this.state_ = SingleGnubbySigner.State.SIGNING; + + if (challengeIndex >= this.challenges_.length) { + this.signCallback_(challengeIndex, DeviceStatusCodes.WRONG_DATA_STATUS); + return; + } + + var challenge = this.challenges_[challengeIndex]; + var challengeHash = challenge.challengeHash; + var appIdHash = challenge.appIdHash; + var keyHandle = challenge.keyHandle; + if (this.cachedError_.hasOwnProperty(keyHandle)) { + // Cache hit: return wrong data again. + this.signCallback_(challengeIndex, this.cachedError_[keyHandle]); + } else if (challenge.version && challenge.version != this.version_) { + // Sign challenge for a different version of gnubby: return wrong data. + this.signCallback_(challengeIndex, DeviceStatusCodes.WRONG_DATA_STATUS); + } else { + var nowink = false; + this.gnubby_.sign(challengeHash, appIdHash, keyHandle, + this.signCallback_.bind(this, challengeIndex), + nowink); + } +}; + +/** + * @param {number} code The result of a sign operation. + * @return {boolean} Whether the error indicates the key handle is invalid + * for this gnubby. + */ +SingleGnubbySigner.signErrorIndicatesInvalidKeyHandle = function(code) { + return (code == DeviceStatusCodes.WRONG_DATA_STATUS || + code == DeviceStatusCodes.WRONG_LENGTH_STATUS || + code == DeviceStatusCodes.INVALID_DATA_STATUS); +}; + +/** + * Called with the result of a single sign operation. + * @param {number} challengeIndex the index of the challenge just attempted + * @param {number} code the result of the sign operation + * @param {ArrayBuffer=} opt_info Optional result data + * @private + */ +SingleGnubbySigner.prototype.signCallback_ = + function(challengeIndex, code, opt_info) { + console.log(UTIL_fmt('gnubby ' + JSON.stringify(this.gnubbyId_) + + ', challenge ' + challengeIndex + ' yielded ' + code.toString(16))); + if (this.state_ != SingleGnubbySigner.State.SIGNING) { + console.log(UTIL_fmt('already done!')); + // We're done, the caller's no longer interested. + return; + } + + // Cache certain idempotent errors, re-asking the gnubby to sign it + // won't produce different results. + if (SingleGnubbySigner.signErrorIndicatesInvalidKeyHandle(code)) { + if (challengeIndex < this.challenges_.length) { + var challenge = this.challenges_[challengeIndex]; + if (!this.cachedError_.hasOwnProperty(challenge.keyHandle)) { + this.cachedError_[challenge.keyHandle] = code; + } + } + } + + var self = this; + switch (code) { + case DeviceStatusCodes.GONE_STATUS: + this.goToError_(code); + break; + + case DeviceStatusCodes.TIMEOUT_STATUS: + this.gnubby_.sync(this.synced_.bind(this)); + break; + + case DeviceStatusCodes.BUSY_STATUS: + this.doSign_(this.challengeIndex_); + break; + + case DeviceStatusCodes.OK_STATUS: + // Lower bound on the minimum length, signature length can vary. + var MIN_SIGNATURE_LENGTH = 7; + if (!opt_info || opt_info.byteLength < MIN_SIGNATURE_LENGTH) { + console.error(UTIL_fmt('Got short response to sign request (' + + (opt_info ? opt_info.byteLength : 0) + ' bytes), WTF?')); + } + if (this.forEnroll_) { + this.goToError_(code); + } else { + this.goToSuccess_(code, this.challenges_[challengeIndex], opt_info); + } + break; + + case DeviceStatusCodes.WAIT_TOUCH_STATUS: + window.setTimeout(function() { + self.doSign_(self.challengeIndex_); + }, SingleGnubbySigner.SIGN_DELAY_MILLIS); + break; + + case DeviceStatusCodes.WRONG_DATA_STATUS: + case DeviceStatusCodes.WRONG_LENGTH_STATUS: + case DeviceStatusCodes.INVALID_DATA_STATUS: + if (this.challengeIndex_ < this.challenges_.length - 1) { + this.doSign_(++this.challengeIndex_); + } else if (this.forEnroll_) { + this.goToSuccess_(code); + } else { + this.goToError_(code); + } + break; + + default: + if (this.forEnroll_) { + this.goToError_(code, true); + } else if (this.challengeIndex_ < this.challenges_.length - 1) { + this.doSign_(++this.challengeIndex_); + } else { + this.goToError_(code, true); + } + } +}; + +/** + * Called with the response of a sync command, called when a sign yields a + * timeout to reassert control over the gnubby. + * @param {number} code Error code + * @private + */ +SingleGnubbySigner.prototype.synced_ = function(code) { + if (code) { + this.goToError_(code, true); + return; + } + this.doSign_(this.challengeIndex_); +}; + +/** + * Switches to the error state, and notifies caller. + * @param {number} code Error code + * @param {boolean=} opt_warn Whether to warn in the console about the error. + * @private + */ +SingleGnubbySigner.prototype.goToError_ = function(code, opt_warn) { + this.state_ = SingleGnubbySigner.State.COMPLETE; + var logFn = opt_warn ? console.warn.bind(console) : console.log.bind(console); + logFn(UTIL_fmt('failed (' + code.toString(16) + ')')); + var result = { code: code }; + if (!this.forEnroll_ && code == DeviceStatusCodes.WRONG_DATA_STATUS) { + // When a device yields WRONG_DATA to all sign challenges, and this is a + // sign request, we don't want to yield to the web page that it's not + // enrolled just yet: we want the user to tap the device first. We'll + // report the gnubby to the caller and let it close it instead of closing + // it here. + result.gnubby = this.gnubby_; + } else { + // Since this gnubby can no longer produce a useful result, go ahead and + // close it. + this.close(); + } + this.completeCb_(result); +}; + +/** + * Switches to the success state, and notifies caller. + * @param {number} code Status code + * @param {SignHelperChallenge=} opt_challenge The challenge signed + * @param {ArrayBuffer=} opt_info Optional result data + * @private + */ +SingleGnubbySigner.prototype.goToSuccess_ = + function(code, opt_challenge, opt_info) { + this.state_ = SingleGnubbySigner.State.COMPLETE; + console.log(UTIL_fmt('success (' + code.toString(16) + ')')); + var result = { code: code, gnubby: this.gnubby_ }; + if (opt_challenge || opt_info) { + if (opt_challenge) { + result['challenge'] = opt_challenge; + } + if (opt_info) { + result['info'] = opt_info; + } + } + this.completeCb_(result); + // this.gnubby_ is now owned by completeCb_. + this.gnubby_ = null; +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent-ui.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent-ui.js new file mode 100644 index 000000000000..355e3fdff13d --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent-ui.js @@ -0,0 +1,121 @@ +/** + * @fileoverview UI for ssh-agent + */ + +/** + * @constructor + */ +function SshAgentUI() { + this.input = []; + this.appwindow = null; + this.timeoutId = 0; +} + +/** + * Stop showing the UI. + */ +SshAgentUI.prototype.cancel = function() { + window.clearTimeout(this.timeoutId); + if (this.appwindow) { + this.appwindow.close(); + this.appwindow = null; + } +}; + +/** + * @param {string} msg to display. + * @param {number=} timeout to stop showing. + * @param {Function=} onFailure callback. + */ +SshAgentUI.prototype.showMessage = function(msg, timeout, onFailure) { + window.clearTimeout(this.timeoutId); + + if (timeout) { + this.timeoutId = window.setTimeout( + this.cancel.bind(this), + timeout); + } + + if (!this.appwindow) { + var self = this; + chrome.app.window.create( + 'touch.html', + { + 'frame': 'none', + 'minWidth': 640, + 'maxWidth': 640, + 'minHeight': 170, + 'maxHeight': 170 + }, + function(w) { + self.appwindow = w; + w.drawAttention(); + + // At this point window.onload has not run yet. + // Create function that window.onload will call. + var win = w.contentWindow; + var doc = win.document; + win.ui_onload = function() { + doc.getElementById('status-text').innerText = msg; + doc.body.onkeydown = function(e) { + if (e.keyCode == 27 /*ESC*/) { + e.preventDefault(); + e.stopPropagation(); + self.cancel(); + if (onFailure) onFailure.call(self); + } + }; + }; + }); + } else { + this.appwindow.drawAttention(); + var doc = this.appwindow.contentWindow.document; + doc.getElementById('status-text').innerText = msg; + } +}; + +/** + * @param {string} msg to display. + * @param {Function} onSuccess callback. + * @param {Function} onFailure callback. + */ +SshAgentUI.prototype.getPIN = function(msg, onSuccess, onFailure) { + this.cancel(); + + var self = this; + chrome.app.window.create( + 'pin.html', + { + 'frame': 'none', + 'minWidth': 640, + 'maxWidth': 640, + 'minHeight': 170, + 'maxHeight': 170 + }, + function(w) { + self.appwindow = w; + w.drawAttention(); + + // At this point window.onload has not run yet. + // Create function that window.onload will call. + var win = w.contentWindow; + var doc = win.document; + win.ui_onload = function() { + doc.getElementById('status-text').innerText = msg; + doc.getElementById('pin').focus(); + doc.getElementById('pin').onchange = function(e) { + self.input = UTIL_StringToBytes(e.srcElement.value); + self.cancel(); + onSuccess.call(self); + }; + doc.body.onkeydown = function(e) { + if (e.keyCode == 27 /*ESC*/) { + e.preventDefault(); + e.stopPropagation(); + self.cancel(); + onFailure.call(self); + } + }; + }; + }); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent.js new file mode 100644 index 000000000000..19e02aaeabf7 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh-agent.js @@ -0,0 +1,1677 @@ +/** + * @fileoverview Javascript ssh agent that mostly only knows about Gnubby. + */ + +'use strict'; + +/** + * @param {Function} handler for bottom-half messages. + * @constructor + */ +function SshAgent(handler) { + this.emergency_ = false; + this.lookup_ = []; + this.ssh_token_ = null; + this.ecr_token_ = null; + this.ecr_session_ = null; + this.handler_ = handler; + + function safeGetLocalStorageValue(key) { + return new Promise(function(resolve, reject) { + if (!chrome || !chrome.storage) { + reject(); + return; + } + + chrome.storage.local.get(key, function(data) { + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt(chrome.runtime.lastError.message)); + reject(); + return; + } + if (!data) { + reject(); + return; + } + resolve(data[key]); + }); + }); + } + + // Try recover token and emergency mode from local storage. + // These likely will have finished before a request that wants to use it + // is active. Hence no need for callback chaining. + safeGetLocalStorageValue('ssh_token').then(function(token) { + if (typeof token === 'string') { + this.ssh_token_ = UTIL_HexToArray(token); + } + }.bind(this)); + safeGetLocalStorageValue('emergency_mode').then(function(value) { + if (typeof value === 'boolean') { + this.emergency_ = value; + } + }.bind(this)); +} + + +/** + * Our singleton agent. Lazily initialized. + * @type {SshAgent} + */ +var sshAgent = null; + + +/** @const */ +SshAgent.CORP_NORMAL = 0; +/** @const */ +SshAgent.PROD_NORMAL = 1; +/** @const */ +SshAgent.CORP_EMERGENCY = 2; +/** @const */ +SshAgent.PROD_EMERGENCY = 3; +/** @const */ +SshAgent.NON_ROTATING = 4; +/** @const */ +SshAgent.E2E_DECRYPT_MULTI = 6; +/** @const */ +SshAgent.E2E_DECRYPT_SINGLE = 7; +/** @const */ +SshAgent.GNUBBY_QUOTE_REQUEST_PREFIX = 'k7xA#mvD&S2m8e%3'; +/** @const */ +SshAgent.slotNames = [ + 'corp/normal', + 'prod/normal', + 'corp/emergency', + 'prod/emergency', + 'non-rotating', + 'e2e-decrypt-multi', + 'e2e-decrypt-single' +]; + + +/** + * Reply with generic ssh failure code. + * @param {Function} sendResponse callback. + */ +SshAgent.sendGenericFailure = function(sendResponse) { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_FAILURE); + var respJson = { + 'type': 'auth-agent@openssh.com', + 'data': rsp.data() + }; + sendResponse(respJson); +}; + + +/** + * Reply with an ssh message. + * @param {Function} sendResponse callback. + * @param {SshBlob} rsp to send. + */ +SshAgent.sendSshBlob = function(sendResponse, rsp) { + var respJson = { + 'type': 'auth-agent@openssh.com', + 'data': rsp.data() + }; + sendResponse(respJson); +}; + + +/** + * Parse public key and signature out of a message reply. + * @param {Object} reply message to parse from. + * @param {SshBlob} pk public key destination. + * @param {SshBlob} sig signature destination. + */ +SshAgent.parsePubkeyAndSignature = function(reply, pk, sig) { + if (reply.exponent) { + // rsa + var type = 'ssh-rsa'; + pk.appendString(type); + var exp = UTIL_HexToArray(reply.exponent); + pk.appendSize(exp.length); + pk.appendBytes(exp); + var pub = UTIL_HexToArray(reply.publickey); + pk.appendSize(pub.length); + pk.appendBytes(pub); + //pk.print('pk'); + + if (reply.signature) { + sig.appendString(type); + var s = new SshBlob(); + var sg = UTIL_HexToArray(reply.signature); + sig.appendSize(sg.length); + sig.appendBytes(sg); + } + } else { + // ecdsa + var type = 'ecdsa-sha2-nistp256'; + pk.appendString(type); + pk.appendString('nistp256'); + pk.appendSize(65); + pk.appendBytes(UTIL_HexToArray(reply.publickey)); + + if (reply.signature) { + // Signature is ASN1 DER sequence of two signed ints. + // Translate into ssh format. + var bytes = UTIL_HexToArray(reply.signature); + + sig.appendString(type); + + var i = 2; + var r = bytes.slice(2 + i, 2 + i + bytes[1 + i]); + i += 2 + r.length; + var s = bytes.slice(2 + i, 2 + i + bytes[1 + i]); + + var rs = new SshBlob(); + rs.appendSize(r.length); + rs.appendBytes(r); + rs.appendSize(s.length); + rs.appendBytes(s); + + sig.appendSshBlob(rs); + } + } +}; + + +/** + * Return SSH2 key blob as printable string. + * @param {SshBlob} pk to format. + * @return {string} formatted pk. + */ +SshAgent.printSSH = function(pk) { + var result = pk.copy().readString(); + result += ' ' + base64_encode(pk.data()) + ' corp/normal'; + return result; +}; + + +/** + * Set or unset emergency mode. + * @param {boolean} value to set. + */ +SshAgent.prototype.setEmergency = function(value) { + if (value != this.emergency_) { + if (chrome && chrome.storage) { + chrome.storage.local.set( + { 'emergency_mode': value }, + function() {}); + } + this.emergency_ = value; + } +}; + + +/** + * Get emergency mode setting. + * @return {boolean} current setting. + */ +SshAgent.prototype.getEmergency = function() { + return this.emergency_; +}; + + +/** + * Read out all identities we care about and cache their fingerprints, + * taking emergency mode into account. + * + * @param {Function} sendResponse callback. + */ +SshAgent.prototype.requestIdentities = function(sendResponse) { + var publickeyPk; + var corpCert; + var prodCert; + + var self = this; + + function reportKeys() { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_IDENTITIES_ANSWER); + var n = 0; + if (publickeyPk) ++n; + if (corpCert) ++n; + if (prodCert) ++n; + rsp.appendSize(n); + var suffix = self.emergency_ ? '/emergency!' : '/normal'; + + if (publickeyPk) { + rsp.appendSshBlob(publickeyPk); + rsp.appendString('publickey'); + } + if (corpCert) { + rsp.appendSshBlob(corpCert); + rsp.appendString('corp' + suffix); + } + if (prodCert) { + rsp.appendSshBlob(prodCert); + rsp.appendString('prod' + suffix); + } + SshAgent.sendSshBlob(sendResponse, rsp); + } + + this.lookup_ = []; // Clear lookup state. + + this.getSSH(SshAgent.NON_ROTATING, false, + function(rc, pk) { + if (rc === 0) { + publickeyPk = pk; + self.lookup_[pk.fingerprint()] = SshAgent.NON_ROTATING; + } + + var certId = self.emergency_ ? + SshAgent.PROD_EMERGENCY : SshAgent.PROD_NORMAL; + self.certRead(certId, + function(rc, cert) { + if (rc === 0) { + var c = new SshBlob(cert); + c.crop(4); // Drop length field. + prodCert = c; + self.lookup_[c.fingerprint()] = certId; + } + + certId = self.emergency_ ? + SshAgent.CORP_EMERGENCY : SshAgent.CORP_NORMAL; + self.certRead(certId, + function(rc, cert) { + if (rc === 0) { + var c = new SshBlob(cert); + c.crop(4); + corpCert = c; + self.lookup_[c.fingerprint()] = certId; + } + + reportKeys(); + }); + } + ); + } + ); +}; + + +/** + * @param {SshBlob} key or cert to look up. + * @return {number} which slot identity lives at or -1 if not found. + */ +SshAgent.prototype.getIdentity = function(key) { + var fingerprint = key.fingerprint(); + if (!this.lookup_.hasOwnProperty(fingerprint)) { + return -1; + } + return this.lookup_[fingerprint]; +}; + + +/** + * Get a pk with proof of gnubby residence. + * + * @param {number} which slot. + * @param {boolean} alternate to get the alternate key for slot. + * @param {Function} cb callback. + * @param {Array=} opt_challenge to challenge proof. + */ +SshAgent.prototype.getSSH = function(which, alternate, cb, opt_challenge) { + opt_challenge = opt_challenge || UTIL_getRandom(16); + var self = this; + this.handler_( + { + 'type': 'SSH_PUBKEY', + 'which': which | 0, + 'alternate': (alternate == true), + 'challenge': UTIL_BytesToHex(opt_challenge) + }, + { 'id': chrome.runtime.id }, + function(reply) { + if (reply.rc === 0) { + console.log(reply); + + var pk = new SshBlob(); + var sig = new SshBlob(); + + SshAgent.parsePubkeyAndSignature(reply, pk, sig); + + self.lookup_[pk.fingerprint()] = which; + + var pkStr = SshAgent.printSSH(pk); + + // Forward all other challenge / response attributes to caller. + var raw_pk = reply.publickey && UTIL_HexToArray(reply.publickey); + var device_pk = reply.devicekey && UTIL_HexToArray(reply.devicekey); + var device_fp = + reply.fingerprint && UTIL_HexToArray(reply.fingerprint); + var ecdh = reply.ecdh && UTIL_HexToArray(reply.ecdh); + var meta = reply.meta && UTIL_HexToArray(reply.meta); + + // Verify attestation. + var ecdsa = new crypto_custom.gnubbyd.ecdsa(device_pk); + + // Signature is in ASN1 format. + var signature = + UTIL_Asn1SignatureToJson(UTIL_HexToArray(reply.signature)); + + // Attestation is over concatenation of + // {challenge, meta?, publickey, ecdh} + var message = opt_challenge.slice(0); + message = message.concat(meta || []); + message = message.concat(raw_pk); + message = message.concat(ecdh); + + var verified = + raw_pk && raw_pk.length == 65 && + ecdh && ecdh.length == 65 && + signature && ecdsa.verify(message, signature); + + // TODO(mschilder) warn on first sight of fingerprint? + + if (cb) { + if (verified) { + cb(0, pk, ecdh, pkStr, opt_challenge, device_pk, device_fp, + sig, meta); + } else { + cb(-666); + } + } + } else { + if (cb) { + cb(reply.rc); + } + } + }); +}; + + +/** + * Exchange PIN for cmac token. + * + * @param {!Array} ec gnubby' ecdh public point. + * @param {Array} pin as byte array. + * @param {Function} cb callback. + * @param {?number} opt_ecr_duration seconds to keep a session alive for. + */ +SshAgent.prototype.unlockSSH = function(ec, pin, cb, opt_ecr_duration) { + // Compute ecdh shared secret. + var dh = new crypto_custom.gnubbyd.ecdh(); + var key = dh.computeSecret(ec); + + // Pad PIN w/ random to fill aes block. + var r = UTIL_getRandom(16); + for (var i = 0; i < pin.length; ++i) r[i] = pin[i]; + + var aes_enc = new AES_ECB(key.slice(0, 16)); + var aes_dec = new AES_ECB(key.slice(16, 32)); + + var encrypted_pin = aes_enc.encryptBlock(r); + + aes_enc.clear(); + + UTIL_clear(r); + UTIL_clear(key); + + var self = this; + this.handler_( + { + 'type': 'SSH_UNLOCK', + 'ecdh': dh.getPublicKey(), + 'duration': opt_ecr_duration, + 'pin': encrypted_pin + }, + { 'id': chrome.runtime.id }, + function(reply) { + console.log(reply); + if (reply.rc === 0) { + var encrypted_token = UTIL_HexToArray(reply.token); + var decrypted_token = aes_dec.decryptBlock(encrypted_token); + var token = decrypted_token; + if (opt_ecr_duration) { + self.ecr_token_ = token; + self.ecr_session_ = reply.sessionId; + } else { + self.ssh_token_ = token; + // Also try save token in local storage, in case we get reaped + // and restarted. + if (chrome && chrome.storage) { + chrome.storage.local.set( + { 'ssh_token': UTIL_BytesToHex(token) }, + function() {}); + } + } + } else { + self.ssh_token_ = null; + self.ecr_token_ = null; + self.ecr_session_ = null; + } + aes_dec.clear(); + if (cb) cb(reply.rc); + }); +}; + + +/** + * Sign input using SSH private key. + * + * @param {number} which key to use. + * @param {Array} input to sign. + * @param {Function} cb callback. + */ +SshAgent.prototype.signSSH = function(which, input, cb) { + var token = this.ssh_token_ || []; + + // aes-cmac-16 the request with token as key. + var cmacInput; + var sha = new SHA256(); + sha.update(input); + + cmacInput = input = sha.digest(); + var cmacer = new AES_CMAC(token); + var cmac = UTIL_BytesToHex(cmacer.cmac(cmacInput)); + cmacer.clear(); + + this.handler_( + { + 'type': 'SSH_SIGN', + 'which': which | 0, + 'token': cmac, + 'input': input + }, + { 'id': chrome.runtime.id }, + function(reply) { + console.log(reply); + if (reply.rc == 0 && reply.publickey && reply.signature) { + var pk = new SshBlob(); + var sig = new SshBlob(); + + SshAgent.parsePubkeyAndSignature(reply, pk, sig); + + cb(0, pk, sig); + } else { + cb(reply.rc); + } + }); +}; + +/** + * Get KEK for given fp and input. + * + * @param {Array} meta data for key to use. + * @param {Array} fp fingerprint to apply in KDF. + * @param {Array} input dh point. + * @param {Function} cb callback. + */ +SshAgent.prototype.e2eDecrypt = function(meta, fp, input, cb) { + var which = meta[2]; + var token = this.ssh_token_ || []; + var sessionId = null; + if (meta[0] & SSH2_KF_ALWAYS_AUTH) { + token = this.ecr_token_ || []; + sessionId = this.ecr_session_ || ''; + } + + // aes-cmac-16 the request with token as key. + var cmacInput; + var sha = new SHA256(); + sha.update(fp); + sha.update(input); + + cmacInput = sha.digest(); + var cmacer = new AES_CMAC(token); + var cmac = cmacer.cmac(cmacInput); + cmacer.clear(); + + var req = { + 'type': 'E2E_DECRYPT', + 'which': which | 0, + 'token': UTIL_BytesToHex(cmac), + 'fp': UTIL_BytesToHex(fp), + 'input': UTIL_BytesToHex(input) + }; + + if (meta[0] & SSH2_KF_ALWAYS_AUTH) { + req.sessionId = sessionId; + } + + this.handler_( + req, + { 'id': chrome.runtime.id }, + function(reply) { + console.log(reply); + if (reply.rc == 0 && reply.encrypted_key) { + + // Decrypt using sha(cmac,token)[0..15] as key + sha.reset(); + sha.update(token); + sha.update(cmac); + var aes = new AES_ECB(sha.digest().slice(0, 16)); + var decrypted_key = aes.decryptBlock( + UTIL_HexToArray(reply.encrypted_key)); + + var result = new SshBlob(); + result.appendSize(decrypted_key.length); + result.appendBytes(decrypted_key); + + cb(0, result.data()); + } else { + cb(reply.rc); + } + }); +}; + +/** + * Read a block from Emergency Credential store. + * + * @param {number} which block to read. + * @param {Function} cb callback. + */ +SshAgent.prototype.readECred = function(which, cb) { + which = which || 0; + var token = this.ecr_token_ || []; + var sessionId = this.ecr_session_ || ''; + + var cmacer = new AES_CMAC(token); + + var sha = new SHA256(); + sha.update([which]); + var cmac = UTIL_BytesToHex(cmacer.cmac(sha.digest())); + cmacer.clear(); + + this.handler_( + { + 'type': 'ECR_READ', + 'sessionId': sessionId, + 'block': which, + 'token': cmac + }, + { 'id': chrome.runtime.id }, + function(reply) { + if (reply.rc == 0 && reply.data) { + var data = UTIL_HexToArray(reply.data); + cb(0, data); + } else { + cb(reply.rc); + } + }); +}; + + +/** + * Write a block of the Emergency Credential store. + * + * @param {number} which block to write. + * @param {Array} data to write. + * @param {Function} cb callback. + */ +SshAgent.prototype.writeECred = function(which, data, cb) { + which = which || 0; + var token = this.ecr_token_ || []; + var sessionId = this.ecr_session_ || ''; + + var cmacer = new AES_CMAC(token); + var u8 = new Uint8Array(data); + var block = new Uint8Array(1 + 1024); + + block[0] = which; + for (var i = 0; i < 1024; ++i) { + block[1 + i] = u8[i]; + } + + var sha = new SHA256(); + sha.update(block); + var cmac = UTIL_BytesToHex(cmacer.cmac(sha.digest())); + cmacer.clear(); + + this.handler_( + { + 'type': 'ECR_WRITE', + 'sessionId': sessionId, + 'block': which, + 'data': UTIL_BytesToHex(block.subarray(1)), + 'token': cmac + }, + { 'id': chrome.runtime.id }, + function(reply) { + cb(reply.rc); + }); +}; + + +/** + * Read a certificate slot. + * + * @param {number} which slot to read. + * @param {Function} cb callback. + */ +SshAgent.prototype.certRead = function(which, cb) { + this.handler_( + { + 'type': 'SSH_CERT_READ', + 'which': which | 0 + }, + { 'id': chrome.runtime.id }, + function(reply) { + if (reply.rc === 0) { + cb(0, UTIL_HexToArray(reply.cert)); + } else { + cb(reply.rc); + } + }); +}; + + +/** + * Write certificate slot. + * + * @param {number} which slot to write. + * @param {boolean} promote whether to switch to alternate key. + * @param {Array} cert data to write. + * @param {Function} cb callback. + */ +SshAgent.prototype.certWrite = function(which, promote, cert, cb) { + this.handler_( + { + 'type': 'SSH_CERT_WRITE', + 'which': which | 0, + 'promote': (promote == true), + 'cert': UTIL_BytesToHex(cert) + }, + { 'id': chrome.runtime.id }, + function(reply) { + cb(reply.rc); + }); +}; + + +/** + * End a gnubbyd session. + * + * @param {Function} cb callback. + * @param {?boolean} opt_reset to reset the gnubby upon release. + */ +SshAgent.prototype.releaseSSH = function(cb, opt_reset) { + var sessionId = this.ecr_session_; + if (sessionId) { + this.ecr_token_ = null; + this.ecr_session_ = null; + var req = { + 'type': 'SSH_RELEASE', + 'sessionId': sessionId + }; + if (opt_reset) req.reset = true; + this.handler_( + req, + { 'id': chrome.runtime.id }, + function(reply) { + cb(reply.rc); + }); + } else { + cb(0); + } +}; + + +/** + * Analyzes callback response code and decides what the next step should be. + * + * @param {number} rc + * @param {Object} arg1 + * @param {Object} arg2 + * @param {function(number, Object, Object)} onSuccess + * @this {Object} state bound to. + */ +SshAgent.unboundInterpretResponse = function(rc, arg1, arg2, onSuccess) { + if (this.cancelled) return; // Done already + switch (rc) { + case 0: { + this.ui.cancel(); + onSuccess(rc, arg1, arg2); // Whee! + } break; + case 0x6985: { // Touch + this.onTouchRequired(); + } break; + case 0x63c0: { + this.onFailure('(security key locked out :-()'); + } break; + case 0x63c1: + case 0x63c2: + case 0x63c3: + case 0x63c4: + case 0x63c5: + case 0x63c6: + case 0x63c7: + case 0x63c8: + case 0x63c9: + case 0x63ca: { // PIN + var nLeft = rc - 0x63c0; + if (this.showTriesLeft) { + var msg = '(wrong security key password!, ' + nLeft + ' tries left!)'; + this.ui.showMessage(msg, 2500); + var self = this; + window.setTimeout(function() { self.onPINRequired(); }, 2500); + } else { + this.showTriesLeft = true; + this.onPINRequired(); + } + } break; + case -0x60: case -0x61: case -0x62: case -0x63: + case -0x64: case -0x65: case -0x66: case -0x67: + case -0x68: case -0x69: case -0x6a: case -0x6b: + case -0x6c: case -0x6d: case -0x6e: case -0x6f: + case -0x70: case -0x71: case -0x72: case -0x73: + case -0x74: case -0x75: case -0x76: case -0x77: + case -0x78: case -0x79: case -0x7a: case -0x7b: + case -0x7c: case -0x7d: case -0x7e: case -0x7f: { + // Bad stuff. Cardlet / NXP chip wedged. + // Reset it, before reporting error so a retry might work. + this.onFailure('(wedged :/ Try again, reload?)', true); + } break; + default: { + // TODO(mschilder) tolerate some number of BUSY? + this.onFailure(); + } break; + } +}; + +/** + * Handles the case of a failure. + * @param {SshAgent} agent to work with. + * @param {Function} cb A callback to call when the connection is closed. + * @param {string} msg The message to display to the user. + * @param {boolean=} opt_reset Whether to reset the connection. + * @this {Object} state bound to. + */ +SshAgent.unboundFailure = function(agent, cb, msg, opt_reset) { + msg = msg || '(failed)'; + + this.cancelled = true; + this.ui.cancel(); + this.ui.showMessage(msg, 600); + + agent.releaseSSH( + function() { SshAgent.sendGenericFailure(cb); }, + opt_reset); +}; + +/** + * @param {string} msg The message to display to the user. + * @this {Object} state bound to. + */ +SshAgent.unboundTouchDialog = function(msg) { + var self = this; + this.ui.showMessage(msg, + null, + function() { self.onFailure('(escape!)'); } + ); + + // Wait a bit and try again. + window.setTimeout( + function() { + if (!self.cancelled) { + self.request(function(rc, arg1, arg2) { + self.interpretResponse(rc, arg1, arg2, self.onSuccess); + }); + } + }, + 250); +}; + + +/** + * @param {SshAgent} agent to work with. + * @param {string} msg The message to display to the user. + * @param {?number} opt_duration The amount of time to wait to + * get the PIN. + * @this {Object} state bound to. + */ +SshAgent.unboundPINDialog = function(agent, msg, opt_duration) { + var self = this; + this.ui.getPIN(msg, + function() { + var pin = this.input.slice(); + + if (pin.length != 6) { + // User provided password; hash it down. + var sha = new SHA256(); + sha.update(pin); + UTIL_clear(pin); + var digest = sha.digest(); + pin = digest.slice(0, 6); + UTIL_clear(digest); + } + + // Fetch current ecdh to encrypt PIN with. + // Note: small race here that might result in a wrong PIN attempt, + // if other tab sent successful unlock in parallel right now, + // which causes the ecdh point to change. + agent.getSSH(0, false, function(rc, pk, ecdh) { + if (rc == 0) { + agent.unlockSSH(ecdh, pin, + function(rc, arg1, arg2) { + UTIL_clear(pin); + + self.interpretResponse(rc, arg1, arg2, function() { + self.request(function(rc, arg1, arg2) { + self.interpretResponse(rc, arg1, arg2, self.onSuccess); + }); + }); + }, + opt_duration); + } else { + self.onFailure('(failed to get ecdh. Reload?)'); + } + }); + }, + function() { self.onFailure('(escape!)'); } + ); +}; + + +/** + * Handles gnubby capability inquiry. + * @param {SshBlob} req The inquiry request. + * @param {Function} cb Callback. + */ +function handleGnubbyRequestCommand(req, cb) { + var manifest = {}; + + if (chrome.runtime && chrome.runtime.getManifest) + manifest = chrome.runtime.getManifest(); + + var rsp = new SshBlob(); + + rsp.appendByte(SSH2_AGENT_SUCCESS); + rsp.appendSize(1000); // (1000+ == gnubbyd) + rsp.appendString(manifest.name || 'test'); // sysname + rsp.appendString(''); // nodename + rsp.appendString(''); // release + rsp.appendString(manifest.version || 'test'); // version + rsp.appendString(window.navigator.userAgent); // machine + SshAgent.sendSshBlob(cb, rsp); +} + +/** + * Handles a gnubby sign command. + * @param {UsbHelper} helper Helper to use to sign the sign request. + * @param {SshBlob} req The gnubby sign request. + * @param {Function} cb Callback. + */ +function handleGnubbySignCommand(helper, req, cb) { + var timeoutSeconds = req.readByte(); + var n = req.readSize(); + var signData = []; + for (var i = 0; i < n; ++i) { + var b = req.readSshBlob(); + var version = b.readString(); + var challengeHash = b.readByteString(); + var originHash = b.readByteString(); + var keyHandle = b.readByteString(); + signData.push({ + 'version': version, + 'appIdHash': B64_encode(originHash), + 'challengeHash': B64_encode(challengeHash), + 'keyHandle': B64_encode(keyHandle) + }); + } + var signRequest = { + 'type': 'sign_helper_request', + 'timeout': timeoutSeconds, + 'timeoutSeconds': timeoutSeconds, + 'signData': signData + }; + + function handlerResponse(response) { + var rsp = new SshBlob(); + if (response.code == 0) { + // { + // code: 0 + // responseData: { + // version + // appIdHash, challengeHash, keyHandle, signatureData + // } + // } + rsp.appendByte(SSH2_AGENT_GNUBBY_SIGN_RESPONSE); + rsp.appendSize(response.code); + var tmp = new SshBlob(); + if (response.responseData.version) { + tmp.appendString(response.responseData.version); + } else { + tmp.appendSize(0); + } + tmp.appendByteString( + B64_decode(response.responseData.challengeHash)); + tmp.appendByteString(B64_decode(response.responseData.appIdHash)); + tmp.appendByteString(B64_decode(response.responseData.keyHandle)); + tmp.appendByteString( + B64_decode(response.responseData.signatureData)); + rsp.appendSshBlob(tmp); + } else { + var code = response.code || SSH2_AGENT_FAILURE; + rsp.appendByte(SSH2_AGENT_GNUBBY_SIGN_RESPONSE); + rsp.appendSize(code); + } + SshAgent.sendSshBlob(cb, rsp); + } + + var handler = helper.getHandler(signRequest); + if (!handler || !handler.run(handlerResponse)) { + SshAgent.sendGenericFailure(cb); + } +} + +/** + * Handles a gnubby quote-and-sign command. + * @param {SshBlob} request The gnubby quote-and-sign request. + * @param {Function} sendResponse Callback. + */ +function handleGnubbyQuoteAndSignCommand(request, sendResponse) { + var pk = request.readSshBlob(); + var dataBlob = request.readSshBlob(); + var flags = request.readSize(); + + var keyIdentity = sshAgent.getIdentity(pk); + if (keyIdentity == -1) { + console.log(UTIL_fmt('Given public key not found on gnubby.')); + SshAgent.sendGenericFailure(sendResponse); + return; + } + + var quoteMetadata = dataBlob.readSshBlob(); + var dataToSign = dataBlob.readString(); + + var state = { + 'ui': new SshAgentUI() + }; + + var metadataType = quoteMetadata.readByte(); + if (metadataType == GNUBBY_QUOTE_USER_AND_PURPOSE) { + var username = quoteMetadata.readString(); + var purpose = quoteMetadata.readString(); + var slotType = SshAgent.slotNames[keyIdentity] || '(unknown)'; + console.log(UTIL_fmt('username: ' + username)); + console.log(UTIL_fmt('purpose: ' + purpose)); + state.onTouchRequired = SshAgent.unboundTouchDialog.bind( + state, 'Touch for ' + purpose + ' with key ' + slotType + + ' as ' + username); + state.onPINRequired = SshAgent.unboundPINDialog.bind( + state, sshAgent, + 'Approval for ' + purpose + ' needs Security Key password'); + } else { + // TODO(przydatek): add metadataType for certificate requests + console.log(UTIL_fmt('Metadata type ' + metadataType + ' not supported.')); + SshAgent.sendGenericFailure(sendResponse); + return; + } + + var fullBlobToSign = new SshBlob(); + fullBlobToSign.appendString(SshAgent.GNUBBY_QUOTE_REQUEST_PREFIX); + fullBlobToSign.appendSshBlob(quoteMetadata); + fullBlobToSign.appendString(dataToSign); + + state.request = sshAgent.signSSH.bind(sshAgent, keyIdentity, + fullBlobToSign.data()); + state.interpretResponse = SshAgent.unboundInterpretResponse.bind(state); + state.onSuccess = function(rc, pk, sig) { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_GNUBBY_QUOTE_RESPONSE); + rsp.appendSshBlob(sig); + SshAgent.sendSshBlob(sendResponse, rsp); + }; + + state.onFailure = SshAgent.unboundFailure.bind( + state, sshAgent, sendResponse); + + state.request(function(rc, arg1, arg2) { + state.interpretResponse(rc, arg1, arg2, state.onSuccess); + }); +} + +/** + * Releases a gnubby with the SSH applet selected. + * @param {Gnubby} g The gnubby. + * @param {function()|undefined} opt_cb Callback when the gnubby is release. + */ +function releaseGnubby(g, opt_cb) { + g.unlock(function(rcIgnored) { + g.close(); + if (opt_cb) opt_cb(); + }); +} + +function callOnSshApplet(g, which, f) { + function fail(rc) { + console.warn(UTIL_fmt('rc: ' + rc)); + releaseGnubby(g, f.bind(null, rc)); + } + + var defaultLockTime = 5; + + g.open(which, GnubbyEnumerationTypes.VID_PID, function(rc) { + if (rc != 0) { fail(rc); return; } + g.sync(function(rc) { + if (rc != 0) { fail(rc); return; } + var lockTime = new Uint8Array([defaultLockTime]); + g.lock(lockTime.buffer, function(rc) { + if (rc != 0) { fail(rc); return; } + g.selectSSH(function(rc, data) { + if (rc != 0) { fail(rc); return; } + f(rc); + }); + }); + }); + }, 'ssh-agent.js:callOnSshApplet'); +} + +/** + * @param {Function} sendResponse callback. + */ +function handleGetVersionCommand(sendResponse) { + var outer = new SshBlob(); + var nDone = 0; + + function gotSshApplet(gnubby, i, indexes, rc) { + function failed(rc) { + console.warn(UTIL_fmt('rc: ' + rc)); + gnubby.unlock(function(rcIgnored) { + gnubby.close(); + if (++nDone == indexes.length) { + SshAgent.sendGenericFailure(sendResponse); + } + }); + } + + if (rc) { failed(rc); return; } + + gnubby.sshSysInfo(function(rc, info) { + if (rc) { failed(rc); return; } + + var u8 = new Uint8Array(info); + var sshMajor = u8[0]; + var sshMinor = u8[1]; + var sshBuild = u8[2]; + + gnubby.unlock(function(rcIgnored) { + // Unlock switches applet back to main. + gnubby.appletVersion(function(rc, info) { + if (rc) { failed(rc); return; } + + u8 = new Uint8Array(info); + var major = u8[0]; + var minor = u8[1]; + var build = u8[2]; + + var versionBlob = new SshBlob(); + versionBlob.appendByte(major); + versionBlob.appendByte(minor); + versionBlob.appendByte(build); + var sshVersionBlob = new SshBlob(); + sshVersionBlob.appendByte(sshMajor); + sshVersionBlob.appendByte(sshMinor); + sshVersionBlob.appendByte(sshBuild); + var pair = new SshBlob(); + pair.appendSshBlob(versionBlob); + pair.appendSshBlob(sshVersionBlob); + outer.appendSshBlob(pair); + + if (++nDone == indexes.length) { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_GNUBBY_GET_VERSION_ANSWER); + rsp.appendSshBlob(outer); + SshAgent.sendSshBlob(sendResponse, rsp); + } + releaseGnubby(gnubby); + }); + }); + }); + } + + gnubbies.enumerate(function(rc, indexes) { + if (rc || !indexes.length) { + SshAgent.sendGenericFailure(sendResponse); + } else { + for (var i = 0; i < indexes.length; i++) { + (function(gnubby, i, indexes) { + callOnSshApplet.call(null, gnubby, indexes[i], + gotSshApplet.bind(null, gnubby, i, indexes)); + })(new Gnubby(), i, indexes); + } + } + }, GnubbyEnumerationTypes.VID_PID); +} + +/** + * @param {Function} sendResponse callback. + */ +function handleSshRequestIdentities(sendResponse) { + sshAgent.requestIdentities(sendResponse); +} + +/** + * @param {Array} dataToSign data to be checked for prefix. + * @return {boolean} true if dataToSign starts with SshBlob-String + * equal to SshAgent.GNUBBY_QUOTE_REQUEST_PREFIX. + */ +function hasQuoteRequestPrefix(dataToSign) { + var prefix = new SshBlob(); + prefix.appendString(SshAgent.GNUBBY_QUOTE_REQUEST_PREFIX); + var hasPrefix = (prefix.data().length <= dataToSign.length); + var i = 0; + while (hasPrefix && i < prefix.data().length) { + if (prefix.data()[i] != dataToSign[i]) { + hasPrefix = false; + } + i++; + } + return hasPrefix; +} + +/** + * @param {SshBlob} request to sign. + * @param {Function} sendResponse callback. + */ +function handleSshSignRequest(request, sendResponse) { + var pk = request.readSshBlob(); + var challenge = request.readSshBlob(); + var flags = request.readSize(); + var sessSize = challenge.readSize(); + var session = challenge.readBytes(sessSize); + var cmd = challenge.readByte(); + var username = challenge.readString(); + var what = challenge.readString(); + + console.log(UTIL_fmt('username: ' + username)); + console.log(UTIL_fmt('what: ' + what)); + + var datatosign = challenge.data(); + + // Reject regular siging requests if datatosign starts with the prefix + // (i.e. the prefix is allowed for quote-signatures only). + if (hasQuoteRequestPrefix(datatosign)) { + console.log(UTIL_fmt( + 'Signing data equal to GNUBBY_QUOTE_REQUEST_PREFIX is forbidden.')); + SshAgent.sendGenericFailure(sendResponse); + return; + } + + var which = sshAgent.getIdentity(pk); + if (which == -1) { + SshAgent.sendGenericFailure(sendResponse); + return; + } + + var state = { + 'ui': new SshAgentUI() + }; + + state.request = sshAgent.signSSH.bind(sshAgent, which, datatosign); + + state.interpretResponse = SshAgent.unboundInterpretResponse.bind(state); + + state.onSuccess = function(rc, pk, sig) { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_SIGN_RESPONSE); + rsp.appendSshBlob(sig); + SshAgent.sendSshBlob(sendResponse, rsp); + }; + + state.onFailure = SshAgent.unboundFailure.bind( + state, sshAgent, sendResponse); + + var slotType = SshAgent.slotNames[which] || '(unknown)'; + state.onTouchRequired = SshAgent.unboundTouchDialog.bind( + state, 'Touch for ' + what + ' with key ' + slotType + ' as ' + username); + + state.onPINRequired = SshAgent.unboundPINDialog.bind( + state, sshAgent, 'SSH needs Security Key password'); + + state.request(function(rc, arg1, arg2) { + state.interpretResponse(rc, arg1, arg2, state.onSuccess); + }); +} + +/** + * @param {SshBlob} request to decrypt. + * @param {Function} sendResponse callback. + */ +function handleE2eDecrypt(request, sendResponse) { + var meta = request.readBytes(request.readSize()); + var pk = request.readSshBlob(); + var fp = request.readSshBlob(); + var input = request.readSshBlob(); + + var which = sshAgent.getIdentity(pk); + if (which == -1 || meta.length < 3 || which != meta[2]) { + console.warn(UTIL_fmt('identity not found')); + SshAgent.sendGenericFailure(sendResponse); + return; + } + + // TODO: whitelist check fp? + + var state = { + 'ui': new SshAgentUI() + }; + + state.request = sshAgent.e2eDecrypt.bind(sshAgent, meta, fp.data(), + input.data()); + + state.interpretResponse = SshAgent.unboundInterpretResponse.bind(state); + + state.onSuccess = function(rc, answer) { + sshAgent.releaseSSH(function() { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_E2E_DECRYPT_RESPONSE); + rsp.appendSshBlob(new SshBlob(answer)); + SshAgent.sendSshBlob(sendResponse, rsp); + }); + }; + + state.onFailure = SshAgent.unboundFailure.bind( + state, sshAgent, sendResponse); + + var slotType = SshAgent.slotNames[which] || '(unknown)'; + state.onTouchRequired = SshAgent.unboundTouchDialog.bind( + state, 'Touch for E2E decrypt using key ' + slotType); + + + if (meta.length >= 3 && !(meta[0] & SSH2_KF_ALWAYS_AUTH)) { + // Multi decrypt / touch. + state.onPINRequired = SshAgent.unboundPINDialog.bind( + state, sshAgent, 'E2E needs Security Key password'); + + state.request(function(rc, arg1, arg2) { + state.interpretResponse(rc, arg1, arg2, state.onSuccess); + }); + } else { + // Single decrypt / pin & touch. + state.onPINRequired = SshAgent.unboundPINDialog.bind( + state, sshAgent, 'E2E needs Security Key password', 60); + + state.onPINRequired(); + } +} + + +/** + * @param {SshBlob} request parameters. + * @param {Function} sendResponse callback. + */ +function handleSshPkChallenge(request, sendResponse) { + var which = request.readByte(); + var alternate = request.readByte(); + var size = request.readSize(); + if (size != 16) throw 'challenge needs to be 128 bit'; + var challenge = request.readBytes(size); + + sshAgent.getSSH(which, alternate != 0, + function(rc, pk, ecdh, pkStr, chal, dk, fp, sig, meta) { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_PK_RESPONSE); + if (rc === 0) { + rsp.appendSize(1); + rsp.appendSize(chal.length); + rsp.appendBytes(chal); + rsp.appendSshBlob(pk); + + // Construct ecdh point in ssh2 format. + var b = new SshBlob(); + b.appendString('ecdh-nistp256'); + b.appendString('nistp256'); + b.appendSize(ecdh.length); + b.appendBytes(ecdh); + rsp.appendSshBlob(b); + + // Construct device pk in ssh2 format. + b.clear(); + b.appendString('ecdsa-sha2-nistp256'); + b.appendString('nistp256'); + b.appendSize(dk.length); + b.appendBytes(dk); + rsp.appendSshBlob(b); + + // Construct device cert fingerprint record. + b.clear(); + b.appendString('sha2'); + b.appendSize(fp.length); + b.appendBytes(fp); + rsp.appendSshBlob(b); + + // Append signature blob. + rsp.appendSshBlob(sig); + + // Append meta array, if present. + if (meta) { + rsp.appendSize(meta.length); + rsp.appendBytes(meta); + } + } else { + rsp.appendSize(0); + } + SshAgent.sendSshBlob(sendResponse, rsp); + }, + challenge); +} + + +/** + * @param {SshBlob} request parameters. + * @param {Function} sendResponse callback. + */ +function handleSshCertRead(request, sendResponse) { + var which = request.readByte(); + sshAgent.certRead(which, function(rc, cert) { + var rsp = new SshBlob(); + if (rc === 0) { + rsp.appendByte(SSH2_AGENT_CERT_READ_ANSWER); + rsp.appendSize(cert.length); + rsp.appendBytes(cert); + } else { + rsp.appendByte(SSH2_AGENT_FAILURE); + } + SshAgent.sendSshBlob(sendResponse, rsp); + }); +} + + +/** + * @param {SshBlob} request parameters. + * @param {Function} sendResponse callback. + */ +function handleSshCertWrite(request, sendResponse) { + var which = request.readByte(); + var promote = request.readByte(); + var cert = request.readSshBlob(); + sshAgent.certWrite(which, promote != 0, cert.data(), function(rc) { + var rsp = new SshBlob(); + if (rc === 0) { + rsp.appendByte(SSH2_AGENT_SUCCESS); + } else { + rsp.appendByte(SSH2_AGENT_FAILURE); + } + SshAgent.sendSshBlob(sendResponse, rsp); + }); +} + + +/** + * @param {SshBlob} request to sign. + * @param {Function} sendResponse callback. + */ +function handleSshEcredsWrite(request, sendResponse) { + var accu = request.readSshBlob(); + var blockno = 0; + + var state = { + 'ui': new SshAgentUI() + }; + + state.request = sshAgent.writeECred.bind(sshAgent, blockno, accu.data()); + + state.interpretResponse = SshAgent.unboundInterpretResponse.bind(state); + + state.onSuccess = function(rc, data) { + ++blockno; + state.ui.showMessage('ECredz wrote ' + blockno + 'K!'); + accu.crop(1024); + + if (blockno < 10) { + state.request = sshAgent.writeECred.bind(sshAgent, blockno, accu.data()); + state.request(function(rc, arg1, arg2) { + state.interpretResponse(rc, arg1, arg2, state.onSuccess); + }); + } else { + sshAgent.releaseSSH(function() { + state.ui.cancel(); + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_SUCCESS); + SshAgent.sendSshBlob(sendResponse, rsp); + }); + } + }; + + state.onFailure = SshAgent.unboundFailure.bind( + state, sshAgent, sendResponse); + + state.onTouchRequired = SshAgent.unboundTouchDialog.bind( + state, 'ECredz-Write needs touch '); + + state.onPINRequired = SshAgent.unboundPINDialog.bind( + state, sshAgent, 'ECredz-Write needs Security Key password', 60); + + state.onPINRequired(); +} + + +/** + * @param {Function} sendResponse callback. + */ +function handleSshEcredsRead(sendResponse) { + var accu = new SshBlob(); + var blockno = 0; + + var state = { + 'ui': new SshAgentUI() + }; + + state.request = sshAgent.readECred.bind(sshAgent, blockno); + + state.interpretResponse = SshAgent.unboundInterpretResponse.bind(state); + + state.onSuccess = function(rc, data) { + ++blockno; + state.ui.showMessage('ECredz read ' + blockno + 'K!'); + accu.appendBytes(data); + + if (blockno < 10) { + state.request = sshAgent.readECred.bind(sshAgent, blockno); + state.request(function(rc, arg1, arg2) { + state.interpretResponse(rc, arg1, arg2, state.onSuccess); + }); + } else { + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_ECREDS_READ_ANSWER); + rsp.appendSshBlob(accu); + sshAgent.releaseSSH(function() { + state.ui.cancel(); + SshAgent.sendSshBlob(sendResponse, rsp); + }); + } + }; + + state.onFailure = SshAgent.unboundFailure.bind( + state, sshAgent, sendResponse); + + state.onTouchRequired = SshAgent.unboundTouchDialog.bind( + state, 'ECredz-Read needs touch '); + + state.onPINRequired = SshAgent.unboundPINDialog.bind( + state, sshAgent, 'ECredz-Read needs Security Key password', 60); + + state.onPINRequired(); +} + + +/** + * @param {SshBlob} request to process. + * @param {Function} sendResponse callback. + */ +function handleSshGetEmergency(request, sendResponse) { + var current = sshAgent.getEmergency(); + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_GET_EMERGENCY_REPLY); + rsp.appendByte(current ? 1 : 0); + SshAgent.sendSshBlob(sendResponse, rsp); +} + + +/** + * @param {SshBlob} request to process. + * @param {Function} sendResponse callback. + */ +function handleSshSetEmergency(request, sendResponse) { + var panic = !!request.readByte(); + var current = sshAgent.getEmergency(); + if (panic && !current) { + new SshAgentUI().showMessage('Switching to emergency mode!', 2000); + } + sshAgent.setEmergency(panic); + var rsp = new SshBlob(); + rsp.appendByte(SSH2_AGENT_SUCCESS); + SshAgent.sendSshBlob(sendResponse, rsp); +} + + +/** + * @param {HelperRequest} request The request to handle. + * @param {UsbHelper} helper The USB helper to use for lower-level requests. + * @constructor + * @implements {RequestHandler} + */ +function SshAgentHandler(request, helper) { + /** @private {HelperRequest} */ + this.request_ = request; + /** @private {UsbHelper} */ + this.helper_ = helper; +} + + +/** No-op close command. */ +SshAgentHandler.prototype.close = function() { +}; + + +/** + * @param {RequestHandlerCallback} cb Called with the result of the request. + * @return {boolean} Whether the handler could be run. + */ +SshAgentHandler.prototype.run = function(cb) { + var req = new SshBlob(this.request_.data); + try { + + var cmd = req.readByte(); + + switch (cmd) { + case SSH2_AGENTC_REQUEST_GNUBBY: { + handleGnubbyRequestCommand(req, cb); + } break; + + case SSH2_AGENTC_GNUBBY_SIGN_REQUEST: { + handleGnubbySignCommand(this.helper_, req, cb); + } break; + + case SSH2_AGENTC_GNUBBY_QUOTE_REQUEST: { + handleGnubbyQuoteAndSignCommand(req, cb); + } break; + + case SSH2_AGENTC_GNUBBY_GET_VERSION: { + handleGetVersionCommand(cb); + } break; + + case SSH2_AGENTC_REQUEST_IDENTITIES: { + handleSshRequestIdentities(cb); + } break; + + case SSH2_AGENTC_SIGN_REQUEST: { + handleSshSignRequest(req, cb); + } break; + + case SSH2_AGENTC_CERT_READ: { + handleSshCertRead(req, cb); + } break; + + case SSH2_AGENTC_CERT_WRITE: { + handleSshCertWrite(req, cb); + } break; + + case SSH2_AGENTC_PK_CHALLENGE: { + handleSshPkChallenge(req, cb); + } break; + + case SSH2_AGENTC_ECREDS_READ: { + handleSshEcredsRead(cb); + break; + } + + case SSH2_AGENTC_ECREDS_WRITE: { + handleSshEcredsWrite(req, cb); + break; + } + + case SSH2_AGENT_SET_EMERGENCY: { + handleSshSetEmergency(req, cb); + } break; + + case SSH2_AGENT_GET_EMERGENCY: { + handleSshGetEmergency(req, cb); + } break; + + case SSH2_AGENTC_E2E_DECRYPT_REQUEST: { + handleE2eDecrypt(req, cb); + } break; + + default: { + throw 'unknown cmd: ' + cmd; + } break; + } + + } catch (err) { + console.log(UTIL_fmt('catch: ' + err)); + console.log(err); + SshAgent.sendGenericFailure(cb); + } + return true; +}; + + +/** + * Registers the SSH agent message handler with the provided helper. + * @param {UsbHelper} helper The helper to register with. + */ +function initSshAgent(helper) { + // Create singleton agent if it does not exist yet. + if (!sshAgent) sshAgent = new SshAgent(messageHandler); + helper.registerHandlerFactory('auth-agent@openssh.com', function(request) { + return new SshAgentHandler(request, helper); + }); +} + + +function handleSshAgentCommand(request, sender, sendResponse) { + function sendResponseOnce(response) { + if (sendResponse) { + sendResponse(response); + sendResponse = null; + } + } + + var handler = requestHelper.getHandler(request); + if (!handler || !handler.run(sendResponseOnce)) { + SshAgent.sendGenericFailure(sendResponseOnce); + } +} + + +/** + * @param {Object} port request was received on. + * @param {Object} request to handle first. + */ +function handleSshAgentConnect(port, request) { + var onMessage = function(request) { + console.log(UTIL_fmt('request')); + console.log(request); + handleSshAgentCommand(request, port.sender, + function(response) { + port.postMessage(response); + }); + }; + + var onDisconnect = function() { + port.onMessage.removeListener(onMessage); + port.onDisconnect.removeListener(onDisconnect); + // TODO(mschilder): wire up to cancel handler somehow. + }; + + port.onMessage.addListener(onMessage); + port.onDisconnect.addListener(onDisconnect); + + // Start work on initial message. + onMessage(request); +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh.png b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ssh.png new file mode 100644 index 0000000000000000000000000000000000000000..a9912dedc85b417c05c6c7293fb34d85bd68810e GIT binary patch literal 6798 zcmV;98gb=`P)cCnkAfQT3-BKBH1GiMG2n+Q1REjz0pJke7)e_SC6PtMxfqL# z{u4;TIoBGPnKQEwfg6EqfuGwIfejP>AaDY3yrjW_fdS^vTfn?|^C=dKB>4o4pq~gD z%?9OinIC`rfiJ)Ml3#!Q1@C>s%x(ov2R<2kT8M|)`KJOWN-E5pIg1^(-;qU&7Po>Y z=zrdORbt>=;pGm_?+8zy}|^&%=*A$l7&ly_sDMoC7q{E|RGc?=9=q+b2c=R8 zfJUQ1tyaakCep^TxB@^L+y5wy-gib(jwDGa6vmOua}$4T zXj+*@Q3S9PFojeEkeUx{n$PE1yl644_92OCwTh&TXx9q>38b;x_0nh-Q~RQ-*K0WE z0GKsvHc3)I(qdpqySsonk|rcc!qh2K0dTHKYYdTIXc!23PXGu&05<9&2|#qoMh*x- zqkl0Yf%9tfT%c)j98(%Bk>vAKtCexUoOT6J0`j>i$H2fiNUtJ?@)EDV|2|X`oy#OqZbF{iUkOwBUD}V?v49slUwf0`z z@x%w*{`mXkBBKu(JMyIUH|AT>HtSi^J=gIe2v#tt8SK=%+ndD=(*=zwbr%gnnKZ*Y&Gx&LRnTMYH zkSyZtFCZMPA<;vD0nMgEQl{#U$v_A%;hkt5dnYh6oLAbLz za^B;dN1}%UGvU3^2u}%n+W`>06POGq588koK#&%INAyx)D9b6pM(r-ZZP06ga1r=B zduO8KIBx`D_T>FvGxxdIT(&9#i4s1jpb&P}a*owPpwy)GTdZPrvq{fSi=J6)Y84yCTXcW)s5`H7&W$ADgy{VCejN>l|MBfvVt&u%&f{m>PNSK>V}_?hxx z+PBFHtnN~Px)rH03s`>cC@;LG)bEQ;hkfIK!Z)zc;f`G;IigKIUz5;4VV7;oeF{&XUO(1yJxAHz zSI{qg!_63IeEE@p6FNeVSPc5tquX+Hs{oXdXDDXi3UFf#r>{5gY6Q3lX~LHG^L_Vx zZYl*)C&odD^6xGBHo70Hg#Y8)TR;E4o~xvHGOYDm`>NP*8u!nh1{p0&v`|Fq274+9mfRzZn zPGH&{z&?fmxtf&qS9uoTBV#H??j?oIU{gOWBVh~b?r?Tc*`q)& zB)$`OQTO31=IcyB@=?8 z#}T0(upGQZjYnS*1du~zS$ADERg$BrS`}a^jkcD1Sxz>9penSJB!{riDUku5N!SCn z)tC4E`d@y$uSBrZFzDlbR5HI&j+-K(d23Q&wU72y=D&P@ zUqOFu-+p|o!Q8T`&r8)d?+5Npe70?4^atUAA1xEN;JUMygO^OiSklX*StGiYgE-1O zOO9UyT)me0f`|!ri6nsTn;iXhqatW&?Z=S$ey+Y9qrKA|@qj^PJfl|O0$c!Ux`ehp z4-F=N*WmQUAW*J$Y1)FHE(t&tMu&Q73Eav}hSdrYa&JH>-iRTSg)@LjR$#6LBkg+W z62Ff6o`vf*#nJ9yjw2f*oxmkMh&&0JWQaUK-ID~YpXdTc9AIFoEa7H5e1BD|4LEjI z4H?AZPL9su8?GQV35$aHNd-m2_9y!v_%fo~8T# z-qW+!>jr!;h1fozJ$ zSvB@Eh<#*E9=Q%A;i1UM_l1`)Yf$(4adGY)z&KyLoSQDY1P&!{$hjErr<|jcIGwB=s=g8H1U29{96;gosHa&2_^}Z4*;m{A9eRdt zgWj=>wr2}U$84d=08^q%iHqx*3veI7cHU~BA_j0ITwclBOTIg)Fu}t#upH#==JCZi z0=fO98PtGtYJS~9p`O_5dHC;dW4ZP7x@;r4imYQmDg>!Y5-`GV8xepx6oEjxZVo!k z8sD=5n}-kpo#9JtQ0PVjX?Q8!Bm{E=g+)NTl#Ui^866VbY%GI-I%jnITKfA1DOv;H zcyvISY*I7O8;&MnME9;I5q!)5XMMK7MYS_l1BrOnspkR=9!9uH;DGPI31AGMKIPJ~ z&vDajlSL>?^P&y-UV7$Y|IUxsHl+j+YP1(dJILTRk=iAi1UGI1=(vII#We6y1W@D1 z&sr*gNm*OsCkfFg+M7+DEsz`x_$d0>i|BKPMYTorAD8PI)LlomP7dq}@?dglw<)Dt zB1Ib{a2@c{9B}AGg3Z35o$*MullB7;{7eM35iNU^8+ase3?JeFydM0#0j&Xu!4?;N z1jJ~gYmonx-O^LGeZN9$4D9m2ilu=!5oFheGkBQJ477E0n2T+*#mDHR2-X+Cu?q zTlFhZ!<31fV{NB3DKI4gN5f5!osb6*X92D86u@R|(3L^V2v#e00N%9;(lHm*@Ju-g$Kx2AF=*EaWOZXdbdiEjs6h`fO*0GmYcC8n2X01iEOKLA$) zrB(vCy%g64dZhq5mxSHkKAqrml=puHz)hqo1K!(^1SoUV*e2{EZo<7a0>J7C7p5Px7fN=!rSOO6g8!^JK2WrZ9PI#Nr#BXtvgp2K;vl<9I!pM%_ z+8C@H>1>0MA5P)$EP@aBlXlJw7~JI^Zpu6_)fDO2TejxTe~~=7!{7RjC2FPCN&_E$L#OkqOkn z^T27qZ5yrG;=Y42(k3To3L7B~1X{>P)coyPQv}@h1+#qCB(}nXP=QK5=R^gN+5--} z$Q?vrz*#$GnRB5W6k65~VvpsPZ)A|zVVF}|Wio50*b}ta{@h;&OOFD-Q30q7cPLTu zZu%U9RJDIU<*C|Go1fawhM$LVk3j5V-mPpdy-rOCM^7NY&j7MoCA5S!B>zs}aR^1- z{F84k@A_U6@jgI$9wyg#RxcNM1#{`;@kxK8l>4%pEdOZ)$PRd+OjG8`Ytm*K7)KY! zWrk%(`?0vYmr1t)noJHU0P1!87evUDS6T9ysEW$v*)hQVu>oihcNNVh_fzu8q>4XE z5VJFYzo3EOsHK)LD~Nd~825mvoBLjRBmt!UzbC(32Ap-UfK$^{F4MWk^LN^FT1Q)> zjX$FBeeg?oC!v%?_W-59>Go(d?4pvOJ=<+NZ?^p7@BZ5AICIC& zzN<}E)Vy7`y#Jt#r*Ym^6U9O?Z zW@ct)W@ct)X2#-WzU4M)(k7no(Tk*EJLx(A2>e2xlG)#a~ao5|=GveUqi4t)IJbNnxZ zc9_er_Ih`Y=pjH3K#`eKMO~}{ze9kx5m3z4R`T*S(^ZHHV9G~;14J~pva-^4 z{KRn#3=Bd}Zfd5MU30Jw5_t0epanZZIC8|LfoU8csX)G_<#O zpsubCid6YG{3{j;Ee{W$?=gnzhUgq$4zD-*KWc9JkzHcPbD^89AMZLkdB zQ-Upk>E}J?g>Wy=l0a;y1Gq1M>j4Y`Xa}G+;sqEpD|6B9TI)0s$%Ck;cSP(}6#u(E zvb}J1)dG-DBocEb*BeNSOlfG}3*g%Tz7AkP!1vyT#~aiGr~^1kq*8{pY{` z2^oXasnqv|hlih=u1PO5Ge!RmgY|TY0J+lezAQ!oKNJbHl{A1QNZKH|*S+r{J-#uM z$;^uDvQM&hDpURy&+^=YKO!RPFzs>IfR6;?nzo?5s z>h7gXrbe?~sS@BO{}p|q!MOZB=|K{NYHVzjA1~a)*Rfp0g6acaa&Ng~muHuj))wUQ zIq_&i#X_Nx8H-f{c!Zhp@JBvWdizx-Y}v0_qphtCO-)VZKW?O68YV@coj|!e6ab8l z_72R<%s?qMWQcqjvp%wO*DXenXFTg^0)Fkn{QL*a)agOe>o33j3iS5$mS3tf?gqy7 zV9)gd8wS`@?jw_cj)Mme;J3f~Eege=c!3X^VeN^xx!tW-ue$8IDgnx`;WMB682|cL zzrQ=cA7bYA?(QC3ebv=Sr|tM3?1dhHYu*_8Tk}R{oST&1f9d5o_0&@#5(LX*i*QcG zJ>5Cisjo0HI)Xp^@ek0tDCK{epI>=(z59X+<SAW@H%Xae1OAz~%=CVl`)jQMI9sT~|3}vkUI27|T>$XwmF)ME z_7)cx@w-3#4*T})gAENAi+ZF`SpB^jCjM=LM90j_oB2#OJ9YT*k*Qz&{FgIJi%U8{ z0>`$o1RzgRj?Pbe`jao|?CN})0e2S>H3LYOW*=lhR7#Z}fjxWo;>eN1$Ye7p6bj<)z|7^OSTXXAfBgNQuldp!zp@`9Vc^}|rsxE4 zKn~@&`#ta0cjc9rf5i0sYl#TWO)Y3^ZIh`UlBtyRax~P}i>sG_N%SS=+eWDL98g3q zm&el5qDf1Fwk+8~KEHy6g*oK%c@V+W$$k1$pZv^=CdMbT5OE3MKlT&FBecdIA0hy~ z;6=}UjOo!Y2axRS?7}HSr^=MhvtEz!|0c{Qd%j@t1TZ0E6F=C8x%oK&SU7a(@KfLQ zj`w^|DusJ~*eg^L3G@OUu;JS4u4ywd@HsH@dqz z@ay0HT0BFu8Ak6mJUsO4{reAO%W%>D{G?^@d4psa{2=JA&S#%<*06E?XESRvmp=^` zU3f8w)XnVeRgu|{nH}KBv7`9!fBz#xZ;AjEPEdXw z+}_@PI)EktT_SoW!i&nJDiRFq>+Q$L$bX@f>Kq&zIJ2~}hb)L5U4#O5l;s@q0JH|3 z%*D3=ND7l#7iD2$g=-3{!pzXcf`BgzO44RsM28b>AipjWwud}`6PRoR5usiXahVl#S=5Ljy4PD ztphTH0gj&l26el!L#ECx<(;fT-R5pWGQb=yIJylwcB^Y!PNd{mTo=YC#&PKIA^XGK zZ2Xux=B-qL>xlq3yOnuuZOcLuyEalON_fJ+IyCH4(K*_hXSoxPcgHNVS|VQV?2kEWWR}- zH)=@Wwbdcd2gHNzvJ*5?#iE|JopFtz+r086VNL@S$j#h!;B5AEjGedF~ zU9&khIy14=HA6EiQx37)B} A promise for the fetched text. In case of an + * error, this promise is rejected with an HTTP status code. + */ +TextFetcher.prototype.fetch = function(url, opt_method, opt_body) {}; + +/** + * @constructor + * @implements {TextFetcher} + */ +function XhrTextFetcher() { +} + +/** + * @param {string} url The URL to fetch. + * @param {string?} opt_method The HTTP method to use (default GET) + * @param {string?} opt_body The request body + * @return {!Promise} A promise for the fetched text. In case of an + * error, this promise is rejected with an HTTP status code. + */ +XhrTextFetcher.prototype.fetch = function(url, opt_method, opt_body) { + return new Promise(function(resolve, reject) { + var xhr = new XMLHttpRequest(); + var method = opt_method || 'GET'; + xhr.open(method, url, true); + xhr.onloadend = function() { + if (xhr.status != 200) { + reject(xhr.status); + return; + } + resolve(xhr.responseText); + }; + xhr.onerror = function() { + // Treat any network-level errors as though the page didn't exist. + reject(404); + }; + if (opt_body) + xhr.send(opt_body); + else + xhr.send(); + }); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/timer.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/timer.js new file mode 100644 index 000000000000..50292014bab7 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/timer.js @@ -0,0 +1,41 @@ +/** + * @fileoverview Provides an interface representing the browser/extension + * system's timer interface. + */ +'use strict'; + +/** + * An interface representing the browser/extension system's timer interface. + * @interface + */ +function SystemTimer() {} + +/** + * Sets a single-shot timer. + * @param {function()} func Called back when the timer expires. + * @param {number} timeoutMillis How long until the timer fires, in + * milliseconds. + * @return {number} A timeout ID, which can be used to cancel the timer. + */ +SystemTimer.prototype.setTimeout = function(func, timeoutMillis) {}; + +/** + * Clears a previously set timer. + * @param {number} timeoutId The ID of the timer to clear. + */ +SystemTimer.prototype.clearTimeout = function(timeoutId) {}; + +/** + * Sets a repeating interval timer. + * @param {function()} func Called back each time the timer fires. + * @param {number} timeoutMillis How long until the timer fires, in + * milliseconds. + * @return {number} A timeout ID, which can be used to cancel the timer. + */ +SystemTimer.prototype.setInterval = function(func, timeoutMillis) {}; + +/** + * Clears a previously set interval timer. + * @param {number} timeoutId The ID of the timer to clear. + */ +SystemTimer.prototype.clearInterval = function(timeoutId) {}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/touch.html b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/touch.html new file mode 100644 index 000000000000..3a6a7853863b --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/touch.html @@ -0,0 +1,42 @@ + + + + + + + + + + + +
+
+
+
+ Waiting for touch + Touch security key +
+
+ + diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ui-onload.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ui-onload.js new file mode 100644 index 000000000000..1cdf8f8f0c39 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/ui-onload.js @@ -0,0 +1,6 @@ +/** + * @fileoverview Generic window.onload for ui html. + */ +window.onload = function() { + if (window.ui_onload) window.ui_onload(); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbenrollhandler.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbenrollhandler.js new file mode 100644 index 000000000000..ae65f8c02a46 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbenrollhandler.js @@ -0,0 +1,338 @@ +/** + * @fileoverview Implements an enroll handler using USB gnubbies. + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * @param {!EnrollHelperRequest} request The enroll request. + * @constructor + * @implements {RequestHandler} + */ +function UsbEnrollHandler(request) { + /** @private {!EnrollHelperRequest} */ + this.request_ = request; + + /** @private {Array} */ + this.waitingForTouchGnubbies_ = []; + + /** @private {boolean} */ + this.closed_ = false; + /** @private {boolean} */ + this.notified_ = false; +} + +/** + * Default timeout value in case the caller never provides a valid timeout. + * @const + */ +UsbEnrollHandler.DEFAULT_TIMEOUT_MILLIS = 30 * 1000; + +/** + * @param {RequestHandlerCallback} cb Called back with the result of the + * request, and an optional source for the result. + * @return {boolean} Whether this handler could be run. + */ +UsbEnrollHandler.prototype.run = function(cb) { + var timeoutMillis = + this.request_.timeoutSeconds ? + this.request_.timeoutSeconds * 1000 : + UsbEnrollHandler.DEFAULT_TIMEOUT_MILLIS; + /** @private {Countdown} */ + this.timer_ = DEVICE_FACTORY_REGISTRY.getCountdownFactory().createTimer( + timeoutMillis); + this.enrollChallenges = this.request_.enrollChallenges; + /** @private {RequestHandlerCallback} */ + this.cb_ = cb; + this.signer_ = new MultipleGnubbySigner( + true /* forEnroll */, + this.signerCompleted_.bind(this), + this.signerFoundGnubby_.bind(this), + timeoutMillis, + this.request_.logMsgUrl); + return this.signer_.doSign(this.request_.signData); +}; + +/** Closes this helper. */ +UsbEnrollHandler.prototype.close = function() { + this.closed_ = true; + for (var i = 0; i < this.waitingForTouchGnubbies_.length; i++) { + this.waitingForTouchGnubbies_[i].closeWhenIdle(); + } + this.waitingForTouchGnubbies_ = []; + if (this.signer_) { + this.signer_.close(); + this.signer_ = null; + } +}; + +/** + * Called when a MultipleGnubbySigner completes its sign request. + * @param {boolean} anyPending Whether any gnubbies are pending. + * @private + */ +UsbEnrollHandler.prototype.signerCompleted_ = function(anyPending) { + if (!this.anyGnubbiesFound_ || this.anyTimeout_ || anyPending || + this.timer_.expired()) { + this.notifyError_(DeviceStatusCodes.TIMEOUT_STATUS); + } else { + // Do nothing: signerFoundGnubby will have been called with each succeeding + // gnubby. + } +}; + +/** + * Called when a MultipleGnubbySigner finds a gnubby that can enroll. + * @param {MultipleSignerResult} signResult Signature results + * @param {boolean} moreExpected Whether the signer expects to report + * results from more gnubbies. + * @private + */ +UsbEnrollHandler.prototype.signerFoundGnubby_ = + function(signResult, moreExpected) { + if (!signResult.code) { + // If the signer reports a gnubby can sign, report this immediately to the + // caller, as the gnubby is already enrolled. Map ok to WRONG_DATA, so the + // caller knows what to do. + this.notifyError_(DeviceStatusCodes.WRONG_DATA_STATUS); + } else if (SingleGnubbySigner.signErrorIndicatesInvalidKeyHandle( + signResult.code)) { + var gnubby = signResult['gnubby']; + // A valid helper request contains at least one enroll challenge, so use + // the app id hash from the first challenge. + var appIdHash = this.request_.enrollChallenges[0].appIdHash; + DEVICE_FACTORY_REGISTRY.getGnubbyFactory().notEnrolledPrerequisiteCheck( + gnubby, appIdHash, this.gnubbyPrerequisitesChecked_.bind(this)); + } else { + // Unexpected error in signing? Send this immediately to the caller. + this.notifyError_(signResult.code); + } +}; + +/** + * Called with the result of a gnubby prerequisite check. + * @param {number} rc The result of the prerequisite check. + * @param {Gnubby=} opt_gnubby The gnubby whose prerequisites were checked. + * @private + */ +UsbEnrollHandler.prototype.gnubbyPrerequisitesChecked_ = + function(rc, opt_gnubby) { + if (rc || this.timer_.expired()) { + // Do nothing: + // If the timer is expired, the signerCompleted_ callback will indicate + // timeout to the caller. + // If there's an error, this gnubby is ineligible, but there's nothing we + // can do about that here. + return; + } + // If the callback succeeded, the gnubby is not null. + var gnubby = /** @type {Gnubby} */ (opt_gnubby); + this.anyGnubbiesFound_ = true; + this.waitingForTouchGnubbies_.push(gnubby); + this.matchEnrollVersionToGnubby_(gnubby); +}; + +/** + * Attempts to match the gnubby's U2F version with an appropriate enroll + * challenge. + * @param {Gnubby} gnubby Gnubby instance + * @private + */ +UsbEnrollHandler.prototype.matchEnrollVersionToGnubby_ = function(gnubby) { + if (!gnubby) { + console.warn(UTIL_fmt('no gnubby, WTF?')); + return; + } + gnubby.version(this.gnubbyVersioned_.bind(this, gnubby)); +}; + +/** + * Called with the result of a version command. + * @param {Gnubby} gnubby Gnubby instance + * @param {number} rc result of version command. + * @param {ArrayBuffer=} data version. + * @private + */ +UsbEnrollHandler.prototype.gnubbyVersioned_ = function(gnubby, rc, data) { + if (rc) { + this.removeWrongVersionGnubby_(gnubby); + return; + } + var version = UTIL_BytesToString(new Uint8Array(data || null)); + this.tryEnroll_(gnubby, version); +}; + +/** + * Drops the gnubby from the list of eligible gnubbies. + * @param {Gnubby} gnubby Gnubby instance + * @private + */ +UsbEnrollHandler.prototype.removeWaitingGnubby_ = function(gnubby) { + gnubby.closeWhenIdle(); + var index = this.waitingForTouchGnubbies_.indexOf(gnubby); + if (index >= 0) { + this.waitingForTouchGnubbies_.splice(index, 1); + } +}; + +/** + * Drops the gnubby from the list of eligible gnubbies, as it has the wrong + * version. + * @param {Gnubby} gnubby Gnubby instance + * @private + */ +UsbEnrollHandler.prototype.removeWrongVersionGnubby_ = function(gnubby) { + this.removeWaitingGnubby_(gnubby); + if (!this.waitingForTouchGnubbies_.length) { + // Whoops, this was the last gnubby. + this.anyGnubbiesFound_ = false; + if (this.timer_.expired()) { + this.notifyError_(DeviceStatusCodes.TIMEOUT_STATUS); + } else if (this.signer_) { + this.signer_.reScanDevices(); + } + } +}; + +/** + * Attempts enrolling a particular gnubby with a challenge of the appropriate + * version. + * @param {Gnubby} gnubby Gnubby instance + * @param {string} version Protocol version + * @private + */ +UsbEnrollHandler.prototype.tryEnroll_ = function(gnubby, version) { + var challenge = this.getChallengeOfVersion_(version); + if (!challenge) { + this.removeWrongVersionGnubby_(gnubby); + return; + } + var challengeValue = B64_decode(challenge['challengeHash']); + var appIdHash = challenge['appIdHash']; + var individualAttest = + DEVICE_FACTORY_REGISTRY.getIndividualAttestation(). + requestIndividualAttestation(appIdHash); + gnubby.enroll(challengeValue, B64_decode(appIdHash), + this.enrollCallback_.bind(this, gnubby, version), individualAttest); +}; + +/** + * Finds the (first) challenge of the given version in this helper's challenges. + * @param {string} version Protocol version + * @return {Object} challenge, if found, or null if not. + * @private + */ +UsbEnrollHandler.prototype.getChallengeOfVersion_ = function(version) { + for (var i = 0; i < this.enrollChallenges.length; i++) { + if (this.enrollChallenges[i]['version'] == version) { + return this.enrollChallenges[i]; + } + } + return null; +}; + +/** + * Called with the result of an enroll request to a gnubby. + * @param {Gnubby} gnubby Gnubby instance + * @param {string} version Protocol version + * @param {number} code Status code + * @param {ArrayBuffer=} infoArray Returned data + * @private + */ +UsbEnrollHandler.prototype.enrollCallback_ = + function(gnubby, version, code, infoArray) { + if (this.notified_) { + // Enroll completed after previous success or failure. Disregard. + return; + } + switch (code) { + case -GnubbyDevice.GONE: + // Close this gnubby. + this.removeWaitingGnubby_(gnubby); + if (!this.waitingForTouchGnubbies_.length) { + // Last enroll attempt is complete and last gnubby is gone. + this.anyGnubbiesFound_ = false; + if (this.timer_.expired()) { + this.notifyError_(DeviceStatusCodes.TIMEOUT_STATUS); + } else if (this.signer_) { + this.signer_.reScanDevices(); + } + } + break; + + case DeviceStatusCodes.WAIT_TOUCH_STATUS: + case DeviceStatusCodes.BUSY_STATUS: + case DeviceStatusCodes.TIMEOUT_STATUS: + if (this.timer_.expired()) { + // Record that at least one gnubby timed out, to return a timeout status + // from the complete callback if no other eligible gnubbies are found. + /** @private {boolean} */ + this.anyTimeout_ = true; + // Close this gnubby. + this.removeWaitingGnubby_(gnubby); + if (!this.waitingForTouchGnubbies_.length) { + // Last enroll attempt is complete: return this error. + console.log(UTIL_fmt('timeout (' + code.toString(16) + + ') enrolling')); + this.notifyError_(DeviceStatusCodes.TIMEOUT_STATUS); + } + } else { + DEVICE_FACTORY_REGISTRY.getCountdownFactory().createTimer( + UsbEnrollHandler.ENUMERATE_DELAY_INTERVAL_MILLIS, + this.tryEnroll_.bind(this, gnubby, version)); + } + break; + + case DeviceStatusCodes.OK_STATUS: + var info = B64_encode(new Uint8Array(infoArray || [])); + this.notifySuccess_(version, info); + break; + + default: + console.log(UTIL_fmt('Failed to enroll gnubby: ' + code)); + this.notifyError_(code); + break; + } +}; + +/** + * How long to delay between repeated enroll attempts, in milliseconds. + * @const + */ +UsbEnrollHandler.ENUMERATE_DELAY_INTERVAL_MILLIS = 200; + +/** + * Notifies the callback with an error code. + * @param {number} code The error code to report. + * @private + */ +UsbEnrollHandler.prototype.notifyError_ = function(code) { + if (this.notified_ || this.closed_) + return; + this.notified_ = true; + this.close(); + var reply = { + 'type': 'enroll_helper_reply', + 'code': code + }; + this.cb_(reply); +}; + +/** + * @param {string} version Protocol version + * @param {string} info B64 encoded success data + * @private + */ +UsbEnrollHandler.prototype.notifySuccess_ = function(version, info) { + if (this.notified_ || this.closed_) + return; + this.notified_ = true; + this.close(); + var reply = { + 'type': 'enroll_helper_reply', + 'code': DeviceStatusCodes.OK_STATUS, + 'version': version, + 'enrollData': info + }; + this.cb_(reply); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbgnubbydevice.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbgnubbydevice.js new file mode 100644 index 000000000000..9e011382db9c --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbgnubbydevice.js @@ -0,0 +1,578 @@ +/** + * @fileoverview Implements a low-level gnubby driver based on chrome.usb. + */ +'use strict'; + +/** + * Low level gnubby 'driver'. One per physical USB device. + * @param {Gnubbies} gnubbies The gnubbies instances this device is enumerated + * in. + * @param {!chrome.usb.ConnectionHandle} dev The device. + * @param {number} id The device's id. + * @param {number} inEndpoint The device's in endpoint. + * @param {number} outEndpoint The device's out endpoint. + * @constructor + * @implements {GnubbyDevice} + */ +function UsbGnubbyDevice(gnubbies, dev, id, inEndpoint, outEndpoint) { + /** @private {Gnubbies} */ + this.gnubbies_ = gnubbies; + this.dev = dev; + this.id = id; + this.inEndpoint = inEndpoint; + this.outEndpoint = outEndpoint; + this.txqueue = []; + this.clients = []; + this.lockCID = 0; // channel ID of client holding a lock, if != 0. + this.lockMillis = 0; // current lock period. + this.lockTID = null; // timer id of lock timeout. + this.closing = false; // device to be closed by receive loop. + this.updating = false; // device firmware is in final stage of updating. + this.inTransferPending = false; + this.outTransferPending = false; +} + +/** + * Namespace for the UsbGnubbyDevice implementation. + * @const + */ +UsbGnubbyDevice.NAMESPACE = 'usb'; + +/** Destroys this low-level device instance. */ +UsbGnubbyDevice.prototype.destroy = function() { + function closeLowLevelDevice(dev) { + chrome.usb.releaseInterface(dev, 0, function() { + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt('Device ' + dev.handle + + ' couldn\'t be released:')); + console.warn(UTIL_fmt(chrome.runtime.lastError.message)); + return; + } + console.log(UTIL_fmt('Device ' + dev.handle + ' released')); + chrome.usb.closeDevice(dev, function() { + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt('Device ' + dev.handle + + ' couldn\'t be closed:')); + console.warn(UTIL_fmt(chrome.runtime.lastError.message)); + return; + } + console.log(UTIL_fmt('Device ' + dev.handle + ' closed')); + }); + }); + } + + if (!this.dev) return; // Already dead. + + this.gnubbies_.removeOpenDevice( + {namespace: UsbGnubbyDevice.NAMESPACE, device: this.id}); + this.closing = true; + + console.log(UTIL_fmt('UsbGnubbyDevice.destroy()')); + + // Synthesize a close error frame to alert all clients, + // some of which might be in read state. + // + // Use magic CID 0 to address all. + this.publishFrame_(new Uint8Array([ + 0, 0, 0, 0, // broadcast CID + GnubbyDevice.CMD_ERROR, + 0, 1, // length + GnubbyDevice.GONE]).buffer); + + // Set all clients to closed status and remove them. + while (this.clients.length != 0) { + var client = this.clients.shift(); + if (client) client.closed = true; + } + + if (this.lockTID) { + window.clearTimeout(this.lockTID); + this.lockTID = null; + } + + var dev = this.dev; + this.dev = null; + var reallyCloseDevice = closeLowLevelDevice.bind(null, dev); + + if (this.destroyHook_) { + var p = this.destroyHook_(); + if (!p) { + reallyCloseDevice(); + return; + } + p.then(reallyCloseDevice); + } else { + reallyCloseDevice(); + } +}; + +/** + * Sets a callback that will get called when this device instance is destroyed. + * @param {function() : (Promise|null)} cb Called back when closed. Callback may + * yield a promise that resolves when the close hook completes. + */ +UsbGnubbyDevice.prototype.setDestroyHook = function(cb) { + this.destroyHook_ = /** @private {(function() : (Promise|null)|null)} */ (cb); +}; + +/** + * Push frame to all clients. + * @param {ArrayBuffer} f Data frame + * @private + */ +UsbGnubbyDevice.prototype.publishFrame_ = function(f) { + var old = this.clients; + + var remaining = []; + var changes = false; + for (var i = 0; i < old.length; ++i) { + var client = old[i]; + if (client.receivedFrame(f)) { + // Client still alive; keep on list. + remaining.push(client); + } else { + changes = true; + console.log(UTIL_fmt( + '[' + Gnubby.hexCid(client.cid) + '] left?')); + } + } + if (changes) this.clients = remaining; +}; + +/** + * @return {boolean} whether this device is open and ready to use. + * @private + */ +UsbGnubbyDevice.prototype.readyToUse_ = function() { + if (this.closing) return false; + if (!this.dev) return false; + + return true; +}; + +/** + * Reads one reply from the low-level device. + * @private + */ +UsbGnubbyDevice.prototype.readOneReply_ = function() { + if (!this.readyToUse_()) return; // No point in continuing. + if (this.updating) return; // Do not bother waiting for final update reply. + + var self = this; + + function inTransferComplete(x) { + self.inTransferPending = false; + + if (!self.readyToUse_()) return; // No point in continuing. + + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt('in bulkTransfer got lastError: ')); + console.warn(UTIL_fmt(chrome.runtime.lastError.message)); + window.setTimeout(function() { self.destroy(); }, 0); + return; + } + + if (x.data) { + var u8 = new Uint8Array(x.data); + console.log(UTIL_fmt('<' + UTIL_BytesToHex(u8))); + + self.publishFrame_(x.data); + + // Write another pending request, if any. + window.setTimeout( + function() { + self.txqueue.shift(); // Drop sent frame from queue. + self.writeOneRequest_(); + }, + 0); + } else { + console.log(UTIL_fmt('no x.data!')); + console.log(x); + window.setTimeout(function() { self.destroy(); }, 0); + } + } + + if (this.inTransferPending == false) { + this.inTransferPending = true; + chrome.usb.bulkTransfer( + /** @type {!chrome.usb.ConnectionHandle} */(this.dev), + { direction: 'in', endpoint: this.inEndpoint, length: 2048 }, + inTransferComplete); + } else { + throw 'inTransferPending!'; + } +}; + +/** + * Register a client for this gnubby. + * @param {*} who The client. + */ +UsbGnubbyDevice.prototype.registerClient = function(who) { + for (var i = 0; i < this.clients.length; ++i) { + if (this.clients[i] === who) return; // Already registered. + } + this.clients.push(who); +}; + +/** + * De-register a client. + * @param {*} who The client. + * @return {number} The number of remaining listeners for this device, or -1 + * Returns number of remaining listeners for this device. + * if this had no clients to start with. + */ +UsbGnubbyDevice.prototype.deregisterClient = function(who) { + var current = this.clients; + if (current.length == 0) return -1; + this.clients = []; + for (var i = 0; i < current.length; ++i) { + var client = current[i]; + if (client !== who) this.clients.push(client); + } + return this.clients.length; +}; + +/** + * @param {*} who The client. + * @return {boolean} Whether this device has who as a client. + */ +UsbGnubbyDevice.prototype.hasClient = function(who) { + if (this.clients.length == 0) return false; + for (var i = 0; i < this.clients.length; ++i) { + if (who === this.clients[i]) + return true; + } + return false; +}; + +/** + * Stuff queued frames from txqueue[] to device, one by one. + * @private + */ +UsbGnubbyDevice.prototype.writeOneRequest_ = function() { + if (!this.readyToUse_()) return; // No point in continuing. + + if (this.txqueue.length == 0) return; // Nothing to send. + + var frame = this.txqueue[0]; + + var self = this; + function OutTransferComplete(x) { + self.outTransferPending = false; + + if (!self.readyToUse_()) return; // No point in continuing. + + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt('out bulkTransfer lastError: ')); + console.warn(UTIL_fmt(chrome.runtime.lastError.message)); + window.setTimeout(function() { self.destroy(); }, 0); + return; + } + + window.setTimeout(function() { self.readOneReply_(); }, 0); + }; + + var u8 = new Uint8Array(frame); + + // See whether this requires scrubbing before logging. + var alternateLog = Gnubby.hasOwnProperty('redactRequestLog') && + Gnubby['redactRequestLog'](u8); + if (alternateLog) { + console.log(UTIL_fmt('>' + alternateLog)); + } else { + console.log(UTIL_fmt('>' + UTIL_BytesToHex(u8))); + } + + if (this.outTransferPending == false) { + this.outTransferPending = true; + chrome.usb.bulkTransfer( + /** @type {!chrome.usb.ConnectionHandle} */(this.dev), + { direction: 'out', endpoint: this.outEndpoint, data: frame }, + OutTransferComplete); + } else { + throw 'outTransferPending!'; + } +}; + +/** + * Check whether channel is locked for this request or not. + * @param {number} cid Channel id + * @param {number} cmd Command to be sent + * @return {boolean} true if not locked for this request. + * @private + */ +UsbGnubbyDevice.prototype.checkLock_ = function(cid, cmd) { + if (this.lockCID) { + // We have an active lock. + if (this.lockCID != cid) { + // Some other channel has active lock. + + if (cmd != GnubbyDevice.CMD_SYNC && + cmd != GnubbyDevice.CMD_INIT) { + // Anything but SYNC|INIT gets an immediate busy. + var busy = new Uint8Array( + [(cid >> 24) & 255, + (cid >> 16) & 255, + (cid >> 8) & 255, + cid & 255, + GnubbyDevice.CMD_ERROR, + 0, 1, // length + GnubbyDevice.BUSY]); + // Log the synthetic busy too. + console.log(UTIL_fmt('<' + UTIL_BytesToHex(busy))); + this.publishFrame_(busy.buffer); + return false; + } + + // SYNC|INIT get to go to the device to flush OS tx/rx queues. + // The usb firmware is to always respond to SYNC|INIT, + // regardless of lock status. + } + } + return true; +}; + +/** + * Update or grab lock. + * @param {number} cid Channel id + * @param {number} cmd Command + * @param {number} arg Command argument + * @private + */ +UsbGnubbyDevice.prototype.updateLock_ = function(cid, cmd, arg) { + if (this.lockCID == 0 || this.lockCID == cid) { + // It is this caller's or nobody's lock. + if (this.lockTID) { + window.clearTimeout(this.lockTID); + this.lockTID = null; + } + + if (cmd == GnubbyDevice.CMD_LOCK) { + var nseconds = arg; + if (nseconds != 0) { + this.lockCID = cid; + // Set tracking time to be .1 seconds longer than usb device does. + this.lockMillis = nseconds * 1000 + 100; + } else { + // Releasing lock voluntarily. + this.lockCID = 0; + } + } + + // (re)set the lock timeout if we still hold it. + if (this.lockCID) { + var self = this; + this.lockTID = window.setTimeout( + function() { + console.warn(UTIL_fmt( + 'lock for CID ' + Gnubby.hexCid(cid) + ' expired!')); + self.lockTID = null; + self.lockCID = 0; + }, + this.lockMillis); + } + } +}; + +/** + * Queue command to be sent. + * If queue was empty, initiate the write. + * @param {number} cid The client's channel ID. + * @param {number} cmd The command to send. + * @param {ArrayBuffer|Uint8Array} data Command argument data + */ +UsbGnubbyDevice.prototype.queueCommand = function(cid, cmd, data) { + if (!this.dev) return; + if (!this.checkLock_(cid, cmd)) return; + + var u8 = new Uint8Array(data); + var frame = new Uint8Array(u8.length + 7); + + frame[0] = cid >>> 24; + frame[1] = cid >>> 16; + frame[2] = cid >>> 8; + frame[3] = cid; + frame[4] = cmd; + frame[5] = (u8.length >> 8); + frame[6] = (u8.length & 255); + + frame.set(u8, 7); + + var lockArg = (u8.length > 0) ? u8[0] : 0; + this.updateLock_(cid, cmd, lockArg); + + var wasEmpty = (this.txqueue.length == 0); + this.txqueue.push(frame.buffer); + if (wasEmpty) this.writeOneRequest_(); +}; + +/** + * @const + */ +UsbGnubbyDevice.WINUSB_VID_PIDS = [ + {'vendorId': 4176, 'productId': 529} // Yubico WinUSB +]; + +/** + * @param {function(Array)} cb Enumerate callback + * @param {GnubbyEnumerationTypes=} opt_type Which type of enumeration to do. + */ +UsbGnubbyDevice.enumerate = function(cb, opt_type) { + // UsbGnubbyDevices are all non-FIDO devices, so return an empty list if + // FIDO is what's wanted. + if (opt_type == GnubbyEnumerationTypes.FIDO_U2F) { + cb([]); + return; + } + + var numEnumerated = 0; + var allDevs = []; + + function enumerated(devs) { + allDevs = allDevs.concat(devs); + if (++numEnumerated == UsbGnubbyDevice.WINUSB_VID_PIDS.length) { + cb(allDevs); + } + } + + for (var i = 0; i < UsbGnubbyDevice.WINUSB_VID_PIDS.length; i++) { + chrome.usb.getDevices(UsbGnubbyDevice.WINUSB_VID_PIDS[i], enumerated); + } +}; + +/** + * @typedef {?{ + * address: number, + * type: string, + * direction: string, + * maximumPacketSize: number, + * synchronization: (string|undefined), + * usage: (string|undefined), + * pollingInterval: (number|undefined) + * }} + * @see http://developer.chrome.com/apps/usb.html#method-listInterfaces + */ +var InterfaceEndpoint; + + +/** + * @typedef {?{ + * interfaceNumber: number, + * alternateSetting: number, + * interfaceClass: number, + * interfaceSubclass: number, + * interfaceProtocol: number, + * description: (string|undefined), + * endpoints: !Array + * }} + * @see http://developer.chrome.com/apps/usb.html#method-listInterfaces + */ +var InterfaceDescriptor; + +/** + * @param {Gnubbies} gnubbies The gnubbies instances this device is enumerated + * in. + * @param {number} which The index of the device to open. + * @param {!chrome.usb.Device} dev The device to open. + * @param {function(number, GnubbyDevice=)} cb Called back with the + * result of opening the device. + */ +UsbGnubbyDevice.open = function(gnubbies, which, dev, cb) { + /** @param {chrome.usb.ConnectionHandle=} handle Connection handle */ + function deviceOpened(handle) { + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt('openDevice got lastError:')); + console.warn(UTIL_fmt(chrome.runtime.lastError.message)); + console.warn(UTIL_fmt('failed to open device. permissions issue?')); + cb(-GnubbyDevice.NODEVICE); + return; + } + var nonNullHandle = /** @type {!chrome.usb.ConnectionHandle} */ (handle); + chrome.usb.listInterfaces(nonNullHandle, function(descriptors) { + var inEndpoint, outEndpoint; + for (var i = 0; i < descriptors.length; i++) { + var descriptor = /** @type {InterfaceDescriptor} */ (descriptors[i]); + for (var j = 0; j < descriptor.endpoints.length; j++) { + var endpoint = descriptor.endpoints[j]; + if (inEndpoint == undefined && endpoint.type == 'bulk' && + endpoint.direction == 'in') { + inEndpoint = endpoint.address; + } + if (outEndpoint == undefined && endpoint.type == 'bulk' && + endpoint.direction == 'out') { + outEndpoint = endpoint.address; + } + } + } + if (inEndpoint == undefined || outEndpoint == undefined) { + console.warn(UTIL_fmt('device lacking an endpoint (broken?)')); + chrome.usb.closeDevice(nonNullHandle); + cb(-GnubbyDevice.NODEVICE); + return; + } + // Try getting it claimed now. + chrome.usb.claimInterface(nonNullHandle, 0, function() { + if (chrome.runtime.lastError) { + console.warn(UTIL_fmt('lastError: ' + chrome.runtime.lastError)); + console.log(chrome.runtime.lastError); + } + var claimed = !chrome.runtime.lastError; + if (!claimed) { + console.warn(UTIL_fmt('failed to claim interface. busy?')); + // Claim failed? Let the callers know and bail out. + chrome.usb.closeDevice(nonNullHandle); + cb(-GnubbyDevice.BUSY); + return; + } + var gnubby = new UsbGnubbyDevice(gnubbies, nonNullHandle, which, + inEndpoint, outEndpoint); + cb(-GnubbyDevice.OK, gnubby); + }); + }); + } + + if (UsbGnubbyDevice.runningOnCrOS === undefined) { + UsbGnubbyDevice.runningOnCrOS = + (window.navigator.appVersion.indexOf('; CrOS ') != -1); + } + if (UsbGnubbyDevice.runningOnCrOS) { + chrome.usb.requestAccess(dev, 0, function(success) { + // Even though the argument to requestAccess is a chrome.usb.Device, the + // access request is for access to all devices with the same vid/pid. + // Curiously, if the first chrome.usb.requestAccess succeeds, a second + // call with a separate device with the same vid/pid fails. Since + // chrome.usb.openDevice will fail if a previous access request really + // failed, just ignore the outcome of the access request and move along. + chrome.usb.openDevice(dev, deviceOpened); + }); + } else { + chrome.usb.openDevice(dev, deviceOpened); + } +}; + +/** + * @param {*} dev Chrome usb device + * @return {GnubbyDeviceId} A device identifier for the device. + */ +UsbGnubbyDevice.deviceToDeviceId = function(dev) { + var usbDev = /** @type {!chrome.usb.Device} */ (dev); + var deviceId = { + namespace: UsbGnubbyDevice.NAMESPACE, + device: usbDev.device + }; + return deviceId; +}; + +/** + * Registers this implementation with gnubbies. + * @param {Gnubbies} gnubbies Gnubbies singleton instance + */ +UsbGnubbyDevice.register = function(gnubbies) { + var USB_GNUBBY_IMPL = { + isSharedAccess: false, + enumerate: UsbGnubbyDevice.enumerate, + deviceToDeviceId: UsbGnubbyDevice.deviceToDeviceId, + open: UsbGnubbyDevice.open + }; + gnubbies.registerNamespace(UsbGnubbyDevice.NAMESPACE, USB_GNUBBY_IMPL); +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbhelper.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbhelper.js new file mode 100644 index 000000000000..f9e343a040c5 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbhelper.js @@ -0,0 +1,23 @@ +/** + * @fileoverview Implements a helper using USB gnubbies. + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +/** + * @constructor + * @extends {GenericRequestHelper} + */ +function UsbHelper() { + GenericRequestHelper.apply(this, arguments); + + var self = this; + this.registerHandlerFactory('enroll_helper_request', function(request) { + return new UsbEnrollHandler(/** @type {EnrollHelperRequest} */ (request)); + }); + this.registerHandlerFactory('sign_helper_request', function(request) { + return new UsbSignHandler(/** @type {SignHelperRequest} */ (request)); + }); +} + +inherits(UsbHelper, GenericRequestHelper); diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbsignhandler.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbsignhandler.js new file mode 100644 index 000000000000..ed574628ef6b --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/usbsignhandler.js @@ -0,0 +1,259 @@ +/** + * @fileoverview Implements a sign handler using USB gnubbies. + * @author juanlang@google.com (Juan Lang) + */ +'use strict'; + +var CORRUPT_sign = false; + +/** + * @param {!SignHelperRequest} request The sign request. + * @constructor + * @implements {RequestHandler} + */ +function UsbSignHandler(request) { + /** @private {!SignHelperRequest} */ + this.request_ = request; + + /** @private {boolean} */ + this.notified_ = false; + /** @private {boolean} */ + this.anyGnubbiesFound_ = false; + /** @private {!Array} */ + this.notEnrolledGnubbies_ = []; +} + +/** + * Default timeout value in case the caller never provides a valid timeout. + * @const + */ +UsbSignHandler.DEFAULT_TIMEOUT_MILLIS = 30 * 1000; + +/** + * Attempts to run this handler's request. + * @param {RequestHandlerCallback} cb Called with the result of the request and + * an optional source for the sign result. + * @return {boolean} whether this set of challenges was accepted. + */ +UsbSignHandler.prototype.run = function(cb) { + if (this.cb_) { + // Can only handle one request. + return false; + } + /** @private {RequestHandlerCallback} */ + this.cb_ = cb; + if (!this.request_.signData || !this.request_.signData.length) { + // Fail a sign request with an empty set of challenges. + return false; + } + var timeoutMillis = + this.request_.timeoutSeconds ? + this.request_.timeoutSeconds * 1000 : + UsbSignHandler.DEFAULT_TIMEOUT_MILLIS; + /** @private {MultipleGnubbySigner} */ + this.signer_ = new MultipleGnubbySigner( + false /* forEnroll */, + this.signerCompleted_.bind(this), + this.signerFoundGnubby_.bind(this), + timeoutMillis, + this.request_.logMsgUrl); + return this.signer_.doSign(this.request_.signData); +}; + + +/** + * Called when a MultipleGnubbySigner completes. + * @param {boolean} anyPending Whether any gnubbies are pending. + * @private + */ +UsbSignHandler.prototype.signerCompleted_ = function(anyPending) { + if (!this.anyGnubbiesFound_ || anyPending) { + this.notifyError_(DeviceStatusCodes.TIMEOUT_STATUS); + } else if (this.signerError_ !== undefined) { + this.notifyError_(this.signerError_); + } else { + // Do nothing: signerFoundGnubby_ will have returned results from other + // gnubbies. + } +}; + +/** + * Called when a MultipleGnubbySigner finds a gnubby that has completed signing + * its challenges. + * @param {MultipleSignerResult} signResult Signer result object + * @param {boolean} moreExpected Whether the signer expects to produce more + * results. + * @private + */ +UsbSignHandler.prototype.signerFoundGnubby_ = + function(signResult, moreExpected) { + this.anyGnubbiesFound_ = true; + if (!signResult.code) { + var gnubby = signResult['gnubby']; + var challenge = signResult['challenge']; + var info = new Uint8Array(signResult['info']); + this.notifySuccess_(gnubby, challenge, info); + } else if (signResult.code == DeviceStatusCodes.WRONG_DATA_STATUS) { + var gnubby = signResult['gnubby']; + this.notEnrolledGnubbies_.push(gnubby); + this.sendBogusEnroll_(gnubby); + } else if (!moreExpected) { + // If the signer doesn't expect more results, return the error directly to + // the caller. + this.notifyError_(signResult.code); + } else { + // Record the last error, to report from the complete callback if no other + // eligible gnubbies are found. + /** @private {number} */ + this.signerError_ = signResult.code; + } +}; + +/** @const */ +UsbSignHandler.BOGUS_APP_ID_HASH = [ + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 +]; + +/** @const */ +UsbSignHandler.BOGUS_CHALLENGE_V1 = [ + 0x04, 0xA2, 0x24, 0x7D, 0x5C, 0x0B, 0x76, 0xF1, + 0xDC, 0xCD, 0x44, 0xAF, 0x91, 0x9A, 0xA2, 0x3F, + 0x3F, 0xBA, 0x65, 0x9F, 0x06, 0x78, 0x82, 0xFB, + 0x93, 0x4B, 0xBF, 0x86, 0x55, 0x95, 0x66, 0x46, + 0x76, 0x90, 0xDC, 0xE1, 0xE8, 0x6C, 0x86, 0x86, + 0xC3, 0x03, 0x4E, 0x65, 0x52, 0x4C, 0x32, 0x6F, + 0xB6, 0x44, 0x0D, 0x50, 0xF9, 0x16, 0xC0, 0xA3, + 0xDA, 0x31, 0x4B, 0xD3, 0x3F, 0x94, 0xA5, 0xF1, + 0xD3 +]; + +/** @const */ +UsbSignHandler.BOGUS_CHALLENGE_V2 = [ + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42 +]; + +/** + * Sends a bogus enroll command to the not-enrolled gnubby, to force the user + * to tap the gnubby before revealing its state to the caller. + * @param {Gnubby} gnubby The gnubby to "enroll" on. + * @private + */ +UsbSignHandler.prototype.sendBogusEnroll_ = function(gnubby) { + var self = this; + gnubby.version(function(rc, opt_data) { + if (rc) { + self.notifyError_(rc); + return; + } + var enrollChallenge; + var version = UTIL_BytesToString(new Uint8Array(opt_data || [])); + switch (version) { + case Gnubby.U2F_V1: + enrollChallenge = UsbSignHandler.BOGUS_CHALLENGE_V1; + break; + case Gnubby.U2F_V2: + enrollChallenge = UsbSignHandler.BOGUS_CHALLENGE_V2; + break; + default: + self.notifyError_(DeviceStatusCodes.INVALID_DATA_STATUS); + } + gnubby.enroll( + /** @type {Array} */ (enrollChallenge), + UsbSignHandler.BOGUS_APP_ID_HASH, + self.enrollCallback_.bind(self, gnubby)); + }); +}; + +/** + * Called with the result of the (bogus, tap capturing) enroll command. + * @param {Gnubby} gnubby The gnubby "enrolled". + * @param {number} code The result of the enroll command. + * @param {ArrayBuffer=} infoArray Returned data. + * @private + */ +UsbSignHandler.prototype.enrollCallback_ = function(gnubby, code, infoArray) { + if (this.notified_) + return; + switch (code) { + case DeviceStatusCodes.WAIT_TOUCH_STATUS: + this.sendBogusEnroll_(gnubby); + return; + + case DeviceStatusCodes.OK_STATUS: + // Got a successful enroll => user tapped gnubby. + // Send a WRONG_DATA_STATUS finally. (The gnubby is implicitly closed + // by notifyError_.) + this.notifyError_(DeviceStatusCodes.WRONG_DATA_STATUS); + return; + } +}; + +/** + * Reports the result of a successful sign operation. + * @param {Gnubby} gnubby Gnubby instance + * @param {SignHelperChallenge} challenge Challenge signed + * @param {Uint8Array} info Result data + * @private + */ +UsbSignHandler.prototype.notifySuccess_ = function(gnubby, challenge, info) { + if (this.notified_) + return; + this.notified_ = true; + + gnubby.closeWhenIdle(); + this.close(); + + if (CORRUPT_sign) { + CORRUPT_sign = false; + info[info.length - 1] = info[info.length - 1] ^ 0xff; + } + var responseData = { + 'appIdHash': B64_encode(challenge['appIdHash']), + 'challengeHash': B64_encode(challenge['challengeHash']), + 'keyHandle': B64_encode(challenge['keyHandle']), + 'signatureData': B64_encode(info) + }; + var reply = { + 'type': 'sign_helper_reply', + 'code': DeviceStatusCodes.OK_STATUS, + 'responseData': responseData + }; + this.cb_(reply, 'USB'); +}; + +/** + * Reports error to the caller. + * @param {number} code error to report + * @private + */ +UsbSignHandler.prototype.notifyError_ = function(code) { + if (this.notified_) + return; + this.notified_ = true; + this.close(); + var reply = { + 'type': 'sign_helper_reply', + 'code': code + }; + this.cb_(reply); +}; + +/** + * Closes the MultipleGnubbySigner, if any. + */ +UsbSignHandler.prototype.close = function() { + while (this.notEnrolledGnubbies_.length != 0) { + var gnubby = this.notEnrolledGnubbies_.shift(); + gnubby.closeWhenIdle(); + } + if (this.signer_) { + this.signer_.close(); + this.signer_ = null; + } +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/util.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/util.js new file mode 100644 index 000000000000..baa147ea8e7d --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/util.js @@ -0,0 +1,258 @@ +/** @fileoverview Various string utility functions */ +// GOOGLE-INTERNAL by mschilder@google.com +'use strict'; + +/** + * Converts a string to an array of bytes. + * @param {string} s The string to convert. + * @param {(Array|Uint8Array)=} bytes The Array-like object into which to store + * the bytes. A new Array will be created if not provided. + * @return {(Array|Uint8Array)} An array of bytes representing the string. + */ +function UTIL_StringToBytes(s, bytes) { + bytes = bytes || new Array(s.length); + for (var i = 0; i < s.length; ++i) + bytes[i] = s.charCodeAt(i); + return bytes; +} + +/** + * Converts a byte array to a string. + * @param {(Uint8Array|Array)} b input byte array. + * @return {string} result. + */ +function UTIL_BytesToString(b) { + return String.fromCharCode.apply(null, b); +} + +/** + * Converts a byte array to a hex string. + * @param {(Uint8Array|Array)} b input byte array. + * @return {string} result. + */ +function UTIL_BytesToHex(b) { + if (!b) return '(null)'; + var hexchars = '0123456789ABCDEF'; + var hexrep = new Array(b.length * 2); + + for (var i = 0; i < b.length; ++i) { + hexrep[i * 2 + 0] = hexchars.charAt((b[i] >> 4) & 15); + hexrep[i * 2 + 1] = hexchars.charAt(b[i] & 15); + } + return hexrep.join(''); +} + +function UTIL_BytesToHexWithSeparator(b, sep) { + var hexchars = '0123456789ABCDEF'; + var stride = 2 + (sep ? 1 : 0); + var hexrep = new Array(b.length * stride); + + for (var i = 0; i < b.length; ++i) { + if (sep) hexrep[i * stride + 0] = sep; + hexrep[i * stride + stride - 2] = hexchars.charAt((b[i] >> 4) & 15); + hexrep[i * stride + stride - 1] = hexchars.charAt(b[i] & 15); + } + return (sep ? hexrep.slice(1) : hexrep).join(''); +} + +function UTIL_HexToBytes(h) { + var hexchars = '0123456789ABCDEFabcdef'; + var res = new Uint8Array(h.length / 2); + for (var i = 0; i < h.length; i += 2) { + if (hexchars.indexOf(h.substring(i, i + 1)) == -1) break; + res[i / 2] = parseInt(h.substring(i, i + 2), 16); + } + return res; +} + +function UTIL_HexToArray(h) { + var hexchars = '0123456789ABCDEFabcdef'; + var res = new Array(h.length / 2); + for (var i = 0; i < h.length; i += 2) { + if (hexchars.indexOf(h.substring(i, i + 1)) == -1) break; + res[i / 2] = parseInt(h.substring(i, i + 2), 16); + } + return res; +} + +function UTIL_equalArrays(a, b) { + if (!a || !b) return false; + if (a.length != b.length) return false; + var accu = 0; + for (var i = 0; i < a.length; ++i) + accu |= a[i] ^ b[i]; + return accu === 0; +} + +function UTIL_ltArrays(a, b) { + if (a.length < b.length) return true; + if (a.length > b.length) return false; + for (var i = 0; i < a.length; ++i) { + if (a[i] < b[i]) return true; + if (a[i] > b[i]) return false; + } + return false; +} + +function UTIL_gtArrays(a, b) { + return UTIL_ltArrays(b, a); +} + +function UTIL_geArrays(a, b) { + return !UTIL_ltArrays(a, b); +} + +function UTIL_unionArrays(a, b) { + var obj = {}; + for (var i = 0; i < a.length; i++) { + obj[a[i]] = a[i]; + } + for (var i = 0; i < b.length; i++) { + obj[b[i]] = b[i]; + } + var union = []; + for (var k in obj) { + union.push(obj[k]); + } + return union; +} + +function UTIL_getRandom(a) { + var tmp = new Array(a); + var rnd = new Uint8Array(a); + window.crypto.getRandomValues(rnd); // Yay! + for (var i = 0; i < a; ++i) tmp[i] = rnd[i] & 255; + return tmp; +} + +function UTIL_setFavicon(icon) { + // Construct a new favion link tag + var faviconLink = document.createElement('link'); + faviconLink.rel = 'Shortcut Icon'; + faviconLink.type = 'image/x-icon'; + faviconLink.href = icon; + + // Remove the old favion, if it exists + var head = document.getElementsByTagName('head')[0]; + var links = head.getElementsByTagName('link'); + for (var i = 0; i < links.length; i++) { + var link = links[i]; + if (link.type == faviconLink.type && link.rel == faviconLink.rel) { + head.removeChild(link); + } + } + + // Add in the new one + head.appendChild(faviconLink); +} + +// Erase all entries in array +function UTIL_clear(a) { + if (a instanceof Array) { + for (var i = 0; i < a.length; ++i) + a[i] = 0; + } +} + +// Type tags used for ASN.1 encoding of ECDSA signatures +/** @const */ +var UTIL_ASN_INT = 0x02; +/** @const */ +var UTIL_ASN_SEQUENCE = 0x30; + +/** + * Parse SEQ(INT, INT) from ASN1 byte array. + * @param {(Uint8Array|Array)} a input to parse from. + * @return {{'r': !Array, 's': !Array}|null} + */ +function UTIL_Asn1SignatureToJson(a) { + if (a.length < 6) return null; // Too small to be valid + if (a[0] != UTIL_ASN_SEQUENCE) return null; + var l = a[1] & 255; + if (l & 0x80) return null; // SEQ.size too large + if (a.length != 2 + l) return null; // SEQ size does not match input + + function parseInt(off) { + if (a[off] != UTIL_ASN_INT) return null; + var l = a[off + 1] & 255; + if (l & 0x80) return null; // INT.size too large + if (off + 2 + l > a.length) return null; // Out of bounds + return a.slice(off + 2, off + 2 + l); + } + + var r = parseInt(2); + if (!r) return null; + + var s = parseInt(2 + 2 + r.length); + if (!s) return null; + + return {'r': r, 's': s}; +} + +/** + * Encode a JSON signature {r,s} as an ASN1 SEQ(INT, INT). May modify sig + * @param {{'r': (!Array|undefined), 's': !Array}} sig + * @return {!Uint8Array} + */ +function UTIL_JsonSignatureToAsn1(sig) { + var rbytes = sig.r; + var sbytes = sig.s; + + // ASN.1 integers are arbitrary length msb first and signed. + // sig.r and sig.s are 256 bits msb first but _unsigned_, so we must + // prepend a zero byte in case their high bit is set. + if (rbytes[0] & 0x80) + rbytes.unshift(0); + if (sbytes[0] & 0x80) + sbytes.unshift(0); + + var len = 4 + rbytes.length + sbytes.length; + var buf = new Uint8Array(2 + len); + var i = 0; + buf[i++] = UTIL_ASN_SEQUENCE; + buf[i++] = len; + + buf[i++] = UTIL_ASN_INT; + buf[i++] = rbytes.length; + buf.set(rbytes, i); + i += rbytes.length; + + buf[i++] = UTIL_ASN_INT; + buf[i++] = sbytes.length; + buf.set(sbytes, i); + + return buf; +} + +function UTIL_prepend_zero(s, n) { + if (s.length == n) return s; + var l = s.length; + for (var i = 0; i < n - l; ++i) { + s = '0' + s; + } + return s; +} + +// hr:min:sec.milli string +function UTIL_time() { + var d = new Date(); + var m = UTIL_prepend_zero((d.getMonth() + 1).toString(), 2); + var t = UTIL_prepend_zero(d.getDate().toString(), 2); + var H = UTIL_prepend_zero(d.getHours().toString(), 2); + var M = UTIL_prepend_zero(d.getMinutes().toString(), 2); + var S = UTIL_prepend_zero(d.getSeconds().toString(), 2); + var L = UTIL_prepend_zero((d.getMilliseconds() * 1000).toString(), 6); + return m + t + ' ' + H + ':' + M + ':' + S + '.' + L; +} + +var UTIL_events = []; +var UTIL_max_events = 500; + +function UTIL_fmt(s) { + var line = UTIL_time() + ': ' + s; + if (UTIL_events.push(line) > UTIL_max_events) { + // Drop from head. + UTIL_events.splice(0, UTIL_events.length - UTIL_max_events); + } + return line; +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/watchdog.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/watchdog.js new file mode 100644 index 000000000000..13647c8a34be --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/watchdog.js @@ -0,0 +1,91 @@ +/** + * @fileoverview Provides a watchdog around a collection of callback functions. + */ +'use strict'; + +/** + * Creates a watchdog around a collection of callback functions, + * ensuring at least one of them is called before the timeout expires. + * If a timeout function is provided, calls the timeout function upon timeout + * expiration if none of the callback functions has been called. + * @param {number} timeoutValueSeconds Timeout value, in seconds. + * @param {function()=} opt_timeoutCb Callback function to call on timeout. + * @constructor + * @implements {Closeable} + */ +function WatchdogRequestHandler(timeoutValueSeconds, opt_timeoutCb) { + /** @private {number} */ + this.timeoutValueSeconds_ = timeoutValueSeconds; + /** @private {function()|undefined} */ + this.timeoutCb_ = opt_timeoutCb; + /** @private {boolean} */ + this.calledBack_ = false; + /** @private {Countdown} */ + this.timer_ = FACTORY_REGISTRY.getCountdownFactory().createTimer( + this.timeoutValueSeconds_ * 1000, this.timeout_.bind(this)); + /** @private {Closeable|undefined} */ + this.closeable_ = undefined; + /** @private {boolean} */ + this.closed_ = false; +} + +/** + * Wraps a callback function, such that the fact that the callback function + * was or was not called gets tracked by this watchdog object. + * @param {function(...?)} cb The callback function to wrap. + * @return {function(...?)} A wrapped callback function. + */ +WatchdogRequestHandler.prototype.wrapCallback = function(cb) { + return this.wrappedCallback_.bind(this, cb); +}; + +/** Closes this watchdog. */ +WatchdogRequestHandler.prototype.close = function() { + this.closed_ = true; + this.timer_.clearTimeout(); + if (this.closeable_) { + this.closeable_.close(); + this.closeable_ = undefined; + } +}; + +/** + * Sets this watchdog's closeable. + * @param {!Closeable} closeable The closeable. + */ +WatchdogRequestHandler.prototype.setCloseable = function(closeable) { + this.closeable_ = closeable; +}; + +/** + * Called back when the watchdog expires. + * @private + */ +WatchdogRequestHandler.prototype.timeout_ = function() { + if (!this.calledBack_ && !this.closed_) { + var logMsg = 'Not called back within ' + this.timeoutValueSeconds_ + + ' second timeout'; + if (this.timeoutCb_) { + logMsg += ', calling default callback'; + console.warn(UTIL_fmt(logMsg)); + this.timeoutCb_(); + } else { + console.warn(UTIL_fmt(logMsg)); + } + } +}; + +/** + * Wrapped callback function. + * @param {function(...?)} cb The callback function to call. + * @param {...?} var_args The callback function's arguments. + * @private + */ +WatchdogRequestHandler.prototype.wrappedCallback_ = function(cb, var_args) { + if (!this.closed_) { + this.calledBack_ = true; + this.timer_.clearTimeout(); + var originalArgs = Array.prototype.slice.call(arguments, 1); + cb.apply(null, originalArgs); + } +}; diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequest.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequest.js new file mode 100644 index 000000000000..ab1d8918ee42 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequest.js @@ -0,0 +1,417 @@ +/** + * @fileoverview Does common handling for requests coming from web pages and + * routes them to the provided handler. + */ + +/** + * FIDO U2F Javascript API Version + * @const + * @type {number} + */ +var JS_API_VERSION = 1.1; + +/** + * Gets the scheme + origin from a web url. + * @param {string} url Input url + * @return {?string} Scheme and origin part if url parses + */ +function getOriginFromUrl(url) { + var re = new RegExp('^(https?://)[^/]*/?'); + var originarray = re.exec(url); + if (originarray == null) return originarray; + var origin = originarray[0]; + while (origin.charAt(origin.length - 1) == '/') { + origin = origin.substring(0, origin.length - 1); + } + if (origin == 'http:' || origin == 'https:') + return null; + return origin; +} + +/** + * Returns whether the registered key appears to be valid. + * @param {Object} registeredKey The registered key object. + * @param {boolean} appIdRequired Whether the appId property is required on + * each challenge. + * @return {boolean} Whether the object appears valid. + */ +function isValidRegisteredKey(registeredKey, appIdRequired) { + if (appIdRequired && !registeredKey.hasOwnProperty('appId')) { + return false; + } + if (!registeredKey.hasOwnProperty('keyHandle')) + return false; + if (registeredKey['version']) { + if (registeredKey['version'] != 'U2F_V1' && + registeredKey['version'] != 'U2F_V2') { + return false; + } + } + return true; +} + +/** + * Returns whether the array of registered keys appears to be valid. + * @param {Array} registeredKeys The array of registered keys. + * @param {boolean} appIdRequired Whether the appId property is required on + * each challenge. + * @return {boolean} Whether the array appears valid. + */ +function isValidRegisteredKeyArray(registeredKeys, appIdRequired) { + return registeredKeys.every(function(key) { + return isValidRegisteredKey(key, appIdRequired); + }); +} + +/** + * Gets the sign challenges from the request. The sign challenges may be the + * U2F 1.0 variant, signRequests, or the U2F 1.1 version, registeredKeys. + * @param {Object} request The request. + * @return {!Array|undefined} The sign challenges, if found. + */ +function getSignChallenges(request) { + if (!request) { + return undefined; + } + var signChallenges; + if (request.hasOwnProperty('signRequests')) { + signChallenges = request['signRequests']; + } else if (request.hasOwnProperty('registeredKeys')) { + signChallenges = request['registeredKeys']; + } + return signChallenges; +} + +/** + * Returns whether the array of SignChallenges appears to be valid. + * @param {Array} signChallenges The array of sign challenges. + * @param {boolean} challengeValueRequired Whether each challenge object + * requires a challenge value. + * @param {boolean} appIdRequired Whether the appId property is required on + * each challenge. + * @return {boolean} Whether the array appears valid. + */ +function isValidSignChallengeArray(signChallenges, challengeValueRequired, + appIdRequired) { + for (var i = 0; i < signChallenges.length; i++) { + var incomingChallenge = signChallenges[i]; + if (challengeValueRequired && + !incomingChallenge.hasOwnProperty('challenge')) + return false; + if (!isValidRegisteredKey(incomingChallenge, appIdRequired)) { + return false; + } + } + return true; +} + +/** + * @param {Object} request Request object + * @param {MessageSender} sender Sender frame + * @param {Function} sendResponse Response callback + * @return {?Closeable} Optional handler object that should be closed when port + * closes + */ +function handleWebPageRequest(request, sender, sendResponse) { + switch (request.type) { + case MessageTypes.U2F_REGISTER_REQUEST: + return handleU2fEnrollRequest(sender, request, sendResponse); + + case MessageTypes.U2F_SIGN_REQUEST: + return handleU2fSignRequest(sender, request, sendResponse); + + case MessageTypes.U2F_GET_API_VERSION_REQUEST: + sendResponse( + makeU2fGetApiVersionResponse(request, JS_API_VERSION, + MessageTypes.U2F_GET_API_VERSION_RESPONSE)); + return null; + + default: + sendResponse( + makeU2fErrorResponse(request, ErrorCodes.BAD_REQUEST, undefined, + MessageTypes.U2F_REGISTER_RESPONSE)); + return null; + } +} + +/** + * Makes a response to a request. + * @param {Object} request The request to make a response to. + * @param {string} responseSuffix How to name the response's type. + * @param {string=} opt_defaultType The default response type, if none is + * present in the request. + * @return {Object} The response object. + */ +function makeResponseForRequest(request, responseSuffix, opt_defaultType) { + var type; + if (request && request.type) { + type = request.type.replace(/_request$/, responseSuffix); + } else { + type = opt_defaultType; + } + var reply = { 'type': type }; + if (request && request.requestId) { + reply.requestId = request.requestId; + } + return reply; +} + +/** + * Makes a response to a U2F request with an error code. + * @param {Object} request The request to make a response to. + * @param {ErrorCodes} code The error code to return. + * @param {string=} opt_detail An error detail string. + * @param {string=} opt_defaultType The default response type, if none is + * present in the request. + * @return {Object} The U2F error. + */ +function makeU2fErrorResponse(request, code, opt_detail, opt_defaultType) { + var reply = makeResponseForRequest(request, '_response', opt_defaultType); + var error = {'errorCode': code}; + if (opt_detail) { + error['errorMessage'] = opt_detail; + } + reply['responseData'] = error; + return reply; +} + +/** + * Makes a success response to a web request with a responseData object. + * @param {Object} request The request to make a response to. + * @param {Object} responseData The response data. + * @return {Object} The web error. + */ +function makeU2fSuccessResponse(request, responseData) { + var reply = makeResponseForRequest(request, '_response'); + reply['responseData'] = responseData; + return reply; +} + +/** + * Maps a helper's error code from the DeviceStatusCodes namespace to a + * U2fError. + * @param {number} code Error code from DeviceStatusCodes namespace. + * @return {U2fError} An error. + */ +function mapDeviceStatusCodeToU2fError(code) { + switch (code) { + case DeviceStatusCodes.WRONG_DATA_STATUS: + return {errorCode: ErrorCodes.DEVICE_INELIGIBLE}; + + case DeviceStatusCodes.TIMEOUT_STATUS: + case DeviceStatusCodes.WAIT_TOUCH_STATUS: + return {errorCode: ErrorCodes.TIMEOUT}; + + default: + var reportedError = { + errorCode: ErrorCodes.OTHER_ERROR, + errorMessage: 'device status code: ' + code.toString(16) + }; + return reportedError; + } +} + +/** + * Sends a response, using the given sentinel to ensure at most one response is + * sent. Also closes the closeable, if it's given. + * @param {boolean} sentResponse Whether a response has already been sent. + * @param {?Closeable} closeable A thing to close. + * @param {*} response The response to send. + * @param {Function} sendResponse A function to send the response. + */ +function sendResponseOnce(sentResponse, closeable, response, sendResponse) { + if (closeable) { + closeable.close(); + } + if (!sentResponse) { + sentResponse = true; + try { + // If the page has gone away or the connection has otherwise gone, + // sendResponse fails. + sendResponse(response); + } catch (exception) { + console.warn('sendResponse failed: ' + exception); + } + } else { + console.warn(UTIL_fmt('Tried to reply more than once!')); + } +} + +/** + * @param {!string} string Input string + * @return {Array} SHA256 hash value of string. + */ +function sha256HashOfString(string) { + var s = new SHA256(); + s.update(UTIL_StringToBytes(string)); + return s.digest(); +} + +var UNUSED_CID_PUBKEY_VALUE = 'unused'; + +/** + * Normalizes the TLS channel ID value: + * 1. Converts semantically empty values (undefined, null, 0) to the empty + * string. + * 2. Converts valid JSON strings to a JS object. + * 3. Otherwise, returns the input value unmodified. + * @param {Object|string|undefined} opt_tlsChannelId TLS Channel id + * @return {Object|string} The normalized TLS channel ID value. + */ +function tlsChannelIdValue(opt_tlsChannelId) { + if (!opt_tlsChannelId) { + // Case 1: Always set some value for TLS channel ID, even if it's the empty + // string: this browser definitely supports them. + return UNUSED_CID_PUBKEY_VALUE; + } + if (typeof opt_tlsChannelId === 'string') { + try { + var obj = JSON.parse(opt_tlsChannelId); + if (!obj) { + // Case 1: The string value 'null' parses as the Javascript object null, + // so return an empty string: the browser definitely supports TLS + // channel id. + return UNUSED_CID_PUBKEY_VALUE; + } + // Case 2: return the value as a JS object. + return /** @type {Object} */ (obj); + } catch (e) { + console.warn('Unparseable TLS channel ID value ' + opt_tlsChannelId); + // Case 3: return the value unmodified. + } + } + return opt_tlsChannelId; +} + +/** + * Creates a browser data object with the given values. + * @param {!string} type A string representing the "type" of this browser data + * object. + * @param {!string} serverChallenge The server's challenge, as a base64- + * encoded string. + * @param {!string} origin The server's origin, as seen by the browser. + * @param {Object|string|undefined} opt_tlsChannelId TLS Channel Id + * @return {string} A string representation of the browser data object. + */ +function makeBrowserData(type, serverChallenge, origin, opt_tlsChannelId) { + var browserData = { + 'typ' : type, + 'challenge' : serverChallenge, + 'origin' : origin + }; + if (BROWSER_SUPPORTS_TLS_CHANNEL_ID) { + browserData['cid_pubkey'] = tlsChannelIdValue(opt_tlsChannelId); + } + return JSON.stringify(browserData); +} + +/** + * Creates a browser data object for an enroll request with the given values. + * @param {!string} serverChallenge The server's challenge, as a base64- + * encoded string. + * @param {!string} origin The server's origin, as seen by the browser. + * @param {Object|string|undefined} opt_tlsChannelId TLS Channel Id + * @return {string} A string representation of the browser data object. + */ +function makeEnrollBrowserData(serverChallenge, origin, opt_tlsChannelId) { + return makeBrowserData( + 'navigator.id.finishEnrollment', serverChallenge, origin, + opt_tlsChannelId); +} + +/** + * Creates a browser data object for a sign request with the given values. + * @param {!string} serverChallenge The server's challenge, as a base64- + * encoded string. + * @param {!string} origin The server's origin, as seen by the browser. + * @param {Object|string|undefined} opt_tlsChannelId TLS Channel Id + * @return {string} A string representation of the browser data object. + */ +function makeSignBrowserData(serverChallenge, origin, opt_tlsChannelId) { + return makeBrowserData( + 'navigator.id.getAssertion', serverChallenge, origin, opt_tlsChannelId); +} + +/** + * Makes a response to a U2F request with an error code. + * @param {Object} request The request to make a response to. + * @param {number=} version The JS API version to return. + * @param {string=} opt_defaultType The default response type, if none is + * present in the request. + * @return {Object} The GetJsApiVersionResponse. + */ +function makeU2fGetApiVersionResponse(request, version, opt_defaultType) { + var reply = makeResponseForRequest(request, '_response', opt_defaultType); + var data = {'js_api_version': version}; + reply['responseData'] = data; + return reply; +} + +/** + * Encodes the sign data as an array of sign helper challenges. + * @param {Array} signChallenges The sign challenges to encode. + * @param {string|undefined} opt_defaultChallenge A default sign challenge + * value, if a request does not provide one. + * @param {string=} opt_defaultAppId The app id to use for each challenge, if + * the challenge contains none. + * @param {function(string, string): string=} opt_challengeHashFunction + * A function that produces, from a key handle and a raw challenge, a hash + * of the raw challenge. If none is provided, a default hash function is + * used. + * @return {!Array} The sign challenges, encoded. + */ +function encodeSignChallenges(signChallenges, opt_defaultChallenge, + opt_defaultAppId, opt_challengeHashFunction) { + function encodedSha256(keyHandle, challenge) { + return B64_encode(sha256HashOfString(challenge)); + } + var challengeHashFn = opt_challengeHashFunction || encodedSha256; + var encodedSignChallenges = []; + if (signChallenges) { + for (var i = 0; i < signChallenges.length; i++) { + var challenge = signChallenges[i]; + var keyHandle = challenge['keyHandle']; + var challengeValue; + if (challenge.hasOwnProperty('challenge')) { + challengeValue = challenge['challenge']; + } else { + challengeValue = opt_defaultChallenge; + } + var challengeHash = challengeHashFn(keyHandle, challengeValue); + var appId; + if (challenge.hasOwnProperty('appId')) { + appId = challenge['appId']; + } else { + appId = opt_defaultAppId; + } + var encodedChallenge = { + 'challengeHash': challengeHash, + 'appIdHash': B64_encode(sha256HashOfString(appId)), + 'keyHandle': keyHandle, + 'version': (challenge['version'] || 'U2F_V1') + }; + encodedSignChallenges.push(encodedChallenge); + } + } + return encodedSignChallenges; +} + +/** + * Makes a sign helper request from an array of challenges. + * @param {Array} challenges The sign challenges. + * @param {number=} opt_timeoutSeconds Timeout value. + * @param {string=} opt_logMsgUrl URL to log to. + * @return {SignHelperRequest} The sign helper request. + */ +function makeSignHelperRequest(challenges, opt_timeoutSeconds, opt_logMsgUrl) { + var request = { + 'type': 'sign_helper_request', + 'signData': challenges, + 'timeout': opt_timeoutSeconds || 0, + 'timeoutSeconds': opt_timeoutSeconds || 0 + }; + if (opt_logMsgUrl !== undefined) { + request.logMsgUrl = opt_logMsgUrl; + } + return request; +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequestsender.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequestsender.js new file mode 100644 index 000000000000..7424e9b070c8 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/webrequestsender.js @@ -0,0 +1,148 @@ +/** + * @fileoverview Provides a representation of a web request sender, and + * utility functions for creating them. + */ +'use strict'; + +/** + * @typedef {{ + * origin: string, + * tlsChannelId: (string|undefined), + * tabId: (number|undefined) + * }} + */ +var WebRequestSender; + +/** + * Creates an object representing the sender's origin, and, if available, + * tab. + * @param {MessageSender} messageSender The message sender. + * @return {?WebRequestSender} The sender's origin and tab, or null if the + * sender is invalid. + */ +function createSenderFromMessageSender(messageSender) { + var origin = getOriginFromUrl(/** @type {string} */ (messageSender.url)); + if (!origin) { + return null; + } + var sender = { + origin: origin + }; + if (messageSender.tlsChannelId) { + sender.tlsChannelId = messageSender.tlsChannelId; + } + if (messageSender.tab) { + sender.tabId = messageSender.tab.id; + } + return sender; +} + +/** + * Checks whether the given tab could have sent a message from the given + * origin. + * @param {Tab} tab The tab to match + * @param {string} origin The origin to check. + * @return {Promise} A promise resolved with the tab id if it the tab could, + * have sent the request, and rejected if it can't. + */ +function tabMatchesOrigin(tab, origin) { + // If the tab's origin matches, trust that the request came from this tab. + if (getOriginFromUrl(tab.url) == origin) { + return Promise.resolve(tab.id); + } + return Promise.reject(false); +} + +/** + * Attempts to ensure that the tabId of the sender is set, using chrome.tabs + * when available. + * @param {WebRequestSender} sender The request sender. + * @return {Promise} A promise resolved once the tabId retrieval is done. + * The promise is rejected if the tabId is untrustworthy, e.g. if the + * user rapidly switched tabs. + */ +function getTabIdWhenPossible(sender) { + if (sender.tabId) { + // Already got it? Done. + return Promise.resolve(true); + } else if (!chrome.tabs) { + // Can't get it? Done. (This happens to packaged apps, which can't access + // chrome.tabs.) + return Promise.resolve(true); + } else { + return new Promise(function(resolve, reject) { + chrome.tabs.query({active: true, lastFocusedWindow: true}, + function(tabs) { + if (!tabs.length) { + // Safety check. + reject(false); + return; + } + var tab = tabs[0]; + tabMatchesOrigin(tab, sender.origin).then(function(tabId) { + sender.tabId = tabId; + resolve(true); + }, function() { + // Didn't match? Check if the debugger is open. + if (tab.url.indexOf('chrome-devtools://') != 0) { + reject(false); + return; + } + // Debugger active: find first tab with the sender's origin. + chrome.tabs.query({active: true}, function(tabs) { + if (!tabs.length) { + // Safety check. + reject(false); + return; + } + var numRejected = 0; + for (var i = 0; i < tabs.length; i++) { + tab = tabs[i]; + tabMatchesOrigin(tab, sender.origin).then(function(tabId) { + sender.tabId = tabId; + resolve(true); + }, function() { + if (++numRejected >= tabs.length) { + // None matches: reject. + reject(false); + } + }); + } + }); + }); + }); + }); + } +} + +/** + * Checks whether the given tab is in the foreground, i.e. is the active tab + * of the focused window. + * @param {number} tabId The tab id to check. + * @return {Promise} A promise for the result of the check. + */ +function tabInForeground(tabId) { + return new Promise(function(resolve, reject) { + if (!chrome.tabs || !chrome.tabs.get) { + reject(); + return; + } + if (!chrome.windows || !chrome.windows.get) { + reject(); + return; + } + chrome.tabs.get(tabId, function(tab) { + if (chrome.runtime.lastError) { + resolve(false); + return; + } + if (!tab.active) { + resolve(false); + return; + } + chrome.windows.get(tab.windowId, function(aWindow) { + resolve(aWindow && aWindow.focused); + }); + }); + }); +} diff --git a/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/window-timer.js b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/window-timer.js new file mode 100644 index 000000000000..336b847faf53 --- /dev/null +++ b/test/.chrome/Default/Extensions/beknehfpfkghjoafdifaflglpjkojoco/0.9.41_0/window-timer.js @@ -0,0 +1,52 @@ +/** + * @fileoverview Provides an implementation of the SystemTimer interface based + * on window's timer methods. + */ +'use strict'; + +/** + * Creates an implementation of the SystemTimer interface based on window's + * timer methods. + * @constructor + * @implements {SystemTimer} + */ +function WindowTimer() { +} + +/** + * Sets a single-shot timer. + * @param {function()} func Called back when the timer expires. + * @param {number} timeoutMillis How long until the timer fires, in + * milliseconds. + * @return {number} A timeout ID, which can be used to cancel the timer. + */ +WindowTimer.prototype.setTimeout = function(func, timeoutMillis) { + return window.setTimeout(func, timeoutMillis); +}; + +/** + * Clears a previously set timer. + * @param {number} timeoutId The ID of the timer to clear. + */ +WindowTimer.prototype.clearTimeout = function(timeoutId) { + window.clearTimeout(timeoutId); +}; + +/** + * Sets a repeating interval timer. + * @param {function()} func Called back each time the timer fires. + * @param {number} timeoutMillis How long until the timer fires, in + * milliseconds. + * @return {number} A timeout ID, which can be used to cancel the timer. + */ +WindowTimer.prototype.setInterval = function(func, timeoutMillis) { + return window.setInterval(func, timeoutMillis); +}; + +/** + * Clears a previously set interval timer. + * @param {number} timeoutId The ID of the timer to clear. + */ +WindowTimer.prototype.clearInterval = function(timeoutId) { + window.clearInterval(timeoutId); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/am/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/am/messages.json new file mode 100644 index 000000000000..49c6256a6808 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/am/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ተቀበáˆáŠ“ ጫን" + }, + "ACCESS_CODE": { + "message": "የመዳረሻ ኮድ" + }, + "ACCESS_CODE_TIMER": { + "message": "ይህ የመዳረሻ ኮድ በ$1$ á‹áˆµáŒ¥ ጊዜዠያበቃáˆ", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "áŒá‰¥áˆ¨ መáˆáˆµ" + }, + "ALL_CONNECTIONS": { + "message": "áˆáˆ‰áˆ áŒáŠ•áŠ™áŠá‰¶á‰½" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "á’ኑን ዳáŒáˆ ይተይቡ" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "á’ን" + }, + "CANCEL": { + "message": "ይቅር" + }, + "CLEAR_HISTORY": { + "message": "ታሪክ አጽዳ" + }, + "CLOSE": { + "message": "á‹áŒ‹" + }, + "CLOSE_PROMPT": { + "message": "ከዚህ ገጽ መá‹áŒ£á‰µ የChrome ርቀት ዴስክቶᕠክáለ-ጊዜዎን ያጠናቅቀዋáˆá¢" + }, + "CLOSE_WINDOW": { + "message": "መስኮት á‹áŒ‹" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "እርáŒáŒ áŠ› áŠá‹Žá‰µ ከ$1$ ጋር ያሉትን የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½ ማሰናከሠይáˆáˆáŒ‹áˆ‰? áˆáˆ³á‰¥á‹ŽáŠ• ከቀየሩ áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• ዳáŒáˆ ለማንቃት ያንን ኮáˆá’á‹á‰°áˆ­ መጎብኘት ይኖርብዎታáˆá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "áŒáŠ•áŠ™áŠá‰µ አáˆá‰°áˆ³áŠ«áˆ" + }, + "CONNECTION_FROM_HEADER": { + "message": "ከ" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "የáŒáŠ•áŠ™áŠá‰µ ታሪክ" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "ደህና" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "ጥሩ" + }, + "CONNECTION_QUALITY_POOR": { + "message": "ደካማ" + }, + "CONNECTION_TO_HEADER": { + "message": "ለ" + }, + "CONNECT_ANYWAY": { + "message": "ለማንኛá‹áˆ ተገናáŠ" + }, + "CONNECT_BUTTON": { + "message": "ይገናኙ" + }, + "CONTINUE_BUTTON": { + "message": "ቀጥáˆ" + }, + "CONTINUE_PROMPT": { + "message": "በአáˆáŠ‘ ጊዜ ይህንን ማሽን ከሌላ ተጠቃሚ ጋር እየተጋሩ áŠá‹Žá‰µá¢ ማጋራቱን መቀጠሠይáˆáˆáŒ‹áˆ‰?" + }, + "CONTROLLER_NAME": { + "message": "Chrome የርቀት ዴስክቶᕠአስተናጋጅ áˆáˆ­áŒ«á‹Žá‰½ መቆጣጠሪያ" + }, + "COPYRIGHT": { + "message": "የቅጂ መብት 2013 Google Inc. áˆáˆ‰áˆ መብቶች የተጠበበናቸá‹á¢" + }, + "CREDITS": { + "message": "ክሬዲቶች" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "áˆáˆ‰áŠ•áˆ ይሰርዙ" + }, + "DELETE_PAIRED_CLIENT": { + "message": "ሰርá‹" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "ለመቀጠሠበመጀመሪያ ለኮሚá‹á‰°áˆ­á‹Ž ተጨማሪ የመዳረሻ áቃዶችን መስጠት አለብዎትᢠይህንን አንድ ጊዜ ብቻ áŠá‹ ማድረጠየሚኖርብዎትá¢" + }, + "DESCRIPTION_CONNECT": { + "message": "«$1$» ጠቅ ለማድረጠለመድረስ የሚáˆáˆáŒ‰á‰µáŠ• ኮáˆá’ዩተር ተጠቃሚ ይጠይበእና የመድረሻ ኮድ ይሰጡዎታáˆá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome የርቀት ዴስክቶᕠኮáˆá’á‹á‰°áˆ­á‹ŽáŠ• ደህንáŠá‰± በተጠበቀ መáˆáŠ© ድሩ ላይ እንዲያጋሩት ያስችáˆá‹Žá‰³áˆá¢ áˆáˆˆá‰±áˆ ተጠቃሚዎች የChrome ርቀት ዴስክቶᕠመተáŒá‰ áˆªá‹«á‹áŠ• ማሄድ አለባቸá‹á£ እሱሠ$1$ ላይ ሊገአይችላáˆá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "የርቀት አስተናጋጠለሶስተኛ ወገን ድር ጣቢያ እንዲያረጋáŒáŒ¡ á‹­áˆáˆáŒ‹áˆá¢ ለመቀጠሠChrome የርቀት ዴስክቶᕠይህን አድራሻ እንዲደርስበት ተጨማሪ áቃዶችን መስጠት አለብዎትá¦" + }, + "DISABLE_HOST": { + "message": "አሰናክáˆ" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "áŒáŠ•áŠ™áŠá‰µ አቋርጥ" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome የርቀት ዴስክቶᕠአገáˆáŒáˆŽá‰µ" + }, + "DURATION_HEADER": { + "message": "ጊዜ" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "ይህን መተáŒá‰ áˆªá‹« ለማሄድ áቃድ የለዎትáˆá¢" + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "ማረጋገጥ አáˆá‰°áˆ³áŠ«áˆá¢ እባክዎ እንደገና ወደ Chrome á‹­áŒá‰¡á¢" + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "አንዳንድ የሚያስáˆáˆáŒ‰ ክáሎች ይጎድላሉᢠእባክዎ የሶáትዌሩ የቅርብ ጊዜá‹áŠ• ስሪት መጫንዎን ያረጋáŒáŒ¡áŠ“ እንደገና ይሞክሩá¢" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "አንድ የአá‹á‰³áˆ¨ መረብ ስህተት ተከስቷáˆá¢ መሣሪያዎችዎ ዳáŒáˆ መስመር ላይ ሲሆኑ መተáŒá‰ áˆªá‹«á‹áŠ• ዳáŒáˆ እናስጀáˆáˆ¨á‹‹áˆˆáŠ•á¢" + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "የርቀት ኮáˆá’á‹á‰°áˆ© ክáለጊዜá‹áŠ• ለመጀመር ተስኖታáˆá¢ ችáŒáˆ© ከቀጠለ እባክዎን አስተናጋáŒáŠ• በድጋሚ ለማዋቀር ይሞክሩá¢" + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "የርቀት ኮáˆá’á‹á‰°áˆ© ለáŒáŠ•áŠ™áŠá‰µ ጥያቄዎች áˆáˆ‹áˆ½ እየሰጠ አይደለáˆá¢ እባክዎ መስመር ላይ መሆኑን ያረጋáŒáŒ¡áŠ“ እንደገና ይሞክሩá¢" + }, + "ERROR_HOST_OVERLOAD": { + "message": "የሆአሰዠáˆáŠ­ ባáˆáˆ†áŠ á’ን ለመገናኘት ስለሞከረ ከርቀት ኮáˆá’á‹á‰°áˆ© ጋር የáŠá‰ áˆ© áŒáŠ•áŠ™áŠá‰¶á‰½ በጊዜያዊáŠá‰µ ታáŒá‹°á‹‹áˆá¢ እባክዎ ቆይተዠእንደገና ይሞክሩá¢" + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "ይህንን ኮáˆá’á‹á‰°áˆ­ መመá‹áŒˆá‰¥ አáˆá‰°áˆ³áŠ«áˆá¢" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "ተኳሃአያáˆáˆ†áŠ የá•áˆ®á‰¶áŠ®áˆ ስሪት ተገáŠá‰·áˆá¢ እባክዎ በáˆáˆˆá‰±áˆ ኮáˆá’á‹á‰°áˆ®á‰½ ላይ የሶáትዌሩ የቅርብ ጊዜ ስሪት እንዳለዎት ያረጋáŒáŒ¡áŠ“ እንደገና ይሞክሩá¢" + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "የመዳረሻ ኮዱ áˆáŠ­ á‹«áˆáˆ†áŠ áŠá‹á¢ እባክዎ እንደገና ይሞክሩá¢" + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "የመáˆáˆªá‹« ቅንብሮች ይህን ኮáˆá’á‹á‰°áˆ­ እንደ የChrome ርቀት ዴስክቶᕠአስተናጋጅ አድርጎ ማጋራት አይáˆá‰…ዱáˆá¢ እርዳታ እንዲያገኙ የስርዓት አስተዳዳሪዎን á‹«áŒáŠ™á¢" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "የርቀት ክáለጊዜá‹áŠ• ጊዜዠአáˆáŽá‰ á‰³áˆá¢" + }, + "ERROR_MISSING_PLUGIN": { + "message": "አንዳንድ የሚያስáˆáˆáŒ‰ ክáሎች ይጎድላሉᢠእባክዎ የቅርብ ጊዜá‹áŠ• የChrome ስሪት መጫንዎን ያረጋáŒáŒ¡áŠ“ እንደገና ይሞክሩá¢" + }, + "ERROR_NACL_DISABLED": { + "message": "አንዳንድ አስáˆáˆ‹áŒŠ ክáላተ አካላት ይጎድላሉᢠእባክዎ ወደ chrome://plugins ይሂዱ እና ቤተኛ ደንበአእንደáŠá‰ƒ ያረጋáŒáŒ¡á¢" + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "የሚያስáˆáˆáŒ ክáለ-አካሠመሥራቱን አá‰áˆŸáˆá¢ እባክዎ ይህን ችáŒáˆ­ ለገንቢዎቹ ሪá–ርት ያድርጉትá¢" + }, + "ERROR_NETWORK_FAILURE": { + "message": "ከአá‹á‰³áˆ¨ መረቡ ጋር መገናኘት አáˆá‰°á‰»áˆˆáˆá¢ እባክዎ መሥሪያዎ መስመር ላይ መሆኑን ያረጋáŒáŒ¡á¢" + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "ወደ Chrome በመለያ አáˆáŒˆá‰¡áˆá¢ እባክዎ á‹­áŒá‰¡ እና እንደገና ይሞክሩá¢" + }, + "ERROR_NOT_AUTHORIZED": { + "message": "ያንን እርáˆáŒƒ የማከናወን áቃድ የለዎትáˆá¢" + }, + "ERROR_NOT_FOUND": { + "message": "የተጠየቀዠáŠáŒˆáˆ­ አይገáŠáˆá¢" + }, + "ERROR_P2P_FAILURE": { + "message": "አስተናጋáŒáŠ• መድረስ አáˆá‰°á‰»áˆˆáˆá¢ ይሄ በሚጠቀሙት አá‹á‰³áˆ¨ መረብ ላይ ባለ á‹á‰…ር áˆáŠ­áŠ•á‹«á‰µ ሳይሆን አይቀርáˆá¢" + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "አገáˆáŒáˆŽá‰± ለጊዜዠአይገáŠáˆá¢ እባክዎ ቆይተዠእንደገና ይሞክሩá¢" + }, + "ERROR_UNEXPECTED": { + "message": "á‹«áˆá‰°áŒ á‰ á‰€ ስህተት ተከስቷáˆá¢ እባክዎ ይህንን ችáŒáˆ­ ለገንቢዎች ሪá–ርት ያድርጉትá¢" + }, + "EXIT_FULL_SCREEN": { + "message": "ከሙሉ ማሳያ መስኮት á‹­á‹áŒ¡" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "መተáŒá‰ áˆªá‹«á‹áŠ• ዳáŒáˆ ማስጀመር አáˆá‰°á‰»áˆˆáˆá¢ አáˆáŠ•áˆ የሳንካ ሪá–ርት መላክ ይችላሉá¢" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "መተáŒá‰ áˆªá‹«á‹áŠ• ዳáŒáˆ ያስጀáˆáˆ©á‰µá¢ ማንኛá‹áˆ á‹«áˆá‰°á‰€áˆ˜áŒ  ስራ ያጣሉá¢" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "መተáŒá‰ áˆªá‹«á‹áŠ• መክáˆá‰µ አáˆá‰½áˆáˆá¢" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "መተáŒá‰ áˆªá‹«á‹ ከáˆáŠ­ በላይ ቀርá‹á‹ áŠá‹á¢" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "የእኔን የGoogle አንጻአá‹á‹­áˆŽá‰½ መክáˆá‰µ አáˆá‰½áˆáˆá¢" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "የእኔን በGoogle አንጻአላይ የተቀመጡ á‹á‹­áˆŽá‰½ ማየት አáˆá‰½áˆáˆá¢" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "ከእኔ á‰áˆá ሰሌዳ ወይሠመዳáŠá‰µ ጋር ችáŒáˆ­ እያጋጠመአáŠá‹á¢" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "የእርስዎን ችáŒáˆ­ እንድንáˆá‰³ እኛን ለማገá‹á£ áˆáŠ• እንደተሳሳተ እባክዎ ለእኛ ይንገሩንá¦" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "ሌላ áŠáŒˆáˆ­á¢" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "á‹­áˆáˆ¨áŒ¡â€¦" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "ለተጨማሪ መረጃ እርስዎን እንድናáŠáŒ‹áŒáˆ­ ለማስቻሠየኢሜይሠአድራሻዎ በሚያቀርቡት ማንኛá‹áˆ áŒá‰¥áˆ¨áˆ˜áˆáˆµ á‹áˆµáŒ¥ ይካተታáˆá¢" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "ችáŒáˆ­ ሪá–ርት አድርáŒ" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "ችáŒáˆ­á‹ŽáŠ• እንድንቀርá ለማገዠየመተáŒá‰ áˆªá‹« áˆá‹áŒá‰¥ ማስታወሻዎችን ያካትቱ (የáˆá‹áŒá‰¥ ማስታወሻዎች የáŒáˆ መረጃን ሊያካትቱ ይችላሉ)á¢" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "የመተáŒá‰ áˆªá‹« áˆá‹áŒá‰¥ ማስታወሻዎች እንደ የእርስዎ ማንáŠá‰µ (የኢሜይሠአድራሻ) እና በGoogle Drive á‹áˆµáŒ¥ ያሉ የá‹á‹­áˆŽá‰½ እና አቃáŠá‹Žá‰½ ስሞችን እና አቃáŠá‹Žá‰½áŠ• ጨáˆáˆ® የáŒáˆ መረጃን ሊያካትቱ ይችላሉá¢" + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ይህ መረጃ ጥቅሠላይ የሚá‹áˆˆá‹ ሪá–ርት የሚያደርጉትን ችáŒáˆ­ ለመመርመር ብቻ áŠá‹á£ የሚገኘዠሪá–ርትዎን ለሚመረáˆáˆ¨á‹ ሰዠብቻ áŠá‹á£ እና ከ30 ቀኖች በላይ አይቆይáˆá¢" + }, + "FOOTER_CONNECTING": { + "message": "በመገናኘት ላይ..." + }, + "FOOTER_WAITING": { + "message": "áŒáŠ•áŠ™áŠá‰µáŠ• በመጠበቅ ላይ…" + }, + "FOR_PLATFORM_MAC": { + "message": "ለMac (OS X 10.6 እና ከዚያ በላይ)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "ለWindows (XP እና ከዚያ በላይ)" + }, + "FULL_SCREEN": { + "message": "ሙሉ ማያ ገጽ" + }, + "GET_STARTED": { + "message": "ይጀáˆáˆ©" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "ይቀበሉ" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "አትቀበáˆ" + }, + "HELP": { + "message": "እገዛ" + }, + "HOME_ACCESS_BUTTON": { + "message": "መዳረሻ" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "አንድ የተጋራ ኮáˆá’á‹á‰°áˆ­ ይመáˆáŠ¨á‰± እና ይቆጣጠሩá¢" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome የርቀት ዴስክቶá•áŠ• ተጠቅመዠይህንን ኮáˆá’á‹á‰°áˆ­ ደህንáŠá‰± በተጠበቀ መáˆáŠ© ሊደርሱበት ይችላሉá¢" + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "á’ን ይቀይሩ" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "ይህ ኮáˆá’á‹á‰°áˆ­ በተለየ መለያ ስር አáˆáŠ• ላይ ተጋርቷáˆá¢" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ይመáˆáŠ¨á‰±/አርትዕ ያድርጉ" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "ይህ ኮáˆá’á‹á‰°áˆ­ አንድ ወይሠከዚያ በላይ ደንበኞችን á’ን ሳያስገቡ እንዲገናኙ እንዲáˆá‰…ድ ተደርጎ ተዋቅሯáˆá¢" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• አንቃ" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Chrome የርቀት ዴስክቶá•áŠ• ተጠቅመዠይህንን ኮáˆá’á‹á‰°áˆ­ መድረስ ከáˆáˆˆáŒ‰ የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• ማንቃት አለብዎትá¢" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• አሰናክáˆ" + }, + "HOME_SHARE_BUTTON": { + "message": "አጋራ" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "ሌላ ተጠቃሚ ይህን ኮáˆá’á‹á‰°áˆ­ እንዲያየá‹áŠ“ እንዲቆጣጠረዠያጋሩትá¢" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ይህ ባህሪ ገና ለኮáˆá’á‹á‰°áˆ­á‹Ž አይገáŠáˆ)" + }, + "HOST_CATEGORY": { + "message": "አስተናጋጅ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "ለደንበኛ መዳረሻ ተከáˆáŠ­áˆáˆá¦ %1á¢" + }, + "HOST_CLIENT_CONNECTED": { + "message": "የተገናኘዠደንበኛᦠ%1á¢" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "የደንበኛዠáŒáŠ•áŠ™áŠá‰µ ተቋርጧáˆá¦ %1á¢" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "የሰርጥ አይ ᒠለደንበኛᦠ%1 አይ á’=«%2» የአስተናጋጅ አይ á’=«%3» ሰርጥ=«%4» áŒáŠ•áŠ™áŠá‰µ=«%5»á¢" + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "ከአንድ ሌላ ኮáˆá’á‹á‰°áˆ­ ጋር የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• ለማንቃት Chrome የርቀት ዴስክቶá•áŠ• እዚያዠይጫኑና «$1$»ን ይጫኑá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "áˆáŠ•áˆ የተመዘገቡ ኮáˆá’á‹á‰°áˆ®á‰½ የለዎትáˆá¢ ከአንድ ኮáˆá’á‹á‰°áˆ­ ጋር የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• ለማንቃት Chrome የርቀት ዴስክቶá•áŠ• እዚያዠይጫኑና «$1$»ን ይጫኑá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "ከዚህ ቀደሠእንደ $1$ ($2$) ሆáŠá‹ ገብተዋáˆá¢ በዚያ መለያ á‹áˆµáŒ¥ የእርስዎን ኮáˆá’á‹á‰°áˆ®á‰½ ለመድረስ በዚያ መለያ $3$ወደ Google Chrome á‹­áŒá‰¡$4$ና የChrome ርቀት ዴስክቶá•áŠ• ዳáŒáˆ ይጫኑትá¢", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "የሶáትዌር á‹áˆ›áŠ”ዎች አብዛኛá‹áŠ• ጊዜ በራስ-ሰር áŠá‹ የሚከናወኑትᣠáŠáŒˆáˆ­ áŒáŠ• ከስንት አንዴ ላይሳኩ ይችላሉᢠሶáትዌሩን ማዘመን ከጥቂት ደቂቃዎች በላይ መá‹áˆ°á‹µ የለበትáˆá£ እና ከኮáˆá’á‹á‰°áˆ­á‹Ž ጋር በርቀት ተገናáŠá‰°á‹ ሳለ ሊደረጠይችላáˆá¢" + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome የርቀት ዴስክቶᕠበ$1$ ላይ ጊዜዠያለáˆá‰ á‰µ እና መዘመን የሚያስáˆáˆáŒˆá‹ áŠá‹á¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "የአጠቃቀሠስታትስቲክስ እና የብáˆáˆ½á‰µ ሪá–ርቶችን እንድንሰበስብ በመáቀድ Chrome የርቀት ዴስክቶᕠእንድናሻሽሠያáŒá‹™áŠ•á¢" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "ይህንን ኮáˆá’á‹á‰°áˆ­ በተጠበቀ መዳረሻ ለመድረስ እባክዎ $1$ቢያንስ ስድስት አኃዞች$2$ የሆአá’ን á‹­áˆáˆ¨áŒ¡á¢ ይሄ á’ን ከሌላ ቦታ ሆኖ ሲገናኙ ያስáˆáˆáŒ‹áˆá¢", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "የርቀት መዳረሻ አገáˆáŒáˆŽá‰µáŠ• መጀመር አáˆá‰°áˆ³áŠ«áˆá¢" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome የChrome የርቀት ዴስክቶᕠአስተናጋጅ ጫኚá‹áŠ• እያወረደ áŠá‹á¢ á‹áˆ­á‹± አንዴ ከተጠናቀቀ በኋላ እባክዎ ከመቀጠáˆá‹Ž በáŠá‰µ ጫኚá‹áŠ• ያሂዱትá¢" + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "ከመቀጠáˆá‹Ž በáŠá‰µ እባክዎ ጫኚá‹áŠ• ያስሂዱትá¢" + }, + "HOST_SETUP_STARTED": { + "message": "ለዚህ ኮáˆá’á‹á‰°áˆ­ የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½ áŠá‰…ተዋáˆá¢" + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "እባክዎ የኮáˆá’á‹á‰°áˆ­á‹Ž የኃይሠአስተዳደር ቅንብሮችን ያረጋáŒáŒ¡áŠ“ ስራ ሲáˆá‰³ እንዲተኛ አለመዋቀሩን ያረጋáŒáŒ¡á¢" + }, + "HOST_SETUP_STARTING": { + "message": "ለዚህ ኮáˆá’á‹á‰°áˆ­ የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• በማንቃት ላይ…" + }, + "HOST_SETUP_STOPPED": { + "message": "ለዚህ ኮáˆá’á‹á‰°áˆ­ የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½ ተሰናክለዋáˆá¢" + }, + "HOST_SETUP_STOPPING": { + "message": "ለዚህ ኮáˆá’á‹á‰°áˆ­ የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• በማሰናከሠላይ…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "የዚህን ኮáˆá’á‹á‰°áˆ­ የርቀት መዳረሻ ማሰናከሠአáˆá‰°áˆ³áŠ«áˆá¢ እባክዎ እንደገና ይሞክሩá¢" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "የChrome የርቀት ዴስክቶᕠአስተናጋጅ ጫኚá‹áŠ• በማá‹áˆ¨á‹µá‹Ž በGoogle $1$የአገáˆáŒáˆŽá‰µ á‹áˆ$4ይስማማሉá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "የእርስዎ á’ን ተዘáˆáŠ—áˆá¢" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "á’ኑን ማዘመን አáˆá‰°áˆ³áŠ«áˆá¢ እባክዎ ቆይተዠእንደገና ይሞክሩá¢" + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "የዚህ ኮáˆá’á‹á‰°áˆ­ á’ን እየተዘመአáŠá‹â€¦" + }, + "HOST_STARTED": { + "message": "አስተናጋጅ ለተጠቃሚ ተጀáˆáˆ¯áˆá¦ %1á¢" + }, + "HOST_STOPPED": { + "message": "አስተናጋጅ ቆሟáˆá¢" + }, + "IDLE_CONTINUE": { + "message": "ቀጥáˆ" + }, + "IDLE_DISCONNECT": { + "message": "አáˆáŠ• አቋርጥ" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "የእርስዎ የ$1$ ክáለ-ጊዜ ለተወሰአጊዜ ቦá‹áŠ—áˆá£ እና በቅርብ ይቋረጣáˆá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "ከዚህ ኮáˆá’á‹á‰°áˆ­ ጋር" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome የርቀት ዴስክቶᕠአስተናጋጅ ጫኚ á‹«á‹áˆ­á‹±" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "ዴስክቶá•á‹ŽáŠ• ማጋራት ለመጀመር ከታች ያለá‹áŠ• የመዳረሻ ኮድ ለሚረዳዎ ሰዠይስጡትá¢" + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "ኮዱን አንዴ ካስገቡት በኋላ የማጋራት ክáለ-ጊዜዎ ይጀáˆáˆ«áˆá¢" + }, + "INVALID_PIN": { + "message": "እባክዎ ስድስት ወይሠከዚያ በላይ የሆአአኃዠያለዠá’ን ያስገቡá¢" + }, + "IT2ME_FIRST_RUN": { + "message": "የተጠቃሚ-ለተጠቃሚ ማያ ገጽ ማጋራትᣠለርቀት ቴክኒካዊ ድጋá áˆáˆ­áŒ¥ የሆáŠá¢" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "የá‰áˆá ሰሌዳ አቀማመጦች" + }, + "LABEL_CONNECTED": { + "message": "ተገናáŠá‰·áˆá¦" + }, + "LAST_ONLINE": { + "message": "$1$ (መስመር ላይ የáŠá‰ áˆ¨á‰ á‰µ $2$ መጨረሻ ጊዜ)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "እንዴት እንደሆአይወá‰á¢" + }, + "LEARN_MORE": { + "message": "ተጨማሪ ለመረዳትá¢" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome የርቀት ዴስክቶᕠአስተናጋጅ áˆáˆ­áŒ«á‹Žá‰½" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome የርቀት\nዴስክቶᕠአስተናጋጅ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome የርቀት ዴስክቶᕠአስተናጋጅ ማራገáŠá‹«" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "ለWin á‰áˆá Ctrlን ይጠቀሙ (Mac ላይ ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "መስኮቱን ያስá‰á‰µ" + }, + "ME2ME_FIRST_RUN": { + "message": "የእራስዎን ኮáˆá’á‹á‰°áˆ­ ከማንኛá‹áˆ ቦታ ይድረሱበትá¢" + }, + "MESSAGE_GENERATING": { + "message": "የመዳረሻ ኮድ በማመንጨት ላይ…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "የChrome የርቀት ዴስክቶᕠክáለ-ጊዜዠተጠናቅቋáˆá¢" + }, + "MESSAGE_SHARED": { + "message": "ዴስክቶá•á‹Ž በአáˆáŠ‘ ጊዜ ከ$1$ ጋር ተጋርቷáˆá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "መስኮትን ያሳንሱት" + }, + "MODE_AUTHORIZE": { + "message": "áˆá‰€á‹³ ይስጡ" + }, + "MODE_IT2ME": { + "message": "የርቀት እርዳታ" + }, + "MODE_ME2ME": { + "message": "የእኔ ኮáˆá’á‹á‰°áˆ®á‰½" + }, + "NEW_WINDOW": { + "message": "አዲሰ መስኮት…" + }, + "NO_PAIRED_CLIENTS": { + "message": "áˆáˆ‰áˆ የተጣመሩ ደንበኞች ተሰርዘዋáˆá¢" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "የዴስክቶᕠá‹áˆ…ደት በዚህ የመሣሪያ ስርዓት ላይ አይደገááˆá¢ አáˆáŠ•áˆ መተáŒá‰ áˆªá‹«á‹áŠ• መጠቀሠይችላሉᣠáŠáŒˆáˆ­ áŒáŠ• የተጠቃሚ ተሞክሮዠየወረደ ይሆናáˆá¢" + }, + "OFFLINE": { + "message": "$1$ (ከመስመር á‹áŒª)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "አስተናጋጅን ማስጀመር አáˆá‰°áˆ³áŠ«áˆá¢" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "áˆáŠ­ á‹«áˆáˆ†áŠ የአስተናጋጅ á‹á‰…ርá¢" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "áˆáŠ­ á‹«áˆáˆ†áŠ የአስተናጋጅ ባለቤት ጎራá¢" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "áˆáŠ­ á‹«áˆáˆ†áŠ የአስተናጋጅ መታወቂያá¢" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "አስተናጋጅ áˆáŠ­ ባáˆáˆ†áŠ‘ የOAuth áˆáˆµáŠ­áˆ­áŠá‰¶á‰½ áŠá‹ የተዋቀረá‹á¢" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "በመሥሪያ አመክንዮ ማያ ገጽ ላይ አያሄደ ያለዠአስተናጋጅ በተጠቃሚ-ተኮር ክáለ-ጊዜ á‹áˆµáŒ¥ በማሄድ የመጋረጃ áˆáŠá‰³áŠ• ለመደገá ተዘáŒá‰·áˆá¢" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "የመመሪያ ለá‹áŒ¥áŠ• ከáŒáˆá‰µ ለማስገባትᣠአስተናጋጅ ዳáŒáˆ እየጀመረ áŠá‹á¢" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "አስተናጋጅ መመሪያá‹áŠ• ለማንበብ አáˆá‰°áˆ³áŠ«áˆá¢" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "አስተናጋጅ ተዘáŒá‰·áˆá¢" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "á‹«áˆá‰³á‹ˆá‰€ የአስተናጋጅ ስህተትᦠ$1$á¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "áˆáŠ­ á‹«áˆáˆ†áŠ የአስተናጋጅ ባለቤትá¢" + }, + "OK": { + "message": "á‹­áˆáŠ•" + }, + "OPTIONS_MENU": { + "message": "አማራጮች" + }, + "OUTGOING_CONNECTIONS": { + "message": "ከዚህ ኮáˆá’á‹á‰°áˆ­" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "የሚከተሉት ደንበኞች ከዚህ ኮáˆá’á‹á‰°áˆ­ ጋር የተጣመሩ ሲሆን á’ን ሳያስገቡ መገናኘት ይችላሉᢠይህንን áˆá‰ƒá‹µ በማንኛá‹áˆ ጊዜ በተናጠሠወይሠለáˆáˆ‰áˆ ደንበኞች መሻር ይችላሉá¢" + }, + "PAIRED_CLIENT_DATE": { + "message": "የተጣመረበት ቀን" + }, + "PAIRED_CLIENT_NAME": { + "message": "ደንበኛ" + }, + "PIN": { + "message": "á’ን" + }, + "PINS_NOT_EQUAL": { + "message": "እባክዎ ተመሳሳዩን á’ን በáˆáˆˆá‰±áˆ ሳጥኖች á‹áˆµáŒ¥ ያስገቡá¢" + }, + "PIN_MESSAGE": { + "message": "እባክዎ ለ$1$ á’ንዎን ያስገቡá¢", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "እባክዎ የእርስዎን á’ን ለርቀት ኮáˆá’á‹á‰°áˆ­ ያስገቡ" + }, + "PRODUCT_DESCRIPTION": { + "message": "ሌሎች ኮáˆá’á‹á‰°áˆ®á‰½áŠ• ይድረሱ ወይሠሌላ ተጠቃሚ ኮáˆá’á‹á‰°áˆ­á‹ŽáŠ• ደህንáŠá‰± በተጠበቀ መáˆáŠ© በበይáŠáˆ˜áˆ¨á‰¡ ላይ እንዲደርስበት á‹­áቀዱለትá¢" + }, + "PRODUCT_NAME": { + "message": "Chrome የርቀት ዴስክቶá•" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "የChrome መተáŒá‰ áˆªá‹« ዥረት" + }, + "RECONNECT": { + "message": "ዳáŒáˆ ያገናኙ" + }, + "REMEMBER_PIN": { + "message": "ከዚህ መሣሪያ ሆኜ ከዚህ አስተናጋጅ ጋር ስገናአዳáŒáˆ á’ን አትጠይቅá¢" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "ዋና ቤተ መጽáˆáት" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ዴስክቶᕠየማዋሃድ ሂደት" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "ለChrome የርቀት ዴስክቶᕠአስተናጋጅ ትዕዛዞችን የሚሰጥ መተáŒá‰ áˆªá‹«á¢" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "የአስተናጋጅ ሂደት" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "ቤተኛ የመáˆá‹•áŠ­á‰µ መላኪያ አስተናጋጅ ለርቀት አስተናጋጅ አስተዳደር" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "ቤተኛ የመáˆá‹•áŠ­á‰µ መላኪያ አስተናጋጅ ለርቀት እርዳታ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "የደህንáŠá‰µ á‰áˆá በርቀት የመጠቀሠሂደት" + }, + "RESIZE_TO_CLIENT": { + "message": "እንዲመጣጠን የዴስክቶá‘ን መጠን ይቀይሩ" + }, + "RESTART_BUTTON": { + "message": "አáˆáŠ• ዳáŒáˆ አስጀáˆáˆ­" + }, + "RESTORE_WINDOW": { + "message": "መስኮት ወደáŠá‰ áˆ¨á‰ á‰µ ይመáˆáˆ±" + }, + "RETRY": { + "message": "እንደገና ሞክር" + }, + "SCREEN_OPTIONS": { + "message": "የማያ ገጽ አማራጮች" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del ላክ" + }, + "SEND_FEEDBACK": { + "message": "አንድ ችáŒáˆ­ ሪá–ርት አድርáŒâ€¦" + }, + "SEND_KEYS": { + "message": "የመላኪያ á‰áˆáŽá‰½" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn ላክ" + }, + "SERVICE_DESCRIPTION": { + "message": "ይህ አገáˆáŒáˆŽá‰µ ከChrome የርቀት ዴስክቶᕠደንበኞች ገቢ áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• á‹«áŠá‰ƒáˆá¢" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "ይህ ቅንብር በጎራ መመሪያዎ áŠá‹ የሚቀናበረá‹á¢" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "አጋራ" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ይቅር" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "ሌላ ተጠቃሚ ይህን ኮáˆá’á‹á‰°áˆ­ እንዲመለከት እና እንዲቆጣጠር ማጋራት á‹­áˆáˆáŒ‹áˆ‰?" + }, + "SHOW_STATS": { + "message": "ስታቲስቲክስን አሳይ" + }, + "SHOW_STATS_WITH_RTT": { + "message": "ስታቲስቲክስን አሳይ (áŒáŠ•áŠ™áŠá‰µá¦ $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ለማመጣጠን አሳንስ" + }, + "SIGN_IN_BUTTON": { + "message": "á‹­áŒá‰¡" + }, + "SIGN_OUT_BUTTON": { + "message": "ዘáŒá‰°áˆ… á‹áŒ£" + }, + "STOP_SHARING_BUTTON": { + "message": "ማጋራት አá‰áˆ" + }, + "SURVEY_INVITATION": { + "message": "Chrome የርቀት ዴስክቶá•áŠ• ማሻሻሠላይ ማገዠይáˆáˆáŒ‹áˆ‰? $1$የዳሰሳ ጥናቱን á‹­á‹áˆ°á‹±á¢$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ሰዓት" + }, + "TOGGLE_STATS": { + "message": "ስታቲስቲክስን አሳይ" + }, + "TOOLTIP_CONNECT": { + "message": "ከ$1$ ጋር ይገናኙ", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ከዚህ ኮáˆá’á‹á‰°áˆ­ ጋር ያሉ የርቀት áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• ያሰናክሉ" + }, + "TOOLTIP_REFRESH": { + "message": "የአስተናጋጆች á‹áˆ­á‹áˆ­ ያድሱ" + }, + "TOOLTIP_RENAME": { + "message": "የኮáˆá’á‹á‰°áˆ­ ስሠያርትዑ" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (ቀኑ ያለáˆá‰ á‰µ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "መለያ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "እባክዎ በChrome የርቀት ዴስክቶᕠመዳረሻ ለመáቀድ መለያዎን እና á’ንዎን ከዚህ በታች ያረጋáŒáŒ¡á¢" + }, + "WARNING_NAT_DISABLED": { + "message": "ማሳሰቢያᦠየመáˆáˆªá‹« ቅንብሮች በአá‹á‰³áˆ¨ መረብዎ á‹áˆµáŒ¥ ባሉ ኮáˆá’á‹á‰°áˆ®á‰½ የሚኖሩ áŒáŠ•áŠ™áŠá‰¶á‰½áŠ• ብቻ áŠá‹ የሚáˆá‰…ዱትá¢" + }, + "WARNING_NOT_WINDOWED": { + "message": "ማሳሰቢያᦠáˆáˆ‰áˆ የá‰áˆá ሰሌዳ አቋራጮች የሚገኙ መሆናቸá‹áŠ• ለማረጋገጥ Chrome የርቀት ዴስክቶᕠወደ «እንደ መስኮት ክáˆá‰µÂ» ማዋቀር ይችላሉá¢" + }, + "WHY_IS_THIS_SAFE": { + "message": "ይሄ ለáˆáŠ•á‹µáŠá‹ ደህንáŠá‰± የተጠበቀ የሆáŠá‹?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "በመስራት ላይ…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ar/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ar/messages.json new file mode 100644 index 000000000000..6d43052fe16c --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ar/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "قبول وتثبيت" + }, + "ACCESS_CODE": { + "message": "رمز الدخول" + }, + "ACCESS_CODE_TIMER": { + "message": "ستنتهي صلاحية رمز الدخول هذا خلال $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "تعليقات" + }, + "ALL_CONNECTIONS": { + "message": "جميع الاتصالات" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "أعد كتابة رقم التعري٠الشخصي" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "رقم التعري٠الشخصي" + }, + "CANCEL": { + "message": "إلغاء" + }, + "CLEAR_HISTORY": { + "message": "محو السجل" + }, + "CLOSE": { + "message": "إغلاق" + }, + "CLOSE_PROMPT": { + "message": "â€Ø³ØªØ¤Ø¯ÙŠ مغادرة هذه الصÙحة إلى إنهاء جلسة سطح المكتب البعيد من Chrome." + }, + "CLOSE_WINDOW": { + "message": "إغلاق الناÙذة" + }, + "COMPANY_NAME": { + "message": "Google Inc‎.‎" + }, + "CONFIRM_HOST_DELETE": { + "message": "هل تريد بالتأكيد تعطيل الاتصالات عن بÙعد بـ $1$ØŸ إذا عدلت عن هذا القرار، Ùسيلزمك الانتقال إلى جهاز الكمبيوتر لإعادة تمكين الاتصالات.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "أخÙÙ‚ الاتصال" + }, + "CONNECTION_FROM_HEADER": { + "message": "من" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "سجل الاتصالات" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "متوسطة" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "جيدة" + }, + "CONNECTION_QUALITY_POOR": { + "message": "ضعيÙØ©" + }, + "CONNECTION_TO_HEADER": { + "message": "إلى" + }, + "CONNECT_ANYWAY": { + "message": "الاتصال على أي حال" + }, + "CONNECT_BUTTON": { + "message": "اتصال" + }, + "CONTINUE_BUTTON": { + "message": "المتابعة" + }, + "CONTINUE_PROMPT": { + "message": "أنت تشارك هذا الجهاز حاليًا مع مستخدم آخر. هل تريد بالتأكيد متابعة المشاركة؟" + }, + "CONTROLLER_NAME": { + "message": "â€Ø£Ø¯Ø§Ø© التحكم ÙÙŠ مضي٠سطح المكتب البعيد من Chrome" + }, + "COPYRIGHT": { + "message": "â€Ø­Ù‚وق الطبع والنشر لعام 2013 لشركة Google Inc. جميع الحقوق محÙوظة." + }, + "CREDITS": { + "message": "أسماء المشاركين" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "حذ٠الكل" + }, + "DELETE_PAIRED_CLIENT": { + "message": "حذÙ" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "للاستمرار، يجب أولاً منح أذونات موسّعة بالدخول إلى جهاز الكمبيوتر. لن ÙŠÙطلب منك إجراء ذلك سوى مرة واحدة." + }, + "DESCRIPTION_CONNECT": { + "message": "اطلب من المستخدم الذي ترغب ÙÙŠ الدخول إلى جهاز الكمبيوتر التابع له أن ينقر على \"$1$\" وأن يمنحك رمز الدخول.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "â€ÙŠØ³Ù…Ø­ لك سطح المكتب البعيد من Chrome بمشاركة جهاز الكمبيوتر التابع لك بشكل آمن عبر الويب. ويجب أن يشغّل كلا المستخدمَين تطبيق سطح المكتب البعيد من ChromeØŒ والذي يمكن العثور عليه على $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "â€ÙŠØªØ·Ù„ب منك المضي٠البعيد مصادقة موقع ويب لجهة خارجية. للمتابعة، يجب منح تطبيق سطح المكتب البعيد من Chrome أذونات إضاÙية للدخول إلى هذا العنوان:" + }, + "DISABLE_HOST": { + "message": "تعطيل" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "قطع الاتصال" + }, + "DISPLAY_SERVICE_NAME": { + "message": "â€Ø®Ø¯Ù…Ø© سطح المكتب البعيد من Chrome" + }, + "DURATION_HEADER": { + "message": "المدة" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "ليس لديك إذن لتشغيل هذا التطبيق." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "â€Ø£Ø®Ùقت المصادقة،يÙرجى تسجيل الدخول إلى Chrome مرة أخرى." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "بعض المكونات المطلوبة Ù…Ùقودة. الرجاء التأكد من تثبيت أحدث إصدار من البرنامج وإعادة المحاولة." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "حدث خطأ ÙÙŠ الشبكة. سنعيد تشغيل التطبيق عندما يتصل جهازك بالإنترنت مرة أخرى." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "قد Ùشل الكمبيوتر البعيد ÙÙŠ تهيئة الجلسة. وإذا استمرت المشكلة، ÙŠÙرجى محاولة تهيئة المضي٠مرة أخرى." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "الكمبيوتر البعيد لا يستجيب لطلبات الاتصال. الرجاء التحقق من اتصاله بالإنترنت وإعادة المحاولة." + }, + "ERROR_HOST_OVERLOAD": { + "message": "تم حظر الاتصالات بجهاز الكمبيوتر البعيد نظرًا لأن شخصًا ما كان يحاول الاتصال به باستخدام رقم تعري٠شخصي غير صالح. الرجاء إعادة المحاولة لاحقًا." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "أخÙÙ‚ تسجيل هذا الكمبيوتر." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "تم اكتشا٠إصدار غير متواÙÙ‚ من البروتوكول. الرجاء التأكد من تثبيت أحدث إصدار من البرنامج المÙثبت على كلا الجهازين، وإعادة المحاولة." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "رمز الدخول غير صالح، الرجاء إعادة المحاولة." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "â€Ù„ا تسمح إعدادات السياسة بمشاركة هذا الكمبيوتر كمضي٠لسطح المكتب البعيد من Chrome. اتصل بمشر٠النظام لتلقي المساعدة." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "انتهت صلاحية الجلسة البعيدة." + }, + "ERROR_MISSING_PLUGIN": { + "message": "â€Ø¨Ø¹Ø¶ المكونات المطلوبة Ù…Ùقودة. الرجاء التأكد من تشغيل أحدث إصدار من Chrome وإعادة المحاولة." + }, + "ERROR_NACL_DISABLED": { + "message": "â€Ø¨Ø¹Ø¶ المكونات المطلوبة Ù…Ùقودة. ÙŠÙرجى الانتقال إلى chrome://pluginsØŒ والتأكد من تمكين Native Client." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "توق٠مكوّن مطلوب عن العمل. ÙŠÙرجى إبلاغ هذه المشكلة إلى مطوري البرامج." + }, + "ERROR_NETWORK_FAILURE": { + "message": "تعذر الاتصال بالشبكة. الرجاء التحقق من اتصال الجهاز بالإنترنت." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "â€Ù„Ù… يتم تسجيل دخولك إلى ChromeØŒ ÙŠÙرجى تسجيل الدخول وإعادة المحاولة." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "ليس لديك إذن لتنÙيذ هذا الإجراء." + }, + "ERROR_NOT_FOUND": { + "message": "العنصر المطلوب غير موجود." + }, + "ERROR_P2P_FAILURE": { + "message": "يتعذر الوصول إلى المضيÙ. ربما يرجع ذلك إلى تهيئة الشبكة التي تستخدمها." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "الخدمة غير متاحة مؤقتًا. الرجاء إعادة المحاولة لاحقًا." + }, + "ERROR_UNEXPECTED": { + "message": "حدث خطأ غير متوقع. الرجاء الإبلاغ عن هذه المشكلة إلى مطوري البرامج." + }, + "EXIT_FULL_SCREEN": { + "message": "إنهاء وضع ملء الشاشة" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "تعذر إعادة ضبط التطبيق. لا يزال بإمكانك إرسال تقرير للإبلاغ عن خلل." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "إعادة ضبط التطبيق. ستÙقد أيّ عمل لم يتم Ø­Ùظه." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "لا أستطيع Ùتح التطبيق." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "التطبيق بطيء للغاية." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "â€Ù„ا أستطيع Ùتح ملÙات Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "â€Ù„ا أستطيع أن أرى الملÙات المحÙوظة عبر الإنترنت ÙÙŠ Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "أواجه مشكلات مع لوحة المÙاتيح أو الماوس." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "لمساعدتنا ÙÙŠ حل مشكلتك، ÙŠÙرجى إطلاعنا على ما حدث:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "غير ذلك." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "تحديد…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "للسماح لنا بالاتصال بك لمزيد من المعلومات، سيتم تضمين عنوان بريدك الإلكتروني ÙÙŠ أيّ تعليقات تقدمها." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "الإبلاغ عن مشكلة" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "أدرج سجلات التطبيق لمساعدتنا ÙÙŠ حل مشكلتك (قد تتضمن السجلات معلومات خاصة)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "â€Ø±Ø¨Ù…ا تتضمن سجلات التطبيق معلومات خاصة، بما ÙÙŠ ذلك هويتك (عنوان البريد الإلكتروني) وأسماء وخصائص الملÙات والمجلدات ÙÙŠ Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ولا تستخدم هذه المعلومات سوى لتشخيص المشكلة التي قدمت عنها التقرير، كما أنها غير متاحة إلا للشخص الذي يحقق ÙÙŠ تقريرك، ويتم الاحتÙاظ بها لمدة لا تتجاوز 30 يومًا." + }, + "FOOTER_CONNECTING": { + "message": "جار٠الاتصال..." + }, + "FOOTER_WAITING": { + "message": "ÙÙŠ انتظار الاتصال..." + }, + "FOR_PLATFORM_MAC": { + "message": "â€Ù„أجهزة Mac (OS X 10.6 والإصدارات الأحدث)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "â€Ù„نظام التشغيل Windows (XP والإصدارات الأحدث)" + }, + "FULL_SCREEN": { + "message": "ملء الشاشة" + }, + "GET_STARTED": { + "message": "الخطوات الأولى" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "قبول" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "رÙض" + }, + "HELP": { + "message": "مساعدة" + }, + "HOME_ACCESS_BUTTON": { + "message": "الدخول" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "الاطلاع على جهاز كمبيوتر تمت مشاركته والتحكم Ùيه." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "â€ÙŠÙ…كنك الدخول بأمان إلى هذا الكمبيوتر باستخدام سطح المكتب البعيد من Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "تغيير رقم التعري٠الشخصي" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "تتم مشاركة جهاز الكمبيوتر هذا حاليًا ضمن حساب مختلÙ." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "عرض/تعديل" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "تمت تهيئة هذا الكمبيوتر بحيث يسمح لعميل واحد أو أكثر بالاتصال بدون إدخال رقم تعري٠شخصي." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "تمكين الاتصالات عن بÙعد" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "â€ÙŠØ¬Ø¨ تمكين الاتصالات عن بÙعد إذا كنت تريد استخدام سطح المكتب البعيد من Chrome للدخول إلى هذا الكمبيوتر." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "تعطيل الاتصالات عن بÙعد" + }, + "HOME_SHARE_BUTTON": { + "message": "مشاركة" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "يمكنك مشاركة جهاز الكمبيوتر هذا مع مستخدم آخر للاطلاع عليه والتحكم Ùيه." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(هذه الميزة غير متاحة بعد لجهاز الكمبيوتر)" + }, + "HOST_CATEGORY": { + "message": "المضيÙ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "تم رÙض دخول العميل: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "العميل المتصل: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "تم إلغاء ربط العميل: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "â€Ø¹Ù†ÙˆØ§Ù† IP للقناة التابع للعميل: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "â€Ù„تمكين الاتصالات عن بÙعد بجهاز كمبيوتر مختلÙØŒ ثبّÙت \nبرنامج سطح المكتب البعيد من Chrome عليه وانقر على “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "â€Ù„يست هناك أجهزة كمبيوتر مسجلة. لتمكين الاتصالات عن بÙعد بجهاز كمبيوتر، ثبّÙت برنامج سطح المكتب البعيد من Chrome وانقر على “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "â€Ù„قد سجّلت الدخول سابقًا كالآتي $1$ ($2$). للوصول إلى أجهزة الكمبيوتر من خلال هذا الحساب، $3$سجّل الدخول إلى Google Chrome$4$ بهذا الحساب ثم أعد تثبيت سطح المكتب البعيد من Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "يتم عادةً إجراء تحديثات البرامج تلقائيًا، لكنها قد تخÙÙ‚ ÙÙŠ بعض الحالات النادرة. من المÙترض ألا يستغرق تحديث البرامج أكثر من بضع دقائق، كما يمكن إجراؤه أثناء الاتصال بالكمبيوتر عن بÙعد." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "â€Ù…يزة سطح المكتب البعيد من Chrome على $1$ قديمة ويلزم تحديثها.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "â€Ø³Ø§Ø¹Ø¯Ù†Ø§ ÙÙŠ تحسين سطح المكتب البعيد من Chrome من خلال السماح لنا بتجميع إحصاءات الاستخدام وتقارير الأعطال." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "لحماية الدخول إلى جهاز الكمبيوتر هذا، يرجى اختيار رقم تعري٠شخصي مكون من $1$ستة أرقام على الأقل$2$. وستتم المطالبة برقم التعري٠الشخصي هذا عند الاتصال من موقع آخر.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "أخÙÙ‚ بدء خدمة الدخول عن بÙعد." + }, + "HOST_SETUP_INSTALL": { + "message": "â€ÙŠØ¬Ø±ÙŠ Chrome تنزيلاً لأداة تثبيت \"مضي٠سطح المكتب البعيد من Chrome\". بعد اكتمال التنزيل، يرجى تشغيل أداة التثبيت قبل المتابعة." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "الرجاء تشغيل أداة التثبيت قبل المتابعة." + }, + "HOST_SETUP_STARTED": { + "message": "تم تمكين الاتصالات عن بÙعد لهذا الكمبيوتر." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "يرجى التحقق من إعدادات إدارة الطاقة ÙÙŠ جهاز الكمبيوتر وضمان عدم تهيئتها على وضع السكون عند الخمول." + }, + "HOST_SETUP_STARTING": { + "message": "جار٠تمكين الاتصالات عن بÙعد لهذا الكمبيوتر..." + }, + "HOST_SETUP_STOPPED": { + "message": "تم تعطيل الاتصالات عن بÙعد لهذا الكمبيوتر." + }, + "HOST_SETUP_STOPPING": { + "message": "جار٠تعطيل الاتصالات عن بÙعد لهذا الكمبيوتر..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "أخÙÙ‚ تعطيل الدخول عن بÙعد لهذا الكمبيوتر. الرجاء إعادة المحاولة لاحقًا." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "â€Ù…Ù† خلال تنزيل أداة تثبيت مضي٠سطح المكتب البعيد من ChromeØŒ تواÙÙ‚ على $1$بنود خدمة$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "تم تحديث رقم التعري٠الشخصي." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "أخÙÙ‚ تحديث رقم التعري٠الشخصي. الرجاء إعادة المحاولة لاحقًا." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "جار٠تحديث رقم التعري٠الشخصي لهذا الكمبيوتر..." + }, + "HOST_STARTED": { + "message": "بدأ المضي٠للمستخدم: %1." + }, + "HOST_STOPPED": { + "message": "المضي٠توقÙ." + }, + "IDLE_CONTINUE": { + "message": "المتابعة" + }, + "IDLE_DISCONNECT": { + "message": "إلغاء الربط الآن" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "جلسة تطبيقك $1$ كانت غير نشطة Ù„Ùترة من الوقت وسيتم إلغاء ربطها قريبًا.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "بهذا الكمبيوتر" + }, + "INSTALLER_DOWNLOAD": { + "message": "â€ØªÙ†Ø²ÙŠÙ„ أداة تثبيت مضي٠سطح المكتب البعيد من Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "لبدء مشاركة سطح المكتب، امنح رمز الدخول أدناه للشخص الذي سيساعدك." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "عند إدخاله الرمز، تبدأ جلسة المشاركة." + }, + "INVALID_PIN": { + "message": "الرجاء إدخال رقم تعري٠شخصي يتكون من ستة أرقام أو أكثر." + }, + "IT2ME_FIRST_RUN": { + "message": "تعد ميزة مشاركة الشاشة من مستخدم إلى مستخدم ميزة مثالية للدعم الÙني عن بÙعد." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "تخطيطات لوحة المÙاتيح" + }, + "LABEL_CONNECTED": { + "message": "متصل:" + }, + "LAST_ONLINE": { + "message": "$1$ (آخر دخول على الإنترنت ÙÙŠ تمام $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "تعرّ٠على الكيÙية." + }, + "LEARN_MORE": { + "message": "معرÙØ© المزيد." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "â€ØªÙضيلات مضي٠سطح المكتب البعيد من Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "â€Ù…ضي٠سطح المكتب\nالبعيد من Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "â€Ø£Ø¯Ø§Ø© إزالة مضي٠سطح المكتب البعيد من Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "â€Ø§Ø³ØªØ®Ø¯Ù… زر Ctrl الأيمن ÙÙŠ نظام التشغيل Win (⌘ ÙÙŠ نظام التشغيل Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "تكبير الناÙذة" + }, + "ME2ME_FIRST_RUN": { + "message": "يمكنك الدخول إلى جهاز الكمبيوتر من أي مكان." + }, + "MESSAGE_GENERATING": { + "message": "جار٠الحصول على رمز الدخول..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "â€Ø§Ù†ØªÙ‡Øª جلسة سطح المكتب البعيد من Chrome." + }, + "MESSAGE_SHARED": { + "message": "تتم مشاركة سطح المكتب حاليًا مع $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "تصغير الناÙذة" + }, + "MODE_AUTHORIZE": { + "message": "تÙويض" + }, + "MODE_IT2ME": { + "message": "المساعدة عن بÙعد" + }, + "MODE_ME2ME": { + "message": "أجهزة الكمبيوتر الخاصة بي" + }, + "NEW_WINDOW": { + "message": "ناÙذة جديدة…" + }, + "NO_PAIRED_CLIENTS": { + "message": "تم حذ٠جميع العملاء المقترنين." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "لا يتم دعم دمج سطح المكتب على هذه المنصة. يمكنك الاستمرار ÙÙŠ استخدام التطبيق، ولكن سيتدهور انطباع المستخدم." + }, + "OFFLINE": { + "message": "$1$ (ÙÙŠ وضع عدم اتصال)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Ùشلت تهيئة المضيÙ." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "تهيئة المضي٠غير صالحة." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "نطاق مالك المضي٠غير صالح." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "رقم تعري٠المضي٠غير صالح." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "â€ØªÙ…ت تهيئة المضي٠بواسطة بيانات اعتماد OAuth غير صالحة." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "â€ØªÙ… إيقا٠المضي٠الذي يعمل على شاشة تسجيل لوحة التحكم لدعم الوضع Curtain من خلال التبديل إلى مضي٠يعمل ÙÙŠ جلسة خاصة بالمستخدم." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "تتم إعادة تشغيل المضيÙØŒ لمراعاة تغيير ÙÙŠ السياسة." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "أخÙÙ‚ المضي٠ÙÙŠ قراءة السياسة." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "تم إيقا٠تشغيل المضيÙ." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "خطأ بالمضي٠غير معروÙ: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "مالك المضي٠غير صالح." + }, + "OK": { + "message": "مواÙÙ‚" + }, + "OPTIONS_MENU": { + "message": "خيارات" + }, + "OUTGOING_CONNECTIONS": { + "message": "من هذا الكمبيوتر" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "تم إقران العملاء التالين بهذا الكمبيوتر ويمكنه الاتصال بدون توÙير رقم تعري٠شخصي. يمكنك إبطال هذا الإذن متى شئت، سواء على نطاق Ùردي أو لجميع العملاء." + }, + "PAIRED_CLIENT_DATE": { + "message": "تاريخ الإقران" + }, + "PAIRED_CLIENT_NAME": { + "message": "العميل" + }, + "PIN": { + "message": "رقم التعري٠الشخصي" + }, + "PINS_NOT_EQUAL": { + "message": "الرجاء إدخال رقم التعري٠الشخصي Ù†Ùسه ÙÙŠ كلا المربعين." + }, + "PIN_MESSAGE": { + "message": "الرجاء إدخال رقم التعري٠الشخصي التابع لك لـ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "الرجاء إدخال رقم التعري٠الشخصي لجهاز الكمبيوتر البعيد." + }, + "PRODUCT_DESCRIPTION": { + "message": "الدخول إلى أجهزة كمبيوتر أخرى أو السماح لمستخدم آخر بالدخول إلى جهازك بشكل آمن عبر الإنترنت." + }, + "PRODUCT_NAME": { + "message": "â€Ø³Ø·Ø­ المكتب البعيد من Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "إعادة الاتصال" + }, + "REMEMBER_PIN": { + "message": "عدم المطالبة برقم التعري٠الشخصي مرة أخرى عند الاتصال بهذا المضي٠من هذا الجهاز." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "المكتبة الأساسية" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "عملية دمج سطح المكتب" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "â€ØªØ·Ø¨ÙŠÙ‚ لإصدار الأوامر إلى مضي٠سطح المكتب البعيد من Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "عملية المضيÙ" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "مضي٠الرسائل الأصلي لإدارة المضي٠عن بÙعد" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "مضي٠الرسائل الأصلي للمساعدة عن بÙعد" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "عملية التحكم عن بعد ÙÙŠ Ù…Ùتاح الأمان" + }, + "RESIZE_TO_CLIENT": { + "message": "تغيير حجم سطح المكتب للملاءمة" + }, + "RESTART_BUTTON": { + "message": "إعادة التشغيل الآن" + }, + "RESTORE_WINDOW": { + "message": "استعادة الناÙذة" + }, + "RETRY": { + "message": "إعادة المحاولة" + }, + "SCREEN_OPTIONS": { + "message": "خيارات الشاشة" + }, + "SEND_CTRL_ALT_DEL": { + "message": "â€Ø¥Ø±Ø³Ø§Ù„ Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "الإبلاغ عن مشكلة..." + }, + "SEND_KEYS": { + "message": "إرسال Ù…Ùاتيح" + }, + "SEND_PRINT_SCREEN": { + "message": "â€Ø¥Ø±Ø³Ø§Ù„ PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "â€ØªÙ…كن هذه الخدمة الاتصالات الواردة من عملاء سطح المكتب البعيد من Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "تتم إدارة هذا الإعداد بواسطة سياسات النطاق لديك." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "مشاركة" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "إلغاء" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "هل ترغب ÙÙŠ مشاركة هذا الكمبيوتر مع مستخدم آخر للمشاهدة والتحكم؟" + }, + "SHOW_STATS": { + "message": "إظهار الإحصاءات" + }, + "SHOW_STATS_WITH_RTT": { + "message": "عرض الإحصاءات (جودة الاتصال: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "تقليص للملاءمة" + }, + "SIGN_IN_BUTTON": { + "message": "تسجيل الدخول" + }, + "SIGN_OUT_BUTTON": { + "message": "الخروج" + }, + "STOP_SHARING_BUTTON": { + "message": "إيقا٠المشاركة" + }, + "SURVEY_INVITATION": { + "message": "â€Ø¥Ø°Ø§ كنت ترغب ÙÙŠ المساعدة على تحسين ميزة سطح المكتب البعيد من ChromeØŒ ÙÙŠÙمكنك $1$المشاركة ÙÙŠ الاستبيان.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "الوقت" + }, + "TOGGLE_STATS": { + "message": "إظهار الإحصاءات" + }, + "TOOLTIP_CONNECT": { + "message": "الاتصال بـ $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "تعطيل الاتصالات عن بÙعد بهذا الكمبيوتر" + }, + "TOOLTIP_REFRESH": { + "message": "تحديث قائمة المضيÙين" + }, + "TOOLTIP_RENAME": { + "message": "تعديل اسم الكمبيوتر" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (قديم)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "الحساب" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "â€ÙŠÙرجى التأكيد على حسابك ورقم تعريÙÙƒ الشخصي أدناه للسماح بالدخول من خلال سطح المكتب البعيد من Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "ملاحظة: لا تسمح إعدادات السياسة سوى بالاتصال بين أجهزة الكمبيوتر داخل شبكتك." + }, + "WARNING_NOT_WINDOWED": { + "message": "â€Ù…لاحظة: للتأكد من توÙر كل اختصارات لوحة المÙاتيح، يمكنك تهيئة ميزة سطح المكتب البعيد من Chrome على \"Ùتح كناÙذة\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "ما سبب تمتع هذه العملية بالأمان؟" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "â€Ù†Ø¸Ø§Ù… التشغيل Windows" + }, + "WORKING": { + "message": "جار٠العمل…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bg/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bg/messages.json new file mode 100644 index 000000000000..5dfc2bdd9ac6 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bg/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Приемам и инÑталирам" + }, + "ACCESS_CODE": { + "message": "Код за доÑтъп" + }, + "ACCESS_CODE_TIMER": { + "message": "Този код за доÑтъп ще изтече Ñлед $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Отзиви" + }, + "ALL_CONNECTIONS": { + "message": "Ð’Ñички връзки" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Въведете отново ПИРкода" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "ПИРкод" + }, + "CANCEL": { + "message": "Отказ" + }, + "CLEAR_HISTORY": { + "message": "ИзчиÑтване на иÑториÑта" + }, + "CLOSE": { + "message": "ЗатварÑне" + }, + "CLOSE_PROMPT": { + "message": "Ðко излезете от тази Ñтраница, ÑеÑиÑта ви в Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome ще приключи." + }, + "CLOSE_WINDOW": { + "message": "ЗатварÑне на прозореца" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "ÐаиÑтина ли иÑкате да деактивирате отдалечените връзки Ñ/ÑŠÑ $1$? Ðко промените решението Ñи, ще Ñ‚Ñ€Ñбва да поÑетите този компютър, за да ги активирате отново.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Връзката не бе уÑпешна" + }, + "CONNECTION_FROM_HEADER": { + "message": "От" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° връзките" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "задоволителна" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "добра" + }, + "CONNECTION_QUALITY_POOR": { + "message": "лоша" + }, + "CONNECTION_TO_HEADER": { + "message": "До" + }, + "CONNECT_ANYWAY": { + "message": "Свързване въпреки това" + }, + "CONNECT_BUTTON": { + "message": "Свързване" + }, + "CONTINUE_BUTTON": { + "message": "Ðапред" + }, + "CONTINUE_PROMPT": { + "message": "ПонаÑтоÑщем ÑподелÑте този компютър Ñ Ð´Ñ€ÑƒÐ³ потребител. ИÑкате ли да продължите ÑподелÑнето?" + }, + "CONTROLLER_NAME": { + "message": "Контролер за хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome" + }, + "COPYRIGHT": { + "message": "ÐвторÑки права 2013 Google Inc. Ð’Ñички права запазени." + }, + "CREDITS": { + "message": "Признание" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Изтриване на вÑички" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Изтриване" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "За да продължите, първо Ñ‚Ñ€Ñбва да предоÑтавите на компютъра Ñи разширени Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð·Ð° доÑтъп. Ðеобходимо е да направите това Ñамо веднъж." + }, + "DESCRIPTION_CONNECT": { + "message": "Помолете потребителÑ, до чийто компютър иÑкате доÑтъп, да кликне върху „$1$“ и да ви предоÑтави ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ ÐºÐ¾Ð´.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "ОтдалечениÑÑ‚ работен плот на Chrome ви позволÑва да ÑподелÑте надеждно компютъра Ñи през мрежата. И двамата потребители Ñ‚Ñ€Ñбва да изпълнÑват приложението, което може да бъде намерено на Ð°Ð´Ñ€ÐµÑ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "ОтдалечениÑÑ‚ хоÑÑ‚ изиÑква да удоÑтоверите ÑамоличноÑтта Ñи пред уебÑайт на трета Ñтрана. За да продължите, Ñ‚Ñ€Ñбва да предоÑтавите на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome допълнителни Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð·Ð° доÑтъп до този адреÑ:" + }, + "DISABLE_HOST": { + "message": "Деактивиране" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Изключване" + }, + "DISPLAY_SERVICE_NAME": { + "message": "УÑлуга за отдалечен работен плот на Chrome" + }, + "DURATION_HEADER": { + "message": "ПродължителноÑÑ‚" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "ÐÑмате разрешение да Ñтартирате това приложение." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "УдоÑтоверÑването не бе уÑпешно. МолÑ, влезте отново в Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "ЛипÑват нÑкои задължителни компоненти. МолÑ, уверете Ñе, че Ñте инÑталирали най-новата верÑÐ¸Ñ Ð½Ð° Ñофтуера, и опитайте отново." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Възникна грешка в мрежата. Ще реÑтартираме приложението, когато уÑтройÑтвото ви отново е онлайн." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "ОтдалечениÑÑ‚ компютър не уÑÐ¿Ñ Ð´Ð° подготви ÑеÑиÑта за работа. Ðко проблемът продължи, молÑ, опитайте да конфигурирате хоÑта отново." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "ОтдалечениÑÑ‚ компютър не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° заÑвките за връзка. МолÑ, потвърдете, че е онлайн, и опитайте отново." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Връзките Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€ Ñа блокирани временно, защото нÑкой Ñе опита да Ñе Ñвърже Ñ Ð½ÐµÐ³Ð¾ поÑредÑтвом невалиден ПИРкод. МолÑ, опитайте отново по-къÑно." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "РегиÑтрирането на този компютър не бе уÑпешно." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Открита е неÑъвмеÑтима верÑÐ¸Ñ Ð½Ð° протокол. МолÑ, уверете Ñе, че най-новата верÑÐ¸Ñ Ð½Ð° Ñофтуера е инÑталирана и на двата компютъра, и опитайте отново." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Кодът за доÑтъп е невалиден. МолÑ, опитайте отново." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "ÐаÑтройките за правила не разрешават ÑподелÑнето на този компютър като хоÑÑ‚ на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome. Свържете Ñе ÑÑŠÑ ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ñи админиÑтратор за ÑъдейÑтвие." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Отдалечената ÑеÑÐ¸Ñ Ð¸Ð·Ñ‚ÐµÑ‡Ðµ." + }, + "ERROR_MISSING_PLUGIN": { + "message": "ЛипÑват нÑкои задължителни компоненти. МолÑ, уверете Ñе, че използвате най-новата верÑÐ¸Ñ Ð½Ð° Chrome, и опитайте отново." + }, + "ERROR_NACL_DISABLED": { + "message": "ЛипÑват нÑкои задължителни компоненти. МолÑ, отворете chrome://plugins и Ñе уверете, че приÑтавката Native Client е активиранa." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Задължителен компонент ÑÐ¿Ñ€Ñ Ð´Ð° работи. МолÑ, подайте Ñигнал за този проблем до програмиÑтите." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Ðе можа да Ñе уÑтанови връзка Ñ Ð¼Ñ€ÐµÐ¶Ð°Ñ‚Ð°. МолÑ, проверете дали уÑтройÑтвото ви е онлайн." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Ðе Ñте влезли в Chrome. МолÑ, направете го и опитайте отново." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "ÐÑмате разрешение да извършите това дейÑтвие." + }, + "ERROR_NOT_FOUND": { + "message": "ЗаÑвениÑÑ‚ обект не ÑъщеÑтвува." + }, + "ERROR_P2P_FAILURE": { + "message": "Ðе можем да Ñе Ñвържем Ñ Ñ…Ð¾Ñта. Това вероÑтно Ñе дължи на конфигурациÑта на използваната от Ð²Ð°Ñ Ð¼Ñ€ÐµÐ¶Ð°." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Временно нÑма доÑтъп до уÑлугата. МолÑ, опитайте отново по-къÑно." + }, + "ERROR_UNEXPECTED": { + "message": "Възникна неочаквана грешка. МолÑ, подайте Ñигнал за този проблем до програмиÑтите." + }, + "EXIT_FULL_SCREEN": { + "message": "Изход от цÑл екран" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Приложението не можа да Ñе реÑтартира. Пак можете да изпратите Ñигнал за програмна грешка." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "РеÑтартиране на приложението. Ðезапазената работа ще бъде заличена." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ðе мога да Ð¾Ñ‚Ð²Ð¾Ñ€Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÑ‚Ð¾." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Приложението е твърде бавно." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ðе мога да Ð¾Ñ‚Ð²Ð¾Ñ€Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²ÐµÑ‚Ðµ Ñи в Google ДиÑк." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Ðе виждам запазените Ñи файлове онлайн в Google ДиÑк." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Имам проблеми Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð°Ñ‚Ð° или мишката." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "За да ни помогнете да решим проблема ви, молÑ, кажете ни какво Ñе обърка:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Друго." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Изберете…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "За да можем да Ñе Ñвържем Ñ Ð²Ð°Ñ Ð·Ð° допълнителна информациÑ, имейл адреÑÑŠÑ‚ ви ще бъде включен във вÑички отзиви, които изпращате." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Подаване на Ñигнал за проблем" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Включване на региÑтрационните файлове на приложението, за да Ñе помогне за решаването на проблема (файловете може да Ñъдържат чаÑтна информациÑ)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "РегиÑтрационните файлове на приложението може да Ñъдържат чаÑтна информациÑ, включително ÑамоличноÑтта ви (имейл адреÑ), както и имената и ÑвойÑтвата на файлове и папки в Google ДиÑк." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Тази Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñлужи единÑтвено за диагноÑтика на проблема, за който подавате Ñигнал. Ð¢Ñ Ðµ доÑтъпна Ñамо за проучващото го лице и Ñе ÑъхранÑва най-много за 30 дни." + }, + "FOOTER_CONNECTING": { + "message": "УÑтановÑва Ñе връзка…" + }, + "FOOTER_WAITING": { + "message": "изчаква Ñе връзка…" + }, + "FOR_PLATFORM_MAC": { + "message": "За Mac (OS X 10.6 и по-нови верÑии)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "За Windows (XP и по-нови верÑии)" + }, + "FULL_SCREEN": { + "message": "Ðа цÑл екран" + }, + "GET_STARTED": { + "message": "Първи Ñтъпки" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Приемам" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "ОтхвърлÑне" + }, + "HELP": { + "message": "Помощ" + }, + "HOME_ACCESS_BUTTON": { + "message": "ДоÑтъп" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Вижте и контролирайте Ñподелен компютър." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Може да оÑъщеÑтвите надеждно доÑтъп до този компютър поÑредÑтвом Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "ПромÑна на ПИÐ" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "ПонаÑтоÑщем този компютър е Ñподелен Ñ Ð´Ñ€ÑƒÐ³ профил." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Преглед/редактиране" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Този компютър е конфигуриран така, че една или повече клиентÑки програми да могат да уÑтановÑват връзка, без да въвеждат ПИРкод." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Ðктивиране на отдалечените връзки" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "ТрÑбва да активирате отдалечените връзки, ако иÑкате да използвате Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome, за да оÑъщеÑтвÑвате доÑтъп до този компютър." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Деактивиране на отдалечените връзки" + }, + "HOME_SHARE_BUTTON": { + "message": "СподелÑне" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Споделете този компютър, така че да Ñе вижда и контролира от друг потребител." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(тази Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ñ‰Ðµ не е налице за компютъра ви)" + }, + "HOST_CATEGORY": { + "message": "ХоÑÑ‚" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Отказан е доÑтъп на клиентÑка програма: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "УÑтановена е връзка Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñка програма: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Връзката Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñката програма е прекъÑната: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP Ð°Ð´Ñ€ÐµÑ Ð½Ð° канала за клиентÑката програма: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "За да активирате отдалечените връзки към друг компютър, инÑталирайте на него Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome и кликнете върху „$1$“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "ÐÑмате региÑтрирани компютри. За да активирате отдалечените връзки към нÑкой, инÑталирайте на него Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome и кликнете върху „$1$“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "По-рано Ñте влезли като $1$ ($2$). За да имате доÑтъп до компютрите Ñи Ñ Ñ‚Ð¾Ð·Ð¸ профил, $3$влезте в Google Chrome$4$ Ñ Ð½ÐµÐ³Ð¾ и отново инÑталирайте приложението за отдалечен работен плот.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Софтуерните актуализации обикновено Ñе извършват автоматично, но в нÑкои редки Ñлучаи може да не Ñа уÑпешни. Ðктуализирането не Ñ‚Ñ€Ñбва да отнеме повече от нÑколко минути и може да Ñе изпълни при отдалечена връзка Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€Ð° ви." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "ВерÑиÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome на „$1$“ не е актуална и Ñ‚Ñ€Ñбва да Ñе актуализира.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Помогнете ни да подобрим Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome, като ни разрешите да Ñъбираме ÑтатиÑтичеÑки данни за употребата и Ñигнали за Ñривове." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "За да защитите доÑтъпа до този компютър, молÑ, изберете ПИРкод $1$поне Ñ ÑˆÐµÑÑ‚ цифри$2$. Той ще Ñе изиÑква при Ñвързване от друго меÑтоположение.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Стартирането на уÑлугата за отдалечен доÑтъп не бе уÑпешно." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome Ð¸Ð·Ñ‚ÐµÐ³Ð»Ñ Ð¸Ð½Ñталационната програма за хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome. След като процеÑÑŠÑ‚ завърши, молÑ, Ñтартирайте Ñ, преди да продължите." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "МолÑ, Ñтартирайте инÑталационната програма, преди да продължите." + }, + "HOST_SETUP_STARTED": { + "message": "Отдалечените връзки за този компютър Ñа активирани." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "МолÑ, проверете наÑтройките за управление на захранването на компютъра Ñи и Ñе уверете, че не е конфигуриран да преминава в ÑпÑщ режим при неактивноÑÑ‚." + }, + "HOST_SETUP_STARTING": { + "message": "Отдалечените връзки за този компютър Ñе активират…" + }, + "HOST_SETUP_STOPPED": { + "message": "Отдалечените връзки за този компютър Ñа деактивирани." + }, + "HOST_SETUP_STOPPING": { + "message": "Отдалечените връзки за този компютър Ñе деактивират…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Деактивирането на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтъп до този компютър не бе уÑпешно. МолÑ, опитайте отново по-къÑно." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "С изтеглÑнето на инÑталационната програма за хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome приемате $1$Общите уÑловиÑ$4 на Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "ПИРкодът ви е актуализиран." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Ðктуализирането на ПИРкода не бе уÑпешно. МолÑ, опитайте отново по-къÑно." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "ПИРкодът за този компютър Ñе актуализира…" + }, + "HOST_STARTED": { + "message": "За Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ Ñтартиран хоÑÑ‚: %1." + }, + "HOST_STOPPED": { + "message": "ХоÑÑ‚ÑŠÑ‚ е ÑпрÑн." + }, + "IDLE_CONTINUE": { + "message": "Ðапред" + }, + "IDLE_DISCONNECT": { + "message": "ПрекратÑване на връзката Ñега" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "От извеÑтно време ÑеÑиÑта ви в/ъв $1$ е неактивна и Ñкоро ще бъде прекратена.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "С този компютър" + }, + "INSTALLER_DOWNLOAD": { + "message": "ИзтеглÑне на инÑталационната програма за хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "За да започнете да ÑподелÑте Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ñи плот, дайте долупоÑÐ¾Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ за доÑтъп на човека, който ще ви ÑъдейÑтва." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "След въвеждането на кода ÑеÑиÑта ви на ÑподелÑне ще започне." + }, + "INVALID_PIN": { + "message": "МолÑ, въведете ПИРкод, ÑÑŠÑтоÑщ Ñе от шеÑÑ‚ или повече цифри." + }, + "IT2ME_FIRST_RUN": { + "message": "СподелÑне на екран от потребител на потребител – идеално за отдалечена техничеÑка поддръжка." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Клавиатурни подредби" + }, + "LABEL_CONNECTED": { + "message": "Има връзка:" + }, + "LAST_ONLINE": { + "message": "$1$ (поÑледно онлайн: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Ðаучете как." + }, + "LEARN_MORE": { + "message": "Ðаучете повече." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "ÐŸÑ€ÐµÐ´Ð¿Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð·Ð° хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "ХоÑÑ‚ на отдалечениÑ\nработен плот на Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "ДеинÑталираща програма за хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Използвайте деÑÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ „Ctrl“ като клавиш „Windows“ (⌘ под Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Увеличаване на прозореца" + }, + "ME2ME_FIRST_RUN": { + "message": "ОÑъщеÑтвÑвайте доÑтъп до компютъра Ñи отвÑÑкъде." + }, + "MESSAGE_GENERATING": { + "message": "Кодът за доÑтъп Ñе генерира…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "СеÑиÑта ви в Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome приключи." + }, + "MESSAGE_SHARED": { + "message": "ПонаÑтоÑщем $1$ ÑÐ¿Ð¾Ð´ÐµÐ»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð²Ð¸ плот.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "ÐамалÑване на прозореца" + }, + "MODE_AUTHORIZE": { + "message": "Упълномощаване" + }, + "MODE_IT2ME": { + "message": "Отдалечено ÑъдейÑтвие" + }, + "MODE_ME2ME": { + "message": "Моите компютри" + }, + "NEW_WINDOW": { + "message": "Ðов прозорец…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Ð’Ñички Ñдвоени клиентÑки програми Ñа изтрити." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Интегрирането на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚ не Ñе поддържа за тази платформа. Пак можете да използвате приложението, но качеÑтвото на практичеÑката работа нÑма да е оптимално." + }, + "OFFLINE": { + "message": "$1$ (офлайн)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Стартирането на хоÑта не бе уÑпешно." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ðевалидна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð½Ð° хоÑта." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ðевалиден домейн на ÑобÑтвеника на хоÑта." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ðевалиден идентификатор на хоÑÑ‚." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "ХоÑÑ‚ÑŠÑ‚ е конфигуриран Ñ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ð¸ идентификационни данни за OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "ХоÑÑ‚ÑŠÑ‚, изпълнÑван на екрана за вход в конзолата, е ÑпрÑн, за да Ñе поддържа режимът на прикриване, като Ñе превключи към хоÑÑ‚, работещ в ÑеÑÐ¸Ñ Ð½Ð° конкретен потребител." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ХоÑÑ‚ÑŠÑ‚ Ñе реÑтартира, за да влезе в Ñила промÑна в правило." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ХоÑÑ‚ÑŠÑ‚ не уÑÐ¿Ñ Ð´Ð° прочете правилото." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ХоÑÑ‚ÑŠÑ‚ Ñе изключи." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Ðеразпозната грешка в хоÑта: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ðевалиден ÑобÑтвеник на хоÑта." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Опции" + }, + "OUTGOING_CONNECTIONS": { + "message": "От този компютър" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Следните клиентÑки програми Ñа Ñдвоени Ñ Ñ‚Ð¾Ð·Ð¸ компютър и могат да Ñе Ñвързват, без да предоÑтавÑÑ‚ ПИРкод. Ð’ ÑÑŠÑтоÑние Ñте да отмените това разрешение по вÑÑко време – за отделни програми или за вÑички." + }, + "PAIRED_CLIENT_DATE": { + "message": "Дата на ÑдвоÑване" + }, + "PAIRED_CLIENT_NAME": { + "message": "КлиентÑка програма" + }, + "PIN": { + "message": "ПИРкод" + }, + "PINS_NOT_EQUAL": { + "message": "МолÑ, въведете един и Ñъщ ПИРкод и в двете полета." + }, + "PIN_MESSAGE": { + "message": "МолÑ, въведете ПИРкода Ñи за $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "МолÑ, въведете ПИРкода Ñи за Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€." + }, + "PRODUCT_DESCRIPTION": { + "message": "ОÑъщеÑтвÑвайте доÑтъп до други компютри или разрешете на друг потребител да използва надеждно компютъра ви през интернет." + }, + "PRODUCT_NAME": { + "message": "Отдалечен работен плот на Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Повторно Ñвързване" + }, + "REMEMBER_PIN": { + "message": "Без извеждане на повторно запитване за ПИРкод при Ñвързване Ñ Ñ‚Ð¾Ð·Ð¸ хоÑÑ‚ от това уÑтройÑтво." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Библиотека на Ñдрото" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ð½Ð° интегриране на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Приложение, което да издава команди към хоÑта на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ð½Ð° хоÑта" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "ХоÑÑ‚ за обмен на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ изпълнение за управление на хоÑÑ‚ за отдалечен доÑтъп" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "ХоÑÑ‚ за обмен на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ изпълнение за отдалечено ÑъдейÑтвие" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ð·Ð° отдалечен доÑтъп чрез ключ за ÑигурноÑÑ‚" + }, + "RESIZE_TO_CLIENT": { + "message": "ПреоразмерÑване на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚ Ñ Ñ†ÐµÐ» уеднаквÑване" + }, + "RESTART_BUTTON": { + "message": "РеÑтартиране Ñега" + }, + "RESTORE_WINDOW": { + "message": "ВъзÑтановÑване на прозореца" + }, + "RETRY": { + "message": "Ðов опит" + }, + "SCREEN_OPTIONS": { + "message": "Опции за екрана" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Изпращане на Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Подаване на Ñигнал за проблем…" + }, + "SEND_KEYS": { + "message": "Изпращане на клавишни комбинации" + }, + "SEND_PRINT_SCREEN": { + "message": "Изпращане на PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Тази уÑлуга активира входÑщите връзки от клиентÑки програми за отдалечен работен плот на Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Тази наÑтройка Ñе управлÑва от правилата на домейна ви." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "СподелÑне" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Отказ" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "ИÑкате ли да Ñподелите компютъра Ñ Ð´Ñ€ÑƒÐ³ потребител, така че да вижда какво Ñе Ñлучва и да управлÑва?" + }, + "SHOW_STATS": { + "message": "Показване на ÑтатиÑтичеÑките данни" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Показване на ÑтатиÑтичеÑките данни (връзка: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ÐамалÑване за побиране" + }, + "SIGN_IN_BUTTON": { + "message": "Вход" + }, + "SIGN_OUT_BUTTON": { + "message": "Изход" + }, + "STOP_SHARING_BUTTON": { + "message": "Спиране на ÑподелÑнето" + }, + "SURVEY_INVITATION": { + "message": "ИÑкате ли да помогнете за подобрÑването на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome? $1$УчаÑтвайте в проучването.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Време" + }, + "TOGGLE_STATS": { + "message": "Показване на ÑтатиÑтичеÑките данни" + }, + "TOOLTIP_CONNECT": { + "message": "Свързване Ñ/ÑŠÑ $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Деактивиране на отдалечените връзки Ñ Ñ‚Ð¾Ð·Ð¸ компютър" + }, + "TOOLTIP_REFRESH": { + "message": "ОпреÑнÑване на ÑпиÑъка Ñ Ñ…Ð¾Ñтове" + }, + "TOOLTIP_RENAME": { + "message": "Редактиране на името на компютъра" + }, + "UPDATE_REQUIRED": { + "message": "„$1$“ (неактуална верÑиÑ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Профил" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "МолÑ, потвърдете профила и ПИРкода Ñи по-долу, за да разрешите доÑтъпа чрез Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "ЗÐБЕЛЕЖКÐ: ÐаÑтройките за правила разрешават връзки Ñамо между компютри в мрежата ви." + }, + "WARNING_NOT_WINDOWED": { + "message": "ЗÐБЕЛЕЖКÐ: За да Ñе гарантира, че вÑички клавишни комбинации Ñа налице, можете да конфигурирате Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÐµÐ½ плот на Chrome да Ñе Ð¾Ñ‚Ð²Ð°Ñ€Ñ ÐºÐ°Ñ‚Ð¾ прозорец." + }, + "WHY_IS_THIS_SAFE": { + "message": "Защо това е безопаÑно?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Ð’ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° работа…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bn/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bn/messages.json new file mode 100644 index 000000000000..6212e7edbd5f --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/bn/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "সà§à¦¬à§€à¦•à¦¾à¦° করà§à¦¨ à¦à¦¬à¦‚ ইনসà§à¦Ÿà¦² করà§à¦¨" + }, + "ACCESS_CODE": { + "message": "অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ কোড" + }, + "ACCESS_CODE_TIMER": { + "message": "à¦à¦‡ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ কোডটির মেয়াদ $1$ঠশেষ হবে", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "পà§à¦°à¦¤à¦¿à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾" + }, + "ALL_CONNECTIONS": { + "message": "সমসà§à¦¤ সংযোগ" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "পিন পà§à¦¨à¦°à¦¾à§Ÿ টাইপ করà§à¦¨" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "পিন" + }, + "CANCEL": { + "message": "বাতিল" + }, + "CLEAR_HISTORY": { + "message": "ইতিহাস সাফ করà§à¦¨" + }, + "CLOSE": { + "message": "বনà§à¦§" + }, + "CLOSE_PROMPT": { + "message": "à¦à¦‡ পৃষà§à¦ à¦¾à¦Ÿà¦¿ ছেড়ে গেলেও সেটা আপনার Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª অধিবেশনটিকে শেষ করবে৷" + }, + "CLOSE_WINDOW": { + "message": "উইনà§à¦¡à§‹ বনà§à¦§ করà§à¦¨" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$ঠদূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ অকà§à¦·à¦® করার বà§à¦¯à¦¾à¦ªà¦¾à¦°à§‡ আপনি কি নিশà§à¦šà¦¿à¦¤? আপনি যদি মন বদলান, তাহলে সংযোগগà§à¦²à¦¿ পà§à¦¨à¦ƒà¦¸à¦•à§à¦·à¦® করতে আপনাকে à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ যেতে হবে৷", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "সংযোগ বà§à¦¯à¦°à§à¦¥ হয়েছে" + }, + "CONNECTION_FROM_HEADER": { + "message": "থেকে" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "সংযোগ ইতিহাস" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "মোটামà§à¦Ÿà¦¿" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "শকà§à¦¤à¦¿à¦¶à¦¾à¦²à§€" + }, + "CONNECTION_QUALITY_POOR": { + "message": "দà§à¦°à§à¦¬à¦²" + }, + "CONNECTION_TO_HEADER": { + "message": "পà§à¦°à¦¤à¦¿" + }, + "CONNECT_ANYWAY": { + "message": "যেকোনো উপায়ে সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" + }, + "CONNECT_BUTTON": { + "message": "সংযà§à¦•à§à¦¤ করà§à¦¨" + }, + "CONTINUE_BUTTON": { + "message": "অবিরত" + }, + "CONTINUE_PROMPT": { + "message": "আপনি বরà§à¦¤à¦®à¦¾à¦¨à§‡ à¦à¦‡ মেশিনটিকে অনà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সাথে ভাগ করছেন৷ আপনি কি শেয়ার করা অবিরত করতে চান?" + }, + "CONTROLLER_NAME": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ নিয়নà§à¦¤à§à¦°à¦£à¦•à¦¾à¦°à§€" + }, + "COPYRIGHT": { + "message": "কপিরাইট 2013 Google Inc. সরà§à¦¬à¦¸à§à¦¬à¦¤à§à¦¬ সংরকà§à¦·à¦¿à¦¤à§·" + }, + "CREDITS": { + "message": "কৃতিতà§à¦¬" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "সব মà§à¦›à§à¦¨" + }, + "DELETE_PAIRED_CLIENT": { + "message": "মà§à¦›à§à¦¨" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "অবিরত করার জনà§à¦¯ আপনাকে আবশà§à¦¯à¦‡ পà§à¦°à¦¥à¦®à§‡ আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ পà§à¦°à¦¸à¦¾à¦°à¦¿à¦¤ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ অনà§à¦®à¦¤à¦¿à¦—à§à¦²à¦¿ মঞà§à¦œà§à¦° করতে হবে৷ আপনাকে কেবল à¦à¦•à¦¬à¦¾à¦° à¦à¦Ÿà¦¿ করতে হবে৷" + }, + "DESCRIPTION_CONNECT": { + "message": "“$1$†ঠকà§à¦²à¦¿à¦• করতে à¦à¦¬à¦‚ আপনাকে অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ কোড দিতে আপনি কার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করতে চান তা বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à¦¿à¦•à§‡ জিজà§à¦žà§‡à¦¸ করà§à¦¨à¥¤", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª আপনাকে ওয়েবে আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° নিরাপদভাবে শেয়ার করার মঞà§à¦œà§à¦°à¦¿ দেয়৷ উভয় বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦•à§‡à¦‡ Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¨ চালাতে হবে যা $1$ঠপেতে পারেন৷", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "à¦à¦•à¦Ÿà¦¿ তৃতীয়-পকà§à¦· ওয়েবসাইট পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£ করতে রিমোট হোসà§à¦Ÿà¦Ÿà¦¿à¦° আপনাকে পà§à¦°à§Ÿà§‹à¦œà¦¨à¥¤ অবিরত রাখতে, à¦à¦‡ ওয়েবসাইট অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করতে আপনাকে অবশà§à¦¯à¦‡ Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª অতিরিকà§à¦¤ অনà§à¦®à¦¤à¦¿à¦° মঞà§à¦œà§à¦°à¦¿ দিতে হবে:" + }, + "DISABLE_HOST": { + "message": "অকà§à¦·à¦®" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª পরিষেবা" + }, + "DURATION_HEADER": { + "message": "সময়কাল" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "à¦à¦‡ অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨ চালানোর মতো অনà§à¦®à¦¤à¦¿ আপনার নেই।" + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£ বà§à¦¯à¦°à§à¦¥ হয়েছে৷ অনà§à¦—à§à¦°à¦¹ করে আবার Chrome-ঠসাইন ইন করà§à¦¨à§·" + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "পà§à¦°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ কিছৠউপাদান অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ আছে৷ আপনি অতিসামà§à¦ªà§à¦°à¦¤à¦¿à¦• সংসà§à¦•à¦°à¦£à¦Ÿà¦¿ ইনসà§à¦Ÿà¦² করেছেন কিনা দয়া করে তা নিশà§à¦šà¦¿à¦¤ করà§à¦¨ à¦à¦¬à¦‚ আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "নেটওয়ারà§à¦• সংকà§à¦°à¦¾à¦¨à§à¦¤ তà§à¦°à§à¦Ÿà¦¿ ঘটেছে। আপনার ডিভাইস আবার অন-লাইনে à¦à¦²à§‡ আমরা অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨à¦Ÿà¦¿ আবার চালৠকরব।" + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "দূরবরà§à¦¤à§€ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿ অধিবেশন আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥ হয়েছে। সমসà§à¦¯à¦¾ অবà§à¦¯à¦¾à¦¹à¦¤ থাকলে দয়া করে হোসà§à¦Ÿ পà§à¦¨à¦°à¦¾à§Ÿ কনফিগার করার চেষà§à¦Ÿà¦¾ করà§à¦¨à¥¤" + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "দূরবরà§à¦¤à§€ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿ সংযোগ অনà§à¦°à§‹à¦§à¦—à§à¦²à¦¿à¦¤à§‡ পà§à¦°à¦¤à¦¿à¦•à§à¦°à¦¿à§Ÿà¦¾ করছে না৷ à¦à¦Ÿà¦¿ অনলাইন আছে কি না দয়া করে তা যাচাই করà§à¦¨ ও আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_HOST_OVERLOAD": { + "message": "দূরবরà§à¦¤à§€ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° সংযোগ সাময়িকভাবে অবরোধ করা হয়েছে কারণ কোনো বà§à¦¯à¦•à§à¦¤à¦¿ অবৈধ পিন à¦à¦° মাধà§à¦¯à¦®à§‡ à¦à¦¤à§‡ সংযোগ করার চেষà§à¦Ÿà¦¾ করছিল৷ দয়া করে পরে আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ নথিভà§à¦•à§à¦¤ করতে বà§à¦¯à¦°à§à¦¥ হয়েছে৷" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "à¦à¦•à¦Ÿà¦¿ অসঙà§à¦—ত সংসà§à¦•à¦°à¦£ শনাকà§à¦¤ হয়েছে৷ আপনার কাছে উভয় কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦‡ অতিসামà§à¦ªà§à¦°à¦¤à¦¿à¦• সংসà§à¦•à¦°à¦£ আছে কি না দয়া করে তা নিশà§à¦šà¦¿à¦¤ করà§à¦¨ à¦à¦¬à¦‚ আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ কোডটি অবৈধ৷ দয়া করে আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "নীতি সেটিংস à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦•à§‡ Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ হিসাবে শেয়ার করার অনà§à¦®à¦¤à¦¿ দেয় না৷ সহায়তার জনà§à¦¯ আপনার সিসà§à¦Ÿà§‡à¦® পà§à¦°à¦¸à¦¾à¦¶à¦•à§‡à¦° সাথে যোগাযোগ করà§à¦¨à§·" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "দূরবরà§à¦¤à§€ অধিবেশনের মেয়াদ শেষ হয়ে গেছে।" + }, + "ERROR_MISSING_PLUGIN": { + "message": "পà§à¦°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ কিছৠউপাদান অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ আছে৷ আপনি Chrome-à¦à¦° অতিসামà§à¦ªà§à¦°à¦¤à¦¿à¦• সংসà§à¦•à¦°à¦£à¦Ÿà¦¿ ইনসà§à¦Ÿà¦² করেছেন কিনা দয়া করে তা নিশà§à¦šà¦¿à¦¤ করà§à¦¨ à¦à¦¬à¦‚ আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_NACL_DISABLED": { + "message": "কিছৠপà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼ উপাদান অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤ দয়া করে chrome://plugins ঠযান à¦à¦¬à¦‚ নিশà§à¦šà¦¿à¦¤ হোন যে নেটিভ কà§à¦²à¦¾à¦¯à¦¼à§‡à¦¨à§à¦Ÿ সকà§à¦·à¦® করা আছে।" + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "à¦à¦•à¦Ÿà¦¿ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼ উপাদান কাজ করা বনà§à¦§ করেছে। দয়া করে বিকাশকারীদের কাছে à¦à¦‡ সমসà§à¦¯à¦¾à¦° পà§à¦°à¦¤à¦¿à¦¬à§‡à¦¦à¦¨ পাঠান।" + }, + "ERROR_NETWORK_FAILURE": { + "message": "নেটওয়ারà§à¦•à§‡à¦° সাথে সংযà§à¦•à§à¦¤ করা যায়নি৷ দয়া করে আপনার ডিভাইসটি অন-লাইন আছে কিনা পরীকà§à¦·à¦¾ করà§à¦¨à§·" + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "আপনি Chrome-ঠসাইন ইন করা অবসà§à¦¥à¦¾à§Ÿ নেই৷ অনà§à¦—à§à¦°à¦¹ করে সাইন ইন করà§à¦¨ à¦à¦¬à¦‚ আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_NOT_AUTHORIZED": { + "message": "à¦à¦‡ অà§à¦¯à¦¾à¦•à¦¶à¦¨ সঞà§à¦šà¦²à¦¨à¦¾ করার মতো অধিকার আপনার নেই।" + }, + "ERROR_NOT_FOUND": { + "message": "অনà§à¦°à§‹à¦§à§‡à¦° বসà§à¦¤à§à¦Ÿà¦¿à¦° কোনো অসà§à¦¤à¦¿à¦¤à§à¦¬ নেই৷" + }, + "ERROR_P2P_FAILURE": { + "message": "হোসà§à¦Ÿà§‡ পৌà¦à¦›à¦¾à¦¤à§‡ পারেনি৷ আপনার বà§à¦¯à¦¬à¦¹à¦¾à¦° করা নেটওয়ারà§à¦•à§‡à¦° কনফিগারেশনের কারণে সমà§à¦­à¦¬à¦¤ à¦à¦Ÿà¦¿ হয়েছে৷" + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "à¦à¦‡ পরিষেবাটি অসà§à¦¥à¦¾à§Ÿà§€à¦­à¦¾à¦¬à§‡ অনà§à¦ªà¦²à¦¬à§à¦§ আছে৷ দয়া করে পরে আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "ERROR_UNEXPECTED": { + "message": "à¦à¦•à¦Ÿà¦¿ অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ তà§à¦°à§à¦Ÿà¦¿ ঘটেছে৷ দয়া করে বিকাশকারীদের কাছে à¦à¦‡ সমসà§à¦¯à¦¾à¦Ÿà¦¿à¦° বিষয়ে জানান৷" + }, + "EXIT_FULL_SCREEN": { + "message": "পূরà§à¦£ সà§à¦•à§à¦°à§€à¦£ বনà§à¦§ করà§à¦¨" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨ রিসেট করা গেল না। আপনি à¦à¦–নও বাগ রিপোরà§à¦Ÿ পাঠাতে পারবেন।" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨ রিসেট করà§à¦¨à¥¤ আপনি আপনার সমসà§à¦¤ অসংরকà§à¦·à¦¿à¦¤ কাজ হারাবেন।" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "আমি অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨à¦Ÿà¦¿ খà§à¦²à¦¤à§‡ পারছি না।" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨à¦Ÿà¦¿ অতà§à¦¯à¦¨à§à¦¤ ধীরে চলছে।" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "আমি আমার Google ডà§à¦°à¦¾à¦‡à¦­ ফাইল খà§à¦²à¦¤à§‡ পারছি না।" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "আমি Google ডà§à¦°à¦¾à¦‡à¦­à§‡ আমার সংরকà§à¦·à¦¿à¦¤ ফাইলগà§à¦²à¦¿ অনলাইন হিসেবে দেখতে পাচà§à¦›à¦¿ না।" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "আমার কীবোরà§à¦¡ বা মাউসের সমসà§à¦¯à¦¾ হয়েছে।" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "আপনার সমসà§à¦¯à¦¾ সমাধানের জনà§à¦¯ আমাদের সহায়তা করতে, কি সমসà§à¦¯à¦¾ হয়েছে দয়া করে তা আমাদের জানান:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "অনà§à¦¯ কোনো সমসà§à¦¯à¦¾à¥¤" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "পরবরà§à¦¤à§€ তথà§à¦¯à§‡à¦° জনà§à¦¯ আমাদেরকে আপনার সঙà§à¦—ে যোগাযোগ করার অনà§à¦®à¦¤à¦¿ দিতে, আপনি কোনো পà§à¦°à¦¤à¦¿à¦•à§à¦°à¦¿à§Ÿà¦¾ জমা দিলে তার সঙà§à¦—ে আপনার ইমেল ঠিকানা যোগ করা হবে।" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "কোনো সমসà§à¦¯à¦¾à¦° পà§à¦°à¦¤à¦¿à¦¬à§‡à¦¦à¦¨ করà§à¦¨" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨ লগ অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ করে আমাদের সমসà§à¦¯à¦¾ সমাধানে সহায়তা করà§à¦¨ (লগে বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত তথà§à¦¯ থাকতে পারে)।" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨à§‡à¦° লগে আপনার পরিচয় পতà§à¦° (ইমেল ঠিকানা) à¦à¦¬à¦‚ Google ডà§à¦°à¦¾à¦‡à¦­à§‡à¦° ফাইল ও ফোলà§à¦¡à¦¾à¦°à§‡à¦° নাম ও বৈশিষà§à¦Ÿà§à¦¯ সহ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত তথà§à¦¯ থাকতে পারে।" + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "আপনার রিপোরà§à¦Ÿ করা সমসà§à¦¯à¦¾à¦° নিরà§à¦£à§Ÿà§‡à¦° জনà§à¦¯ à¦à¦‡ তথà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হয়, যা কেবল আপনার রিপোরà§à¦Ÿ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ চালান à¦à¦®à¦¨ à¦à¦•à¦œà¦¨à§‡à¦° কাছে উপলবà§à¦§, à¦à¦¬à¦‚ 30 দিনের বেশী রাখা হয় না।" + }, + "FOOTER_CONNECTING": { + "message": "সংযà§à¦•à§à¦¤ হচà§à¦›à§‡..." + }, + "FOOTER_WAITING": { + "message": "সংযোগের জনà§à¦¯ পà§à¦°à¦¤à§€à¦•à§à¦·à¦¾à¦°à¦¤â€¦" + }, + "FOR_PLATFORM_MAC": { + "message": "Mac à¦à¦° জনà§à¦¯ (OS X 10.6 ও à¦à¦° উরà§à¦§à§à¦¬à§‡)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows à¦à¦° জনà§à¦¯ (XP ও à¦à¦° উরà§à¦§à§à¦¬à§‡)" + }, + "FULL_SCREEN": { + "message": "পূরà§à¦£ সà§à¦•à§à¦°à§€à¦£" + }, + "GET_STARTED": { + "message": "শà§à¦°à§ করà§à¦¨" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "সà§à¦¬à§€à¦•à¦¾à¦°" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "পà§à¦°à¦¤à§à¦¯à¦¾à¦–à§à¦¯à¦¾à¦¨" + }, + "HELP": { + "message": "সহায়তা" + }, + "HOME_ACCESS_BUTTON": { + "message": "অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করà§à¦¨" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "à¦à¦•à¦Ÿà¦¿ শেয়ার করা কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° দেখà§à¦¨ ও নিয়নà§à¦¤à§à¦°à¦£ করà§à¦¨à§·" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করে আপনি হয়ত নিরাপদে à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦•à§‡ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করতে পারবেন৷" + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "পিন পরিবরà§à¦¤à¦¨ করà§à¦¨" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿ বরà§à¦¤à¦®à¦¾à¦¨à§‡ à¦à¦•à¦Ÿà¦¿ পৃথক অà§à¦¯à¦¾à¦•à¦¾à¦‰à¦¨à§à¦Ÿà§‡à¦° অধীনে শেয়ার করা হয়েছে৷" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "দেখà§à¦¨/সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ কোনো পিন ছাড়াই à¦à¦• বা à¦à¦•à¦¾à¦§à¦¿à¦• কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿà¦•à§‡ সংযà§à¦•à§à¦¤ হওয়ার মঞà§à¦œà§à¦°à¦¿ দেওয়ার জনà§à¦¯ কনফিগার করা আছে৷" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "দূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ সকà§à¦·à¦® করà§à¦¨" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "আপনি যদি à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸à§‡à¦° জনà§à¦¯ Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করতে চান তাহলে আপনাকে অবশà§à¦¯à¦‡ দূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ সকà§à¦·à¦® করতে হবে৷" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "দূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ অকà§à¦·à¦® করà§à¦¨" + }, + "HOME_SHARE_BUTTON": { + "message": "শেয়ার করà§à¦¨" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "অনà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ যাতে à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦•à§‡ দেখতে ও নিয়নà§à¦¤à§à¦°à¦£ করতে পারে তার জনà§à¦¯ à¦à¦Ÿà¦¿à¦•à§‡ ভাগ করà§à¦¨à§·" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦Ÿà¦¿ à¦à¦–নও আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° জনà§à¦¯ উপলবà§à¦§ নয়)" + }, + "HOST_CATEGORY": { + "message": "হোসà§à¦Ÿ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "à¦à¦‡ কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿà§‡à¦° জনà§à¦¯ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ সà§à¦¬à§€à¦•à§ƒà¦¤ নয়: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ সংযà§à¦•à§à¦¤: %1৷" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ বিচà§à¦›à¦¿à¦¨à§à¦¨ হয়েছে: %1৷" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "à¦à¦‡ কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿà§‡à¦° জনà§à¦¯ চà§à¦¯à¦¾à¦¨à§‡à¦² IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "কোনো অনà§à¦¯ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ দূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ সকà§à¦·à¦® করতে সেখানে Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª ইনসà§à¦Ÿà¦² করà§à¦¨ à¦à¦¬à¦‚ “$1$†ঠকà§à¦²à¦¿à¦• করà§à¦¨à§·", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "আপনার কাছ নথিভà§à¦•à§à¦¤ করা কোনো কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° নেই৷ à¦à¦•à¦Ÿà¦¿ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ দূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ সকà§à¦·à¦® করতে সেখানে Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª ইনসà§à¦Ÿà¦² করà§à¦¨ à¦à¦¬à¦‚ “$1$†ঠকà§à¦²à¦¿à¦• করà§à¦¨à§·", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "আপনি আগে$1$$2$ হিসেবে সাইন ইন করেছিলেন। সেই অà§à¦¯à¦¾à¦•à¦¾à¦‰à¦¨à§à¦Ÿà§‡ আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করতে, সেই অà§à¦¯à¦¾à¦•à¦¾à¦‰à¦¨à§à¦Ÿà§‡à¦° মাধà§à¦¯à¦®à§‡$3$Chromium-ঠসাইন ইন করà§à¦¨$4$ à¦à¦¬à¦‚ Chromoting পà§à¦¨à¦°à¦¾à§Ÿ ইনসà§à¦Ÿà¦² করà§à¦¨à¥¤", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "সফà§à¦Ÿà¦“য়à§à¦¯à¦¾à¦° আপডেটগà§à¦²à¦¿ সাধারণত সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿà¦­à¦¾à¦¬à§‡ হয়ে থাকে, কিনà§à¦¤à§ কিছৠবিরল কà§à¦·à§‡à¦¤à§à¦°à§‡ বà§à¦¯à¦°à§à¦¥ হতে পারে৷ সফà§à¦Ÿà¦“য়à§à¦¯à¦¾à¦°à¦Ÿà¦¿ আপডেট হতে কয়েক মিনিটের বেশি লাগার কথা নয় à¦à¦¬à¦‚ আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° সাথে দূরবরà§à¦¤à§€ সংযোগে থাকাকালীনও করা যেতে পারে৷" + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ঠChrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª পà§à¦°à¦¾à¦¨à§‹ à¦à¦¬à¦‚ আপডেটের পà§à¦°à§Ÿà§‹à¦œà¦¨à§·", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "আমাদের বà§à¦¯à¦¬à¦¹à¦¾à¦° পরিসংখà§à¦¯à¦¾à¦¨ à¦à¦¬à¦‚ কà§à¦°à§à¦¯à¦¾à¦¶ পà§à¦°à¦¤à¦¿à¦¬à§‡à¦¦à¦¨à¦—à§à¦²à¦¿ সংগà§à¦°à¦¹à§‡à¦° অনà§à¦®à¦¤à¦¿ দিয়ে, Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ªà§‡à¦° উনà§à¦¨à¦¤à¦¿à¦¤à§‡ আমাদের সাহাযà§à¦¯ করà§à¦¨à§·" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ রকà§à¦·à¦¾ করতে, দয়া করে $1$অনà§à¦¤à¦¤ ছয় সংখà§à¦¯à¦¾à¦°$2$ à¦à¦•à¦Ÿà¦¿ পিন বেছে নিন৷ অনà§à¦¯ কোনো অবসà§à¦¥à¦¾à¦¨ থেকে সংযà§à¦•à§à¦¤ হতে à¦à¦‡ পিন à¦à¦° পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨ হবে৷", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "দূরবরà§à¦¤à§€ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ পরিষেবা শà§à¦°à§ করতে বà§à¦¯à¦°à§à¦¥ হয়েছে৷" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome, Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ ইনসà§à¦Ÿà¦²à¦¾à¦° ডাউনলোড করছে৷ à¦à¦•à¦¬à¦¾à¦° ডাউনলোড সমà§à¦ªà¦¨à§à¦¨ হয়ে গেলে, অবà§à¦¯à¦¾à¦¹à¦¤ রাখার আগে দয়া করে ইনসà§à¦Ÿà¦²à¦¾à¦° চালনা করà§à¦¨à§·" + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "অবà§à¦¯à¦¾à¦¹à¦¤ রাখার আগে ইনসà§à¦Ÿà¦²à¦¾à¦° চালনা করà§à¦¨à§·" + }, + "HOST_SETUP_STARTED": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ দূরবরà§à¦¤à§€ সংযোগগà§à¦²à¦¿ সকà§à¦·à¦® করা হয়েছে৷" + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "দয়া করে আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° বিদà§à¦¯à§à¦¤ পরিচালনার সেটিং পরীকà§à¦·à¦¾ করà§à¦¨ à¦à¦¬à¦‚ নিষà§à¦•à§à¦°à¦¿à§Ÿ থাকাকালীন à¦à¦Ÿà¦¿ যাতে সà§à¦²à§€à¦ªà§‡ কনফিগার না থাকে তা নিশà§à¦šà¦¿à¦¤ করà§à¦¨à§·" + }, + "HOST_SETUP_STARTING": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ দূরবরà§à¦¤à§€ সংযোগ সকà§à¦·à¦® করা হচà§à¦›à§‡..." + }, + "HOST_SETUP_STOPPED": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ দূরবরà§à¦¤à§€ সংযোগ অকà§à¦·à¦® করা হয়েছে৷" + }, + "HOST_SETUP_STOPPING": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ দূরবরà§à¦¤à§€ সংযোগ অকà§à¦·à¦® করা হচà§à¦›à§‡..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡ দূরবরà§à¦¤à§€ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ অকà§à¦·à¦® করতে বà§à¦¯à¦°à§à¦¥ হয়েছে৷ দয়া করে পরে আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ ইনসà§à¦Ÿà¦²à¦¾à¦° ডাউনলোড করার মাধà§à¦¯à¦®à§‡ আপনি Google $1$পরিষেবার শরà§à¦¤à¦¾à¦¬à¦²à¦¿$4 সà§à¦¬à§€à¦•à¦¾à¦° করছেন।", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "আপনার পিন আপডেট হয়েছে৷" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "পিন আপডেট করতে বà§à¦¯à¦°à§à¦¥ হয়েছে৷ দয়া করে পরে আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à§·" + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° পিন আপডেট হচà§à¦›à§‡..." + }, + "HOST_STARTED": { + "message": "à¦à¦‡ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° জনà§à¦¯ হোসà§à¦Ÿ শà§à¦°à§ হয়েছে: %1৷" + }, + "HOST_STOPPED": { + "message": "হোসà§à¦Ÿ থেমে গেছে।" + }, + "IDLE_CONTINUE": { + "message": "অবিরত" + }, + "IDLE_DISCONNECT": { + "message": "à¦à¦–নই সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করà§à¦¨" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "আপনার $1$-à¦à¦° সেশন কিছà§à¦•à§à¦·à¦£à§‡à¦° জনà§à¦¯ নিষà§à¦•à§à¦°à¦¿à§Ÿ করা হয়েছে à¦à¦¬à¦‚ কিছà§à¦•à§à¦·à¦£à§‡à¦° জনà§à¦¯ সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হবে।", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿à¦¤à§‡" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ ইনসà§à¦Ÿà¦²à¦¾à¦° ডাউনলোড করà§à¦¨" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "আপনার ডেসà§à¦•à¦Ÿà¦ª শেয়ার করা শà§à¦°à§ করতে, আপনাকে যে বà§à¦¯à¦•à§à¦¤à¦¿ সহায়তা করবে তাকে নীচের অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ কোডটি দিন৷" + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "তাদের দà§à¦¬à¦¾à¦°à¦¾ কোডটি লেখা হয়ে যাবার পর আপনার শেয়ার করার অধিবেশনটি শà§à¦°à§ হবে৷" + }, + "INVALID_PIN": { + "message": "দয়া করে ছয়টি অথবা তার বেশি সংখà§à¦¯à¦¾à¦° à¦à¦•à¦Ÿà¦¿ পিন লিখà§à¦¨à§·" + }, + "IT2ME_FIRST_RUN": { + "message": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€-থেকে-বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦¤à§‡ সà§à¦•à§à¦°à§€à¦¨ শেয়ার করা, দূরবরà§à¦¤à§€ পà§à¦°à¦¯à§à¦•à§à¦¤à¦¿à¦—ত সহায়তার জনà§à¦¯ উপযà§à¦•à§à¦¤à§·" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "কীবোরà§à¦¡ লেআউট" + }, + "LABEL_CONNECTED": { + "message": "সংযà§à¦•à§à¦¤:" + }, + "LAST_ONLINE": { + "message": "$1$ (শেষ অনলাইনে ছিলেন $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "জানà§à¦¨ কিভাবে৷" + }, + "LEARN_MORE": { + "message": "আরো জানà§à¦¨à§·" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ পছনà§à¦¦à¦—à§à¦²à¦¿" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome দূরবরà§à¦¤à§€ \nডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿ আনইনসà§à¦Ÿà¦²à¦¾à¦°" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win কী (মà§à¦¯à¦¾à¦• ⌘) à¦à¦° জনà§à¦¯ ডান Ctrl বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" + }, + "MAXIMIZE_WINDOW": { + "message": "উইনà§à¦¡à§‹ বৃহদায়ন করà§à¦¨" + }, + "ME2ME_FIRST_RUN": { + "message": "যে কোনো জায়গা থেকে আপনার নিজের কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করà§à¦¨à§·" + }, + "MESSAGE_GENERATING": { + "message": "অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ কোড তৈরি হচà§à¦›à§‡..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "আপনার Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª অধিবেশন শেষ হয়েছে৷" + }, + "MESSAGE_SHARED": { + "message": "আপনার ডেসà§à¦•à¦Ÿà¦ªà¦Ÿà¦¿ বরà§à¦¤à¦®à¦¾à¦¨à§‡ $1$ à¦à¦° সাথে শেয়ার করা হয়েছে৷", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "উইনà§à¦¡à§‹ সংকà§à¦·à¦¿à¦ªà§à¦¤à¦¾à§Ÿà¦¨ করà§à¦¨" + }, + "MODE_AUTHORIZE": { + "message": "অনà§à¦®à¦¤à¦¿ দিন" + }, + "MODE_IT2ME": { + "message": "রিমোট সহায়তা" + }, + "MODE_ME2ME": { + "message": "আমার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦—à§à¦²à¦¿" + }, + "NEW_WINDOW": { + "message": "নতà§à¦¨ উইনà§à¦¡à§‹..." + }, + "NO_PAIRED_CLIENTS": { + "message": "যà§à¦•à§à¦¤ করা সব কà§à¦²à¦¾à¦¯à¦¼à§‡à¦¨à§à¦Ÿ মà§à¦›à§‡ দেওয়া হয়েছে৷" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡ ডেসà§à¦•à¦Ÿà¦ª ইনà§à¦Ÿà¦¿à¦—à§à¦°à§‡à¦¶à¦¨ সমরà§à¦¥à¦¿à¦¤ নয়। আপনি তাও à¦à¦‡ অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦° করতে পারেন, কিনà§à¦¤à§ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ অভিজà§à¦žà¦¤à¦¾à¦° মান নেমে যাবে।" + }, + "OFFLINE": { + "message": "$1$ (অফলাইন)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "হোসà§à¦Ÿ আরমà§à¦­ করা বà§à¦¯à¦°à§à¦¥ হয়েছে।" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "অবৈধ হোসà§à¦Ÿ কনফিগারেশন।" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "অবৈধ হোসà§à¦Ÿ মালিক ডোমেইন।" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "অবৈধ হোসà§à¦Ÿ আইডি।" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "হোসà§à¦Ÿ অবৈধ OAuth শংসাপতà§à¦°à§‡à¦° সঙà§à¦—ে কনফিগার করা আছে।" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ à¦à¦•à¦Ÿà¦¿ অধিবেশনে চলমান à¦à¦•à¦Ÿà¦¿ হোসà§à¦Ÿà§‡ সà§à¦¯à§à¦‡à¦š করার মাধà§à¦¯à¦®à§‡ কারà§à¦Ÿà§‡à¦¨ মোডকে সমরà§à¦¥à¦¨ করার জনà§à¦¯ কনসোল লজিক সà§à¦•à§à¦°à¦¿à¦¨à§‡ চলমান হোসà§à¦Ÿà¦•à§‡ শাটডাউন করা হয়েছে।" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "à¦à¦•à¦Ÿà¦¿ নীতি পরিবরà§à¦¤à¦¨ করার কারণে অà§à¦¯à¦¾à¦•à¦¾à¦‰à¦¨à§à¦Ÿà§‡ নেওয়ার জনà§à¦¯ হোসà§à¦Ÿ পà§à¦¨à¦°à¦¾à¦¯à¦¼ শà§à¦°à§ করা হচà§à¦›à§‡à§·" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "নীতিটি পড়ার জনà§à¦¯ হোসà§à¦Ÿ বà§à¦¯à¦°à§à¦¥ হয়েছে৷" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "হোসà§à¦Ÿ বনà§à¦§ হয়ে গেছে৷" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "অসà§à¦¬à§€à¦•à§ƒà¦¤ হোসà§à¦Ÿ তà§à¦°à§à¦Ÿà¦¿: $1$।", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "অবৈধ হোসà§à¦Ÿ মালিক।" + }, + "OK": { + "message": "ওকে" + }, + "OPTIONS_MENU": { + "message": "বিকলà§à¦ªà¦¸à¦®à§‚হ" + }, + "OUTGOING_CONNECTIONS": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° থেকে" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "নিমà§à¦¨à¦²à¦¿à¦–িত কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿà¦°à¦¾ à¦à¦‡ কমà§à¦ªà¦¿à¦Ÿà¦¾à¦°à§‡à¦° সঙà§à¦—ে যà§à¦•à§à¦¤ হয়েছে à¦à¦¬à¦‚ কোনো পিন ছাড়াই সংযà§à¦•à§à¦¤ হতে পারে৷ আপনি যেকোনো সময়ে à¦à¦•à¦Ÿà¦¿à¦° জনà§à¦¯ বা সব কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿà§‡à¦° জনà§à¦¯ অনà§à¦®à¦¤à¦¿ পà§à¦°à¦¤à§à¦¯à¦¾à¦¹à¦¾à¦° করে নিতে পারেন৷" + }, + "PAIRED_CLIENT_DATE": { + "message": "যà§à¦•à§à¦¤ করার তারিখ" + }, + "PAIRED_CLIENT_NAME": { + "message": "কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ" + }, + "PIN": { + "message": "পিন" + }, + "PINS_NOT_EQUAL": { + "message": "উভয় বকà§à¦¸à§‡ দয়া করে à¦à¦•à¦‡ পিন লিখà§à¦¨à§·" + }, + "PIN_MESSAGE": { + "message": "$1$ à¦à¦° জনà§à¦¯ দয়া করে আপনার পিন লিখà§à¦¨à§·", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "দূরবরà§à¦¤à§€ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° জনà§à¦¯ দয়া করে আপনার পিন লিখà§à¦¨à§·" + }, + "PRODUCT_DESCRIPTION": { + "message": "ইনà§à¦Ÿà¦¾à¦°à¦¨à§‡à¦Ÿà§‡ নিরাপদভাবে অনà§à¦¯à¦¦à§‡à¦° কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦—à§à¦²à¦¿ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করà§à¦¨ অথবা অনà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦•à§‡ আপনার কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করতে দিন৷" + }, + "PRODUCT_NAME": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨ সà§à¦Ÿà§à¦°à§€à¦®à¦¿à¦‚" + }, + "RECONNECT": { + "message": "পà§à¦¨à¦°à¦¾à¦¯ সংযোগ করà§à¦¨" + }, + "REMEMBER_PIN": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦° থেকে à¦à¦‡ হোসà§à¦Ÿà§‡ সংযà§à¦•à§à¦¤ হওয়ার সময় পà§à¦¨à¦°à¦¾à§Ÿ পিন à¦à¦° জনà§à¦¯ জিজà§à¦žà¦¾à¦¸à¦¾ করবেন না৷" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "কোর লাইবà§à¦°à§‡à¦°à¦¿" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ডেসà§à¦•à¦Ÿà¦ª ইনà§à¦Ÿà¦¿à¦—à§à¦°à§‡à¦¶à¦¨ পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª হোসà§à¦Ÿà§‡à¦° জনà§à¦¯ কমà§à¦¯à¦¾à¦¨à§à¦¡ ইসà§à¦¯à§ করে যে অà§à¦¯à¦¾à¦ªà§à¦²à¦¿à¦•à§‡à¦¶à¦¾à¦¨à¥¤" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "হোসà§à¦Ÿ পà§à¦°à¦•à§à¦°à¦¿à§Ÿà¦¾" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "দূরবরà§à¦¤à§€ হোসà§à¦Ÿ পরিচালনার জনà§à¦¯ নেটিভ বারà§à¦¤à¦¾à¦ªà§à¦°à§‡à¦°à¦£à§‡à¦° হোসà§à¦Ÿ" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "দূরবরà§à¦¤à§€ সহায়তার জনà§à¦¯ নেটিভ বারà§à¦¤à¦¾à¦ªà§à¦°à§‡à¦°à¦£à§‡à¦° হোসà§à¦Ÿ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "নিরাপতà§à¦¤à¦¾ কী দূরবরà§à¦¤à§€à¦•à¦°à¦£ পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾" + }, + "RESIZE_TO_CLIENT": { + "message": "মানানসই করতে ডেসà§à¦•à¦Ÿà¦ªà§‡à¦° আকার পরিবরà§à¦¤à¦¨ করà§à¦¨" + }, + "RESTART_BUTTON": { + "message": "à¦à¦–ন আবার চালৠকরà§à¦¨" + }, + "RESTORE_WINDOW": { + "message": "উইনà§à¦¡à§‹ পà§à¦¨à¦°à§à¦¦à§à¦§à¦¾à¦° করà§à¦¨" + }, + "RETRY": { + "message": "পà§à¦¨à¦°à¦¾à§Ÿ চেষà§à¦Ÿà¦¾ করà§à¦¨" + }, + "SCREEN_OPTIONS": { + "message": "সà§à¦•à§à¦°à§€à¦¨ বিকলà§à¦ªà¦—à§à¦²à¦¿" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del পাঠান" + }, + "SEND_FEEDBACK": { + "message": "কোনো সমসà§à¦¯à¦¾à¦° পà§à¦°à¦¤à¦¿à¦¬à§‡à¦¦à¦¨ করà§à¦¨..." + }, + "SEND_KEYS": { + "message": "কিগà§à¦²à¦¿ পাঠান" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn পাঠান" + }, + "SERVICE_DESCRIPTION": { + "message": "à¦à¦‡ পরিষেবাটি Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª থেকে আগত সংযোগà§à¦²à¦¿ সকà§à¦·à¦® করে৷" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "à¦à¦‡ সেটিং আপনার ডোমেইন নীতি দà§à¦¬à¦¾à¦°à¦¾ পরিচালিত।" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "শেয়ার করà§à¦¨" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "বাতিল" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "আপনি কি অনà§à¦¯ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦•à§‡ দেখার à¦à¦¬à¦‚ নিয়নà§à¦¤à§à¦°à¦£ করার জনà§à¦¯ à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à¦Ÿà¦¿ শেয়ার করতে চান?" + }, + "SHOW_STATS": { + "message": "পরিসংখà§à¦¯à¦¾à¦¨ দেখান" + }, + "SHOW_STATS_WITH_RTT": { + "message": "পরিসংখà§à¦¯à¦¾à¦¨ দেখান (সংযোগ: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "মানানসই করতে সঙà§à¦•à§à¦šà¦¿à¦¤ করà§à¦¨" + }, + "SIGN_IN_BUTTON": { + "message": "সাইন ইন" + }, + "SIGN_OUT_BUTTON": { + "message": "সাইন আউট" + }, + "STOP_SHARING_BUTTON": { + "message": "শেয়ার করা বনà§à¦§ করà§à¦¨" + }, + "SURVEY_INVITATION": { + "message": "Chrome à¦à¦° দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ªà§‡à¦° উনà§à¦¨à¦¤à¦¿à¦¤à§‡ সাহাযà§à¦¯ করতে চান? $1$সমীকà§à¦·à¦¾à¦Ÿà¦¿à¦¤à§‡ অংশ নিন৷$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "সময়" + }, + "TOGGLE_STATS": { + "message": "পরিসংখà§à¦¯à¦¾à¦¨ দেখান" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ঠসংযোগ করà§à¦¨", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡ রিমোট সংযোগ অকà§à¦·à¦® করà§à¦¨" + }, + "TOOLTIP_REFRESH": { + "message": "হোসà§à¦Ÿà¦—à§à¦²à¦¿à¦° তালিকা রিফà§à¦°à§‡à¦¶ করà§à¦¨" + }, + "TOOLTIP_RENAME": { + "message": "কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° নাম সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (পà§à¦°à¦¾à¦¨à§‹)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "অà§à¦¯à¦¾à¦•à¦¾à¦‰à¦¨à§à¦Ÿ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ªà§‡à¦° মাধà§à¦¯à¦®à§‡ অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸à§‡à¦° মঞà§à¦œà§à¦°à¦¿ দিতে দয়া করে নীচে আপনার অà§à¦¯à¦¾à¦•à¦¾à¦‰à¦¨à§à¦Ÿ à¦à¦¬à¦‚ পিন নিশà§à¦šà¦¿à¦¤ করà§à¦¨à§·" + }, + "WARNING_NAT_DISABLED": { + "message": "দà§à¦°à¦·à§à¦Ÿà¦¬à§à¦¯: নীতি সেটিং কেবলমাতà§à¦° আপনার নেটওয়ারà§à¦•à§‡ থাকা কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à¦°à§‡à¦° মধà§à¦¯à§‡ সংযোগের অনà§à¦®à¦¤à¦¿ দেয়৷" + }, + "WARNING_NOT_WINDOWED": { + "message": "দà§à¦°à¦·à§à¦Ÿà¦¬à§à¦¯: সমসà§à¦¤ কীবোরà§à¦¡ শরà§à¦Ÿà¦•à¦¾à¦Ÿ উপলবà§à¦§ থাকাকে নিশà§à¦šà¦¿à¦¤ করতে, আপনি Chrome দূরবরà§à¦¤à§€ ডেসà§à¦•à¦Ÿà¦ª ‘উইনà§à¦¡à§‹ হিসাবে খোলার জনà§à¦¯â€™ কনফিগার করতে পারেন৷" + }, + "WHY_IS_THIS_SAFE": { + "message": "à¦à¦Ÿà¦¿ কেন নিরাপদ?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "{0}Windows{/0}" + }, + "WORKING": { + "message": "কাজ করছে..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ca/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ca/messages.json new file mode 100644 index 000000000000..67380bca7681 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ca/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Accepta i instal·la" + }, + "ACCESS_CODE": { + "message": "Codi d'accés" + }, + "ACCESS_CODE_TIMER": { + "message": "Aquest codi d'accés caducarà d'aquí a $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Comentaris" + }, + "ALL_CONNECTIONS": { + "message": "Totes les connexions" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Torneu a escriure el PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancel·la" + }, + "CLEAR_HISTORY": { + "message": "Esborra l'historial" + }, + "CLOSE": { + "message": "Tanca" + }, + "CLOSE_PROMPT": { + "message": "Si sortiu d'aquesta pàgina, la sessió de l'escriptori remot de Chrome finalitzarà." + }, + "CLOSE_WINDOW": { + "message": "Tanca la finestra" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Esteu segur que voleu desactivar les connexions remotes a $1$? Si canvieu de parer, haureu de visitar aquest ordinador per tornar-les a activar.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "S'ha produït un error en la connexió" + }, + "CONNECTION_FROM_HEADER": { + "message": "De" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historial de connexions" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Suficient" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Bona" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Deficient" + }, + "CONNECTION_TO_HEADER": { + "message": "Per a" + }, + "CONNECT_ANYWAY": { + "message": "Connecta't de totes maneres" + }, + "CONNECT_BUTTON": { + "message": "Connecta" + }, + "CONTINUE_BUTTON": { + "message": "Continua" + }, + "CONTINUE_PROMPT": { + "message": "Esteu compartint aquest ordinador amb un altre usuari. Voleu continuar compartint-lo?" + }, + "CONTROLLER_NAME": { + "message": "Controlador de l'amfitrió de l'escriptori remot de Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Tots els drets reservats." + }, + "CREDITS": { + "message": "Crèdits" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Suprimeix-ho tot" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Suprimeix" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Per continuar heu de concedir permisos d'accés ampliat a l'ordinador. Només ho heu de fer una vegada." + }, + "DESCRIPTION_CONNECT": { + "message": "Demaneu a l'usuari de l'ordinador al qual voleu accedir que faci clic a $1$ i que us faciliti el codi d'accés.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "L'escriptori remot de Chrome us permet compartir el vostre ordinador de manera segura al web. Els dos usuaris han d'executar l'aplicació d'escriptori remot de Chrome, que podeu trobar a la pàgina $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "L'amfitrió remot necessita que us autentiqueu en un lloc web de tercers. Per continuar, cal que concediu permisos addicionals a l'escriptori remot de Chrome per accedir a aquesta adreça:" + }, + "DISABLE_HOST": { + "message": "Desactiva" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Desconnecta" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Servei d'escriptori remot de Chrome" + }, + "DURATION_HEADER": { + "message": "Durada" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "No teniu permís per executar aquesta aplicació." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "L'autenticació ha fallat. Torneu a iniciar la sessió a Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Falten alguns components necessaris. Assegureu-vos que hàgiu instal·lat la versió més recent del programari i torneu-ho a provar." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "S'ha produït un error a la xarxa. Reiniciarem l'aplicació quan el dispositiu torni a estar en línia." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "L'ordinador remot no ha pogut inicialitzar la sessió. Si el problema continua, torneu a configurar l'amfitrió." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "L'ordinador remot no respon a les sol·licituds de connexió. Verifiqueu que estigui en línia i torneu-ho a provar." + }, + "ERROR_HOST_OVERLOAD": { + "message": "S'han bloquejat temporalment les connexions a l'ordinador remot perquè algú ha provat de connectar-hi amb un PIN no vàlid. Torneu-ho a provar més tard." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "No s'ha pogut registrar aquest ordinador." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "S'ha detectat una versió del protocol incompatible. Assegureu-vos que tingueu instal·lada la versió més recent del programari als dos ordinadors i torneu-ho a provar." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "El codi d'accés no és vàlid. Torneu-ho a provar." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "La configuració de la política no permet compartir aquest ordinador com a amfitrió de l'escriptori remot de Chrome. Contacteu amb l'administrador del sistema per obtenir assistència." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "La sessió remota ha caducat." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Falten alguns components necessaris. Assegureu-vos que executeu la versió més recent de Chrome i torneu-ho a provar." + }, + "ERROR_NACL_DISABLED": { + "message": "Falten alguns components necessaris. Aneu a chrome://plugins i assegureu-vos que Native Client estigui activat." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Un component obligatori ha deixat de funcionar. Informeu-ne els desenvolupadors." + }, + "ERROR_NETWORK_FAILURE": { + "message": "No s'ha pogut connectar a la xarxa. Comproveu que el dispositiu estigui connectat a Internet." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "No heu iniciat la sessió a Chrome. Inicieu-hi la sessió i torneu-ho a provar." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "No teniu permís per dur a terme aquesta acció." + }, + "ERROR_NOT_FOUND": { + "message": "L'objecte sol·licitat no existeix." + }, + "ERROR_P2P_FAILURE": { + "message": "No es pot connectar amb l'amfitrió. Probablement, això passa a causa de la configuració de la xarxa que esteu fent servir." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "El servei està temporalment no disponible. Torneu-ho a provar més tard." + }, + "ERROR_UNEXPECTED": { + "message": "S'ha produït un error inesperat. Informeu d'aquest problema als desenvolupadors." + }, + "EXIT_FULL_SCREEN": { + "message": "Surt del mode de pantalla completa" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "No es pot restablir l'aplicació. Podeu enviar un informe d'errors." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Restabliu l'aplicació. Els treballs que no s'hagin desat es perdran." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "No puc obrir l'aplicació." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "L'aplicació és massa lenta." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "No puc obrir els meus fitxers de Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "No puc veure els meus fitxers desats en línia a Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Tinc problemes amb el teclat o amb el ratolí." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Per ajudar-nos a resoldre el problema, ens heu de dir què passa:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Altres motius." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Seleccioneu..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "La vostra adreça electrònica s'inclourà en tots els suggeriments que envieu perquè us puguem escriure i proporcionar-vos més informació." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Informeu d'un problema" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Inclou registres de l'aplicació per ajudar-nos a resoldre el vostre problema (els registres poden incloure informació privada)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Els registres de l'aplicació poden incloure informació privada, com ara la vostra identitat (adreça electrònica) i els noms i les propietats dels fitxers i de les carpetes de Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Aquesta informació només s'utilitza per diagnosticar el problema de què esteu informant. Només hi poden accedir les persones que analitzen l'informe i es conserva com a màxim durant 30 dies." + }, + "FOOTER_CONNECTING": { + "message": "S'està connectant..." + }, + "FOOTER_WAITING": { + "message": "s'està esperant que hi hagi connexió..." + }, + "FOR_PLATFORM_MAC": { + "message": "Per a Mac (OS X 10.6 i versions posteriors)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Per a Windows (XP i versions posteriors)" + }, + "FULL_SCREEN": { + "message": "Pantalla completa" + }, + "GET_STARTED": { + "message": "Introducció" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accepta" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Rebutja" + }, + "HELP": { + "message": "Ajuda" + }, + "HOME_ACCESS_BUTTON": { + "message": "Accedeix" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Vegeu i controleu un ordinador compartit." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Podeu accedir de manera segura a aquest ordinador mitjançant l'escriptori remot de Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Canvia el PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Aquest ordinador es comparteix actualment mitjançant un altre compte." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Mostra/edita" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "La configuració d'aquest ordinador permet que un o més clients es connectin sense introduir cap PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Activa les connexions remotes" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Heu d'activar les connexions remotes si voleu utilitzar l'escriptori remot de Chrome per accedir a aquest ordinador." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Desactiva les connexions remotes" + }, + "HOME_SHARE_BUTTON": { + "message": "Comparteix" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Compartiu aquest ordinador perquè un altre usuari el vegi i el controli." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(aquesta funció encara no està disponible al vostre ordinador)" + }, + "HOST_CATEGORY": { + "message": "Amfitrió" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "S'ha rebutjat l'accés del client: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client connectat: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client desconnectat: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP del canal del client: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Per activar les connexions remotes a un altre ordinador, instal·leu-hi l'escriptori remot de Chrome i feu clic a $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "No teniu cap ordinador registrat. Per activar les connexions remotes a un ordinador, instal·leu-hi l'escriptori remot de Chrome i feu clic a $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Heu iniciat la sessió anteriorment com a $1$ ($2$). Per accedir als ordinadors d'aquest compte, $3$inicieu la sessió a Google Chrome$4$ amb el compte en qüestió i torneu a instal·lar l'escriptori remot de Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Les actualitzacions de programari se solen fer automàticament, però poden fallar en casos excepcionals. L'actualització del programari hauria de trigar només uns minuts i es pot fer mentre esteu connectat a l'ordinador de forma remota." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "L'escriptori remot de Chrome a $1$ és obsolet i cal actualitzar-lo.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Ajudeu-nos a millorar l'escriptori remot de Chrome: permeteu-nos recollir estadístiques d'ús i informes d'error." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Per protegir l'accés a aquest ordinador, trieu un PIN de $1$sis dígits com a mínim$2$. Necessitareu aquest PIN per connectar-vos a aquest ordinador des d'una altra ubicació.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "No s'ha pogut iniciar el servei d'accés remot." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome està baixant l'instal·lador de l'amfitrió d'Escriptori remot de Chrome. Quan s'hagi completat la baixada, executeu l'instal·lador abans de continuar." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Executeu l'instal·lador abans de continuar." + }, + "HOST_SETUP_STARTED": { + "message": "S'han activat les connexions remotes en aquest ordinador." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Comproveu la configuració de gestió d'energia de l'ordinador i assegureu-vos que no s'hagi configurat per estar en mode de baix consum quan estigui inactiu." + }, + "HOST_SETUP_STARTING": { + "message": "S'estan activant les connexions remotes en aquest ordinador..." + }, + "HOST_SETUP_STOPPED": { + "message": "S'han desactivat les connexions remotes en aquest ordinador." + }, + "HOST_SETUP_STOPPING": { + "message": "S'estan desactivant les connexions remotes en aquest ordinador..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "No s'ha pogut desactivar l'accés remot a aquest ordinador. Torneu-ho a provar més tard." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "En baixar l'instal·lador de l'amfitrió d'Escriptori remot de Chrome accepteu les $1$Condicions del servei$4 de Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "S'ha actualitzat el vostre PIN." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "No s'ha pogut actualitzar el PIN. Torneu-ho a provar més tard." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "S'està actualitzant el PIN d'aquest ordinador..." + }, + "HOST_STARTED": { + "message": "L'amfitrió ha començat per a l'usuari: %1." + }, + "HOST_STOPPED": { + "message": "S'ha aturat l'amfitrió." + }, + "IDLE_CONTINUE": { + "message": "Continua" + }, + "IDLE_DISCONNECT": { + "message": "Desconnecta ara" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "La vostra sessió de $1$ ha estat inactiva durant una estona i es desconnectarà aviat.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "A aquest ordinador" + }, + "INSTALLER_DOWNLOAD": { + "message": "Baixeu l'instal·lador de l'amfitrió d'Escriptori remot de Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Per començar a compartir l'escriptori, proporcioneu el codi d'accés següent a la persona que us oferirà assistència." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Quan hagin introduït el codi, la sessió compartida començarà." + }, + "INVALID_PIN": { + "message": "Introduïu un PIN que tingui sis dígits o més." + }, + "IT2ME_FIRST_RUN": { + "message": "Ús compartit de pantalla d'usuari a usuari, perfecte per a l'assistència tècnica remota." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Dissenys de teclat" + }, + "LABEL_CONNECTED": { + "message": "Connectat:" + }, + "LAST_ONLINE": { + "message": "$1$ (última connexió: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Més informació" + }, + "LEARN_MORE": { + "message": "Més informació" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferències de l'amfitrió de l'escriptori remot de Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Amfitrió de l'escriptori\nremot de Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Programa de desinstal·lació de l'amfitrió de l'escriptori remot de Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Utilitza la tecla de Ctrl dreta com a tecla de Windows (⌘ a Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximitza la finestra" + }, + "ME2ME_FIRST_RUN": { + "message": "Accediu al vostre ordinador des de qualsevol lloc." + }, + "MESSAGE_GENERATING": { + "message": "S'està generant el codi d'accés..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "La sessió de l'escriptori remot de Chrome ha finalitzat." + }, + "MESSAGE_SHARED": { + "message": "Esteu compartint l'escriptori amb $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimitza la finestra" + }, + "MODE_AUTHORIZE": { + "message": "Autoritza" + }, + "MODE_IT2ME": { + "message": "Assistència remota" + }, + "MODE_ME2ME": { + "message": "Els meus ordinadors" + }, + "NEW_WINDOW": { + "message": "Finestra nova..." + }, + "NO_PAIRED_CLIENTS": { + "message": "S'han suprimit tots els clients sincronitzats." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Aquesta plataforma no admet la integració de l'escriptori. Podeu continuar utilitzant l'aplicació, però l'experiència de l'usuari no serà tan bona." + }, + "OFFLINE": { + "message": "$1$ (fora de línia)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "S'ha produït un error en iniciar l'amfitrió." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "La configuració de l'amfitrió no és vàlida." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "El domini del propietari de l'amfitrió no és vàlid." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "L'identificador de l'amfitrió no és vàlid." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "L'amfitrió està configurat amb unes credencials d'OAuth no vàlides." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "L'amfitrió que s'executa a la pantalla d'inici de la consola s'ha aturat per admetre el mode Curtain, i fa servir un amfitrió que s'executa en una sessió específica de l'usuari." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "L'amfitrió s'està reiniciant per aplicar un canvi en la política." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "L'amfitrió no ha pogut llegir la política." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "L'amfitrió s'ha tancat." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Error d'amfitrió no reconegut: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "El propietari de l'amfitrió no és vàlid." + }, + "OK": { + "message": "D'acord" + }, + "OPTIONS_MENU": { + "message": "Opcions" + }, + "OUTGOING_CONNECTIONS": { + "message": "Des d'aquest ordinador" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Els clients següents s'han sincronitzat amb aquest ordinador i s'hi poden connectar sense indicar cap PIN. Podeu revocar aquest permís en qualsevol moment, ja sigui individualment o per a tots els clients." + }, + "PAIRED_CLIENT_DATE": { + "message": "Data de sincronització" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Introduïu el mateix PIN als dos quadres." + }, + "PIN_MESSAGE": { + "message": "Introduïu el vostre PIN per a $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Introduïu el vostre PIN de l'ordinador remot." + }, + "PRODUCT_DESCRIPTION": { + "message": "Accediu a altres ordinadors o permeteu que un altre usuari accedeixi al vostre ordinador de manera segura per Internet." + }, + "PRODUCT_NAME": { + "message": "Escriptori remot de Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Torna a connectar" + }, + "REMEMBER_PIN": { + "message": "No tornis a demanar el PIN en connectar amb aquest amfitrió des d'aquest dispositiu" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteca principal" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Procés d'integració de l'escriptori" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplicació que ha d'emetre les ordres per a l'amfitrió de l'escriptori remot de Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Procés de l'amfitrió" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Amfitrió de missatgeria nativa per a la gestió remota de l'amfitrió" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Amfitrió de missatgeria nativa per a l'assistència remota" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Procés de mode remot per a la clau de seguretat" + }, + "RESIZE_TO_CLIENT": { + "message": "Ajusta la mida de l'escriptori" + }, + "RESTART_BUTTON": { + "message": "Reinicia ara" + }, + "RESTORE_WINDOW": { + "message": "Restaura la finestra" + }, + "RETRY": { + "message": "Torna-ho a provar" + }, + "SCREEN_OPTIONS": { + "message": "Opcions de pantalla" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Envia Ctrl-Alt-Supr" + }, + "SEND_FEEDBACK": { + "message": "Informeu d'un problema..." + }, + "SEND_KEYS": { + "message": "Envia les claus" + }, + "SEND_PRINT_SCREEN": { + "message": "Envia Impr Pant" + }, + "SERVICE_DESCRIPTION": { + "message": "Aquest servei permet les connexions entrants de clients de l'escriptori remot de Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Aquesta configuració es controla a la política de dominis." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Comparteix" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancel·la" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Voleu compartir aquest ordinador perquè un altre usuari el pugui veure i controlar?" + }, + "SHOW_STATS": { + "message": "Mostra les estadístiques" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Mostra les estadístiques (connexió: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Redueix per ajustar" + }, + "SIGN_IN_BUTTON": { + "message": "Inici de sessió" + }, + "SIGN_OUT_BUTTON": { + "message": "Tanca la sessió" + }, + "STOP_SHARING_BUTTON": { + "message": "Deixa de compartir" + }, + "SURVEY_INVITATION": { + "message": "Voleu ajudar a millorar l'Escriptori remot de Chrome? $1$Responeu a l'enquesta.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Hora" + }, + "TOGGLE_STATS": { + "message": "Mostra les estadístiques" + }, + "TOOLTIP_CONNECT": { + "message": "Connecta amb $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Desactiva les connexions remotes a aquest ordinador" + }, + "TOOLTIP_REFRESH": { + "message": "Actualitza la llista d'amfitrions" + }, + "TOOLTIP_RENAME": { + "message": "Edita el nom de l'ordinador" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (obsolet)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Compte" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Confirmeu el vostre compte i PIN a continuació per permetre l'accés per l'escriptori remot de Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTA: La configuració de la política només permet connexions entre ordinadors de la vostra xarxa." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTA: Per assegurar-vos que totes les tecles de drecera estiguin disponibles, podeu configurar l'escriptori remot de Chrome amb l'opció \"Obre com a finestra\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "Per què és segur?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Finestres" + }, + "WORKING": { + "message": "S'hi està treballant..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/cs/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/cs/messages.json new file mode 100644 index 000000000000..546f21fdfdd0 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/cs/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "PÅ™ijmout a nainstalovat" + }, + "ACCESS_CODE": { + "message": "Přístupový kód" + }, + "ACCESS_CODE_TIMER": { + "message": "Platnost tohoto přístupového kódu vyprší za $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "ZpÄ›tná vazba" + }, + "ALL_CONNECTIONS": { + "message": "VÅ¡echna pÅ™ipojení" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ověření kódu PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "ZruÅ¡it" + }, + "CLEAR_HISTORY": { + "message": "Vymazat historii" + }, + "CLOSE": { + "message": "Zavřít" + }, + "CLOSE_PROMPT": { + "message": "Pokud opustíte tuto stránku, relace Vzdálené plochy Chrome bude ukonÄena." + }, + "CLOSE_WINDOW": { + "message": "Zavřít okno" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Opravdu chcete zakázat vzdálená pÅ™ipojení k poÄítaÄi $1$? Pokud pozdÄ›ji své rozhodnutí zmÄ›níte, bude nutné pÅ™ipojení povolit přímo z uvedeného poÄítaÄe.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "PÅ™ipojení se nezdaÅ™ilo" + }, + "CONNECTION_FROM_HEADER": { + "message": "Klient" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historie pÅ™ipojení" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "PÅ™ijatelná" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Dobrá" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Nízká" + }, + "CONNECTION_TO_HEADER": { + "message": "Hostitel" + }, + "CONNECT_ANYWAY": { + "message": "PÅ™esto pÅ™ipojit" + }, + "CONNECT_BUTTON": { + "message": "PÅ™ipojení" + }, + "CONTINUE_BUTTON": { + "message": "PokraÄovat" + }, + "CONTINUE_PROMPT": { + "message": "MomentálnÄ› sdílíte tento poÄítaÄ s jiným uživatelem. Chcete ve sdílení pokraÄovat?" + }, + "CONTROLLER_NAME": { + "message": "Hostitelský kontroler Vzdálené plochy Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. VÅ¡echna práva vyhrazena." + }, + "CREDITS": { + "message": "PodÄ›kování" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Smazat vÅ¡e" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Vymazat" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Aby bylo možné pokraÄovat, je nutné udÄ›lit dodateÄná oprávnÄ›ní k přístupu do vaÅ¡eho poÄítaÄe. Tuto akci staÄí provést jednou." + }, + "DESCRIPTION_CONNECT": { + "message": "Požádejte uživatele, k jehož poÄítaÄi chcete získat přístup, aby kliknul na tlaÄítko $1$ a dal vám přístupový kód.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Vzdálená plocha Chrome vám umožňuje bezpeÄnÄ› sdílet svůj poÄítaÄ pÅ™es internet. Oba uživatelé musí mít spuÅ¡tÄ›nou aplikaci Vzdálená plocha Chrome, kterou najdete na adrese $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Vzdálený hostitelský server vyžaduje, abyste provedli ověření na stránce tÅ™etí strany. Aby bylo možné pokraÄovat, je nutné udÄ›lit Vzdálené ploÅ¡e Chrome dodateÄná oprávnÄ›ní k přístupu na tuto adresu:" + }, + "DISABLE_HOST": { + "message": "Deaktivovat" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Odpojit" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Služba Vzdálené plochy Chrome" + }, + "DURATION_HEADER": { + "message": "Délka" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Ke spuÅ¡tÄ›ní této aplikace nemáte oprávnÄ›ní." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Ověření selhalo. PÅ™ihlaste se do prohlížeÄe Chrome znovu." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Chybí nÄ›které povinné komponenty. Zkontrolujte, zda máte nainstalovanou nejnovÄ›jší verzi softwaru, a zkuste to znovu." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "DoÅ¡lo k chybÄ› sítÄ›. Aplikaci restartujeme, až bude zařízení opÄ›t online." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Vzdálený poÄítaÄ relaci neinicializoval. Pokud problém pÅ™etrvává, zkuste hostitele nakonfigurovat znovu." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Vzdálený poÄítaÄ nereaguje na žádosti o pÅ™ipojení. Zkontrolujte, zda je online, a zkuste to znovu." + }, + "ERROR_HOST_OVERLOAD": { + "message": "PÅ™ipojení ke vzdálenému poÄítaÄi jsou doÄasnÄ› zablokována, protože doÅ¡lo k nÄ›kolika pokusům o pÅ™ipojení s nesprávným kódem PIN. Opakujte akci pozdÄ›ji." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Registrace tohoto poÄítaÄe se nezdaÅ™ila." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Byla zjiÅ¡tÄ›na nekompatibilní verze protokolu. Zkontrolujte, zda máte v obou poÄítaÄích nainstalovanou nejnovÄ›jší verzi softwaru, a zkuste to znovu." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Přístupový kód je neplatný. Zkuste to prosím znovu." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Nastavení zásad neumožňuje sdílet tento poÄítaÄ jako hostitel Vzdálené plochy Chrome. Kontaktujte administrátora systému a požádejte ho o pomoc." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Platnost vzdálené relace vyprÅ¡ela." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Chybí nÄ›které povinné komponenty. Zkontrolujte, zda máte nejnovÄ›jší verzi Chromu, a zkuste to znovu." + }, + "ERROR_NACL_DISABLED": { + "message": "Chybí nÄ›které povinné komponenty. PÅ™ejdÄ›te na stránku chrome://plugins a zkontrolujte, zda je aplikace Native Client aktivní." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Vyžadovaná komponenta pÅ™estala pracovat. Nahlaste tento problém vývojářům." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nelze se pÅ™ipojit k síti. Zkontrolujte prosím, zda je zařízení online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Nejste do prohlížeÄe Chrome pÅ™ihlášeni. PÅ™ihlaste se a zkuste to znovu." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "K provedení této akce nemáte oprávnÄ›ní." + }, + "ERROR_NOT_FOUND": { + "message": "Požadovaný objekt neexistuje." + }, + "ERROR_P2P_FAILURE": { + "message": "Hostitele nelze nalézt. PravdÄ›podobnou příÄinou je aktuální konfigurace sítÄ›." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Služba je doÄasnÄ› nedostupná. Zkuste to prosím znovu pozdÄ›ji." + }, + "ERROR_UNEXPECTED": { + "message": "DoÅ¡lo k neoÄekávané chybÄ›. Nahlaste prosím tento problém vývojářům." + }, + "EXIT_FULL_SCREEN": { + "message": "UkonÄit režim celé obrazovky" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Resetování aplikace se nezdaÅ™ilo. Stále můžete odeslat zprávu o chybÄ›." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Resetovat aplikace. VeÅ¡kerá neuložená práce bude ztracena." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Aplikaci nelze otevřít." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Aplikace je příliÅ¡ pomalá." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Soubory na Disku Google nelze otevřít." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Soubory uložené online na Disku Google se nezobrazují." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Mám problémy s klávesnicí nebo myší." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Abychom váš problém mohli vyÅ™eÅ¡it, sdÄ›lte nám, v Äem spoÄívá:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "NÄ›co jiného" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Vybrat…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Abychom vás mohli kontaktovat kvůli dalším informacím, vÅ¡echny zpÄ›tné vazby, které odeÅ¡lete, budou obsahovat vaÅ¡i e-mailovou adresu." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Nahlásit problém" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Zahrnout protokoly aplikací, které nám pomohou s vyÅ™eÅ¡ením vaÅ¡eho problému (protokoly mohou obsahovat osobní údaje)" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Protokoly aplikací mohou obsahovat osobní údaje vÄetnÄ› vaší identity (e-mailové adresy) a názvů a vlastností souborů a složek na Disku Google." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Tyto informace jsou využity pouze pÅ™i diagnostikování problému, který jste nahlásili, jsou dostupné pouze osobÄ›, která vaÅ¡i zprávu proÅ¡etÅ™uje, a nejsou uchovávány déle než 30 dní." + }, + "FOOTER_CONNECTING": { + "message": "PÅ™ipojování..." + }, + "FOOTER_WAITING": { + "message": "Äeká se na pÅ™ipojení..." + }, + "FOR_PLATFORM_MAC": { + "message": "Pro Mac (OS X 10.6 a novÄ›jší)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Pro Windows (XP a novÄ›jší)" + }, + "FULL_SCREEN": { + "message": "Celá obrazovka" + }, + "GET_STARTED": { + "message": "ZaÄít" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "PÅ™ijmout" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Odmítnout" + }, + "HELP": { + "message": "NápovÄ›da" + }, + "HOME_ACCESS_BUTTON": { + "message": "Přístup" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Umožňuje zobrazit a ovládat sdílený poÄítaÄ." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "K tomuto poÄítaÄi se můžete bezpeÄnÄ› pÅ™ipojit pomocí Vzdálené plochy Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "ZmÄ›nit kód PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Tento poÄítaÄ je aktuálnÄ› sdílen pod jiným úÄtem." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Zobrazit/upravit" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Tento poÄítaÄ je nakonfigurován tak, aby jednomu nebo více klientům umožnil pÅ™ipojení bez zadávání kódu PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Povolit vzdálená pÅ™ipojení" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Chcete-li se k tomuto poÄítaÄi pÅ™ipojit prostÅ™ednictvím Vzdálené plochy Chrome, je tÅ™eba povolit vzdálená pÅ™ipojení." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Zakázat vzdálená pÅ™ipojení" + }, + "HOME_SHARE_BUTTON": { + "message": "Sdílet" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Sdílet tento poÄítaÄ, aby jej mohl jiný uživatel zobrazit a ovládat." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Tato funkce zatím pro váš poÄítaÄ není k dispozici.)" + }, + "HOST_CATEGORY": { + "message": "Hostitel" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Přístup klienta zamítnut: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klient pÅ™ipojen: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Klient odpojen: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP adresa kanálu pro klienta: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Chcete-li umožnit vzdálené pÅ™ipojení k jinému poÄítaÄi, nainstalujte do nÄ›j Vzdálenou plochu Chrome a poté kliknÄ›te na tlaÄítko $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Nemáte zaregistrované žádné poÄítaÄe. Chcete-li umožnit vzdálené pÅ™ipojení k jinému poÄítaÄi, nainstalujte do nÄ›j Vzdálenou plochu Chrome a kliknÄ›te na tlaÄítko $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Dříve jste byli pÅ™ihlášeni pomocí úÄtu $1$ ($2$). Chcete-li získat přístup k poÄítaÄům v tomto úÄtu, $3$pÅ™ihlaste se do prohlížeÄe Google Chrome$4$ pomocí přísluÅ¡ného úÄtu a znovu nainstalujte Vzdálenou plochu Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Softwarové aktualizace probíhají obvykle automaticky, ve výjimeÄných případech vÅ¡ak mohou selhat. Aktualizace softwaru by nemÄ›la trvat déle než nÄ›kolik minut a lze ji provést i bÄ›hem vzdáleného pÅ™ipojení k poÄítaÄi." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Vzdálená plocha Chrome v poÄítaÄi $1$ je zastaralá a potÅ™ebuje aktualizovat.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Pomozte nám Vzdálenou plochu Chrome vylepÅ¡it tím, že nám povolíte shromažÄovat statistiky využití a zprávy o selhání." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Pokud chcete přístup k tomuto poÄítaÄi zabezpeÄit, zvolte prosím kód PIN v délce $1$alespoň Å¡esti Äíslic$2$. Tento kód PIN bude vyžadován pÅ™i pÅ™ipojení z jiného místa.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "SpuÅ¡tÄ›ní služby pro vzdálený přístup se nezdaÅ™ilo." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome stahuje instalaÄní program hostitele Vzdálené plochy Chrome. Po stažení instalaÄní program spusÅ¥te a poté pokraÄujte." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "PÅ™ed pokraÄováním prosím spusÅ¥te stažený instalaÄní program." + }, + "HOST_SETUP_STARTED": { + "message": "Vzdálená pÅ™ipojení k tomuto poÄítaÄi byla povolena." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Zkontrolujte prosím nastavení řízení spotÅ™eby svého poÄítaÄe a ujistÄ›te se, zda není nastaven na pÅ™echod do režimu spánku pÅ™i neÄinnosti." + }, + "HOST_SETUP_STARTING": { + "message": "Povolování vzdálených pÅ™ipojení k tomuto poÄítaÄi…" + }, + "HOST_SETUP_STOPPED": { + "message": "Vzdálená pÅ™ipojení k tomuto poÄítaÄi byla zakázána." + }, + "HOST_SETUP_STOPPING": { + "message": "Zakazování vzdálených pÅ™ipojení k tomuto poÄítaÄi…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Vzdálený přístup k tomuto poÄítaÄi se nepodaÅ™ilo zakázat. Zkuste to prosím pozdÄ›ji." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Stažením instalaÄního programu hostitele Vzdálené plochy Chrome vyjadÅ™ujete souhlas se $1$smluvními podmínkami$4 spoleÄnosti Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Váš kód PIN byl aktualizován." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Aktualizace kódu PIN se nezdaÅ™ila. Zkuste to prosím pozdÄ›ji." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Aktualizace kódu PIN pro tento poÄítaÄ…" + }, + "HOST_STARTED": { + "message": "Pro následujícího uživatele bylo zahájeno hostování: %1." + }, + "HOST_STOPPED": { + "message": "Hostitel byl zastaven." + }, + "IDLE_CONTINUE": { + "message": "PokraÄovat" + }, + "IDLE_DISCONNECT": { + "message": "Odpojit" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Relace aplikace $1$ je již nÄ›jakou dobu neaktivní a brzy bude odpojena.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "K tomuto poÄítaÄi" + }, + "INSTALLER_DOWNLOAD": { + "message": "Stažení instalaÄního programu hostitele Vzdálené plochy Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Chcete-li zaÄít sdílet svoji plochu, poskytnÄ›te níže uvedený přístupový kód osobÄ›, která vám bude pomáhat." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Po zadání kódu bude spuÅ¡tÄ›na relace sdílení." + }, + "INVALID_PIN": { + "message": "Zadejte kód PIN obsahující 6 nebo více Äíslic." + }, + "IT2ME_FIRST_RUN": { + "message": "Sdílení obrazovky mezi uživateli je ideální pro vzdálenou technickou podporu." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Rozložení klávesnice" + }, + "LABEL_CONNECTED": { + "message": "PÅ™ipojeno:" + }, + "LAST_ONLINE": { + "message": "$1$ (naposledy online: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Další informace" + }, + "LEARN_MORE": { + "message": "Další informace" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Nastavení hostitele Vzdálené plochy Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Hostitel Vzdálené\nplochy Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Nástroj k odinstalaci hostitele Vzdálené plochy Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Použít pravou klávesu CTRL místo klávesy Windows (v poÄítaÄi Mac klávesu ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximalizovat okno" + }, + "ME2ME_FIRST_RUN": { + "message": "PÅ™istupujte ke svému poÄítaÄi odkudkoli." + }, + "MESSAGE_GENERATING": { + "message": "Vytváření přístupového kódu..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Relace Vzdálené plochy Chrome byla ukonÄena." + }, + "MESSAGE_SHARED": { + "message": "AktuálnÄ› sdílíte plochu s uživatelem $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimalizovat okno" + }, + "MODE_AUTHORIZE": { + "message": "Autorizovat" + }, + "MODE_IT2ME": { + "message": "Vzdálená pomoc" + }, + "MODE_ME2ME": { + "message": "Mé poÄítaÄe" + }, + "NEW_WINDOW": { + "message": "Nové okno…" + }, + "NO_PAIRED_CLIENTS": { + "message": "VÅ¡ichni spárovaní klienti byli smazáni." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Integrace poÄítaÄe na této platformÄ› není podporována. Aplikaci můžete nadále používat, ale uživatelský dojem bude horší." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Inicializace hostitele se nezdaÅ™ila." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Neplatná konfigurace hostitele." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Neplatná doména vlastníka hostitele." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Neplatné ID hostitele." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Hostitel je nakonfigurován s neplatnými identifikaÄními údaji OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Hostitel spuÅ¡tÄ›ný na obrazovce logiky konzole byl ukonÄen za úÄelem zajiÅ¡tÄ›ní podpory režimu opony prostÅ™ednictvím pÅ™epnutí na hostitele spuÅ¡tÄ›ného v relaci specifické pro uživatele." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Hostitel se restartujte za úÄelem zohlednÄ›ní zmÄ›ny zásad." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hostiteli se nezdaÅ™ilo pÅ™eÄíst zásady." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Hostitel byl vypnut." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Neznámá chyba hostitele: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Neplatný vlastník hostitele." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Možnosti" + }, + "OUTGOING_CONNECTIONS": { + "message": "Z tohoto poÄítaÄe" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Následující klienti byli spárováni s tímto poÄítaÄem a mohou se pÅ™ipojit bez zadávání kódu PIN. Toto oprávnÄ›ní lze kdykoli zruÅ¡it (buÄ u jednotlivých, nebo u vÅ¡ech klientů)." + }, + "PAIRED_CLIENT_DATE": { + "message": "Datum spárování" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Zadejte do obou polí stejný kód PIN." + }, + "PIN_MESSAGE": { + "message": "Zadejte kód PIN pro poÄítaÄ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Zadejte kód PIN pro vzdálený poÄítaÄ." + }, + "PRODUCT_DESCRIPTION": { + "message": "PÅ™istupujte k jiným poÄítaÄům nebo umožnÄ›te dalšímu uživateli pÅ™istupovat k vaÅ¡emu poÄítaÄi bezpeÄnÄ› pÅ™es internet." + }, + "PRODUCT_NAME": { + "message": "Vzdálená plocha Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Streamování aplikací Chrome" + }, + "RECONNECT": { + "message": "Znovu pÅ™ipojit" + }, + "REMEMBER_PIN": { + "message": "PÅ™i pÅ™ipojování k tomuto hostiteli z tohoto zařízení již nežádat o zadání kódu PIN." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Základní knihovna" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proces integrace plochy" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikace, která vydává příkazy hostiteli vzdálené plochy Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proces hostitele" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Nativní hostitelská aplikace pro komunikaci pÅ™i správÄ› vzdálených hostitelů" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Nativní hostitelská aplikace pro komunikaci pÅ™i vzdálené pomoci" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proces vzdálené komunikace BezpeÄnostního klíÄe" + }, + "RESIZE_TO_CLIENT": { + "message": "PÅ™izpůsobit velikost plochy obrazovce" + }, + "RESTART_BUTTON": { + "message": "Restartovat" + }, + "RESTORE_WINDOW": { + "message": "Obnovit okno" + }, + "RETRY": { + "message": "Opakovat" + }, + "SCREEN_OPTIONS": { + "message": "Možnosti obrazovky" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Odeslat akci Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Nahlásit problém…" + }, + "SEND_KEYS": { + "message": "Odeslat kombinaci kláves" + }, + "SEND_PRINT_SCREEN": { + "message": "Odeslat akci PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Tato služba umožňuje příchozí pÅ™ipojení od klientů Vzdálené plochy Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Toto nastavení je spravováno zásadami vaší domény." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Sdílet" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ZruÅ¡it" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Chcete tento poÄítaÄ sdílet s dalším uživatelem, aby jej mohl zobrazit a ovládat?" + }, + "SHOW_STATS": { + "message": "Zobrazit statistiky" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Zobrazit statistiky (pÅ™ipojení: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ZmenÅ¡it dle místa" + }, + "SIGN_IN_BUTTON": { + "message": "PÅ™ihlaste se" + }, + "SIGN_OUT_BUTTON": { + "message": "Odhlásit se" + }, + "STOP_SHARING_BUTTON": { + "message": "UkonÄit sdílení" + }, + "SURVEY_INVITATION": { + "message": "Chcete pomoci vylepÅ¡it funkci Vzdálená plocha Chrome? $1$Vyplňte dotazník.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ÄŒas" + }, + "TOGGLE_STATS": { + "message": "Zobrazit statistiky" + }, + "TOOLTIP_CONNECT": { + "message": "PÅ™ipojit k poÄítaÄi $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Zakázat vzdálená pÅ™ipojení k tomuto poÄítaÄi" + }, + "TOOLTIP_REFRESH": { + "message": "Obnovit seznam hostitelů" + }, + "TOOLTIP_RENAME": { + "message": "Upravit název poÄítaÄe" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (zastaralé)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "ÚÄet" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "K povolení přístupu prostÅ™ednictvím Vzdálené plochy Chrome je tÅ™eba potvrdit úÄet a kód PIN níže." + }, + "WARNING_NAT_DISABLED": { + "message": "POZNÃMKA: Nastavení zásad umožňují spojení pouze mezi poÄítaÄi v rámci vaší sítÄ›." + }, + "WARNING_NOT_WINDOWED": { + "message": "POZNÃMKA: Pokud chcete mít k dispozici vÅ¡echny klávesové zkratky, povolte v konfiguraci Vzdálené plochy Google možnost Otevřít jako okno." + }, + "WHY_IS_THIS_SAFE": { + "message": "ProÄ je toto pÅ™ipojení bezpeÄné?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Probíhá zpracování…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/da/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/da/messages.json new file mode 100644 index 000000000000..78a188273048 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/da/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Acceptér, og installer" + }, + "ACCESS_CODE": { + "message": "Adgangskode" + }, + "ACCESS_CODE_TIMER": { + "message": "Denne adgangskode udløber om $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Alle forbindelser" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Indtast pinkoden igen" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "Pinkode" + }, + "CANCEL": { + "message": "Annuller" + }, + "CLEAR_HISTORY": { + "message": "Ryd historik" + }, + "CLOSE": { + "message": "Luk" + }, + "CLOSE_PROMPT": { + "message": "Hvis du forlader denne side, afsluttes din session med Chrome Fjernskrivebord." + }, + "CLOSE_WINDOW": { + "message": "Luk vindue" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Er du sikker pÃ¥, at du vil deaktivere fjernforbindelserne til $1$? Hvis du ombestemmer dig, skal du genaktivere forbindelserne pÃ¥ den computer.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Der kunne ikke etableres forbindelse" + }, + "CONNECTION_FROM_HEADER": { + "message": "Fra" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Forbindelseshistorik" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Rimelig" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "God" + }, + "CONNECTION_QUALITY_POOR": { + "message": "DÃ¥rlig" + }, + "CONNECTION_TO_HEADER": { + "message": "Til" + }, + "CONNECT_ANYWAY": { + "message": "Opret forbindelse alligevel" + }, + "CONNECT_BUTTON": { + "message": "FÃ¥ forbindelse" + }, + "CONTINUE_BUTTON": { + "message": "Fortsæt" + }, + "CONTINUE_PROMPT": { + "message": "Du deler i øjeblikket denne maskine med en anden bruger. Vil du fortsætte med at dele?" + }, + "CONTROLLER_NAME": { + "message": "Administration af host for Chrome Fjernskrivebord" + }, + "COPYRIGHT": { + "message": "Copyright © 2013 Google Inc. Alle rettigheder forbeholdes." + }, + "CREDITS": { + "message": "Medvirkende" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Slet alle" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Slet" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "For at fortsætte skal du give udvidet adgangstilladelse til din computer. Du skal kun gøre dette én gang." + }, + "DESCRIPTION_CONNECT": { + "message": "Bed den bruger, hvis computer du ønsker at fÃ¥ adgang til, om at klikke pÃ¥ \"$1$\" for at give dig adgangskoden.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Med Chrome Fjernskrivebord fÃ¥r du mulighed for sikkert at dele din computer via internettet. Begge brugere skal køre appen Chrome Fjernskrivebord, som kan findes pÃ¥ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Fjernværten kræver, at du bekræftes over for et tredjepartswebsite. Du skal give Chrome Fjernskrivebord yderligere tilladelser til at fÃ¥ adgang til denne adresse, før du kan fortsætte:" + }, + "DISABLE_HOST": { + "message": "Deaktiver" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Afbryd" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Tjenesten Chrome Fjernskrivebord" + }, + "DURATION_HEADER": { + "message": "Varighed" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Du har ikke tilladelse til at køre denne applikation." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Godkendelsen mislykkedes. Log ind i Chrome igen." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Nogle obligatoriske komponenter mangler. Kontrollér, at du har installeret den nyeste version af softwaren, og prøv igen." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Der opstod en netværksfejl. Vi genstarter appen, nÃ¥r din enhed er online igen." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Fjerncomputeren har ikke startet sessionen. Hvis problemet fortsætter, kan du prøve at konfigurere hosten igen." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Fjerncomputeren svarer ikke pÃ¥ anmodninger om oprettelse af forbindelse. Kontrollér, at den er online, og prøv igen." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Forbindelserne til fjerncomputeren er midlertidigt blokeret, fordi nogen forsøgte at fÃ¥ forbindelse til den med en ugyldig pinkode. Prøv igen senere." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Denne computer kunne ikke registreres." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Der er registreret en inkompatibel version af protokollen. Kontrollér, at du har den nyeste version af softwaren installeret pÃ¥ begge computere, og prøv igen." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Adgangskoden er ugyldig. Prøv igen." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Politikindstillingerne tillader ikke, at denne computer deles som en Chrome Fjernskrivebord-host. Kontakt din systemadministrator for at fÃ¥ hjælp." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Fjernsessionen er udløbet." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Nogle obligatoriske komponenter mangler. Kontrollér, at du har den nyeste version af Chrome, og prøv igen." + }, + "ERROR_NACL_DISABLED": { + "message": "Nogle obligatoriske komponenter mangler. GÃ¥ til chrome://plugins, og sørg for, at Native Client er aktiveret." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "En nødvendig komponent er holdt op med at fungere. Sørg for at rapportere dette problem til udviklerne." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Der kunne ikke oprettes forbindelse til netværket. Kontrollér, at din enhed er pÃ¥ nettet." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Du er ikke logget ind i Chrome. Log ind, og prøv igen." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Du har ikke tilladelse til at udføre denne handling." + }, + "ERROR_NOT_FOUND": { + "message": "Det ønskede objekt findes ikke." + }, + "ERROR_P2P_FAILURE": { + "message": "Værten kunne ikke nÃ¥s. Dette skyldes sandsynligvis konfigurationen af det netværk, du bruger." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Tjenesten er midlertidigt utilgængelig. Prøv igen senere." + }, + "ERROR_UNEXPECTED": { + "message": "Der opstod en uventet fejl. Rapportér dette problem til udviklerne." + }, + "EXIT_FULL_SCREEN": { + "message": "Afslut fuld skærm" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Applikationen kunne ikke nulstilles. Du kan stadig sende en fejlrapport." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Nulstil applikationen. Du vil miste alt arbejde, der ikke er gemt." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Jeg kan ikke Ã¥bne applikationen." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Applikationen er for langsom." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Jeg kan ikke Ã¥bne mine Google Drev-filer." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Jeg kan ikke se mine gemte filer online i Google Drev." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Jeg har problemer med mit tastatur eller min mus." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Du kan hjælpe os med at løse problemet ved at fortælle os, hvad der gik galt:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Noget andet." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Vælg …" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Din e-mailadresse medtages i din feedback, sÃ¥ vi kan kontakte dig i tilfælde af, at vi har brug for yderligere oplysninger." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Rapportér et problem" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Medtag logfiler for applikationer for at hjælpe os med at løse problemet (logfiler kan indeholde private oplysninger)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Logfiler for applikationer kan indeholde private oplysninger, bl.a. din identitet (e-mailadresse) og navne og egenskaber for filer og mapper i Google Drev." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Disse oplysninger bruges kun til diagnosticering af det problem, du rapporterer, de er kun tilgængelige for personer, der undersøger din rapport, og de tilbageholdes i højst 30 dage." + }, + "FOOTER_CONNECTING": { + "message": "Opretter forbindelse..." + }, + "FOOTER_WAITING": { + "message": "venter pÃ¥ forbindelse..." + }, + "FOR_PLATFORM_MAC": { + "message": "Til Mac (OS X 10.6 og nyere)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Til Windows (XP og nyere)" + }, + "FULL_SCREEN": { + "message": "Fuld skærm" + }, + "GET_STARTED": { + "message": "Kom godt i gang" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accepter" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Afvis" + }, + "HELP": { + "message": "Hjælp" + }, + "HOME_ACCESS_BUTTON": { + "message": "Adgang" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "FÃ¥ vist og kontrollér en delt computer." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Du kan fÃ¥ sikker adgang til denne computer via Chrome Fjernskrivebord." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Skift pinkode" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Denne computer deles i øjeblikket under en anden konto." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Vis/rediger" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Denne computer er konfigureret til at tillade, at en eller flere klienter opretter forbindelse uden at angive en pinkode." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Aktivér fjernforbindelser" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Du skal aktivere fjernforbindelserne, hvis du vil bruge Chrome Fjernskrivebord til at fÃ¥ adgang til denne computer." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Deaktiver fjernforbindelserne" + }, + "HOME_SHARE_BUTTON": { + "message": "Del" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Del denne computer, sÃ¥ en anden bruger kan se og kontrollere den." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(denne funktion er endnu ikke tilgængelig pÃ¥ din computer)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Adgang nægtet for klient: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Tilsluttet klient: %1 ." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Frakoblet klient: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kanal-IP for klient: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Hvis du vil aktivere fjernforbindelser til en anden computer, skal du installere Chrome Fjernskrivebord pÃ¥ den pÃ¥gældende computer og klikke pÃ¥ \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Du har ingen registrerede computere. Hvis du vil aktivere fjernforbindelser til en computer, skal du installere Chrome Fjernskrivebord pÃ¥ den pÃ¥gældende computer og klikke pÃ¥ \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Du har tidligere logget ind som $1$ ($2$). For at fÃ¥ adgang til dine computere pÃ¥ den pÃ¥gældende konto skal du $3$logge ind pÃ¥ Google Chrome$4$ med denne konto og geninstallere Chrome Fjernskrivebord.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Softwareopdateringer udføres sædvanligvis automatisk, men de kan i sjældne tilfælde mislykkes. Det bør ikke tage mere end et par minutter at opdatere softwaren, og opdateringen kan udføres, mens du er forbundet til din computer via en fjernforbindelse." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Fjernskrivebord pÃ¥ $1$ er forældet og skal opdateres.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Hjælp os med at forbedre Chrome Fjernskrivebord ved at lade os indsamle brugsstatistikker og rapporter om nedbrud." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Beskyt adgangen til denne computer ved at vælge en pinkode pÃ¥ $1$mindst seks cifre$2$. Denne pinkode skal indtastes, nÃ¥r du opretter forbindelse fra et andet sted.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Tjenesten til fjernadgang kunne ikke starte." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome downloader installationsprogrammet Chrome Remote Desktop Host. NÃ¥r overførslen er færdig, skal du køre installationsprogrammet, før du fortsætter." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Kør installationsprogrammet, før du fortsætter." + }, + "HOST_SETUP_STARTED": { + "message": "Fjernforbindelserne til denne computer er blevet aktiveret." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Kontrollér indstillingerne for strømstyring pÃ¥ din computer, og sørg for, at den ikke er konfigureret til at gÃ¥ i dvale, nÃ¥r den er inaktiv." + }, + "HOST_SETUP_STARTING": { + "message": "Aktiverer fjernforbindelserne for denne computer…" + }, + "HOST_SETUP_STOPPED": { + "message": "Fjernforbindelserne til denne computer er blevet deaktiveret." + }, + "HOST_SETUP_STOPPING": { + "message": "Deaktiverer fjernforbindelserne for denne computer…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Fjernadgangen til denne computer kunne ikke deaktiveres. Prøv igen senere." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "NÃ¥r du downloader installationsprogrammet til host for Chrome Fjernskrivebord, accepterer du automatisk Google $1$ServicevilkÃ¥r$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Din pinkode er blevet opdateret." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Pinkoden kunne ikke opdateres. Prøv igen senere." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Pinkoden for denne computer opdateres…" + }, + "HOST_STARTED": { + "message": "Host er startet for bruger: %1." + }, + "HOST_STOPPED": { + "message": "Hosten er stoppet." + }, + "IDLE_CONTINUE": { + "message": "Fortsæt" + }, + "IDLE_DISCONNECT": { + "message": "Afbryd nu" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Din $1$-session har været inaktiv i et stykke tid og vil snart blive afbrudt.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Til denne computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Download installationsprogrammet til host for Chrome Fjernskrivebord" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Hvis du vil begynde at dele dit skrivebord, skal du give adgangskoden nedenfor til den person, som skal hjælpe dig." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "NÃ¥r personen indtaster koden, startes delingssessionen." + }, + "INVALID_PIN": { + "message": "Indtast en pinkode, der bestÃ¥r af seks eller flere cifre." + }, + "IT2ME_FIRST_RUN": { + "message": "Skærmdeling med funktionen bruger-til-bruger – perfekt til ekstern teknisk support." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Tastaturlayout" + }, + "LABEL_CONNECTED": { + "message": "Tilsluttet:" + }, + "LAST_ONLINE": { + "message": "$1$ (sidst online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "FÃ¥ flere oplysninger." + }, + "LEARN_MORE": { + "message": "FÃ¥ flere oplysninger." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Præferencer for host for Chrome Fjernskrivebord" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host for Chrome\nFjernskrivebord" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Afinstallationsprogram til host for Chrome Fjernskrivebord" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Brug Ctrl-knappen i højre side pÃ¥ et Windows-tastatur (⌘ pÃ¥ en Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maksimér vinduet" + }, + "ME2ME_FIRST_RUN": { + "message": "FÃ¥ adgang til din egen computer, uanset hvor du er." + }, + "MESSAGE_GENERATING": { + "message": "Genererer adgangskode..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Din session med Chrome Fjernskrivebord er afsluttet." + }, + "MESSAGE_SHARED": { + "message": "Dit skrivebord deles i øjeblikket med $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimer vinduet" + }, + "MODE_AUTHORIZE": { + "message": "Autoriser" + }, + "MODE_IT2ME": { + "message": "Fjernsupport" + }, + "MODE_ME2ME": { + "message": "Mine computere" + }, + "NEW_WINDOW": { + "message": "Nyt vindue..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Alle parrede klienter er blevet slettet." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Skrivebordsintegration understøttes ikke pÃ¥ denne platform. Du kan fortsat bruge denne applikation, men brugeroplevelsen vil være forringet." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Initialisering af hosten mislykkedes." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ugyldig hostkonfiguration." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ejerdomænet for hosten er ugyldigt." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ugyldigt host-id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Hosten er konfigureret med ugyldige OAuth-loginoplysninger." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Hosten, der kører pÃ¥ loginskærmen for konsollen, er lukket ned for at understøtte curtain mode ved at skifte til en host, der kører i en brugerspecifik session." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Hosten genstarter af hensyn til en ændring af politikken." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hosten kunne ikke læse politikken." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Hosten har lukket ned." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Fejl – hosten genkendes ikke: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ugyldig hostejer." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Valgmuligheder" + }, + "OUTGOING_CONNECTIONS": { + "message": "Fra denne computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Følgende klienter er parret med denne computer og kan oprette forbindelse uden at angive en pinkode. Du kan altid trække denne tilladelse tilbage, enten for hver enkelt eller for alle klienter." + }, + "PAIRED_CLIENT_DATE": { + "message": "Dato for parring" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "Pinkode" + }, + "PINS_NOT_EQUAL": { + "message": "Indtast den samme pinkode i begge felter." + }, + "PIN_MESSAGE": { + "message": "Indtast din pinkode til $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Indtast din pinkode til fjerncomputeren." + }, + "PRODUCT_DESCRIPTION": { + "message": "FÃ¥ adgang til andre computere, eller giv en anden bruger adgang til din computer sikkert via internettet." + }, + "PRODUCT_NAME": { + "message": "Chrome Fjernskrivebord" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Genopret forbindelse" + }, + "REMEMBER_PIN": { + "message": "Bed ikke om en pinkode igen, nÃ¥r der oprettes forbindelse til denne host fra denne enhed." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Kernebiblioteket" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proces til skrivebordsintegration" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Applikation til oprettelse af kommandoer til hosten for Chrome Fjernskrivebord." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Hostproces" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Indbygget beskedhost til fjernadministration" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Indbygget beskedhost til ekstern hjælp" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Fjernproces for sikkerhedsnøglen" + }, + "RESIZE_TO_CLIENT": { + "message": "Tilpas størrelse pÃ¥ skrivebord" + }, + "RESTART_BUTTON": { + "message": "Genstart nu" + }, + "RESTORE_WINDOW": { + "message": "Gendan vinduet" + }, + "RETRY": { + "message": "Prøv igen" + }, + "SCREEN_OPTIONS": { + "message": "Valgmuligheder for skærm" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Send Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Rapportér et problem…" + }, + "SEND_KEYS": { + "message": "Send taster" + }, + "SEND_PRINT_SCREEN": { + "message": "Send PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Denne tjeneste muliggør indgÃ¥ende forbindelse fra klienter i Chrome Fjernskrivebord." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Denne indstilling administreres af din domænepolitik." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Del" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Annuller" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Vil du dele denne computer, sÃ¥ en anden bruger kan se og styre den?" + }, + "SHOW_STATS": { + "message": "Vis statistik" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Vis statistik (forbindelse: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Tilpas til vinduet" + }, + "SIGN_IN_BUTTON": { + "message": "Log ind" + }, + "SIGN_OUT_BUTTON": { + "message": "Log ud" + }, + "STOP_SHARING_BUTTON": { + "message": "Stop deling" + }, + "SURVEY_INVITATION": { + "message": "Vil du gerne være med til at forbedre Chrome Fjernskrivebord? $1$Deltag i spørgeundersøgelsen.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Tid" + }, + "TOGGLE_STATS": { + "message": "Vis statistik" + }, + "TOOLTIP_CONNECT": { + "message": "Opret forbindelse til $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Deaktiver fjernforbindelserne til denne computer" + }, + "TOOLTIP_REFRESH": { + "message": "Opdater listen over værter" + }, + "TOOLTIP_RENAME": { + "message": "Rediger computerens navn" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (forældet)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konto" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Bekræft din konto og pinkode nedenfor for at tillade adgang via Chrome Fjernskrivebord." + }, + "WARNING_NAT_DISABLED": { + "message": "BEMÆRK! Politikindstillingerne tillader kun forbindelser mellem computere inden for dit netværk." + }, + "WARNING_NOT_WINDOWED": { + "message": "BEMÆRK! Du kan sikre, at alle tastaturgenveje er tilgængelige ved at konfigurere Chrome Fjernskrivebord til \"Ã…bn som vindue\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "Hvorfor er det sikkert?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Arbejder..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/de/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/de/messages.json new file mode 100644 index 000000000000..c41e3d8d6b9d --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/de/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Akzeptieren und installieren" + }, + "ACCESS_CODE": { + "message": "Zugriffscode" + }, + "ACCESS_CODE_TIMER": { + "message": "Dieser Zugriffscode läuft in $1$ ab.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Google Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Alle Verbindungen" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN erneut eingeben" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Abbrechen" + }, + "CLEAR_HISTORY": { + "message": "Verlauf löschen" + }, + "CLOSE": { + "message": "Schließen" + }, + "CLOSE_PROMPT": { + "message": "Wenn Sie diese Seite verlassen, wird Ihre Chrome Remote Desktop-Sitzung beendet." + }, + "CLOSE_WINDOW": { + "message": "Fenster schließen" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Möchten Sie die Remote-Verbindung zu $1$ wirklich deaktivieren? Wenn Sie die Verbindung später erneut aktivieren möchten, müssen Sie dies von dem betreffenden Computer aus tun.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Fehler beim Herstellen der Verbindung" + }, + "CONNECTION_FROM_HEADER": { + "message": "Von" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Verlauf \"Verbindungen\"" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Ausreichend" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Gut" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Schlecht" + }, + "CONNECTION_TO_HEADER": { + "message": "Zu" + }, + "CONNECT_ANYWAY": { + "message": "Trotzdem verbinden" + }, + "CONNECT_BUTTON": { + "message": "Verbinden" + }, + "CONTINUE_BUTTON": { + "message": "Weiter" + }, + "CONTINUE_PROMPT": { + "message": "Dieser Computer ist zurzeit für einen anderen Nutzer freigegeben. Möchten Sie die Freigabe fortsetzen?" + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktop Host Controller" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Alle Rechte vorbehalten" + }, + "CREDITS": { + "message": "Mitwirkende" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Alle löschen" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Löschen" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Um fortfahren zu können, müssen Sie zunächst erweiterte Zugriffsberechtigungen auf Ihren Computer gewähren. Dieser Schritt ist nur einmal erforderlich." + }, + "DESCRIPTION_CONNECT": { + "message": "Bitten Sie den Nutzer, auf dessen Computer Sie zugreifen möchten, auf \"$1$\" zu klicken und Ihnen den Zugriffscode zu geben.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop ermöglicht die sichere Freigabe Ihres Computers über das Internet. Beide Nutzer müssen dazu die Chrome Remote Desktop App ausführen. Diese App finden Sie unter $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Der Remote-Host verlangt, dass Sie sich über eine Drittanbieter-Website authentifizieren. Um fortfahren zu können, geben Sie Chrome Remote Desktop zusätzliche Berechtigungen für den Zugriff auf die folgende Adresse:" + }, + "DISABLE_HOST": { + "message": "Deaktivieren" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Verbindung trennen" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktop Service" + }, + "DURATION_HEADER": { + "message": "Dauer" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Sie sind nicht berechtigt, diese App auszuführen." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Fehler bei der Authentifizierung. Melden Sie sich erneut in Chrome an." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Es fehlen einige erforderliche Komponenten. Ãœberprüfen Sie, ob Sie die neueste Version der Software installiert haben, und versuchen Sie es erneut." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ein Netzwerkfehler ist aufgetreten. Die App wird neu gestartet, wenn Ihr Gerät wieder online ist." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Der Remote-Computer konnte die Sitzung nicht initialisieren. Sollte das Problem weiter bestehen, versuchen Sie bitte, den Host nochmals zu konfigurieren." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Der Remote-Computer reagiert nicht auf Verbindungsanfragen. Ãœberprüfen Sie, ob er online ist, und versuchen Sie es erneut." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Die Verbindungen zum Remote-Computer werden vorübergehend blockiert, da versucht wurde, eine Verbindung mit einer ungültigen PIN herzustellen. Bitte versuchen Sie es später erneut." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Fehler beim Registrieren dieses Computers" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Eine inkompatible Protokollversion wurde erkannt. Ãœberprüfen Sie, ob die neueste Version der Software auf beiden Computern installiert ist, und versuchen Sie es erneut." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Der Zugriffscode ist ungültig. Bitte versuchen Sie es erneut." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Gemäß den Richtlinieneinstellungen können Sie diesen Computer nicht als Chrome Remote Desktop-Host verwenden. Wenden Sie sich für weitere Hilfe an Ihren Systemadministrator." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Die Remote-Sitzung ist abgelaufen." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Es fehlen einige erforderliche Komponenten. Ãœberprüfen Sie, ob Sie die neueste Version von Chrome verwenden, und versuchen Sie es erneut." + }, + "ERROR_NACL_DISABLED": { + "message": "Einige erforderliche Komponenten fehlen. Rufen Sie chrome://plugins auf und vergewissern Sie sich, dass der Native Client aktiviert ist." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Eine erforderliche Komponente funktioniert nicht mehr. Bitte melden Sie dieses Problem an die Entwickler." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Es konnte keine Verbindung zum Netzwerk hergestellt werden. Ãœberprüfen Sie, ob Ihr Gerät online ist." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Sie sind nicht in Chrome angemeldet. Melden Sie sich an und versuchen Sie es erneut." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Sie sind nicht berechtigt, diese Aktion durchzuführen." + }, + "ERROR_NOT_FOUND": { + "message": "Das angeforderte Objekt ist nicht vorhanden." + }, + "ERROR_P2P_FAILURE": { + "message": "Die Verbindung zum Host kann nicht hergestellt werden. Das von Ihnen verwendete Netzwerk ist möglicherweise nicht korrekt konfiguriert." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Der Dienst ist vorübergehend nicht verfügbar. Bitte versuchen Sie es später erneut." + }, + "ERROR_UNEXPECTED": { + "message": "Ein unerwarteter Fehler ist aufgetreten. Bitte melden Sie dieses Problem den Entwicklern." + }, + "EXIT_FULL_SCREEN": { + "message": "Vollbildmodus beenden" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Die App konnte nicht zurückgesetzt werden. Sie können einen Fehlerbericht senden." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "App zurücksetzen. Alle nicht gespeicherten Daten gehen verloren." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ich kann die Anwendung nicht öffnen." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Die Anwendung ist zu langsam." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ich kann meine Google Drive-Dateien nicht öffnen." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Meine online gespeicherten Dateien werden nicht im Google Drive angezeigt." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Ich habe Probleme mit meiner Tastatur oder meiner Maus." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Teilen Sie uns mit, was nicht funktioniert, damit wir Ihnen weiterhelfen können:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Sonstige" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Auswählen..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Damit wir für weitere Informationen mit Ihnen Kontakt aufnehmen können, wird bei jedem von Ihnen gesendeten Feedback Ihre E-Mail-Adresse mitgesendet." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Problem melden" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Anwendungsprotokolle zur Unterstützung der Problembehebung einbeziehen (Protokolle können private Informationen enthalten)" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Anwendungsprotokolle können private Informationen enthalten. Dabei kann es sich zum Beispiel um Ihre Identität, d. h. Ihre E-Mail-Adresse, und den Namen und die Eigenschaften von Dateien und Ordnern in Google Drive handeln." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Diese Informationen werden nur zur Diagnose des gemeldeten Problems verwendet. Dabei kann nur die Person auf sie zugreifen, die Ihren Bericht untersucht. Die Informationen werden nach spätestens 30 Tagen gelöscht." + }, + "FOOTER_CONNECTING": { + "message": "Verbindung wird hergestellt…" + }, + "FOOTER_WAITING": { + "message": "Warten auf Verbindung..." + }, + "FOR_PLATFORM_MAC": { + "message": "Für Mac OS X 10.6 und höher" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Für Windows XP und höher" + }, + "FULL_SCREEN": { + "message": "Vollbildmodus" + }, + "GET_STARTED": { + "message": "Jetzt starten" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Annehmen" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Ablehnen" + }, + "HELP": { + "message": "Hilfe" + }, + "HOME_ACCESS_BUTTON": { + "message": "Zugreifen" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Freigegebenen Computer sehen und steuern" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Mit Chrome Remote Desktop erhalten Sie sicheren Zugriff auf diesen Computer." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN ändern" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Dieser Computer ist derzeit über ein anderes Konto freigegeben." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Ansehen/bearbeiten" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Dieser Computer wird konfiguriert, um einem oder mehreren Clients das Herstellen einer Verbindung ohne Eingabe einer PIN zu ermöglichen." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Remote-Verbindungen aktivieren" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Aktivieren Sie die Remote-Verbindungen, wenn Sie mit Chrome Remote Desktop auf diesen Computer zugreifen möchten." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Remote-Verbindungen deaktivieren" + }, + "HOME_SHARE_BUTTON": { + "message": "Teilen" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Diesen Computer für einen anderen Nutzer zur Ansicht und Steuerung freigeben" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "Diese Funktion ist noch nicht für Ihren Computer verfügbar." + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Zugriff für folgenden Client verweigert: %1" + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client verbunden: %1" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client getrennt: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kanal-IP für Client: %1 IP=\"%2\" Host-IP=\"%3\" Kanal=\"%4\" Verbindung=\"%5\"" + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Um Remote-Verbindungen zu einem anderen Computer zu ermöglichen, installieren Sie Chrome Remote Desktop auf dem betreffenden Computer und klicken Sie auf \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Sie haben noch keine Computer registriert. Um Remote-Verbindungen zu einem Computer zu ermöglichen, installieren Sie Chrome Remote Desktop auf dem betreffenden Computer und klicken Sie auf \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Sie haben sich zuvor als $1$ ($2$) angemeldet. Damit Sie auf Ihre Computer in diesem Konto zugreifen können, $3$melden Sie sich mit diesem Konto in Google Chrome an$4$ und installieren Sie Chrome Remote Desktop erneut.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Softwareupdates werden normalerweise automatisch ausgeführt, in seltenen Fällen kann dabei jedoch ein Fehler auftreten. Die Aktualisierung der Software dauert nur wenige Minuten und kann bei bestehender Remote-Verbindung zum Computer erfolgen." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop auf $1$ ist veraltet und muss aktualisiert werden.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Helfen Sie uns bei der Verbesserung von Chrome Remote Desktop, indem Sie zulassen, dass wir Nutzungsstatistiken und Absturzberichte erfassen." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Um den Zugriff auf diesen Computer zu schützen, wählen Sie eine PIN mit $1$mindestens 6 Ziffern$2$ aus. Die Eingabe dieser PIN ist erforderlich, wenn eine Verbindung von einem anderen Ort aus hergestellt wird.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Fehler beim Starten des Remote-Zugriffsdienstes" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome lädt das Installationsprogramm für den Chrome Remote Desktop-Host herunter. Führen Sie nach dem Download das Installationsprogramm aus, bevor Sie fortfahren." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Führen Sie das Installationsprogramm aus, bevor Sie fortfahren." + }, + "HOST_SETUP_STARTED": { + "message": "Die Remote-Verbindungen für diesen Computer wurden aktiviert." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Bitte überprüfen Sie die Energieverwaltungseinstellungen Ihres Computers. Vergewissern Sie sich, dass er nicht so konfiguriert ist, dass er bei Inaktivität in den Energiesparmodus schaltet." + }, + "HOST_SETUP_STARTING": { + "message": "Remote-Verbindungen für diesen Computer werden aktiviert…" + }, + "HOST_SETUP_STOPPED": { + "message": "Die Remote-Verbindungen für diesen Computer wurden deaktiviert." + }, + "HOST_SETUP_STOPPING": { + "message": "Remote-Verbindungen für diesen Computer werden deaktiviert…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Fehler beim Deaktivieren des Remote-Zugriffs auf diesen Computer. Bitte versuchen Sie es später erneut." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Indem Sie das Chrome Remote Desktop Host-Installationsprogramm herunterladen, erklären Sie sich mit den $1$Nutzungsbedingungen von Google$4 einverstanden.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Ihre PIN wurde aktualisiert." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Fehler beim Aktualisieren der PIN. Bitte versuchen Sie es später erneut." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Die PIN für diesen Computer wird aktualisiert…" + }, + "HOST_STARTED": { + "message": "Host für folgenden Nutzer gestartet: %1" + }, + "HOST_STOPPED": { + "message": "Host angehalten" + }, + "IDLE_CONTINUE": { + "message": "Weiter" + }, + "IDLE_DISCONNECT": { + "message": "Verbindung jetzt aufheben" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Ihre Sitzung bei $1$ war längere Zeit inaktiv und wird in Kürze beendet.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Zu diesem Computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome Remote Desktop Host-Installationsprogramm herunterladen" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Teilen Sie zur Freigabe Ihres Desktops zunächst der Person, die Sie unterstützen wird, den unten stehenden Zugriffscode mit." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Sobald der Nutzer den Code eingibt, beginnt die Freigabesitzung." + }, + "INVALID_PIN": { + "message": "Die PIN muss aus mindestens 6 Ziffern bestehen." + }, + "IT2ME_FIRST_RUN": { + "message": "Die Bildschirmfreigabe für Nutzer eignet sich besonders für technischen Support per Remote-Zugriff." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Tastaturlayouts" + }, + "LABEL_CONNECTED": { + "message": "Verbunden:" + }, + "LAST_ONLINE": { + "message": "$1$ (zuletzt online: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Weitere Informationen" + }, + "LEARN_MORE": { + "message": "Weitere Informationen" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Einstellungen für Chrome Remote Desktop Host" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop Host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Deinstallationsprogramm für Chrome Remote Desktop Host" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Rechte Strg-Taste für Windows-Taste (⌘ auf einem Mac) verwenden" + }, + "MAXIMIZE_WINDOW": { + "message": "Fenster maximieren" + }, + "ME2ME_FIRST_RUN": { + "message": "Greifen Sie von überall aus auf Ihren Computer zu." + }, + "MESSAGE_GENERATING": { + "message": "Zugriffscode wird generiert..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Ihre Chrome Remote Desktop-Sitzung wurde beendet." + }, + "MESSAGE_SHARED": { + "message": "Ihr Desktop ist zurzeit für $1$ freigegeben.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Fenster minimieren" + }, + "MODE_AUTHORIZE": { + "message": "Autorisieren" + }, + "MODE_IT2ME": { + "message": "Remote-Unterstützung" + }, + "MODE_ME2ME": { + "message": "Meine Computer" + }, + "NEW_WINDOW": { + "message": "Neues Fenster..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Alle Clients mit Pairing wurden gelöscht." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Die Desktop-Integration wird auf dieser Plattform nicht unterstützt. Sie können die App weiterhin verwenden, allerdings ist die Benutzerfreundlichkeit beeinträchtigt." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Hostinitialisierung fehlgeschlagen" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ungültige Hostkonfiguration" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ungültige Hostinhaberdomain" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ungültige Host-ID" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Der Host wurde mit ungültigen OAuth-Anmeldedaten konfiguriert." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Der Host, der auf dem Anmeldebildschirm für die Konsole ausgeführt wird, wurde heruntergefahren, um den Vorhangmodus zu unterstützen, indem zu einem Host in einer nutzerspezfischen Sitzung gewechselt wurde." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Der Host wird neu gestartet, um eine Richtlinienänderung zu übernehmen." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Die Richtlinie konnte vom Host nicht gelesen werden." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Der Host wurde heruntergefahren." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Nicht erkannter Hostfehler: $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ungültiger Hostinhaber" + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Optionen" + }, + "OUTGOING_CONNECTIONS": { + "message": "Von diesem Computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Für die folgenden Clients wurde ein Pairing mit diesem Computer durchgeführt. Die Clients können ohne PIN eine Verbindung herstellen. Sie können diese Berechtigung jederzeit aufheben, entweder einzeln oder für alle Clients." + }, + "PAIRED_CLIENT_DATE": { + "message": "Pairing-Datum" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Die PIN muss in beiden Feldern identisch sein." + }, + "PIN_MESSAGE": { + "message": "Bitte geben Sie Ihre PIN für $1$ ein.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Geben Sie Ihre PIN für den Remote-Computer ein." + }, + "PRODUCT_DESCRIPTION": { + "message": "Greifen Sie sicher über das Internet auf andere Computer zu oder gewähren Sie anderen Nutzern Zugriff auf Ihren Computer." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Erneut verbinden" + }, + "REMEMBER_PIN": { + "message": "Beim Verbinden des Geräts mit diesem Host nicht mehr nach der PIN fragen" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Zentrale Bibliothek" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Desktop-Integrationsprozess" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Anwendung, die Befehle an den Host von Chrome Remote Desktop weitergibt" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Host-Prozess" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Nativer Nachrichtenhost zur Verwaltung von Remoting-Host" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Nativer Nachrichtenhost für Remoteunterstützung" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Remoting-Prozess für Sicherheitsschlüssel" + }, + "RESIZE_TO_CLIENT": { + "message": "Desktop-Größe anpassen" + }, + "RESTART_BUTTON": { + "message": "Jetzt neu starten" + }, + "RESTORE_WINDOW": { + "message": "Fenster wiederherstellen" + }, + "RETRY": { + "message": "Wiederholen" + }, + "SCREEN_OPTIONS": { + "message": "Optionen" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Strg-Alt-Entf senden" + }, + "SEND_FEEDBACK": { + "message": "Problem melden..." + }, + "SEND_KEYS": { + "message": "Eingabe senden" + }, + "SEND_PRINT_SCREEN": { + "message": "Druck senden" + }, + "SERVICE_DESCRIPTION": { + "message": "Dieser Dienst ermöglicht eingehende Verbindungen von Chrome Remote Desktop-Clients." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Diese Einstellung wird von Ihren Domainrichtlinien verwaltet." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Teilen" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Abbrechen" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Möchten Sie diesen Computer für einen anderen Nutzer zur Ansicht und Steuerung freigeben?" + }, + "SHOW_STATS": { + "message": "Statistiken anzeigen" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Statistiken anzeigen (Verbindung: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Größe anpassen" + }, + "SIGN_IN_BUTTON": { + "message": "Anmelden" + }, + "SIGN_OUT_BUTTON": { + "message": "Abmelden" + }, + "STOP_SHARING_BUTTON": { + "message": "Freigabe beenden" + }, + "SURVEY_INVITATION": { + "message": "Möchten Sie uns helfen, Chrome Remote Desktop zu verbessern? $1$Nehmen Sie an der Umfrage teil.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Zeit" + }, + "TOGGLE_STATS": { + "message": "Statistiken anzeigen" + }, + "TOOLTIP_CONNECT": { + "message": "Mit $1$ verbinden", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Remote-Verbindungen zu diesem Computer deaktivieren" + }, + "TOOLTIP_REFRESH": { + "message": "Liste der Hosts aktualisieren" + }, + "TOOLTIP_RENAME": { + "message": "Computernamen bearbeiten" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (veraltet)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konto" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Bestätigen Sie unten Ihr Konto und Ihre PIN, um Zugriff über Chrome Remote Desktop zu gewähren." + }, + "WARNING_NAT_DISABLED": { + "message": "Hinweis: Die Richtlinieneinstellungen erlauben nur Verbindungen zwischen Computern in Ihrem Netzwerk." + }, + "WARNING_NOT_WINDOWED": { + "message": "HINWEIS: Sie können in Chrome Remote Desktop die Option zum Öffnen als Fenster einstellen, damit alle Tastenkombinationen verfügbar sind." + }, + "WHY_IS_THIS_SAFE": { + "message": "Warum ist dieser Vorgang sicher?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Fenster" + }, + "WORKING": { + "message": "Vorgang läuft..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/el/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/el/messages.json new file mode 100644 index 000000000000..2051a75b114d --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/el/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Αποδοχή και εγκατάσταση" + }, + "ACCESS_CODE": { + "message": "Κωδικός Ï€Ïόσβασης" + }, + "ACCESS_CODE_TIMER": { + "message": "Αυτός ο κωδικός Ï€Ïόσβασης θα λήξει σε $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Σχόλια" + }, + "ALL_CONNECTIONS": { + "message": "Όλες οι συνδέσεις" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "ΠληκτÏολογήστε ξανά το PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "ΑκÏÏωση" + }, + "CLEAR_HISTORY": { + "message": "ΔιαγÏαφή ιστοÏικοÏ" + }, + "CLOSE": { + "message": "Κλείσιμο" + }, + "CLOSE_PROMPT": { + "message": "Εάν απομακÏυνθείτε από αυτήν τη σελίδα, θα τεÏματιστείη πεÏίοδος σÏνδεσης στην ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome." + }, + "CLOSE_WINDOW": { + "message": "Κλείσιμο παÏαθÏÏου" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Είστε βέβαιοι ότι θέλετε να απενεÏγοποιήσετε τις απομακÏυσμένες συνδέσεις στον κεντÏικό υπολογιστή $1$; Εάν αλλάξετε γνώμη, θα Ï€Ïέπει να επισκεφτείτε ξανά αυτόν τον υπολογιστή για να ενεÏγοποιήσετε εκ νέου τις συνδέσεις.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Η σÏνδεση απέτυχε" + }, + "CONNECTION_FROM_HEADER": { + "message": "Από" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ΙστοÏικό συνδέσεων" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "ΕπαÏκές" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Καλό" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Χαμηλό" + }, + "CONNECTION_TO_HEADER": { + "message": "ΠÏος" + }, + "CONNECT_ANYWAY": { + "message": "ΣÏνδεση οÏτως ή άλλως" + }, + "CONNECT_BUTTON": { + "message": "ΣÏνδεση" + }, + "CONTINUE_BUTTON": { + "message": "Συνέχεια" + }, + "CONTINUE_PROMPT": { + "message": "Αυτή τη στιγμή Ï€Ïαγματοποιείτε κοινή χÏήση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… υπολογιστή με έναν άλλο χÏήστη. Θέλετε να συνεχίσετε την κοινή χÏήση;" + }, + "CONTROLLER_NAME": { + "message": "ΧειÏιστήÏιο κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome" + }, + "COPYRIGHT": { + "message": "Πνευματικά δικαιώματα 2013 Google Inc. Με την επιφÏλαξη παντός δικαιώματος." + }, + "CREDITS": { + "message": "Συντελεστές" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "ΔιαγÏαφή όλων" + }, + "DELETE_PAIRED_CLIENT": { + "message": "ΔιαγÏαφή" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Για να συνεχίσετε θα Ï€Ïέπει Ï€Ïώτα να παÏαχωÏήσετε εκτεταμένα δικαιώματα Ï€Ïόσβασης στον υπολογιστή σας. Αυτό Ï€Ïέπει να γίνει μόνο μία φοÏά." + }, + "DESCRIPTION_CONNECT": { + "message": "Ζητήστε από το χÏήστη στον υπολογιστή του οποίου, επιθυμείτε να αποκτήσετε Ï€Ïόσβαση να κάνει κλικ στην επιλογή \"$1$\" και να σας δώσει τον κωδικό Ï€Ïόσβασης.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Η ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome σάς επιτÏέπει να μοιÏάζεστε με ασφάλεια τον υπολογιστή σας μέσω ΙστοÏ. Και οι δÏο χÏήστες θα Ï€Ïέπει να εκτελοÏν την εφαÏμογή ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome, η οποία βÏίσκεται στη διεÏθυνση $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Ο απομακÏυσμένος κεντÏικός υπολογιστής ζήτησε τον έλεγχο της ταυτότητάς σας στον ιστότοπο ενός Ï„Ïίτου μέÏους. Για να συνεχίσετε, θα Ï€Ïέπει να παÏαχωÏήσετε στην ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome επιπλέον άδειες για Ï€Ïόσβαση σε αυτήν τη διεÏθυνση:" + }, + "DISABLE_HOST": { + "message": "ΑπενεÏγοποίηση" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "ΑποσÏνδεση" + }, + "DISPLAY_SERVICE_NAME": { + "message": "ΥπηÏεσία ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome" + }, + "DURATION_HEADER": { + "message": "ΔιάÏκεια" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Δεν έχετε δικαίωμα εκτέλεσης αυτής της εφαÏμογής." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Αποτυχία ελέγχου ταυτότητας. Συνδεθείτε ξανά στο Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Λείπουν οÏισμένα απαιτοÏμενα στοιχεία. Βεβαιωθείτε ότι έχετε εγκαταστήσει την πιο Ï€Ïόσφατη έκδοση του Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï ÎºÎ±Î¹ δοκιμάστε ξανά." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "ΠαÏουσιάστηκε σφάλμα δικτÏου. Θα επανεκκινήσουμε την εφαÏμογή όταν η συσκευή σας συνδεθεί ξανά στο διαδίκτυο." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Ο απομακÏυσμένος υπολογιστής απέτυχε να Ï€Ïοετοιμάσει την πεÏίοδο σÏνδεσης. Αν το Ï€Ïόβλημα δεν επιλυθεί, Ï€Ïοσπαθήστε να διαμοÏφώσετε τον κεντÏικό υπολογιστή ξανά." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Ο απομακÏυσμένος υπολογιστής δεν ανταποκÏίνεται στα αιτήματα σÏνδεσης. Βεβαιωθείτε ότι είναι συνδεδεμένος και δοκιμάστε ξανά." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Έχει γίνει Ï€ÏοσωÏινός αποκλεισμός των συνδέσεων στον απομακÏυσμένο υπολογιστή επειδή κάποιος επιχείÏησε να συνδεθεί σε αυτόν με μη έγκυÏο PIN. ΠÏοσπαθήστε ξανά αÏγότεÏα." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Αποτυχία εγγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… υπολογιστή." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Εντοπίστηκε μη συμβατή έκδοση Ï€Ïωτοκόλλου. Βεβαιωθείτε ότι διαθέτετε την πιο Ï€Ïόσφατη έκδοση του Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï ÎºÎ±Î¹ στους δÏο υπολογιστές και Ï€Ïοσπαθήστε ξανά." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Ο κωδικός Ï€Ïόσβασης δεν είναι έγκυÏος. Δοκιμάστε ξανά." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Οι Ïυθμίσεις πολιτικής δεν επιτÏέπουν την κοινή χÏήση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… υπολογιστή ως κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome. Για βοήθεια επικοινωνήστε με τον διαχειÏιστή του συστήματός σας." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Η απομακÏυσμένη πεÏίοδος σÏνδεσης έχει λήξει." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Λείπουν οÏισμένα απαιτοÏμενα στοιχεία. Βεβαιωθείτε ότι εκτελείτε την πιο Ï€Ïόσφατη έκδοση του Chrome και δοκιμάστε ξανά." + }, + "ERROR_NACL_DISABLED": { + "message": "Λείπουν οÏισμένα απαιτοÏμενα στοιχεία. Μεταβείτε στη διεÏθυνση chrome://plugins και βεβαιωθείτε ότι το Native Client είναι ενεÏγοποιημένο." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Ένα απαιτοÏμενο στοιχείο σταμάτησε να λειτουÏγεί. ΑναφέÏετε αυτό το Ï€Ïόβλημα στους Ï€ÏογÏαμματιστές." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Δεν ήταν δυνατή η σÏνδεση στο δίκτυο. Βεβαιωθείτε ότι η συσκευή σας έχει συνδεθεί στο διαδίκτυο." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Δεν είστε συνδεδεμένοι στο Chrome. Συνδεθείτε και δοκιμάστε ξανά." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Δεν έχετε δικαίωμα εκτέλεσης αυτής της ενέÏγειας." + }, + "ERROR_NOT_FOUND": { + "message": "Το αντικείμενο που ζητήθηκε δεν υπάÏχει." + }, + "ERROR_P2P_FAILURE": { + "message": "Δεν ήταν δυνατή η επικοινωνία με τον κεντÏικό υπολογιστή. Αυτό ενδέχεται να οφείλεται στη διαμόÏφωση του δικτÏου που χÏησιμοποιείτε." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Η υπηÏεσία μας δεν είναι διαθέσιμη Ï€ÏοσωÏινά. Δοκιμάστε ξανά αÏγότεÏα." + }, + "ERROR_UNEXPECTED": { + "message": "ΠαÏουσιάστηκε μη αναμενόμενο σφάλμα. ΑναφέÏετε αυτό το Ï€Ïόβλημα στους Ï€ÏογÏαμματιστές." + }, + "EXIT_FULL_SCREEN": { + "message": "Έξοδος από πλήÏη οθόνη" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Δεν ήταν δυνατή η επαναφοÏά της εφαÏμογής. Εξακολουθείτε να μποÏείτε να στείλετε μια αναφοÏά σφάλματος." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Κάντε επαναφοÏά της εφαÏμογής. Θα χάσετε τυχόν μη αποθηκευμένες εÏγασίες." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Δεν μποÏÏŽ να ανοίξω την εφαÏμογή." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Η εφαÏμογή είναι Ï€Î¿Î»Ï Î±Ïγή." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Δεν μποÏÏŽ να ανοίξω αÏχεία μου στο Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Δεν μποÏÏŽ να δω τα αÏχεία μου που είναι αποθηκευμένα στο διαδίκτυο στο Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Έχω Ï€Ïόβλημα με το πληκτÏολόγιο ή το ποντίκι μου." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Για να μας διευκολÏνετε να λÏσουμε το Ï€Ïόβλημά σας, πείτε μας τι πήγε στÏαβά:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Κάτι άλλο." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Επιλογή…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Για να μποÏέσουμε να επικοινωνήσουμε μαζί σας για πεÏαιτέÏω πληÏοφοÏίες, η διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου σας θα συμπεÏιληφθεί σε οποιαδήποτε σχόλια υποβάλετε." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "ΑναφοÏά Ï€Ïοβλήματος" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "ΣυμπεÏιλάβετε αÏχεία καταγÏαφής της εφαÏμογής για να μας βοηθήσετε να επιλÏσουμε το Ï€Ïόβλημά σας (τα αÏχεία καταγÏαφής ενδεχομένως να πεÏιλαμβάνουν Ï€Ïοσωπικές πληÏοφοÏίες)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Τα αÏχεία καταγÏαφής της εφαÏμογής πεÏιλαμβάνουν Ï€Ïοσωπικές πληÏοφοÏίες, όπως την ταυτότητά σας (διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου) και τα ονόματα και τις ιδιότητες αÏχείων και φακέλων στο Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Αυτές οι πληÏοφοÏίες χÏησιμοποιοÏνται μόνο για τη διάγνωση του Ï€Ïοβλήματος που αναφέÏετε, είναι διαθέσιμες μόνο σε κάποιον που εÏευνά την αναφοÏά σας και δεν διατηÏοÏνται για πεÏισσότεÏες από 30 ημέÏες." + }, + "FOOTER_CONNECTING": { + "message": "Γίνεται σÏνδεση…" + }, + "FOOTER_WAITING": { + "message": "αναμονή για σÏνδεση…" + }, + "FOR_PLATFORM_MAC": { + "message": "Για Mac (έκδοση OS X 10.6 και νεότεÏη)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Για Windows (XP και νεότεÏη έκδοση)" + }, + "FULL_SCREEN": { + "message": "ΠλήÏης οθόνη" + }, + "GET_STARTED": { + "message": "ΈναÏξη" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Αποδοχή" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "ΑπόÏÏιψη" + }, + "HELP": { + "message": "Βοήθεια" + }, + "HOME_ACCESS_BUTTON": { + "message": "ΠÏόσβαση" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "ΠÏοβολή και έλεγχος ενός κοινόχÏηστου υπολογιστή." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "ΜποÏείτε να αποκτήσετε ασφαλή Ï€Ïόσβαση σε αυτόν τον υπολογιστή χÏησιμοποιώντας την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Αλλαγή PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Αυτήν τη στιγμή αυτός ο υπολογιστής είναι κοινόχÏηστος με έναν διαφοÏετικό λογαÏιασμό:" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ΠÏοβολή/επεξεÏγασία" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Αυτός ο υπολογιστής έχει διαμοÏφωθεί έτσι ώστε να επιτÏέπει σε έναν ή πεÏισσότεÏους υπολογιστές-πελάτες να συνδέονται χωÏίς την εισαγωγή PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "ΕνεÏγοποίηση απομακÏυσμένων συνδέσεων" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Θα Ï€Ïέπει να ενεÏγοποιήσετε τις απομακÏυσμένες συνδέσεις εάν επιθυμείτε να χÏησιμοποιήσετε την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome για Ï€Ïόσβαση σε αυτόν τον υπολογιστή." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "ΑπενεÏγοποίηση απομακÏυσμένων συνδέσεων" + }, + "HOME_SHARE_BUTTON": { + "message": "Κοινή χÏήση" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "ΠÏαγματοποιήστε κοινή χÏήση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… υπολογιστή ώστε ένας άλλος χÏήστης να έχει τη δυνατότητα να βλέπει και να ελέγχει τον υπολογιστή σας." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(αυτή η λειτουÏγία δεν είναι ακόμα διαθέσιμη για τον υπολογιστή σας)" + }, + "HOST_CATEGORY": { + "message": "ΚεντÏικός υπολογιστής" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Δεν επιτÏέπεται η Ï€Ïόσβαση για τον υπολογιστή-πελάτη: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Συνδεδεμένος υπολογιστής-πελάτης: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Ο υπολογιστής-πελάτης αποσυνδέθηκε: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "ΔιεÏθυνση IP ÎºÎ±Î½Î±Î»Î¹Î¿Ï Î³Î¹Î± υπολογιστή-πελάτη: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Για να ενεÏγοποιήσετε τις απομακÏυσμένες συνδέσεις σε έναν διαφοÏετικό υπολογιστή, εγκαταστήστε την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome σε αυτόν και κάντε κλικ στο κουμπί \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Δεν έχει γίνει εγγÏαφή υπολογιστών. Για να ενεÏγοποιήσετε τις απομακÏυσμένες συνδέσεις σε έναν υπολογιστή, εγκαταστήστε την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome σε αυτόν και κάντε κλικ στο κουμπί \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Συνδεθήκατε Ï€Ïοηγουμένως ως $1$ ($2$). Για να αποκτήσετε Ï€Ïόσβαση στους υπολογιστές σας με αυτόν το λογαÏιασμό, $3$συνδεθείτε στο Google Chrome$4$ με αυτόν το λογαÏιασμό και εγκαταστήστε εκ νέου την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Οι ενημεÏώσεις Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï ÏƒÏ…Î½Î®Î¸Ï‰Ï‚ Ï€ÏαγματοποιοÏνται αυτόματα, αλλά σε οÏισμένες σπάνιες πεÏιπτώσεις ενδέχεται να αποτÏχουν. Η ενημέÏωση του Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï Î¸Î± Ï€Ïέπει να διαÏκεί λιγότεÏο από μεÏικά λεπτά και μποÏεί να Ï€Ïαγματοποιηθεί κατά την απομακÏυσμένη σÏνδεση με τον υπολογιστή σας." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Η λειτουÏγία \"ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome\" στον υπολογιστή $1$ δεν είναι ενημεÏωμένη και θα Ï€Ïέπει να ενημεÏωθεί.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Βοηθήστε μας να βελτιώσουμε την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome επιτÏέποντάς μας να συγκεντÏώσουμε στατιστικά στοιχεία χÏήσης και αναφοÏές σφαλμάτων." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Για να Ï€ÏοστατεÏσετε την Ï€Ïόσβαση σε αυτόν τον υπολογιστή, επιλέξτε ένα PIN το οποίο αποτελείται από $1$τουλάχιστον έξι ψηφία$2$. Αυτό το PIN θα ζητείται όταν συνδέεστε από άλλη τοποθεσία.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Αποτυχία έναÏξης της υπηÏεσίας απομακÏυσμένης Ï€Ïόσβασης." + }, + "HOST_SETUP_INSTALL": { + "message": "Το Chrome Ï€Ïαγματοποιεί λήψη του Ï€ÏογÏάμματος εγκατάστασης κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® για την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome. Î‘Ï†Î¿Ï Î¿Î»Î¿ÎºÎ»Î·Ïωθεί η λήψη, εκτελέστε το Ï€ÏόγÏαμμα εγκατάστασης Ï€Ïιν να συνεχίσετε." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Εκτελέστε το Ï€ÏόγÏαμμα εγκατάστασης Ï€Ïιν να συνεχίσετε." + }, + "HOST_SETUP_STARTED": { + "message": "Έχουν ενεÏγοποιηθεί οι απομακÏυσμένες συνδέσεις για αυτόν τον υπολογιστή." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Ελέγξτε τις Ïυθμίσεις διαχείÏισης ενέÏγειας του υπολογιστή σας και βεβαιωθείτε ότι δεν έχει διαμοÏφωθεί να τίθεται σε αναστολή λειτουÏγίας όταν είναι αδÏανής." + }, + "HOST_SETUP_STARTING": { + "message": "ΕνεÏγοποίηση απομακÏυσμένων συνδέσεων για αυτόν τον υπολογιστή…" + }, + "HOST_SETUP_STOPPED": { + "message": "Έχουν απενεÏγοποιηθεί οι απομακÏυσμένες συνδέσεις για αυτόν τον υπολογιστή." + }, + "HOST_SETUP_STOPPING": { + "message": "ΑπενεÏγοποίηση απομακÏυσμένων συνδέσεων για αυτόν τον υπολογιστή…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Αποτυχία απενεÏγοποίησης απομακÏυσμένης Ï€Ïόσβασης σε αυτόν τον υπολογιστή. ΠÏοσπαθήστε ξανά αÏγότεÏα." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Με τη λήψη του Ï€ÏογÏάμματος εγκατάστασης κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome, αποδέχεστε τους $1$ÎŒÏους ΠαÏοχής ΥπηÏεσιών$4 της Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Το PIN σας έχει ενημεÏωθεί." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Αποτυχία ενημέÏωσης του PIN. ΠÏοσπαθήστε ξανά αÏγότεÏα." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Γίνεται ενημέÏωση του PIN για αυτόν τον υπολογιστή…" + }, + "HOST_STARTED": { + "message": "Ο κεντÏικός υπολογιστής ξεκίνησε για το χÏήστη: %1." + }, + "HOST_STOPPED": { + "message": "Ο κεντÏικός υπολογιστής σταμάτησε." + }, + "IDLE_CONTINUE": { + "message": "Συνέχεια" + }, + "IDLE_DISCONNECT": { + "message": "ΑποσÏνδεση Ï„ÏŽÏα" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Η πεÏίοδος σÏνδεσής σας στο $1$ ήταν ανενεÏγή για αÏκετό καιÏÏŒ και θα τεÏματιστεί σÏντομα.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Σε αυτόν τον υπολογιστή." + }, + "INSTALLER_DOWNLOAD": { + "message": "Λήψη Ï€ÏογÏάμματος εγκατάστασης κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Για να ξεκινήσετε την κοινή χÏήση της επιφάνειας εÏγασίας σας, δώστε τον παÏακάτω κωδικό Ï€Ïόσβασης στον χÏήστη που θα σας βοηθήσει." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Μόλις καταχωÏίσουν τον κωδικό, η πεÏίοδος σÏνδεσης κοινής χÏήσης θα ξεκινήσει." + }, + "INVALID_PIN": { + "message": "Εισαγάγετε ένα PIN που να αποτελείται από έξι ή πεÏισσότεÏα ψηφία." + }, + "IT2ME_FIRST_RUN": { + "message": "Κοινή χÏήση οθόνης Î¼ÎµÏ„Î±Î¾Ï Ï‡Ïηστών, ιδανική για απομακÏυσμένη τεχνική υποστήÏιξη." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Διατάξεις πληκτÏολογίου" + }, + "LABEL_CONNECTED": { + "message": "Συνδέθηκε με:" + }, + "LAST_ONLINE": { + "message": "$1$ (τελευταία σÏνδεση $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Μάθετε πώς." + }, + "LEARN_MORE": { + "message": "Μάθετε πεÏισσότεÏα." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "ΠÏοτιμήσεις κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "ΚεντÏικός υπολογιστής\nΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "ΠÏόγÏαμμα απεγκατάστασης κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "ΧÏήση Î´ÎµÎ¾Î¹Î¿Ï Ctrl για το πλήκτÏο Win (⌘ σε Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Μεγιστοποίηση παÏαθÏÏου" + }, + "ME2ME_FIRST_RUN": { + "message": "Αποκτήστε Ï€Ïόσβαση στον υπολογιστή σας από οπουδήποτε." + }, + "MESSAGE_GENERATING": { + "message": "ΔημιουÏγία ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Η πεÏίοδος σÏνδεσης στην ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome τεÏματίστηκε." + }, + "MESSAGE_SHARED": { + "message": "Αυτήν τη στιγμή Ï€Ïαγματοποιείται κοινή χÏήση της επιφάνειας εÏγασίας σας με τον χÏήστη $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Ελαχιστοποίηση παÏαθÏÏου" + }, + "MODE_AUTHORIZE": { + "message": "Εξουσιοδότηση" + }, + "MODE_IT2ME": { + "message": "ΑπομακÏυσμένη βοήθεια" + }, + "MODE_ME2ME": { + "message": "Οι υπολογιστές μου" + }, + "NEW_WINDOW": { + "message": "Îέο παÏάθυÏο…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Όλοι οι συζευγμένοι υπολογιστές-πελάτες έχουν διαγÏαφεί." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Η ενσωμάτωση επιφάνειας εÏγασίας δεν υποστηÏίζεται σε αυτήν την πλατφόÏμα. Εξακολουθείτε να μποÏείτε να χÏησιμοποιήσετε την εφαÏμογή, αλλά η εμπειÏία χÏήστη θα είναι υποβαθμισμένη." + }, + "OFFLINE": { + "message": "$1$ (εκτός σÏνδεσης)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Η Ï€Ïοετοιμασία του κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î® απέτυχε." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Μη έγκυÏη διαμόÏφωση κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Μη έγκυÏος τομέας κατόχου κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Μη έγκυÏο αναγνωÏιστικό κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Ο κεντÏικός υπολογιστής διαμοÏφώθηκε με μη έγκυÏα διαπιστευτήÏια OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Ο κεντÏικός υπολογιστής που εκτελείται στην οθόνη σÏνδεσης της κονσόλας τεÏματίστηκε για να υποστηÏίξει τη λειτουÏγία κουÏτίνας, με την εναλλαγή σε έναν υπολογιστή που εκτελείται σε μια πεÏίοδο σÏνδεσης συγκεκÏιμένου χÏήστη." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Γίνεται επανεκκίνηση του κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®, Ï€Ïοκειμένου να εφαÏμοστεί μια αλλαγή πολιτικής." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Αποτυχία ανάγνωσης της πολιτικής από τον κεντÏικό υπολογιστή." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Ο κεντÏικός υπολογιστής τεÏματίστηκε." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Άγνωστο σφάλμα κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®: $1$ .", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Μη έγκυÏος κάτοχος κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Επιλογές" + }, + "OUTGOING_CONNECTIONS": { + "message": "Από αυτόν τον υπολογιστή" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Έχει γίνει σÏζευξη των παÏακάτω υπολογιστών-πελατών με αυτόν τον υπολογιστή και είναι δυνατή η σÏνδεση χωÏίς εισαγωγή PIN. ΜποÏείτε να ανακαλέσετε αυτήν την άδεια ανά πάσα στιγμή, είτε μεμονωμένα είτε για όλους τους υπολογιστές-πελάτες." + }, + "PAIRED_CLIENT_DATE": { + "message": "ΣÏζευξη ημεÏομηνίας" + }, + "PAIRED_CLIENT_NAME": { + "message": "Υπολογιστής-πελάτης" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Εισαγάγετε το ίδιο PIN και στα δÏο πλαίσια." + }, + "PIN_MESSAGE": { + "message": "Εισαγάγετε το PIN σας για τον κεντÏικό υπολογιστή $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "ΚαταχωÏίστε το PIN σας για τον απομακÏυσμένο υπολογιστή." + }, + "PRODUCT_DESCRIPTION": { + "message": "Αποκτήστε Ï€Ïόσβαση σε άλλους υπολογιστές ή να επιτÏέπεται σε έναν άλλο χÏήστη η ασφαλής Ï€Ïόσβαση στον υπολογιστή σας μέσω Διαδικτ." + }, + "PRODUCT_NAME": { + "message": "ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Ροή εφαÏμογής Chrome" + }, + "RECONNECT": { + "message": "ΕπανασÏνδεση" + }, + "REMEMBER_PIN": { + "message": "Îα μην απαιτείται ξανά η εισαγωγή PIN κατά τη σÏνδεση σε αυτόν τον κεντÏικό υπολογιστή από αυτήν τη συσκευή." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Βασική βιβλιοθήκη" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Διαδικασία ενοποίησης επιφάνειας εÏγασίας" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "ΕφαÏμογή για έκδοση εντολών στον κεντÏικό υπολογιστή απομακÏυσμένης επιφάνειας εÏγασίας Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Διαδικασία κεντÏÎ¹ÎºÎ¿Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„Î®" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Εγγενής κεντÏικός υπολογιστής ανταλλαγής μηνυμάτων για τη διαχείÏιση της απομακÏυσμένης επικοινωνίας με τον κεντÏικό υπολογιστή" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Εγγενής κεντÏικός υπολογιστής ανταλλαγής μηνυμάτων για απομακÏυσμένη παÏοχή βοήθειας" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Διαδικασία απομακÏυσμένης επικοινωνίας ÎšÎ»ÎµÎ¹Î´Î¹Î¿Ï Î±ÏƒÏ†Î±Î»ÎµÎ¯Î±Ï‚" + }, + "RESIZE_TO_CLIENT": { + "message": "Αλλαγή μεγέθους της επιφάνειας εÏγασίας για Ï€ÏοσαÏμογή" + }, + "RESTART_BUTTON": { + "message": "Άμεση επανεκκίνηση" + }, + "RESTORE_WINDOW": { + "message": "ΕπαναφοÏά παÏαθÏÏου" + }, + "RETRY": { + "message": "Δοκιμάστε ξανά" + }, + "SCREEN_OPTIONS": { + "message": "Επιλογές οθόνης" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Αποστολή Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "ΑναφοÏά ζητήματος…" + }, + "SEND_KEYS": { + "message": "ΠλήκτÏα αποστολής" + }, + "SEND_PRINT_SCREEN": { + "message": "Αποστολή PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Αυτή η υπηÏεσία ενεÏγοποιεί τις εισεÏχόμενες συνδέσεις από υπολογιστές-πελάτες ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Η διαχείÏιση αυτής της ÏÏθμισης γίνεται από την πολιτική του τομέα σας." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Κοινή χÏήση" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ΑκÏÏωση" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Θέλετε να μοιÏαστείτε αυτόν τον υπολογιστή με έναν άλλο χÏήστη, ο οποίος θα μποÏεί να τον βλέπει και να τον ελέγχει;" + }, + "SHOW_STATS": { + "message": "Εμφάνιση στατιστικών στοιχείων" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Εμφάνιση στατιστικών στοιχείων (σÏνδεση: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ΣμίκÏυνση για Ï€ÏοσαÏμογή" + }, + "SIGN_IN_BUTTON": { + "message": "ΣÏνδεση" + }, + "SIGN_OUT_BUTTON": { + "message": "Έξοδος" + }, + "STOP_SHARING_BUTTON": { + "message": "Διακοπή κοινής χÏήσης" + }, + "SURVEY_INVITATION": { + "message": "Θέλετε να συμβάλλετε στη βελτίωση της ΑπομακÏυσμένης επιφάνειας εÏγασίας του Chrome; $1$ΠάÏτε μέÏος στην έÏευνα.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ÎÏα" + }, + "TOGGLE_STATS": { + "message": "Εμφάνιση στατιστικών στοιχείων" + }, + "TOOLTIP_CONNECT": { + "message": "ΣÏνδεση στον κεντÏικό υπολογιστή $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ΑπενεÏγοποίηση απομακÏυσμένων συνδέσεων σε αυτόν τον υπολογιστή" + }, + "TOOLTIP_REFRESH": { + "message": "Ανανέωση της λίστας κεντÏικών υπολογιστών" + }, + "TOOLTIP_RENAME": { + "message": "ΕπεξεÏγασία ονόματος υπολογιστή" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (μη ενημεÏωμένη έκδοση)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "ΛογαÏιασμός" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Επιβεβαιώστε το λογαÏιασμό σας και τον κωδικό σας PIN παÏακάτω, για να επιτÏέψετε την Ï€Ïόσβαση μέσω ΑπομακÏυσμένης επιφάνειας εÏγασίας Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "ΣΗΜΕΙΩΣΗ: Οι Ïυθμίσεις πολιτικής επιτÏέπουν συνδέσεις μόνο Î¼ÎµÏ„Î±Î¾Ï Ï…Ï€Î¿Î»Î¿Î³Î¹ÏƒÏ„ÏŽÎ½ που ανήκουν στο δίκτυό σας." + }, + "WARNING_NOT_WINDOWED": { + "message": "ΣΗΜΕΙΩΣΗ: για να διασφαλίσετε ότι όλες οι συντομεÏσεις πληκτÏολογίου είναι διαθέσιμες, μποÏείτε να διαμοÏφώσετε την ΑπομακÏυσμένη επιφάνεια εÏγασίας Chrome στη ÏÏθμιση \"Άνοιγμα ως παÏάθυÏο\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "Για ποιον λόγο αυτή η ενέÏγεια είναι ασφαλής;" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Σε λειτουÏγία…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en/messages.json new file mode 100644 index 000000000000..f9c1678d12ff --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Accept and Install" + }, + "ACCESS_CODE": { + "message": "Access code" + }, + "ACCESS_CODE_TIMER": { + "message": "This access code will expire in $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "All connections" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Re-type PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancel" + }, + "CLEAR_HISTORY": { + "message": "Clear history" + }, + "CLOSE": { + "message": "Close" + }, + "CLOSE_PROMPT": { + "message": "Leaving this page will end your Chrome Remote Desktop session." + }, + "CLOSE_WINDOW": { + "message": "Close window" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Are you sure you want to disable remote connections to $1$? If you change your mind, you'll need to visit that computer to re-enable connections.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Connection failed" + }, + "CONNECTION_FROM_HEADER": { + "message": "From" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Connection History" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Fair" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Good" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Poor" + }, + "CONNECTION_TO_HEADER": { + "message": "To" + }, + "CONNECT_ANYWAY": { + "message": "Connect anyway" + }, + "CONNECT_BUTTON": { + "message": "Connect" + }, + "CONTINUE_BUTTON": { + "message": "Continue" + }, + "CONTINUE_PROMPT": { + "message": "You are currently sharing this machine with another user. Do you want to continue sharing?" + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktop Host Controller" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. All Rights Reserved." + }, + "CREDITS": { + "message": "Credits" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Delete all" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Delete" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "To continue you must first grant extended access permissions to your computer. You only have to do this once." + }, + "DESCRIPTION_CONNECT": { + "message": "Ask the user whose computer you wish to access to click “$1$†and give you the access code.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop allows you to securely share your computer over the Web. Both users must be running the Chrome Remote Desktop app, which can be found at $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "The remote host requires you to authenticate to a third-party website. To continue, you must grant Chrome Remote Desktop additional permissions to access this address:" + }, + "DISABLE_HOST": { + "message": "Disable" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Disconnect" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktop Service" + }, + "DURATION_HEADER": { + "message": "Duration" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "You do not have permission to run this application." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Authentication failed. Please sign in to Chrome again." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Some required components are missing. Please make sure you have installed the latest version of the software and try again." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "A network error occurred. We will restart the app when your device is on-line again." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "The remote computer has failed to initialize the session. If problem persist please try to configure the host again." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "The remote computer is not responding to connection requests. Please verify that it is online and try again." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Connections to the remote computer are temporarily blocked because somebody was trying to connect to it with invalid PIN. Please try again later." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Failed to register this computer." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "An incompatible protocol version was detected. Please make sure that you have the latest version of the software installed on both computers and try again." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "The access code is invalid. Please try again." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Policy settings do not permit sharing this computer as a Chrome Remote Desktop host. Contact your system administrator for assistance." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "The remote session has expired." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Some required components are missing. Please make sure you're running the latest version of Chrome and try again." + }, + "ERROR_NACL_DISABLED": { + "message": "Some required components are missing. Please go to chrome://plugins and make sure Native Client is enabled." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "A required component has stopped working. Please report this problem to the developers." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Could not connect to the network. Please check that your device is on-line." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "You are not signed in to Chrome. Please sign in and try again." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "You do not have permission to perform that action." + }, + "ERROR_NOT_FOUND": { + "message": "The requested object does not exist." + }, + "ERROR_P2P_FAILURE": { + "message": "Unable to reach the host. This is probably due to the configuration of the network you are using." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "The service is temporarily unavailable. Please try again later." + }, + "ERROR_UNEXPECTED": { + "message": "An unexpected error occurred. Please report this problem to the developers." + }, + "EXIT_FULL_SCREEN": { + "message": "Exit full screen" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Could not reset the application. You can still send a bug report." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Reset the application. You will lose any unsaved work." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "I can't open the application." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "The application is too slow." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "I can't open my Google Drive files." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "I can't see my saved files on-line in Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "I'm having problems with my keyboard or mouse." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "To help us solve your problem, please tell us what went wrong:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Something else." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Select…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "To allow us to contact you for further information, your email address will be included in any feedback you submit." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Report an issue" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Include application logs to help us resolve your problem (logs may include private information)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Application logs may include private information, including your identity (email address) and the names and properties of files and folders in Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "This information is used only for diagnosing the problem you are reporting, is available only to someone investigating your report, and is retained for no more than 30 days." + }, + "FOOTER_CONNECTING": { + "message": "Connecting…" + }, + "FOOTER_WAITING": { + "message": "waiting for connection…" + }, + "FOR_PLATFORM_MAC": { + "message": "For Mac (OS X 10.6 and above)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "For Windows (XP and above)" + }, + "FULL_SCREEN": { + "message": "Full screen" + }, + "GET_STARTED": { + "message": "Get started" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accept" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Decline" + }, + "HELP": { + "message": "Help" + }, + "HOME_ACCESS_BUTTON": { + "message": "Access" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "See and control a shared computer." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "You may securely access this computer using Chrome Remote Desktop." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Change PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "This computer is currently shared under a different account." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "View/edit" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "This computer is configured to allow one or more clients to connect without entering a PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Enable remote connections" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "You must enable remote connections if you want to use Chrome Remote Desktop to access this computer." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Disable remote connections" + }, + "HOME_SHARE_BUTTON": { + "message": "Share" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Share this computer for another user to see and control." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(this feature is not yet available for your computer)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Access denied for client: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client connected: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client disconnected: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Channel IP for client: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "To enable remote connections to a different computer, install Chrome Remote Desktop there and click “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "You have no computers registered. To enable remote connections to a computer, install Chrome Remote Desktop there and click “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "You have previously signed in as $1$ ($2$). To access your computers in that account, $3$sign in to Google Chrome$4$ with that account and re-install Chrome Remote Desktop.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Software updates usually happen automatically, but can fail in some rare cases. Updating the software should take no more than a few minutes and can be done while connected to your computer remotely." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop on $1$ is out-of-date and needs to be updated.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Help us improve Chrome Remote Desktop by allowing us to collect usage statistics and crash reports." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "To protect access to this computer, please choose a PIN of $1$at least six digits$2$. This PIN will be required when connecting from another location.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Failed to start remote access service." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome is downloading the Chrome Remote Desktop Host installer. Once the download is complete, please run the installer before continuing." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Please run the installer before continuing." + }, + "HOST_SETUP_STARTED": { + "message": "Remote connections for this computer have been enabled." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Please check your computer's power management settings and ensure that it is not configured to sleep when idle." + }, + "HOST_SETUP_STARTING": { + "message": "Enabling remote connections for this computer…" + }, + "HOST_SETUP_STOPPED": { + "message": "Remote connections for this computer have been disabled." + }, + "HOST_SETUP_STOPPING": { + "message": "Disabling remote connections for this computer…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Failed to disable remote access to this computer. Please try again later." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "By downloading the Chrome Remote Desktop Host Installer, you are agreeing to the Google $1$Terms of Service$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Your PIN has been updated." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Failed to update the PIN. Please try again later." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "The PIN for this computer is being updated…" + }, + "HOST_STARTED": { + "message": "Host started for user: %1." + }, + "HOST_STOPPED": { + "message": "Host stopped." + }, + "IDLE_CONTINUE": { + "message": "Continue" + }, + "IDLE_DISCONNECT": { + "message": "Disconnect now" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Your $1$ session has been inactive for a while and will be disconnected shortly.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "To this computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Download Chrome Remote Desktop Host Installer" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "To begin sharing your desktop, give the access code below to the person who will be assisting you." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Once they enter the code your sharing session will begin." + }, + "INVALID_PIN": { + "message": "Please enter a PIN consisting of six or more digits." + }, + "IT2ME_FIRST_RUN": { + "message": "User-to-user screen sharing, perfect for remote technical support." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Keyboard layouts" + }, + "LABEL_CONNECTED": { + "message": "Connected:" + }, + "LAST_ONLINE": { + "message": "$1$ (last online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Learn how." + }, + "LEARN_MORE": { + "message": "Learn more." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Preferences" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop Host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Uninstaller" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Use right Ctrl for Win key (⌘ on Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximize window" + }, + "ME2ME_FIRST_RUN": { + "message": "Access your own computer from anywhere." + }, + "MESSAGE_GENERATING": { + "message": "Generating access code…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Your Chrome Remote Desktop session has ended." + }, + "MESSAGE_SHARED": { + "message": "Your desktop is currently shared with $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimize window" + }, + "MODE_AUTHORIZE": { + "message": "Authorize" + }, + "MODE_IT2ME": { + "message": "Remote Assistance" + }, + "MODE_ME2ME": { + "message": "My Computers" + }, + "NEW_WINDOW": { + "message": "New window…" + }, + "NO_PAIRED_CLIENTS": { + "message": "All paired clients have been deleted." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Desktop integration is not supported on this platform. You can still use the application, but the user experience will be degraded." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Host initialization failed." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Invalid host configuration." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Invalid host owner domain." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Invalid host id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host is configured with invalid OAuth credentials." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Host running at the console logic screen has shutdown to support curtain mode by switching to a host running in a user-specific session." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host is restarting, to take into account a policy change." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Host failed to read the policy." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host has shut down." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Unrecognized host error: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Invalid host owner." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Options" + }, + "OUTGOING_CONNECTIONS": { + "message": "From this computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "The following clients have been paired with this computer and can connect without supplying a PIN. You can revoke this permission at any time, either individually, or for all clients." + }, + "PAIRED_CLIENT_DATE": { + "message": "Pairing date" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Please enter the same PIN in both boxes." + }, + "PIN_MESSAGE": { + "message": "Please enter your PIN for $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Please enter your PIN for the remote computer." + }, + "PRODUCT_DESCRIPTION": { + "message": "Access other computers or allow another user to access your computer securely over the Internet." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Reconnect" + }, + "REMEMBER_PIN": { + "message": "Don't ask for a PIN again when connecting to this host from this device." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Core Library" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Desktop Integration Process" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Application to issue commands to Chrome remote desktop host." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Host Process" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Native messaging host for remoting host management" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Native messaging host for remote assistance" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Security Key Remoting Process" + }, + "RESIZE_TO_CLIENT": { + "message": "Resize desktop to fit" + }, + "RESTART_BUTTON": { + "message": "Restart now" + }, + "RESTORE_WINDOW": { + "message": "Restore window" + }, + "RETRY": { + "message": "Retry" + }, + "SCREEN_OPTIONS": { + "message": "Screen options" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Send Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Report an issue…" + }, + "SEND_KEYS": { + "message": "Send keys" + }, + "SEND_PRINT_SCREEN": { + "message": "Send PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "This service enables incoming connections from Chrome Remote Desktop clients." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "This setting is managed by your domain policy." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Share" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancel" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Would you like to share this computer for another user to see and control?" + }, + "SHOW_STATS": { + "message": "Show statistics" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Show statistics (connection: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Shrink to fit" + }, + "SIGN_IN_BUTTON": { + "message": "Sign in" + }, + "SIGN_OUT_BUTTON": { + "message": "Sign out" + }, + "STOP_SHARING_BUTTON": { + "message": "Stop Sharing" + }, + "SURVEY_INVITATION": { + "message": "Want to help improve Chrome Remote Desktop? $1$Take the survey.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Time" + }, + "TOGGLE_STATS": { + "message": "Show statistics" + }, + "TOOLTIP_CONNECT": { + "message": "Connect to $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Disable remote connections to this computer" + }, + "TOOLTIP_REFRESH": { + "message": "Refresh the list of hosts" + }, + "TOOLTIP_RENAME": { + "message": "Edit computer name" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (out-of-date)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Account" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Please confirm your account and PIN below to allow access by Chrome Remote Desktop." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTE: Policy settings permit connections only between computers within your network." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTE: To ensure that all keyboard shortcuts are available, you can configure Chrome Remote Desktop to ‘Open as window’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Why is this safe?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Working…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en_GB/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en_GB/messages.json new file mode 100644 index 000000000000..4e4ef844a145 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/en_GB/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Accept and install" + }, + "ACCESS_CODE": { + "message": "Access code" + }, + "ACCESS_CODE_TIMER": { + "message": "This access code will expire in $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "All connections" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Re-type PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancel" + }, + "CLEAR_HISTORY": { + "message": "Clear history" + }, + "CLOSE": { + "message": "Close" + }, + "CLOSE_PROMPT": { + "message": "Leaving this page will end your Chrome Remote Desktop session." + }, + "CLOSE_WINDOW": { + "message": "Close window" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Are you sure you want to disable remote connections to $1$? If you change your mind, you'll need to visit that computer to re-enable connections.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Connection failed" + }, + "CONNECTION_FROM_HEADER": { + "message": "From" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Connection History" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Fair" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Good" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Poor" + }, + "CONNECTION_TO_HEADER": { + "message": "To" + }, + "CONNECT_ANYWAY": { + "message": "Connect anyway" + }, + "CONNECT_BUTTON": { + "message": "Connect" + }, + "CONTINUE_BUTTON": { + "message": "Continue" + }, + "CONTINUE_PROMPT": { + "message": "You are currently sharing this machine with another user. Do you want to continue sharing?" + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktop Host Controller" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. All Rights Reserved." + }, + "CREDITS": { + "message": "Credits" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Delete all" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Delete" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "To continue, you must first grant extended access permissions to your computer. You only have to do this once." + }, + "DESCRIPTION_CONNECT": { + "message": "Ask the user whose computer you wish to access to click “$1$†and give you the access code.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop allows you to securely share your computer over the Web. Both users must be running the Chrome Remote Desktop app, which can be found at $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "The remote host requires you to authenticate to a third-party website. To continue, you must grant Chrome Remote Desktop additional permissions to access this address:" + }, + "DISABLE_HOST": { + "message": "Disable" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Disconnect" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktop Service" + }, + "DURATION_HEADER": { + "message": "Duration" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "You do not have permission to run this application." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Authentication failed. Please sign in to Chrome again." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Some required components are missing. Please make sure that you have installed the latest version of the software and try again." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "A network error occurred. We will restart the app when your device is on-line again." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "The remote computer has failed to initialise the session. If problem persists please try to configure the host again." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "The remote computer is not responding to connection requests. Please verify that it is online and try again." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Connections to the remote computer are temporarily blocked because somebody was trying to connect to it with invalid PIN. Please try again later." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Failed to register this computer." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "An incompatible protocol version was detected. Please make sure that you have the latest version of the software installed on both computers and try again." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "The access code is invalid. Please try again." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Policy settings do not permit sharing this computer as a Chrome Remote Desktop host. Contact your system administrator for assistance." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "The remote session has expired." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Some required components are missing. Please make sure that you're running the latest version of Chrome and try again." + }, + "ERROR_NACL_DISABLED": { + "message": "Some required components are missing. Please go to chrome://plugins and make sure Native Client is enabled." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "A required component has stopped working. Please report this problem to the developers." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Could not connect to the network. Please check that your device is on-line." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "You are not signed in to Chrome. Please sign in and try again." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "You do not have permission to perform that action." + }, + "ERROR_NOT_FOUND": { + "message": "The requested object does not exist." + }, + "ERROR_P2P_FAILURE": { + "message": "Unable to reach the host. This is probably due to the configuration of the network you are using." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "The service is temporarily unavailable. Please try again later." + }, + "ERROR_UNEXPECTED": { + "message": "An unexpected error occurred. Please report this problem to the developers." + }, + "EXIT_FULL_SCREEN": { + "message": "Exit full screen" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Could not reset the application. You can still send a bug report." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Reset the application. You will lose any unsaved work." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "I can't open the application." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "The application is too slow." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "I can't open my Google Drive files." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "I can't see my saved files online in Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "I'm having problems with my keyboard or mouse." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "To help us solve your problem, please tell us what went wrong:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Something else." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Select…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "To allow us to contact you for further information, your email address will be included in any feedback that you submit." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Report an issue" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Include application logs to help us resolve your problem (logs may include private information)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Application logs may include private information, including your identity (email address) and the names and properties of files and folders in Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "This information is used only for diagnosing the problem that you are reporting, is available only to someone investigating your report, and is retained for no more than 30 days." + }, + "FOOTER_CONNECTING": { + "message": "Connecting…" + }, + "FOOTER_WAITING": { + "message": "waiting for connection…" + }, + "FOR_PLATFORM_MAC": { + "message": "For Mac (OS X 10.6 and above)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "For Windows (XP and above)" + }, + "FULL_SCREEN": { + "message": "Full screen" + }, + "GET_STARTED": { + "message": "Get started" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accept" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Decline" + }, + "HELP": { + "message": "Help" + }, + "HOME_ACCESS_BUTTON": { + "message": "Access" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "See and control a shared computer." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "You may securely access this computer using Chrome Remote Desktop." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Change PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "This computer is currently shared under a different account." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "View/edit" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "This computer is configured to allow one or more clients to connect without entering a PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Enable remote connections" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "You must enable remote connections if you want to use Chrome Remote Desktop to access this computer." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Disable remote connections" + }, + "HOME_SHARE_BUTTON": { + "message": "Share" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Share this computer for another user to see and control." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(this feature is not yet available for your computer)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Access denied for client: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client connected: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client disconnected: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Channel IP for client: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "To enable remote connections to a different computer, install Chrome Remote Desktop there and click “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "You have no computers registered. To enable remote connections to a computer, install Chrome Remote Desktop there and click “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "You have previously signed in as $1$ ($2$). To access your computers in that account, $3$sign in to Google Chrome$4$ with that account and re-install Chrome Remote Desktop.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Software updates usually happen automatically, but can fail in some rare cases. Updating the software should take no more than a few minutes and can be done while connected to your computer remotely." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop on $1$ is out-of-date and needs to be updated.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Help us to improve Chrome Remote Desktop by allowing us to collect usage statistics and crash reports." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "To protect access to this computer, please choose a PIN of $1$at least six digits$2$. This PIN will be required when connecting from another location.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Failed to start remote access service." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome is downloading the Chrome Remote Desktop Host installer. Once the download is complete, please run the installer before continuing." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Please run the installer before continuing." + }, + "HOST_SETUP_STARTED": { + "message": "Remote connections for this computer have been enabled." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Please check your computer's power management settings and ensure that it is not configured to sleep when idle." + }, + "HOST_SETUP_STARTING": { + "message": "Enabling remote connections for this computer…" + }, + "HOST_SETUP_STOPPED": { + "message": "Remote connections for this computer have been disabled." + }, + "HOST_SETUP_STOPPING": { + "message": "Disabling remote connections for this computer…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Failed to disable remote access to this computer. Please try again later." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "By downloading the Chrome Remote Desktop Host Installer, you are agreeing to the Google $1$Terms of Service$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Your PIN has been updated." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Failed to update the PIN. Please try again later." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "The PIN for this computer is being updated…" + }, + "HOST_STARTED": { + "message": "Host started for user: %1." + }, + "HOST_STOPPED": { + "message": "Host stopped." + }, + "IDLE_CONTINUE": { + "message": "Continue" + }, + "IDLE_DISCONNECT": { + "message": "Disconnect now" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Your $1$ session has been inactive for a while and will be disconnected shortly.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "To this computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Download Chrome Remote Desktop Host Installer" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "To begin sharing your desktop, give the access code below to the person who will be assisting you." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Once they have entered the code your sharing session will begin." + }, + "INVALID_PIN": { + "message": "Please enter a PIN consisting of six or more digits." + }, + "IT2ME_FIRST_RUN": { + "message": "User-to-user screen sharing, perfect for remote technical support." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Keyboard layouts" + }, + "LABEL_CONNECTED": { + "message": "Connected:" + }, + "LAST_ONLINE": { + "message": "$1$ (last online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Learn how." + }, + "LEARN_MORE": { + "message": "Learn more." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Preferences" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop Host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Uninstaller" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Use right Ctrl for Win key (⌘ on Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximise window" + }, + "ME2ME_FIRST_RUN": { + "message": "Access your own computer from anywhere." + }, + "MESSAGE_GENERATING": { + "message": "Generating access code…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Your Chrome Remote Desktop session has ended." + }, + "MESSAGE_SHARED": { + "message": "Your desktop is currently shared with $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimise window" + }, + "MODE_AUTHORIZE": { + "message": "Authorise" + }, + "MODE_IT2ME": { + "message": "Remote Assistance" + }, + "MODE_ME2ME": { + "message": "My Computers" + }, + "NEW_WINDOW": { + "message": "New window…" + }, + "NO_PAIRED_CLIENTS": { + "message": "All paired clients have been deleted." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Desktop integration is not supported on this platform. You can still use the application, but the user experience will be degraded." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Host initialisation failed." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Invalid host configuration." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Invalid host owner domain." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Invalid host id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host is configured with invalid OAuth credentials." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Host running at the console logic screen has shut down to support curtain mode by switching to a host running in a user-specific session." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host is restarting, to take into account a policy change." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Host failed to read the policy." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host has shut down." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Unrecognised host error: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Invalid host owner." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Options" + }, + "OUTGOING_CONNECTIONS": { + "message": "From this computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "The following clients have been paired with this computer and can connect without supplying a PIN. You can revoke this permission at any time, either individually, or for all clients." + }, + "PAIRED_CLIENT_DATE": { + "message": "Pairing date" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Please enter the same PIN in both boxes." + }, + "PIN_MESSAGE": { + "message": "Please enter your PIN for $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Please enter your PIN for the remote computer." + }, + "PRODUCT_DESCRIPTION": { + "message": "Access other computers or allow another user to access your computer securely over the Internet." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Reconnect" + }, + "REMEMBER_PIN": { + "message": "Don't ask for a PIN again when connecting to this host from this device." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Core Library" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Desktop Integration Process" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Application to issue commands to Chrome remote desktop host." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Host Process" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Native messaging host for remoting host management" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Native messaging host for remote assistance" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Security Key Remoting Process" + }, + "RESIZE_TO_CLIENT": { + "message": "Resize desktop to fit" + }, + "RESTART_BUTTON": { + "message": "Restart now" + }, + "RESTORE_WINDOW": { + "message": "Restore window" + }, + "RETRY": { + "message": "Retry" + }, + "SCREEN_OPTIONS": { + "message": "Screen options" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Send Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Report an issue…" + }, + "SEND_KEYS": { + "message": "Send keys" + }, + "SEND_PRINT_SCREEN": { + "message": "Send PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "This service enables incoming connections from Chrome Remote Desktop clients." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "This setting is managed by your domain policy." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Share" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancel" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Would you like to share this computer for another user to see and control?" + }, + "SHOW_STATS": { + "message": "Show statistics" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Show statistics (connection: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Shrink to fit" + }, + "SIGN_IN_BUTTON": { + "message": "Sign in" + }, + "SIGN_OUT_BUTTON": { + "message": "Sign out" + }, + "STOP_SHARING_BUTTON": { + "message": "Stop Sharing" + }, + "SURVEY_INVITATION": { + "message": "Want to help improve Chrome Remote Desktop? $1$Take the survey.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Time" + }, + "TOGGLE_STATS": { + "message": "Show statistics" + }, + "TOOLTIP_CONNECT": { + "message": "Connect to $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Disable remote connections to this computer" + }, + "TOOLTIP_REFRESH": { + "message": "Refresh the list of hosts" + }, + "TOOLTIP_RENAME": { + "message": "Edit computer name" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (out-of-date)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Account" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Please confirm your account and PIN below to allow access by Chrome Remote Desktop." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTE: Policy settings permit connections only between computers within your network." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTE: To ensure that all keyboard shortcuts are available, you can configure Chrome Remote Desktop to ‘Open as window’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Why is this safe?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Working…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es/messages.json new file mode 100644 index 000000000000..9a127132110a --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Aceptar e instalar" + }, + "ACCESS_CODE": { + "message": "Código de acceso" + }, + "ACCESS_CODE_TIMER": { + "message": "Este código de acceso caducará en $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Comentarios" + }, + "ALL_CONNECTIONS": { + "message": "Todas las conexiones" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Volver a escribir el PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancelar" + }, + "CLEAR_HISTORY": { + "message": "Borrar historial" + }, + "CLOSE": { + "message": "Cerrar" + }, + "CLOSE_PROMPT": { + "message": "Si abandonas esta página, finalizará tu sesión en Escritorio remoto de Chrome." + }, + "CLOSE_WINDOW": { + "message": "Cerrar ventana" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "¿Seguro que quieres inhabilitar las conexiones remotas con $1$? Si cambias de opinión, tendrás que volver a habilitar las conexiones desde ese ordenador.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Error de conexión" + }, + "CONNECTION_FROM_HEADER": { + "message": "De" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historial de conexiones" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Aceptable" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Buena" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Mala" + }, + "CONNECTION_TO_HEADER": { + "message": "Para" + }, + "CONNECT_ANYWAY": { + "message": "Conectar de todos modos" + }, + "CONNECT_BUTTON": { + "message": "Conectar" + }, + "CONTINUE_BUTTON": { + "message": "Continuar" + }, + "CONTINUE_PROMPT": { + "message": "Actualmente estás compartiendo este ordenador con otro usuario. ¿Quieres seguir compartiéndolo?" + }, + "CONTROLLER_NAME": { + "message": "Controlador de host de Escritorio remoto de Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Todos los derechos reservados." + }, + "CREDITS": { + "message": "Créditos" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Eliminar todos" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Eliminar" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Para continuar, primero debes conceder permisos de acceso ampliados a tu ordenador. Solo debes realizar esta acción una vez." + }, + "DESCRIPTION_CONNECT": { + "message": "Pregunta al usuario el ordenador al que se quiere acceder para hacer clic en $1$ y proporcionar el código de acceso.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Escritorio remoto de Chrome permite compartir de forma segura tu ordenador a través de Internet. Ambos usuarios deben estar ejecutando la aplicación Escritorio remoto de Chrome, que está disponible en la página $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "El host remoto requiere tu autenticación en un sitio web de terceros. Para continuar, debes conceder a la aplicación Escritorio remoto de Chrome permisos adicionales para acceder a la siguiente dirección:" + }, + "DISABLE_HOST": { + "message": "Inhabilitar" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Desvincular" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Servicio de Escritorio remoto de Chrome" + }, + "DURATION_HEADER": { + "message": "Duración" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "No tienes permiso para ejecutar esta aplicación." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Error de autenticación. Vuelve a iniciar sesión en Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Faltan algunos componentes requeridos. Asegúrate de haber instalado la última versión del software y vuelve a intentarlo." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Se ha producido un error de red. La aplicación se reiniciará cuando el dispositivo vuelva a estar conectado a Internet." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "El equipo remoto no ha podido inicializar la sesión. Si el problema persiste, prueba a volver a configurar el host." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "El ordenador remoto no responde a las solicitudes de conexión. Comprueba que esté conectado y vuelve a intentarlo." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Las conexiones con el ordenador remoto se han bloqueado temporalmente porque alguien ha intentado establecer conexión con él con un PIN que no es válido. Vuelve a intentarlo más tarde." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "No se ha podido registrar este ordenador." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Se ha detectado una versión de protocolo incompatible. Asegúrate de tener instalada la última versión del software en ambos ordenadores y vuelve a intentarlo." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "El código de acceso no es válido. Vuelve a intentarlo." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "La configuración de la política no permite compartir este ordenador como un host de Escritorio remoto de Chrome. Ponte en contacto con el administrador del sistema para obtener asistencia." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "La sesión remota ha caducado." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Faltan algunos componentes requeridos. Asegúrate de estar ejecutando la última versión de Chrome y vuelve a intentarlo." + }, + "ERROR_NACL_DISABLED": { + "message": "Faltan algunos componentes requeridos. Accede a chrome://plugins y comprueba que Native Client está habilitado." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Un componente obligatorio ha dejado de funcionar. Informa de este problema a los desarrolladores." + }, + "ERROR_NETWORK_FAILURE": { + "message": "No se ha podido establecer conexión con la red. Comprueba que el dispositivo esté conectado a Internet." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "No has iniciado sesión en Chrome. Inicia sesión y vuelve a intentarlo." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "No tienes permiso para realizar esa acción." + }, + "ERROR_NOT_FOUND": { + "message": "El objeto seleccionado no existe." + }, + "ERROR_P2P_FAILURE": { + "message": "No se puede establecer conexión con el host. Es probable que el error se deba a la configuración de la red que se está utilizando." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "El servicio no está disponible temporalmente. Vuelve a intentarlo más tarde." + }, + "ERROR_UNEXPECTED": { + "message": "Se ha producido un error inesperado. Comunícaselo a los desarrolladores." + }, + "EXIT_FULL_SCREEN": { + "message": "Salir del modo de pantalla completa" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "No se ha podido restablecer la aplicación. Puedes seguir enviando un informe de errores." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Restablecer la aplicación. Se perderá cualquier trabajo que no hayas guardado." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "No puedo abrir la aplicación." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "La aplicación es demasiado lenta." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "No puedo abrir mis archivos de Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "No puedo ver mis archivos guardados online en Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Tengo problemas con mi teclado o con el ratón." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Indícanos qué ha ocurrido para que podamos solucionar el problema:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Otro problema." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Seleccionar…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Para que podamos ponernos en contacto contigo para obtener más información, tu dirección de correo electrónico se incluirá en cualquier comentario que envíes." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Notificar un error" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Incluir registros de aplicaciones para ayudarnos a solucionar tus problemas (los registros pueden incluir información privada)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Los registros de aplicaciones pueden contener información privada, incluidos tu identidad (dirección de correo electrónico) y los nombres y las propiedades de los archivos y de las carpetas de Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Esta información solo se utiliza para diagnosticar el problema del que has informado, solo está disponible para la persona que examine tu informe y se conserva durante un período de hasta 30 días." + }, + "FOOTER_CONNECTING": { + "message": "Conectando..." + }, + "FOOTER_WAITING": { + "message": "esperando conexión..." + }, + "FOR_PLATFORM_MAC": { + "message": "Para Mac (OS X 10.6 y versiones superiores)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Para Windows (XP y versiones superiores)" + }, + "FULL_SCREEN": { + "message": "Pantalla completa" + }, + "GET_STARTED": { + "message": "Empezar" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Aceptar" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Rechazar" + }, + "HELP": { + "message": "Ayuda" + }, + "HOME_ACCESS_BUTTON": { + "message": "Acceso" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Permite ver y controlar un ordenador compartido." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Puedes acceder de forma segura a este ordenador con Escritorio remoto de Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Cambiar PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Actualmente, este ordenador está compartido con otra cuenta." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Ver/editar" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Este ordenador está configurado para permitir que uno o más clientes se conecten sin introducir un PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Habilitar conexiones remotas" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Si quieres utilizar Escritorio remoto de Chrome para acceder a este ordenador, debes habilitar las conexiones remotas." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Inhabilitar conexiones remotas" + }, + "HOME_SHARE_BUTTON": { + "message": "Compartir" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Comparte este ordenador para que otro usuario pueda acceder a él y controlarlo." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(esta función aún no está disponible para tu ordenador)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Acceso denegado al cliente: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Cliente conectado: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Cliente desconectado: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP de canal de cliente: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Para habilitar conexiones remotas con otro ordenador, instala Escritorio remoto de Chrome en él y haz clic en $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "No tienes ningún ordenador registrado. Para habilitar conexiones remotas con un ordenador, instala Escritorio remoto de Chrome en él y haz clic en $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Anteriormente, iniciaste sesión como $1$ ($2$). Para acceder a los ordenadores de esa cuenta, $3$inicia sesión en Google Chrome$4$ con dicha cuenta y vuelve a instalar Escritorio remoto de Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Las actualizaciones de software suelen realizarse automáticamente, pero pueden fallar en casos excepcionales. La actualización del software no debe durar más de unos minutos y se puede realizar mientras estás conectado a tu ordenador de forma remota." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "La aplicación Escritorio remoto de Chrome de $1$ está obsoleta y debe actualizarse.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Ayúdanos a mejorar la aplicación Escritorio remoto de Chrome autorizando la recopilación de estadísticas de uso e informes sobre fallos." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Debes elegir un PIN de $1$al menos seis dígitos$2$ para proteger el acceso a este ordenador. Se solicitará ese PIN cada vez que se establezca conexión con ese ordenador desde otra ubicación.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "No se ha podido iniciar el servicio de acceso remoto." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome está descargando el archivo de instalación del host de Escritorio remoto de Chrome. Cuando se haya completado la descarga, ejecuta el archivo de instalación antes de continuar." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Ejecuta el archivo de instalación antes de continuar." + }, + "HOST_SETUP_STARTED": { + "message": "Se han habilitado las conexiones remotas con este ordenador." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Comprueba las opciones de energía de tu ordenador y asegúrate de que no esté configurado para entrar en modo de suspensión cuando esté inactivo." + }, + "HOST_SETUP_STARTING": { + "message": "Habilitando conexiones remotas con este ordenador..." + }, + "HOST_SETUP_STOPPED": { + "message": "Se han inhabilitado las conexiones remotas con este ordenador." + }, + "HOST_SETUP_STOPPING": { + "message": "Inhabilitando conexiones remotas con este ordenador..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "No se ha podido inhabilitar el acceso remoto a este ordenador. Vuelve a intentarlo más tarde." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Al descargar el programa de instalación del host de Escritorio remoto de Chrome, aceptas las $1$Condiciones de Servicio$4 de Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Se ha actualizado el PIN." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "No se ha podido actualizar el PIN. Vuelve a intentarlo más tarde." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Se está actualizando el PIN de este ordenador..." + }, + "HOST_STARTED": { + "message": "Host iniciado para usuario: %1." + }, + "HOST_STOPPED": { + "message": "Host detenido." + }, + "IDLE_CONTINUE": { + "message": "Continuar" + }, + "IDLE_DISCONNECT": { + "message": "Desconectar ahora" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "La sesión de $1$ lleva un tiempo inactiva y se desconectará en breve.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Conexiones con este ordenador" + }, + "INSTALLER_DOWNLOAD": { + "message": "Descargar programa de instalación del host de Escritorio remoto de Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Para empezar a compartir tu escritorio, proporciona el código de acceso que se muestra a continuación a la persona que te vaya a ayudar." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Cuando el usuario introduzca el código de acceso, empezará la sesión compartida." + }, + "INVALID_PIN": { + "message": "Introduce un PIN que tenga como mínimo seis dígitos." + }, + "IT2ME_FIRST_RUN": { + "message": "Pantalla compartida entre usuarios, opción perfecta para la asistencia técnica remota" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Diseños de teclado" + }, + "LABEL_CONNECTED": { + "message": "Conectado:" + }, + "LAST_ONLINE": { + "message": "$1$ (fecha de la última conexión $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Más información" + }, + "LEARN_MORE": { + "message": "Más información" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferencias del host de Escritorio remoto de Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host de Escritorio\nremoto de Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Programa de desinstalación del host de Escritorio remoto de Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Utilizar Ctrl derecho para tecla Windows (⌘ en Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximizar ventana" + }, + "ME2ME_FIRST_RUN": { + "message": "Posibilidad de acceso a tu ordenador desde cualquier lugar" + }, + "MESSAGE_GENERATING": { + "message": "Generando código de acceso..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Ha finalizado tu sesión en Escritorio remoto de Chrome." + }, + "MESSAGE_SHARED": { + "message": "Tu ordenador está compartido actualmente con $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimizar ventana" + }, + "MODE_AUTHORIZE": { + "message": "Autorizar" + }, + "MODE_IT2ME": { + "message": "Asistencia remota" + }, + "MODE_ME2ME": { + "message": "Mis ordenadores" + }, + "NEW_WINDOW": { + "message": "Nueva ventana…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Se han eliminado todos los clientes sincronizados." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "La integración del escritorio no se admite en esta plataforma. Puedes seguir utilizando la aplicación, pero la experiencia de usuario se verá afectada." + }, + "OFFLINE": { + "message": "$1$ (sin conexión)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Error al iniciar el host." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Configuración del host no válida." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Dominio del propietario del host no válido." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Identificador del host no válido" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "El host está configurado con credenciales de OAuth que no son válidas." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Se ha cerrado el host que se ejecuta en la pantalla de inicio de sesión de la consola para poder admitir el modo de cortina. Para ello, se ha cambiado a un host que se ejecuta en una sesión específica de usuario." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "El host se está reiniciando para reflejar un cambio en una política." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "El host no ha podido leer la política." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "El host se ha desconectado." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Error de host no reconocido: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Propietario del host no válido." + }, + "OK": { + "message": "Aceptar" + }, + "OPTIONS_MENU": { + "message": "Configuración" + }, + "OUTGOING_CONNECTIONS": { + "message": "Conexiones desde este ordenador" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Los siguientes clientes se han sincronizado con este ordenador y se pueden conectar sin un PIN. Puedes revocar este permiso en cualquier momento ya sea de forma individual o para todos los clientes." + }, + "PAIRED_CLIENT_DATE": { + "message": "Fecha de sincronización" + }, + "PAIRED_CLIENT_NAME": { + "message": "Cliente" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Debes introducir el mismo PIN en los dos cuadros." + }, + "PIN_MESSAGE": { + "message": "Introduce el PIN de $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Introduce tu código PIN para el ordenador remoto." + }, + "PRODUCT_DESCRIPTION": { + "message": "Accede a otros ordenadores o permite que otro usuario acceda a tu ordenador de forma segura a través de Internet." + }, + "PRODUCT_NAME": { + "message": "Escritorio remoto de Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Flujo de aplicaciones de Chrome" + }, + "RECONNECT": { + "message": "Reconectar" + }, + "REMEMBER_PIN": { + "message": "No volver a pedir un PIN al conectarse a este host desde este dispositivo." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteca principal" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proceso de integración del escritorio" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplicación para enviar comandos al host del Escritorio remoto de Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proceso de host" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Host de mensajes nativo para administración de host de forma remota" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Host de mensajes nativo para asistencia remota" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proceso remoto de la llave de seguridad" + }, + "RESIZE_TO_CLIENT": { + "message": "Ajustar el tamaño del escritorio" + }, + "RESTART_BUTTON": { + "message": "Reiniciar ahora" + }, + "RESTORE_WINDOW": { + "message": "Restaura la ventana" + }, + "RETRY": { + "message": "Volver a intentar" + }, + "SCREEN_OPTIONS": { + "message": "Opciones de pantalla" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Enviar Ctrl-Alt-Supr" + }, + "SEND_FEEDBACK": { + "message": "Informar de un problema…" + }, + "SEND_KEYS": { + "message": "Enviar teclas" + }, + "SEND_PRINT_SCREEN": { + "message": "Enviar Impr Pant" + }, + "SERVICE_DESCRIPTION": { + "message": "Este servicio permite las conexiones entrantes de los clientes de Escritorio remoto de Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Esta opción está administrada por la política de tu dominio." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Compartir" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancelar" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "¿Quieres compartir este ordenador para que otro usuario pueda acceder a él y controlarlo?" + }, + "SHOW_STATS": { + "message": "Mostrar estadísticas" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Mostrar estadísticas (conexión: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Ajustar tamaño" + }, + "SIGN_IN_BUTTON": { + "message": "Iniciar sesión" + }, + "SIGN_OUT_BUTTON": { + "message": "Cerrar sesión" + }, + "STOP_SHARING_BUTTON": { + "message": "Dejar de compartir" + }, + "SURVEY_INVITATION": { + "message": "¿Quieres ayudar a mejorar Escritorio remoto de Chrome? $1$Rellena nuestra encuesta$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Hora" + }, + "TOGGLE_STATS": { + "message": "Mostrar estadísticas" + }, + "TOOLTIP_CONNECT": { + "message": "Establece conexión con $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Se inhabilitan las conexiones remotas con este ordenador" + }, + "TOOLTIP_REFRESH": { + "message": "Actualiza la lista de hosts" + }, + "TOOLTIP_RENAME": { + "message": "Edita el nombre del ordenador" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (obsoleto)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Cuenta" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Confirma la cuenta y el PIN a continuación para permitir el acceso de Escritorio remoto de Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTA: la configuración de la política solo permite establecer conexiones entre ordenadores de tu misma red." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTA: Para asegurarte de que estén disponibles todas las combinaciones de teclas, puedes configurar la aplicación Escritorio remoto de Chrome para que se abra como una ventana." + }, + "WHY_IS_THIS_SAFE": { + "message": "¿Por qué es segura esta operación?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Ventanas" + }, + "WORKING": { + "message": "Trabajando…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es_419/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es_419/messages.json new file mode 100644 index 000000000000..4cb0a00ae398 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/es_419/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Aceptar e instalar" + }, + "ACCESS_CODE": { + "message": "Código de acceso" + }, + "ACCESS_CODE_TIMER": { + "message": "Este código de acceso vence en $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Comentario" + }, + "ALL_CONNECTIONS": { + "message": "Todas las conexiones" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Vuelve a escribir el PIN." + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancelar" + }, + "CLEAR_HISTORY": { + "message": "Borrar historial" + }, + "CLOSE": { + "message": "Cerrar" + }, + "CLOSE_PROMPT": { + "message": "Al abandonar esta página, se cerrará la sesión en el Escritorio remoto de Chrome." + }, + "CLOSE_WINDOW": { + "message": "Cerrar ventana" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "¿Realmente deseas inhabilitar las conexiones remotas con $1$? Si te arrepientes, tendrás que ir a esa computadora para volver a habilitar las conexiones.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Error de conexión" + }, + "CONNECTION_FROM_HEADER": { + "message": "De" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historial de conexiones" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Aceptable" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Buena" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Mala" + }, + "CONNECTION_TO_HEADER": { + "message": "Para" + }, + "CONNECT_ANYWAY": { + "message": "Conectar de todos modos" + }, + "CONNECT_BUTTON": { + "message": "Conectar" + }, + "CONTINUE_BUTTON": { + "message": "Continuar" + }, + "CONTINUE_PROMPT": { + "message": "En este momento compartes esta computadora con otro usuario. ¿Deseas continuar compartiéndola?" + }, + "CONTROLLER_NAME": { + "message": "Controlador del host del Escritorio remoto de Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Todos los derechos reservados." + }, + "CREDITS": { + "message": "Créditos" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Eliminar todos" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Eliminar" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Para continuar, primero debes extender los permisos de acceso a tu computadora. Solo tienes que hacerlo una vez." + }, + "DESCRIPTION_CONNECT": { + "message": "Solicita al usuario a cuya computadora quieres tener acceso que haga clic en \"$1$\" y te envíe el código de acceso correspondiente.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Escritorio remoto de Chrome te permite compartir tu computadora con otro usuario de manera segura en la Web. Tanto tú como el otro usuario deben usar la aplicación Escritorio remoto de Chrome, que está disponible en $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "El host remoto requiere la autenticación de un sitio web de terceros. Para continuar, debes otorgar permisos adicionales al Escritorio remoto de Chrome para acceder a la siguiente dirección:" + }, + "DISABLE_HOST": { + "message": "Inhabilitar" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Desconectar" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Servicio del Escritorio remoto de Chrome" + }, + "DURATION_HEADER": { + "message": "Duración" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "No tienes permiso para ejecutar esta aplicación." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Se produjo un error de autenticación. Vuelve a acceder a Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Faltan algunos de los componentes necesarios. Asegúrate de tener instalada la última versión del software y vuelve a intentarlo." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Se produjo un error en la red. Reiniciaremos la aplicación cuando el dispositivo esté en línea nuevamente." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "La computadora remota no pudo inicializar la sesión. Si el problema persiste, intenta volver a configurar el host." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "La computadora remota no responde a las solicitudes de conexión. Verifica que esté conectada a Internet y vuelve a intentarlo." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Las conexiones con la computadora remota se bloquearon temporalmente porque alguien intentó conectarse con ella a través de un PIN no válido. Vuelve a intentarlo más tarde." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "No se pudo registrar esta computadora." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Se detectó una versión de protocolo incompatible. Asegúrate de que tienes instalada la última versión del software en ambas computadoras y vuelve a intentarlo." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "El código de acceso no es válido. Vuelve a intentarlo." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "La configuración de la política no permite compartir esta computadora como host de Escritorio remoto de Chrome. Comunícate con el administrador de tu sistema para obtener ayuda." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "La sesión remota expiró." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Faltan algunos de los componentes necesarios. Asegúrate de estar usando la última versión de Chrome y vuelve a intentarlo." + }, + "ERROR_NACL_DISABLED": { + "message": "Faltan algunos de los componentes necesarios. Dirígete a chrome://plugins y asegúrate de que Native Client esté habilitado." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Un componente requerido dejó de funcionar. Informa este problema ante los programadores." + }, + "ERROR_NETWORK_FAILURE": { + "message": "No se pudo conectar a la red. Comprueba que el dispositivo esté conectado a Internet." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "No accediste a Chrome. Accede y vuelve a intentarlo." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "No tienes permiso para realizar esa acción." + }, + "ERROR_NOT_FOUND": { + "message": "El objeto solicitado no existe." + }, + "ERROR_P2P_FAILURE": { + "message": "No se puede establecer la conexión con el host. Probablemente esto se deba a la configuración de la red que usas." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "El servicio no está disponible temporalmente. Vuelve a intentarlo más tarde." + }, + "ERROR_UNEXPECTED": { + "message": "Se produjo un error inesperado. Informa este problema a los programadores." + }, + "EXIT_FULL_SCREEN": { + "message": "Salir de pantalla completa" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "No se pudo restablecer la aplicación. Puedes enviar un informe de errores." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Restablece la aplicación. Perderás todo el trabajo que no se haya guardado." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "No puedo abrir la aplicación." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "La aplicación es demasiado lenta." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "No puedo abrir mis archivos de Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "No puedo ver mis archivos guardados en línea en Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Tengo problemas con el teclado o el mouse." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Para que te ayudemos a resolver el problema, indícanos qué sucede:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Tengo otro problema." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Selecciona..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Para que podamos comunicarnos contigo y brindarte más información, se incluirá tu dirección de correo electrónico en todos los comentarios que envíes." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Informar un problema" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Incluye registros de aplicaciones para ayudarnos a solucionar tu problema (los registros pueden contener información privada)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Los registros de la aplicación pueden incluir información privada, como tu identidad (dirección de correo electrónico), y los nombres y las propiedades de los archivos y las carpetas en Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Esta información solo se usa con el fin de diagnosticar el problema informado, solo está disponible para la persona que investiga el informe y se guarda por no más de 30 días." + }, + "FOOTER_CONNECTING": { + "message": "Conectando…" + }, + "FOOTER_WAITING": { + "message": "Aguardando la conexión..." + }, + "FOR_PLATFORM_MAC": { + "message": "Para Mac (SO X 10.6 y versiones posteriores)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Para Windows (XP y versiones posteriores)" + }, + "FULL_SCREEN": { + "message": "Pantalla completa" + }, + "GET_STARTED": { + "message": "Comenzar" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Aceptar" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Rechazar" + }, + "HELP": { + "message": "Ayuda" + }, + "HOME_ACCESS_BUTTON": { + "message": "Acceder" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Permite ver y controlar una computadora compartida." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Puedes acceder a esta computadora sin correr riesgos a través del Escritorio remoto de Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Cambiar PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Actualmente, la computadora se comparte con una cuenta diferente." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Ver o editar" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Esta computadora está configurada para permitir que uno o más clientes se conecten sin ingresar un PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Habilitar conexiones remotas" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Debes habilitar las conexiones remotas si deseas usar Escritorio remoto de Chrome para acceder a esta computadora." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Inhabilitar conexiones remotas" + }, + "HOME_SHARE_BUTTON": { + "message": "Compartir" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Comparte esta computadora con otro usuario para que este pueda verla y controlarla." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Esta función aún no está disponible para tu computadora)." + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Acceso rechazado para cliente: %1" + }, + "HOST_CLIENT_CONNECTED": { + "message": "Cliente conectado: %1" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Cliente desconectado: %1" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP de canal para cliente: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Para habilitar conexiones remotas con otra computadora, instala allí Escritorio remoto de Chrome y haz clic en “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "No tienes ninguna computadora registrada. Para habilitar conexiones remotas con una computadora, instala allí Escritorio remoto de Chrome y haz clic en \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Accediste previamente como $1$ ($2$). Para acceder a las computadoras en esa cuenta, $3$accede a Google Chrome$4$ con esa cuenta y vuelve a instalar Escritorio remoto de Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Las actualizaciones de software, por lo general, se realizan de forma automática, pero puede haber errores en casos excepcionales. La actualización del software no debe tardar más de unos minutos y se puede hacer mientras estás conectado a tu computadora de forma remota." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "La aplicación Escritorio remoto de Chrome en $1$ está desactualizada y debe actualizarse.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Ayúdanos a mejorar la aplicación Escritorio remoto de Chrome permitiéndonos recopilar estadísticas de uso e informes sobre fallos." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Debes elegir un PIN de $1$al menos seis dígitos$2$ para proteger el acceso a esta computadora. Se solicitará ese PIN cada vez que se establezca una conexión con esa computadora desde otra ubicación.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "No se pudo iniciar el servicio de acceso remoto." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome está descargando el instalador del host de Escritorio remoto de Chrome. Cuando termine la descarga, abre el instalador antes de continuar." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Ejecuta el instalador antes de continuar." + }, + "HOST_SETUP_STARTED": { + "message": "Se habilitaron las conexiones remotas con esta computadora." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Configura la administración de energía de tu computadora y asegúrate de que no se habilite el modo de hibernación cuando esté inactiva." + }, + "HOST_SETUP_STARTING": { + "message": "Habilitando conexiones remotas para esta computadora…" + }, + "HOST_SETUP_STOPPED": { + "message": "Se inhabilitaron las conexiones remotas con esta computadora." + }, + "HOST_SETUP_STOPPING": { + "message": "Inhabilitando conexiones remotas con esta computadora…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "No se pudo inhabilitar el acceso remoto a esta computadora. Vuelve a intentarlo más tarde." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Al descargar el instalador del host de Escritorio remoto de Chrome, aceptas las $1$Condiciones del servicio$4 de Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Se actualizó tu PIN." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "No se pudo actualizar el PIN. Vuelve a intentarlo más tarde." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Se está actualizando el PIN para esta computadora…" + }, + "HOST_STARTED": { + "message": "Host iniciado para usuario: %1" + }, + "HOST_STOPPED": { + "message": "Se detuvo el host." + }, + "IDLE_CONTINUE": { + "message": "Continuar" + }, + "IDLE_DISCONNECT": { + "message": "Desconectar ahora" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "La sesión de $1$ estuvo inactiva por un tiempo y se desconectará en breve.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Hacia esta computadora" + }, + "INSTALLER_DOWNLOAD": { + "message": "Descarga el instalador del host de Escritorio remoto de Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Para comenzar a compartir tu escritorio, proporciona el código de acceso que aparece a continuación a la persona que te asistirá." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Una vez que se haya ingresado el código, se iniciará la sesión compartida." + }, + "INVALID_PIN": { + "message": "Ingresa un PIN de al menos seis dígitos." + }, + "IT2ME_FIRST_RUN": { + "message": "Uso compartido de la pantalla entre usuarios, ideal para recibir asistencia técnica remota" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Diseños de teclado" + }, + "LABEL_CONNECTED": { + "message": "Conectado:" + }, + "LAST_ONLINE": { + "message": "$1$ (en línea por última vez: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Más información" + }, + "LEARN_MORE": { + "message": "Más información" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferencias del host del Escritorio remoto de Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host del Escritorio\nremoto de Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Desinstalador del host del Escritorio remoto de Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Usar Ctrl derecho para tecla de Windows (⌘ en Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximizar ventana" + }, + "ME2ME_FIRST_RUN": { + "message": "Accede a tu computadora desde cualquier lugar." + }, + "MESSAGE_GENERATING": { + "message": "Generando el código de acceso..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Se cerró tu sesión en Escritorio remoto de Chrome." + }, + "MESSAGE_SHARED": { + "message": "En este momento, estás compartiendo tu escritorio con $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimizar ventana" + }, + "MODE_AUTHORIZE": { + "message": "Autorizar" + }, + "MODE_IT2ME": { + "message": "Asistencia remota" + }, + "MODE_ME2ME": { + "message": "Mis computadoras" + }, + "NEW_WINDOW": { + "message": "Nueva ventana…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Se eliminaron todos los clientes sincronizados." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Esta plataforma no admite la integración de escritorio. Puedes usar la aplicación, pero se verá afectada la experiencia del usuario." + }, + "OFFLINE": { + "message": "$1$ (sin conexión)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Error al iniciar el host" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Configuración del host no válida" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Dominio del propietario del host no válido" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID de host no válido" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "El host está configurado con credenciales OAuth que no son válidas." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Se cerró el host que se ejecuta en la pantalla de acceso de la consola para poder admitir el modo de cortina. Por lo tanto, se cambió a un host que se ejecuta en una sesión específica de usuario." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "El host está reiniciándose para implementar un cambio de política." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "El host no pudo leer la política." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "El host se cerró." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Error de host no reconocido: $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Propietario del host no válido" + }, + "OK": { + "message": "Aceptar" + }, + "OPTIONS_MENU": { + "message": "Opciones" + }, + "OUTGOING_CONNECTIONS": { + "message": "Desde esta computadora" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Los clientes que se indican a continuación se sincronizaron con esta computadora y pueden conectarse sin proporcionar un PIN. Puedes revocar este permiso en cualquier momento, ya sea de forma individual o para todos los clientes." + }, + "PAIRED_CLIENT_DATE": { + "message": "Fecha de sincronización" + }, + "PAIRED_CLIENT_NAME": { + "message": "Cliente" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Ingresa el mismo PIN en ambos cuadros." + }, + "PIN_MESSAGE": { + "message": "Ingresa tu PIN de $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Ingresa tu PIN para la computadora remota." + }, + "PRODUCT_DESCRIPTION": { + "message": "Accede a otras computadoras o permite que otro usuario acceda a tu computadora a través de Internet sin correr riesgos." + }, + "PRODUCT_NAME": { + "message": "Escritorio remoto de Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Volver a conectar" + }, + "REMEMBER_PIN": { + "message": "No volver a pedir un PIN al conectarse a este host desde este dispositivo" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteca principal" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proceso de integración de escritorio" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplicación para enviar comandos al host del escritorio remoto de Chrome" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proceso de host" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Host de mensajería nativa para administración de host remota" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Host de mensajería nativa para asistencia remota" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proceso remoto de llave de seguridad" + }, + "RESIZE_TO_CLIENT": { + "message": "Ajustar el tamaño del escritorio" + }, + "RESTART_BUTTON": { + "message": "Reiniciar ahora" + }, + "RESTORE_WINDOW": { + "message": "Restaurar ventana" + }, + "RETRY": { + "message": "Volver a intentarlo" + }, + "SCREEN_OPTIONS": { + "message": "Opciones de pantalla" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Enviar Ctrl-Alt-Supr" + }, + "SEND_FEEDBACK": { + "message": "Informar un problema" + }, + "SEND_KEYS": { + "message": "Enviar teclas" + }, + "SEND_PRINT_SCREEN": { + "message": "Enviar Impr Pant" + }, + "SERVICE_DESCRIPTION": { + "message": "Este servicio permite conexiones entrantes de los clientes del Escritorio remoto de Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Esta cuenta está administrada por la política de tu dominio." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Compartir" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancelar" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "¿Quieres compartir esta computadora con otro usuario para que la vea y la controle?" + }, + "SHOW_STATS": { + "message": "Mostrar estadísticas" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Mostrar estadísticas (conexión: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Ajustar tamaño a ventana de navegador" + }, + "SIGN_IN_BUTTON": { + "message": "Acceder" + }, + "SIGN_OUT_BUTTON": { + "message": "Salir" + }, + "STOP_SHARING_BUTTON": { + "message": "Dejar de compartir" + }, + "SURVEY_INVITATION": { + "message": "¿Quieres ayudar a mejorar el Escritorio remoto de Chrome? $1$Realiza la encuesta$2$.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Hora" + }, + "TOGGLE_STATS": { + "message": "Mostrar estadísticas" + }, + "TOOLTIP_CONNECT": { + "message": "Establecer conexión con $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Inhabilitar conexiones remotas con esta computadora" + }, + "TOOLTIP_REFRESH": { + "message": "Actualiza la lista de hosts." + }, + "TOOLTIP_RENAME": { + "message": "Editar el nombre de la computadora" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (desactualizado)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Cuenta" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Confirma la cuenta y el PIN a continuación para permitir el acceso del Escritorio remoto de Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTA: La configuración de la política solo permite conexiones entre computadoras que estén dentro de tu red." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTA: Para asegurarte de que todas las combinaciones de teclas para acceso directo estén disponibles, puedes configurar Escritorio remoto de Chrome en \"Abrir como ventana\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "¿Por qué esta operación es segura?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Operación en curso…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/et/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/et/messages.json new file mode 100644 index 000000000000..f3fadca86940 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/et/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Nõustu ja installi" + }, + "ACCESS_CODE": { + "message": "Pääsukood" + }, + "ACCESS_CODE_TIMER": { + "message": "Pääsukood aegub $1$ pärast", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Tagasiside" + }, + "ALL_CONNECTIONS": { + "message": "Kõik ühendused" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Sisestage PIN-kood uuesti" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN-kood" + }, + "CANCEL": { + "message": "Tühista" + }, + "CLEAR_HISTORY": { + "message": "Kustuta ajalugu" + }, + "CLOSE": { + "message": "Sule" + }, + "CLOSE_PROMPT": { + "message": "Lehelt lahkudes katkeb teie Chrome Remote Desktopi seanss." + }, + "CLOSE_WINDOW": { + "message": "Sulgeb akna" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Kas olete kindel, et soovite keelata kaugühenduse hostiga $1$? Kui mõtlete ümber, peate selles arvutis ühendused uuesti lubama.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Ãœhendamine ebaõnnestus" + }, + "CONNECTION_FROM_HEADER": { + "message": "Allikas" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Ãœhenduse ajalugu" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Rahuldav" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Hea" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Halb" + }, + "CONNECTION_TO_HEADER": { + "message": "Host" + }, + "CONNECT_ANYWAY": { + "message": "Ãœhenda siiski" + }, + "CONNECT_BUTTON": { + "message": "Ãœhendamine" + }, + "CONTINUE_BUTTON": { + "message": "Jätka" + }, + "CONTINUE_PROMPT": { + "message": "Jagate seda seadet praegu teise kasutajaga. Kas soovite jagamist jätkata?" + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktopi hosti kontroller" + }, + "COPYRIGHT": { + "message": "Autoriõigus 2013 Google Inc. Kõik õigused kaitstud." + }, + "CREDITS": { + "message": "Tiitrid" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Kustuta kõik" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Kustuta" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Jätkamiseks peate esmalt oma arvutile andma laiendatud juurdepääsuload. Peate seda tegema vaid ühe korra." + }, + "DESCRIPTION_CONNECT": { + "message": "Paluge kasutajal, kelle arvutile soovite juurde pääseda, klõpsata nupul „$1$†ja anda teile juurdepääsukood.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop võimaldab arvutit turvaliselt veebi kaudu jagada. Mõlema kasutaja arvutis peab töötama rakendus Chrome Remote Desktop, mille leiate aadressilt $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Kaughost vajab autentimist kolmanda osapoole veebisaidil. Jätkamiseks peate andma Chrome Remote Desktopile täiendavad load juurdepääsuks sellele aadressile:" + }, + "DISABLE_HOST": { + "message": "Keela" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Katkesta ühendus" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktopi teenus" + }, + "DURATION_HEADER": { + "message": "Kestus" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Teil puudub luba selle rakenduse käitamiseks." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autentimine ebaõnnestus. Logige uuesti Chrome'i sisse." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Mõned vajalikud komponendid on puudu. Veenduge, et installitud oleks tarkvara uusim versioon, ja proovige uuesti." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ilmnes võrguviga. Rakendus taaskäivitatakse, kui seadmes on taas võrguühendus." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Kaugarvutil ei õnnestunud seanssi lähtestada. Kui probleem püsib, proovige hosti uuesti seadistada." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Kaugarvuti ei reageeri ühenduse taotlusele. Veenduge, et võrguühendus on olemas, ja proovige uuesti." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Ãœhendused kaugarvutiga on ajutiselt blokeeritud, sest keegi püüdis luua ühendust vale PIN-koodi kasutades. Proovige hiljem uuesti." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Arvuti registreerimine ebaõnnestus." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Leiti protokolli ühildumatu versioon. Veenduge, et mõlemas arvutis oleks installitud tarkvara uusim versioon, ja proovige uuesti." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Pääsukood on kehtetu. Proovige uuesti." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Reegli seaded ei luba jagada seda arvutit Chrome Remote Desktopi hostina. Abi saamiseks võtke ühendust süsteemiülemaga" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Kaugseanss on aegunud." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Mõned vajalikud komponendid on puudu. Veenduge, et käitaksite Chrome'i uusimat versiooni, ja proovige uuesti." + }, + "ERROR_NACL_DISABLED": { + "message": "Mõned vajalikud komponendid on puudu. Minge lehele chrome://plugins ja veenduge, et Native Client oleks lubatud." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Nõutav komponent peatas töö. Teavitage sellest probleemist arendajaid." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Ei saanud võrguga ühendada. Veenduge, et teie seade on võrguga ühendatud." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Te ei ole Chrome'i sisse logitud. Logige sisse ja proovige uuesti." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Teil puudub luba selle toimingu tegemiseks." + }, + "ERROR_NOT_FOUND": { + "message": "Nõutavat objekti ei ole." + }, + "ERROR_P2P_FAILURE": { + "message": "Hostiga ei saa ühendust. Seda põhjustab ilmselt kasutatava võrgu konfiguratsioon." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Teenus on ajutiselt kättesaamatu. Proovige hiljem uuesti." + }, + "ERROR_UNEXPECTED": { + "message": "Ilmnes ootamatu viga. Teatage sellest probleemist arendajatele." + }, + "EXIT_FULL_SCREEN": { + "message": "Välju täisekraanilt" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Rakendust ei saanud lähtestada. Saate siiski saata veaaruande." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Rakenduse lähtestamine. Kaotate kogu salvestamata töö." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ma ei saa seda rakendust avada." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Rakendus on liiga aeglane." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ma ei saa oma Google Drive'i faile avada." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Ma ei näe võrgus oma salvestatud faile Google Drive'is." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Mul on probleeme klaviatuuri või hiirega." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Probleemi lahendamisel abistamiseks öelge meile, mis läks valesti:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Midagi muud." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Valige ..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Selleks et saaksime teiega lisateabe saamiseks ühendust võtta, tuleb teie e-posti aadress alati lisada saadetud tagasisidele." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Probleemist teatamine" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Kaasa rakenduste logid, et aidata probleem lahendada (logid võivad sisaldada privaatset teavet)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Rakenduse logid võivad sisaldada privaatset teavet, sh teie identiteeti (e-posti aadress) ja Google Drive'is olevate failide ning kaustade atribuute ja nimesid." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Seda teavet kasutatakse ainult teavitatud probleemi diagnoosimiseks, see on saadaval ainult probleemiga tegelejale ja seda ei säilitata üle 30 päeva." + }, + "FOOTER_CONNECTING": { + "message": "Ãœhendamine ..." + }, + "FOOTER_WAITING": { + "message": "ühenduse ootamine ..." + }, + "FOR_PLATFORM_MAC": { + "message": "Macile (OS X 10.6 ja uuemad versioonid)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windowsile (XP ja uuemad versioonid)" + }, + "FULL_SCREEN": { + "message": "Täisekraan" + }, + "GET_STARTED": { + "message": "Alustamine" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Nõustu" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Keeldu" + }, + "HELP": { + "message": "Abi" + }, + "HOME_ACCESS_BUTTON": { + "message": "Sisene" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Vaadake ja juhtige jagatud arvutit." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Pääsete turvaliselt arvuti juurde Chrome Remote Desktopi abil." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Muuda PIN-koodi" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Seda arvutit jagatakse praegu teise kontoga." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Kuvamine/muutmine" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Arvuti on seadistatud nii, et see lubab ühel või mitmel kliendil luua ühenduse ilma PIN-koodi sisestamata." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Luba kaugühendused" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Kui soovite Chrome Remote Desktopiga arvuti juurde pääseda, peate lubama kaugühendused." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Keela kaugühendused" + }, + "HOME_SHARE_BUTTON": { + "message": "Jaga" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Jagage seda arvutit teise kasutajaga, nii et ta näeb ja saab arvutit juhtida." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(see funktsioon ei ole veel teie arvutis saadaval)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Järgmisele kliendile on juurdepääs keelatud: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Ãœhendatud klient: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Ãœhenduse katkestanud klient: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kanali IP kliendi jaoks: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Muu arvutiga kaugühenduse lubamiseks installige sinna Chrome Remote Desktop ja klõpsake nupul „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Ãœhtki arvutit ei ole registreeritud. Arvutis kaugühenduste lubamiseks installige Chrome Remote Desktop ja klõpsake nupul „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Olete varem sisse loginud kasutajana $1$ ($2$). Sellel kontol oma arvutitele juurdepääsemiseks $3$logige Google Chrome'i sisse$4$ selle kontoga ja installige Chrome Remote Desktop uuesti.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Tarkvaravärskendused toimuvad tavaliselt automaatselt, kuid mõnel üksikul juhul võivad need ebaõnnestuda. Tarkvara värskendamine ei tohiks võtta üle paari minuti ja saate seda teha, kui olete oma arvutiga ühendatud kaugühenduse abil." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop hostis $1$ on aegunud ja seda tuleb värskendada.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Aidake meil Chrome Remote Desktopi täiustada, lubades meil koguda kasutusstatistikat ja krahhiaruandeid." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Arvuti kaitsmiseks valige PIN-kood, mis koosneb $1$vähemalt kuuest numbrist$2$. PIN-kood tuleb sisestada muust asukohast ühenduse loomisel.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Kaugühenduse teenuse käivitamine ebaõnnestus." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome laadib alla Chrome Remote Desktopi hosti installerit. Kui allalaadimine on lõppenud, käitage enne jätkamist installerit." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Enne jätkamist käitage installerit." + }, + "HOST_SETUP_STARTED": { + "message": "Selles arvutis on lubatud kaugühendused." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Kontrollige oma arvuti toitehalduse seadeid ja veenduge, et arvuti ei ole seadistatud lülituma jõudeolekul unerežiimile." + }, + "HOST_SETUP_STARTING": { + "message": "Arvuti kaugühenduste lubamine …" + }, + "HOST_SETUP_STOPPED": { + "message": "Selles arvutis on kaugühendused keelatud." + }, + "HOST_SETUP_STOPPING": { + "message": "Arvuti kaugühenduste keelamine …" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Arvuti kaugühenduste keelamine ebaõnnestus. Proovige hiljem uuesti." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome Remote Desktopi hosti installiprogrammi allalaadimisel nõustute Google'i $1$teenusetingimustega$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Teie PIN-kood on värskendatud." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN-koodi värskendamine ebaõnnestus. Proovige hiljem uuesti." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Selle arvuti PIN-koodi värskendatakse ..." + }, + "HOST_STARTED": { + "message": "Kasutajale käivitati host: %1." + }, + "HOST_STOPPED": { + "message": "Hostimine peatati." + }, + "IDLE_CONTINUE": { + "message": "Jätka" + }, + "IDLE_DISCONNECT": { + "message": "Katkesta kohe ühendus" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Teie rakenduse $1$ seanss on olnud mõnda aega passiivne ja ühendus katkestatakse peagi.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Selle arvutiga" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome Remote Desktopi hosti installiprogrammi allalaadimine" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Arvuti jagamise alustamiseks andke allolev pääsukood inimesele, kes teid aitama hakkab." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Kui ta on koodi sisestanud, algab teie jagamisseanss." + }, + "INVALID_PIN": { + "message": "Sisestage vähemalt kuuest numbrist koosnev PIN-kood." + }, + "IT2ME_FIRST_RUN": { + "message": "Ekraani jagamine kasutajalt kasutajale, sobib täiuslikult kaugühenduse abil tehnilise toe pakkumiseks." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Klaviatuuri paigutused" + }, + "LABEL_CONNECTED": { + "message": "Ãœhendatud:" + }, + "LAST_ONLINE": { + "message": "$1$ (viimati võrgus $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Lisateave." + }, + "LEARN_MORE": { + "message": "Lisateave." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Remote Desktopi hosti eelistused" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktopi host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Remote Desktopi hosti desinstaller" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Kasuta Windowsis parempoolset juhtklahvi Ctrl (Maci puhul klahv ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maksimeeri akent" + }, + "ME2ME_FIRST_RUN": { + "message": "Kasutage oma arvutit ükskõik kus." + }, + "MESSAGE_GENERATING": { + "message": "Pääsukoodi loomine ..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Teie Chrome Remote Desktopi seanss on lõppenud." + }, + "MESSAGE_SHARED": { + "message": "Teie töölauda jagatakse praegu kasutajaga $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimeeri aken" + }, + "MODE_AUTHORIZE": { + "message": "Volita" + }, + "MODE_IT2ME": { + "message": "Kaugabi" + }, + "MODE_ME2ME": { + "message": "Minu arvutid" + }, + "NEW_WINDOW": { + "message": "Uus aken ..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Kõik seotud kliendid on kustutatud." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Sellel platvormil ei toetata töölaua integreerimist. Saate rakendust kasutada, kuid kasutuskogemus on kehvem." + }, + "OFFLINE": { + "message": "$1$ (võrguühenduseta)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Hosti lähtestamine ebaõnnestus." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Sobimatu hosti seadistus." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Sobimatu hosti omaniku domeen." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Sobimatu hosti ID." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host on seadistatud sobimatu OAuth-mandaadiga." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Konsooli loogikakuval käitatav host on varjatud režiimi toetamiseks välja lülitatud, lülitades hostile, mida käitatakse kasutajapõhises seansis." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host taaskäivitub, et arvestada muutunud eeskirjadega." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hostil ei õnnestunud eeskirju lugeda." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host on välja lülitatud." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Tundmatu hostiviga: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Sobimatu hosti omanik." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Valikud" + }, + "OUTGOING_CONNECTIONS": { + "message": "Sellest arvutist" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Järgmised kliendid on seotud selle arvutiga ja saavad luua ühenduse ilma PIN-koodi esitamata. Saate selle loa igal ajal tühistada ühe või ka kõikide klientide puhul." + }, + "PAIRED_CLIENT_DATE": { + "message": "Sidumise kuupäev" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "PIN-kood" + }, + "PINS_NOT_EQUAL": { + "message": "Sisestage mõlemale väljale sama PIN-kood." + }, + "PIN_MESSAGE": { + "message": "Sisestage hosti $1$ PIN-kood.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Sisestage kaugarvuti PIN-kood." + }, + "PRODUCT_DESCRIPTION": { + "message": "Kasutage teisi arvuteid turvaliselt Interneti kaudu või lubage teistel kasutajatel oma arvutit kasutada." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome'i rakenduste voogesitus" + }, + "RECONNECT": { + "message": "Ãœhenda uuesti" + }, + "REMEMBER_PIN": { + "message": "Ära küsi PIN-koodi uuesti, kui sellest seadmest selle hostiga ühendus luuakse." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Põhikogu" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Arvuti integreerimisprotsess" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Rakendus, millega saate Chrome Remote Desktopi hostile käske saata." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Hosti protsess" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Omasõnumside hostimine hosti haldamise kaugjuhtimiseks" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Omasõnumside hostimine kaugabi jaoks" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Turvavõtme kaugseansi protsess" + }, + "RESIZE_TO_CLIENT": { + "message": "Muuda suurust töölaua sobitamiseks" + }, + "RESTART_BUTTON": { + "message": "Taaskäivita kohe" + }, + "RESTORE_WINDOW": { + "message": "Akna taastamine" + }, + "RETRY": { + "message": "Proovi uuesti" + }, + "SCREEN_OPTIONS": { + "message": "Ekraani valikud" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Saada klahvikombinatsioon Ctrl + Alt + Del" + }, + "SEND_FEEDBACK": { + "message": "Probleemist teavitamine ..." + }, + "SEND_KEYS": { + "message": "Klahvide saatmine" + }, + "SEND_PRINT_SCREEN": { + "message": "Saada klahvi PrtScn vajutamine" + }, + "SERVICE_DESCRIPTION": { + "message": "See teenus lubab sissetulevad ühendused Chrome Remote Desktopi klientidelt." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Seda seadet juhivad teie domeeni eeskirjad." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Jaga" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Tühista" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Kas soovite jagada seda arvutit teise kasutajaga, nii et ta saab seda kasutada ja juhtida?" + }, + "SHOW_STATS": { + "message": "Kuva statistika" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Kuva statistika (ühendus: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Vähenda parajaks" + }, + "SIGN_IN_BUTTON": { + "message": "Sisselogimine" + }, + "SIGN_OUT_BUTTON": { + "message": "Logi välja" + }, + "STOP_SHARING_BUTTON": { + "message": "Lõpeta jagamine" + }, + "SURVEY_INVITATION": { + "message": "Kas soovite aidata Chrome'i kaugtöölauda täiustada? $1$Vastake küsitlusele.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Aeg" + }, + "TOGGLE_STATS": { + "message": "Kuva statistika" + }, + "TOOLTIP_CONNECT": { + "message": "Loob ühenduse hostiga $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Keelab selle arvutiga kaugühenduse loomise" + }, + "TOOLTIP_REFRESH": { + "message": "Hostide loendi värskendamine" + }, + "TOOLTIP_RENAME": { + "message": "Arvuti nime muutmine" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (aegunud)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konto" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome Remote Desktopi abil juurdepääsu lubamiseks kinnitage allpool oma konto ja PIN-kood." + }, + "WARNING_NAT_DISABLED": { + "message": "MÄRKUS: reegli seaded lubavad luua ühenduse ainult teie võrku kuuluvate arvutite vahel." + }, + "WARNING_NOT_WINDOWED": { + "message": "MÄRKUS: kõigi klaviatuuri otseteede saadavuse tagamiseks saate rakenduse Chrome Remote Desktop seadistada valikule „Ava aknanaâ€." + }, + "WHY_IS_THIS_SAFE": { + "message": "Miks on see ohutu?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Töötab …" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fa/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fa/messages.json new file mode 100644 index 000000000000..46702d0739e6 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fa/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "پذیرÙتن Ùˆ نصب" + }, + "ACCESS_CODE": { + "message": "کد دسترسی" + }, + "ACCESS_CODE_TIMER": { + "message": "این کد دسترسی در $1$ منقضی میشود", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "بازخورد" + }, + "ALL_CONNECTIONS": { + "message": "تمام اتصالات" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "تایپ مجدد پین" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "پین" + }, + "CANCEL": { + "message": "لغو" + }, + "CLEAR_HISTORY": { + "message": "پاک کردن سابقه" + }, + "CLOSE": { + "message": "بستن" + }, + "CLOSE_PROMPT": { + "message": "â€Ø¨Ø§ خارج شدن از این صÙحه، جلسه کنترل دسک‌تاپ از راه دور Chrome تمام می‌شود." + }, + "CLOSE_WINDOW": { + "message": "بستن پنجره" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "آیا مطمئنید Ú©Ù‡ می‌خواهید اتصالات راه دور به $1$ را غیرÙعال کنید؟ اگر نظرتان عوض شود، باید از همان رایانه اتصالات را مجدداً Ùعال کنید.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "اتصال ناموÙÙ‚ بود" + }, + "CONNECTION_FROM_HEADER": { + "message": "از" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "سابقه اتصال" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "متوسط" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "خوب" + }, + "CONNECTION_QUALITY_POOR": { + "message": "ضعیÙ" + }, + "CONNECTION_TO_HEADER": { + "message": "به" + }, + "CONNECT_ANYWAY": { + "message": "در هر حال متصل شود" + }, + "CONNECT_BUTTON": { + "message": "اتصال" + }, + "CONTINUE_BUTTON": { + "message": "ادامه" + }, + "CONTINUE_PROMPT": { + "message": "â€Ø´Ù…ا در حال اشتراک‌گذاری این سیستم با کاربر دیگری هستید. آیا می‎خواهید اشتراک‎گذاری ادامه یابد؟" + }, + "CONTROLLER_NAME": { + "message": "â€Ú©Ù†ØªØ±Ù„‌کننده برنامه میزبان کنترل دسک‌تاپ از راه دور Chrome" + }, + "COPYRIGHT": { + "message": "â€Ø­Ù‚ نسخه‌برداری Û²Û°Û±Û³ Google Inc. کلیه حقوق محÙوظ است." + }, + "CREDITS": { + "message": "دست‌اندرکاران" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "حذ٠همه" + }, + "DELETE_PAIRED_CLIENT": { + "message": "حذÙ" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "برای ادامه باید مجوزهای دسترسی گسترش یاÙته به رایانه‌تان را بدهید. این کار Ùقط یک بار لازم است انجام شود." + }, + "DESCRIPTION_CONNECT": { + "message": "از کاربری Ú©Ù‡ می‌خواهید به رایانه‌اش دسترسی داشته باشید بخواهید روی «$1$» کلیک کند Ùˆ کد دسترسی را به شما بدهد.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "â€Ú©Ù†ØªØ±Ù„ دسک‌تاپ از راه دور Chrome به شما اجازه می‎دهد به‌طور امن رایانه خود را در وب به اشتراک بگذارید. هر دو کاربر باید برنامه کنترل دسک‌تاپ از راه دور Chrome را اجرا کنند، این برنامه در $1$ یاÙت می‎شود.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "â€Ù…یزبان راه دور از شما می‌خواهد Ú©Ù‡ در وب سایت شخص ثالثی تأیید هویت شوید. برای ادامه، باید با مجوزهای اضاÙÛŒ «â€â€«Ú©Ù†ØªØ±Ù„ کامپیوتر از راه دور Chrome‬» برای دستیابی به این آدرس مواÙقت کنید:" + }, + "DISABLE_HOST": { + "message": "غیر Ùعال کردن" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "قطع اتصال" + }, + "DISPLAY_SERVICE_NAME": { + "message": "â€Ø³Ø±ÙˆÛŒØ³ کنترل دسک‌تاپ از راه دور Chrome" + }, + "DURATION_HEADER": { + "message": "مدت زمان" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "مجوز اجرای این برنامه را ندارید." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "â€Ø§Ø­Ø±Ø§Ø² هویت انجام نشد. لطÙاً دوباره وارد سیستم Chrome شوید." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "برخی از بخش‌ها از بین رÙته‌اند. لطÙاً مطمئن شوید آخرین نسخه نرم‌اÙزار را دارید Ùˆ دوباره امتحان کنید." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "یک خطای شبکه روی داد. وقتی دستگاهتان دوباره آنلاین شد، برنامه را راه‌اندازی مجدد می‌کنیم." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "رایانه راه دور نتوانست جلسه را مقداردهی اولیه کند. اگر مشکل ادامه داشت، لطÙاً میزبان را دوباره پیکربندی کنید." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "â€Ø±Ø§ÛŒØ§Ù†Ù‡ راه دور به درخواست اتصال پاسخ نمی‌‎دهد. لطÙاً بررسی کنید این رایانه آنلاین باشد Ùˆ دوباره امتحان کنید." + }, + "ERROR_HOST_OVERLOAD": { + "message": "اتصالات به رایانه راه دور به صورت موقت مسدود می‌شود زیرا شخصی سعی داشت با پین نامعتبر به آن متصل شود. لطÙاً در Ùرصت دیگری دوباره سعی کنید." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "این رایانه ثبت نشد." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "نسخه ناسازگار پروتکل شناسایی شد. لطÙاً مطمئن شوید جدیدترین نسخه نرم‌اÙزار روی هر دو رایانه نصب شده است Ùˆ دوباره امتحان کنید." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "کد دسترسی نامعتبر است. لطÙاً دوباره امتحان کنید." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "â€ØªÙ†Ø¸ÛŒÙ…ات خط‌مشی اجازه نمی‌دهد این رایانه به‌ عنوان یک میزبان کنترل دسک‌تاپ از راه دور Chrome اشتراک‌گذاری شود. برای دریاÙت راهنمایی با سرپرست سیستم خود تماس بگیرید." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "وقت جلسه راه دور تمام شد." + }, + "ERROR_MISSING_PLUGIN": { + "message": "â€Ø¨Ø±Ø®ÛŒ از بخش‌ها از بین رÙته‌اند. لطÙاً مطمئن شوید آخرین نسخه Chrome را دارید Ùˆ دوباره امتحان کنید." + }, + "ERROR_NACL_DISABLED": { + "message": "â€Ø¨Ø¹Ø¶ÛŒ از اجزای لازم وجود ندارند. لطÙاً به chrome://plugins بروید Ùˆ مطمئن شوید Native Client Ùعال است." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "یکی از مؤلÙه‌های ضروری دیگر کار نمی‌کند. لطÙاً این مشکل را به برنامه‌نویسان گزارش دهید." + }, + "ERROR_NETWORK_FAILURE": { + "message": "اتصال به شبکه انجام نشد. لطÙاً بررسی کنید Ú©Ù‡ دستگاه شما به اینترنت وصل باشد." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "â€ÙˆØ§Ø±Ø¯ سیستم Chrome نشدید. لطÙاً وارد سیستم شوید Ùˆ دوباره امتحان کنید." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "مجوز انجام این عمل را ندارید." + }, + "ERROR_NOT_FOUND": { + "message": "شئ درخواست شده وجود ندارد." + }, + "ERROR_P2P_FAILURE": { + "message": "دسترسی به میزبان امکان‌پذیر نیست. این احتمالاً به دلیل پیکربندی شبکه‌ای است Ú©Ù‡ استÙاده می‌کنید." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "سرویس موقتاً در دسترس نیست. لطÙاً بعداً دوباره امتحان کنید." + }, + "ERROR_UNEXPECTED": { + "message": "یک خطای غیرمنتظره روی داد. لطÙاً این مشکل را به برنامه‌نویسان گزارش دهید." + }, + "EXIT_FULL_SCREEN": { + "message": "خروج از حالت تمام صÙحه" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "برنامه بازنشانی نمی‌شود. همچنان می‌توانید یک گزارش اشکال ارسال کنید." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "بازنشانی برنامه. کارهای ذخیره نشده از بین می‌روند." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "نمی‌توانم برنامه را باز کنم." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "برنامه بیش از حد کند است." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "â€Ù†Ù…ی‌توانم Ùایل‌های Google Drive خودم را باز کنم." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "â€Ù†Ù…ی‌توانم Ùایل‌های ذخیره شده‌ام را آنلاین در Google Drive ببینم." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "با صÙحه‌کلید یا موشواره‌ام مشکل دارم." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "برای Ú©Ù…Ú© به ما در رÙع مشکلتان، لطÙاً به ما بگویید Ú†Ù‡ مشکلی پیش آمد:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "مورد دیگر." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "انتخاب..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "برای اینکه بتوانیم برای اطلاعات بیشتر با شما تماس بگیریم، آدرس ایمیل شما در تمام بازخوردهای ارسالی شما قرار می‌گیرد." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "گزارش یک مشکل" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "قرار دادن گزارش‌های برنامه برای Ú©Ù…Ú© به رÙع مشکلتان (گزارش‌ها ممکن است شامل اطلاعات خصوصی باشند)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "â€Ú¯Ø²Ø§Ø±Ø´â€ŒÙ‡Ø§ÛŒ برنامه ممکن است دارای اطلاعات شخصی شامل هویت (ایمیل) Ùˆ نام Ùˆ مشخصات Ùایل‌ها Ùˆ پوشه‌های Google Drive باشد." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "این اطلاعات Ùقط برای عیب‌یابی مشکل گزارش شده به کار می‌روند Ùˆ Ùقط برای Ùردی Ú©Ù‡ گزارش را بررسی می‌کند قابل دسترس هستند، Ùˆ بیش از Û³Û° روز نگهداری نمی‌شوند." + }, + "FOOTER_CONNECTING": { + "message": "در حال اتصال..." + }, + "FOOTER_WAITING": { + "message": "در انتظار برقراری اتصال..." + }, + "FOR_PLATFORM_MAC": { + "message": "â€Ø¨Ø±Ø§ÛŒ Mac†(OS X نسخه Û±Û°Ù«Û¶ Ùˆ بالاتر)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "â€Ø¨Ø±Ø§ÛŒ Windows†(XP Ùˆ بالاتر)" + }, + "FULL_SCREEN": { + "message": "تمام صÙحه" + }, + "GET_STARTED": { + "message": "شروع به کار" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "می‌پذیرم" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "رد کردن" + }, + "HELP": { + "message": "راهنما" + }, + "HOME_ACCESS_BUTTON": { + "message": "دسترسی" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "â€Ø±Ø§ÛŒØ§Ù†Ù‡ اشتراک‎گذاری ‎شده را مشاهده Ùˆ کنترل کنید." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "â€Ù…ی‌توانید با استÙاده از کنترل دسک‌تاپ از راه دور Chrome به این رایانه به صورت امن دسترسی پیدا کنید." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "تغییر دادن پین" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "این رایانه در حال حاضر تحت یک حساب دیگر اشتراک‌گذاری شده است." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "مشاهده/ویرایش" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "این رایانه پیکربندی شده است تا به یک یا چند کلاینت اجازه دهد بدون وارد کردن پین وصل شوند." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Ùعال کردن اتصالات راه دور" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "â€Ø§Ú¯Ø± می‌خواهید از کنترل دسک‌تاپ از راه‌ دور Chrome برای دسترسی به این رایانه استÙاده کنید٬ باید اتصالات راه دور را Ùعال کنید." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "غیر Ùعال کردن اتصالات راه دور" + }, + "HOME_SHARE_BUTTON": { + "message": "اشتراک‌گذاری" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "این رایانه را جهت مشاهده Ùˆ کنترل برای شخص دیگری به اشتراک بگذارید." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(این ویژگی هنوز برای رایانه شما موجود نیست)" + }, + "HOST_CATEGORY": { + "message": "میزبان" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "دسترسی برای کلاینت ممنوع شده است: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "کلاینت وصل شد: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "کلاینت قطع شد: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "â€IP کانال برای کلاینت: %1 ip=«%2» host_ip=«%3» کانال=«%4» اتصال=«%5»." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "â€Ø¨Ø±Ø§ÛŒ Ùعال کردن اتصالات راه دور به یک رایانه دیگر، کنترل دسک‌تاپ از راه دور Chrome را نصب کنید Ùˆ سپس روی «$1$» کلیک کنید.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "â€Ø±Ø§ÛŒØ§Ù†Ù‡ ثبت‌شده‌ای وجود ندارد. برای Ùعال کردن اتصالات راه‌دور به رایانه، کنترل دسک‌تاپ از راه دور Chrome را نصب کنید Ùˆ روی «$1$» کلیک کنید.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "â€Ù‚بلاً با $1$ ($2$) وارد سیستم شده بودید. برای دسترسی به رایانه‌های آن حساب، با آن حساب $3$وارد Google Chrome شوید$4$ Ùˆ کنترل دسک تاپ از راه دور Chrome را دوباره نصب کنید.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "معمولاً به‌روزرسانی نرم‌اÙزار به‌طور خودکار انجام می‌شود، اما در بعضی موارد نادر ممکن است این کار ناموÙÙ‚ باشد. به‌روزرسانی نرم‌اÙزار نباید بیشتر از چند دقیقه زمان ببرد Ùˆ انجام آن باید هنگام اتصال از راه دور به رایانه نیز ممکن باشد." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "â€Ú©Ù†ØªØ±Ù„ دسک‌تاپ از راه دور Chrome در $1$ به‌ روز نیست Ùˆ باید به‌روزرسانی شود.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "â€Ø¨Ø§ اجازه به ما جهت جمع‌آوری آمار مربوط به استÙاده Ùˆ گزارش‌های خرابی، Ú©Ù…Ú© کنید تا کنترل دسک تاپ از راه دور Chrome را ارتقا دهیم." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "برای Ø­Ùاظت از دسترسی به این رایانه، لطÙاً پینی را Ú©Ù‡ $1$حداقل شش رقم$2$ دارد انتخاب کنید. این پین هنگام اتصال از مکان دیگر لازم است.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "راه‌اندازی دسترسی راه دور به سرویس انجام نشد." + }, + "HOST_SETUP_INSTALL": { + "message": "â€Chrome در حال بارگیری نصب‌‌کننده میزبان کنترل دسک‌تاپ از راه دور Chrome است. بعد از اینکه دانلود انجام شد٬ قبل از ادامه٬ نصب‌کننده را اجرا کنید." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "لطÙاً قبل از ادامه٬ نصب‌کننده را اجرا کنید." + }, + "HOST_SETUP_STARTED": { + "message": "اتصالات راه دور برای این رایانه Ùعال شد." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "لطÙاً تنظیمات مدیریت نیروی رایانهٔ خود را بررسی کنید Ùˆ مطمئن شوید Ú©Ù‡ بر روی خواب در هنگام عدم استÙاده پیکربندی نشده باشد." + }, + "HOST_SETUP_STARTING": { + "message": "در حال Ùعال کردن اتصالات راه دور برای این رایانه…" + }, + "HOST_SETUP_STOPPED": { + "message": "اتصالات راه دور برای این رایانه غیرÙعال شد." + }, + "HOST_SETUP_STOPPING": { + "message": "در حال غیرÙعال کردن اتصالات راه دور برای این رایانه…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "دسترسی راه دور به این رایانه غیرÙعال نشد. لطÙاً بعداً دوباره امتحان کنید." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "â€Ø¨Ø§ دانلود «نصب‌کننده میزبان کنترل دسک‌تاپ از راه دور Chrome»، مواÙقتتان را با $1$شرایط خدمات$4 Google اعلام می‌کنید.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "پین شما به‌روز شد." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "به‌روزرسانی پین انجام نشد. لطÙاً بعداً دوباره امتحان کنید." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "پین برای این رایانه در حال به‌روزرسانی شدن است..." + }, + "HOST_STARTED": { + "message": "میزبان برای کاربر آغاز شد: %1." + }, + "HOST_STOPPED": { + "message": "میزبان متوق٠شد." + }, + "IDLE_CONTINUE": { + "message": "ادامه" + }, + "IDLE_DISCONNECT": { + "message": "قطع ارتباط" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "جلسه $1$ شما برای مدتی بیکار بوده است Ùˆ به زودی قطع می‌شود.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "به این رایانه" + }, + "INSTALLER_DOWNLOAD": { + "message": "â€Ø¯Ø§Ù†Ù„ود نصب‌کننده میزبان کنترل دسک‌تاپ از راه دور Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "â€Ø¨Ø±Ø§ÛŒ شروع اشتراک‎گذاری دسک‎تاپ خود، کد دسترسی زیر را به شخصی بدهید Ú©Ù‡ به شما Ú©Ù…Ú© می‎کند." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "â€Ù¾Ø³ از اینکه کد را وارد کرد، جلسه اشتراک‌‎گذاری شما شروع می‌شود." + }, + "INVALID_PIN": { + "message": "لطÙاً پینی وارد کنید Ú©Ù‡ دارای شش رقم یا بیشتر باشد." + }, + "IT2ME_FIRST_RUN": { + "message": "اشتراک‌گذاری صÙحه کاربر به کاربر٬ برای پشتیبانی ÙÙ†ÛŒ راه دور مناسب است." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "چیدمان‌های صÙحه‌کلید" + }, + "LABEL_CONNECTED": { + "message": "متصل شد:" + }, + "LAST_ONLINE": { + "message": "$1$ (آخرین حضور آنلاین $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "اطلاعاتی درباره نحوه انجام کار کسب کنید." + }, + "LEARN_MORE": { + "message": "بیشتر بیاموزید." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "â€ØªØ±Ø¬ÛŒØ­Ø§Øª برنامه میزبان کنترل دسک‌تاپ از راه دور Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "â€Ø¨Ø±Ù†Ø§Ù…Ù‡ میزبان کنترل\nدسک‌تاپ از راه دور Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "â€Ø­Ø°Ù‌ نصب‌کننده میزبان کنترل دسک‌تاپ از راه دور Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "â€Ø§Ø³ØªÙاده از کلید Ctrl راست برای کلید Win (â€âŒ˜ در Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "بازکردن پنجره در حداکثر اندازه" + }, + "ME2ME_FIRST_RUN": { + "message": "از همه جا به رایانه شخصی خود دسترسی داشته باشید." + }, + "MESSAGE_GENERATING": { + "message": "در حال ایجاد کد دسترسی..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "â€Ø¬Ù„سه \"کنترل دسک‌تاپ از راه دور Chrome\" تمام شد." + }, + "MESSAGE_SHARED": { + "message": "دسک‌تاپ شما در حال حاضر با $1$ به‌ اشتراک گذاشته شده است.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "بازکردن پنجره در حداقل اندازه" + }, + "MODE_AUTHORIZE": { + "message": "ارائهٔ مجوز" + }, + "MODE_IT2ME": { + "message": "راهنمایی از راه دور" + }, + "MODE_ME2ME": { + "message": "رایانه‌های من" + }, + "NEW_WINDOW": { + "message": "پنجره جدید..." + }, + "NO_PAIRED_CLIENTS": { + "message": "همه کلاینت‌های مرتبط حذ٠شده‌اند." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "هماهنگی با دسکتاپ در این پلتÙورم پشتیبانی نمی‌شود. همچنان می‌توانید از این برنامه استÙاده کنید اما تجربه کاربری مناسبی نخواهید داشت." + }, + "OFFLINE": { + "message": "$1$ (Ø¢Ùلاین)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "مقداردهی اولیه میزبان انجام نشد." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "پیکربندی میزبان نامعتبر است." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "دامنه مالک میزبان نامعتبر است." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "شناسه میزبان نامعتبر است." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "â€Ù…یزبان با اعتبارنامه OAuth نامعتبری پیکربندی شده است." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "میزبانی Ú©Ù‡ در صÙحه کنسول منطقی اجرا می‌شود خاموش شده است تا با جابه‌جایی به یک میزبان در حال اجرا در یک جلسه خاص کاربر، «حالت پرده‌ای» را پشتیبانی کند." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "میزبان در حال راه‌اندازی مجدد است تا یک تغییر در خط‌مشی را اعمال کند." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "میزبان نتوانست خط‌مشی را بخواند." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "میزبان خاموش شد." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "خطای نامشخص میزبان: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "مالک میزبان نامعتبر است." + }, + "OK": { + "message": "تأیید" + }, + "OPTIONS_MENU": { + "message": "گزینه‌ها" + }, + "OUTGOING_CONNECTIONS": { + "message": "از این رایانه" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "کلاینت‌های زیر با این کامپیوتر مرتبط شده‌اند Ùˆ می‌توانند بدون ارائه پین وصل شوند. شما می‌توانید این اجازه را در هر زمان به‌صورت جداگانه یا برای تمام کلاینت‌ها باطل کنید." + }, + "PAIRED_CLIENT_DATE": { + "message": "تاریخ مرتبط‌سازی" + }, + "PAIRED_CLIENT_NAME": { + "message": "کلاینت" + }, + "PIN": { + "message": "پین" + }, + "PINS_NOT_EQUAL": { + "message": "لطÙاً یک پین یکسان را در هر دو کادر وارد کنید." + }, + "PIN_MESSAGE": { + "message": "لطÙاً پین خود را برای $1$ وارد کنید.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "لطÙاً پین خودتان را برای رایانه راه دور وارد کنید." + }, + "PRODUCT_DESCRIPTION": { + "message": "â€Ø¨Ù‡ رایانه‎‌های دیگر دسترسی داشته باشید یا به دیگر کاربران اجازه دهید تا به‌طور امن به رایانهٔ شما در اینترنت دسترسی داشته باشند." + }, + "PRODUCT_NAME": { + "message": "â€Ú©Ù†ØªØ±Ù„ دسک‌تاپ از راه دور Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "â€Ø§Ø¬Ø±Ø§ÛŒ جریانی برنامه Chrome" + }, + "RECONNECT": { + "message": "اتصال مجدد" + }, + "REMEMBER_PIN": { + "message": "هنگام اتصال به میزبان از این دستگاه، پین دوباره درخواست نشود." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "کتابخانه اصلی" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Ùرآیند یکپارچگی با دسک‌تاپ" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "â€Ø¨Ø±Ù†Ø§Ù…ه‌ای Ú©Ù‡ دستورها را به میزبان کنترل دسک تاپ از راه دور Chrome ارسال می‌کند." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Ùرآیند میزبان" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "میزبان پیام‌رسانی بومی برای کنترل از راه دور مدیریت میزبان" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "میزبان پیام‌رسانی بومی برای Ú©Ù…Ú© از راه دور" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Ùرایند برقراری ارتباط از راه دور کلید امنیتی" + }, + "RESIZE_TO_CLIENT": { + "message": "تغییر اندازه دسک‌تاپ جهت تناسب" + }, + "RESTART_BUTTON": { + "message": "راه‌اندازی مجدد در این لحظه" + }, + "RESTORE_WINDOW": { + "message": "بازگرداندن پنجره" + }, + "RETRY": { + "message": "سعی مجدد" + }, + "SCREEN_OPTIONS": { + "message": "گزینه‌های صÙحه" + }, + "SEND_CTRL_ALT_DEL": { + "message": "â€Ø§Ø±Ø³Ø§Ù„ Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "گزارش مشکل..." + }, + "SEND_KEYS": { + "message": "ارسال کلیدها" + }, + "SEND_PRINT_SCREEN": { + "message": "â€Ø§Ø±Ø³Ø§Ù„ PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "â€Ø§ÛŒÙ† سرویس اتصالات ورودی از کلاینت‌های کنترل دسک‌تاپ از راه دور Chrome را Ùعال می‌کند." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "این تنظیم براساس خط‌مشی دامنه‌تان مدیریت می‌شود." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "اشتراک‌گذاری" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "لغو" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "می‌خواهید این رایانه را برای کاربر دیگر جهت مشاهده Ùˆ کنترل به اشتراک بگذارید؟" + }, + "SHOW_STATS": { + "message": "نمایش آمار" + }, + "SHOW_STATS_WITH_RTT": { + "message": "نمایش آمار (ارتباط: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "کاهش اندازه" + }, + "SIGN_IN_BUTTON": { + "message": "ورود به سیستم" + }, + "SIGN_OUT_BUTTON": { + "message": "خروج از سیستم" + }, + "STOP_SHARING_BUTTON": { + "message": "توق٠اشتراک‌گذاری" + }, + "SURVEY_INVITATION": { + "message": "â€Ø¢ÛŒØ§ می‌خواهید به بهبود کنترل دسک‌تاپ راه دور Chrome Ú©Ù…Ú© کنید؟ $1$در نظرسنجی شرکت کنید.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "زمان" + }, + "TOGGLE_STATS": { + "message": "نمایش آمار" + }, + "TOOLTIP_CONNECT": { + "message": "اتصال به $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "غیرÙعال کردن اتصالات راه دور به این رایانه" + }, + "TOOLTIP_REFRESH": { + "message": "بازخوانی Ùهرست میزبان‌ها" + }, + "TOOLTIP_RENAME": { + "message": "ویرایش نام رایانه" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (تاریخ گذشته)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "حساب" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "â€Ø¨Ø±Ø§ÛŒ اجازه دسترسی توسط برنامه کنترل دسک‌تاپ از راه دور ChromeØŒ لطÙاً حساب Ùˆ پین خود را در زیر تأیید کنید." + }, + "WARNING_NAT_DISABLED": { + "message": "â€ØªÙˆØ¬Ù‡: تنظیمات خط‌ مشی Ùقط اجازه اتصال بین رایانه‎های داخل شبکه شما را می‎دهد." + }, + "WARNING_NOT_WINDOWED": { + "message": "â€ØªÙˆØ¬Ù‡: برای اطمینان از اینکه همه میان‌برهای صÙحه‌کلید در دسترس هستند، می‌توانید کنترل دسک‌تاپ از راه دور Chrome را روی «بازکردن به عنوان پنجره» پیکربندی کنید." + }, + "WHY_IS_THIS_SAFE": { + "message": "چرا این امن است؟" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "در حال انجام..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fake_bidi/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fake_bidi/messages.json new file mode 100644 index 000000000000..d0ba039904d8 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fake_bidi/messages.json @@ -0,0 +1,792 @@ +{ + "CLOSE_PROMPT": { + "message": "Leaving this page will end your Chrome Remote Desktop session." + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "The remote host requires you to authenticate to a third-party website. To continue, you must grant Chrome Remote Desktop additional permissions to access this address:" + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop allows you to securely share your computer over the Web. Both users must be running the Chrome Remote Desktop app, which can be found at $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Authentication failed. Please sign in to Chrome again." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Policy settings do not permit sharing this computer as a Chrome Remote Desktop host. Contact your system administrator for assistance." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "You are not signed in to Chrome. Please sign in and try again." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "You may securely access this computer using Chrome Remote Desktop." + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "You must enable remote connections if you want to use Chrome Remote Desktop to access this computer." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "To enable remote connections to a different computer, install Chrome Remote Desktop there and click \u201c$1$\u201d.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "You have no computers registered. To enable remote connections to a computer, install Chrome Remote Desktop there and click \u201c$1$\u201d.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "You have previously signed in as $1$ ($2$). To access your computers in that account, $3$sign in to Google Chrome$4$ with that account and re-install Chrome Remote Desktop.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Help us improve Chrome Remote Desktop by allowing us to collect usage statistics and crash reports." + }, + "INSTALLER_DOWNLOAD": { + "message": "Download Chrome Remote Desktop Host Installer" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "By downloading the Chrome Remote Desktop Host Installer, you are agreeing to the Google $1$Terms of Service$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome is downloading the Chrome Remote Desktop Host installer. Once the download is complete, please run the installer before continuing." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Your Chrome Remote Desktop session has ended." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTE: To ensure that all keyboard shortcuts are available, you can configure Chrome Remote Desktop to \u2018Open as window\u2019." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop on $1$ is out-of-date and needs to be updated.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SURVEY_INVITATION": { + "message": "Want to help improve Chrome Remote Desktop? $1$Take the survey.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. All Rights Reserved." + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktop Service" + }, + "SERVICE_DESCRIPTION": { + "message": "This service enables incoming connections from Chrome Remote Desktop clients." + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktop Host Controller" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Please confirm your account and PIN below to allow access by Chrome Remote Desktop." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Preferences" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop Host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Uninstaller" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "An incompatible protocol version was detected. Please make sure that you have the latest version of the software installed on both computers and try again." + }, + "DESCRIPTION_AUTHORIZE": { + "message": "To continue you must first grant extended access permissions to your computer. You only have to do this once." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Some required components are missing. Please make sure you have installed the latest version of the software and try again." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Some required components are missing. Please make sure you're running the latest version of Chrome and try again." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "A required component has stopped working. Please report this problem to the developers." + }, + "ERROR_NACL_DISABLED": { + "message": "Some required components are missing. Please go to chrome://plugins and make sure Native Client is enabled." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "You do not have permission to perform that action." + }, + "ERROR_NOT_FOUND": { + "message": "The requested object does not exist." + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "You do not have permission to run this application." + }, + "SHOW_STATS": { + "message": "Show statistics" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Show statistics (connection: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Good" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Fair" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Poor" + }, + "SEND_FEEDBACK": { + "message": "Report an issue\u2026" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Report an issue" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "To allow us to contact you for further information, your email address will be included in any feedback you submit." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "To help us solve your problem, please tell us what went wrong:" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Select\u2026" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "I can't open the application." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "The application is too slow." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "I'm having problems with my keyboard or mouse." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "I can't see my saved files on-line in Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "I can't open my Google Drive files." + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Something else." + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Reset the application. You will lose any unsaved work." + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Include application logs to help us resolve your problem (logs may include private information)." + }, + "LEARN_MORE": { + "message": "Learn more." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Application logs may include private information, including your identity (email address) and the names and properties of files and folders in Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "This information is used only for diagnosing the problem you are reporting, is available only to someone investigating your report, and is retained for no more than 30 days." + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Could not reset the application. You can still send a bug report." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Keyboard layouts" + }, + "CONNECTION_FAILED": { + "message": "Connection failed" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Desktop integration is not supported on this platform. You can still use the application, but the user experience will be degraded." + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Your $1$ session has been inactive for a while and will be disconnected shortly.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "IDLE_CONTINUE": { + "message": "Continue" + }, + "IDLE_DISCONNECT": { + "message": "Disconnect now" + }, + "RESTART_BUTTON": { + "message": "Restart now" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "A network error occurred. We will restart the app when your device is on-line again." + }, + "ACCESS_CODE": { + "message": "Access code" + }, + "ACCESS_CODE_TIMER": { + "message": "This access code will expire in $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ALL_CONNECTIONS": { + "message": "All connections" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Re-type PIN" + }, + "CANCEL": { + "message": "Cancel" + }, + "CLEAR_HISTORY": { + "message": "Clear history" + }, + "CLOSE": { + "message": "Close" + }, + "CONNECT_BUTTON": { + "message": "Connect" + }, + "CONNECT_ANYWAY": { + "message": "Connect anyway" + }, + "CONFIRM_HOST_DELETE": { + "message": "Are you sure you want to disable remote connections to $1$? If you change your mind, you'll need to visit that computer to re-enable connections.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FROM_HEADER": { + "message": "From" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Connection History" + }, + "CONNECTION_TO_HEADER": { + "message": "To" + }, + "CONTINUE_BUTTON": { + "message": "Continue" + }, + "CONTINUE_PROMPT": { + "message": "You are currently sharing this machine with another user. Do you want to continue sharing?" + }, + "DESCRIPTION_CONNECT": { + "message": "Ask the user whose computer you wish to access to click \u201c$1$\u201d and give you the access code.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DISABLE_HOST": { + "message": "Disable" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Disconnect" + }, + "DURATION_HEADER": { + "message": "Duration" + }, + "ERROR_HOST_OVERLOAD": { + "message": "Connections to the remote computer are temporarily blocked because somebody was trying to connect to it with invalid PIN. Please try again later." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "The remote session has expired." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "The remote computer has failed to initialize the session. If problem persist please try to configure the host again." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "The remote computer is not responding to connection requests. Please verify that it is online and try again." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "The access code is invalid. Please try again." + }, + "ERROR_P2P_FAILURE": { + "message": "Unable to reach the host. This is probably due to the configuration of the network you are using." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Could not connect to the network. Please check that your device is on-line." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "The service is temporarily unavailable. Please try again later." + }, + "ERROR_UNEXPECTED": { + "message": "An unexpected error occurred. Please report this problem to the developers." + }, + "FOOTER_CONNECTING": { + "message": "Connecting\u2026" + }, + "FOOTER_WAITING": { + "message": "waiting for connection\u2026" + }, + "FULL_SCREEN": { + "message": "Full screen" + }, + "EXIT_FULL_SCREEN": { + "message": "Exit full screen" + }, + "CLOSE_WINDOW": { + "message": "Close window" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximize window" + }, + "MINIMIZE_WINDOW": { + "message": "Minimize window" + }, + "RESTORE_WINDOW": { + "message": "Restore window" + }, + "OPTIONS_MENU": { + "message": "Options" + }, + "GET_STARTED": { + "message": "Get started" + }, + "HELP": { + "message": "Help" + }, + "CREDITS": { + "message": "Credits" + }, + "HOME_ACCESS_BUTTON": { + "message": "Access" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "See and control a shared computer." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Change PIN" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Disable remote connections" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Enable remote connections" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "This computer is currently shared under a different account." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "To protect access to this computer, please choose a PIN of $1$at least six digits$2$. This PIN will be required when connecting from another location.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Failed to start remote access service." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Please run the installer before continuing." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Failed to register this computer." + }, + "HOST_SETUP_STARTED": { + "message": "Remote connections for this computer have been enabled." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Please check your computer's power management settings and ensure that it is not configured to sleep when idle." + }, + "HOST_SETUP_STARTING": { + "message": "Enabling remote connections for this computer\u2026" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Failed to disable remote access to this computer. Please try again later." + }, + "HOST_SETUP_STOPPED": { + "message": "Remote connections for this computer have been disabled." + }, + "HOST_SETUP_STOPPING": { + "message": "Disabling remote connections for this computer\u2026" + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Your PIN has been updated." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "The PIN for this computer is being updated\u2026" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Failed to update the PIN. Please try again later." + }, + "HOME_SHARE_BUTTON": { + "message": "Share" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Share this computer for another user to see and control." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(this feature is not yet available for your computer)" + }, + "INCOMING_CONNECTIONS": { + "message": "To this computer" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "To begin sharing your desktop, give the access code below to the person who will be assisting you." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Once they enter the code your sharing session will begin." + }, + "INVALID_PIN": { + "message": "Please enter a PIN consisting of six or more digits." + }, + "IT2ME_FIRST_RUN": { + "message": "User-to-user screen sharing, perfect for remote technical support." + }, + "LABEL_CONNECTED": { + "message": "Connected:" + }, + "ME2ME_FIRST_RUN": { + "message": "Access your own computer from anywhere." + }, + "MESSAGE_GENERATING": { + "message": "Generating access code\u2026" + }, + "MESSAGE_SHARED": { + "message": "Your desktop is currently shared with $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MODE_AUTHORIZE": { + "message": "Authorize" + }, + "MODE_IT2ME": { + "message": "Remote Assistance" + }, + "MODE_ME2ME": { + "message": "My Computers" + }, + "OK": { + "message": "OK" + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "LAST_ONLINE": { + "message": "$1$ (last online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Host initialization failed." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Invalid host configuration." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Invalid host id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host is configured with invalid OAuth credentials." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Invalid host owner domain." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Host running at the console logic screen has shutdown to support curtain mode by switching to a host running in a user-specific session." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Host failed to read the policy." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host is restarting, to take into account a policy change." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host has shut down." + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Invalid host owner." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Unrecognized host error: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "UPDATE_REQUIRED": { + "message": "$1$ (out-of-date)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Software updates usually happen automatically, but can fail in some rare cases. Updating the software should take no more than a few minutes and can be done while connected to your computer remotely." + }, + "OUTGOING_CONNECTIONS": { + "message": "From this computer" + }, + "PIN": { + "message": "PIN" + }, + "PIN_MESSAGE": { + "message": "Please enter your PIN for $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Please enter your PIN for the remote computer." + }, + "PINS_NOT_EQUAL": { + "message": "Please enter the same PIN in both boxes." + }, + "PRODUCT_DESCRIPTION": { + "message": "Access other computers or allow another user to access your computer securely over the Internet." + }, + "RECONNECT": { + "message": "Reconnect" + }, + "RESIZE_TO_CLIENT": { + "message": "Resize desktop to fit" + }, + "RETRY": { + "message": "Retry" + }, + "SCREEN_OPTIONS": { + "message": "Screen options" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Send Ctrl-Alt-Del" + }, + "SEND_KEYS": { + "message": "Send keys" + }, + "SEND_PRINT_SCREEN": { + "message": "Send PrtScn" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Use right Ctrl for Win key (\u2318 on Mac)" + }, + "SHRINK_TO_FIT": { + "message": "Shrink to fit" + }, + "SIGN_IN_BUTTON": { + "message": "Sign in" + }, + "SIGN_OUT_BUTTON": { + "message": "Sign out" + }, + "STOP_SHARING_BUTTON": { + "message": "Stop Sharing" + }, + "TIME_HEADER": { + "message": "Time" + }, + "TOOLTIP_CONNECT": { + "message": "Connect to $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Disable remote connections to this computer" + }, + "TOOLTIP_REFRESH": { + "message": "Refresh the list of hosts" + }, + "TOOLTIP_RENAME": { + "message": "Edit computer name" + }, + "WARNING_NAT_DISABLED": { + "message": "NOTE: Policy settings permit connections only between computers within your network." + }, + "LEARN_HOW": { + "message": "Learn how." + }, + "WHY_IS_THIS_SAFE": { + "message": "Why is this safe?" + }, + "REMEMBER_PIN": { + "message": "Don't ask for a PIN again when connecting to this host from this device." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Core Library" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Desktop Integration Process" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Host Process" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Native messaging host for remoting host management" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Native messaging host for remote assistance" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Security Key Remoting Process" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Application to issue commands to Chrome remote desktop host." + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Account" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client connected: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client disconnected: %1." + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Access denied for client: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Channel IP for client: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_STARTED": { + "message": "Host started for user: %1." + }, + "HOST_STOPPED": { + "message": "Host stopped." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "View/edit" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Delete" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Delete all" + }, + "NO_PAIRED_CLIENTS": { + "message": "All paired clients have been deleted." + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "This computer is configured to allow one or more clients to connect without entering a PIN." + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "The following clients have been paired with this computer and can connect without supplying a PIN. You can revoke this permission at any time, either individually, or for all clients." + }, + "PAIRED_CLIENT_DATE": { + "message": "Pairing date" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "WORKING": { + "message": "Working\u2026" + }, + "TOGGLE_STATS": { + "message": "Show statistics" + }, + "NEW_WINDOW": { + "message": "New window\u2026" + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accept" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Decline" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Would you like to share this computer for another user to see and control?" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Share" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancel" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "This setting is managed by your domain policy." + }, + "FOR_PLATFORM_WINDOWS": { + "message": "For Windows (XP and above)" + }, + "FOR_PLATFORM_MAC": { + "message": "For Mac (OS X 10.6 and above)" + }, + "ACCEPT_AND_INSTALL": { + "message": "Accept and Install" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fi/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fi/messages.json new file mode 100644 index 000000000000..c73e7b497d00 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fi/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Hyväksy ja asenna" + }, + "ACCESS_CODE": { + "message": "Käyttökoodi" + }, + "ACCESS_CODE_TIMER": { + "message": "Tämä käyttökoodi vanhenee $1$ kuluttua.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Palaute" + }, + "ALL_CONNECTIONS": { + "message": "Kaikki yhteydet" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Kirjoita PIN-koodi uudelleen" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN-koodi" + }, + "CANCEL": { + "message": "Peruuta" + }, + "CLEAR_HISTORY": { + "message": "Tyhjennä historia" + }, + "CLOSE": { + "message": "Sulje" + }, + "CLOSE_PROMPT": { + "message": "Vaihtamalla sivua päätät Chrome-etäkäyttökerran." + }, + "CLOSE_WINDOW": { + "message": "Sulje ikkuna" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Haluatko varmasti poistaa käytöstä etäyhteydet kohteeseen $1$? Jos muutat mieltäsi, yhteydet täytyy palauttaa käyttöön kyseisellä tietokoneella.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Yhteyden muodostaminen epäonnistui." + }, + "CONNECTION_FROM_HEADER": { + "message": "Lähde" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Yhteyshistoria" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Kohtalainen" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Hyvä" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Huono" + }, + "CONNECTION_TO_HEADER": { + "message": "Kohde" + }, + "CONNECT_ANYWAY": { + "message": "Yhdistä silti" + }, + "CONNECT_BUTTON": { + "message": "Muodosta yhteys" + }, + "CONTINUE_BUTTON": { + "message": "Jatka" + }, + "CONTINUE_PROMPT": { + "message": "Jaat tällä hetkellä tämän tietokoneen toisen käyttäjän kanssa. Haluatko jatkaa jakamista?" + }, + "CONTROLLER_NAME": { + "message": "Chrome-etäkäytön isännän hallinta" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Kaikki oikeudet pidätetään." + }, + "CREDITS": { + "message": "Tekijät" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Poista kaikki" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Poista" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Jotta voit jatkaa, sinun on annettava laajennetut käyttöoikeudet tietokoneeseesi. Tämä täytyy tehdä vain kerran." + }, + "DESCRIPTION_CONNECT": { + "message": "Ota yhteyttä käyttäjään, jonka tietokonetta haluat käyttää. Pyydä häntä klikkaamaan $1$ ja antamaan käyttökoodi sinulle.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome-etäkäyttösovelluksen avulla voit jakaa tietokoneesi suojatun verkkoyhteyden kautta. Molempien käyttäjien täytyy käyttää osoitteesta $1$ löytyvää Chrome-etäkäyttösovellusta.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Etäisäntä edellyttää todennusta kolmannen osapuolen sivustossa. Jos haluat jatkaa, anna Chrome-etäkäytölle lisäkäyttölupia tämän osoitteen avaamiseksi:" + }, + "DISABLE_HOST": { + "message": "Poista käytöstä" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Katkaise yhteys" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome-etäkäyttöpalvelu" + }, + "DURATION_HEADER": { + "message": "Kesto" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Sinulla ei ole lupaa suorittaa tätä sovellusta." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Todennus epäonnistui. Kirjaudu uudelleen sisään Chromeen." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Joitakin vaadittavia komponentteja puuttuu. Varmista, että olet asentanut ohjelmiston uusimman version, ja yritä uudelleen." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Verkkovirhe. Käynnistämme sovelluksen uudelleen, kun laitteesi on seuraavan kerran yhteydessä verkkoon." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Etätietokone ei alustanut istuntoa oikein. Jos ongelma ei ratkea, yritä määrittää isäntäkoneen asetukset uudelleen." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Etätietokone ei vastaa yhteyspyyntöihin. Vahvista, että se on online-tilassa, ja yritä uudelleen." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Yhteydet etätietokoneeseen on väliaikaisesti estetty, sillä siihen yritettiin ottaa yhteys virheellisellä PIN-koodilla. Yritä myöhemmin uudelleen." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Tietokoneen rekisteröinti epäonnistui." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Havaittiin yhteensopimaton protokollaversio. Varmista, että molemmissa tietokoneissa on ohjelman uusimmat versiot, ja yritä uudelleen." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Käyttökoodi on virheellinen. Yritä uudelleen." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Käytäntöasetukset eivät salli tämän tietokoneen jakamista Chrome-etäkäyttöisäntänä. Ota yhteyttä järjestelmänvalvojaan." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Etäistunto on vanhentunut." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Jotkin vaadittavat komponentit puuttuvat. Varmista, että käytät uusinta Chrome-versiota, ja yritä uudelleen." + }, + "ERROR_NACL_DISABLED": { + "message": "Joitakin pakollisia komponentteja puuttuu. Avaa osoite chrome://plugins ja varmista, että Native Client on käytössä." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Tarvittava osa ei toimi enää. Ilmoita tästä ongelmasta kehittäjille." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Verkkoon yhdistäminen ei onnistu. Varmista, että laitteesi on online-tilassa." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Et ole kirjautunut Chromeen. Kirjaudu sisään ja yritä uudelleen." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Sinulla ei ole lupaa suorittaa tätä toimintoa." + }, + "ERROR_NOT_FOUND": { + "message": "Pyydettyä kohdetta ei ole olemassa." + }, + "ERROR_P2P_FAILURE": { + "message": "Isäntään ei saatu yhteyttä. Tämä johtuu luultavasti käyttämäsi verkon määrityksistä." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Palvelu ei ole tällä hetkellä käytettävissä. Yritä myöhemmin uudelleen." + }, + "ERROR_UNEXPECTED": { + "message": "Odottamaton virhe. Ilmoita tästä ongelmasta kehittäjille." + }, + "EXIT_FULL_SCREEN": { + "message": "Poistu koko näytön tilasta" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Sovelluksen nollaus epäonnistui. Voit silti lähettää vikailmoituksen." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Nollaa sovellus. Menetät kaikki tallentamattomat työt." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Sovellus ei aukea." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Sovellus on liian hidas." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Google Drive -tiedostoni eivät aukea." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Tallennetut Google Drive -tiedostoni eivät näy verkossa." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Näppäimistö tai hiiri tuottaa ongelmia." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Auta ratkaisemaan ongelma kertomalla, mikä on vialla:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Jokin muu syy." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Valitse…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Jotta voimme kysyä sinulta lisätietoja, sähköpostiosoitteesi liitetään kaikkeen lähettämääsi palautteeseen." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Ilmoita ongelmasta" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Sisällytä sovelluslokeja, jotka voivat auttaa ongelmanratkaisussa (lokit voivat sisältää yksityisiä tietoja)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Sovelluslokeissa voi olla yksityisiä tietoja, kuten henkilöllisyytesi (sähköpostiosoite) ja Google Drivessa olevien tiedostojen ja kansioiden nimet ja ominaisuudet." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Näitä tietoja käytetään vain ilmoittamasi ongelman diagnosointiin, näytetään vain ongelmaasi selvittävälle henkilölle ja säilytetään korkeintaan 30 päivää." + }, + "FOOTER_CONNECTING": { + "message": "Yhdistetään…" + }, + "FOOTER_WAITING": { + "message": "odotetaan yhteyttä..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 ja uudemmat versiot)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP ja uudemmat versiot)" + }, + "FULL_SCREEN": { + "message": "Koko näyttö" + }, + "GET_STARTED": { + "message": "Aloita" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Hyväksy" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Hylkää" + }, + "HELP": { + "message": "Ohje" + }, + "HOME_ACCESS_BUTTON": { + "message": "Käyttöoikeudet" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Tarkastele ja hallinnoi jaettua tietokonetta." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Tähän tietokoneeseen voi muodostaa suojatun yhteyden Chrome-etäkäytön avulla." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Vaihda PIN-koodi" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Tämä tietokone on jaettu eri tilille." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Tarkastele/muokkaa" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Tämä tietokone on määritetty sallimaan vähintään yhden asiakkaan yhteys ilman PIN-koodia." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Ota etäyhteydet käyttöön" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Etäyhteydet on otettava käyttöön, jotta tietokonetta voidaan käyttää Chrome-etäkäytön avulla." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Poista etäyhteydet käytöstä" + }, + "HOME_SHARE_BUTTON": { + "message": "Jaa" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Jaa tämä tietokone toisen käyttäjän nähtäväksi ja hallinnoitavaksi." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Tämä ominaisuus ei ole vielä saatavilla tietokoneellesi.)" + }, + "HOST_CATEGORY": { + "message": "Isäntä" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Käyttöoikeus kiellettiin asiakkaalta %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Asiakas %1 yhdistettiin." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Asiakkaan %1 yhteys katkaistiin." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Asiakkaan kanavan IP-osoite: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Ota etäyhteys käyttöön asentamalla toiselle tietokoneelle Chrome-etäkäyttö ja valitsemalla $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Käyttöösi ei ole rekisteröity tietokoneita. Ota käyttöön etäyhteys asentamalla toiselle tietokoneelle Chrome-etäkäyttö ja klikkaamalla painiketta $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Olet aiemmin kirjautunut sisään käyttäjänä $1$ ($2$). Jos haluat käyttää tietokoneitasi tämän tilin kautta, $3$kirjaudu Google Chromeen$4$ kyseisellä tilillä ja asenna Chrome-etäkäyttö uudelleen.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Ohjelmistopäivitykset tapahtuvat yleensä automaattisesti, mutta voivat epäonnistua joissakin harvinaisissa tapauksissa. Ohjelmiston päivittäminen kestää yleensä vain muutaman minuutin, ja se voidaan suorittaa etäyhteyden välityksellä." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome-etäkäyttö kohteessa $1$ on vanhentunut ja vaatii päivityksen.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Auta meitä parantamaan Chrome-etäkäyttöä antamalla meidän kerätä käyttötilastoja ja virheraportteja." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Suojaa tämän tietokoneen käyttöä valitsemalla $1$vähintään kuusinumeroinen$2$ PIN-koodi. Tarvitset PIN-koodin muodostaessasi yhteyden toiselta koneelta.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Etäkäyttöpalvelun käynnistäminen epäonnistui." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome lataa Chrome-etäkäytön isäntäsovelluksen asennusohjelmaa. Suorita asennusohjelma, kun lataus on valmis." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Suorita asennusohjelma ennen kuin jatkat." + }, + "HOST_SETUP_STARTED": { + "message": "Tietokoneen etäyhteydet on otettu käyttöön." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Tarkista tietokoneen virranhallinta-asetukset ja varmista, että sitä ei ole määritetty siirtymään virransäästötilaan, kun sitä ei käytetä." + }, + "HOST_SETUP_STARTING": { + "message": "Otetaan tietokoneen etäyhteyksiä käyttöön…" + }, + "HOST_SETUP_STOPPED": { + "message": "Tietokoneen etäyhteydet on poistettu käytöstä." + }, + "HOST_SETUP_STOPPING": { + "message": "Poistetaan tietokoneen etäyhteyksiä käytöstä…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Etäyhteyksien poistaminen käytöstä epäonnistui. Yritä myöhemmin uudelleen." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Lataamalla Chrome-etäkäytön isännän asennusohjelman hyväksyt Googlen $1$käyttöehdot$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN-koodi on päivitetty." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN-koodin päivitys epäonnistui. Yritä myöhemmin uudelleen." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Tietokoneen PIN-koodia päivitetään…" + }, + "HOST_STARTED": { + "message": "Käyttäjän %1 isäntä käynnistettiin." + }, + "HOST_STOPPED": { + "message": "Isäntä pysähtyi." + }, + "IDLE_CONTINUE": { + "message": "Jatka" + }, + "IDLE_DISCONNECT": { + "message": "Katkaise yhteys nyt" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "$1$ -istuntosi on ollut epäaktiivinen jonkin aikaa, ja se katkaistaan pian.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Tähän tietokoneeseen" + }, + "INSTALLER_DOWNLOAD": { + "message": "Lataa Chrome-etäkäytön isännän asennusohjelma" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Aloita työpöydän jakaminen antamalla käyttökoodi sinua avustavalle henkilölle." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Tietokoneen jakaminen aloitetaan käyttäjän annettua käyttökoodin." + }, + "INVALID_PIN": { + "message": "Anna PIN-koodi, jossa on vähintään kuusi numeroa." + }, + "IT2ME_FIRST_RUN": { + "message": "Ruudun jakaminen käyttäjien välillä sopii hyvin teknisen etätuen antamiseen." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Näppäinasettelut" + }, + "LABEL_CONNECTED": { + "message": "Yhdistetty:" + }, + "LAST_ONLINE": { + "message": "$1$ (viimeksi online-tilassa $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Lisätietoja." + }, + "LEARN_MORE": { + "message": "Lisätietoja" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome-etäkäytön isäntäasetukset" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome-etäkäytön\nisäntä" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome-etäkäytön isännän asennuksen poisto" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Käytä oikeanpuoleista Ctrl-painiketta Win-painikkeena (⌘ Macilla)" + }, + "MAXIMIZE_WINDOW": { + "message": "Suurenna ikkuna" + }, + "ME2ME_FIRST_RUN": { + "message": "Käytä tietokonettasi mistä haluat." + }, + "MESSAGE_GENERATING": { + "message": "Luodaan käyttökoodia..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Chrome-etäkäyttökerta on päättynyt." + }, + "MESSAGE_SHARED": { + "message": "Tietokoneesi on jaettu käyttäjän $1$ kanssa.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Pienennä ikkuna" + }, + "MODE_AUTHORIZE": { + "message": "Valtuuta" + }, + "MODE_IT2ME": { + "message": "Etätuki" + }, + "MODE_ME2ME": { + "message": "Omat tietokoneet" + }, + "NEW_WINDOW": { + "message": "Uusi ikkuna…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Kaikki laitepareiksi yhdistetyt asiakkaat on poistettu." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Tämä alusta ei tue työpöydän integraatiota. Voit silti käyttää sovellusta, mutta käyttökokemus on heikompi." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Isännän alustus epäonnistui." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Isännän omistajan määritykset ovat virheelliset." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Isännän omistajan verkkotunnus on virheellinen." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Isännän tunnus on virheellinen." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Isännälle on määritetty virheelliset OAuth-kirjautumistiedot." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Konsolin logiikkaruudussa käynnissä ollut isäntä sulkeutui tukeakseen verhotilaa. Vaihdetaan käyttäjäkohtaisessa istunnossa käynnissä olevaan isäntään." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Isäntä käynnistyy uudelleen ja ottaa käyttöön käytäntöihin tehdyn muutoksen." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Isäntä ei voinut lukea käytäntöä." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Isäntä on offline-tilassa." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Tuntematon isäntävirhe: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Isännän omistaja on virheellinen." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Asetukset" + }, + "OUTGOING_CONNECTIONS": { + "message": "Tältä tietokoneelta" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Seuraavat asiakkaat on yhdistetty tämän tietokoneen laitepareiksi, ja ne voivat muodostaa yhteyden ilman PIN-koodia. Voit peruuttaa luvan milloin tahansa joko yksitellen tai kaikille asiakkaille yhtä aikaa." + }, + "PAIRED_CLIENT_DATE": { + "message": "Laiteparin muodostamispäivä" + }, + "PAIRED_CLIENT_NAME": { + "message": "Asiakas" + }, + "PIN": { + "message": "PIN-koodi" + }, + "PINS_NOT_EQUAL": { + "message": "Kirjoita sama PIN-koodi molempiin ruutuihin." + }, + "PIN_MESSAGE": { + "message": "Anna kohteen $1$ PIN-koodi.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Anna etätietokoneen PIN-koodi." + }, + "PRODUCT_DESCRIPTION": { + "message": "Käytä muita tietokoneita tai salli toisen käyttäjän käyttää tietokonettasi suojatun internetyhteyden kautta." + }, + "PRODUCT_NAME": { + "message": "Chrome-etäkäyttö" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome-sovellusten suoratoisto" + }, + "RECONNECT": { + "message": "Yhdistä uudelleen" + }, + "REMEMBER_PIN": { + "message": "Älä kysy PIN-koodia uudelleen yhdistettäessä tähän isäntään tältä laitteelta." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Ydinkirjasto" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Tietokoneen integrointiprosessi" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Sovellus, joka antaa komentoja Chromen etätyöpöytäisännälle." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Isäntäprosessi" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Viestiliikenteen alkuperäinen isäntä etäisännän hallinnalle" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Viestiliikenteen alkuperäinen isäntä etäavustukselle" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Suojausavaimen etäkäyttöprosessi" + }, + "RESIZE_TO_CLIENT": { + "message": "Sovita työpöydän koko" + }, + "RESTART_BUTTON": { + "message": "Käynnistä uudelleen" + }, + "RESTORE_WINDOW": { + "message": "Palauta ikkuna" + }, + "RETRY": { + "message": "Yritä uudelleen" + }, + "SCREEN_OPTIONS": { + "message": "Ruudun asetukset" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Lähetä Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Ilmoita ongelmasta…" + }, + "SEND_KEYS": { + "message": "Lähetä näppäinvalinta" + }, + "SEND_PRINT_SCREEN": { + "message": "Lähetä PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Tämä palvelu mahdollistaa Chrome-etäkäytön asiakkaiden muodostamat yhteydet." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Verkkotunnuksesi käytäntö määrittää tämän asetuksen." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Jaa" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Peruuta" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Haluatko jakaa tämän tietokoneen niin, että toinen käyttäjä voi käyttää ja valvoa sitä?" + }, + "SHOW_STATS": { + "message": "Näytä tilastot" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Näytä tilastot (yhteys: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Sovita ikkunaan" + }, + "SIGN_IN_BUTTON": { + "message": "Kirjaudu sisään" + }, + "SIGN_OUT_BUTTON": { + "message": "Kirjaudu ulos" + }, + "STOP_SHARING_BUTTON": { + "message": "Lopeta jakaminen" + }, + "SURVEY_INVITATION": { + "message": "Haluatko parantaa Chromen etäkäyttöä? $1$Osallistu kyselyyn.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Aika" + }, + "TOGGLE_STATS": { + "message": "Näytä tilastot" + }, + "TOOLTIP_CONNECT": { + "message": "Yhdistä kohteeseen $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Poista käytöstä etäyhteydet tähän tietokoneeseen" + }, + "TOOLTIP_REFRESH": { + "message": "Päivitä isäntäluettelo" + }, + "TOOLTIP_RENAME": { + "message": "Muokkaa tietokoneen nimeä" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (vanhentunut)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Tili" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Myönnä käyttöoikeus Chrome-etäkäytön kautta vahvistamalla tilisi ja PIN-koodisi alla." + }, + "WARNING_NAT_DISABLED": { + "message": "HUOMAA: käytäntöasetusten vuoksi vain verkossasi olevien tietokoneiden väliset yhteydet sallitaan." + }, + "WARNING_NOT_WINDOWED": { + "message": "Huomaa: voit varmistaa kaikkien pikanäppäinten käytettävyyden, kun määrität Chrome-etäkäytön avautumaan ikkunassa." + }, + "WHY_IS_THIS_SAFE": { + "message": "Miksi tämä on turvallista?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Käsitellään…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fil/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fil/messages.json new file mode 100644 index 000000000000..3a38365cb077 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fil/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Tanggapin at I-install" + }, + "ACCESS_CODE": { + "message": "Access code" + }, + "ACCESS_CODE_TIMER": { + "message": "Mag-e-expire ang access code sa loob ng $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Lahat ng koneksyon" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Muling i-type ang PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Ikansela" + }, + "CLEAR_HISTORY": { + "message": "I-clear ang kasaysayan" + }, + "CLOSE": { + "message": "Isara" + }, + "CLOSE_PROMPT": { + "message": "Tatapusin ng pag-alis sa pahinang ito ang iyong session sa Remote na Desktop ng Chrome." + }, + "CLOSE_WINDOW": { + "message": "Isara ang window" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Sigurado ka bang nais mong hindi paganahin ang mga malayuang koneksyon sa $1$? Kung magbago ang iyong isip, kakailanganin mong bisitahin ang computer na iyon upang muling paganahin ang mga koneksyon.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Hindi nakakonekta" + }, + "CONNECTION_FROM_HEADER": { + "message": "Mula kay" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Kasaysayan ng Koneksyon" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Medyo Malakas" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Malakas" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Mahina" + }, + "CONNECTION_TO_HEADER": { + "message": "Para kay" + }, + "CONNECT_ANYWAY": { + "message": "Kumonekta pa rin" + }, + "CONNECT_BUTTON": { + "message": "Kumonekta" + }, + "CONTINUE_BUTTON": { + "message": "Magpatuloy" + }, + "CONTINUE_PROMPT": { + "message": "Kasalukuyan mong ibinabahagi ang machine na ito sa isa pang user. Nais mo bang ituloy ang pagbabahagi?" + }, + "CONTROLLER_NAME": { + "message": "Controller ng Host ng Remote na Desktop ng Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Nakalaan ang Lahat ng Karapatan." + }, + "CREDITS": { + "message": "Mga Credit" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Tanggalin lahat" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Burahin" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Upang magpatuloy, dapat ka munang magbigay ng mga pahintulot sa pinalawak na access sa iyong computer. Isang beses mo lang ito kailangang gawin." + }, + "DESCRIPTION_CONNECT": { + "message": "Hilingin sa user na may-ari ng computer na gusto mong i-access na i-click ang “$1$†at ibigay sa iyo ang access code.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Binibigyang-daan ka ng Remote na Desktop ng Chrome na ligtas na maibahagi ang iyong computer sa Web. Dapat na nagpapatakbo ang parehong user ng app ng Remote na Desktop ng Chrome, na matatagpuan sa $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Hinihiling sa iyo ng remote host na magpatunay sa isang website ng third-party. Upang makapagpatuloy, dapat mong bigyan ng mga karagdagang pahintulot ang Remote na Desktop ng Chrome upang ma-access ang address na ito:" + }, + "DISABLE_HOST": { + "message": "Huwag paganahin" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "I-disconnect" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Serbisyo ng Remote na Desktop ng Chrome" + }, + "DURATION_HEADER": { + "message": "Tagal" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Wala kang pahintulot na gamitin ang application na ito." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Hindi naisagawa ang pagpapatotoo. Mangyaring muling mag-sign in sa Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Nawawala ang ilang bahagi na kinakailangan. Pakitiyak na na-install mo ang pinakabagong bersyon ng software at subukang muli." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Nagkaroon ng error sa network. Ire-restart namin ang app kapag on-line nang muli ang iyong device." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Hindi nasimulan ng remote na computer ang session. Kung ayaw mawala ng problema, pakisubukang i-configure muli ang host." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Hindi tumutugon ang malayuang computer sa mga kahilingan sa koneksyon. Paki-verify na online ito at subukang muli." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Pansamantalang naka-block ang mga koneksyon sa malayuang computer dahil may sumusubok na kumonekta rito gamit ang di-wastong PIN. Pakisubukang muli sa ibang pagkakataon." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Nabigong irehistro ang computer na ito." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Nakakita ng hindi tugmang bersyon ng protocol. Pakitiyak na na-install mo ang pinakabagong bersyon ng software sa parehong computer at subukang muli." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Di-wasto ang access code. Pakisubukang muli." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Hindi pinapahintulutan ng mga setting ng patakaran ang pagbabahagi sa computer na ito bilang host ng Remote na Desktop ng Chrome. Makipag-ugnay sa iyong system administrator para sa tulong." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Nag-expire na ang remote na session." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Nawawala ang ilang bahagi na kinakailangan. Pakitiyak na ginagamit mo ang pinakabagong bersyon ng Chrome at subukang muli." + }, + "ERROR_NACL_DISABLED": { + "message": "Nawawala ang ilang kinakailangang bahagi. Mangyaring pumunta sa chrome://plugins at tiyaking naka-enable ang Native Client." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Huminto sa paggana ang isang kinakailangang bahagi. Pakiulat ang problemang ito sa mga developer." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Hindi makakonekta sa network. Pakitiyak na on-line ang iyong device." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Hindi ka naka-sign in sa Chrome. Mangyaring mag-sign in at subukang muli." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Wala kang pahintulot na gawin ang pagkilos na iyon." + }, + "ERROR_NOT_FOUND": { + "message": "Hindi umiiral ang hiniling na bagay." + }, + "ERROR_P2P_FAILURE": { + "message": "Hindi maabot ang host. Malamang na dahil ito sa configuration ng network na iyong ginagamit." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Pansamantalang hindi available ang serbisyo. Pakisubukang muli sa ibang pagkakataon." + }, + "ERROR_UNEXPECTED": { + "message": "May naganap na hindi inaasahang error. Paki-ulat ang problemang ito sa mga developer." + }, + "EXIT_FULL_SCREEN": { + "message": "Lumabas sa buong screen" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Hindi ma-reset ang application. Maaari ka pa ring magpadala ng ulat sa bug." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "I-reset ang application. Mawawala ang anumang hindi na-save na gawa." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Hindi ko mabuksan ang application." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Masyadong mabagal ang application." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Hindi ko mabuksan ang aking mga file sa Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Hindi ko makita ang aking mga naka-save file habang on-line sa Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Nagkakaroon ako ng mga problema sa aking keyboard o mouse." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Upang tulungan kaming lutasin ang iyong problema, pakilahad sa amin kung ano ang maling nangyari:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Iba pang bagay." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Pumili…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Upang mabigyang-daan kaming makipag-ugnayan sa iyo para sa karagdagang impormasyon, isasama ang iyong email address sa anumang feedback na iyong isusumite." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Mag-ulat ng isyu" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Isama ang mga log ng application upang matulungan kaming lutasin ang iyong problema (maaaring kasama sa mga log ang pribadong impormasyon)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Maaaring kasama sa mga log ng application ang pribadong impormasyon, kabilang na ang iyong pagkakakilanlan (email address) at ang mga pangalan at property ng mga file at folder sa Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Ang impormasyong ito ay ginagamit lang para sa pagda-diagnose sa problemang inuulat mo, available lang sa isang taong nagsisiyasat ng iyong ulat, at pinapanatili sa loob ng hindi hihigit sa 30 araw." + }, + "FOOTER_CONNECTING": { + "message": "Kumokonekta…" + }, + "FOOTER_WAITING": { + "message": "naghihintay ng koneksyon…" + }, + "FOR_PLATFORM_MAC": { + "message": "Para sa Mac (OS X 10.6 at mas bago)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Para sa Windows (XP at mas bago)" + }, + "FULL_SCREEN": { + "message": "Buong screen" + }, + "GET_STARTED": { + "message": "Magsimula" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Tanggapin" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Tanggihan" + }, + "HELP": { + "message": "Tulong" + }, + "HOME_ACCESS_BUTTON": { + "message": "I-access" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Tumingin at magkontrol ng nakabahaging computer." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Maaari mong ligtas na ma-access ang computer na ito gamit ang Remote na Desktop ng Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Palitan ang PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Kasalukuyang ibinabahagi ang computer na ito sa ilalim ng ibang account." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Tingnan/i-edit" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Naka-configure ang computer na ito na payagan ang isa o higit pang mga client na kumonekta nang hindi naglalagay ng PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Paganahin ang mga malayuang koneksyon" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Dapat mong paganahin ang mga malayuang koneksyon kung nais mong gamitin ang Remote na Desktop ng Chrome upang i-access ang computer na ito." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Huwag paganahin ang mga malayuang koneksyon" + }, + "HOME_SHARE_BUTTON": { + "message": "Ibahagi" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Ibahagi ang computer na ito upang makita at makontrol ng isa pang user." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(hindi pa available ang feature na ito para sa iyong computer)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Tinanggihan ang pag-access para sa client: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Nakakonekta ang client: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Naputol ang koneksyon ng client: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Channel IP para sa client: %1 ip='%2' host_ip='%3' channel='%4' koneksyon='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Upang paganahin ang mga malayuang koneksyon sa ibang computer, i-install ang Remote na Desktop ng Chrome doon at i-click ang “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Wala kang mga nakarehistrong computer. Upang paganahin ang mga malayuang koneksyon sa isang computer, i-install ang Remote na Desktop ng Chrome doon at i-click ang “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Nag-sign in ka dati bilang $1$ ($2$). Upang ma-access ang iyong mga computer sa account na iyon, $3$mag-sign in sa Google Chrome$4$ gamit ang account na iyon at muling i-install ang Remote na Desktop ng Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Karaniwang awtomatikong isinasagawa ang mga pag-update sa software, ngunit maaaring mabigo sa ilang hindi pangkaraniwang sitwasyon. Hindi dapat tumagal nang mahigit sa ilang minuto ang pag-update sa software at magagawa ito habang nakakonekta sa iyong computer nang malayuan." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Ang Remote na Desktop ng Chrome sa $1$ ay luma na at kinakailangang ma-update.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Tumulong sa amin na pahusayin ang Remote na Desktop ng Chrome sa pamamagitan ng pagbibigay-daan sa amin na mangolekta ng mga statistics sa paggamit at mga ulat ng pag-crash." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Upang protektahan ang access sa computer na ito, mangyaring pumili ng PIN na may $1$hindi bababa sa anim na digit$2$. Kakailanganin ang PIN na ito kapag kumokonekta mula sa isa pang lokasyon.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Nabigong simulan ang serbisyo ng malayuang pag-access." + }, + "HOST_SETUP_INSTALL": { + "message": "Dina-download ng Chrome ang installer ng Host ng Remote na Desktop ng Chrome. Sa sandaling makumpleto ang pag-download, mangyaring patakbuhin ang installer bago magpatuloy." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Mangyaring patakbuhin ang installer bago magpatuloy." + }, + "HOST_SETUP_STARTED": { + "message": "Pinagana na ang mga malayuang koneksyon para sa computer na ito." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Pakisuri ang mga setting sa pamamahala ng power ng iyong computer at tiyakin na hindi ito naka-configure na mag-sleep kapag idle." + }, + "HOST_SETUP_STARTING": { + "message": "Pinapagana ang mga malayuang koneksyon para sa computer na ito…" + }, + "HOST_SETUP_STOPPED": { + "message": "Hindi pinagana ang mga malayuang koneksyon para sa computer na ito." + }, + "HOST_SETUP_STOPPING": { + "message": "Hindi pinapagana ang mga malayuang koneksyon para sa computer na ito…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Nabigo ang hindi pagpapagana sa malayuang access sa computer na ito. Pakisubukang muli sa ibang pagkakataon." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Sa pamamagitan ng pagda-download ng Host Installer ng Remote na Desktop ng Chrome, sumasang-ayon ka sa $1$Mga Tuntunin ng Serbisyo$4 ng Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Na-update na ang iyong PIN." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Nabigong i-update ang PIN. Pakisubukang muli sa ibang pagkakataon." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Ina-update ang PIN para sa computer na ito…" + }, + "HOST_STARTED": { + "message": "Sinimulan ang host para sa user: %1." + }, + "HOST_STOPPED": { + "message": "Huminto ang host." + }, + "IDLE_CONTINUE": { + "message": "Magpatuloy" + }, + "IDLE_DISCONNECT": { + "message": "Alisin na sa pagkakakonekta" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Ilang sandali nang hindi aktibo ang iyong session ng $1$ at aalisin na ito sa pagkakakonekta maya-maya.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Sa computer na ito" + }, + "INSTALLER_DOWNLOAD": { + "message": "i-download ang Host Installer ng Remote na Desktop ng Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Upang simulang ibahagi ang iyong desktop, ibigay ang access code sa ibaba sa taong tutulong sa iyo." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Sa sandaling ilagay nila ang code, magsisimula ang iyong session ng pagbabahagi." + }, + "INVALID_PIN": { + "message": "Mangyaring maglagay ng PIN na binubuo ng anim o higit pang mga digit." + }, + "IT2ME_FIRST_RUN": { + "message": "Pagbabahagi ng screen na user-sa-user, mainam para sa malayuang suportang panteknikal." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Mga layout ng keyboard" + }, + "LABEL_CONNECTED": { + "message": "Nakakonekta:" + }, + "LAST_ONLINE": { + "message": "$1$ (huling online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Matutunan kung paano." + }, + "LEARN_MORE": { + "message": "Matuto nang higit pa." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Mga Kagustuhan sa Host ng Remote na Desktop ng Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host ng Remote na\nDesktop ng Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Uninstaller ng Host ng Remote na Desktop ng Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Gamitin ang Ctrl sa kanan para sa Win key (⌘ sa Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "I-maximize ang window" + }, + "ME2ME_FIRST_RUN": { + "message": "I-access ang sarili mong computer mula saanman." + }, + "MESSAGE_GENERATING": { + "message": "Bumubuo ng access code…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Natapos na ang iyong session sa Remote na Desktop ng Chrome." + }, + "MESSAGE_SHARED": { + "message": "Kasalukuyang nakabahagi ang iyong desktop kay $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "I-minimize ang window" + }, + "MODE_AUTHORIZE": { + "message": "Pahintulutan" + }, + "MODE_IT2ME": { + "message": "Malayuang Tulong" + }, + "MODE_ME2ME": { + "message": "Aking Mga Computer" + }, + "NEW_WINDOW": { + "message": "Bagong window…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Tinanggal na ang lahat ng naipares na client." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Hindi sinusuportahan sa platform na ito ang pagsasama sa desktop. Maaari mo pa ring gamitin ang application, ngunit hindi magiging maganda ang karanasan ng user." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Hindi na-initialize ang host." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Di-wastong configuration ng host." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Di-wastong domain ng may-ari ng host." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Di-wastong host id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Na-configure ang host gamit ang mga di-wastong kredensyal sa OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Nag-shutdown ang host na tumatakbo sa console logic screen upang masuportahan ang curtain mode sa pamamagitan ng paglipat sa isang host na tumatakbo sa isang user-specific session." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Nagre-restart ang host, upang isama ang pagbabago sa patakaran." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hindi nabasa ng host ang patakaran." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Nag-shut down ang host." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Hindi alam na error sa host: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Di-wastong may-ari ng host." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Mga Pagpipilian" + }, + "OUTGOING_CONNECTIONS": { + "message": "Mula sa computer na ito" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Naipares ang mga sumusunod na client sa computer na ito at makakakonekta nang hindi nagbibigay ng PIN. Mababawi mo ang pahintulot na ito anumang oras, nang paisa-isa, o para sa lahat ng client." + }, + "PAIRED_CLIENT_DATE": { + "message": "Petsa ng pagpapares" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Pakilagay ang parehong PIN sa parehong kahon." + }, + "PIN_MESSAGE": { + "message": "Pakilagay ang iyong PIN para sa $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Pakilagay ang iyong PIN para sa remote na computer." + }, + "PRODUCT_DESCRIPTION": { + "message": "Mag-access ng iba pang mga computer o payagan ang isa pang user na ligtas na i-access sa Internet ang iyong computer." + }, + "PRODUCT_NAME": { + "message": "Remote na Desktop ng Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Muling kumonekta" + }, + "REMEMBER_PIN": { + "message": "Huwag muling humingi ng PIN kapag kumokonekta sa host na ito mula sa device na ito." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Pangunahing Library" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proseso ng Pagsasama ng Desktop" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Application na magbibigay ng mga command sa host ng remote na desktop ng Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proseso ng Host" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Host ng native na pagmemensahe para sa pagre-remote ng pamamahala ng host" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Host ng native na pagmemensahe para sa remote na tulong" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proseso ng Pagre-remote sa Security Key" + }, + "RESIZE_TO_CLIENT": { + "message": "Baguhin ang laki ng desktop upang kumasya" + }, + "RESTART_BUTTON": { + "message": "I-restart ngayon" + }, + "RESTORE_WINDOW": { + "message": "Ibalik ang window" + }, + "RETRY": { + "message": "Subukang muli" + }, + "SCREEN_OPTIONS": { + "message": "Mga pagpipilian sa screen" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Magpadala ng Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Mag-ulat ng isyu…" + }, + "SEND_KEYS": { + "message": "Ipadala ang mga key" + }, + "SEND_PRINT_SCREEN": { + "message": "Magpadala ng PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ini-enable ng serbisyong ito ang mga papasok na koneksyon mula sa mga client ng Remote na Desktop ng Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Pinamamahalaan ang setting na ito ng iyong patakaran sa domain." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Ibahagi" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Ikansela" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Gusto mo bang ibahagi ang computer na ito upang makita at makontrol ng ibang user?" + }, + "SHOW_STATS": { + "message": "Ipakita ang mga istatistika" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Ipakita ang mga istatistika (koneksyon: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Paliitin upang magkasya" + }, + "SIGN_IN_BUTTON": { + "message": "Mag-sign in" + }, + "SIGN_OUT_BUTTON": { + "message": "Mag-sign out" + }, + "STOP_SHARING_BUTTON": { + "message": "Ihinto ang Pagbabahagi" + }, + "SURVEY_INVITATION": { + "message": "Gustong tulungang mapabuti ang Chrome Remote Desktop? $1$Sagutan ang survey.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Oras" + }, + "TOGGLE_STATS": { + "message": "Ipakita ang mga istatistika" + }, + "TOOLTIP_CONNECT": { + "message": "Kumonekta sa $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Huwag paganahin ang mga malayuang koneksyon sa computer na ito" + }, + "TOOLTIP_REFRESH": { + "message": "I-refresh ang listahan ng mga host" + }, + "TOOLTIP_RENAME": { + "message": "I-edit ang pangalan ng computer" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (luma)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Account" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Pakikumpirma ang iyong account at PIN sa ibaba upang payagan ang pag-access ng Remote na Desktop ng Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "TANDAAN: Ang pinapayagan ng mga setting ng patakaran ay mga koneksyon lang sa pagitan ng mga computer sa loob ng iyong network." + }, + "WARNING_NOT_WINDOWED": { + "message": "TANDAAN: Upang matiyak na available ang lahat ng keyboard shortcut, maaari mong i-configure ang Remote na Desktop ng Chrome sa ‘Buksan bilang window’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Bakit ito ligtas?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Mga Window" + }, + "WORKING": { + "message": "Isinasagawa…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fr/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fr/messages.json new file mode 100644 index 000000000000..d7b18ea5cf13 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/fr/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Accepter et installer" + }, + "ACCESS_CODE": { + "message": "Code d'accès" + }, + "ACCESS_CODE_TIMER": { + "message": "Ce code d'accès expire dans $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Commentaires" + }, + "ALL_CONNECTIONS": { + "message": "Toutes les connexions" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Saisissez à nouveau le code d'accès." + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "Code d'accès" + }, + "CANCEL": { + "message": "Annuler" + }, + "CLEAR_HISTORY": { + "message": "Effacer l'historique" + }, + "CLOSE": { + "message": "Fermer" + }, + "CLOSE_PROMPT": { + "message": "En quittant cette page, vous mettrez fin à la session du bureau à distance Google Chrome." + }, + "CLOSE_WINDOW": { + "message": "Fermer la fenêtre" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Voulez-vous vraiment désactiver les connexions à distance à $1$ ? Si vous changez d'avis, vous devrez réactiver les connexions depuis cet ordinateur.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Échec de la connexion" + }, + "CONNECTION_FROM_HEADER": { + "message": "De" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historique des connexions" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Correcte" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Bonne" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Médiocre" + }, + "CONNECTION_TO_HEADER": { + "message": "À" + }, + "CONNECT_ANYWAY": { + "message": "Ignorer le message et se connecter" + }, + "CONNECT_BUTTON": { + "message": "Connexion" + }, + "CONTINUE_BUTTON": { + "message": "Continuer" + }, + "CONTINUE_PROMPT": { + "message": "Vous partagez actuellement cette machine avec un autre utilisateur. Voulez-vous continuer ce partage ?" + }, + "CONTROLLER_NAME": { + "message": "Contrôleur de l'hôte Bureau à distance Google Chrome" + }, + "COPYRIGHT": { + "message": "Copyright © Google Inc. 2013. Tous droits réservés." + }, + "CREDITS": { + "message": "Remerciements" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Tout supprimer" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Supprimer" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Pour continuer, vous devez autoriser l'accès étendu à votre ordinateur. Vous n'aurez à effectuer cette opération qu'une seule fois." + }, + "DESCRIPTION_CONNECT": { + "message": "Demandez à l'utilisateur de l'ordinateur auquel vous souhaitez accéder de cliquer sur \"$1$\" et de vous donner le code d'accès.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "L'application Bureau à distance Google Chrome vous permet de partager votre ordinateur sur le Web en toute sécurité. Pour ce faire, les deux utilisateurs en question doivent exécuter cette application, disponible à l'adresse $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "L'hôte distant nécessite votre authentification auprès d'un site Web tiers. Pour continuer, vous devez accorder au Bureau à distance Chrome des autorisations supplémentaires afin d'accéder à l'adresse suivante :" + }, + "DISABLE_HOST": { + "message": "Désactiver" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Se déconnecter" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Service Bureau à distance Google Chrome" + }, + "DURATION_HEADER": { + "message": "Durée" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Vous n'êtes pas autorisé à exécuter cette application." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Échec de l'authentification. Veuillez vous connecter de nouveau à Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Certains composants nécessaires sont introuvables. Veuillez vous assurer que vous utilisez la dernière version du logiciel, puis réessayer." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Une erreur réseau s'est produite. L'application va être redémarrée lorsque votre appareil sera de nouveau en ligne." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Échec de l'initialisation de la session par l'ordinateur distant. Si le problème persiste, veuillez réessayer de configurer l'hôte." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "L'ordinateur à distance ne répond pas aux demandes de connexion. Veuillez vérifier qu'il est connecté, puis réessayer." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Les connexions à l'ordinateur à distance sont momentanément bloquées, car un utilisateur a tenté de s'y connecter en utilisant un code d'accès erroné. Veuillez réessayer ultérieurement." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Échec de l'enregistrement de cet ordinateur." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Une version de protocole incompatible a été détectée. Veuillez vous assurer que vous utilisez la dernière version du logiciel sur les deux ordinateurs, puis réessayer." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Le code d'accès n'est pas valide. Veuillez réessayer." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Les paramètres des règles n'autorisent pas le partage de cet ordinateur en tant qu'hôte du bureau à distance Google Chrome. Veuillez contacter votre administrateur système pour obtenir de l'aide." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "La session à distance est arrivée à expiration." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Certains composants nécessaires sont introuvables. Veuillez vous assurer que vous utilisez la dernière version de Chrome, puis réessayer." + }, + "ERROR_NACL_DISABLED": { + "message": "Il manque certains composants obligatoires. Veuillez accéder à chrome://plugins et pour vous assurer que Native Client est activé." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Un composant requis a cessé de fonctionner. Veuillez signaler le problème aux développeurs." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Impossible de se connecter au réseau. Veuillez vérifier que votre appareil est en ligne." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Vous n'êtes pas connecté à Chrome. Veuillez vous connecter et réessayer." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Vous n'êtes pas autorisé à effectuer cette action." + }, + "ERROR_NOT_FOUND": { + "message": "L'objet demandé n'existe pas." + }, + "ERROR_P2P_FAILURE": { + "message": "Impossible de joindre l'hôte, probablement en raison de la configuration du réseau que vous utilisez." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Le service est momentanément indisponible. Veuillez réessayer ultérieurement." + }, + "ERROR_UNEXPECTED": { + "message": "Une erreur inattendue s'est produite. Veuillez signaler le problème aux développeurs." + }, + "EXIT_FULL_SCREEN": { + "message": "Quitter le mode plein écran" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Impossible de réinitialiser l'application. Vous pouvez toujours envoyer un rapport de bug." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Réinitialiser l'application (toutes les données non enregistrées seront perdues)" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Je n'arrive pas à ouvrir l'application." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "L'application est trop lente." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Je n'arrive pas à ouvrir mes fichiers Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Je ne vois pas mes fichiers enregistrés en ligne sur Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Je rencontre des problèmes avec mon clavier ou ma souris." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Afin de nous aider à résoudre votre problème, veuillez nous fournir plus de détails :" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Autre" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Sélectionner…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Afin que nous puissions vous contacter pour vous demander de nous fournir plus d'informations, votre adresse e-mail est incluse dans tous les commentaires que vous soumettez." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Signaler un problème" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Inclure les journaux des applications afin de nous aider à résoudre votre problème (les journaux peuvent inclure des informations confidentielles)" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Les journaux des applications peuvent inclure des informations confidentielles, y compris votre identité (adresse e-mail), ainsi que le nom et les propriétés des fichiers et des dossiers dans Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Ces informations sont conservées 30 jours au maximum et mises à disposition uniquement de la personne chargée d'étudier votre rapport afin d'identifier le problème que vous avez relevé." + }, + "FOOTER_CONNECTING": { + "message": "Connexion en cours…" + }, + "FOOTER_WAITING": { + "message": "en attente de connexion…" + }, + "FOR_PLATFORM_MAC": { + "message": "Pour Mac (OS X 10.6 ou version ultérieure)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Pour Windows (XP ou version ultérieure)" + }, + "FULL_SCREEN": { + "message": "Plein écran" + }, + "GET_STARTED": { + "message": "Premiers pas" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accepter" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Refuser" + }, + "HELP": { + "message": "Aide" + }, + "HOME_ACCESS_BUTTON": { + "message": "Accéder" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Voir et contrôler un ordinateur partagé" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Vous pouvez accéder à cet ordinateur en toute sécurité via le bureau à distance Google Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Modifier le code PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Cet ordinateur est actuellement partagé sous un autre compte." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Afficher/modifier" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Cet ordinateur est configuré pour permettre à un ou plusieurs clients de se connecter sans saisir de code d'accès." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Activer les connexions à distance" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Si vous souhaitez utiliser le bureau à distance Google Chrome pour accéder à cet ordinateur, vous devez activer les connexions à distance." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Désactiver les connexions à distance" + }, + "HOME_SHARE_BUTTON": { + "message": "Partager" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Partager cet ordinateur et permettre à un utilisateur de le voir et de le contrôler" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "Cette fonctionnalité n'est pas encore disponible pour votre ordinateur." + }, + "HOST_CATEGORY": { + "message": "Hôte" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Accès refusé au client : %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client connecté : %1" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Déconnexion du client : %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Version de l'IP pour le client : %1 adresse IP = \"%2\" adresse IP de l'hôte = \"%3\" channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Pour activer les connexions à distance à un autre ordinateur, installez l'application Bureau à distance Google Chrome sur celui-ci, puis cliquez sur \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Aucun ordinateur n'est enregistré. Pour activer les connexions à distance à un ordinateur, installez l'application Bureau à distance Google Chrome sur celui-ci, puis cliquez sur \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Vous vous êtes auparavant connecté avec le nom d'utilisateur \"$1$\" ($2$). Pour accéder à vos ordinateurs avec ce compte, $3$connectez-vous à Google Chrome$4$ avec ce compte, puis réinstallez le Bureau à distance Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "En règle générale, les mises à jour logicielles sont automatiques, mais des problèmes d'installation surviennent parfois. Sachez que quelques minutes devraient suffire pour mettre à jour le logiciel à distance." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Le bureau à distance Chrome sur $1$ est obsolète. Vous devez le mettre à jour.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Aidez-nous à améliorer le bureau à distance Google Chrome en nous autorisant à recueillir des statistiques d'utilisation et des rapports d'erreur." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Pour protéger l'accès à cet ordinateur, veuillez choisir un code d'accès d'$1$au moins six chiffres$2$. Ce code d'accès sera demandé lors d'une connexion depuis un autre appareil.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Échec du démarrage du service d'accès à distance." + }, + "HOST_SETUP_INSTALL": { + "message": "Le programme d'installation de l'hôte du bureau à distance Google Chrome est en cours de téléchargement dans Google Chrome. Une fois le téléchargement terminé, veuillez lancer le programme d'installation avant de continuer." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Veuillez lancer le programme d'installation avant de continuer." + }, + "HOST_SETUP_STARTED": { + "message": "Les connexions à distance ont été activées pour cet ordinateur." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Veuillez vérifier les paramètres de gestion d'alimentation de votre ordinateur et vous assurer qu'il n'est pas configuré pour se mettre en veille en cas d'inactivité." + }, + "HOST_SETUP_STARTING": { + "message": "Activation des connexions à distance pour cet ordinateur en cours…" + }, + "HOST_SETUP_STOPPED": { + "message": "Les connexions à distance ont été désactivées pour cet ordinateur." + }, + "HOST_SETUP_STOPPING": { + "message": "Désactivation des connexions à distance pour cet ordinateur en cours…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Échec de la désactivation de l'accès à distance pour cet ordinateur. Veuillez réessayer ultérieurement." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "En téléchargeant le programme d'installation de l'hôte Bureau à distance Google Chrome, vous acceptez les $1$Conditions d'utilisation$4 de Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Votre code d'accès a été mis à jour." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Échec de la mise à jour du code d'accès. Veuillez réessayer ultérieurement." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Mise à jour du code d'accès pour cet ordinateur en cours…" + }, + "HOST_STARTED": { + "message": "Hôte démarré pour l'utilisateur \"%1\"" + }, + "HOST_STOPPED": { + "message": "Hôte suspendu" + }, + "IDLE_CONTINUE": { + "message": "Continuer" + }, + "IDLE_DISCONNECT": { + "message": "Se déconnecter maintenant" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Votre session $1$ est inactive depuis un certain temps et risque de se fermer bientôt.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "À cet ordinateur" + }, + "INSTALLER_DOWNLOAD": { + "message": "Télécharger le programme d'installation de l'hôte Bureau à distance Google Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Pour démarrer le partage de votre bureau, communiquez le code d'accès ci-dessous à la personne qui vous assistera." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Votre session de partage débutera une fois le code saisi." + }, + "INVALID_PIN": { + "message": "Veuillez saisir un code d'accès composé d'au moins six chiffres." + }, + "IT2ME_FIRST_RUN": { + "message": "Partagez des écrans avec d'autres utilisateurs : idéal pour l'assistance technique à distance." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Dispositions de clavier" + }, + "LABEL_CONNECTED": { + "message": "Connecté :" + }, + "LAST_ONLINE": { + "message": "$1$ (dernière connexion : $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "En savoir plus" + }, + "LEARN_MORE": { + "message": "En savoir plus" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Préférences relatives à l'hôte Bureau à distance Google Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Hôte Bureau à distance\nGoogle Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Programme de désinstallation de l'hôte Bureau à distance Google Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Utiliser la touche Ctrl de droite comme touche Windows (ou ⌘ sur un Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Agrandir la fenêtre" + }, + "ME2ME_FIRST_RUN": { + "message": "Accédez à votre ordinateur où que vous soyez." + }, + "MESSAGE_GENERATING": { + "message": "Génération du code d'accès…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "La session du bureau à distance Google Chrome est terminée." + }, + "MESSAGE_SHARED": { + "message": "Vous partagez actuellement votre bureau avec $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Réduire la fenêtre" + }, + "MODE_AUTHORIZE": { + "message": "Autoriser" + }, + "MODE_IT2ME": { + "message": "Assistance à distance" + }, + "MODE_ME2ME": { + "message": "Mes ordinateurs" + }, + "NEW_WINDOW": { + "message": "Nouvelle fenêtre…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Tous les clients associés ont été supprimés." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "L'intégration du Bureau est impossible sur cette plate-forme. Vous pouvez toujours utiliser l'application, mais avec une expérience utilisateur de moindre qualité." + }, + "OFFLINE": { + "message": "$1$ (hors connexion)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Échec de l'initialisation de l'hôte." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Configuration d'hôte incorrecte." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Domaine propriétaire de l'hôte incorrect." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID d'hôte incorrect." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "L'hôte est configuré avec des identifiants OAuth incorrects." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "L'exécution de l'hôte sur l'écran de connexion de la console s'est arrêtée pour accepter le mode Rideau en passant à une exécution d'hôte dans une session propre à l'utilisateur." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "L'hôte redémarre afin d'appliquer une modification des règles." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "L'hôte n'est pas parvenu à lire les règles." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "L'hôte a été arrêté." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Erreur d'hôte non reconnue : $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Le propriétaire de l'hôte est incorrect." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Options" + }, + "OUTGOING_CONNECTIONS": { + "message": "À partir de cet ordinateur" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Les clients suivants ont été associés à cet ordinateur. Ils peuvent donc s'y connecter sans fournir de code d'accès. Vous pouvez révoquer cette autorisation à tout moment, pour l'ensemble des clients ou individuellement." + }, + "PAIRED_CLIENT_DATE": { + "message": "Date d'association" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "Code d'accès" + }, + "PINS_NOT_EQUAL": { + "message": "Veuillez saisir le même code d'accès dans les deux champs." + }, + "PIN_MESSAGE": { + "message": "Veuillez saisir le code d'accès pour $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Veuillez saisir le code d'accès de l'ordinateur distant." + }, + "PRODUCT_DESCRIPTION": { + "message": "Accédez à d'autres ordinateurs ou permettez à un utilisateur d'accéder au vôtre en toute sécurité via Internet." + }, + "PRODUCT_NAME": { + "message": "Bureau à distance Google Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Reconnexion" + }, + "REMEMBER_PIN": { + "message": "Ne plus demander de code d'accès en cas de connexion à cet hôte depuis cet appareil" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Bibliothèque principale" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Processus d'intégration au Bureau" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Demande pour émettre des commandes à l'hôte du Bureau à distance Chrome" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Processus relatif à l'hôte" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Hôte de messagerie native pour la gestion d'hôte de Remoting" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Hôte de messagerie native pour l'assistance à distance" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Processus de communication à distance de la clé de sécurité" + }, + "RESIZE_TO_CLIENT": { + "message": "Ajuster le bureau à la taille du client" + }, + "RESTART_BUTTON": { + "message": "Redémarrer maintenant" + }, + "RESTORE_WINDOW": { + "message": "Restaurer la fenêtre" + }, + "RETRY": { + "message": "Réessayer" + }, + "SCREEN_OPTIONS": { + "message": "Options de l'écran" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Envoyer Ctrl-Alt-Suppr" + }, + "SEND_FEEDBACK": { + "message": "Signaler un problème…" + }, + "SEND_KEYS": { + "message": "Envoyer des touches" + }, + "SEND_PRINT_SCREEN": { + "message": "Envoyer Imp écr" + }, + "SERVICE_DESCRIPTION": { + "message": "Ce service permet la réception de connexions provenant des clients du Bureau à distance Google Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Ce paramètre est géré par les règles de votre domaine" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Partager" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Annuler" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Voulez-vous partager cet ordinateur pour qu'un autre utilisateur puisse consulter le contenu et en prendre le contrôle ?" + }, + "SHOW_STATS": { + "message": "Afficher les statistiques" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Afficher les statistiques (connexion : $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Ajuster à la fenêtre" + }, + "SIGN_IN_BUTTON": { + "message": "Ouvrir une session" + }, + "SIGN_OUT_BUTTON": { + "message": "Déconnexion" + }, + "STOP_SHARING_BUTTON": { + "message": "Arrêter le partage" + }, + "SURVEY_INVITATION": { + "message": "Vous voulez nous aider à améliorer le Bureau à distance Chrome ? $1$Répondez à notre enquête$2$.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Heure" + }, + "TOGGLE_STATS": { + "message": "Afficher les statistiques" + }, + "TOOLTIP_CONNECT": { + "message": "Se connecter à $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Désactiver les connexions à distance à cet ordinateur" + }, + "TOOLTIP_REFRESH": { + "message": "Actualiser la liste des hôtes" + }, + "TOOLTIP_RENAME": { + "message": "Modifier le nom de l'ordinateur" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (obsolète)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Compte" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Veuillez confirmer le compte et le code d'accès ci-dessous pour autoriser l'accès du Bureau à distance Google Chrome à votre compte." + }, + "WARNING_NAT_DISABLED": { + "message": "REMARQUE : Les paramètres des règles n'autorisent que les connexions entre les ordinateurs de votre réseau." + }, + "WARNING_NOT_WINDOWED": { + "message": "REMARQUE : Pour vous assurer que tous les raccourcis clavier sont disponibles, vous pouvez configurer le bureau à distance Chrome pour qu'il s'ouvre dans une fenêtre." + }, + "WHY_IS_THIS_SAFE": { + "message": "En quoi est-ce sûr ?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Fenêtres" + }, + "WORKING": { + "message": "Traitement en cours…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/gu/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/gu/messages.json new file mode 100644 index 000000000000..1edf9c5c0bcf --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/gu/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "સà«àªµà«€àª•àª¾àª°à«‹ અને ઇનà«àª¸à«àªŸà«‰àª² કરો" + }, + "ACCESS_CODE": { + "message": "àªàª•à«àª¸à«‡àª¸ કોડ" + }, + "ACCESS_CODE_TIMER": { + "message": "આ àªàª•à«àª¸à«‡àª¸ કોડની સમયસીમા $1$ માં સમાપà«àª¤ થશે", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "પà«àª°àª¤àª¿àª¸àª¾àª¦" + }, + "ALL_CONNECTIONS": { + "message": "બધા કનેકà«àª¶àª¨à«àª¸" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN ફરીથી લખો" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "રદ કરો" + }, + "CLEAR_HISTORY": { + "message": "ઇતિહાસ સાફ કરો" + }, + "CLOSE": { + "message": "બંધ કરો" + }, + "CLOSE_PROMPT": { + "message": "આ પૃષà«àª  છોડવà«àª‚ તમારા Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª સતà«àª°àª¨à«‡ સમાપà«àª¤ કરશે." + }, + "CLOSE_WINDOW": { + "message": "વિનà«àª¡à«‹ બંધ કરો" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "શà«àª‚ તમે ખરેખર $1$ પર રીમોટ કનેકà«àª¶àª¨à«àª¸ અકà«àª·àª® કરવા માંગો છો? જો તમે તમારો વિચાર બદલો, તો તમને કનેકà«àª¶àª¨à«àª¸àª¨à«‡ ફરીથી સકà«àª·àª® કરવા માટે તે કમà«àªªà«àª¯à«àªŸàª°àª¨à«€ મà«àª²àª¾àª•àª¾àª¤ લેવાની જરૂર પડશે.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "કનેકà«àª¶àª¨ નિષà«àª«àª³ થયà«àª‚" + }, + "CONNECTION_FROM_HEADER": { + "message": "પà«àª°à«‡àª·àª•:" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "કનેકà«àª¶àª¨ ઇતિહાસ" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "સારી" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "સારી" + }, + "CONNECTION_QUALITY_POOR": { + "message": "ખરાબ" + }, + "CONNECTION_TO_HEADER": { + "message": "થી" + }, + "CONNECT_ANYWAY": { + "message": "કોઈપણ રીતે કનેકà«àªŸ કરો" + }, + "CONNECT_BUTTON": { + "message": "કનેકà«àªŸ કરો" + }, + "CONTINUE_BUTTON": { + "message": "ચાલૠરાખો" + }, + "CONTINUE_PROMPT": { + "message": "હાલમાં તમે આ મશીનને બીજા વપરાશકરà«àª¤àª¾ સાથે શેર કરી રહà«àª¯àª¾àª‚ છો. શà«àª‚ તમે શેર કરવાનà«àª‚ ચાલૠરાખવા માગો છો?" + }, + "CONTROLLER_NAME": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ નિયંતà«àª°àª•" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. સરà«àªµàª¾àª§àª¿àª•àª¾àª° સà«àª°àª•à«àª·àª¿àª¤." + }, + "CREDITS": { + "message": "કà«àª°à«‡àª¡àª¿àªŸà«àª¸" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "બધૠકાઢી નાખો" + }, + "DELETE_PAIRED_CLIENT": { + "message": "કાઢી નાખો" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "ચાલૠરાખવા માટે, તમારે સૌ પà«àª°àª¥àª® તમારા કમà«àªªà«àª¯à«àªŸàª°àª¨à«‡ વિસà«àª¤à«ƒàª¤ àªàª•à«àª¸à«‡àª¸ પરવાનગીઓ આપવી પડશે. તમારે આ ફકà«àª¤ àªàª•àªœ વાર કરવà«àª‚ પડશે." + }, + "DESCRIPTION_CONNECT": { + "message": "તમે જે વપરાશકરà«àª¤àª¾àª¨à«àª‚ કમà«àªªà«àª¯à«àªŸàª° àªàª•à«àª¸à«‡àª¸ કરવા માંગતા હોવ તેને “$1$†પર કà«àª²àª¿àª• કરવાનà«àª‚ અને તમને àªàª•à«àª¸à«‡àª¸ કોડ આપવાનà«àª‚ કહો.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª તમને વેબ પર તમારા કમà«àªªà«àª¯à«àªŸàª°àª¨à«‡ સà«àª°àª•à«àª·àª¿àª¤ રીતે શેર કરવાની મંજૂરી આપે છે. બંને વપરાશકરà«àª¤àª¾àª“ Chrome રીમોટ ડેસà«àª•àªŸà«‹àªª àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ ચલાવી શકે છે, જે $1$ પર મેળવી શકાય છે.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "રીમોટ હોસà«àªŸàª¨à«‡ તમે તૃતીય-પકà«àª· વેબસાઇટને અધિકૃત કરો તેની આવશà«àª¯àª•àª¤àª¾ છે. ચાલૠરાખવા માટે, તમારે આ સરનામાંને àªàª•à«àª¸à«‡àª¸ કરવા માટે Chrome રીમોટ ડેસà«àª•àªŸà«‰àªªàª¨à«‡ અતિરિકà«àª¤ પરવાનગીઓ આપવી પડશે:" + }, + "DISABLE_HOST": { + "message": "અકà«àª·àª® કરો" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "ડિસà«àª•àª¨à«‡àª•à«àªŸ કરો" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª સેવા" + }, + "DURATION_HEADER": { + "message": "અવધિ" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "તમને આ àªàªªà«àª²àª¿àª•à«‡àª¶àª¨àª¨à«‡ શરૂ કરવાની પરવાનગી નથી." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "પà«àª°àª®àª¾àª£à«€àª•àª°àª£ નિષà«àª«àª³ થયà«àª‚. કૃપા કરીને Chrome પર ફરીથી સાઇન ઇન કરો." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "કેટલાક આવશà«àª¯àª• ઘટકો ખૂટે છે. કૃપા કરીને ખાતરી કરો કે તમે સોફà«àªŸàªµà«‡àª°àª¨à«àª‚ નવીનતમ સંસà«àª•àª°àª£ ઇનà«àª¸à«àªŸà«‹àª² કરેલà«àª‚ છે અને ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "નેટવરà«àª• ભૂલ આવી. જà«àª¯àª¾àª°à«‡ તમારà«àª‚ ડિવાઇસ ઓન-લાઇન થાય તà«àª¯àª¾àª°à«‡ અમે àªàªªà«àª²àª¿àª•à«‡àª¶àª¨àª¨à«‡ પà«àª¨àªƒàªªà«àª°àª¾àª°àª‚ભ કરીશà«àª‚." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "રિમોટ કમà«àªªà«àª¯à«àªŸàª° સતà«àª°àª¨à«‡ શરૂ કરવામાં નિષà«àª«àª³ થયà«àª‚. જો સમસà«àª¯àª¾ યથાવતૠરહે છે, તો કૃપા કરીને હોસà«àªŸàª¨à«‡ ફરીથી ગોઠવવાનો પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "રીમોટ કમà«àªªà«àª¯à«àªŸàª° કનેકà«àª¶àª¨ વિનંતિઓને પà«àª°àª¤àª¿àª¸àª¾àª¦ આપી રહà«àª¯à«àª‚ નથી. કૃપા કરીને ચકાસો કે તે ઑનલાઇન છે અને ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_HOST_OVERLOAD": { + "message": "રીમોટ કમà«àªªà«àª¯à«àªŸàª°àª¥à«€ કનેકà«àª¶àª¨à«àª¸ અસà«àª¥àª¾àª¯à«€ રૂપે અવરોધિત કરવામાં આવà«àª¯àª¾ છે કારણ કે તેની સાથે કોઈઠઅમાનà«àª¯ PIN સાથે કનેકà«àªŸ કરવાનો પà«àª°àª¯àª¾àª¸ કરà«àª¯à«‹ હતો. કૃપા કરીને થોડીવાર પછી ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª°àª¨à«€ નોંધણી કરવામાં નિષà«àª«àª³." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "અસંગત પà«àª°à«‹àªŸà«‹àª•à«‹àª² સંસà«àª•àª°àª£ મળà«àª¯à«àª‚ હતà«àª‚. કૃપા કરીને ખાતરી કરો કે તમારી પાસે બનà«àª¨à«‡ કમà«àªªà«àª¯à«àªŸàª°à«àª¸ પર સૉફà«àªŸàªµà«‡àª°àª¨à«àª‚ નવીનતમ સંસà«àª•àª°àª£ ઇનà«àª¸à«àªŸà«‹àª² કરેલ છે અને ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "àªàª•à«àª¸à«‡àª¸ કોડ અમાનà«àª¯ છે. કૃપા કરીને ફરીથી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "નીતિ સેટિંગà«àª¸ આ કમà«àªªà«àª¯à«àªŸàª°àª¨à«‡ Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ તરીકે શેર કરવાની મંજૂરી આપતી નથી. સહાયતા માટે તમારા સિસà«àªŸàª® વà«àª¯àªµàª¸à«àª¥àª¾àªªàª•àª¨à«‹ સંપરà«àª• કરો." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "રિમોટ સતà«àª° સમાપà«àª¤ થયà«àª‚." + }, + "ERROR_MISSING_PLUGIN": { + "message": "કેટલાક આવશà«àª¯àª• ઘટકો ખૂટે છે. કૃપા કરીને ખાતરી કરો કે તમે Chrome નà«àª‚ નવીનતમ સંસà«àª•àª°àª£ ચલાવી રહà«àª¯àª¾àª‚ છો અને ફરીથી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_NACL_DISABLED": { + "message": "કેટલાક આવશà«àª¯àª• ઘટકો ખૂટે છે. કૃપા કરીને chrome://plugins પર જાઓ અને ખાતરી કરો કે મૂળ કà«àª²àª¾àª‡àª¨à«àªŸ સકà«àª·àª® કરેલ છે." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "આવશà«àª¯àª• ઘટકે કારà«àª¯ કરવાનà«àª‚ બંધ કરી દીધà«àª‚ છે. કૃપા કરીને વિકાસકરà«àª¤àª¾àª“ને આ સમસà«àª¯àª¾àª¨à«€ જાણ કરો." + }, + "ERROR_NETWORK_FAILURE": { + "message": "નેટવરà«àª• સાથે કનેકà«àªŸ કરી શકાયà«àª‚ નથી. કૃપા કરીને તપાસો કે તમારà«àª‚ ઉપકરણ ઓન-લાઇન છે." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "તમે Chrome માં સાઇન ઇન થયા નથી. કૃપા કરીને સાઇન ઇન કરી અને ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "તમને તે કà«àª°àª¿àª¯àª¾ કરવાની પરવાનગી નથી." + }, + "ERROR_NOT_FOUND": { + "message": "વિનંતિ કરેલો ઑબà«àªœà«‡àª•à«àªŸ અસà«àª¤àª¿àª¤à«àªµàª®àª¾àª‚ નથી." + }, + "ERROR_P2P_FAILURE": { + "message": "હોસà«àªŸ સà«àª§à«€ પહોંચવામાં અકà«àª·àª®. આ કદાચ તમે ઉપયોગ કરી રહà«àª¯àª¾àª‚ છો ઠનેટવરà«àª•àª¨à«€ ગોઠવણીનાં કારણે છે." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "અમારી સેવા અસà«àª¥àª¾àª¯à«€ રીતે અનà«àªªàª²àª¬à«àª§ છે. કૃપા કરીને પછીથી ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "ERROR_UNEXPECTED": { + "message": "અનપેકà«àª·àª¿àª¤ ભૂલ આવી. કૃપા કરીને વિકાસકરà«àª¤àª¾àª“ને આ સમસà«àª¯àª¾àª¨à«€ જાણ કરો." + }, + "EXIT_FULL_SCREEN": { + "message": "પૂરà«àª£ સà«àª•à«àª°à«€àª¨àª¥à«€ બહાર નીકળો" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ ફરીથી સેટ કરી શકાઈ નથી. તમે હજી પણ બગ રિપોરà«àªŸ મોકલી શકો છો." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ ફરીથી સેટ કરો. તમે કોઈપણ વણસાચવેલ કારà«àª¯ ગà«àª®àª¾àªµàª¶à«‹." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "મારાથી àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ ખોલી શકાતી નથી." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "આ àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ ખૂબ ધીમી છે." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "મારાથી મારી Google ડà«àª°àª¾àª‡àªµ ફાઇલો ખોલી શકાતી નથી." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "મને Google ડà«àª°àª¾àª‡àªµàª®àª¾àª‚ મારી સાચવેલી ફાઇલો ઓન-લાઇન દેખાતી નથી." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "મને મારા કીબોરà«àª¡ અથવા માઉસમાં સમસà«àª¯àª¾àª“ આવી રહી છે." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "અમને તમારી સમસà«àª¯àª¾ ઉકેલવામાં સહાય કરવા માટે, કૃપા કરીને શà«àª‚ ખોટà«àª‚ થયà«àª‚ તે અમને જણાવો:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "અનà«àª¯ કોઈ." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "પસંદ કરો…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "વધૠમાહિતી માટે તમારો સંપરà«àª• કરવાની અમને મંજૂરી આપવા માટે, તમે સબમિટ કરો છો તે કોઈપણ પà«àª°àª¤àª¿àª¸àª¾àª¦àª®àª¾àª‚ તમારà«àª‚ ઇમેઇલ સરનામà«àª‚ શામેલ કરવામાં આવશે." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "સમસà«àª¯àª¾àª¨à«€ જાણ કરો" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "તમારી સમસà«àª¯àª¾ ઉકેલવામાં અમારી સહાય માટે àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ લૉગà«àª¸ શામેલ કરો (લૉગà«àª¸àª®àª¾àª‚ ખાનગી માહિતી શામેલ હોઈ શકે છે)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ લૉગà«àª¸àª®àª¾àª‚ તમારી ઓળખ (ઇમેઇલ સરનામà«àª‚) અને Google ડà«àª°àª¾àª‡àªµàª®àª¾àª‚ ફાઇલો અને ફોલà«àª¡àª°à«àª¸àª¨àª¾ નામો અને પà«àª°à«‹àªªàª°à«àªŸà«€àª સહિત ખાનગી માહિતી શામેલ હોઈ શકે છે." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "આ માહિતીનો ઉપયોગ ફકà«àª¤ તમે જાણ કરી રહà«àª¯àª¾àª‚ છો તે સમસà«àª¯àª¾àª¨à«àª‚ નિદાન કરવા માટે થાય છે, તે ફકà«àª¤ તમારી રિપોરà«àªŸàª¨à«€ તપાસ કરી રહેલ વà«àª¯àª•à«àª¤àª¿àª¨à«‡ ઉપલબà«àª§ રહે છે અને તે 30 કરતાં વધૠદિવસ સà«àª§à«€ જાળવી રખાતી નથી." + }, + "FOOTER_CONNECTING": { + "message": "કનેકà«àªŸ કરી રહà«àª¯à«àª‚ છે..." + }, + "FOOTER_WAITING": { + "message": "કનેકà«àª¶àª¨àª¨à«€ પà«àª°àª¤à«€àª•à«àª·àª¾ કરવામાં આવી રહી છે..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 અને ઠપછીના સંસà«àª•àª°àª£) માટે" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP અને ઠપછીના સંસà«àª•àª°àª£) માટે" + }, + "FULL_SCREEN": { + "message": "પૂરà«àª£ સà«àª•à«àª°à«€àª¨" + }, + "GET_STARTED": { + "message": "પà«àª°àª¾àª°àª‚ભ કરો" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "સà«àªµà«€àª•àª¾àª°à«‹" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "નકારો" + }, + "HELP": { + "message": "સહાય" + }, + "HOME_ACCESS_BUTTON": { + "message": "àªàª•à«àª¸à«‡àª¸" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "શેર કરેલા કમà«àª¯à«àª¯à«àªŸàª°àª¨à«‡ જà«àª“ અને નિયંતà«àª°àª¿àª¤ કરો" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "તમે Chrome રીમોટ ડેસà«àª•àªŸà«‰àªªàª¨à«‹ ઉપયોગ કરીને આ કમà«àªªà«àª¯à«àªŸàª°àª¨à«‡ સà«àª°àª•à«àª·àª¿àª¤ રીતે àªàª•à«àª¸à«‡àª¸ કરી શકો છો." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN બદલો" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "આ કોમà«àªªà«àª¯à«àªŸàª° હાલમાં અનà«àª¯ àªàª•àª¾àª‰àª¨à«àªŸ હેઠળ શેર થયેલà«àª‚ છે." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "જà«àª“/સંપાદિત કરો" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° પિન દાખલ કરà«àª¯àª¾ વગર àªàª• અથવા વધૠકà«àª²àª¾àª‡àª¨à«àªŸà«àª¸ સાથે કનેકà«àªŸ થવાની મંજૂરી આપવા માટે ગોઠવાયેલા છે." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "રીમોટ કનેકà«àª¶àª¨à«àª¸ સકà«àª·àª® કરો" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "જો તમે Chrome રીમોટ ડેસà«àª•àªŸà«‹àªªàª¨à«‹ ઉપયોગ કરીને આ કમà«àªªà«àª¯à«àªŸàª°àª¨à«‡ àªàª•à«àª¸à«‡àª¸ કરવા માગો છો તો તમારે રીમોટ કનેકà«àª¶àª¨à«àª¸ સકà«àª·àª® કરવà«àª‚ પડશે." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "રીમોટ કનેકà«àª¶àª¨à«àª¸ અકà«àª·àª® કરો" + }, + "HOME_SHARE_BUTTON": { + "message": "શેર કરો" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª°àª¨à«‡ બીજા વપરાશકરà«àª¤àª¾àª¨à«‡ જોવા અને નિયંતà«àª°àª¿àª¤ કરવા માટે શેર કરો" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(આ સà«àªµàª¿àª§àª¾ હજૠસà«àª§à«€ તમારા કમà«àªªà«àª¯à«àªŸàª° માટે ઉપલબà«àª§ નથી)" + }, + "HOST_CATEGORY": { + "message": "હોસà«àªŸ:" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "કà«àª²àª¾àª‡àª¨à«àªŸ માટે àªàª•à«àª¸à«‡àª¸ નકારી: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "કà«àª²àª¾àª‡àª¨à«àªŸ કનેકà«àªŸ થયાં: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "કà«àª²àª¾àª‡àª¨à«àªŸ ડિસà«àª•àª¨à«‡àª•à«àªŸ થયાં: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "કà«àª²àª¾àª‡àª¨à«àªŸ માટે ચેનલ IP: %1 ip='%2' host_ip='%3' ચેનલ='%4' કનેકà«àª¶àª¨='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "àªàª• અલગ કમà«àªªà«àª¯à«‚ટર પર રીમોટ કનેકà«àª¶àª¨à«àª¸ સકà«àª°àª¿àª¯ કરવા માટે, તà«àª¯àª¾ Chrome રીમોટ ડેસà«àª•àªŸà«‹àªª ઇનà«àª¸à«àªŸà«‹àª² કરો અને \"$1$†ને કà«àª²àª¿àª• કરો.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "તમે કોઈ કમà«àªªà«àª¯à«àªŸàª°àª¨à«€ નોંધણી કરી નથી.કમà«àªªà«àª¯à«àªŸàª° પર રીમોટ કનેકà«àª¶àª¨à«àª¸ સકà«àª°àª¿àª¯ કરવા માટે, તà«àª¯àª¾àª‚ Chrome રીમોટ ડેસà«àª•àªŸà«‰àªªàª¨à«‡ ઇનà«àª¸à«àªŸà«‹àª² કરો અને \"$1$†પર કà«àª²àª¿àª• કરો.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "તમે પૂરà«àªµàª®àª¾àª‚ $1$ ($2$) તરીકે સાઇન ઇન થયેલા. તે àªàª•àª¾àª‰àª¨à«àªŸàª®àª¾àª‚ તમારા કમà«àªªà«àª¯à«àªŸàª°à«àª¸àª¨à«‡ àªàª•à«àª¸à«‡àª¸ કરવા માટે, તે àªàª•àª¾àª‰àª¨à«àªŸ વડે $3$Google Chrome માં સાઇન ઇન કરો$4$ અને Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª ફરીથી ઇનà«àª¸à«àªŸà«‹àª² કરો.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "સૉફà«àªŸàªµà«‡àª° અપડેટà«àª¸ સà«àª§àª¾àª°àª¾àª“ સામાનà«àª¯ રીતે આપમેળે થાય છે, પરંતૠકેટલાક કિસà«àª¸àª¾àª“માં ભાગà«àª¯à«‡ જ નિષà«àª«àª³ થાય છે. સૉફà«àªŸàªµà«‡àª°àª¨à«‡ અપડેટ કરવામાં થોડી મિનિટથી વધૠસમય લાગતો નથી અને તમારà«àª‚ કમà«àªªà«àª¯à«àªŸàª° રીમોટલી કનેકà«àªŸ કરેલà«àª‚ હોય તà«àª¯àª¾àª°à«‡ થઈ શકે છે." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ પર Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª જૂનà«àª‚ છે અને તેને અપડેટ કરવાની જરૂર છે.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "અમને ઉપયોગનાં આંકડા અને કà«àª°à«‡àª¶ રિપોરà«àªŸà«àª¸ àªàª•àª¤à«àª°àª¿àª¤ કરવાની મંજૂરી આપીને Chrome રીમોટ ડેસà«àª•àªŸà«‰àªªàª®àª¾àª‚ સà«àª§àª¾àª°à«‹ કરવામાં અમને સહાય કરો." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª°àª¨àª¾àª‚ àªàª•à«àª¸à«‡àª¸àª¨à«‡ રકà«àª·àª£ આપવા માટે, કૃપા કરીને $1$ઓછામાં ઓછા છ અંકો$2$નો àªàª• PIN પસંદ કરો. જà«àª¯àª¾àª°à«‡ બીજા સà«àª¥àª¾àª¨à«‡àª¥à«€ કનેકà«àªŸ થઇ રહà«àª¯àª¾àª‚ હોવ તà«àª¯àª¾àª°à«‡ આ PIN ની જરૂર પડશે.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "રીમોટ àªàª•à«àª¸à«‡àª¸ સેવા શરૂ કરવામાં નિષà«àª«àª³." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome ઠChrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ ઇનà«àª¸à«àªŸà«‹àª²àª°àª¨à«‡ ડાઉનલોડ કરે છે. àªàª•àªµàª¾àª° ડાઉનલોડ પૂરà«àª£ થઈ જાય તે પછી, કૃપા કરીને ચાલૠરાખતાં પહેલાં àªàª• વાર ઇનà«àª¸à«àªŸà«‹àª²àª°àª¨à«‡ ચલાવો." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "કૃપા કરીને ચાલૠકરતા પહેલાં àªàª• વાર ઇનà«àª¸à«àªŸà«‹àª²àª°àª¨à«‡ ચલાવો." + }, + "HOST_SETUP_STARTED": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° માટે રીમોટ કનેકà«àª¶àª¨à«àª¸ સકà«àª·àª® કરવામાં આવà«àª¯à«àª‚ છે." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "કૃપા કરી તમારા કમà«àªªà«àª¯à«àªŸàª°àª¨à«€ પાવર સંચાલન સેટિંગà«àª¸ જà«àª“ અને સà«àª¨àª¿àª¶à«àªšàª¿àª¤ કરો કે તેને નિષà«àª•à«àª°àª¿àª¯ હોવા પર સà«àª²à«€àªª માટે ગોઠવેલી નથી." + }, + "HOST_SETUP_STARTING": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° માટે રીમોટ કનેકà«àª¶àª¨à«àª¸ સકà«àª·àª® કરવામાં આવી રહà«àª¯àª¾àª‚ છે..." + }, + "HOST_SETUP_STOPPED": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° માટે રીમોટ કનેકà«àª¶àª¨à«àª¸ અકà«àª·àª® કરવામાં આવà«àª¯à«àª‚ છે." + }, + "HOST_SETUP_STOPPING": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° માટે રીમોટ કનેકà«àª¶àª¨à«àª¸ અકà«àª·àª® કરી રહà«àª¯àª¾àª‚ છે..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° પર રીમોટ àªàª•à«àª¸à«‡àª¸ કરવામાં નિષà«àª«àª³. કૃપા કરીને થોડીવાર પછી ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ ઇનà«àª¸à«àªŸà«‹àª²àª°àª¨à«‡ ડાઉનલોડ કરીને, તમે Google $1$સેવાની શરતો$4થી સંમત થાઓ છો.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "તમારા PIN અપડેટ કરવામાં આવà«àª¯à«‹ છે." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN અપડેટ કરવામાં નિષà«àª«àª³. કૃપા કરીને થોડીવાર પછી ફરી પà«àª°àª¯àª¾àª¸ કરો." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° માટે PIN અપડેટ થઈ રહà«àª¯à«‹ છે ..." + }, + "HOST_STARTED": { + "message": "આ વપરાશકરà«àª¤àª¾ માટે હોસà«àªŸ શરૂ: %1." + }, + "HOST_STOPPED": { + "message": "હોસà«àªŸ રોકà«àª¯à«àª‚." + }, + "IDLE_CONTINUE": { + "message": "ચાલૠરાખો" + }, + "IDLE_DISCONNECT": { + "message": "હવે ડિસà«àª•àª¨à«‡àª•à«àªŸ કરો" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "તમારà«àª‚ $1$ સતà«àª° થોડીવાર માટે નિષà«àª•à«àª°àª¿àª¯ થઈ ગયà«àª‚ છે અને ટૂંક સમયમાં ડિસà«àª•àª¨à«‡àª•à«àªŸ થઈ જશે.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° પર" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ ઇનà«àª¸à«àªŸà«‹àª²àª° ડાઉનલોડ કરો" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "તમારા ડેસà«àª•àªŸà«‰àªªàª¨à«‡ શેર કરવાનà«àª‚ પà«àª°àª¾àª°àª‚ભ કરવા માટે, જે વà«àª¯àª•à«àª¤àª¿ તમારી પાસે સહાય કરશે તેને નીચે આપેલો àªàª•à«àª¸à«‡àª¸ કોડ આપો." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "àªàª•àªµàª¾àª° તેઓ કોડ દાખલ કરશે પછી તમારà«àª‚ શેરિંગ સતà«àª° પà«àª°àª¾àª°àª‚ભ થશે." + }, + "INVALID_PIN": { + "message": "કૃપા કરીને છ અથવા વધૠઅંકોવાળો PIN દાખલ કરો." + }, + "IT2ME_FIRST_RUN": { + "message": "વપરાશકરà«àª¤àª¾-થી-વપરાશકરà«àª¤àª¾ સà«àª•à«àª°à«€àª¨ શેરિંગ, રીમોટ ટેકà«àª¨àª¿àª•àª² સપોરà«àªŸ માટે પરિપૂરà«àª£." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "કીબોરà«àª¡ લેઆઉટà«àª¸" + }, + "LABEL_CONNECTED": { + "message": "કનેકà«àªŸà«‡àª¡:" + }, + "LAST_ONLINE": { + "message": "$1$ (છેલà«àª²à«‡ ઓનલાઇન $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "કેવી રીતે જાણો." + }, + "LEARN_MORE": { + "message": "વધૠજાણો." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ પસંદગીઓ" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome રીમોટ\nડેસà«àª•àªŸà«‰àªª હોસà«àªŸ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸ અનઇનà«àª¸à«àªŸà«‹àª²àª°" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win કી (Mac પર ⌘) માટે જમણા Ctrl નો ઉપયોગ કરો" + }, + "MAXIMIZE_WINDOW": { + "message": "વિંડો મોટી કરો" + }, + "ME2ME_FIRST_RUN": { + "message": "ગમે તà«àª¯àª¾àª‚થી તમારà«àª‚ પોતાનà«àª‚ કમà«àªªà«àª¯à«àªŸàª° àªàª•à«àª¸à«‡àª¸ કરો." + }, + "MESSAGE_GENERATING": { + "message": "àªàª•à«àª¸à«‡àª¸ કોડ જનરેટ કરી રહà«àª¯à«àª‚ છે..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "તમારà«àª‚ Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª સતà«àª° સમાપà«àª¤ થયà«àª‚." + }, + "MESSAGE_SHARED": { + "message": "તમારà«àª‚ ડેસà«àª•àªŸà«‰àªª હાલમાં $1$ સાથે શેર કરવામાં આવી રહà«àª¯à«àª‚ છે.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "વિંડો નાની કરો" + }, + "MODE_AUTHORIZE": { + "message": "અધિકૃત કરો" + }, + "MODE_IT2ME": { + "message": "રીમોટ સહાય" + }, + "MODE_ME2ME": { + "message": "મારા કમà«àªªà«àª¯à«àªŸàª°à«àª¸" + }, + "NEW_WINDOW": { + "message": "નવી વિંડો…" + }, + "NO_PAIRED_CLIENTS": { + "message": "બધા જોડી થયેલા કà«àª²àª¾àª‡àª¨à«àªŸà«‹ કાઢી નાખવામાં આવà«àª¯àª¾ છે." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "આ પà«àª²à«‡àªŸàª«à«‹àª°à«àª® પર ડેસà«àª•àªŸà«‰àªª સમેકન સમરà«àª¥àª¿àª¤ નથી. તમે હજી પણ આ àªàªªà«àª²àª¿àª•à«‡àª¶àª¨àª¨à«‹ ઉપયોગ કરી શકો છો, પરંતૠવપરાશકરà«àª¤àª¾ અનà«àª­àªµ નà«àª¯à«‚ન થઈ જશે." + }, + "OFFLINE": { + "message": "$1$ (ઑફલાઇન)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "હોસà«àªŸ આરંભ નિષà«àª«àª³ રહà«àª¯à«àª‚." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "અમાનà«àª¯ હોસà«àªŸ ગોઠવણી." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "અમાનà«àª¯ હોસà«àªŸ માલિક ડોમેન." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "અમાનà«àª¯ હોસà«àªŸ id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "હોસà«àªŸ અમાનà«àª¯ OAuth ઓળખપતà«àª°à«‹ સાથે ગોઠવાયà«àª‚ છે." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "કરà«àªŸàª¨ મોડને સમરà«àª¥àª¨ આપવા માટે વપરાશકરà«àª¤àª¾-વિશિષà«àªŸ સતà«àª°àª®àª¾àª‚ ચલાત હોસà«àªŸ પર સà«àªµàª¿àªš કરીને કનà«àª¸à«‹àª² લોજિક સà«àª•à«àª°à«€àª¨ પર ચાલતા હોસà«àªŸàª¨à«‡ શટડાઉન કરà«àª¯à«àª‚ છે." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "નીતિ ફેરફારને ધà«àª¯àª¾àª¨àª®àª¾àª‚ લેવા માટે, હોસà«àªŸ પà«àª¨àªƒàªªà«àª°àª¾àª°àª‚ભ થઇ રહà«àª¯à«àª‚ છે." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "હોસà«àªŸ નીતિ વાંચવામાં નિષà«àª«àª³ ગયà«àª‚." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "હોસà«àªŸ શટ ડાઉન થયà«àª‚ છે." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ન ઓળખાયેલ હોસà«àªŸ ભૂલ: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "અમાનà«àª¯ હોસà«àªŸ માલિક." + }, + "OK": { + "message": "ઓકે" + }, + "OPTIONS_MENU": { + "message": "વિકલà«àªªà«‹" + }, + "OUTGOING_CONNECTIONS": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª°àª¥à«€" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "નીચેના કà«àª²àª¾àª‡àª¨à«àªŸà«àª¸ આ કમà«àªªà«àª¯à«àªŸàª° સાથે જોડી બનાવેલ છે અને પિન દાખલ કરà«àª¯àª¾ વગર જોડાઇ શકે છે. તમે કà«àª¯àª¾àª‚ તો વà«àª¯àª•à«àª¤àª¿àª—ત અથવા બધા કà«àª²àª¾àª‡àª¨à«àªŸ માટે કોઇપણ સમયે આ પરવાનગી રદ કરી શકો છો." + }, + "PAIRED_CLIENT_DATE": { + "message": "જોડી કરà«àª¯àª¾àª¨à«€ તારીખ" + }, + "PAIRED_CLIENT_NAME": { + "message": "કà«àª²àª¾àª‡àª¨à«àªŸ" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "કૃપા કરીને બંને બૉકà«àª¸àª®àª¾àª‚ સમાન PIN દાખલ કરો." + }, + "PIN_MESSAGE": { + "message": "કૃપા કરીને $1$ માટે તમારો PIN દાખલ કરો.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "રિમોટ કમà«àªªà«àª¯à«àªŸàª° માટે કૃપા કરીને તમારો PIN દાખલ કરો." + }, + "PRODUCT_DESCRIPTION": { + "message": "અનà«àª¯ કમà«àªªà«àª¯à«àªŸàª°à«àª¸ àªàª•à«àª¸à«‡àª¸ કરો અથવા બીજા વપરાશકરà«àª¤àª¾àª¨à«‡ તમારà«àª‚ કમà«àªªà«àª¯à«àªŸàª° ઇનà«àªŸàª°àª¨à«‡àªŸ પર સà«àª°àª•à«àª·àª¿àª¤àªªàª£à«‡ àªàª•à«àª¸à«‡àª¸ કરવાની મંજૂરી આપો." + }, + "PRODUCT_NAME": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome àªàªªà«àª²àª¿àª•à«‡àª¶àª¨ સà«àªŸà«àª°à«€àª®àª¿àª‚ગ" + }, + "RECONNECT": { + "message": "ફરીથી કનેકà«àªŸ કરો" + }, + "REMEMBER_PIN": { + "message": "આ ઉપકરણથી આ હોસà«àªŸ સાથે કનેકà«àªŸ કરતી વખતે ફરીથી PIN માટે પૂછશો નહીં." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "મà«àª–à«àª¯ લાઇબà«àª°à«‡àª°à«€" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ડેસà«àª•àªŸà«‹àªª ઇનà«àªŸà«€àª—à«àª°à«‡àª¶àª¨ પà«àª°àª•à«àª°àª¿àª¯àª¾" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª હોસà«àªŸàª¨à«‡ આદેશો રજૂ કરવા માટેની àªàªªà«àª²àª¿àª•à«‡àª¶àª¨." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "હોસà«àªŸ પà«àª°àª•à«àª°àª¿àª¯àª¾" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "હોસà«àªŸ સંચાલનને રિમોટ કરવા માટે મૂળ મેસેજિંગ હોસà«àªŸ" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "રિમોટ સહાયતા માટે મૂળ મેસેજિંગ હોસà«àªŸ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "સà«àª°àª•à«àª·àª¾ કી રીમોટિંગ પà«àª°àª•à«àª°àª¿àª¯àª¾" + }, + "RESIZE_TO_CLIENT": { + "message": "ફિટ કરવા માટે ડેસà«àª•àªŸà«‰àªªàª¨à«àª‚ કદ બદલો" + }, + "RESTART_BUTTON": { + "message": "હવે ફરીથી પà«àª°àª¾àª°àª‚ભ કરો" + }, + "RESTORE_WINDOW": { + "message": "વિંડો પà«àª¨àª°à«àª¸à«àª¥àª¾àªªàª¿àª¤ કરો" + }, + "RETRY": { + "message": "ફરી પà«àª°àª¯àª¾àª¸ કરો" + }, + "SCREEN_OPTIONS": { + "message": "સà«àª•à«àª°à«€àª¨ વિકલà«àªªà«‹" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del મોકલો" + }, + "SEND_FEEDBACK": { + "message": "સમસà«àª¯àª¾àª¨à«€ જાણ કરો…" + }, + "SEND_KEYS": { + "message": "કી મોકલો" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn મોકલો" + }, + "SERVICE_DESCRIPTION": { + "message": "આ સેવા Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª કà«àª²àª¾àª‡àª¨à«àªŸà«àª¸ પાસેથી આવતા કનેકà«àª¶àª¨à«àª¸ સકà«àª·àª® કરે છે." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "આ સેટિંગ તમારી ડોમેન નીતિ દà«àªµàª¾àª°àª¾ સંચાલિત થાય છે." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "શેર કરો" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "રદ કરો" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "શà«àª‚ તમે આ કમà«àªªà«àª¯à«àªŸàª° બીજા વપરાશકરà«àª¤àª¾ માટે જોવા અને નિયંતà«àª°àª¿àª¤ કરવા માટે શેર કરવા માંગો છો?" + }, + "SHOW_STATS": { + "message": "આંકડા દરà«àª¶àª¾àªµà«‹" + }, + "SHOW_STATS_WITH_RTT": { + "message": "આંકડા દરà«àª¶àª¾àªµà«‹ (કનેકà«àª¶àª¨: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ફીટ કરવા માટે સંકોચો" + }, + "SIGN_IN_BUTTON": { + "message": "સાઇન ઇન" + }, + "SIGN_OUT_BUTTON": { + "message": "સાઇન આઉટ" + }, + "STOP_SHARING_BUTTON": { + "message": "શેર કરવાનà«àª‚ રોકો" + }, + "SURVEY_INVITATION": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªªàª¨à«‡ બહેતર બનાવવામાં સહાય જોઇઠછે? $1$સરà«àªµà«‡àª•à«àª·àª£ લો.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "સમય" + }, + "TOGGLE_STATS": { + "message": "આંકડા દરà«àª¶àª¾àªµà«‹" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ થી કનેકà«àªŸ થાઓ", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "આ કમà«àªªà«àª¯à«àªŸàª° પર રીમોટ કનેકà«àª¶àª¨à«àª¸ અકà«àª·àª® કરો" + }, + "TOOLTIP_REFRESH": { + "message": "હોસà«àªŸà«àª¸àª¨à«€ સૂચિ તાજી કરો" + }, + "TOOLTIP_RENAME": { + "message": "કમà«àªªà«àª¯à«àªŸàª° નામ સંપાદિત કરો" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (જૂનà«àª‚)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "àªàª•àª¾àª‰àª¨à«àªŸ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome રીમોટ ડેસà«àª•àªŸà«‰àªª દà«àªµàª¾àª°àª¾ àªàª•à«àª¸à«‡àª¸àª¨à«€ મંજૂરી આપવા માટે કૃપા કરીને નીચે તમારા àªàª•àª¾àª‰àª¨à«àªŸ અને પિનની પà«àª·à«àªŸàª¿ કરો." + }, + "WARNING_NAT_DISABLED": { + "message": "નોંધ: નીતિ સેટિંગà«àª¸ ફકà«àª¤ તમારા નેટવરà«àª•àª¨à«€ અંતરà«àª—ત રહેલા કમà«àªªà«àª¯à«àªŸàª°à«àª¸ વચà«àªšà«‡ જ કનેકà«àª¶àª¨à«àª¸àª¨à«‡ પરવાનગી આપે છે." + }, + "WARNING_NOT_WINDOWED": { + "message": "નોંધ: બધા કીબોરà«àª¡ શોરà«àªŸàª•àªŸà«àª¸ ઉપલબà«àª§ છે તેની ખાતરી કરવા, તમે Chrome રીમોટ ડેસà«àª•àªŸà«‰àªªàª¨à«‡ 'વિંડો તરીકે ખોલો' પર ગોઠવી શકો છો." + }, + "WHY_IS_THIS_SAFE": { + "message": "આ કેમ સલામત છે?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "કારà«àª¯ કરી રહà«àª¯à«àª‚ છે..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/he/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/he/messages.json new file mode 100644 index 000000000000..6aa33af5d942 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/he/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "קבל והתקן" + }, + "ACCESS_CODE": { + "message": "קוד גישה" + }, + "ACCESS_CODE_TIMER": { + "message": "התוקף של קוד גישה ×–×” יפוג ב-$1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "משוב" + }, + "ALL_CONNECTIONS": { + "message": "כל החיבורי×" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "â€×”קלד שוב ×ת ×”-PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "ביטול" + }, + "CLEAR_HISTORY": { + "message": "נקה היסטוריה" + }, + "CLOSE": { + "message": "סגור" + }, + "CLOSE_PROMPT": { + "message": "â€×™×¦×™××” מדף ×–×” ×ª×’×¨×•× ×œ×¡×™×•× ×”×¤×¢×™×œ×•×ª של 'שולחן עבודה מרוחק של Chrome'." + }, + "CLOSE_WINDOW": { + "message": "סגור חלון" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "×”×× ×תה בטוח שברצונך להשבית ×ת ×”×—×™×‘×•×¨×™× ×”×ž×¨×•×—×§×™× ×ל $1$? ×× ×ª×©× ×” ×ת דעתך, ×™×”×™×” עליך להיכנס למחשב ×–×” כדי להפעיל מחדש ×ת החיבורי×.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "החיבור נכשל" + }, + "CONNECTION_FROM_HEADER": { + "message": "מ-" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "היסטוריית חיבורי×" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "×יכות סבירה" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "×יכות טובה" + }, + "CONNECTION_QUALITY_POOR": { + "message": "×יכות גרועה" + }, + "CONNECTION_TO_HEADER": { + "message": "×ל" + }, + "CONNECT_ANYWAY": { + "message": "התחבר בכל ×–×ת" + }, + "CONNECT_BUTTON": { + "message": "התחברות" + }, + "CONTINUE_BUTTON": { + "message": "המשך" + }, + "CONTINUE_PROMPT": { + "message": "×תה משתף כעת ×ת המחשב ×”×–×” ×¢× ×ž×©×ª×ž×© ×חר. ×”×× ×‘×¨×¦×•× ×š להמשיך ×ת השיתוף?" + }, + "CONTROLLER_NAME": { + "message": "â€×‘קר מ×רח שולחן העבודה המרוחק של Chrome" + }, + "COPYRIGHT": { + "message": "â€Copyright © 2013 Google Inc.‎. כל הזכויות שמורות." + }, + "CREDITS": { + "message": "×©×•×ª×¤×™× ×œ×¢×©×™×™×”" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "מחק הכל" + }, + "DELETE_PAIRED_CLIENT": { + "message": "מחק" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "כדי להמשיך, ר×שית עליך להעניק הרש×ות גישה מורחבות למחשב שלך. עליך לעשות ×–×ת ×¤×¢× ×חת בלבד." + }, + "DESCRIPTION_CONNECT": { + "message": "בקש מבעל המחשב ש×ליו ×תה רוצה לגשת שילחץ על “$1$†וייתן לך ×ת קוד הגישה.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "â€'שולחן עבודה מרוחק של Chrome' מ×פשר לך לשתף ×ת המחשב שלך דרך ×”×ינטרנט ב×ופן מ×ובטח. על שני ×”×ž×©×ª×ž×©×™× ×œ×”×¤×¢×™×œ ×ת ×”×™×™×©×•× 'שולחן עבודה מרוחק של Chrome', שניתן ×œ×ž×¦×•× ×‘×›×ª×•×‘×ª $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "â€×”מ×רח המרוחק דורש שתבצע ×ימות מול ×תר של צד שלישי. כדי להמשיך, עליך להעניק לשולחן העבודה המרוחק של Chrome הרש×ות נוספות כדי לגשת לכתובת זו:" + }, + "DISABLE_HOST": { + "message": "השבת" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "נתק" + }, + "DISPLAY_SERVICE_NAME": { + "message": "â€×©×™×¨×•×ª שולחן העבודה המרוחק של Chrome" + }, + "DURATION_HEADER": { + "message": "משך החיבור" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "×ין לך הרש××” להריץ ×ת ×”×™×™×©×•× ×”×–×”." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "â€×”×ימות נכשל. היכנס שוב ל-Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "חלק ×ž×”×¨×›×™×‘×™× ×”×“×¨×•×©×™× ×—×¡×¨×™×. ×•×“× ×©×”×ª×§× ×ª ×ת הגרסה העדכנית ביותר של התוכנה ונסה שוב." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "×ירעה שגי×ת רשת. נפעיל ×ת ×”×™×™×©×•× ×ž×—×“×© כשהמכשיר ×™×”×™×” שוב מקוון." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "המחשב המרוחק ×œ× ×”×¦×œ×™×— ל×תחל ×ת ההפעלה. ×× ×”×‘×¢×™×” נמשכת, נסה להגדיר שוב ×ת המ×רח." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "המחשב המרוחק ×ינו מגיב לבקשות החיבור. ×•×“× ×©×”×•× ×ž×—×•×‘×¨ ל×ינטרנט ונסה שוב." + }, + "ERROR_HOST_OVERLOAD": { + "message": "â€×”×—×™×‘×•×¨×™× ×œ×ž×—×©×‘ המרוחק ×—×¡×•×ž×™× ×‘×ופן זמני ×ž×©×•× ×©×ž×™×©×”×• ניסה להתחבר ×ליו ×¢× PIN ×œ× ×—×•×§×™. נסה שוב מ×וחר יותר." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "×”×¨×™×©×•× ×©×œ מחשב ×–×” נכשל." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "זוהתה גרסת פרוטוקול ×œ× ×ª×•×מת. ×•×“× ×©×”×ª×§× ×ª ×ת הגרסה העדכנית ביותר של התוכנה בשני ×”×ž×—×©×‘×™× ×•× ×¡×” שוב." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "קוד הגישה ×ינו חוקי. נסה שוב." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "â€×”גדרות המדיניות ×ינן מ×פשרות שיתוף של מחשב ×–×” כמ×רח שולחן עבודה מרוחק של Chrome. פנה למנהל המערכת שלך לקבלת סיוע." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "פג התוקף של ההפעלה המרוחקת." + }, + "ERROR_MISSING_PLUGIN": { + "message": "â€×—לק ×ž×”×¨×›×™×‘×™× ×”×“×¨×•×©×™× ×—×¡×¨×™×. ×•×“× ×©×תה משתמש בגרסה העדכנית ביותר של Chrome ונסה שוב." + }, + "ERROR_NACL_DISABLED": { + "message": "â€×—לק ×ž×”×¨×›×™×‘×™× ×”×“×¨×•×©×™× ×—×¡×¨×™×. עבור ×ל chrome://plugins ×•×•×“× ×©-Native Client מופעל." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "רכיב נדרש הפסיק לפעול. דווח על בעיה זו למפתחי×." + }, + "ERROR_NETWORK_FAILURE": { + "message": "×œ× × ×™×ª×Ÿ ×”×™×” להתחבר לרשת. בדוק שהמכשיר שלך מקוון." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "â€×תה ×œ× ×ž×—×•×‘×¨ ל-Chrome. היכנס ונסה שוב." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "×ין לך הרש××” לביצוע הפעולה." + }, + "ERROR_NOT_FOUND": { + "message": "×”×ובייקט המבוקש ×ינו קיי×." + }, + "ERROR_P2P_FAILURE": { + "message": "×œ× × ×™×ª×Ÿ להשיג ×ת המ×רח. הסיבה לכך יכולה להיות תצורת הרשת שבה ×תה משתמש." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "ב×ופן זמני, השירות ×ינו זמין. נסה שוב מ×וחר יותר." + }, + "ERROR_UNEXPECTED": { + "message": "×ירעה שגי××” ×œ× ×¦×¤×•×™×”. דווח על בעיה זו למפתחי×." + }, + "EXIT_FULL_SCREEN": { + "message": "×¦× ×ž×ž×¡×š מל×" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "×œ× × ×™×ª×Ÿ ×”×™×” ל×פס ×ת היישו×. תוכל עדיין לשלוח דוח ב××’×™×." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "×פס ×ת היישו×. ת×בד עבודות ×©×œ× × ×©×ž×¨×•." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "××™× ×™ יכול לפתוח ×ת היישו×." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "×”×™×™×©×•× ×יטי מדי." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "â€××™× ×™ יכול לפתוח ×ת ×”×§×‘×¦×™× ×©×œ×™ ב-Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "â€××™× ×™ יכול לר×ות ×ת ×”×§×‘×¦×™× ×”×©×ž×•×¨×™× ×©×œ×™ ב-Google Drive ב×ינטרנט." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "נתקלתי ×‘×§×©×™×™× ×¢× ×”×ž×§×œ×“×ª ×ו העכבר." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "כדי לעזור לנו לפתור ×ת הבעיה שבה נתקלת, ספר לנו מה קרה:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "משהו ×חר." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "בחר..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "כדי שנוכל ליצור ×יתך קשר ולקבל מידע נוסף, כתובת ×”×ימייל שלך תיכלל בכל משוב שתשלח." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "דווח על בעיה" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "כלול יומני ×™×™×©×•×ž×™× ×©×™×¡×™×™×¢×• לנו לפתור ×ת הבעיה (×”×™×•×ž× ×™× ×¢×©×•×™×™× ×œ×›×œ×•×œ מידע פרטי)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "â€×™×•×ž× ×™ ×™×™×©×•×ž×™× ×¢×©×•×™×™× ×œ×›×œ×•×œ ×¤×¨×˜×™× ×ישיי×, כולל הזהות שלך (כתובת ×ימייל) ×•×’× ×”×©×ž×•×ª והתכונות של ×§×‘×¦×™× ×•×ª×™×§×™×•×ª ב-Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "המידע ×”×–×” משמש רק ל×בחון הבעיה שדיווחת עליה. ×”×•× ×–×ž×™×Ÿ רק למי שבוחן ×ת הדוח, ונשמר למשך זמן של 30 ×™×ž×™× ×œ×›×œ היותר." + }, + "FOOTER_CONNECTING": { + "message": "מתחבר…" + }, + "FOOTER_WAITING": { + "message": "ממתין לחיבור..." + }, + "FOR_PLATFORM_MAC": { + "message": "â€×¢×‘ור Mac (OS X 10.6 ו×ילך)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "â€×¢×‘ור Windows (XP ו×ילך)" + }, + "FULL_SCREEN": { + "message": "מסך מל×" + }, + "GET_STARTED": { + "message": "תחילת העבודה" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "×שר" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "דחה" + }, + "HELP": { + "message": "עזרה" + }, + "HOME_ACCESS_BUTTON": { + "message": "גישה" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "הצג תוכן של מחשב משותף ושלוט בו." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "â€×ª×•×›×œ לגשת למחשב ×–×” ב×ופן מ×ובטח ב×מצעות 'שולחן עבודה מרוחק של Chrome'." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "â€×©× ×” PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "המחשב הזו משותף כרגע כחלק מחשבון ×חר." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "הצג/ערוך" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "â€×ž×—שב ×–×” מוגדר ל×פשר ללקוח ×חד ×ו יותר להתחבר מבלי להזין PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "הפעל ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™×" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "â€×× ×‘×¨×¦×•× ×š להשתמש ב'שולחן עבודה מרוחק של Chrome' כדי לגשת למחשב ×–×”, עליך להפעיל ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™×." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "השבת ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™×" + }, + "HOME_SHARE_BUTTON": { + "message": "שתף" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "שתף מחשב ×–×” ו×פשר למשתמש ×חר להציג ×ת התוכן שלו ולשלוט בו." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(התכונה הזו ××™× ×” זמינה עדיין בשביל המחשב שלך)" + }, + "HOST_CATEGORY": { + "message": "מ×רח" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "נדחתה גישה עבור לקוח: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "לקוח שהתחבר: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "לקוח שהתנתק: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "â€IP הערוץ של הלקוח: %1 ip='%2' host_ip='%3' ערוץ='%4' חיבור='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "â€×›×“×™ להפעיל ×—×™×‘×•×¨×™× ×ž×¨×—×•×§ למחשב ×חר, התקן ×ת 'שולחן עבודה מרוחק של Chrome' במחשב ×”×חר ולחץ על '$1$'.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "â€×ין לך ×ž×—×©×‘×™× ×¨×©×•×ž×™×. כדי להפעיל ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™× ×œ×ž×—×©×‘, התקן ×ת 'שולחן עבודה מרוחק של Chrome' במחשב היעד ולחץ על '$1$'.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "â€× ×›× ×¡×ª בעבר ×›-$1$ ($2$). כדי להיכנס ×œ×ž×—×©×‘×™× ×©×œ×š בחשבון ×”×–×”, $3$היכנס ×ל Google Chrome$4$ ×¢× ×”×—×©×‘×•×Ÿ והתקן מחדש ×ת שולחן העבודה המרוחק של Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "עדכוני תוכנה ×ž×ª×‘×¦×¢×™× ×‘×“×¨×š כלל ב×ופן ×וטומטי, ×בל ×‘×ž×§×¨×™× × ×“×™×¨×™× ×”× ×¢×©×•×™×™× ×œ×”×™×›×©×œ. עדכון התוכנה ×œ× ×מור לקחת יותר ממספר דקות, וניתן לבצע ×ותו כש×תה מחובר למחשב ב×ופן מרוחק." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "â€×©×•×œ×—ן העבודה המרוחק של Chrome ב-$1$ ×ינו מעודכן ויש לעדכן ×ותו.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "â€×¢×–ור לנו לשפר ×ת 'שולחן עבודה מרוחק של Chrome' בכך שת×פשר לנו ל×סוף סטטיסטיקות שימוש ודוחות קריסה." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "â€×›×“×™ להגן על הגישה למחשב ×–×”, בחר PIN ב×ורך $1$שש ספרות לפחות$2$. PIN ×–×” יידרש בעת התחברות ×ž×ž×™×§×•× ×חר.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "הפעלת שירות הגישה מרחוק נכשלה." + }, + "HOST_SETUP_INSTALL": { + "message": "â€Chrome מוריד ×ת מתקין המ×רח של 'שולחן עבודה מרוחק של Chrome'. ×‘×¡×™×•× ×”×”×•×¨×“×”, הפעל ×ת המתקין לפני שתמשיך." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "הפעל ×ת המתקין לפני שתמשיך." + }, + "HOST_SETUP_STARTED": { + "message": "הופעלו ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™× ×œ×ž×—×©×‘ ×–×”." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "בדוק ×ת הגדרות ניהול צריכת החשמל של המחשב כדי ×œ×•×•×“× ×©×ינו מוגדר לעבור למצב שינה בזמן חוסר פעילות." + }, + "HOST_SETUP_STARTING": { + "message": "מפעיל ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™× ×œ×ž×—×©×‘ ×–×”..." + }, + "HOST_SETUP_STOPPED": { + "message": "×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™× ×œ×ž×—×©×‘ ×–×” הושבתו." + }, + "HOST_SETUP_STOPPING": { + "message": "משבית ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™× ×œ×ž×—×©×‘ ×–×”..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "הניסיון להשבית גישה מרחוק למחשב ×–×” נכשל. נסה שוב מ×וחר יותר." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "â€×‘הורדת מנהל ההתקנה של מ×רח שולחן העבודה המרוחק של Chrome, ×תה מביע הסכמה ל$1$תנ××™× ×•×œ×”×’×‘×œ×•×ª$4 של Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "â€×”-PIN שלך עודכן." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "â€×”ניסיון לעדכן ×ת ×”-PIN נכשל. נסה שוב מ×וחר יותר." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "â€×”-PIN של מחשב ×–×” מתעדכן..." + }, + "HOST_STARTED": { + "message": "המ×רח הופעל עבור המשתמש: %1." + }, + "HOST_STOPPED": { + "message": "המ×רח הופסק." + }, + "IDLE_CONTINUE": { + "message": "המשך" + }, + "IDLE_DISCONNECT": { + "message": "נתק עכשיו" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "×œ× ×”×™×™×ª×” פעילות ב-$1$ במשך זמן-מה. ×תה תנותק בקרוב.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "למחשב ×–×”" + }, + "INSTALLER_DOWNLOAD": { + "message": "â€×”ורד ×ת מנהל ההתקנה של מ×רח שולחן העבודה המרוחק של Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "כדי להתחיל לשתף ×ת שולחן העבודה שלך, תן ×ת קוד הגישה שלמטה ל××“× ×©×™×¡×™×™×¢ לך." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "ל×חר שהמשתמש יזין ×ת הקוד, השיתוף יתחיל לפעול." + }, + "INVALID_PIN": { + "message": "â€×”זן PIN המורכב משש ספרות ×ו יותר." + }, + "IT2ME_FIRST_RUN": { + "message": "שיתוף מסך ממשתמש למשתמש, הפתרון ×”×ž×•×©×œ× ×œ×ª×ž×™×›×” טכנית מרחוק." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "פריסות מקלדת" + }, + "LABEL_CONNECTED": { + "message": "מחובר:" + }, + "LAST_ONLINE": { + "message": "$1$ (התחברות ×חרונה $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "למד כיצד." + }, + "LEARN_MORE": { + "message": "למידע נוסף" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "â€×”עדפות מ×רח שולחן העבודה המרוחק של Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "â€×ž×רח שולחן העבודה\nהמרוחק של Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "â€×ž×¡×™×¨ ההתקנה של מ×רח שולחן העבודה המרוחק של Chromeâ€" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "â€×”שתמש במקש Ctrl למקש Win (⌘ ב-Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "הגדל ×ת החלון" + }, + "ME2ME_FIRST_RUN": { + "message": "גש למחשב שלך מכל מקו×." + }, + "MESSAGE_GENERATING": { + "message": "יוצר קוד גישה..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "â€×”פעילות של 'שולחן עבודה מרוחק של Chrome' הסתיימה." + }, + "MESSAGE_SHARED": { + "message": "שולחן העבודה שלך משותף כעת ×¢× $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "מזער ×ת החלון" + }, + "MODE_AUTHORIZE": { + "message": "מתן הרש××”" + }, + "MODE_IT2ME": { + "message": "סיוע מרחוק" + }, + "MODE_ME2ME": { + "message": "×”×ž×—×©×‘×™× ×©×œ×™" + }, + "NEW_WINDOW": { + "message": "חלון חדש…" + }, + "NO_PAIRED_CLIENTS": { + "message": "כל הלקוחות המות××ž×™× × ×ž×—×§×•." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "שילוב של שולחן עבודה ×ינו נתמך בפלטפורמה זו. תוכל עדיין להשתמש ביישו×, ×בל תהיה לכך השפעה שלילית על חוויית המשתמש." + }, + "OFFLINE": { + "message": "$1$ (×œ× ×ž×§×•×•×Ÿ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "×תחול המ×רח נכשל." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "תצורה ×œ× ×—×•×§×™×ª של המ×רח." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "דומיין ×œ× ×—×•×§×™ של בעל המ×רח." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "מזהה מ×רח ×œ× ×—×•×§×™." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "â€×‘הגדרת המ×רח נעשה שימוש בפרטי כניסת OAuth ×œ× ×—×•×§×™×™×." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "המ×רח הפועל במסך הכניסה למסוף כבה כדי לתמוך במצב הסתרה על ידי מעבר ×ל מ×רח הרץ בפעילות ב×תר ×©×”×™× ×¡×¤×¦×™×¤×™×ª למשתמש." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "מתבצע ×תחול של המ×רח כדי להחיל שינוי במדיניות." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "המ×רח ×œ× ×”×¦×œ×™×— ×œ×§×¨×•× ×ת המדיניות." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "המ×רח כבה." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "שגי×ת מ×רח ×œ× ×ž×–×•×”×”: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "×‘×¢×œ×™× ×œ× ×—×•×§×™ של המ×רח." + }, + "OK": { + "message": "×ישור" + }, + "OPTIONS_MENU": { + "message": "×פשרויות" + }, + "OUTGOING_CONNECTIONS": { + "message": "ממחשב ×–×”" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "â€×”לקוחות הב××™× ×”×•×ª×מו למחשב ×–×” ×•×™×›×•×œ×™× ×œ×”×ª×—×‘×¨ מבלי לספק PIN. ניתן לבטל הרש××” זו בכל עת, בנפרד ×ו עבור כל הלקוחות." + }, + "PAIRED_CLIENT_DATE": { + "message": "ת×ריך ההת×מה" + }, + "PAIRED_CLIENT_NAME": { + "message": "לקוח" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "â€×”זן ×ת ×ותו PIN בשתי התיבות." + }, + "PIN_MESSAGE": { + "message": "â€×”זן ×ת ×”-PIN של $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "â€×”זן ×ת מספר ×”-PIN עבור המחשב המרוחק." + }, + "PRODUCT_DESCRIPTION": { + "message": "גש ×œ×ž×—×©×‘×™× ××—×¨×™× ×ו ×פשר למשתמש ×חר לגשת למחשב שלך דרך ×”×ינטרנט ב×ופן מ×ובטח." + }, + "PRODUCT_NAME": { + "message": "â€×©×•×œ×—ן עבודה מרוחק של Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "התחבר מחדש" + }, + "REMEMBER_PIN": { + "message": "â€×ל תבקש שוב PIN בעת התחברות למ×רח ×”×–×” ממכשיר ×–×”." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "ספריית ליבה" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "תהליך השילוב של שולחנות עבודה" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "â€×™×™×©×•× לשליחת פקודות ×ל המ×רח של שולחן העבודה המרוחק של Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "תהליך מ×רח" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "מ×רח העברת הודעות ייעודי עבור ניהול ×ירוח מרחוק" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "מ×רח העברת הודעות ייעודי עבור סיוע מרוחק" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "תהליך תקשורת מרוחקת למפתח ×בטחה" + }, + "RESIZE_TO_CLIENT": { + "message": "שנה ×ת גודל שולחן העבודה" + }, + "RESTART_BUTTON": { + "message": "הפעל מחדש כעת" + }, + "RESTORE_WINDOW": { + "message": "שחזר חלון" + }, + "RETRY": { + "message": "נסה שוב" + }, + "SCREEN_OPTIONS": { + "message": "×פשרויות מסך" + }, + "SEND_CTRL_ALT_DEL": { + "message": "â€×©×œ×— Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "דווח על בעיה..." + }, + "SEND_KEYS": { + "message": "שלח מקשי×" + }, + "SEND_PRINT_SCREEN": { + "message": "â€×©×œ×— PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "â€×©×™×¨×•×ª ×–×” מ×פשר ×—×™×‘×•×¨×™× × ×›× ×¡×™× ×ž×œ×§×•×—×•×ª שולחן העבודה המרוחק של Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "ההגדרה הזו מנוהלת על ידי מדיניות הדומיין שלך." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "שתף" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ביטול" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "×”×× ×‘×¨×¦×•× ×š לשתף מחשב ×–×” כך שמשתמש ×חר יר××” ×ותו וישלוט בו?" + }, + "SHOW_STATS": { + "message": "הצג סטטיסטיקה" + }, + "SHOW_STATS_WITH_RTT": { + "message": "הצג סטטיסטיקה (חיבור: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "הקטן להת×מה" + }, + "SIGN_IN_BUTTON": { + "message": "כניסה" + }, + "SIGN_OUT_BUTTON": { + "message": "יצי××”" + }, + "STOP_SHARING_BUTTON": { + "message": "הפסק ×ת השיתוף" + }, + "SURVEY_INVITATION": { + "message": "â€×¨×•×¦×” לעזור לשפר ×ת שולחן העבודה המרוחק של Chromeâ€? $1$השב על הסקר.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "שעה" + }, + "TOGGLE_STATS": { + "message": "הצג סטטיסטיקה" + }, + "TOOLTIP_CONNECT": { + "message": "התחבר ×ל $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "השבת ×—×™×‘×•×¨×™× ×ž×¨×•×—×§×™× ×œ×ž×—×©×‘ ×–×”" + }, + "TOOLTIP_REFRESH": { + "message": "רענן ×ת רשימת המ×רחי×" + }, + "TOOLTIP_RENAME": { + "message": "ערוך ×ת ×©× ×”×ž×—×©×‘" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (×œ× ×¢×“×›× ×™)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "חשבון" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "â€×שר ×ת החשבון ומספר ×”-PIN שלך ×©×ž×¤×•×¨×˜×™× ×œ×ž×˜×” כדי ל×פשר גישה ב×מצעות שולחן העבודה המרוחק של Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "הערה: הגדרות המדיניות מתירות ×—×™×‘×•×¨×™× ×¨×§ בין ×ž×—×©×‘×™× ×”× ×ž×¦××™× ×‘×ª×•×š הרשת שלך." + }, + "WARNING_NOT_WINDOWED": { + "message": "â€×©×™× לב: על מנת ×œ×•×•×“× ×©×›×œ מקשי הקיצור זמיני×, ניתן להגדיר ×ת שולחן העבודה המרוחק של Chrome ל'פתח כחלון'." + }, + "WHY_IS_THIS_SAFE": { + "message": "מדוע פעולה זו בטוחה?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "חלונות" + }, + "WORKING": { + "message": "עובד…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hi/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hi/messages.json new file mode 100644 index 000000000000..b5fe94d4fa3b --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hi/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "सà¥à¤µà¥€à¤•à¤¾à¤° करें और इंसà¥à¤Ÿà¥‰à¤² करें" + }, + "ACCESS_CODE": { + "message": "पहà¥à¤‚च कोड" + }, + "ACCESS_CODE_TIMER": { + "message": "यह à¤à¤•à¥à¤¸à¥‡à¤¸ कोड $1$ में समापà¥à¤¤ हो जाà¤à¤—ा", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "सà¥à¤à¤¾à¤µ" + }, + "ALL_CONNECTIONS": { + "message": "सभी कनेकà¥â€à¤¶à¤¨" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "पिन फिर से लिखें" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "पिन" + }, + "CANCEL": { + "message": "अभी नहीं" + }, + "CLEAR_HISTORY": { + "message": "इतिहास साफ़ करें" + }, + "CLOSE": { + "message": "बंद करें" + }, + "CLOSE_PROMPT": { + "message": "इस पृषà¥à¤  को छोड़ देने पर आपका Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सतà¥à¤° समापà¥à¤¤ हो जाà¤à¤—ा." + }, + "CLOSE_WINDOW": { + "message": "विंडो बंद करें" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "कà¥â€à¤¯à¤¾ आप वाकई $1$ से दूरसà¥à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® करना चाहते हैं? यदि आप अपना विचार बदलते हैं, तो आपको कनेकà¥â€à¤¶à¤¨ को पà¥à¤¨: सकà¥à¤·à¤® करने के लिठउस कंपà¥â€à¤¯à¥‚टर पर जाना होगा.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "कनेकà¥â€à¤¶à¤¨ विफल रहा" + }, + "CONNECTION_FROM_HEADER": { + "message": "पà¥à¤°à¥‡à¤·à¤•" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "कनेकà¥à¤¶à¤¨ इतिहास" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "ठीक" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "अचà¥à¤›à¤¾" + }, + "CONNECTION_QUALITY_POOR": { + "message": "खराब" + }, + "CONNECTION_TO_HEADER": { + "message": "पà¥à¤°à¤¤à¤¿" + }, + "CONNECT_ANYWAY": { + "message": "किसी भी तरह कनेकà¥à¤Ÿ करें" + }, + "CONNECT_BUTTON": { + "message": "कनेकà¥à¤Ÿ करें" + }, + "CONTINUE_BUTTON": { + "message": "जारी रखें" + }, + "CONTINUE_PROMPT": { + "message": "आप वरà¥à¤¤à¤®à¤¾à¤¨ में किसी अनà¥à¤¯ उपयोगकरà¥à¤¤à¤¾ के साथ इस मशीन को साà¤à¤¾ कर रहे हैं. कà¥à¤¯à¤¾ आप साà¤à¤¾à¤•à¤°à¤£ जारी रखना चाहते हैं?" + }, + "CONTROLLER_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤• टॉप होसà¥à¤Ÿ नियंतà¥à¤°à¤•" + }, + "COPYRIGHT": { + "message": "कॉपीराइट 2013 Google Inc. सरà¥à¤µà¤¾à¤§à¤¿à¤•à¤¾à¤° सà¥à¤°à¤•à¥à¤·à¤¿à¤¤." + }, + "CREDITS": { + "message": "कà¥à¤°à¥‡à¤¡à¤¿à¤Ÿ" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "सभी हटाà¤à¤‚" + }, + "DELETE_PAIRED_CLIENT": { + "message": "हटाà¤à¤‚" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "जारी रखने के लिठसबसे पहले आपको अपने कंपà¥â€à¤¯à¥‚टर को विसà¥à¤¤à¥ƒà¤¤ à¤à¤•à¥â€à¤¸à¥‡à¤¸ अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤‚ देनी होंगी. आपको à¤à¤¸à¤¾ केवल à¤à¤• बार करना है." + }, + "DESCRIPTION_CONNECT": { + "message": "जिस उपयोगकरà¥à¤¤à¤¾ का कंपà¥à¤¯à¥‚टर आप à¤à¤•à¥à¤¸à¥‡à¤¸ करना चाहते हैं, उसे “$1$†कà¥à¤²à¤¿à¤• करने और आपको à¤à¤•à¥à¤¸à¥‡à¤¸ कोड देने के लिठकहें.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª आपको वेब पर आपका कंपà¥â€à¤¯à¥‚टर सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रूप से साà¤à¤¾ करने देता है. दोनों उपयोगकरà¥à¤¤à¤¾à¤“ं के पास Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª à¤à¤ªà¥à¤¸ अवशà¥â€à¤¯ चलना चाहिà¤, जो कि $1$ पर मिल सकता है.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "दूरसà¥à¤¥ होसà¥à¤Ÿ के लिठआवशà¥à¤¯à¤• है कि आप किसी तृतीय-पकà¥à¤· की वेबसाइट पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¥ƒà¤¤ करें. जारी रखने के लिà¤, आपको Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª को इस पते को à¤à¤•à¥à¤¸à¥‡à¤¸ करने के लिठअतिरिकà¥à¤¤ अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤‚ देनी होंगी:" + }, + "DISABLE_HOST": { + "message": "अकà¥à¤·à¤® करें" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ करें" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome दूरसà¥â€à¤¥ डेसà¥â€à¤•à¤Ÿà¥‰à¤ª सेवा" + }, + "DURATION_HEADER": { + "message": "अवधि" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "आपको इस à¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨ को चलाने की अनà¥à¤®à¤¤à¤¿ नहीं है." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¤°à¤£ विफल रहा. कृपया Chrome में पà¥à¤¨: पà¥à¤°à¤µà¥‡à¤¶ करें." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "कà¥à¤› आवशà¥â€à¤¯à¤• घटक अनà¥à¤ªà¤²à¤¬à¥â€à¤§ हैं. कृपया सà¥à¤¨à¤¿à¤¶à¥â€à¤šà¤¿à¤¤ करें कि आप सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° का नवीनतम वरà¥à¤¶à¤¨ चला रहे हैं और पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "नेटवरà¥à¤• तà¥à¤°à¥à¤Ÿà¤¿ हà¥à¤ˆ. आपके डिवाइस के फिर से ऑन-लाइन होने पर हम à¤à¤ª को पà¥à¤¨à¤ƒ पà¥à¤°à¤¾à¤°à¤‚भ करेंगे." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "दूरसà¥à¤¥ कंपà¥à¤¯à¥‚टर सतà¥à¤° आरंभ करने में असफल रहा. यदि समसà¥à¤¯à¤¾ बनी रहती है, तो कृपया होसà¥à¤Ÿ को पà¥à¤¨à¤ƒ कॉनà¥à¥žà¤¿à¤—र करने का पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "दूरसà¥à¤¥ कंपà¥â€à¤¯à¥‚टर, कनेकà¥à¤¶à¤¨ अनà¥à¤°à¥‹à¤§à¥‹à¤‚ के लिठपà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ नहीं दे रहा है. कृपया सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें कि यह ऑनलाइन है और फिर से पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_HOST_OVERLOAD": { + "message": "किसी वà¥â€à¤¯à¤•à¥à¤¤à¤¿ के दà¥à¤µà¤¾à¤°à¤¾ अमानà¥â€à¤¯ पिन के साथ दूरसà¥â€à¤¥ कंपà¥â€à¤¯à¥‚टर से कनेकà¥â€à¤Ÿ करने का पà¥à¤°à¤¯à¤¾à¤¸ किठजाने के कारण कनेकà¥â€à¤¶à¤¨ असà¥â€à¤¥à¤¾à¤¯à¥€ रूप से अवरोधित हैं. कृपया बाद में पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "इस कंपà¥â€à¤¯à¥‚टर को पंजीकृत करने में विफल." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "असंगत पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤² वरà¥à¤¶à¤¨ का पता लगा था. कृपया सà¥à¤¨à¤¿à¤¶à¥â€à¤šà¤¿à¤¤ करें कि आपके पास दोनों कंपà¥â€à¤¯à¥‚टरों पर सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° का नवीनतम वरà¥à¤¶à¤¨ इंसà¥â€à¤Ÿà¥‰à¤² किया हà¥à¤† है और पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "पहà¥à¤‚च कोड अमानà¥à¤¯ है. कृपया फिर से पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "नीति सेटिंग इस कंपà¥à¤¯à¥‚टर को à¤à¤• Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ के रूप में साà¤à¤¾ करने की अनà¥à¤®à¤¤à¤¿ नहीं देतीं. सहायता के लिठअपने सिसà¥à¤Ÿà¤® वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• से संपरà¥à¤• करें." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "दूरसà¥à¤¥ सतà¥à¤° समापà¥à¤¤ हो चà¥à¤•à¤¾ है." + }, + "ERROR_MISSING_PLUGIN": { + "message": "कà¥à¤› आवशà¥â€à¤¯à¤• घटक अनà¥à¤ªà¤²à¤¬à¥â€à¤§ है. कृपया सà¥à¤¨à¤¿à¤¶à¥â€à¤šà¤¿à¤¤ करें कि आप Chrome का नवीनतम वरà¥à¤¶à¤¨ चला रहे हैं और पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_NACL_DISABLED": { + "message": "कà¥à¤› आवशà¥â€à¤¯à¤• घटक अनà¥à¤ªà¤²à¤¬à¥â€à¤§ हैं. कृपया chrome://plugins पर जाà¤à¤‚ और सà¥à¤¨à¤¿à¤¶à¥â€à¤šà¤¿à¤¤ करें कि सà¥â€à¤¥à¤¾à¤¨à¥€à¤¯ कà¥â€à¤²à¤¾à¤‡à¤‚ट सकà¥à¤·à¤® है." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "किसी आवशà¥à¤¯à¤• घटक ने काम करना बंद कर दिया है. कृपया इस समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ डेवलपर से करें." + }, + "ERROR_NETWORK_FAILURE": { + "message": "नेटवरà¥à¤• से कनेकà¥à¤Ÿ नहीं किया जा सका. कृपया जांचें कि आपका डिवाइस ऑन-लाइन है." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "आपने Chrome में पà¥à¤°à¤µà¥‡à¤¶ नहीं किया है. कृपया पà¥à¤°à¤µà¥‡à¤¶ करें और पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "आपको यह कारà¥à¤¯à¤µà¤¾à¤¹à¥€ करने की अनà¥à¤®à¤¤à¤¿ नहीं है." + }, + "ERROR_NOT_FOUND": { + "message": "अनà¥à¤°à¥‹à¤§à¤¿à¤¤ ऑबà¥â€à¤œà¥‡à¤•à¥â€à¤Ÿ मौजूद नहीं है." + }, + "ERROR_P2P_FAILURE": { + "message": "होसà¥â€à¤Ÿ तक पहà¥à¤‚चने में असमरà¥à¤¥. यह संभवत: आपके दà¥à¤µà¤¾à¤°à¤¾ उपयोग किठजाने वाले नेटवरà¥à¤• के कॉनà¥à¤«à¤¼à¤¿à¤—रेशन के कारण है." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "सेवा असà¥à¤¥à¤¾à¤¯à¥€ रूप से अनà¥à¤ªà¤²à¤¬à¥à¤§ है. कृपया बाद में पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "ERROR_UNEXPECTED": { + "message": "à¤à¤• अनपेकà¥à¤·à¤¿à¤¤ तà¥à¤°à¥à¤Ÿà¤¿ आई. कृपया इस समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ डेवलपर से करें." + }, + "EXIT_FULL_SCREEN": { + "message": "पूरà¥à¤£ सà¥à¤•à¥à¤°à¥€à¤¨ से बाहर निकलें" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "à¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨ को रीसेट नहीं किया जा सका. फिर भी आप बग रिपोरà¥à¤Ÿ भेज सकते हैं." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "à¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨ को रीसेट करें. आप किसी भी नहीं सहेजे गठकारà¥à¤¯ को खो देंगे." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "मैं à¤à¤ªà¥à¤²à¤¿à¤•à¥‡à¤¶à¤¨ को खोल नहीं सकता/सकती." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "à¤à¤ªà¥à¤²à¤¿à¤•à¥‡à¤¶à¤¨ बहà¥à¤¤ धीमा है." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "मैं अपनी Google डिसà¥à¤• फ़ाइलें नहीं खोल सकता/सकती." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "मैं Google डिसà¥à¤• में अपनी सहेजी गई फ़ाइलों को ऑनलाइन नहीं देख सकता/सकती." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "मà¥à¤à¥‡ अपने कीबोरà¥à¤¡ या माउस के साथ समसà¥à¤¯à¤¾ आ रही है." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "आपकी समसà¥à¤¯à¤¾ को सà¥à¤²à¤à¤¾à¤¨à¥‡ में हमारी सहायता करने के लिà¤, कृपया हमें बताà¤à¤‚ कि कà¥à¤¯à¤¾ गड़बड़ी हà¥à¤ˆ:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "कà¥à¤› और." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "चà¥à¤¨à¥‡à¤‚…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "हमें अतिरिकà¥â€à¤¤ जानकारी हेतॠआपसे संपरà¥à¤• करने देने के लिà¤, आपके दà¥à¤µà¤¾à¤°à¤¾ सबमिट किठजाने वाले किसी भी फ़ीडबैक में आपका ईमेल पता शामिल किया जाà¤à¤—ा." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "किसी समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ करें" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "आपकी समसà¥â€à¤¯à¤¾ का समाधान करने में हमारी सहायता के लिठà¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨ लॉग शामिल करें (लॉग में निजी जानकारी शामिल हो सकती है)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "à¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨ लॉग में आपकी पहचान (ईमेल पता) और Google डिसà¥â€à¤• में आपकी फ़ाइलों तथा फ़ोलà¥â€à¤¡à¤° के नाम और गà¥à¤£ सहित, निजी जानकारी शामिल हो सकती है." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "इस जानकारी का उपयोग आपके दà¥à¤µà¤¾à¤°à¤¾ रिपोरà¥à¤Ÿ की जा रही समसà¥â€à¤¯à¤¾ का निदान करने के लिठही किया जाता है, यह आपकी रिपोरà¥à¤Ÿ की जांच कर रहे वà¥â€à¤¯à¤•à¥â€à¤¤à¤¿ के लिठही उपलबà¥â€à¤§ होती है, और इसे 30 दिन से अधिक समय तक नहीं रखा जाता." + }, + "FOOTER_CONNECTING": { + "message": "कनेकà¥à¤Ÿ हो रहा है..." + }, + "FOOTER_WAITING": { + "message": "कनेकà¥à¤¶à¤¨ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾à¤°à¤¤â€¦" + }, + "FOR_PLATFORM_MAC": { + "message": "Mac के लिठ(OS X 10.6 और बाद वाले वरà¥à¤¶à¤¨)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows के लिठ(XP और बाद वाले वरà¥à¤¶à¤¨)" + }, + "FULL_SCREEN": { + "message": "पूरà¥à¤£ सà¥â€à¤•à¥à¤°à¥€à¤¨" + }, + "GET_STARTED": { + "message": "आरंभ करें" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "सà¥à¤µà¥€à¤•à¤¾à¤° करें" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "असà¥à¤µà¥€à¤•à¤¾à¤° करें" + }, + "HELP": { + "message": "सहायता" + }, + "HOME_ACCESS_BUTTON": { + "message": "à¤à¤•à¥à¤¸à¥‡à¤¸ करें" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "साà¤à¤¾ किया गया कंपà¥â€à¤¯à¥‚टर देखें और नियंतà¥à¤°à¤¿à¤¤ करें." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "आप Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª का उपयोग करके सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रूप से इस कंपà¥à¤¯à¥‚टर को à¤à¤•à¥à¤¸à¥‡à¤¸ कर सकते हैं." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "पिन बदलें" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "यह कंपà¥â€à¤¯à¥‚टर वरà¥à¤¤à¤®à¤¾à¤¨ में किसी भिनà¥â€à¤¨ खाते के अंतरà¥à¤—त साà¤à¤¾ किया गया है." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "देखें/संपादित करें" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "इस कंपà¥à¤¯à¥‚टर को PIN डाले बिना à¤à¤• या इससे अधिक कà¥à¤²à¤¾à¤‡à¤‚ट से कनेकà¥à¤Ÿ करने देने के लिठकॉनà¥à¤«à¤¼à¤¿à¤—र किया गया है." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "दूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ सकà¥à¤·à¤® करें" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "यदि आप इस कंपà¥à¤¯à¥‚टर को à¤à¤•à¥à¤¸à¥‡à¤¸ करने के लिठChrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª का उपयोग करना चाहते हैं, तो आपको दूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करने होंगे." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "दूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® करें" + }, + "HOME_SHARE_BUTTON": { + "message": "साà¤à¤¾ करें" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "किसी अनà¥â€à¤¯ उपयोगकरà¥à¤¤à¤¾ दà¥à¤µà¤¾à¤°à¤¾ देखने और नियंतà¥à¤°à¤¿à¤¤ करने के लिठयह कंपà¥â€à¤¯à¥‚टर साà¤à¤¾ करें." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(यह सà¥à¤µà¤¿à¤§à¤¾ अभी तक आपके कंपà¥â€à¤¯à¥‚टर के लिठउपलबà¥â€à¤§ नहीं है)" + }, + "HOST_CATEGORY": { + "message": "होसà¥à¤Ÿ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "कà¥à¤²à¤¾à¤‡à¤‚ट की à¤à¤•à¥à¤¸à¥‡à¤¸ असà¥à¤µà¥€à¤•à¤¾à¤° की गई: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "कà¥à¤²à¤¾à¤‡à¤‚ट कनेकà¥à¤Ÿ किया गया: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "कà¥à¤²à¤¾à¤‡à¤‚ट डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ किया गया: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "कà¥à¤²à¤¾à¤‡à¤‚ट के लिठचैनल IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "किसी भिनà¥à¤¨ कंपà¥à¤¯à¥‚टर के लिठदूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करने के लिà¤, वहां Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª इंसà¥à¤Ÿà¥‰à¤² करें और “$1$†कà¥à¤²à¤¿à¤• करें.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "आपके पास कोई पंजीकृत कंपà¥à¤¯à¥‚टर नहीं हैं. किसी कंपà¥à¤¯à¥‚टर पर दूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करने के लिà¤, Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª इंसà¥à¤Ÿà¥‰à¤² करें और “$1$†कà¥à¤²à¤¿à¤• करें.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "आपने पूरà¥à¤µ में $1$ ($2$) के रूप में पà¥à¤°à¤µà¥‡à¤¶ किया था. उस खाते में अपने कंपà¥â€à¤¯à¥‚टर à¤à¤•à¥â€à¤¸à¥‡à¤¸ करने के लिà¤, उस खाते से $3$Google Chrome में पà¥à¤°à¤µà¥‡à¤¶ करें$4$ और Chrome दूरसà¥â€à¤¥ डेसà¥â€à¤•à¤Ÿà¥‰à¤ª को पà¥à¤¨: इंसà¥â€à¤Ÿà¥‰à¤² करें.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° अपडेट आमतौर पर सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से ही होते हैं, लेकिन कà¥à¤› दà¥à¤°à¥à¤²à¤­ मामलों में वे असफल भी हो सकते हैं. सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° को अपडेट होने में कà¥à¤› ही मिनट लगेंगे और इसे अपने कंपà¥à¤¯à¥‚टर से दूरसà¥à¤¥ रूप से कनेकà¥à¤Ÿ रहते हà¥à¤ भी पूरà¥à¤£ किया जा सकता है." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ पर Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª पà¥à¤°à¤¾à¤¨à¤¾ हो गया है और इसे अपडेट किया जाना आवशà¥à¤¯à¤• है.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "हमें उपयोग आंकड़े और कà¥à¤°à¥ˆà¤¶ रिपोरà¥à¤Ÿ à¤à¤•à¤¤à¥à¤°à¤¿à¤¤ करने की अनà¥à¤®à¤¤à¤¿ देते हà¥à¤ Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª को सà¥à¤§à¤¾à¤°à¤¨à¥‡ में हमारी सहायता करें." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "इस कंपà¥à¤¯à¥‚टर की पहà¥à¤‚च सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करने के लिà¤, कृपया $1$कम से कम छ: अंक$2$ का पिन चà¥à¤¨à¥‡à¤‚. यह पिन किसी अनà¥à¤¯ सà¥à¤¥à¤¾à¤¨ से कनेकà¥à¤Ÿ करते समय आवशà¥à¤¯à¤• होगा.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "दूरसà¥â€à¤¥ पहà¥à¤‚च सेवा पà¥à¤°à¤¾à¤°à¤‚भ करने में विफल." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome, Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ इंसà¥à¤Ÿà¥‰à¤²à¤° को डाउनलोड कर रहा है. डाउनलोड पूरà¥à¤£ हो जाने पर, कृपया आगे बढने से पहले इंसà¥à¤Ÿà¥‰à¤²à¤° चलाà¤à¤‚." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "कृपया जारी रखने से पहले इंसà¥à¤Ÿà¥‰à¤²à¤° चलाà¤à¤‚." + }, + "HOST_SETUP_STARTED": { + "message": "इस कंपà¥â€à¤¯à¥‚टर के लिठदूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ सकà¥à¤·à¤® कर दिठगठहैं." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "कृपया अपने कंपà¥â€à¤¯à¥‚टर की शकà¥à¤¤à¤¿ पà¥à¤°à¤¬à¤‚धन सेटिंग जांचें और सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि उसे पà¥à¤°à¤¯à¥‹à¤— में नहीं रहते समय सà¥à¤ªà¥à¤¤ रहने के लिठकॉनà¥â€à¤«à¤¼à¤¿à¤—र नहीं किया गया है." + }, + "HOST_SETUP_STARTING": { + "message": "इस कंपà¥â€à¤¯à¥‚टर के लिठदूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ सकà¥à¤·à¤® किठजा रहे हैं…" + }, + "HOST_SETUP_STOPPED": { + "message": "इस कंपà¥â€à¤¯à¥‚टर के लिठदूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® कर दिठगठहैं." + }, + "HOST_SETUP_STOPPING": { + "message": "इस कंपà¥â€à¤¯à¥‚टर के लिठदूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® किठजा रहे हैं…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "इस कंपà¥â€à¤¯à¥‚टर के लिठदूरसà¥â€à¤¥ पहà¥à¤‚च अकà¥à¤·à¤® करने में विफल. कृपया बाद में पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ इंसà¥à¤Ÿà¥‰à¤²à¤° को डाउनलोड करके, आप Google की $1$सेवा की शरà¥à¤¤à¥‹à¤‚$4 से सहमत होते हैं.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "आपका पिन अपडेट कर दिया गया है." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "पिन अपडेट करने में विफल. कृपया बाद में पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "इस कंपà¥â€à¤¯à¥‚टर का पिन अपडेट किया जा रहा है…" + }, + "HOST_STARTED": { + "message": "होसà¥à¤Ÿ, इस उपयोगकरà¥à¤¤à¤¾ के लिठपà¥à¤°à¤¾à¤°à¤‚भ किया गया: %1." + }, + "HOST_STOPPED": { + "message": "होसà¥â€à¤Ÿ बंद हो गया है." + }, + "IDLE_CONTINUE": { + "message": "जारी रखें" + }, + "IDLE_DISCONNECT": { + "message": "अभी डिसà¥â€à¤•à¤¨à¥‡à¤•à¥â€à¤Ÿ करें" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "आपका $1$ सतà¥à¤° कà¥à¤› समय से निषà¥â€à¤•à¥à¤°à¤¿à¤¯ है और जलà¥â€à¤¦à¥€ ही डिसà¥â€à¤•à¤¨à¥‡à¤•à¥â€à¤Ÿ कर दिया जाà¤à¤—ा.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "इस कंपà¥â€à¤¯à¥‚टर से" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ इंसà¥à¤Ÿà¥‰à¤²à¤° डाउनलोड करना" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "अपने डेसà¥à¤•à¤Ÿà¥‰à¤ª को साà¤à¤¾ करना पà¥à¤°à¤¾à¤°à¤‚भ करने के लिà¤, नीचे दिया गया पहà¥à¤‚च कोड आपकी सहायता करने वाले वà¥à¤¯à¤•à¥à¤¤à¤¿ को दें." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "उसके दà¥à¤µà¤¾à¤°à¤¾ कोड दरà¥à¤œ करने के बाद आपका साà¤à¤¾à¤•à¤°à¤£ सतà¥à¤° पà¥à¤°à¤¾à¤°à¤‚भ हो जाà¤à¤—ा." + }, + "INVALID_PIN": { + "message": "कृपया छः या अधिक अंकों वाला पिन दरà¥à¤œ करें." + }, + "IT2ME_FIRST_RUN": { + "message": "उपयोगकरà¥à¤¤à¤¾-से-उपयोगकरà¥à¤¤à¤¾ सà¥â€à¤•à¥à¤°à¥€à¤¨ साà¤à¤¾à¤•à¤°à¤£, दूरसà¥â€à¤¥ तकनीकी सहायता के लिठउपयà¥à¤•à¥à¤¤." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "कीबोरà¥à¤¡ लेआउट" + }, + "LABEL_CONNECTED": { + "message": "कनेकà¥â€à¤Ÿ किया गया:" + }, + "LAST_ONLINE": { + "message": "$1$ (पिछली बार $2$ को ऑनलाइन)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "जानें कैसे." + }, + "LEARN_MORE": { + "message": "अधिक जानें." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾à¤à¤‚" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome दूरसà¥à¤¥\nडेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ अनइंसà¥à¤Ÿà¥‰à¤²à¤°" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win कà¥à¤‚जी के लिठराइट Ctrl का उपयोग करें (Mac पर ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "विंडो को बड़ा करें" + }, + "ME2ME_FIRST_RUN": { + "message": "अपने कंपà¥à¤¯à¥‚टर पर कहीं से भी पहà¥à¤‚चें." + }, + "MESSAGE_GENERATING": { + "message": "पहà¥à¤‚च कोड जनरेट किया जा रहा है…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "आपका Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सतà¥à¤° समापà¥à¤¤ हो चà¥à¤•à¤¾ है." + }, + "MESSAGE_SHARED": { + "message": "आपका डेसà¥à¤•à¤Ÿà¥‰à¤ª वरà¥à¤¤à¤®à¤¾à¤¨ में $1$ के साथ साà¤à¤¾ किया गया है.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "विंडो को छोटा करें" + }, + "MODE_AUTHORIZE": { + "message": "अधिकृत करें" + }, + "MODE_IT2ME": { + "message": "दूरसà¥à¤¥ सहायता" + }, + "MODE_ME2ME": { + "message": "मेरे कंपà¥à¤¯à¥‚टर" + }, + "NEW_WINDOW": { + "message": "नई विंडो..." + }, + "NO_PAIRED_CLIENTS": { + "message": "सभी यà¥à¤—à¥à¤®à¤¿à¤¤ कà¥à¤²à¤¾à¤‡à¤‚ट हटा दिठगठहैं." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "डेसà¥â€à¤•à¤Ÿà¥‰à¤ª à¤à¤•à¥€à¤•à¤°à¤£ इस पà¥â€à¤²à¥‡à¤Ÿà¤«à¤¼à¥‰à¤°à¥à¤® पर समरà¥à¤¥à¤¿à¤¤ नहीं है. फिर भी आप à¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨ का उपयोग कर सकते हैं, लेकिन उपयोगकरà¥à¤¤à¤¾ अनà¥à¤­à¤µ कम हो जाà¤à¤—ा." + }, + "OFFLINE": { + "message": "$1$ (ऑफ़लाइन)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "होसà¥â€à¤Ÿ आरंभ करना विफल रहा." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "अमानà¥â€à¤¯ होसà¥â€à¤Ÿ कॉनà¥â€à¤«à¤¼à¤¿à¤—रेशन." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "अमानà¥â€à¤¯ होसà¥â€à¤Ÿ सà¥â€à¤µà¤¾à¤®à¥€ डोमेन." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "अमानà¥â€à¤¯ होसà¥â€à¤Ÿ आईडी." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "होसà¥â€à¤Ÿ को अमानà¥â€à¤¯ OAuth पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤¤à¤¾ से कॉनà¥â€à¤«à¤¼à¤¿à¤—र किया गया है." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "करà¥à¤Ÿà¤¨ मोड का समरà¥à¤¥à¤¨ करने के लिà¤, कंसोल लॉजिक सà¥â€à¤•à¥à¤°à¥€à¤¨ पर चल रहा होसà¥â€à¤Ÿ किसी उपयोगकरà¥à¤¤à¤¾ दà¥à¤µà¤¾à¤°à¤¾ निरà¥à¤¦à¤¿à¤·à¥â€à¤Ÿ सतà¥à¤° में चल रहे होसà¥â€à¤Ÿ पर सà¥â€à¤µà¤¿à¤š होकर बंद हो गया है." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "खाते में नीतिगत बदलाव करने के लिà¤, होसà¥â€à¤Ÿ पà¥à¤¨: पà¥à¤°à¤¾à¤°à¤‚भ हो रहा है." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "होसà¥â€à¤Ÿ, नीति को पढ़ने में विफल रहा." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "होसà¥â€à¤Ÿ बंद हो गया है." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "अपरिचित होसà¥â€à¤Ÿ तà¥à¤°à¥à¤Ÿà¤¿: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "अमानà¥â€à¤¯ होसà¥â€à¤Ÿ सà¥â€à¤µà¤¾à¤®à¥€." + }, + "OK": { + "message": "ठीक" + }, + "OPTIONS_MENU": { + "message": "विकलà¥à¤ª" + }, + "OUTGOING_CONNECTIONS": { + "message": "इस कंपà¥à¤¯à¥‚टर से" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "निमà¥à¤¨ कà¥à¤²à¤¾à¤‡à¤‚ट इस कंपà¥à¤¯à¥‚टर से यà¥à¤—à¥à¤®à¤¿à¤¤ कर दिठगठहैं और वे PIN पà¥à¤°à¤¦à¤¾à¤¨ किठबिना कनेकà¥à¤Ÿ कर सकते हैं. आप किसी भी समय, अलग-अलग या सभी कà¥à¤²à¤¾à¤‡à¤‚ट के लिठइस अनà¥à¤®à¤¤à¤¿ को निरसà¥à¤¤ कर सकते हैं." + }, + "PAIRED_CLIENT_DATE": { + "message": "यà¥à¤—à¥à¤®à¤¨ दिनांक" + }, + "PAIRED_CLIENT_NAME": { + "message": "कà¥à¤²à¤¾à¤‡à¤‚ट" + }, + "PIN": { + "message": "पिन" + }, + "PINS_NOT_EQUAL": { + "message": "कृपया दोनों बॉकà¥â€à¤¸ में समान पिन दरà¥à¤œ करें." + }, + "PIN_MESSAGE": { + "message": "कृपया $1$ के लिठअपना पिन दरà¥à¤œ करें.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "कृपया दूरसà¥à¤¥ कंपà¥à¤¯à¥‚टर के लिठअपना पिन डालें." + }, + "PRODUCT_DESCRIPTION": { + "message": "सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रूप से इंटरनेट पर अनà¥à¤¯ कंपà¥à¤¯à¥‚टर तक पहà¥à¤‚चें या किसी अनà¥à¤¯ उपयोगकरà¥à¤¤à¤¾ को अपने कंपà¥à¤¯à¥‚टर तक पहà¥à¤‚चने दें." + }, + "PRODUCT_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome à¤à¤ª सà¥â€à¤Ÿà¥à¤°à¥€à¤®à¤¿à¤‚ग" + }, + "RECONNECT": { + "message": "पà¥à¤¨: कनेकà¥â€à¤Ÿ करें" + }, + "REMEMBER_PIN": { + "message": "इस डिवाइस से इस होसà¥à¤Ÿ को कनेकà¥à¤Ÿ करते समय दोबारा पिन न मांगें." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "मà¥à¤–à¥à¤¯ लाइबà¥à¤°à¥‡à¤°à¥€" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "डेसà¥à¤•à¤Ÿà¥‰à¤ª à¤à¤•à¥€à¤•à¤°à¤£ पà¥à¤°à¥‹à¤¸à¥‡à¤¸" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "à¤à¤ªà¥â€à¤²à¤¿à¤•à¥‡à¤¶à¤¨, Chrome दूरसà¥â€à¤¥ डेसà¥â€à¤•à¤Ÿà¥‰à¤ª होसà¥â€à¤Ÿ को आदेश जारी करेगा." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "होसà¥à¤Ÿ पà¥à¤°à¥‹à¤¸à¥‡à¤¸" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "होसà¥à¤Ÿ पà¥à¤°à¤¬à¤‚धन को दूरसà¥à¤¥ बनाने के लिठसà¥à¤¥à¤¾à¤¨à¥€à¤¯ संदेश सेवा होसà¥à¤Ÿ" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "दूरसà¥à¤¥ सहायता के लिठसà¥à¤¥à¤¾à¤¨à¥€à¤¯ संदेश सेवा होसà¥à¤Ÿ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "सà¥à¤°à¤•à¥à¤·à¤¾ कà¥à¤‚जी दूरसà¥à¤¥ पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾" + }, + "RESIZE_TO_CLIENT": { + "message": "डेसà¥à¤•à¤Ÿà¥‰à¤ª को सटीक आकार में बदलें" + }, + "RESTART_BUTTON": { + "message": "अभी पà¥à¤¨à¤ƒ पà¥à¤°à¤¾à¤°à¤‚भ करें" + }, + "RESTORE_WINDOW": { + "message": "विंडो पà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ करें" + }, + "RETRY": { + "message": "पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें" + }, + "SCREEN_OPTIONS": { + "message": "सà¥â€à¤•à¥à¤°à¥€à¤¨ विकलà¥â€à¤ª" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del भेजें" + }, + "SEND_FEEDBACK": { + "message": "समसà¥à¤¯à¤¾ की रिपोरà¥à¤Ÿ करें…" + }, + "SEND_KEYS": { + "message": "भेजें कà¥à¤‚जियां" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn भेजें" + }, + "SERVICE_DESCRIPTION": { + "message": "यह सेवा Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª कà¥à¤²à¤¾à¤‡à¤‚ट के इनकमिंग कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करती है." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "यह सेटिंग आपकी डोमेन नीति दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¬à¤‚धित है." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "साà¤à¤¾ करें" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "अभी नहीं" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "कà¥â€à¤¯à¤¾ आप किसी अनà¥â€à¤¯ उपयोगकरà¥à¤¤à¤¾ दà¥à¤µà¤¾à¤°à¤¾ देखने और नियंतà¥à¤°à¤¿à¤¤ करने के लिठइस कंपà¥â€à¤¯à¥‚टर को साà¤à¤¾ करना चाहते हैं?" + }, + "SHOW_STATS": { + "message": "आंकड़े दिखाà¤à¤‚" + }, + "SHOW_STATS_WITH_RTT": { + "message": "आंकड़े दिखाà¤à¤‚ (कनेकà¥â€à¤¶à¤¨: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "â€à¤«à¤¼à¤¿à¤Ÿ करने के लिठसिकोड़ें" + }, + "SIGN_IN_BUTTON": { + "message": "पà¥à¤°à¤µà¥‡à¤¶ करें" + }, + "SIGN_OUT_BUTTON": { + "message": "पà¥à¤°à¤¸à¥à¤¥à¤¾à¤¨ करें" + }, + "STOP_SHARING_BUTTON": { + "message": "साà¤à¤¾à¤•à¤°à¤£ रोकें" + }, + "SURVEY_INVITATION": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª को बेहतर बनाने में सहायता करना चाहते हैं? $1$सरà¥à¤µà¥‡à¤•à¥à¤·à¤£ में भाग लें.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "समय" + }, + "TOGGLE_STATS": { + "message": "आंकड़े दिखाà¤à¤‚" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ से कनेकà¥à¤Ÿ करें", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "इस कंपà¥â€à¤¯à¥‚टर से दूरसà¥â€à¤¥ कनेकà¥à¤¶à¤¨ अकà¥à¤·à¤® करें" + }, + "TOOLTIP_REFRESH": { + "message": "होसà¥à¤Ÿ की सूची रीफà¥à¤°à¥‡à¤¶ करें" + }, + "TOOLTIP_RENAME": { + "message": "कंपà¥â€à¤¯à¥‚टर का नाम संपादित करें" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (पà¥à¤°à¤¾à¤¨à¤¾)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "खाता" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª दà¥à¤µà¤¾à¤°à¤¾ à¤à¤•à¥à¤¸à¥‡à¤¸ की अनà¥à¤®à¤¤à¤¿ देने के लिठकृपया नीचे अपने खाते और PIN की दà¥à¤¬à¤¾à¤°à¤¾ पूछें." + }, + "WARNING_NAT_DISABLED": { + "message": "धà¥â€à¤¯à¤¾à¤¨ दें: नीति सेटिंग केवल आपके नेटवरà¥à¤• के कंपà¥â€à¤¯à¥‚टर के बीच कनेकà¥à¤¶à¤¨ की अनà¥à¤®à¤¤à¤¿ देती है." + }, + "WARNING_NOT_WINDOWED": { + "message": "धà¥à¤¯à¤¾à¤¨ दें: सभी कीबोरà¥à¤¡ शॉरà¥à¤Ÿà¤•à¤Ÿ की उपलबà¥à¤§à¤¤à¤¾ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करने के लिà¤, आप Chrome रिमोट डेसà¥à¤•à¤Ÿà¥‰à¤ª को ‘विंडो के रूप में खोलें’ पर कॉनà¥à¤«à¤¼à¤¿à¤—र कर सकते हैं." + }, + "WHY_IS_THIS_SAFE": { + "message": "यह सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ कà¥à¤¯à¥‹à¤‚ है?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "कारà¥à¤¯ कर रहा है…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hr/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hr/messages.json new file mode 100644 index 000000000000..08ebd20ff4d6 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hr/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Prihvati i instaliraj" + }, + "ACCESS_CODE": { + "message": "Pristupni kôd" + }, + "ACCESS_CODE_TIMER": { + "message": "Ovaj pristupni kôd isteći će za $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Povratne informacije" + }, + "ALL_CONNECTIONS": { + "message": "Sve veze" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ponovo upiÅ¡ite PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Odustani" + }, + "CLEAR_HISTORY": { + "message": "IzbriÅ¡i povijest" + }, + "CLOSE": { + "message": "Zatvori" + }, + "CLOSE_PROMPT": { + "message": "Ako napustite ovu stranicu, zavrÅ¡it će vaÅ¡a sesija u aplikaciji Udaljena radna povrÅ¡ina Chrome." + }, + "CLOSE_WINDOW": { + "message": "Zatvori prozor" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Jeste li sigurni da želite onemogućiti daljinske veze s hostom $1$? Ako se predomislite, morat ćete se spojiti na to raÄunalo da biste ponovo omogućili veze.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Povezivanje nije uspjelo" + }, + "CONNECTION_FROM_HEADER": { + "message": "Od" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Povijest veza" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Solidna" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Dobra" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Slaba" + }, + "CONNECTION_TO_HEADER": { + "message": "Prima" + }, + "CONNECT_ANYWAY": { + "message": "Svejedno poveži" + }, + "CONNECT_BUTTON": { + "message": "Povežite se" + }, + "CONTINUE_BUTTON": { + "message": "Nastavi" + }, + "CONTINUE_PROMPT": { + "message": "Ovaj ureÄ‘aj trenutaÄno dijelite s drugim korisnikom. Želite li nastaviti dijeljenje?" + }, + "CONTROLLER_NAME": { + "message": "Kontroler Udaljene radne povrÅ¡ine Chrome" + }, + "COPYRIGHT": { + "message": "Autorska prava 2013. Google Inc. Sva prava pridržana." + }, + "CREDITS": { + "message": "Sudjelovali" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "IzbriÅ¡i sve" + }, + "DELETE_PAIRED_CLIENT": { + "message": "IzbriÅ¡i" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Da biste nastavili, morate odobriti dopuÅ¡tenja za proÅ¡ireni pristup svojem raÄunalu. To morate uÄiniti samo jednom." + }, + "DESCRIPTION_CONNECT": { + "message": "Zamolite korisnika Äijem raÄunalu želite pristupiti da klikne \"$1$\" i da vam pristupni kôd.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Udaljena radna povrÅ¡ina Chrome omogućuje vam da svoje raÄunalo sigurno dijelite putem weba. Na raÄunalima oba korisnika mora biti pokrenuta aplikacija Udaljena radna povrÅ¡ina Chrome koju možete pronaći na web-lokaciji $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Udaljeni host zahtijeva autentifikaciju web-lokacije treće strane. Da biste nastavili, morate dati Udaljenoj radnoj povrÅ¡ini Chrome dodatne dozvole za pristup ovoj adresi:" + }, + "DISABLE_HOST": { + "message": "Onemogući" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Prekini vezu" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Usluga Udaljena radna povrÅ¡ina Chrome" + }, + "DURATION_HEADER": { + "message": "Trajanje" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Nemate dopuÅ¡tenje za pokretanje te aplikacije." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autentifikacija nije uspjela. Prijavite se ponovo u Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Nedostaju neke obavezne komponente. Provjerite jeste li instalirali najnoviju verziju softvera i pokuÅ¡ajte ponovo." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "DoÅ¡lo je mrežne pogreÅ¡ke. Ponovo ćemo pokrenuti aplikaciju kad se vaÅ¡ ureÄ‘aj opet poveže s mrežom." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Udaljeno raÄunalo nije uspjelo inicijalizirati sesiju. Ako se problem ne rijeÅ¡i, pokuÅ¡ajte ponovo konfigurirati host." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Udaljeno raÄunalo ne odgovara na zahtjev za povezivanje. Provjerite je li na mreži i pokuÅ¡ajte ponovo." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Veze s udaljenim raÄunalom privremeno su blokirane jer se na njih pokuÅ¡ava spojiti korisnik s PIN-om koji nije važeći. PokuÅ¡ajte ponovo kasnije." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Nisam uspio registrirati ovo raÄunalo." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Otkrivena je nekompatibilna verzija protokola. Provjerite je li na oba raÄunala instalirana najnovija verzija softvera pa pokuÅ¡ajte ponovo." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Pristupni je kôd nevažeći. PokuÅ¡ajte ponovo." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Postavke pravila ne dopuÅ¡taju dijeljenje ovog raÄunala kao hosta za Udaljenu radnu povrÅ¡inu Chrome. Obratite se administratoru sustava za pomoć." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Daljinska je sesija istekla." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Nedostaju neke obavezne komponente. Provjerite jeste li pokrenuli najnoviju verziju Chromea i pokuÅ¡ajte ponovo." + }, + "ERROR_NACL_DISABLED": { + "message": "Nedostaju neke obavezne komponente. Otvorite chrome://plugins i provjerite je li omogućen Lokalni klijent." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Obavezna je komponenta prestala funkcionirati. Prijavite problem razvojnim programerima." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nije bilo moguće povezati se s mrežom. Provjerite je li ureÄ‘aj na mreži." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Niste prijavljeni u Chrome. Prijavite se i pokuÅ¡ajte ponovo." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Nemate dopuÅ¡tenje za izvrÅ¡avanje te radnje." + }, + "ERROR_NOT_FOUND": { + "message": "Traženi objekt ne postoji." + }, + "ERROR_P2P_FAILURE": { + "message": "Nije moguće pristupiti hostu. To je vjerojatno zbog konfiguracije mreže koju upotrebljavate." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Usluga je privremeno nedostupna. PokuÅ¡ajte ponovo kasnije." + }, + "ERROR_UNEXPECTED": { + "message": "Pojavila se neoÄekivana pogreÅ¡ka. Prijavite taj problem razvojnim programerima." + }, + "EXIT_FULL_SCREEN": { + "message": "IzaÄ‘i iz cijelog zaslona" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Vraćanje aplikacije na zadano nije uspjelo. I dalje možete poslati izvješće o programskim pogreÅ¡kama." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Vratite aplikaciju na zadano. Izgubit ćete sav rad koji niste spremili." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ne mogu otvoriti aplikaciju." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Aplikacija je prespora." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ne mogu otvoriti svoje datoteke na Google disku." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Ne vidim svoje spremljene datoteke na mreži na Google disku." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Imam problema s tipkovnicom ili miÅ¡em." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Da bismo lakÅ¡e rijeÅ¡ili vaÅ¡ problem, recite nam Å¡to nije u redu:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "NeÅ¡to drugo." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Odaberite…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Da bi smo vam mogli poslati daljnje informacije, u povratnim informacijama koje poÅ¡aljete bit će vaÅ¡a e-adresa." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Prijavite poteÅ¡koću" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "UkljuÄite zapisnike aplikacije da bismo lakÅ¡e rijeÅ¡ili vaÅ¡ problem (zapisnici mogu ukljuÄivati osobne podatke)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Zapisnici aplikacija mogu ukljuÄivati osobne podatke, ukljuÄujući vaÅ¡ identitet (e-adresu) te nazive i svojstva datoteka i mapa na Google disku." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Informacije se upotrebljavaju samo za dijagnosticiranje problema koji prijavljujete, dostupne su samo osobi koja istražuje vaÅ¡e izvješće i ne zadržavaju se dulje od 30 dana." + }, + "FOOTER_CONNECTING": { + "message": "Povezivanje…" + }, + "FOOTER_WAITING": { + "message": "Äekanje na vezu..." + }, + "FOR_PLATFORM_MAC": { + "message": "Za Mac (OS X 10.6 i novije verzije)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Za Windows (XP i novije verzije)" + }, + "FULL_SCREEN": { + "message": "Cijeli zaslon" + }, + "GET_STARTED": { + "message": "PoÄetak koriÅ¡tenja" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Prihvati" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Odbijam" + }, + "HELP": { + "message": "Pomoć" + }, + "HOME_ACCESS_BUTTON": { + "message": "Pristup" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Gledajte dijeljeno raÄunalo i upravljajte njime." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Ovom raÄunalu možete sigurno pristupiti pomoću Udaljene radne povrÅ¡ine Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Promijeni PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "To se raÄunalo trenutaÄno dijeli pod drugim raÄunom." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Prikaz/ureÄ‘ivanje" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "To je raÄunalo konfigurirano tako da dozvoljava povezivanje jednog ili viÅ¡e klijenata bez unosa PIN-a." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Omogući daljinske veze" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Morate omogućiti daljinske veze ako želite pristupati raÄunalu pomoću Udaljene radne povrÅ¡ine Chrome." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Onemogući daljinske veze" + }, + "HOME_SHARE_BUTTON": { + "message": "Podijeli" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Dijelite ovo raÄunalo kako bi ga drugi korisnik mogao vidjeti i upravljati njime." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ta znaÄajka joÅ¡ nije dostupna za vaÅ¡e raÄunalo)" + }, + "HOST_CATEGORY": { + "message": "Host:" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Pristup je odbijen za klijenta: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Povezani klijent: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Prekinuta veza s klijentom: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP kanal za klijenta: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Da biste omogućili povezivanje s razliÄitim udaljenim raÄunalima, na njima instalirajte Udaljenu radnu povrÅ¡inu Chrome pa kliknite gumb \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Nije registrirano nijedno raÄunalo. Da biste omogućili daljinske veze s raÄunalom, instalirajte Udaljenu radnu povrÅ¡inu Chrome pa kliknite \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Prethodno ste se prijavili kao $1$ ($2$). Da biste pristupali svojim raÄunalima putem tog raÄuna, $3$prijavite se na Google Chrome$4$ tim raÄunom i ponovo instalirajte Udaljenu radnu povrÅ¡inu Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Softver se obiÄno ažurira automatski, ali u nekim rijetkim sluÄajevima ažuriranja možda neće uspjeti. Ažuriranje softvera ne bi smjelo trajati dulje od nekoliko minuta te se može izvrÅ¡iti dok ste daljinski povezani s raÄunalom." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Udaljena radna povrÅ¡ina Chrome na hostu $1$ zastarjela je i mora se ažurirati.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Pomognite nam poboljÅ¡ati Udaljenu radnu povrÅ¡inu Chrome, dopustite nam prikupljanje statistike upotrebe i izvješća o padu programa." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Da biste zaÅ¡titili pristup ovom raÄunalu, odaberite PIN s $1$najmanje Å¡est brojeva$2$. Taj će PIN biti potreban pri povezivanju s druge lokacije.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Nisam uspio pokrenuti uslugu daljinskog pristupa." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome preuzima instalacijski program Udaljene radne povrÅ¡ine Chrome. Nakon zavrÅ¡etka preuzimanja pokrenite alat za instalaciju prije nego Å¡to nastavite." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Ponovo pokrenite instalacijski program prije nastavka." + }, + "HOST_SETUP_STARTED": { + "message": "Na ovom su raÄunalu omogućene daljinske veze." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Provjerite postavke upravljanja potroÅ¡njom energije svojeg raÄunala i provjerite da nije konfigurirano tako da prelazi u stanje mirovanja kad je neaktivno." + }, + "HOST_SETUP_STARTING": { + "message": "Omogućavanje daljinskih veza za ovo raÄunalo…" + }, + "HOST_SETUP_STOPPED": { + "message": "Na ovom su raÄunalu onemogućene daljinske veze." + }, + "HOST_SETUP_STOPPING": { + "message": "Onemogućavanje daljinskih veza za ovo raÄunalo…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Onemogućavanje daljinskog pristupa ovom raÄunalu nije uspjelo. PokuÅ¡ajte ponovo kasnije." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Preuzimanjem programa za instalaciju hosta Udaljene radne povrÅ¡ine Chrome prihvaćate Googleove $1$Uvjete pružanja usluge$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Ažuriran je PIN." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN nije uspjeÅ¡no ažuriran. PokuÅ¡ajte ponovo kasnije." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "U tijeku je ažuriranje PIN-a za ovo raÄunalo…" + }, + "HOST_STARTED": { + "message": "Host je pokrenut za korisnika: %1." + }, + "HOST_STOPPED": { + "message": "Host je zaustavljen." + }, + "IDLE_CONTINUE": { + "message": "Nastavi" + }, + "IDLE_DISCONNECT": { + "message": "Prekini vezu odmah" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "VaÅ¡a sesija u aplikaciji $1$ nije aktivna već neko vrijeme, pa će se uskoro prekinuti veza.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Na ovo raÄunalo" + }, + "INSTALLER_DOWNLOAD": { + "message": "Preuzimanje programa za instalaciju hosta Udaljene radne povrÅ¡ine Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Da biste zapoÄeli dijeliti radnu povrÅ¡inu, poÅ¡aljite pristupni kôd u nastavku osobi koja će vam pomagati." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Nakon Å¡to se unese kôd, poÄet će sesija dijeljenja." + }, + "INVALID_PIN": { + "message": "Unesite PIN koji se sastoji od Å¡est ili viÅ¡e znamenki." + }, + "IT2ME_FIRST_RUN": { + "message": "Dijeljenje zaslona izmeÄ‘u korisnika savrÅ¡eno je za daljinsku tehniÄku podrÅ¡ku." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Rasporedi tipkovnice" + }, + "LABEL_CONNECTED": { + "message": "Povezan:" + }, + "LAST_ONLINE": { + "message": "$1$ (posljednji put na mreži $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Saznajte kako." + }, + "LEARN_MORE": { + "message": "Saznajte viÅ¡e." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Postavke hosta Udaljene radne povrÅ¡ine Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host Udaljene radne\npovrÅ¡ine Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Program za deinstaliranje hosta Udaljene radne povrÅ¡ine Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Upotrijebite desni Ctrl za tipku Win (⌘ na Macu)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maksimiziranje prozora" + }, + "ME2ME_FIRST_RUN": { + "message": "Pristupite svojem raÄunalu s bilo kojeg mjesta." + }, + "MESSAGE_GENERATING": { + "message": "Generiranje pristupnog koda..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "ZavrÅ¡ila je vaÅ¡a sesija u aplikaciji Udaljena radna povrÅ¡ina Chrome." + }, + "MESSAGE_SHARED": { + "message": "VaÅ¡a se radna povrÅ¡ina trenutaÄno dijeli s korisnikom $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimiziranje prozora" + }, + "MODE_AUTHORIZE": { + "message": "Autoriziraj" + }, + "MODE_IT2ME": { + "message": "Daljinska pomoć" + }, + "MODE_ME2ME": { + "message": "Moja raÄunala" + }, + "NEW_WINDOW": { + "message": "Novi prozor…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Svi su upareni klijenti izbrisani." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Ova platforma ne podržava integraciju radne povrÅ¡ine. Aplikacija se može upotrebljavati, ali uz loÅ¡iji korisniÄki doživljaj." + }, + "OFFLINE": { + "message": "$1$ (van mreže)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Inicijalizacija hosta nije uspjela." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Nevažeća konfiguracija hosta." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Nevažeća domena vlasnika hosta." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Nevažeći ID hosta." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host je konfiguriran s nevažećim vjerodajnicama za OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Host koji je pokrenut na zaslonu za prijavu na konzolu iskljuÄio se radi podrÅ¡ke za naÄin zavjese prelaskom na host koji je pokrenut u sesiji korisnika." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host se ponovo pokreće radi primjene promijenjenih pravila." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Host nije uspio proÄitati pravila." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host je iskljuÄen." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Nepoznata pogreÅ¡ka hosta: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Nevažeći vlasnik hosta." + }, + "OK": { + "message": "U redu" + }, + "OPTIONS_MENU": { + "message": "Opcije" + }, + "OUTGOING_CONNECTIONS": { + "message": "S ovog raÄunala" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Sljedeći klijenti upareni su s ovim raÄunalom i mogu se povezati bez unosa PIN-a. Možete opozvati tu dozvolu u bilo kojem trenutku za pojedinaÄne ili sve klijente." + }, + "PAIRED_CLIENT_DATE": { + "message": "Datum uparivanja" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klijent" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Unesite isti PIN u oba polja." + }, + "PIN_MESSAGE": { + "message": "Unesite svoj PIN za host $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Unesite PIN za udaljeno raÄunalo." + }, + "PRODUCT_DESCRIPTION": { + "message": "Putem interneta pristupajte drugim raÄunalima ili drugim korisnicima omogućite siguran pristup svojem raÄunalu." + }, + "PRODUCT_NAME": { + "message": "Udaljena radna povrÅ¡ine Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Ponovno povezivanje" + }, + "REMEMBER_PIN": { + "message": "Nemoj ponovo tražiti PIN prilikom povezivanja s tim hostom s ovog ureÄ‘aja." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "SrediÅ¡nja biblioteka" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Postupak integracije radne povrÅ¡ine" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikacija za izdavanje naredbi hostu Udaljene radne povrÅ¡ine Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Postupak hosta" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Lokalni host za slanje poruka za upravljanje udaljenim hostom" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Lokalni host za slanje poruka za udaljenu pomoć" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Postupak daljinskog postavljanja sigurnosnog kljuÄa" + }, + "RESIZE_TO_CLIENT": { + "message": "Prilagodi veliÄinu radne povrÅ¡ine" + }, + "RESTART_BUTTON": { + "message": "Ponovo pokreni sad" + }, + "RESTORE_WINDOW": { + "message": "Vraćanje prozora" + }, + "RETRY": { + "message": "PokuÅ¡aj ponovo" + }, + "SCREEN_OPTIONS": { + "message": "Opcije zaslona" + }, + "SEND_CTRL_ALT_DEL": { + "message": "PoÅ¡alji Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Prijavi problem…" + }, + "SEND_KEYS": { + "message": "Tipke za slanje" + }, + "SEND_PRINT_SCREEN": { + "message": "PoÅ¡alji PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ta usluga omogućuje dolazne veze s klijenata Udaljene radne povrÅ¡ine Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Tom postavkom upravljaju pravila vaÅ¡e domene." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Podijeli" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Odustani" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Želite li dijeliti ovo raÄunalo tako da ga neki drugi korisnik može vidjeti i upravljati njime?" + }, + "SHOW_STATS": { + "message": "Prikaži statistiku" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Prikaži statistiku (veza: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Smanji da stane u prozor" + }, + "SIGN_IN_BUTTON": { + "message": "Prijava" + }, + "SIGN_OUT_BUTTON": { + "message": "Odjava" + }, + "STOP_SHARING_BUTTON": { + "message": "Zaustavi dijeljenje" + }, + "SURVEY_INVITATION": { + "message": "Želite li pomoći poboljÅ¡ati Udaljenu radnu povrÅ¡inu Chrome? $1$Ispunite upitnik.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Vrijeme" + }, + "TOGGLE_STATS": { + "message": "Prikaži statistiku" + }, + "TOOLTIP_CONNECT": { + "message": "Povezivanje s hostom $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Onemogući daljinske veze na ovom raÄunalu" + }, + "TOOLTIP_REFRESH": { + "message": "Osvježi popis hostova" + }, + "TOOLTIP_RENAME": { + "message": "Uredi naziv raÄunala" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (zastarjelo)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "RaÄun" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Potvrdite svoj raÄun i PIN u nastavku da biste usluzi Udaljena radna povrÅ¡ina Chrome dozvolili pristup." + }, + "WARNING_NAT_DISABLED": { + "message": "NAPOMENA: postavke pravila dopuÅ¡taju jedino veze izmeÄ‘u raÄunala u vaÅ¡oj mreži." + }, + "WARNING_NOT_WINDOWED": { + "message": "NAPOMENA: kako biste osigurali dostupnost svih tipkovniÄkih preÄaca, možete konfigurirati udaljenu radnu povrÅ¡inu Chrome da se otvara kao prozor." + }, + "WHY_IS_THIS_SAFE": { + "message": "ZaÅ¡to je ovo sigurno?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Obrada…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hu/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hu/messages.json new file mode 100644 index 000000000000..13f917204bd1 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/hu/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Elfogadás és telepítés" + }, + "ACCESS_CODE": { + "message": "Elérési kód" + }, + "ACCESS_CODE_TIMER": { + "message": "Ez az elérési kód lejár a következÅ‘ idÅ‘tartamon belül: $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Visszajelzés" + }, + "ALL_CONNECTIONS": { + "message": "Minden kapcsolat" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ãrja be újra a PIN kódot" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN-kód" + }, + "CANCEL": { + "message": "Mégse" + }, + "CLEAR_HISTORY": { + "message": "ElÅ‘zmények törlése" + }, + "CLOSE": { + "message": "Bezárás" + }, + "CLOSE_PROMPT": { + "message": "Ha elhagyja ezt az oldalt, akkor befejezÅ‘dik a Chrome távoliasztal-szolgáltatás munkamenete." + }, + "CLOSE_WINDOW": { + "message": "Ablak bezárása" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Biztosan le szeretné tiltani a távoli kapcsolatokat a(z) $1$ gazdagéppel? Ha meggondolja magát, akkor azon a számítógépen kell majd újból engedélyeznie a kapcsolatokat.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Sikertelen kapcsolódás" + }, + "CONNECTION_FROM_HEADER": { + "message": "Innen:" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "KapcsolatelÅ‘zmények" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Közepes" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Jó" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Gyenge" + }, + "CONNECTION_TO_HEADER": { + "message": "Ide:" + }, + "CONNECT_ANYWAY": { + "message": "Csatlakozás mindenképp" + }, + "CONNECT_BUTTON": { + "message": "Csatlakozás" + }, + "CONTINUE_BUTTON": { + "message": "Folytatás" + }, + "CONTINUE_PROMPT": { + "message": "Ezt a gépet jelenleg megosztja egy másik felhasználóval. Szeretné folytatni a megosztást?" + }, + "CONTROLLER_NAME": { + "message": "Chrome távoliasztal-szolgáltatás – gazdagépvezérlÅ‘" + }, + "COPYRIGHT": { + "message": "Copyright 2013 – Google Inc. Minden jog fenntartva." + }, + "CREDITS": { + "message": "KészítÅ‘k" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Az összes törlése" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Törlés" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "A folytatáshoz elÅ‘bb kiterjesztett hozzáférési jogosultságokat kell adnia a számítógépének. Ezt csak egyszer kell elvégezni." + }, + "DESCRIPTION_CONNECT": { + "message": "Kérje meg a felhasználót, akinek számítógépéhez megpróbál hozzáférni, hogy kattintson a „$1$†lehetÅ‘ségre, és adja meg Önnek a hozzáférési kódot.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "A Chrome távoliasztal-szolgáltatás lehetÅ‘vé teszi a számítógép biztonságos megosztását az interneten keresztül. Mindkét felhasználónál futnia kell a Chrome távoliasztal-szolgáltatás alkalmazásnak, amely itt található: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "A távoli gazdagép hitelesítést kér egy harmadik féltÅ‘l származó webhelyhez. A folytatáshoz további engedélyeket kell adnia a Chrome távoliasztal-szolgáltatásnak a cím eléréséhez:" + }, + "DISABLE_HOST": { + "message": "Kikapcsolás" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Kapcsolat bontása" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome távoliasztal-szolgáltatás" + }, + "DURATION_HEADER": { + "message": "IdÅ‘tartam" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Nincs engedélye az alkalmazás futtatására." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "A hitelesítés nem sikerült. Kérjük, jelentkezzen be újra a Chrome-ba." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Hiányzik néhány szükséges összetevÅ‘. Kérjük, ellenÅ‘rizze, hogy a szoftver legfrissebb verzióját telepítette-e, majd próbálja újra." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Hálózati hiba történt. Újraindítjuk az alkalmazást, amint eszköze ismét online lesz." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "A távoli számítógépnek nem sikerült inicializálnia a munkamenetet. Ha a probléma továbbra is fennáll, próbálja meg újra beállítani a gazdagépet." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "A távoli számítógép nem válaszol a csatlakozási kérésekre. Kérjük, ellenÅ‘rizze, hogy a távoli gép onlinekapcsolatban van-e, majd próbálja újra." + }, + "ERROR_HOST_OVERLOAD": { + "message": "A távoli számítógéphez való csatlakozás ideiglenesen le van tiltva, mert valaki érvénytelen PIN kóddal próbált csatlakozni hozzá. Kérjük, próbálja újra késÅ‘bb." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Nem sikerült regisztrálni a számítógépet." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "A rendszer nem kompatibilis protokollverziót észlelt. GyÅ‘zÅ‘djön meg róla, hogy a szoftver legfrissebb verziója van telepítve mindkét számítógépen, majd próbálja újra." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "A hozzáférési kód érvénytelen. Kérjük, próbálja újra." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Az irányelv-beállítások értelmében a Chrome távoliasztal-szolgáltatásban nem oszthatja meg számítógépét gazdaszámítógépként. Segítségért lépjen kapcsolatba a rendszergazdával." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "A távoli munkamenet lejárt." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Hiányzik néhány szükséges összetevÅ‘. Kérjük, ellenÅ‘rizze, hogy a Chrome legfrissebb verzióját használja-e, majd próbálja újra." + }, + "ERROR_NACL_DISABLED": { + "message": "Hiányzik néhány szükséges összetevÅ‘. Nyissa meg a chrome://plugins oldalt, és gyÅ‘zÅ‘djön meg róla, hogy engedélyezve van a Natív kliens beépülÅ‘ modul." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Egy szükséges összetevÅ‘ működése leállt. Jelentse a problémát a fejlesztÅ‘knek." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nem sikerült kapcsolódni a hálózathoz. Kérjük, ellenÅ‘rizze, hogy eszköze online állapotban van-e." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Nincs bejelentkezve a Chrome-ba. Jelentkezzen be, és próbálkozzon újra." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Nincs engedélye a művelet elvégzésére." + }, + "ERROR_NOT_FOUND": { + "message": "A kért objektum nem létezik." + }, + "ERROR_P2P_FAILURE": { + "message": "A gazdagép nem érhetÅ‘ el. Ez valószínűleg az Ön által használt hálózat konfigurációja miatt van." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "A szolgáltatás átmenetileg nem érhetÅ‘ el. Kérjük, próbálkozzon újra késÅ‘bb." + }, + "ERROR_UNEXPECTED": { + "message": "Váratlan hiba történt. Kérjük, jelentse a problémát a fejlesztÅ‘knek." + }, + "EXIT_FULL_SCREEN": { + "message": "Kilépés a teljes képernyÅ‘s módból" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Nem sikerült az alkalmazás visszaállítása. Küldhet egy jelentést a programhibáról." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Alkalmazás visszaállítása. A nem mentett munkája el fog veszni." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Nem tudom megnyitni az alkalmazást." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Az alkalmazás túl lassú." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Nem tudom megnyitni a Google Drive-fájlokat." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Nem látom a mentett fájlokat online, a Google Drive-on." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Problémám adódott a billentyűzetemmel vagy az egeremmel." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "A probléma megoldásának elÅ‘segítéséhez számoljon be arról, hogy mi nem működött megfelelÅ‘en:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Valami más." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Válasszon…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Ha szeretné, hogy további információkért felvegyük Önnel a kapcsolatot, e-mail címét tartalmazni fogják az Ön által küldött visszajelzések." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Probléma bejelentése" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Az alkalmazásnaplók elküldése a probléma megoldásának elÅ‘segítése érdekében (a naplók tartalmazhatnak privát információkat)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Az alkalmazásnaplók tartalmazhatnak privát adatokat, többek között az Ön személyazonosságát (e-mail címét), valamint a Google Drive-on lévÅ‘ fájlok és mappák neveit és tulajdonságait." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Ezt az információt csak az Ön által jelentett probléma diagnosztizálására használjuk. Az adatok csak a jelentés vizsgálója számára érhetÅ‘k el, és a rendszerünk nem Å‘rzi meg Å‘ket 30 napnál tovább." + }, + "FOOTER_CONNECTING": { + "message": "Csatlakozás…" + }, + "FOOTER_WAITING": { + "message": "várakozás a kapcsolatra..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac típusú számítógépekhez (OS X 10.6 és újabb)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows rendszerhez (XP és újabb)" + }, + "FULL_SCREEN": { + "message": "Teljes képernyÅ‘" + }, + "GET_STARTED": { + "message": "KezdÅ‘ lépések" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Elfogadás" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Elutasítás" + }, + "HELP": { + "message": "Súgó" + }, + "HOME_ACCESS_BUTTON": { + "message": "Hozzáférés" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Megosztott számítógép megtekintése és irányítása." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Biztonságosan hozzáférhet a számítógéphez a Chrome távoliasztal-szolgáltatás segítségével." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN-kód megváltoztatása" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "A számítógép jelenleg egy másik fiók neve alatt van megosztva." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Megtekintés/szerkesztés" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Ez a számítógép úgy van konfigurálva, hogy egy vagy több kliens PIN megadása nélkül csatlakozhasson." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Távoli kapcsolatok engedélyezése" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Engedélyeznie kell a távoli kapcsolatokat, ha a Chrome távoliasztal-szolgáltatást szeretné használni ennek a számítógépnek az eléréséhez." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Távoli kapcsolatok letiltása" + }, + "HOME_SHARE_BUTTON": { + "message": "Megosztás" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "E számítógép megosztása úgy, hogy azt egy másik felhasználó láthassa és irányíthassa." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Ez a funkció még nem érhetÅ‘ el az Ön számítógépe számára)" + }, + "HOST_CATEGORY": { + "message": "Gazdagép" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Hozzáférés megtagadva a következÅ‘ klienstÅ‘l: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Kliens csatlakoztatva: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Kliens leválasztva: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kliens csatorna-IP-je: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Ahhoz, hogy engedélyezhesse a távoli kapcsolatokat egy másik számítógépen, telepítse a gépre a Chrome távoliasztal-szolgáltatást, majd kattintson a következÅ‘ gombra: „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Önnek nincs regisztrált számítógépe. Ahhoz, hogy engedélyezhesse a távoli kapcsolatokat egy számítógépen, telepítse a gépre a Chrome távoliasztal-szolgáltatást, majd kattintson a következÅ‘ gombra: „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Korábban $1$ ($2$) felhasználóként jelentkezett be. A fiók számítógépeinek eléréséhez $3$jelentkezzen be a Google Chrome-ba$4$ az adott fiókkal, majd telepítse újra a Chrome távoliasztal-szolgáltatást.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "A szoftverfrissítések általában automatikusan történnek, ám egyes ritka esetekben sikertelenek lehetnek. A szoftverfrissítés nem szokott pár percnél több idÅ‘t igénybe venni, és a számítógéphez távolról csatlakozva is elvégezhetÅ‘." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "A(z) $1$ Chrome távoliasztal-szolgáltatása elavult, frissíteni kell.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Segítsen fejleszteni a Chrome távoliasztal-szolgáltatást azáltal, hogy rendelkezésünkre bocsátja a használati statisztikákat és hibajelentéseket." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "A számítógép hozzáférésének védelméhez válasszon egy $1$legalább hat számjegybÅ‘l álló$2$ PIN kódot. Ezt a PIN kódot kéri a rendszer, ha más helyrÅ‘l kísérlik meg a kapcsolódást.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Nem sikerült elindítani a távoli hozzáférési szolgáltatást." + }, + "HOST_SETUP_INSTALL": { + "message": "A Chrome letölti a Chrome távoliasztal-szolgáltatás gazdagépekhez való telepítÅ‘jét. Miután a letöltés befejezÅ‘dött, futtassa a telepítÅ‘t a folytatás elÅ‘tt." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Kérjük, futtassa a telepítÅ‘t a folytatás elÅ‘tt." + }, + "HOST_SETUP_STARTED": { + "message": "A távoli kapcsolatok engedélyezve vannak ezen a számítógépen." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Kérjük, ellenÅ‘rizze a számítógép energiagazdálkodási beállításait, és gyÅ‘zÅ‘djön meg róla, hogy az tétlenség esetén nincs alvó üzemmódra állítva." + }, + "HOST_SETUP_STARTING": { + "message": "Távoli kapcsolatok engedélyezése ezen a számítógépen..." + }, + "HOST_SETUP_STOPPED": { + "message": "A távoli kapcsolatok le vannak tiltva ezen a számítógépen." + }, + "HOST_SETUP_STOPPING": { + "message": "Távoli kapcsolatok letiltása ezen a számítógépen..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Nem sikerült letiltani a távoli hozzáférést a számítógéphez. Kérjük, próbálja újra késÅ‘bb." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "A Chrome távoliasztal-szolgáltatási gazdagép-telepítÅ‘ letöltésével elfogadja a Google $1$Ãltalános SzerzÅ‘dési Feltételeit$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "A PIN-kód frissült." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Nem sikerült módosítani a PIN kódot. Kérjük, próbálja újra késÅ‘bb." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "A számítógéphez tartozó PIN-kód frissítése folyamatban..." + }, + "HOST_STARTED": { + "message": "Gazdagép elindítva a következÅ‘ felhasználó számára: %1." + }, + "HOST_STOPPED": { + "message": "Gazdagép leállítva." + }, + "IDLE_CONTINUE": { + "message": "Folytatás" + }, + "IDLE_DISCONNECT": { + "message": "Leválasztás most" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "A(z) $1$ munkamenete egy ideje inaktív, ezért a rendszer rövidesen leválasztja.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Ehhez a számítógéphez" + }, + "INSTALLER_DOWNLOAD": { + "message": "A Chrome távoliasztal-szolgáltatási gazdagép-telepítÅ‘ letöltése" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Az asztal megosztásának megkezdéséhez adja meg az alábbi elérési kódot annak a személynek, aki segít Önnek." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Miután beírják a kódot, megkezdÅ‘dik a megosztási munkamenet." + }, + "INVALID_PIN": { + "message": "Kérjük, legalább hat számjegybÅ‘l álló PIN kódot adjon meg." + }, + "IT2ME_FIRST_RUN": { + "message": "Felhasználók közötti képernyÅ‘megosztás, amely tökéletes a távoli műszaki támogatáshoz." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Billentyűzetkiosztások" + }, + "LABEL_CONNECTED": { + "message": "Csatlakoztatva:" + }, + "LAST_ONLINE": { + "message": "$1$ (utolsó online tevékenység: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Tudja meg, hogyan." + }, + "LEARN_MORE": { + "message": "További információ." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome távoliasztal-szolgáltatási gazdagép beállításai" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome távoliasztal-szolgáltatási\ngazdagép" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome távoliasztal-szolgáltatási gazdagép eltávolítóprogramja" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "A jobb oldali Ctrl használata Windows billentyűként (Mac esetében ⌘ billentyűként)" + }, + "MAXIMIZE_WINDOW": { + "message": "Ablak teljes méretre állítása" + }, + "ME2ME_FIRST_RUN": { + "message": "Bárhonnan hozzáférhet saját számítógépéhez." + }, + "MESSAGE_GENERATING": { + "message": "Hozzáférési kód létrehozása..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "A Chrome távoliasztal-szolgáltatás munkamenet véget ért." + }, + "MESSAGE_SHARED": { + "message": "Az asztalt jelenleg ezzel a felhasználóval osztja meg: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Ablak kis méretre állítása" + }, + "MODE_AUTHORIZE": { + "message": "Engedélyezés" + }, + "MODE_IT2ME": { + "message": "Távsegítség" + }, + "MODE_ME2ME": { + "message": "Saját számítógépek" + }, + "NEW_WINDOW": { + "message": "Új ablak…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Minden párosított kliens törölve." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Ez az operációs rendszer nem támogatja az asztali integrációt. Az alkalmazást használhatja, de a felhasználói élmény nem lesz teljes." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "A gazdagép inicializálása sikertelen." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "A gazdagép beállítása érvénytelen." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "A gazdagép tulajdonosi domainje érvénytelen." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Érvénytelen gazdagép-azonosító" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "A gazdagép beállítása érvénytelen OAuth hitelesítési adatokkal történt." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "A konzol logikai képernyÅ‘jén futó gazdagép leállt, hogy támogassa a rejtett üzemmódot úgy, hogy felhasználóspecifikus munkamenetben futó gazdagépre váltott." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "A gazdagép újraindul egy irányelvváltozás érvénybe léptetése miatt." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "A gazdagép nem tudta elolvasni az irányelvet." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "A gazdagép leállt." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Ismeretlen gazdagéphiba: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Érvénytelen gazdagép-tulajdonos." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Beállítások" + }, + "OUTGOING_CONNECTIONS": { + "message": "ErrÅ‘l a számítógéprÅ‘l" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "A következÅ‘ kliensek párosítása történt meg ezzel a számítógéppel, amelyek csatlakoztathatók PIN megadása nélkül. Bármikor visszavonhatja az engedélyt egyenként vagy az összes kliens esetén is." + }, + "PAIRED_CLIENT_DATE": { + "message": "Párosítási dátum" + }, + "PAIRED_CLIENT_NAME": { + "message": "Kliens" + }, + "PIN": { + "message": "PIN-kód" + }, + "PINS_NOT_EQUAL": { + "message": "Kérjük, ugyanazt a PIN kódot adja meg mindkét mezÅ‘ben." + }, + "PIN_MESSAGE": { + "message": "Kérjük, adja meg a(z) $1$ PIN kódját.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Kérjük, adja meg a PIN kódot a távoli számítógéphez." + }, + "PRODUCT_DESCRIPTION": { + "message": "Más számítógépek elérése vagy annak engedélyezése, hogy más biztonságosan elérje a számítógépet az interneten keresztül." + }, + "PRODUCT_NAME": { + "message": "Chrome távoliasztal-szolgáltatás" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome alkalmazás internetes megjelenítése" + }, + "RECONNECT": { + "message": "Újrakapcsolódás" + }, + "REMEMBER_PIN": { + "message": "Ne kérje újra a PIN kódot, amikor errÅ‘l az eszközrÅ‘l csatlakozom a szerverhez." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Alapkönyvtár" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Asztalintegrációs folyamat" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Alkalmazás parancsok kiadására a Chrome távoliasztal-szolgáltatás gazdagépének." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Gazdafolyamat" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Natív üzenetváltási szerver távoli szerverkezeléshez" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Natív üzenetváltási szerver távoli segítségnyújtáshoz" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Biztonsági hardverkulcs távoli elérési folyamata" + }, + "RESIZE_TO_CLIENT": { + "message": "Az asztal átméretezése, hogy illeszkedjen" + }, + "RESTART_BUTTON": { + "message": "Újraindítás most" + }, + "RESTORE_WINDOW": { + "message": "Ablak visszaállítása" + }, + "RETRY": { + "message": "Újra" + }, + "SCREEN_OPTIONS": { + "message": "KépernyÅ‘-beállítások" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del küldése" + }, + "SEND_FEEDBACK": { + "message": "Hiba bejelentése…" + }, + "SEND_KEYS": { + "message": "Billentyűleütések küldése" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn küldése" + }, + "SERVICE_DESCRIPTION": { + "message": "Ez a szolgáltatás engedélyezi a bejövÅ‘ kapcsolatokat a Chrome távoliasztal-szolgáltatás klienseitÅ‘l." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Ezt a beállítást az Ön domainirányelve kezeli." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Megosztás" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Mégse" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Meg szeretné osztani a számítógép megtekintését és vezérlését egy másik felhasználóval?" + }, + "SHOW_STATS": { + "message": "Statisztika megjelenítése" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Statisztika megjelenítése (kapcsolat: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Méretre igazítás" + }, + "SIGN_IN_BUTTON": { + "message": "Bejelentkezés" + }, + "SIGN_OUT_BUTTON": { + "message": "Kijelentkezés" + }, + "STOP_SHARING_BUTTON": { + "message": "Megosztás leállítása" + }, + "SURVEY_INVITATION": { + "message": "Szeretne segíteni a Chrome távoliasztal-szolgáltatás javításában? $1$Töltse ki a kérdőívet.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "IdÅ‘" + }, + "TOGGLE_STATS": { + "message": "Statisztika megjelenítése" + }, + "TOOLTIP_CONNECT": { + "message": "Csatlakozás a következÅ‘höz: $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Távoli kapcsolódások letiltása ezen a számítógépen" + }, + "TOOLTIP_REFRESH": { + "message": "Gazdagépek listájának frissítése" + }, + "TOOLTIP_RENAME": { + "message": "Számítógép nevének módosítása" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (elavult)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Fiók" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Kérjük, erÅ‘sítse meg a fiókot és a PIN kódot alább a Chrome távoliasztal-szolgáltatás hozzáférésének engedélyezéséhez." + }, + "WARNING_NAT_DISABLED": { + "message": "MEGJEGYZÉS: az irányelv-beállítások a csatlakozást csak a saját hálózaton belül található számítógépek között teszik lehetÅ‘vé." + }, + "WARNING_NOT_WINDOWED": { + "message": "MEGJEGYZÉS: ha biztosítani akarja valamennyi billentyűkód elérhetÅ‘ségét, konfigurálja a Chrome távoliasztal-szolgáltatást a „Megnyitás ablakban†lehetÅ‘séggel." + }, + "WHY_IS_THIS_SAFE": { + "message": "Miért biztonságos ez?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Ablakok" + }, + "WORKING": { + "message": "Feldolgozás…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/id/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/id/messages.json new file mode 100644 index 000000000000..8ade51f060e0 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/id/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Setuju dan Pasang" + }, + "ACCESS_CODE": { + "message": "Kode akses" + }, + "ACCESS_CODE_TIMER": { + "message": "Kode akses ini akan kedaluwarsa dalam waktu $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Masukan" + }, + "ALL_CONNECTIONS": { + "message": "Semua sambungan" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ketik ulang PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Batal" + }, + "CLEAR_HISTORY": { + "message": "Hapus riwayat" + }, + "CLOSE": { + "message": "Tutup" + }, + "CLOSE_PROMPT": { + "message": "Dengan meninggalkan laman ini, Anda akan mengakhiri sesi Chrome Desktop Jarak Jauh." + }, + "CLOSE_WINDOW": { + "message": "Tutup jendela" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Yakin ingin menonaktifkan sambungan jarak jauh dengan $1$? Jika Anda berubah pikiran, Anda harus mengunjungi komputer tersebut untuk mengaktifkan kembali sambungan.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Koneksi gagal" + }, + "CONNECTION_FROM_HEADER": { + "message": "Dari" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Riwayat Sambungan" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Sedang" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Baik" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Buruk" + }, + "CONNECTION_TO_HEADER": { + "message": "Ke" + }, + "CONNECT_ANYWAY": { + "message": "Tetap sambungkan" + }, + "CONNECT_BUTTON": { + "message": "Sambungkan" + }, + "CONTINUE_BUTTON": { + "message": "Lanjut" + }, + "CONTINUE_PROMPT": { + "message": "Saat ini Anda sedang berbagi mesin ini dengan pengguna lain. Apakah Anda ingin terus berbagi?" + }, + "CONTROLLER_NAME": { + "message": "Pengontrol Host Chrome Desktop Jarak Jauh" + }, + "COPYRIGHT": { + "message": "Hak cipta 2013 Google Inc. Semua Hak Dilindungi Undang-Undang." + }, + "CREDITS": { + "message": "Kredit" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Hapus semua" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Hapus" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Untuk melanjutkan, Anda harus memberikan izin akses yang diperpanjang ke komputer. Anda hanya perlu melakukan ini satu kali." + }, + "DESCRIPTION_CONNECT": { + "message": "Minta pengguna yang menggunakan komputer yang ingin Anda akses untuk mengeklik “$1$†dan memberikan kode akses kepada Anda.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Desktop Jarak Jauh memungkinkan Anda berbagi komputer melalui web dengan aman. Kedua pengguna harus menjalankan aplikasi Chrome Desktop Jarak Jauh yang dapat ditemukan di $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Hosting jarak jauh mewajibkan Anda mengautentikasi ke situs web pihak ketiga. Untuk melanjutkan, Anda harus memberikan izin tambahan ke Chrome Desktop Jarak Jauh untuk mengakses alamat ini:" + }, + "DISABLE_HOST": { + "message": "Nonaktifkan" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Putuskan" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Layanan Chrome Desktop Jarak Jauh" + }, + "DURATION_HEADER": { + "message": "Durasi" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Anda tidak memiliki izin untuk menjalankan aplikasi ini." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autentikasi gagal. Masuk ke Chrome lagi." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Beberapa komponen yang diperlukan tidak ada. Pastikan Anda memasang perangkat lunak versi terbaru dan coba lagi." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Terjadi kesalahan jaringan. Kami akan memulai ulang aplikasi saat perangkat Anda kembali online." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Komputer jarak jauh gagal melakukan inisialisasi sesi. Jika masalah tetap ada, coba konfigurasi ulang host." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Komputer jarak jauh tidak menanggapi permintaan sambungan. Verifikasikan bahwa komputer jarak jauh sedang online dan coba lagi." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Sambungan ke komputer jarak jauh diblokir untuk sementara karena seseorang mencoba untuk menyambungkannya dengan PIN yang tidak valid. Coba lagi nanti." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Gagal mendaftarkan komputer ini." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Versi protokol yang tidak kompatibel terdeteksi. Pastikan Anda memasang perangkat lunak versi terbaru di kedua komputer dan coba lagi." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Kode akses tidak valid. Harap coba lagi." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Setelan kebijakan tidak mengizinkan berbagi komputer ini sebagai inang Chrome Desktop Jarak Jauh. Hubungi administrator sistem Anda untuk mendapatkan bantuan." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Sesi jarak jauh telah berakhir." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Beberapa komponen yang diperlukan tidak ada. Pastikan Anda menjalankan Chrome versi terbaru dan coba lagi." + }, + "ERROR_NACL_DISABLED": { + "message": "Beberapa komponen yang diperlukan tidak ada. Buka chrome://plugins dan pastikan Native Client diaktifkan." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Komponen wajib berhenti bekerja. Laporkan masalah ini kepada pengembang." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Tidak dapat tersambung ke jaringan. Periksa bahwa perangkat Anda telah tersambung." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Anda tidak masuk ke Chrome. Masuk dan coba lagi." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Anda tidak memiliki izin untuk melakukan tindakan tersebut." + }, + "ERROR_NOT_FOUND": { + "message": "Objek yang diminta tidak ada." + }, + "ERROR_P2P_FAILURE": { + "message": "Tidak dapat menjangkau inang. Ini mungkin karena konfigurasi jaringan yang Anda gunakan." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Layanan kami tidak tersedia untuk sementara. Coba lagi nanti." + }, + "ERROR_UNEXPECTED": { + "message": "Terjadi kesalahan yang tidak terduga. Laporkan masalah ini kepada pengembang." + }, + "EXIT_FULL_SCREEN": { + "message": "Keluar dari tampilan layar penuh" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Tidak dapat menyetel ulang aplikasi. Anda masih dapat mengirim laporan bug." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Setel ulang aplikasi. Anda akan kehilangan pekerjaan yang belum disimpan." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Saya tidak dapat membuka aplikasi ini." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Aplikasi ini terlalu lambat." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Saya tidak dapat membuka file Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Saya tidak dapat melihat file saya yang tersimpan secara online di Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Saya mengalami masalah dengan keyboard atau mouse." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Guna membantu kami menyelesaikan masalah Anda, beri tahu kami apa masalahnya:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Lainnya." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Pilih…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Guna mengizinkan kami menghubungi Anda untuk informasi lebih lanjut, alamat email Anda akan disertakan dalam masukan apa pun yang Anda kirimkan." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Laporkan masalah" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Sertakan log aplikasi untuk membantu kami menyelesaikan masalah Anda (log dapat mencakup informasi pribadi)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Log aplikasi dapat mencakup informasi pribadi, termasuk identitas Anda (alamat email) serta nama dan properti file dan folder di Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Informasi ini hanya digunakan untuk mendiagnosis masalah yang Anda laporkan, hanya tersedia untuk orang yang menyelidiki laporan, dan dipertahankan selama tidak lebih dari 30 hari." + }, + "FOOTER_CONNECTING": { + "message": "Menyambungkan..." + }, + "FOOTER_WAITING": { + "message": "menunggu sambungan..." + }, + "FOR_PLATFORM_MAC": { + "message": "Untuk Mac (OS X 10.6 dan yang lebih tinggi)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Untuk Windows (XP dan yang lebih tinggi)" + }, + "FULL_SCREEN": { + "message": "Layar penuh" + }, + "GET_STARTED": { + "message": "Memulai" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Terima" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Tolak" + }, + "HELP": { + "message": "Bantuan" + }, + "HOME_ACCESS_BUTTON": { + "message": "Akses" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Melihat dan mengontrol komputer bersama." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Mungkin Anda dapat mengakses komputer ini dengan aman menggunakan Chrome Desktop Jarak Jauh." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Ubah PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Saat ini komputer ini dibagikan dengan akun lain." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Lihat/edit" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Komputer ini dikonfigurasi untuk mengizinkan satu atau beberapa klien terhubung tanpa memasukkan PIN" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Aktifkan sambungan jarak jauh" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Anda harus mengaktifkan sambungan jarak jauh jika ingin menggunakan Chrome Desktop Jarak Jauh untuk mengakses komputer ini." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Nonaktifkan sambungan jarak jauh" + }, + "HOME_SHARE_BUTTON": { + "message": "Bagikan" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Membagi komputer ini agar pengguna lain dapat melihat dan mengontrol." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Fitur ini belum tersedia untuk komputer Anda)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Akses ditolak untuk klien: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klien tersambung: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Klien terputus: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP saluran untuk klien: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Untuk mengaktifkan sambungan jarak jauh ke komputer yang berbeda, pasang Chrome Desktop Jarak Jauh di komputer tersebut, lalu klik “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Anda tidak memiliki komputer yang terdaftar. Untuk mengaktifkan sambungan jarak jauh ke komputer, pasang Chrome Desktop Jarak Jauh di komputer tersebut, lalu klik “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Sebelumnya, Anda telah masuk sebagai $1$ ($2$). Untuk mengakses komputer menggunakan akun tersebut, $3$masuk ke Google Chrome$4$ dengan akun tersebut dan pasang kembali Chrome Desktop Jarak Jauh.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Pembaruan perangkat lunak biasanya otomatis terjadi, namun dalam kasus yang sangat jarang, pembaruan dapat gagal. Memperbarui perangkat lunak seharusnya tidak memakan waktu lebih dari beberapa menit dan dapat dilakukan saat tersambung ke komputer Anda dari jarak jauh." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Desktop Jarak Jauh di $1$ telah kedaluwarsa dan perlu diperbarui.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Bantu kami meningkatkan Chrome Desktop Jarak Jauh dengan mengizinkan kami mengumpulkan statistik penggunaan dan laporan kerusakan." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Untuk melindungi akses ke komputer ini, gunakan PIN $1$setidaknya enam digit$2$. PIN ini akan diperlukan saat menyambung dari lokasi lainnya.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Gagal memulai layanan akses jarak jauh." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome sedang mengunduh pemasang Inang Chrome Desktop Jarak Jauh. Setelah unduhan selesai, jalankan pemasang sebelum melanjutkan." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Jalankan pemasang sebelum melanjutkan." + }, + "HOST_SETUP_STARTED": { + "message": "Sambungan jarak jauh untuk komputer ini telah diaktifkan." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Periksa setelan pengelolaan daya komputer Anda dan pastikan agar tidak dikonfigurasi untuk tidur ketika menganggur." + }, + "HOST_SETUP_STARTING": { + "message": "Mengaktifkan sambungan jarak jauh untuk komputer ini..." + }, + "HOST_SETUP_STOPPED": { + "message": "Sambungan jarak jauh untuk komputer ini telah dinonaktifkan." + }, + "HOST_SETUP_STOPPING": { + "message": "Menonaktifkan sambungan jarak jauh untuk komputer ini..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Gagal menonaktifkan akses jarak jauh ke komputer ini. Coba lagi nanti." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Dengan mengunduh Pemasang Host Chrome Desktop Jarak Jauh, Anda menyetujui $1$Persyaratan Layanan$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN Anda telah diperbarui." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Gagal memperbarui PIN. Coba lagi nanti." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN untuk komputer ini sedang diperbarui..." + }, + "HOST_STARTED": { + "message": "Host dimulai untuk pengguna: %1." + }, + "HOST_STOPPED": { + "message": "Host berhenti." + }, + "IDLE_CONTINUE": { + "message": "Lanjut" + }, + "IDLE_DISCONNECT": { + "message": "Putuskan hubungan sekarang" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Sesi $1$ Anda tidak aktif untuk sementara waktu dan akan diputuskan sementara.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Ke komputer ini" + }, + "INSTALLER_DOWNLOAD": { + "message": "Unduh Pemasang Host Chrome Desktop Jarak Jauh" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Untuk mulai berbagi desktop, berikan kode akses di bawah kepada orang yang akan membantu Anda." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Setelah mereka memasukkan kode, sesi berbagi Anda akan dimulai." + }, + "INVALID_PIN": { + "message": "Masukkan PIN, minimal enam digit atau lebih." + }, + "IT2ME_FIRST_RUN": { + "message": "Berbagi layar pengguna ke pengguna, cocok untuk dukungan teknis jarak jauh." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Layout keyboard" + }, + "LABEL_CONNECTED": { + "message": "Tersambung:" + }, + "LAST_ONLINE": { + "message": "$1$ (terakhir kali online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Pelajari caranya." + }, + "LEARN_MORE": { + "message": "Pelajari lebih lanjut." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferensi Host Chrome Desktop Jarak Jauh" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host Chrome\nDesktop Jarak Jauh" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Pencopot Pemasangan Host Chrome Desktop Jarak Jauh" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Gunakan Ctrl kanan untuk tombol Win (⌘ di Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Memaksimalkan jendela" + }, + "ME2ME_FIRST_RUN": { + "message": "Akses komputer Anda dari mana saja." + }, + "MESSAGE_GENERATING": { + "message": "Membuat kode akses..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Sesi Chrome Desktop Jarak Jauh Anda telah berakhir." + }, + "MESSAGE_SHARED": { + "message": "Desktop Anda saat ini sedang dibagikan dengan $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Meminimalkan jendela" + }, + "MODE_AUTHORIZE": { + "message": "Beri Otorisasi" + }, + "MODE_IT2ME": { + "message": "Bantuan Jarak Jauh" + }, + "MODE_ME2ME": { + "message": "Komputer Saya" + }, + "NEW_WINDOW": { + "message": "Jendela baru..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Semua klien yang disandingkan telah dihapus." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Penggabungan desktop tidak didukung pada platform ini. Anda masih dapat menggunakan aplikasi, namun pengalaman pengguna akan terdegradasi." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Inisialisasi host gagal." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Konfigurasi host tidak valid." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Domain pemilik host tidak valid." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID host tidak valid." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host dikonfigurasi dengan kredensial OAuth yang tidak valid." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Host yang berjalan di layar logika konsol telah dinonaktifkan untuk mendukung mode tirai dengan beralih ke host yang berjalan di sesi khusus pengguna." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Hosting dimulai ulang, untuk mempertimbangkan perubahan kebijakan." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hosting gagal membaca kebijakan." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Hosting telah dimatikan." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Kesalahan host tidak dikenal: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Pemilik host tidak valid." + }, + "OK": { + "message": "Oke" + }, + "OPTIONS_MENU": { + "message": "Opsi" + }, + "OUTGOING_CONNECTIONS": { + "message": "Dari komputer ini" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Klien berikut telah disandingkan dengan komputer ini dan dapat tersambung tanpa memberikan PIN. Anda dapat mencabut izin ini kapan saja, baik secara individu atau pun untuk semua klien." + }, + "PAIRED_CLIENT_DATE": { + "message": "Tanggal penyandingan" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klien" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Masukkan PIN yang sama di kedua kotak." + }, + "PIN_MESSAGE": { + "message": "Masukkan PIN Anda untuk $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Masukkan PIN komputer jarak jauh Anda." + }, + "PRODUCT_DESCRIPTION": { + "message": "Mengakses komputer lain atau mengizinkan pengguna lain mengakses komputer Anda dengan aman melalui internet." + }, + "PRODUCT_NAME": { + "message": "Chrome Desktop Jarak Jauh" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Streaming Aplikasi Chrome" + }, + "RECONNECT": { + "message": "Sambungkan ulang" + }, + "REMEMBER_PIN": { + "message": "Jangan minta PIN lagi saat menyambungkan ke hosting ini dari perangkat ini." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Pustaka Inti" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proses Integrasi Desktop" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikasi guna mengeluarkan perintah untuk host Chrome Desktop Jarak Jauh." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proses Host" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Hosting perpesanan asli untuk pengelolaan hosting jarak jauh" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Hosting perpesanan asli untuk bantuan jarak jauh" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proses Remote Kunci Keamanan" + }, + "RESIZE_TO_CLIENT": { + "message": "Ubah ukuran desktop agar sesuai" + }, + "RESTART_BUTTON": { + "message": "Mulai ulang sekarang" + }, + "RESTORE_WINDOW": { + "message": "Pulihkan jendela" + }, + "RETRY": { + "message": "Coba lagi" + }, + "SCREEN_OPTIONS": { + "message": "Opsi layar" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Kirim Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Melaporkan masalah..." + }, + "SEND_KEYS": { + "message": "Kirim kunci" + }, + "SEND_PRINT_SCREEN": { + "message": "Kirim PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Layanan ini mengaktifkan sambungan masuk dari klien Chrome Desktop Jarak Jauh." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Setelan ini dikelola menurut kebijakan domain." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Bagikan" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Batal" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Ingin membagikan komputer ini agar dapat dilihat dan dikontrol oleh pengguna lain?" + }, + "SHOW_STATS": { + "message": "Tampilkan statistik" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Tampilkan statistik (sambungan: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Susutkan agar sesuai" + }, + "SIGN_IN_BUTTON": { + "message": "Masuk" + }, + "SIGN_OUT_BUTTON": { + "message": "Keluar" + }, + "STOP_SHARING_BUTTON": { + "message": "Hentikan Berbagi" + }, + "SURVEY_INVITATION": { + "message": "Ingin membantu meningkatkan Desktop Jarak Jauh Chrome? $1$Isi survei ini.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Waktu" + }, + "TOGGLE_STATS": { + "message": "Tampilkan statistik" + }, + "TOOLTIP_CONNECT": { + "message": "Sambungkan ke $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Nonaktifkan sambungan jarak jauh ke komputer ini" + }, + "TOOLTIP_REFRESH": { + "message": "Menyegarkan daftar host" + }, + "TOOLTIP_RENAME": { + "message": "Edit nama komputer" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (kedaluwarsa)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Akun" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Konfirmasi akun dan PIN Anda di bawah guna mengizinkan akses oleh Chrome Desktop Jarak Jauh" + }, + "WARNING_NAT_DISABLED": { + "message": "CATATAN: Setelan kebijakan hanya mengizinkan sambungan antar-komputer dalam jaringan Anda." + }, + "WARNING_NOT_WINDOWED": { + "message": "CATATAN: Untuk memastikan bahwa semua pintasan keyboard tersedia, Anda dapat mengonfigurasi Chrome Desktop Jarak Jauh menjadi ‘Buka sebagai jendela’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Mengapa ini aman?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Sedang bekerja…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/it/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/it/messages.json new file mode 100644 index 000000000000..8999711cda5c --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/it/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Accetta e installa" + }, + "ACCESS_CODE": { + "message": "Codice di accesso" + }, + "ACCESS_CODE_TIMER": { + "message": "Questo codice di accesso scadrà tra $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Tutte le connessioni" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Digita di nuovo PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Annulla" + }, + "CLEAR_HISTORY": { + "message": "Cancella cronologia" + }, + "CLOSE": { + "message": "Chiudi" + }, + "CLOSE_PROMPT": { + "message": "Se esci da questa pagina, la sessione Chrome Remote Desktop verrà terminata." + }, + "CLOSE_WINDOW": { + "message": "Chiudi finestra" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Vuoi disattivare le connessioni remote a $1$? Se cambi idea, dovrai utilizzare il computer in questione per riattivare le connessioni.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Connessione non riuscita" + }, + "CONNECTION_FROM_HEADER": { + "message": "Da" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Cronologia connessioni" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Media" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Buona" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Scadente" + }, + "CONNECTION_TO_HEADER": { + "message": "A" + }, + "CONNECT_ANYWAY": { + "message": "Connetti comunque" + }, + "CONNECT_BUTTON": { + "message": "Connessione" + }, + "CONTINUE_BUTTON": { + "message": "Continua" + }, + "CONTINUE_PROMPT": { + "message": "Stai condividendo questo computer con un altro utente. Continuare la condivisione?" + }, + "CONTROLLER_NAME": { + "message": "Controller host Chrome Remote Desktop" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Tutti i diritti riservati." + }, + "CREDITS": { + "message": "Riconoscimenti" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Elimina tutti" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Elimina" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Per continuare devi concedere autorizzazioni di accesso esteso per il tuo computer. È necessario eseguire questa operazione solo una volta." + }, + "DESCRIPTION_CONNECT": { + "message": "Chiedi al proprietario del computer a cui vuoi accedere di fare clic su \"$1$\" e fornirti il codice di accesso.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop ti consente di condividere in modo sicuro il computer sul Web. Entrambi gli utenti devono eseguire l'app Chrome Remote Desktop, reperibile all'indirizzo $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "L'host remoto richiede l'autenticazione su un sito web di terze parti. Per continuare, devi concedere a Chrome Remote Desktop ulteriori autorizzazioni per accedere a questo indirizzo:" + }, + "DISABLE_HOST": { + "message": "Disabilita" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Disconnetti" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Servizio Chrome Remote Desktop" + }, + "DURATION_HEADER": { + "message": "Durata" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Non sei autorizzato a eseguire questa applicazione." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autenticazione non riuscita. Accedi di nuovo a Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Mancano alcuni componenti obbligatori. Verifica che sia installata la versione più recente del software e riprova." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Si è verificato un errore di rete. L'app sarà riavviata quando il dispositivo tornerà online." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Impossibile inizializzare la sessione sul computer remoto. Se il problema persiste, riprova a configurare l'host." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Il computer remoto non sta rispondendo alle richieste di connessione. Verifica che sia online e riprova." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Le connessioni al computer remoto sono temporaneamente bloccate perché qualcuno stava cercando di collegarsi al computer con un PIN non valido. Riprova più tardi." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Impossibile registrare il computer." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "È stata rilevata una versione incompatibile del protocollo. Verifica che la versione più recente del software sia installata su entrambi i computer e riprova." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Il codice di accesso non è valido. Riprova." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Le impostazioni criterio non consentono la condivisione di questo computer come host Chrome Remote Desktop. Contatta l'amministratore di sistema per ricevere assistenza." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "La sessione remota è scaduta." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Mancano alcuni componenti obbligatori. Assicurati di avere l'ultima versione di Chrome e riprova." + }, + "ERROR_NACL_DISABLED": { + "message": "Mancano alcuni componenti obbligatori. Visita la pagina chrome://plugins e assicurati che il plug-in Native Client sia attivo." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Un componente obbligatorio ha smesso di funzionare. Segnala il problema agli sviluppatori." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Impossibile collegarsi alla rete. Controlla che il dispositivo sia online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Non hai eseguito l'accesso a Chrome. Accedi e riprova." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Non sei autorizzato a eseguire questa azione." + }, + "ERROR_NOT_FOUND": { + "message": "L'oggetto richiesto non esiste." + }, + "ERROR_P2P_FAILURE": { + "message": "Impossibile raggiungere l'host. Il problema potrebbe essere dovuto alla configurazione della rete in uso." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Il servizio non è al momento disponibile. Riprova più tardi." + }, + "ERROR_UNEXPECTED": { + "message": "Si è verificato un errore imprevisto. Segnala il problema agli sviluppatori." + }, + "EXIT_FULL_SCREEN": { + "message": "Esci da schermo intero" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Impossibile ripristinare l'applicazione. Puoi comunque inviare una segnalazione di bug." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Ripristina l'applicazione. Perderai gli eventuali lavori non salvati." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Non riesco ad aprire l'applicazione." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "L'applicazione è troppo lenta." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Non riesco ad aprire i miei file Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Non riesco a trovare i miei file salvati online su Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Ho difficoltà con la tastiera o il mouse." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Per aiutarci a risolvere il tuo problema, spiegaci che cosa è successo:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Qualcos'altro." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Seleziona…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Per poterti contattare qualora ci servissero ulteriori informazioni, il tuo indirizzo email verrà incluso in ogni feedback da te inviato." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Segnala un problema" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Includi log dell'applicazione per aiutarci a risolvere il tuo problema (i log potrebbero includere informazioni private)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "I log delle applicazioni potrebbero includere informazioni private quali la tua identità (indirizzo email), i nomi e le proprietà di file e cartelle memorizzati su Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Queste informazioni vengono utilizzate soltanto per identificare il problema segnalato, sono disponibili soltanto a chi effettua accertamenti in merito alla tua segnalazione e vengono conservate per massimo 30 giorni." + }, + "FOOTER_CONNECTING": { + "message": "Connessione in corso..." + }, + "FOOTER_WAITING": { + "message": "In attesa di connessione..." + }, + "FOR_PLATFORM_MAC": { + "message": "Per Mac (OS X 10.6 e versioni successive)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Per Windows (XP e versioni successive)" + }, + "FULL_SCREEN": { + "message": "Schermo intero" + }, + "GET_STARTED": { + "message": "Come iniziare" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accetto" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Rifiuta" + }, + "HELP": { + "message": "Guida" + }, + "HOME_ACCESS_BUTTON": { + "message": "Accesso" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Visualizza e controlla un computer condiviso." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Puoi accedere a questo computer in sicurezza utilizzando Chrome Remote Desktop." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Modifica PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Questo computer è attualmente condiviso con un altro account." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Visualizza/modifica" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Questo computer è configurato per consentire la connessione di uno o più client senza l'inserimento di un codice PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Attiva connessioni remote" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Per accedere a questo computer utilizzando Chrome Remote Desktop devi attivare le connessioni remote." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Disattiva connessioni remote" + }, + "HOME_SHARE_BUTTON": { + "message": "Condividi" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Condividi questo computer per consentire la visione e il controllo a un altro utente." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(questa funzione non è ancora disponibile per il tuo computer)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Accesso negato per client: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client connesso: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client scollegato: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP canale per client: %1 ip=\"%2\" ip_host=\"%3\" canale=\"%4\" connessione=\"%5\"." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Per attivare le connessioni remote su un altro computer, installa Chrome Remote Desktop sul computer e fai clic su \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Non sono presenti computer registrati. Per attivare le connessioni remote su un computer, installa Chrome Remote Desktop sul computer e fai clic su \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Hai già eseguito l'accesso come $1$ ($2$). Per accedere ai tuoi computer nell'account in questione, $3$accedi a Google Chrome$4$ con tale account e installa di nuovo Chrome Remote Desktop.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "In genere gli aggiornamenti software vengono eseguiti automaticamente, ma in rari casi potrebbero non riuscire. L'aggiornamento del software non dovrebbe richiedere più di alcuni minuti e può essere eseguito collegandosi al computer da remoto." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop su $1$ è obsoleto e deve essere aggiornato.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Aiutaci a migliorare Chrome Remote Desktop consentendo l'acquisizione di dati per statistiche di utilizzo e rapporti sugli arresti anomali." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Per proteggere l'accesso a questo computer, scegli un PIN di $1$almeno sei cifre$2$. Questo PIN sarà richiesto quando ti connetti da un'altra posizione.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Impossibile avviare il servizio di accesso remoto." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome sta scaricando il programma di installazione di Chrome Remote Desktop Host. Al termine del download esegui il programma di installazione prima di continuare." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Esegui il programma di installazione prima di continuare." + }, + "HOST_SETUP_STARTED": { + "message": "Le connessioni remote per questo computer sono state attivate." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Verifica le impostazioni di risparmio energia del computer e verifica che non sia configurata la sospensione per inattività." + }, + "HOST_SETUP_STARTING": { + "message": "Attivazione connessioni remote per questo computer in corso…" + }, + "HOST_SETUP_STOPPED": { + "message": "Le connessioni remote per questo computer sono state disattivate." + }, + "HOST_SETUP_STOPPING": { + "message": "Disattivazione connessioni remote per questo computer in corso…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Impossibile disattivare l'accesso remoto a questo computer. Riprova più tardi." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Se scarichi il programma di installazione di Chrome Remote Desktop Host, accetti i $1$Termini di servizio$4 di Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Il PIN è stato aggiornato." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Impossibile aggiornare il PIN. Riprova più tardi." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Aggiornamento PIN del computer in corso…" + }, + "HOST_STARTED": { + "message": "Host avviato per utente: %1." + }, + "HOST_STOPPED": { + "message": "Host interrotto." + }, + "IDLE_CONTINUE": { + "message": "Continua" + }, + "IDLE_DISCONNECT": { + "message": "Scollegati ora" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "La tua sessione in $1$ non è attiva da un po' di tempo e verrà disconnessa a breve.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "A questo computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Scarica il programma di installazione di Chrome Remote Desktop Host" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Per iniziare a condividere il desktop, fornisci il seguente codice di accesso alla persona che ti aiuterà." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Una volta inserito il codice, la sessione di condivisione avrà inizio." + }, + "INVALID_PIN": { + "message": "Inserisci un PIN formato da almeno sei cifre." + }, + "IT2ME_FIRST_RUN": { + "message": "Condivisione dello schermo tra utenti, perfetta per l'assistenza tecnica da remoto." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Layout tastiera" + }, + "LABEL_CONNECTED": { + "message": "Connesso:" + }, + "LAST_ONLINE": { + "message": "$1$ (ultima connessione: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Scopri come." + }, + "LEARN_MORE": { + "message": "Ulteriori informazioni." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferenze host Chrome Remote Desktop" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host Chrome\nRemote Desktop" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Programma di disinstallazione host Chrome Remote Desktop" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Utilizza il tasto Ctrl di destra e il tasto Windows (⌘ su Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Ingrandisci la finestra" + }, + "ME2ME_FIRST_RUN": { + "message": "Accedi al tuo computer ovunque tu sia." + }, + "MESSAGE_GENERATING": { + "message": "Generazione codice di accesso in corso..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "La sessione Chrome Remote Desktop è terminata." + }, + "MESSAGE_SHARED": { + "message": "Il tuo desktop è attualmente condiviso con $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Riduci la finestra" + }, + "MODE_AUTHORIZE": { + "message": "Autorizza" + }, + "MODE_IT2ME": { + "message": "Assistenza remota" + }, + "MODE_ME2ME": { + "message": "I miei computer" + }, + "NEW_WINDOW": { + "message": "Nuova finestra…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Tutti i client accoppiati sono stati eliminati." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "L'integrazione desktop non è supportata su questa piattaforma. Puoi comunque utilizzare l'applicazione, ma l'esperienza utente sarà peggiore." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Inizializzazione host non riuscita." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Configurazione host non valida." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Dominio proprietario host non valido." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID host non valido." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "L'host è stato configurato con credenziali OAuth non valide." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "L'esecuzione dell'host nella schermata di accesso alla console si è interrotta per supportare la modalità Curtain, pertanto l'host viene ora eseguito in una sessione specifica dell'utente." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "L'host si sta riavviando per applicare una modifica alle norme." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "L'host non è riuscito a leggere la norma." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "L'host è stato chiuso." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Errore host non riconosciuto: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Proprietario host non valido." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Opzioni" + }, + "OUTGOING_CONNECTIONS": { + "message": "Da questo computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "I client seguenti sono stati accoppiati con questo computer e possono connettersi senza fornire un PIN. Puoi revocare questa autorizzazione in qualsiasi momento per ogni client o per tutti i client." + }, + "PAIRED_CLIENT_DATE": { + "message": "Data accoppiamento" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Inserisci lo stesso PIN in entrambe le caselle." + }, + "PIN_MESSAGE": { + "message": "Inserisci il PIN di $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Inserisci il codice PIN per il computer remoto." + }, + "PRODUCT_DESCRIPTION": { + "message": "Accedi ad altri computer o consenti a un altro utente di accedere al tuo computer in modo sicuro su Internet." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Riconnetti" + }, + "REMEMBER_PIN": { + "message": "Non chiedere di nuovo il PIN per il collegamento a questo host da questo dispositivo." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Core Library" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Processo di integrazione desktop" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Applicazione per fornire comandi all'host Chrome Remote Desktop." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Processo host" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Host messaggi nativi per gestione host da remoto" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Host messaggi nativi per assistenza remota" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Security Key Remoting Process" + }, + "RESIZE_TO_CLIENT": { + "message": "Adatta dimensioni desktop" + }, + "RESTART_BUTTON": { + "message": "Riavvia adesso" + }, + "RESTORE_WINDOW": { + "message": "Ripristina finestra" + }, + "RETRY": { + "message": "Riprova" + }, + "SCREEN_OPTIONS": { + "message": "Opzioni schermo" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Invia Ctrl-Alt-Canc" + }, + "SEND_FEEDBACK": { + "message": "Segnala un problema…" + }, + "SEND_KEYS": { + "message": "Invia tasti" + }, + "SEND_PRINT_SCREEN": { + "message": "Invia Stamp" + }, + "SERVICE_DESCRIPTION": { + "message": "Questo servizio consente connessioni in entrata da client Chrome Remote Desktop." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Questa impostazione è gestita dalle norme sui domini." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Condividi" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Annulla" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Vuoi condividere questo computer con un altro utente che potrà accedervi e controllarlo?" + }, + "SHOW_STATS": { + "message": "Mostra statistiche" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Mostra statistiche (connessione: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Riduci e adatta" + }, + "SIGN_IN_BUTTON": { + "message": "Accedi" + }, + "SIGN_OUT_BUTTON": { + "message": "Esci" + }, + "STOP_SHARING_BUTTON": { + "message": "Interrompi condivisione" + }, + "SURVEY_INVITATION": { + "message": "Vuoi contribuire a migliorare Chrome Remote Desktop? $1$Rispondi al sondaggio$2$.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Ora" + }, + "TOGGLE_STATS": { + "message": "Mostra statistiche" + }, + "TOOLTIP_CONNECT": { + "message": "Connetti a $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Disattiva le connessioni remote a questo computer" + }, + "TOOLTIP_REFRESH": { + "message": "Aggiorna l'elenco degli host" + }, + "TOOLTIP_RENAME": { + "message": "Modifica il nome del computer" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (obsoleto)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Account" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Conferma il tuo account e il PIN per consentire l'accesso tramite Chrome Remote Desktop." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTA. Le impostazioni dei criteri consentono connessioni solo tra computer all'interno della tua rete." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTA. Per assicurarti che siano disponibili tutte le scorciatoie da tastiera, puoi configurare l'opzione \"Apri in una finestra\" per Chrome Remote Desktop." + }, + "WHY_IS_THIS_SAFE": { + "message": "Perché questa operazione è sicura?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Finestre" + }, + "WORKING": { + "message": "Operazione in corso..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ja/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ja/messages.json new file mode 100644 index 000000000000..b691364465e1 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ja/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "åŒæ„ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" + }, + "ACCESS_CODE": { + "message": "アクセス コード" + }, + "ACCESS_CODE_TIMER": { + "message": "ã“ã®ã‚¢ã‚¯ã‚»ã‚¹ コード㯠$1$ ã§æœŸé™åˆ‡ã‚Œã¨ãªã‚Šã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "フィードãƒãƒƒã‚¯" + }, + "ALL_CONNECTIONS": { + "message": "ã™ã¹ã¦ã®æŽ¥ç¶š" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN ã‚’å†å…¥åŠ›" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "キャンセル" + }, + "CLEAR_HISTORY": { + "message": "履歴をクリア" + }, + "CLOSE": { + "message": "é–‰ã˜ã‚‹" + }, + "CLOSE_PROMPT": { + "message": "ã“ã®ãƒšãƒ¼ã‚¸ã‚’é–‰ã˜ã‚‹ã¨ã€Chrome リモート デスクトップ セッションãŒçµ‚了ã—ã¾ã™ã€‚" + }, + "CLOSE_WINDOW": { + "message": "ウィンドウを閉ã˜ã‚‹" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$ ã¸ã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’無効ã«ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿå…ƒã«æˆ»ã™å ´åˆã¯ã€è©²å½“ã®ãƒ‘ソコンã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦æŽ¥ç¶šã‚’å†ã³æœ‰åŠ¹ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "接続失敗" + }, + "CONNECTION_FROM_HEADER": { + "message": "接続元" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "接続履歴" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "中程度" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "良ã„" + }, + "CONNECTION_QUALITY_POOR": { + "message": "悪ã„" + }, + "CONNECTION_TO_HEADER": { + "message": "接続先" + }, + "CONNECT_ANYWAY": { + "message": "ã“ã®ã¾ã¾æŽ¥ç¶šã™ã‚‹" + }, + "CONNECT_BUTTON": { + "message": "接続" + }, + "CONTINUE_BUTTON": { + "message": "続行" + }, + "CONTINUE_PROMPT": { + "message": "ç¾åœ¨ã“ã®ãƒ‘ソコンを別ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å…±æœ‰ã—ã¦ã„ã¾ã™ã€‚共有を継続ã—ã¾ã™ã‹ï¼Ÿ" + }, + "CONTROLLER_NAME": { + "message": "Chrome リモート デスクトップ ホスト コントローラ" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. All Rights Reserved." + }, + "CREDITS": { + "message": "クレジット" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "ã™ã¹ã¦å‰Šé™¤" + }, + "DELETE_PAIRED_CLIENT": { + "message": "削除" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "続行ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ‘ソコンã«æ‹¡å¼µã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã‚’付与ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®ä½œæ¥­ã¯ 1 回ã ã‘å¿…è¦ã§ã™ã€‚" + }, + "DESCRIPTION_CONNECT": { + "message": "接続先ã®ãƒ‘ソコンã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã€[$1$] をクリックã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’付与ã—ã¦ã‚‚らã£ã¦ãã ã•ã„。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome リモート デスクトップを使用ã™ã‚‹ã¨ã€ãƒ‘ソコンをウェブ経由ã§å®‰å…¨ã«å…±æœ‰ã§ãã¾ã™ã€‚共有ã™ã‚‹ã«ã¯ä¸¡æ–¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ Chrome リモート デスクトップ アプリを実行ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®ã‚¢ãƒ—リ㯠$1$ ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "リモート ホストã§ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティ ウェブサイトã¸ã®èªè¨¼ãŒæ±‚ã‚られã¦ã„ã¾ã™ã€‚続行ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã« Chrome リモート デスクトップã«è¿½åŠ ã®æ¨©é™ã‚’与ãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™:" + }, + "DISABLE_HOST": { + "message": "無効ã«ã™ã‚‹" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "切断" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome リモート デスクトップ サービス" + }, + "DURATION_HEADER": { + "message": "接続時間" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "ã“ã®ã‚¢ãƒ—リケーションを実行ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。" + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "èªè¨¼ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚Chrome ã«ã‚‚ã†ä¸€åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。" + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "å¿…è¦ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。インストールã—ã¦ã„るソフトウェアã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæœ€æ–°ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã€ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚デãƒã‚¤ã‚¹ãŒå†åº¦ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã£ãŸã¨ãã«ã‚¢ãƒ—リをå†é–‹ã—ã¾ã™ã€‚" + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "リモート パソコンã§ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚引ã続ãå•é¡ŒãŒç™ºç”Ÿã™ã‚‹å ´åˆã¯ã€ãƒ›ã‚¹ãƒˆã‚’設定ã—ç›´ã—ã¦ã¿ã¦ãã ã•ã„。" + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "リモートã®ãƒ‘ソコンãŒæŽ¥ç¶šãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç­”ã—ã¾ã›ã‚“。リモートã®ãƒ‘ソコンãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ã€ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_HOST_OVERLOAD": { + "message": "無効㪠PIN を使用ã—ãŸæŽ¥ç¶šãŒè©¦ã¿ã‚‰ã‚ŒãŸãŸã‚ã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒ‘ソコンã¸ã®æŽ¥ç¶šãŒä¸€æ™‚çš„ã«ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "ã“ã®ãƒ‘ソコンを登録ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "互æ›æ€§ã®ãªã„プロトコル ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸã€‚両方ã®ãƒ‘ソコンã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã„るソフトウェアã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæœ€æ–°ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã€ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "アクセス コードãŒç„¡åŠ¹ã§ã™ã€‚ã‚‚ã†ä¸€åº¦å…¥åŠ›ã—ã¦ãã ã•ã„。" + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "ãƒãƒªã‚·ãƒ¼è¨­å®šã«ã‚ˆã‚Šã€Chrome リモート デスクトップã®ãƒ›ã‚¹ãƒˆã¨ã—ã¦ã“ã®ãƒ‘ソコンを共有ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。詳ã—ãã¯ã‚·ã‚¹ãƒ†ãƒ ç®¡ç†è€…ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "リモート セッションãŒæ™‚間切れã¨ãªã‚Šã¾ã—ãŸã€‚" + }, + "ERROR_MISSING_PLUGIN": { + "message": "å¿…è¦ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。実行ã—ã¦ã„ã‚‹ Chrome ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæœ€æ–°ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã€ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_NACL_DISABLED": { + "message": "å¿…è¦ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。chrome://plugins ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€ãƒã‚¤ãƒ†ã‚£ãƒ– クライアントãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "必須コンãƒãƒ¼ãƒãƒ³ãƒˆãŒåœæ­¢ã—ã¾ã—ãŸã€‚デベロッパーã«ã“ã®å•é¡Œã‚’報告ã—ã¦ãã ã•ã„。" + }, + "ERROR_NETWORK_FAILURE": { + "message": "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚デãƒã‚¤ã‚¹ãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。" + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Chrome ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã›ã‚“。ログインã—ã¦ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_NOT_AUTHORIZED": { + "message": "ã“ã®æ“作を実行ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。" + }, + "ERROR_NOT_FOUND": { + "message": "リクエストã—ãŸã‚ªãƒ–ジェクトã¯å­˜åœ¨ã—ã¾ã›ã‚“。" + }, + "ERROR_P2P_FAILURE": { + "message": "ホストã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。ãŠä½¿ã„ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®è¨­å®šãŒåŽŸå› ã§ã‚ã‚‹ã“ã¨ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚" + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "ã“ã®ã‚µãƒ¼ãƒ“スã¯ä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªããªã£ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "ERROR_UNEXPECTED": { + "message": "予期ã—ãªã„エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã“ã®å•é¡Œã‚’デベロッパーã«å ±å‘Šã—ã¦ãã ã•ã„。" + }, + "EXIT_FULL_SCREEN": { + "message": "全画é¢è¡¨ç¤ºã‚’終了" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "アプリケーションをリセットã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã®é€ä¿¡ã¯å¯èƒ½ã§ã™ã€‚" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "アプリケーションをリセットã—ã¾ã™ã€‚ä¿å­˜ã•ã‚Œã¦ã„ãªã„作業ã¯å¤±ã‚ã‚Œã¾ã™ã€‚" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "アプリケーションを開ã‘ãªã„。" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "アプリケーションã®å‹•ä½œãŒé…ã™ãŽã‚‹ã€‚" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Google ドライブã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã‘ãªã„。" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Google ドライブã«ä¿å­˜ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’オンラインã§è¡¨ç¤ºã§ããªã„。" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "キーボードã¾ãŸã¯ãƒžã‚¦ã‚¹ã«é–¢é€£ã—ãŸå•é¡ŒãŒã‚る。" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "ã©ã®ã‚ˆã†ãªå•é¡ŒãŒèµ·ã“ã£ã¦ã„ã‚‹ã‹ãŠçŸ¥ã‚‰ã›ãã ã•ã„。" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "ãã®ä»–ã®å•é¡Œã€‚" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "é¸æŠžã—ã¦ãã ã•ã„…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "後ã§è©³ã—ã„情報をãŠçŸ¥ã‚‰ã›ã™ã‚‹ãŸã‚ã«ã€é€ä¿¡ã„ãŸã ãフィードãƒãƒƒã‚¯ã«ã¯ãŠå®¢æ§˜ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒè¨˜è¼‰ã•ã‚Œã¾ã™ã®ã§ã”了承ãã ã•ã„。" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "å•é¡Œã‚’報告" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "å•é¡Œè§£æ±ºã«å”力ã™ã‚‹ãŸã‚ã«ã‚¢ãƒ—リケーション ログをå«ã‚る(ログã«ã¯å€‹äººæƒ…å ±ãŒå«ã¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼‰ã€‚" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "アプリケーション ログã«ã¯ã€ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ã‚ˆã†ãªå€‹äººæƒ…報をã¯ã˜ã‚ã€Google ドライブã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚„フォルダã®åå‰ã€ãƒ—ロパティã¨ã„ã£ãŸãƒ—ライãƒã‚·ãƒ¼ã«ã‹ã‹ã‚る情報ãŒå«ã¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚" + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ã“ã®æƒ…å ±ã¯ã€å ±å‘Šã—ã¦ã„ãŸã ã„ãŸå•é¡Œã‚’診断ã™ã‚‹ç›®çš„ã«ã®ã¿ä½¿ç”¨ã•ã‚Œã€èª¿æŸ»æ‹…当者ã®ã¿ã«åˆ©ç”¨å¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ã“ã®æƒ…報㌠30 日間をéŽãŽã¦ä¿æŒã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。" + }, + "FOOTER_CONNECTING": { + "message": "接続ã—ã¦ã„ã¾ã™..." + }, + "FOOTER_WAITING": { + "message": "接続を待機ã—ã¦ã„ã¾ã™..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac 版(OS X 10.6 以上)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows 版(XP 以上)" + }, + "FULL_SCREEN": { + "message": "全画é¢è¡¨ç¤º" + }, + "GET_STARTED": { + "message": "利用を開始" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "承諾" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "åŒæ„ã—ãªã„" + }, + "HELP": { + "message": "ヘルプ" + }, + "HOME_ACCESS_BUTTON": { + "message": "アクセス" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "共有パソコンã®ç”»é¢ã‚’見ãªãŒã‚‰æ“作ã—ã¾ã™ã€‚" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome リモート デスクトップを使用ã—ã¦ã€ã“ã®ãƒ‘ソコンã«å®‰å…¨ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN を変更" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "ã“ã®ãƒ‘ソコンã¯ç¾åœ¨ã€åˆ¥ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§å…±æœ‰ã•ã‚Œã¦ã„ã¾ã™ã€‚" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "表示/編集" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "ã“ã®ãƒ‘ソコンã¯ã€1 ã¤ä»¥ä¸Šã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒ PIN ã®å…¥åŠ›ãªã—ã§æŽ¥ç¶šã§ãるよã†ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™ã€‚" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "リモート接続を有効ã«ã™ã‚‹" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Chrome リモート デスクトップを使用ã—ã¦ã“ã®ãƒ‘ソコンã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "リモート接続を無効ã«ã™ã‚‹" + }, + "HOME_SHARE_BUTTON": { + "message": "共有" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "ã“ã®ãƒ‘ソコンãŒå…±æœ‰ã•ã‚Œã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®ãƒ‘ソコンã®ç”»é¢ã‚’見ãªãŒã‚‰æ“作ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ãŠä½¿ã„ã®ãƒ‘ソコンã¯ã“ã®æ©Ÿèƒ½ã«æœªå¯¾å¿œã§ã™ï¼‰" + }, + "HOST_CATEGORY": { + "message": "ホスト" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "次ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã—ã¾ã—ãŸ: %1。" + }, + "HOST_CLIENT_CONNECTED": { + "message": "次ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã—ã¾ã—ãŸ: %1。" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "次ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒåˆ‡æ–­ã—ã¾ã—ãŸ: %1。" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "クライアントã®ãƒãƒ£ãƒ³ãƒãƒ« IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'" + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "別ã®ãƒ‘ソコンã¸ã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’有効ã«ã™ã‚‹ã«ã¯ã€å¯¾è±¡ã¨ãªã‚‹ãƒ‘ソコン㫠Chrome リモート デスクトップをインストールã—ã€[$1$] をクリックã—ã¦ãã ã•ã„。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "パソコンãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。パソコンã¸ã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’有効ã«ã™ã‚‹ã«ã¯ã€å¯¾è±¡ã¨ãªã‚‹ãƒ‘ソコン㫠Chrome リモート デスクトップをインストールã—ã€[$1$] をクリックã—ã¦ãã ã•ã„。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "以å‰ã« $1$($2$)ã¨ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ãƒ‘ソコンã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ $3$Google Chrome ã«ãƒ­ã‚°ã‚¤ãƒ³$4$ã—ã€Chrome リモート デスクトップをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "通常ã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æ›´æ–°ã¯è‡ªå‹•çš„ã«è¡Œã‚ã‚Œã¾ã™ãŒã€ã¾ã‚Œã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚ソフトウェアã®æ›´æ–°ã«ã‹ã‹ã‚‹æ™‚é–“ã¯æ•°åˆ†ä»¥å†…ã§ã™ã€‚パソコンã«ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã—ã¦ã„ã‚‹å ´åˆã‚‚æ›´æ–°ã¯å¯èƒ½ã§ã™ã€‚" + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ ã® Chrome リモート デスクトップã¯æœ€æ–°ã§ã¯ãªã„ãŸã‚ã€æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Chrome リモート デスクトップã®æ”¹å–„ã®ãŸã‚ã€ä½¿ç”¨çµ±è¨ˆæƒ…å ±ã¨ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ レãƒãƒ¼ãƒˆã®åŽé›†ã«å”力ã™ã‚‹" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "ã“ã®ãƒ‘ソコンã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ä¿è­·ã™ã‚‹ã«ã¯ã€$1$6 æ¡ä»¥ä¸Š$2$ã® PIN ã‚’é¸æŠžã—ã¦ãã ã•ã„。ã“ã® PIN ã¯åˆ¥ã®å ´æ‰€ã‹ã‚‰æŽ¥ç¶šã™ã‚‹ã¨ãã«å¿…è¦ã¨ãªã‚Šã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "リモート アクセス サービスを開始ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome リモート デスクトップ ホスト インストーラをダウンロードã—ã¦ã„ã¾ã™ã€‚ダウンロードãŒå®Œäº†ã—ãŸã‚‰ã€ç¶šè¡Œã™ã‚‹å‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’実行ã—ã¦ãã ã•ã„。" + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "続行ã™ã‚‹å‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’実行ã—ã¦ãã ã•ã„。" + }, + "HOST_SETUP_STARTED": { + "message": "ã“ã®ãƒ‘ソコンã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šãŒæœ‰åŠ¹ã«ãªã‚Šã¾ã—ãŸã€‚" + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "ãŠä½¿ã„ã®ãƒ‘ソコンã®é›»æºç®¡ç†è¨­å®šã§ã€ã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®ã¨ãã«ã‚¹ãƒªãƒ¼ãƒ—ã«ãªã‚‰ãªã„よã†ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’ã”確èªãã ã•ã„。" + }, + "HOST_SETUP_STARTING": { + "message": "ã“ã®ãƒ‘ソコンã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’有効ã«ã—ã¦ã„ã¾ã™..." + }, + "HOST_SETUP_STOPPED": { + "message": "ã“ã®ãƒ‘ソコンã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šãŒç„¡åŠ¹ã«ãªã‚Šã¾ã—ãŸã€‚" + }, + "HOST_SETUP_STOPPING": { + "message": "ã“ã®ãƒ‘ソコンã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’無効ã«ã—ã¦ã„ã¾ã™..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "ã“ã®ãƒ‘ソコンã¸ã®ãƒªãƒ¢ãƒ¼ãƒˆ アクセスを無効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome リモート デスクトップ ホスト インストーラをダウンロードã™ã‚‹ã¨ã€Google ã®$1$利用è¦ç´„$4ã«åŒæ„ã—ãŸã“ã¨ã«ãªã‚Šã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN ã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN ã‚’æ›´æ–°ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。" + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "ã“ã®ãƒ‘ソコン用㮠PIN ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™..." + }, + "HOST_STARTED": { + "message": "次ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ›ã‚¹ãƒˆã‚’開始ã—ã¾ã—ãŸ: %1。" + }, + "HOST_STOPPED": { + "message": "ホストãŒåœæ­¢ã—ã¾ã—ãŸã€‚" + }, + "IDLE_CONTINUE": { + "message": "続行" + }, + "IDLE_DISCONNECT": { + "message": "切断" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "$1$ ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã—ã°ã‚‰ãæ“作ãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚セッションを間もãªã切断ã—ã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "ã“ã®ãƒ‘ソコンã¸ã®æŽ¥ç¶š" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome リモート デスクトップ ホスト インストーラã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "デスクトップã®å…±æœ‰ã‚’開始ã™ã‚‹ã«ã¯ã€å…±æœ‰ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä»¥ä¸‹ã®ã‚¢ã‚¯ã‚»ã‚¹ コードをãŠçŸ¥ã‚‰ã›ãã ã•ã„。" + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "共有ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®ã‚³ãƒ¼ãƒ‰ã‚’入力ã™ã‚‹ã¨ã€å…±æœ‰ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒé–‹å§‹ã•ã‚Œã¾ã™ã€‚" + }, + "INVALID_PIN": { + "message": "PIN 㯠6 æ¡ä»¥ä¸Šã§å…¥åŠ›ã—ã¦ãã ã•ã„。" + }, + "IT2ME_FIRST_RUN": { + "message": "リモート テクニカル サãƒãƒ¼ãƒˆã«æœ€é©ãªã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åŒå£«ã®ç”»é¢å…±æœ‰ã€‚" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "キーボードé…列" + }, + "LABEL_CONNECTED": { + "message": "接続済ã¿:" + }, + "LAST_ONLINE": { + "message": "$1$(å‰å›žã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³æŽ¥ç¶š: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "詳細を見る。" + }, + "LEARN_MORE": { + "message": "詳細" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome リモート デスクトップ ホストã®è¨­å®š" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome リモート\nデスクトップ ホスト" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome リモート デスクトップ ホストã®ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "å³ Ctrl キーを Win キー(Mac ã®å ´åˆã¯ ⌘)ã¨ã—ã¦ä½¿ç”¨" + }, + "MAXIMIZE_WINDOW": { + "message": "ウィンドウを最大化" + }, + "ME2ME_FIRST_RUN": { + "message": "ã©ã“ã‹ã‚‰ã§ã‚‚自分ã®ãƒ‘ソコンã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" + }, + "MESSAGE_GENERATING": { + "message": "アクセス コードを生æˆã—ã¦ã„ã¾ã™..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Chrome リモート デスクトップ セッションãŒçµ‚了ã—ã¾ã—ãŸã€‚" + }, + "MESSAGE_SHARED": { + "message": "デスクトップã¯ç¾åœ¨ $1$ ã¨å…±æœ‰ã•ã‚Œã¦ã„ã¾ã™ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "ウィンドウを最å°åŒ–" + }, + "MODE_AUTHORIZE": { + "message": "承èª" + }, + "MODE_IT2ME": { + "message": "リモート サãƒãƒ¼ãƒˆ" + }, + "MODE_ME2ME": { + "message": "マイ パソコン" + }, + "NEW_WINDOW": { + "message": "æ–°ã—ã„ウィンドウ..." + }, + "NO_PAIRED_CLIENTS": { + "message": "ペア設定ã•ã‚ŒãŸã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’削除ã—ã¾ã—ãŸã€‚" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "ã“ã®ãƒ—ラットフォームã§ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã®çµ±åˆã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。アプリケーションã¯å¼•ã続ã使用ã§ãã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスã¯ä½Žä¸‹ã—ã¾ã™ã€‚" + }, + "OFFLINE": { + "message": "$1$(オフライン)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "ホストをåˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "ホストã®è¨­å®šãŒç„¡åŠ¹ã§ã™ã€‚" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "ホストã®æ‰€æœ‰è€…ドメインãŒç„¡åŠ¹ã§ã™ã€‚" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ホスト ID ãŒç„¡åŠ¹ã§ã™ã€‚" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "ホストã®è¨­å®šã§ç„¡åŠ¹ãª OAuth èªè¨¼æƒ…å ±ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "コンソールã®ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ã§å®Ÿè¡Œã•ã‚Œã‚‹ãƒ›ã‚¹ãƒˆã¯ã€ã‚«ãƒ¼ãƒ†ãƒ³ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«çµ‚了ã•ã‚Œã¾ã—ãŸï¼ˆãƒ¦ãƒ¼ã‚¶ãƒ¼å›ºæœ‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§å®Ÿè¡Œã•ã‚Œã‚‹ãƒ›ã‚¹ãƒˆã«åˆ‡ã‚Šæ›¿ãˆã‚‰ã‚Œã¾ã—ãŸï¼‰ã€‚" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ãƒãƒªã‚·ãƒ¼ã®å¤‰æ›´ã‚’有効ã«ã™ã‚‹ãŸã‚ã€ãƒ›ã‚¹ãƒˆã‚’å†èµ·å‹•ã—ã¦ã„ã¾ã™ã€‚" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ホストã§ãƒãƒªã‚·ãƒ¼ã‚’読ã¿å–ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ホストã¯ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã—ãŸã€‚" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ä¸æ˜Žãªãƒ›ã‚¹ãƒˆã‚¨ãƒ©ãƒ¼: $1$。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "ホストã®æ‰€æœ‰è€…ãŒç„¡åŠ¹ã§ã™ã€‚" + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "オプション" + }, + "OUTGOING_CONNECTIONS": { + "message": "ã“ã®ãƒ‘ソコンã‹ã‚‰ã®æŽ¥ç¶š" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "次ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã“ã®ãƒ‘ソコンã¨ãƒšã‚¢è¨­å®šã•ã‚Œã¦ãŠã‚Šã€PIN を指定ã—ãªãã¦ã‚‚接続ã§ãã¾ã™ã€‚ã“ã®æ¨©é™ã¯ã€å€‹ã€…ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¾ãŸã¯ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å¯¾ã—ã¦ã„ã¤ã§ã‚‚å–り消ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" + }, + "PAIRED_CLIENT_DATE": { + "message": "ペア設定ã•ã‚ŒãŸæ—¥ä»˜" + }, + "PAIRED_CLIENT_NAME": { + "message": "クライアント" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "両方ã®ãƒœãƒƒã‚¯ã‚¹ã«åŒã˜ PIN を入力ã—ã¦ãã ã•ã„。" + }, + "PIN_MESSAGE": { + "message": "$1$ ã® PIN を入力ã—ã¦ãã ã•ã„。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "リモート パソコン㮠PIN を入力ã—ã¦ãã ã•ã„。" + }, + "PRODUCT_DESCRIPTION": { + "message": "ã“ã®ãƒ‘ソコンã‹ã‚‰ä»–ã®ãƒ‘ソコンã«ã€ã¾ãŸã¯ä»–ã®ãƒ‘ソコンã‹ã‚‰ã“ã®ãƒ‘ソコンã«ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã‚’経由ã—ã¦å®‰å…¨ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" + }, + "PRODUCT_NAME": { + "message": "Chrome リモート デスクトップ" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "å†æŽ¥ç¶š" + }, + "REMEMBER_PIN": { + "message": "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã“ã®ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã™ã‚‹ã¨ãã« PIN ã®å†å…¥åŠ›ã‚’è¦æ±‚ã—ãªã„。" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "コア ライブラリ" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "デスクトップ統åˆãƒ—ロセス" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome リモート デスクトップã®ãƒ›ã‚¹ãƒˆã«ã‚³ãƒžãƒ³ãƒ‰ã‚’発行ã™ã‚‹ã‚¢ãƒ—リケーション。" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ホスト プロセス" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "リモート ホスト管ç†ç”¨ã®ãƒã‚¤ãƒ†ã‚£ãƒ–·メッセージング·ホスト" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "リモート アシスタンス用ã®ãƒã‚¤ãƒ†ã‚£ãƒ–·メッセージング·ホスト" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "セキュリティ キーã®ãƒªãƒ¢ãƒ¼ãƒ†ã‚£ãƒ³ã‚° プロセス" + }, + "RESIZE_TO_CLIENT": { + "message": "デスクトップを画é¢ã«åˆã‚ã›ã¦ã‚µã‚¤ã‚ºå¤‰æ›´ã™ã‚‹" + }, + "RESTART_BUTTON": { + "message": "今ã™ãå†èµ·å‹•" + }, + "RESTORE_WINDOW": { + "message": "ウィンドウを元ã®ã‚µã‚¤ã‚ºã«æˆ»ã™" + }, + "RETRY": { + "message": "å†èª­ã¿è¾¼ã¿" + }, + "SCREEN_OPTIONS": { + "message": "ç”»é¢ã®ã‚ªãƒ—ション" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del ã‚’é€ä¿¡" + }, + "SEND_FEEDBACK": { + "message": "å•é¡Œã‚’報告…" + }, + "SEND_KEYS": { + "message": "キーをé€ä¿¡" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn ã‚’é€ä¿¡" + }, + "SERVICE_DESCRIPTION": { + "message": "ã“ã®ã‚µãƒ¼ãƒ“スã«ã‚ˆã‚Šã€Chrome リモート デスクトップ クライアントã‹ã‚‰ã®ç€ä¿¡æŽ¥ç¶šãŒæœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "ã“ã®è¨­å®šã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ ãƒãƒªã‚·ãƒ¼ã«ã‚ˆã£ã¦ç®¡ç†ã•ã‚Œã¾ã™ã€‚" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "共有" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "キャンセル" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "ã“ã®ãƒ‘ソコンã®é–²è¦§ã¨åˆ¶å¾¡ã®æ¨©é™ã‚’別ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å…±æœ‰ã—ã¾ã™ã‹ï¼Ÿ" + }, + "SHOW_STATS": { + "message": "統計情報を表示" + }, + "SHOW_STATS_WITH_RTT": { + "message": "統計情報を表示(接続状態: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ウィンドウã«åˆã‚ã›ã¦ç¸®å°" + }, + "SIGN_IN_BUTTON": { + "message": "ログイン" + }, + "SIGN_OUT_BUTTON": { + "message": "ログアウト" + }, + "STOP_SHARING_BUTTON": { + "message": "共有をåœæ­¢" + }, + "SURVEY_INVITATION": { + "message": "Chrome リモート デスクトップã®å“質å‘上ã«ã”å”力ãã ã•ã„。$1$アンケートã«å›žç­”ã™ã‚‹$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "時間" + }, + "TOGGLE_STATS": { + "message": "統計情報を表示" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ ã«æŽ¥ç¶š", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ã“ã®ãƒ‘ソコンã¸ã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚’無効ã«ã™ã‚‹" + }, + "TOOLTIP_REFRESH": { + "message": "ホストã®ãƒªã‚¹ãƒˆã‚’æ›´æ–°ã—ã¾ã™" + }, + "TOOLTIP_RENAME": { + "message": "パソコンåを編集" + }, + "UPDATE_REQUIRED": { + "message": "$1$(最新ã§ã¯ã‚ã‚Šã¾ã›ã‚“)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "アカウント" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome リモート デスクトップã«ã‚ˆã‚‹ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã«ã¯ã€ä¸‹è¨˜ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¨ PIN ã®ç¢ºèªã‚’è¡Œã£ã¦ãã ã•ã„。" + }, + "WARNING_NAT_DISABLED": { + "message": "注: ãƒãƒªã‚·ãƒ¼è¨­å®šã«åŸºã¥ãã€æŽ¥ç¶šãŒè¨±å¯ã•ã‚Œã‚‹ã®ã¯ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã®ãƒ‘ソコン間ã®ã¿ã¨ãªã‚Šã¾ã™ã€‚" + }, + "WARNING_NOT_WINDOWED": { + "message": "注: ã™ã¹ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ ショートカットを使用ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€Chrome リモート デスクトップを [ウィンドウã¨ã—ã¦é–‹ã] ã«è¨­å®šã—ã¦ãã ã•ã„。" + }, + "WHY_IS_THIS_SAFE": { + "message": "ã“ã®æ“作ãŒå®‰å…¨ãªç†ç”±" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "ウィンドウ" + }, + "WORKING": { + "message": "処ç†ã—ã¦ã„ã¾ã™..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/kn/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/kn/messages.json new file mode 100644 index 000000000000..bfae5ae86b03 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/kn/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ಸಮà³à²®à²¤à²¿à²¸à³ ಮತà³à²¤à³ ಸà³à²¥à²¾à²ªà²¿à²¸à³" + }, + "ACCESS_CODE": { + "message": "ಪà³à²°à²µà³‡à²¶ ಕೋಡà³" + }, + "ACCESS_CODE_TIMER": { + "message": "$1$ ನಲà³à²²à²¿ ಈ ಪà³à²°à²µà³‡à²¶ ಕೋಡೠಅವಧಿ ಮà³à²•à³à²¤à²¾à²¯à²—ೊಳà³à²³à³à²¤à³à²¤à²¦à³†", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "ಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³†" + }, + "ALL_CONNECTIONS": { + "message": "ಎಲà³à²²à²¾ ಸಂಪರà³à²•à²—ಳà³" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN ಅನà³à²¨à³ ಮತà³à²¤à³† ಟೈಪೠಮಾಡಿ" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "ರದà³à²¦à³à²®à²¾à²¡à³" + }, + "CLEAR_HISTORY": { + "message": "ಇತಿಹಾಸವನà³à²¨à³ ತೆರವà³à²—ೊಳಿಸಿ" + }, + "CLOSE": { + "message": "ಮà³à²šà³à²šà³" + }, + "CLOSE_PROMPT": { + "message": "ಈ ಪà³à²Ÿà²¦à²¿à²‚ದ ಹೊರಹೋಗà³à²µà³à²¦à²°à²¿à²‚ದ ನಿಮà³à²® Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಸೆಶನೠಅಂತà³à²¯à²—ೊಳà³à²³à³à²¤à³à²¤à²¦à³†." + }, + "CLOSE_WINDOW": { + "message": "ವಿಂಡೋ ಮà³à²šà³à²šà³" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$ ಗೆ ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲೠನೀವೠಖಚಿತವಾಗಿ ಬಯಸà³à²µà²¿à²°à²¾? ನಿಮà³à²® ಆಲೋಚನೆಯನà³à²¨à³ ನೀವೠಬದಲಾಯಿಸಿಕೊಂಡಲà³à²²à²¿, ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಮತà³à²¤à³† ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠನೀವೠಆ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ಭೇಟಿ ನೀಡà³à²µ ಅವಶà³à²¯à²•à²¤à³† ಇದೆ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "ಸಂಪರà³à²• ವಿಫಲವಾಗಿದೆ" + }, + "CONNECTION_FROM_HEADER": { + "message": "ಇವರಿಂದ" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ಸಂಪರà³à²•à²¦ ಇತಿಹಾಸ" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "ಚೆನà³à²¨à²¾à²—ಿದೆ" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "ಉತà³à²¤à²®" + }, + "CONNECTION_QUALITY_POOR": { + "message": "ಕಳಪೆ" + }, + "CONNECTION_TO_HEADER": { + "message": "ಗೆ" + }, + "CONNECT_ANYWAY": { + "message": "ಹೇಗಿದà³à²¦à²°à³‚ ಸಂಪರà³à²•à²ªà²¡à²¿à²¸à²¿" + }, + "CONNECT_BUTTON": { + "message": "ಸಂಪರà³à²•à²¿à²¸à³" + }, + "CONTINUE_BUTTON": { + "message": "ಮà³à²‚ದà³à²µà²°à²¿à²¸à³" + }, + "CONTINUE_PROMPT": { + "message": "ಪà³à²°à²¸à³à²¤à³à²¤ ನೀವೠಮತà³à²¤à³Šà²¬à³à²¬ ಬಳಕೆದಾರರೊಂದಿಗೆ ಈ ಯಂತà³à²°à²µà²¨à³à²¨à³ ಹಂಚಿಕೊಳà³à²³à³à²¤à³à²¤à²¿à²°à³à²µà²¿à²°à²¿. ನೀವೠಹಂಚಿಕೆಯನà³à²¨à³ ಮà³à²‚ದà³à²µà²°à²¿à²¸à²²à³ ಬಯಸà³à²µà²¿à²°à²¾?" + }, + "CONTROLLER_NAME": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³ ನಿಯಂತà³à²°à²•" + }, + "COPYRIGHT": { + "message": "ಹಕà³à²•à³à²¸à³à²µà²¾à²®à³à²¯ 2013 Google Inc. ಎಲà³à²²à²¾ ಹಕà³à²•à³à²—ಳನà³à²¨à³ ಕಾಯà³à²¦à²¿à²°à²¿à²¸à²²à²¾à²—ಿದೆ." + }, + "CREDITS": { + "message": "ಕà³à²°à³†à²¡à²¿à²Ÿà³â€Œà²—ಳà³" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "ಎಲà³à²²à²µà²¨à³à²¨à³ ಅಳಿಸà³" + }, + "DELETE_PAIRED_CLIENT": { + "message": "ಅಳಿಸà³" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "ಮà³à²‚ದà³à²µà²°à²¿à²¸à²²à³ ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ನೀವೠಮೊದಲೠವಿಸà³à²¤à³ƒà²¤ ಪà³à²°à²µà³‡à²¶ ಅನà³à²®à²¤à²¿à²—ಳನà³à²¨à³ ನೀಡಬೇಕಾಗà³à²¤à³à²¤à²¦à³†. ನೀವೠಇದನà³à²¨à³ ಒಮà³à²®à³† ಮಾತà³à²° ಮಾಡಬೇಕಾಗಿರà³à²¤à³à²¤à²¦à³†." + }, + "DESCRIPTION_CONNECT": { + "message": "ನೀವೠಪà³à²°à²µà³‡à²¶à²¿à²¸à²¬à³‡à²•à³†à²‚ದಿರà³à²µ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²¨ ಬಳಕೆದಾರರನà³à²¨à³ “$1$†ಕà³à²²à²¿à²•à³ ಮಾಡà³à²µà²‚ತೆ ಹಾಗೂ ನಿಮಗೆ ಪà³à²°à²µà³‡à²¶ ನೀಡà³à²µà²‚ತೆ ಹೇಳಿ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "ವೆಬà³â€Œà²¨à²²à³à²²à²¿ ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ಸà³à²°à²•à³à²·à²¿à²¤à²µà²¾à²—ಿ ಹಂಚಿಕೊಳà³à²³à²²à³ Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ನಿಮಗೆ ಅನà³à²®à²¤à²¿à²¸à³à²¤à³à²¤à²¦à³†. $1$ ರಲà³à²²à²¿ ಕಂಡà³à²¬à²°à³à²µ Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಅಪà³à²²à³€à²•à³‡à²¶à²¨à³ ಅನà³à²¨à³ ಎರಡೂ ಬಳಕೆದಾರರೂ ಚಾಲನೆಯಲà³à²²à²¿à²Ÿà³à²Ÿà²¿à²°à²¬à³‡à²•à³.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "ರಿಮೋಟೠಹೋಸà³à²Ÿà³â€Œà²—ೆ ಮೂರನೇ-ವà³à²¯à²•à³à²¤à²¿à²¯ ವೆಬà³â€Œà²¸à³ˆà²Ÿà³â€Œà²—ೆ ನೀವೠದೃಢೀಕರಣ ನೀಡà³à²µ ಅಗತà³à²¯à²µà²¿à²¦à³†. ಮà³à²‚ದà³à²µà²°à²¿à²¯à²²à³, ಈ ವಿಳಾಸಕà³à²•à³† ಪà³à²°à²µà³‡à²¶à²¿à²¸à²²à³ ನೀವೠChrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೆಚà³à²šà³à²µà²°à²¿ ಅನà³à²®à²¤à²¿à²—ಳನà³à²¨à³ ನೀಡಬೇಕಾಗà³à²¤à³à²¤à²¦à³†:" + }, + "DISABLE_HOST": { + "message": "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "ಡಿಸà³â€Œà²•à²¨à³†à²•à³à²Ÿà³" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಸೇವೆ" + }, + "DURATION_HEADER": { + "message": "ಅವಧಿ" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "ನೀವೠಈ ಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಅನà³à²¨à³ ರನೠಮಾಡಲೠಅನà³à²®à²¤à²¿à²¯à²¨à³à²¨à³ ಹೊಂದಿಲà³à²²." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "ದೃಢೀಕರಣ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟà³à²Ÿà³ Chrome ಗೆ ಮತà³à²¤à³† ಸೈನೠಇನೠಮಾಡಿ." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "ಕೆಲವೠಅಗತà³à²¯à²µà²¿à²°à³à²µ ಅಂಶಗಳೠಕಾಣೆಯಾಗಿವೆ. ನೀವೠಸಾಫà³à²Ÿà³â€Œà²µà³‡à²°à³â€Œà²¨ ಇತà³à²¤à³€à²šà²¿à²¨ ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ಸà³à²¥à²¾à²ªà²¿à²¸à²¿à²°à³à²µà²¿à²°à²¾ ಎಂಬà³à²¦à²¨à³à²¨à³ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²¿ ಹಾಗೂ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "ನೆಟà³â€Œà²µà²°à³à²•à³ ದೋಷ ಕಂಡà³à²¬à²‚ದಿದೆ. ನಿಮà³à²® ಸಾಧನವೠಮತà³à²¤à³† ಆನà³-ಲೈನà³â€Œà²¨à²²à³à²²à²¿à²°à³à²µà²¾à²— ನಾವೠಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³â€Œ ಅನà³à²¨à³ ಮರà³à²ªà³à²°à²¾à²°à²‚ಭಿಸà³à²¤à³à²¤à³‡à²µà³†." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "ಸೆಶನೠಪà³à²°à²¾à²°à²‚ಭಿಸಲೠರಿಮೋಟೠಕಂಪà³à²¯à³‚ಟರೠವಿಫಲವಾಗಿದೆ. ಸಮಸà³à²¯à³†à²¯à³ ಮà³à²‚ದà³à²µà²°à²¿à²¦à²°à³† ಹೋಸà³à²Ÿà³ ಮತà³à²¤à³Šà²®à³à²®à³† ಕಾನà³à²«à²¿à²—ರೠಮಾಡಲೠಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "ಸಂಪರà³à²• ವಿನಂತಿಗಳಿಗೆ ರಿಮೋಟೠಕಂಪà³à²¯à³‚ಟರೠಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³† ನೀಡà³à²µà³à²¦à²¿à²²à³à²². ದಯವಿಟà³à²Ÿà³ ಆನà³â€Œà²²à³ˆà²¨à³â€Œà²¨à²²à³à²²à²¿ ಪರಿಶೀಲಿಸಿ ಮತà³à²¤à³ ಮತà³à²¤à³Šà²®à³à²®à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_HOST_OVERLOAD": { + "message": "ಅಮಾನà³à²¯ PIN ನೊಂದಿಗೆ ಸಂಪರà³à²•à²¿à²¸à²²à³ ಯಾರೋ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à³à²¤à³à²¤à²¿à²°à³à²µ ಕಾರಣ ರಿಮೋಟೠಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ತಾತà³à²•à²¾à²²à²¿à²•à²µà²¾à²—ಿ ನಿರà³à²¬à²‚ಧಿಸಲಾಗಿದೆ. ದಯವಿಟà³à²Ÿà³ ನಂತರ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ನೋಂದಾಯಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲವಾಗಿದೆ." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "ಹೊಂದಿಕೆಯಾಗದಿರà³à²µ ಪà³à²°à³Šà²Ÿà³‹à²•à²¾à²²à³ ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ಪತà³à²¤à³† ಮಾಡಲಾಗಿದೆ. ನೀವೠಎರಡೂ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಳಲà³à²²à²¿ ಸಾಫà³à²Ÿà³â€Œà²µà³‡à²°à³â€Œà²¨ ಇತà³à²¤à³€à²šà²¿à²¨ ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ಸà³à²¥à²¾à²ªà²¿à²¸à²¿à²°à³à²µà²¿à²°à²¿ ಎಂಬà³à²¦à²¨à³à²¨à³ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²¿ ಹಾಗೂ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "ಪà³à²°à²µà³‡à²¶ ಕೋಡೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ. ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³â€Œ ಹೋಸà³à²Ÿà³â€Œ ಆಗಿ ಈ ಕಂಪà³à²¯à³‚ಟರೠಹಂಚಿಕೊಳà³à²³à³à²µà³à²¦à²•à³à²•à³† ನೀತಿ ಸೆಟà³à²Ÿà²¿à²‚ಗà³â€Œà²—ಳೠಅನà³à²®à²¤à²¿ ನೀಡà³à²µà³à²¦à²¿à²²à³à²². ಸಹಾಯಕà³à²•à²¾à²—ಿ ನಿಮà³à²® ಸಿಸà³à²Ÿà²®à³ ನಿರà³à²µà²¾à²¹à²•à²°à²¨à³à²¨à³ ಸಂಪರà³à²•à²¿à²¸à²¿." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "ರಿಮೋಟೠಸೆಶನೠಅವಧಿ ಮೀರಿದೆ." + }, + "ERROR_MISSING_PLUGIN": { + "message": "ಅಗತà³à²¯à²µà²¿à²°à³à²µ ಕೆಲವೠಅಂಶಗಳೠಕಾಣೆಯಾಗಿವೆ. ನೀವೠChrome ನ ಇತà³à²¤à³€à²šà²¿à²¨ ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ರನೠಮಾಡà³à²¤à³à²¤à²¿à²°à³à²µà²¿à²°à²¾ ಎಂಬà³à²¦à²¨à³à²¨à³ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²¿ ಹಾಗೂ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_NACL_DISABLED": { + "message": "ಕೆಲವೠಅಗತà³à²¯à²µà²¿à²°à³à²µ ಅಂಶಗಳೠಕಾಣೆಯಾಗಿವೆ. chrome://plugins ಗೆ ಹೋಗಿ, ಸà³à²¥à²³à³€à²¯ ಕà³à²²à³ˆà²‚ಟೠಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆಯೇ ಎಂಬà³à²¦à²¨à³à²¨ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²¿." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "ಅಗತà³à²¯ ಅಂಶದ ಕಾರà³à²¯à²¨à²¿à²°à³à²µà²¹à²£à³† ಸà³à²¥à²—ಿತಗೊಂಡಿದೆ. ಈ ಸಮಸà³à²¯à³†à²¯à²¨à³à²¨à³ ಡೆವಲಪರà³â€Œà²—ಳಿಗೆ ವರದಿ ಮಾಡಿ." + }, + "ERROR_NETWORK_FAILURE": { + "message": "ನೆಟà³â€Œà²µà²°à³à²•à³â€Œà²—ೆ ಸಂಪರà³à²•à²—ೊಳà³à²³à²²à²¾à²—ಲಿಲà³à²². ದಯವಿಟà³à²Ÿà³ ನಿಮà³à²® ಸಾಧನವೠಆನà³â€Œà²²à³ˆà²¨à³ ಆಗಿದೆಯೇ ಎಂದೠಪರಿಶೀಲಿಸಿ." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "ನೀವೠChrome ಗೆ ಸೈನೠಇನೠಮಾಡಿಲà³à²². ಸೈನೠಇನೠಮಾಡಿ ಹಾಗೂ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "ನೀವೠಆ ಕà³à²°à²¿à²¯à³†à²¯à²¨à³à²¨à³ ನಿರà³à²µà²¹à²¿à²¸à²²à³ ಅನà³à²®à²¤à²¿à²¯à²¨à³à²¨à³ ಹೊಂದಿಲà³à²²." + }, + "ERROR_NOT_FOUND": { + "message": "ವಿನಂತಿಸಲಾದ ವಿಷಯ ಅಸà³à²¤à²¿à²¤à³à²µà²¦à²²à³à²²à²¿à²²à³à²²." + }, + "ERROR_P2P_FAILURE": { + "message": "ಹೋಸà³à²Ÿà³â€Œ ಅನà³à²¨à³ ತಲà³à²ªà²²à³ ಸಾಧà³à²¯à²µà²¿à²²à³à²². ಇದಕà³à²•à³† ಬಹà³à²¶à²ƒ ನೀವೠಬಳಸà³à²¤à³à²¤à²¿à²°à³à²µ ಕಾನà³à²«à²¿à²—ರೇಶನೠನೆಟà³â€Œà²µà²°à³à²•à³ ಕಾರಣವಾಗಿರಬಹà³à²¦à³." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "ಈ ಸೇವೆಯೠತಾತà³à²•à²¾à²²à²¿à²•à²µà²¾à²—ಿ ಲಭà³à²¯à²µà²¿à²²à³à²². ನಂತರ ಮತà³à²¤à³Šà²®à³à²®à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "ERROR_UNEXPECTED": { + "message": "ಅನಿರೀಕà³à²·à²¿à²¤ ದೋಷವೊಂದೠಸಂಭವಿಸಿದೆ. ಈ ಸಮಸà³à²¯à³†à²¯à²¨à³à²¨à³ ಡೆವಲಪರà³â€Œà²—ಳಿಗೆ ವರದಿ ಮಾಡಿ." + }, + "EXIT_FULL_SCREEN": { + "message": "ಪೂರà³à²£à²ªà²°à²¦à³†à²¯à²¿à²‚ದ ನಿರà³à²—ಮಿಸಿ" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "ಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಅನà³à²¨à³ ಮರà³à²¹à³Šà²‚ದಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಲಿಲà³à²². ನೀವೠಈಗಲೂ ದೋಷ ವರದಿಯನà³à²¨à³ ಕಳà³à²¹à²¿à²¸à²¬à²¹à³à²¦à³." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "ಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಮರà³à²¹à³Šà²‚ದಿಸಿ. ನೀವೠಯಾವà³à²¦à³‡ ಉಳಿಸದ ಕೆಲಸವನà³à²¨à³ ಕಳೆದà³à²•à³Šà²³à³à²³à³à²µà²¿à²°à²¿." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "ನನಗೆ ಅಪà³à²²à²¿à²•à³†à³•à²¶à²¨à³ ತೆರೆಯಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "ಅಪà³à²²à²¿à²•à³†à³•à²¶à²¨à³ ತà³à²‚ಬಾ ನಿಧಾನವಾಗಿದೆ." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "ನನà³à²¨ Google ಡà³à²°à³ˆà²µà³ ಫೈಲà³â€Œà²—ಳನà³à²¨à³ ನನಗೆ ತೆರೆಯಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "ನನà³à²¨ ಉಳಿಸಲಾದ ಫೈಲà³â€Œà²—ಳನà³à²¨à³ Google ಡà³à²°à³ˆà²µà³â€Œà²¨à²²à³à²²à²¿ ಆನà³â€Œà²²à³ˆà²¨à³â€Œà²¨à²²à³à²²à²¿ ವೀಕà³à²·à²¿à²¸à²²à³ ನನಗೆ ಸಾಧà³à²¯à²µà²¿à²²à³à²²." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "ನನà³à²¨ ಕೀಬೋರà³à²¡à³ ಅಥವಾ ಮೌಸà³â€Œà²—ಳಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ನಾನೠಸಮಸà³à²¯à³†à²—ಳನà³à²¨à³ ಎದà³à²°à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³à²¦à³‡à²¨à³†." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "ನಿಮà³à²® ಸಮಸà³à²¯à³†à²¯à²¨à³à²¨à³ ಪರಿಹರಿಸಲೠನಮಗೆ ಸಹಾಯ ಮಾಡಲà³, ಎಲà³à²²à²¿ ತಪà³à²ªà³ ಸಂಭವಿಸಿದೆ ಎಂಬà³à²¦à²¨à³à²¨à³ ನಮಗೆ ತಿಳಿಸಿ:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "ಬೇರೆ à²à²¨à³‹ ಆಗಿದೆ." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "ಆಯà³à²•à³†à²®à²¾à²¡à²¿..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "ಹೆಚà³à²šà²¿à²¨ ಮಾಹಿತಿಗಾಗಿ ನಾವೠನಿಮಗೆ ಸಂಪರà³à²•à²¿à²¸à²²à³ ಅನà³à²®à²¤à²¿à²¸à²²à³, ನೀವೠಸಲà³à²²à²¿à²¸à³à²µ ಯಾವà³à²¦à³‡ ಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³†à²¯à²²à³à²²à²¿ ನಿಮà³à²® ಇಮೇಲೠವಿಳಾಸವನà³à²¨à³ ಸೇರಿಸಲಾಗà³à²µà³à²¦à³." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "ಸಮಸà³à²¯à³† ವರದಿಮಾಡಿ" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "ನಿಮà³à²® ಸಮಸà³à²¯à³†à²¯à²¨à³à²¨à³ ಪರಿಹರಿಸà³à²µà²²à³à²²à²¿ ನಮಗೆ ಸಹಾಯ ಮಾಡಲೠಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಲಾಗà³â€Œà²—ಳನà³à²¨à³ ಸೇರಿಸಿ (ಲಾಗà³â€Œà²—ಳೠಖಾಸಗಿ ಮಾಹಿತಿಯನà³à²¨à³ ಒಳಗೊಂಡಿರಬಹà³à²¦à³)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "ಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಲಾಗà³â€Œà²—ಳà³, ನಿಮà³à²® ಗà³à²°à³à²¤à³ (ಇಮೇಲೠವಿಳಾಸ) ಮತà³à²¤à³ Google ಡà³à²°à³ˆà²µà³â€Œà²¨à²²à³à²²à²¿à²¨ ಫೈಲà³â€Œà²—ಳೠಹಾಗೂ ಫೋಲà³à²¡à²°à³â€Œà²—ಳ ಹೆಸರೠಮತà³à²¤à³ ಗà³à²£à²²à²•à³à²·à²£à²—ಳೠಸೇರಿದಂತೆ ಖಾಸಗಿ ಮಾಹಿತಿಯನà³à²¨à³ ಒಳಗೊಂಡಿರಬಹà³à²¦à³." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ನೀವೠವರದಿ ಮಾಡà³à²¤à³à²¤à²¿à²°à³à²µ ಸಮಸà³à²¯à³†à²¯à²¨à³à²¨à³ ವಿಶà³à²²à³‡à²·à²¿à²¸à²²à³ ಮಾತà³à²° ಈ ಮಾಹಿತಿಯನà³à²¨à³ ಬಳಸಲಾಗà³à²µà³à²¦à³, ಇದೠನಿಮà³à²® ವರದಿಯನà³à²¨à³ ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¿à²°à³à²µà²µà²°à²¿à²—ೆ ಮಾತà³à²° ಲಭà³à²¯à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಇದನà³à²¨à³ 30 ಕà³à²•à²¿à²‚ತ ಹೆಚà³à²šà³ ದಿನಗಳವರೆಗೆ ಉಳಿಸಿಕೊಳà³à²³à²²à²¾à²—à³à²µà³à²¦à²¿à²²à³à²²." + }, + "FOOTER_CONNECTING": { + "message": "ಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†..." + }, + "FOOTER_WAITING": { + "message": "ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ನಿರೀಕà³à²·à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 ಮತà³à²¤à³ ಮೇಲà³à²ªà²Ÿà³à²Ÿ) ಗೆ" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP ಮತà³à²¤à³ ಮೇಲà³à²ªà²Ÿà³à²Ÿ) ಗೆ" + }, + "FULL_SCREEN": { + "message": "ಪೂರà³à²£ ಪರದೆ" + }, + "GET_STARTED": { + "message": "ಪà³à²°à²¾à²°à²‚ಭ" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "ಸಮà³à²®à²¤à²¿à²¸à³" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "ನಿರಾಕರಿಸà³" + }, + "HELP": { + "message": "ಸಹಾಯ" + }, + "HOME_ACCESS_BUTTON": { + "message": "ಪà³à²°à²µà³‡à²¶" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "ಹಂಚಲಾದ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ವೀಕà³à²·à²¿à²¸à²¿ ಮತà³à²¤à³ ನಿಯಂತà³à²°à²¿à²¸à²¿." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "ನೀವೠChrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಬಳಸಿ ಸà³à²°à²•à³à²·à²¿à²¤à²µà²¾à²—ಿ ಈ ಕಂಪà³à²¯à³‚ಟರೠಪà³à²°à²µà³‡à²¶à²¿à²¸à²¬à²¹à³à²¦à³." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN ಬದಲಾಯಿಸà³" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ಪà³à²°à²¸à³à²¤à³à²¤ ಬೇರೆ ಖಾತೆಯ ಅಡಿಯಲà³à²²à²¿ ಹಂಚಿಕೊಳà³à²³à²²à²¾à²—ಿದೆ." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ವೀಕà³à²·à²¿à²¸à²¿/ಸಂಪಾದಿಸಿ" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ಒಬà³à²¬ ಅಥವಾ ಹೆಚà³à²šà²¿à²¨ ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ಳೠಯಾವà³à²¦à³‡ PIN ಅನà³à²¨à³ ನಮೂದಿಸದೆಯೇ ಸಂಪರà³à²•à²—ೊಳà³à²³à²²à³ ಕಾನà³à²«à²¿à²—ರೠಮಾಡಲಾಗಿದೆ." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರೠಪà³à²°à²µà³‡à²¶à²¿à²¸à²²à³ ನೀವೠChrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಬಳಸà³à²µà³à²¦à²¾à²¦à²°à³† ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿರà³à²µà³à²¦à³ ಅತà³à²¯à²µà²¶à³à²¯à²•." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ" + }, + "HOME_SHARE_BUTTON": { + "message": "ಹಂಚಿಕೊಳà³à²³à³" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "ವೀಕà³à²·à²¿à²¸à²²à³ ಮತà³à²¤à³ ನಿಯಂತà³à²°à²¿à²¸à²²à³ ಮತà³à²¤à³Šà²‚ದೠಬಳಕೆದಾರರಿಗೆ ಈ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ಹಂಚಿ." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ಈ ವೈಶಿಷà³à²Ÿà³à²¯à²µà³ ಇನà³à²¨à³‚ ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ಲಭà³à²¯à²µà²¿à²²à³à²²)" + }, + "HOST_CATEGORY": { + "message": "ಹೋಸà³à²Ÿà³" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ೆ ಪà³à²°à²µà³‡à²¶ ನಿರಾಕರಿಸಲಾಗಿದೆ: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "ಕà³à²²à³ˆà²‚ಟೠಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—ಿದೆ: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "ಕà³à²²à³ˆà²‚ಟೠಸಂಪರà³à²• ರದà³à²¦à³à²®à²¾à²¡à²²à²¾à²—ಿದೆ: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ಾಗಿ ಚಾನಲೠIP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "ಬೇರೆ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ರಿಮೋಟà³â€Œ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲà³, ಅಲà³à²²à²¿ Chrome ರಿಮೋಟà³â€Œ ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³â€Œâ€Œ ಸà³à²¥à²¾à²ªà²¿à²¸à²¿ ಹಾಗೂ “$1$†ಕà³à²²à²¿à²•à³â€Œ ಮಾಡಿ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "ನೀವೠಯಾವà³à²¦à³‡ ಕಂಪà³à²¯à³‚ಟರà³â€Œ ಅನà³à²¨à³ ನೋಂದಾಯಿಸಿಲà³à²². ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ರಿಮೋಟà³â€Œ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲà³, ಅಲà³à²²à²¿ Chrome ರಿಮೋಟà³â€Œ ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³â€Œâ€Œ ಸà³à²¥à²¾à²ªà²¿à²¸à²¿ ಹಾಗೂ “$1$†ಕà³à²²à²¿à²•à³â€Œ ಮಾಡಿ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "ನೀವೠಈ ಹಿಂದೆ $1$ ($2$) ನಂತೆ ಸೈನೠಇನೠಮಾಡಿರà³à²µà²¿à²°à²¿. ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಳ ಮೂಲಕ ಆ ಖಾತೆಯಲà³à²²à²¿ ಪà³à²°à²µà³‡à²¶à²¿à²¸à²²à³, ಆ ಖಾತೆಯೊಂದಿಗೆ $3$Google Chrome ಗೆ ಸೈನೠಇನೠಮಾಡಿ$4$ ಮತà³à²¤à³ Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಅನà³à²¨à³ ಮರà³à²¸à³à²¥à²¾à²ªà²¿à²¸à²¿.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "ಸಾಫà³à²Ÿà³â€Œà²µà³‡à²°à³ ಅಪà³â€Œà²¡à³‡à²Ÿà³â€Œà²—ಳೠಸಾಮಾನà³à²¯à²µà²¾à²—ಿ ಸà³à²µà²¯à²‚ಚಾಲಿತವಾಗಿ ನಡೆಯà³à²¤à³à²¤à²¦à³†, ಆದರೆ ಕೆಲವೠಅಪರೂಪ ಸಂದರà³à²­à²—ಳಲà³à²²à²¿ ವಿಫಲವಾಗಬಹà³à²¦à³. ಸಾಫà³à²Ÿà³â€Œà²µà³‡à²°à³â€Œà²¨ ನವೀಕರಣವೠಕೆಲವೠನಿಮಿಷಗಳಿಗಿಂತಲೂ ಹೆಚà³à²šà²¾à²—ಿ ತೆಗೆದà³à²•à³Šà²³à³à²³à²¬à²¾à²°à²¦à³ ಮತà³à²¤à³ ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ರಿಮೋಟೠಆಗಿ ಸಂಪರà³à²•à²—ೊಂಡಾಗ ಮಾಡಬಹà³à²¦à³." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ ನಲà³à²²à²¿ Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ದಿನಾಂಕ ಮà³à²•à³à²¤à²¾à²¯à²—ೊಂಡಿದೆ ಮತà³à²¤à³ ನವೀಕರಿಸಬೇಕಾಗಿದೆ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳೠಹಾಗೂ ಕà³à²°à³à²¯à²¾à²¶à³ ವರದಿಗಳನà³à²¨à³ ಸಂಗà³à²°à²¹à²¿à²¸à²²à³ ಅನà³à²®à²¤à²¿ ನೀಡà³à²µ ಮೂಲಕ Chrome ರಿಮೋಟà³â€Œ ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³â€Œâ€Œ ಸà³à²§à²¾à²°à²¿à²¸à²²à³ ನಮಗೆ ಸಹಾಯ ಮಾಡಿ." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ಪà³à²°à²µà³‡à²¶à²µà²¨à³à²¨à³ ರಕà³à²·à²¿à²¸à²²à³, ದಯವಿಟà³à²Ÿà³ $1$ಕನಿಷà³à²Ÿ ಆರೠಅಂಕೆಗಳ$2$ PIN ಅನà³à²¨à³ ಆರಿಸಿ. ಬೇರೆ ಸà³à²¥à²¾à²¨à²¦à²¿à²‚ದ ಸಂಪರà³à²•à²¿à²¸à³à²µà²¾à²— ಈ PIN ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "ರಿಮೋಟೠಪà³à²°à²µà³‡à²¶ ಸೇವೆಯನà³à²¨à³ ಪà³à²°à²¾à²°à²‚ಭಿಸಲೠವಿಫಲವಾಗಿದೆ." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³ ಸà³à²¥à²¾à²ªà²•à²µà²¨à³à²¨à³ Chrome ಡೌನà³â€Œà²²à³‹à²¡à³ ಮಾಡà³à²¤à³à²¤à²¿à²¦à³†. ಡೌನà³â€Œà²²à³‹à²¡à³ ಪೂರà³à²£à²—ೊಂಡಾಗ ಮà³à²‚ದà³à²µà²°à²¿à²¯à³à²µ ಮà³à²¨à³à²¨ ಸà³à²¥à²¾à²ªà²•à²µà²¨à³à²¨à³ ರನà³â€Œ ಮಾಡಿ." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "ಮà³à²‚ದà³à²µà²°à³†à²¯à³à²µ ಮೊದಲೠದಯವಿಟà³à²Ÿà³ ಸà³à²¥à²¾à²ªà²•à²µà²¨à³à²¨à³ ಚಲಿಸಿ." + }, + "HOST_SETUP_STARTED": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಾಗಿ ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "ದಯವಿಟà³à²Ÿà³ ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರà³â€Œà²¨ ವಿದà³à²¯à³à²¤à³ ನಿರà³à²µà²¹à²£à²¾ ಸೆಟà³à²Ÿà²¿à²‚ಗà³â€Œà²—ಳನà³à²¨à³ ಪರಿಶೀಲಿಸಿ ಮತà³à²¤à³ ತಟಸà³à²¥à²µà²¾à²—ಿರà³à²µà²¾à²— ಅದನà³à²¨à³ ನಿದà³à²°à³†à²—ೆ ಕಾನà³à²«à²¿à²—ರೠಮಾಡಲಾಗಿಲà³à²² ಎಂಬà³à²¦à²¨à³à²¨à³ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²¿." + }, + "HOST_SETUP_STARTING": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಾಗಿ ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†..." + }, + "HOST_SETUP_STOPPED": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಾಗಿ ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ." + }, + "HOST_SETUP_STOPPING": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²¨ ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ರಿಮೋಟೠಪà³à²°à²µà³‡à²¶à²µà²¨à³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲೠವಿಫಲವಾಗಿದೆ. ದಯವಿಟà³à²Ÿà³ ನಂತರ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³ ಸà³à²¥à²¾à²ªà²• ಡೌನà³â€Œà²²à³‹à²¡à³ ಮಾಡà³à²µ ಮೂಲಕ, ನೀವೠGoogle $1$ಸೇವಾ ನಿಯಮಗಳನà³à²¨à³$4 ಒಪà³à²ªà³à²¤à³à²¤à³€à²°à²¿.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "ನಿಮà³à²® PIN ಅನà³à²¨à³ ನವೀಕರಿಸಲಾಗಿದೆ." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN ಅನà³à²¨à³ ನವೀಕರಿಸಲೠವಿಫಲವಾಗಿದೆ, ನಂತರ ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಾಗಿ PIN ಅನà³à²¨à³ ನವೀಕರಿಸಲಾಗಿದೆ…" + }, + "HOST_STARTED": { + "message": "ಈ ಬಳಕೆದಾರರಿಗಾಗಿ ಹೋಸà³à²Ÿà³ ಪà³à²°à²¾à²°à²‚ಭಿಸಲಾಗಿದೆ: %1." + }, + "HOST_STOPPED": { + "message": "ಹೋಸà³à²Ÿà³ ನಿಲà³à²²à²¿à²¸à²²à²¾à²—ಿದೆ." + }, + "IDLE_CONTINUE": { + "message": "ಮà³à²‚ದà³à²µà²°à²¿à²¸à³" + }, + "IDLE_DISCONNECT": { + "message": "ಇದೀಗ ಸಂಪರà³à²•à²•à²¡à²¿à²¤à²—ೊಳಿಸà³" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "ನಿಮà³à²® $1$ ಅವಧಿಯೠಸದà³à²¯ ನಿಷà³à²•à³à²°à²¿à²¯à²µà²¾à²—ಿದೆ ಮತà³à²¤à³ ಶೀಘà³à²°à²¦à²²à³à²²à²¿à²¯à³‡ ಸಂಪರà³à²•à²•à²¡à²¿à²¤à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³ ಸà³à²¥à²¾à²ªà²• ಡೌನà³â€Œà²²à³‹à²¡à³ ಮಾಡಿ" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "ನಿಮà³à²® ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹಂಚà³à²µà²¿à²•à³†à²¯à²¨à³à²¨à³ ಪà³à²°à²¾à²°à²‚ಭಿಸಲà³, ನಿಮಗೆ ಸಹಾಯ ಮಾಡà³à²¤à³à²¤à²¿à²°à³à²µ ವà³à²¯à²•à³à²¤à²¿à²—ೆ ಪà³à²°à²µà³‡à²¶ ಕೋಡೠಅನà³à²¨à³ ಕೆಳಗೆ ನೀಡಿ." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "ಒಮà³à²®à³† ಕೋಡೠಅನà³à²¨à³ ನಮೂದಿಸಿದ ಬಳಿಕ ನಿಮà³à²® ಹಂಚಿಕೆಯ ಅವಧಿಯೠಪà³à²°à²¾à²°à²‚ಭಗೊಳà³à²³à³à²¤à³à²¤à²¦à³†." + }, + "INVALID_PIN": { + "message": "ಆರೠಅಥವಾ ಇನà³à²¨à²·à³à²Ÿà³ ಅಂಕೆಗಳನà³à²¨à³ ಒಳಗೊಂಡಿರà³à²µ PIN ಅನà³à²¨à³ ನಮೂದಿಸಿ." + }, + "IT2ME_FIRST_RUN": { + "message": "ರಿಮೋಟೠತಂತà³à²°à²œà³à²žà²¾à²¨ ಬೆಂಬಲಕà³à²•à²¾à²—ಿ, ಬಳಕೆದಾರರಿಂದ ಬಳಕೆದಾರ ಪರದೆಯ ಹಂಚà³à²µà²¿à²•à³†." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "ಕೀಬೋರà³à²¡à³ ವಿನà³à²¯à²¾à²¸à²—ಳà³" + }, + "LABEL_CONNECTED": { + "message": "ಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—ಿದೆ:" + }, + "LAST_ONLINE": { + "message": "$1$ (ಕೊನೆಯ ಬಾರಿಯ ಆನà³â€Œâ€Œà²²à³ˆà²¨à³ $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "ಹೇಗೆ ಎಂಬà³à²¦à²¨à³à²¨à³ ತಿಳಿದà³à²•à³Šà²³à³à²³à²¿." + }, + "LEARN_MORE": { + "message": "ಮತà³à²¤à²·à³à²Ÿà³ ತಿಳಿಯಿರಿ." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³ ಪà³à²°à²¾à²¶à²¸à³à²¤à³à²¯à²—ಳà³" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome ರಿಮೋಟà³\nಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³ ಅಸà³à²¥à²¾à²ªà²•" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win ಕೀಗಾಗಿ (Mac ನಲà³à²²à²¿à²¨ ⌘) ಬಲಭಾಗದ Ctrl ಬಳಸಿ" + }, + "MAXIMIZE_WINDOW": { + "message": "ವಿಂಡೋ ಹಿರಿದಾಗಿಸಿ" + }, + "ME2ME_FIRST_RUN": { + "message": "ಎಲà³à²²à²¿à²‚ದ ಬೇಕಾದರೂ ನಿಮà³à²® ಸà³à²µà²‚ತ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ಪà³à²°à²µà³‡à²¶à²¿à²¸à²¿." + }, + "MESSAGE_GENERATING": { + "message": "ಪà³à²°à²µà³‡à²¶ ಕೋಡೠಅನà³à²¨à³ ರಚಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†â€¦" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "ನಿಮà³à²® Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಅವಧಿಯೠಕೊನೆಗೊಂಡಿದೆ." + }, + "MESSAGE_SHARED": { + "message": "$1$ ಅವರೊಂದಿಗೆ ನಿಮà³à²® ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಅನà³à²¨à³ ಪà³à²°à²¸à³à²¤à³à²¤ ಹಂಚಿಕೊಳà³à²³à²²à²¾à²—ಿದೆ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "ವಿಂಡೋ ಕಿರಿದಾಗಿಸಿ" + }, + "MODE_AUTHORIZE": { + "message": "ದೃಢೀಕರಿಸಿ" + }, + "MODE_IT2ME": { + "message": "ರಿಮೋಟೠಸಹಾಯಕ" + }, + "MODE_ME2ME": { + "message": "ನನà³à²¨ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಳà³" + }, + "NEW_WINDOW": { + "message": "ಹೊಸ ವಿಂಡೋ..." + }, + "NO_PAIRED_CLIENTS": { + "message": "ಎಲà³à²²à²¾ ಜೋಡಿ ಮಾಡಲಾದ ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ಳನà³à²¨à³ ಅಳಿಸಲಾಗಿದೆ." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "ಈ ಪà³à²²à³à²¯à²¾à²Ÿà³â€Œà²«à²¾à²°à³à²®à³â€Œà²¨à²²à³à²²à²¿ ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಸಂಯೋಜನೆಯನà³à²¨à³ ಬೆಂಬಲಿಸà³à²µà³à²¦à²¿à²²à³à²². ನೀವೠಈಗಲೂ ಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಅನà³à²¨à³ ಬಳಸಬಹà³à²¦à³, ಆದರೆ ಬಳಕೆದಾರ ಅನà³à²­à²µà²µà²¨à³à²¨à³ ಕಡೆಗಣಿಸಲಾಗà³à²µà³à²¦à³." + }, + "OFFLINE": { + "message": "$1$ (ಆಫà³â€Œà²²à³ˆà²¨à³)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "ಹೋಸà³à²Ÿà³ ಪà³à²°à²¾à²°à²‚ಭಿಸà³à²µà²¿à²•à³† ವಿಫಲವಾಗಿದೆ." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "ಅಮಾನà³à²¯ ಹೋಸà³à²Ÿà³ ಕಾನà³à²«à²¿à²—ರೇಶನà³." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "ಅಮಾನà³à²¯ ಹೋಸà³à²Ÿà³ ಮಾಲೀಕರ ಡೊಮೇನà³." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ಅಮಾನà³à²¯ ಹೋಸà³à²Ÿà³ à²à²¡à²¿." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "ಹೋಸà³à²Ÿà³ ಅನà³à²¨à³ ಅಮಾನà³à²¯ OAuth ರà³à²œà³à²µà²¾à²¤à³à²—ಳೊಂದಿಗೆ ಕಾನà³à²«à²¿à²—ರೠಮಾಡಲಾಗಿದೆ." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "ಪರದೆ ಮೋಡೠಅನà³à²¨à³ ಬೆಂಬಲಿಸಲೠಬಳಕೆದಾರ ನಿರà³à²¦à²¿à²·à³à²Ÿ ಅವಧಿಯಲà³à²²à²¿ ಹೋಸà³à²Ÿà³ ರನೠಮಾಡà³à²µà³à²¦à²•à³à²•à³† ಬದಲಾಯಿಸà³à²µ ಮೂಲಕ ಕನà³à²¸à³‹à²²à³ ಲಾಜಿಕೠಪರದೆಯಲà³à²²à²¿ ರನೠಆಗà³à²¤à³à²¤à²¿à²°à³à²µ ಹೋಸà³à²Ÿà³ ಸà³à²¥à²—ಿತಗೊಂಡಿದೆ." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ಕಾರà³à²¯à²¨à³€à²¤à²¿ ಬದಲಾವಣೆಯಿಂದ ಖಾತೆಯಲà³à²²à²¿ ತೆಗೆದà³à²•à³Šà²³à³à²³à²²à³, ಹೋಸà³à²Ÿà³ ಮರà³à²ªà³à²°à²¾à²°à²‚ಭಿಸà³à²¤à³à²¤à²¿à²¦à³à²¦à²¾à²°à³†." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ಹೋಸà³à²Ÿà³ ಕಾರà³à²¯à²¨à³€à²¤à²¿à²¯à²¨à³à²¨à³ ಓದಲೠವಿಫಲವಾಗಿದà³à²¦à²¾à²°à³†." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ಹೋಸà³à²Ÿà³ ಆಫà³â€Œà²²à³ˆà²¨à³â€Œ ಆಗಿದà³à²¦à²¾à²°à³†" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದ ಹೋಸà³à²Ÿà³ ದೋಷ: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "ಅಮಾನà³à²¯ ಹೋಸà³à²Ÿà³ ಮಾಲೀಕರà³." + }, + "OK": { + "message": "ಸರಿ" + }, + "OPTIONS_MENU": { + "message": "ಆಯà³à²•à³†à²—ಳà³" + }, + "OUTGOING_CONNECTIONS": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²¨à²¿à²‚ದ" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "ಕೆಳಗಿನ ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ಳನà³à²¨à³ ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²¨à³Šà²‚ದಿಗೆ ಜೋಡಿ ಮಾಡಲಾಗಿದೆ ಮತà³à²¤à³ ಅವರೠPIN ಪೂರೈಸದೆಯೇ ಸಂಪರà³à²•à²¿à²¸à²¬à²¹à³à²¦à³. ನೀವೠಯಾವà³à²¦à³‡ ಸಮಯದಲà³à²²à²¾à²¦à²°à³‚ ವೈಯಕà³à²¤à²¿à²•à²µà²¾à²—ಿ ಇಲà³à²²à²µà³‡ ಎಲà³à²² ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ಳಿಗಾಗಿ ಈ ಅನà³à²®à²¤à²¿à²¯à²¨à³à²¨à³ ಹಿಂತೆಗೆದà³à²•à³Šà²³à³à²³à²¬à²¹à³à²¦à³." + }, + "PAIRED_CLIENT_DATE": { + "message": "ಜೋಡಿ ಮಾಡಿದ ದಿನಾಂಕ" + }, + "PAIRED_CLIENT_NAME": { + "message": "ಕà³à²²à³ˆà²‚ಟà³" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "ಎರಡೠಪೆಟà³à²Ÿà²¿à²—ೆಗಳಲà³à²²à²¿à²¯à³‚ ಒಂದೇ PIN ಅನà³à²¨à³ ನಮೂದಿಸಿ." + }, + "PIN_MESSAGE": { + "message": "$1$ ಗಾಗಿ ನಿಮà³à²® PIN ಅನà³à²¨à³ ನಮೂದಿಸಿ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "ದಯವಿಟà³à²Ÿà³ ರಿಮೋಟೠಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಾಗಿ ನಿಮà³à²® PIN ನಮೂದಿಸಿ." + }, + "PRODUCT_DESCRIPTION": { + "message": "ಇಂಟರà³â€Œà²¨à³†à²Ÿà³ ಮೀರಿ ನಿಮà³à²® ಕಂಪà³à²¯à³‚ಟರà³â€Œâ€Œ ಸà³à²°à²•à³à²·à²¿à²¤à²µà²¾à²—ಿ ಪà³à²°à²µà³‡à²¶à²¿à²¸à²²à³ ಇತರ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಳನà³à²¨à³ ಪà³à²°à²µà³‡à²¶à²¿à²¸à²¿ ಅಥವಾ ಮತà³à²¤à³Šà²‚ದೠಬಳಕೆದಾರರನà³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à²¿." + }, + "PRODUCT_NAME": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome ಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³ ಸà³à²Ÿà³à²°à³€à²®à²¿à²‚ಗà³" + }, + "RECONNECT": { + "message": "ಮರà³à²¸à²‚ಪರà³à²•à²¿à²¸à³" + }, + "REMEMBER_PIN": { + "message": "ಈ ಸಾಧನದಿಂದ ಈ ಹೋಸà³à²Ÿà³â€Œà²—ೆ ಸಂಪರà³à²•à²¿à²¸à³à²¤à³à²¤à²¿à²°à³à²µà²¾à²— ಪಿನà³â€Œà²—ಾಗಿ ಮತà³à²¤à³† ಕೇಳಬೇಡ." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "ಮà³à²–à³à²¯ ಲೈಬà³à²°à²°à²¿" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಸಮಗà³à²°à³€à²•à²°à²£ ಪà³à²°à²•à³à²°à²¿à²¯à³†" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಹೋಸà³à²Ÿà³â€Œà²—ೆ ಆಜà³à²žà³†à²—ಳನà³à²¨à³ ನೀಡಲೠಅಪà³à²²à²¿à²•à³‡à²¶à²¨à³." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ಹೋಸà³à²Ÿà³ ಪà³à²°à²•à³à²°à²¿à²¯à³†" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "ರಿಮೋಟಿಂಗೠಹೋಸà³à²Ÿà³ ನಿರà³à²µà²¹à²£à³†à²—ಾಗಿ ಸà³à²¥à²³à²¿à³•à²¯ ಸಂದೇಶ ಹೋಸà³à²Ÿà³" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "ರಿಮೋಟೠನೆರವಿಗಾಗಿ ಸà³à²¥à²³à²¿à³•à²¯ ಸಂದೇಶ ಹೋಸà³à²Ÿà³" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "ಭದà³à²°à²¤à²¾ ಕೀ ರಿಮೋಟಿಂಗೠಪà³à²°à²•à³à²°à²¿à²¯à³†" + }, + "RESIZE_TO_CLIENT": { + "message": "ಹೊಂದಿಸà³à²µà³à²¦à²•à³à²•à³† ಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಅನà³à²¨à³ ಮರà³à²—ಾತà³à²°à²—ೊಳಿಸಿ" + }, + "RESTART_BUTTON": { + "message": "ಈಗ ಮರà³à²ªà³à²°à²¾à²°à²‚ಭಿಸà³" + }, + "RESTORE_WINDOW": { + "message": "ವಿಂಡೋ ಮರà³à²¸à³à²¥à²¾à²ªà²¿à²¸à²¿" + }, + "RETRY": { + "message": "ಮರà³à²ªà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿" + }, + "SCREEN_OPTIONS": { + "message": "ಪರದೆಯ ಆಯà³à²•à³†à²—ಳà³" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del ಕಳà³à²¹à²¿à²¸à³" + }, + "SEND_FEEDBACK": { + "message": "ಸಮಸà³à²¯à³† ವರದಿಮಾಡಿ..." + }, + "SEND_KEYS": { + "message": "ಕೀಲಿಗಳನà³à²¨à³ ಕಳà³à²¹à²¿à²¸à²¿" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn ಕಳà³à²¹à²¿à²¸à³" + }, + "SERVICE_DESCRIPTION": { + "message": "ಈ ಸೇವೆಯೠChrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಕà³à²²à³ˆà²‚ಟà³â€Œà²—ಳಿಂದ ಒಳಬರà³à²µ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²¤à³à²¤à²¦à³†." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "ಈ ಸೆಟà³à²Ÿà²¿à²‚ಗೠಅನà³à²¨à³ ನಿಮà³à²® ಡೊಮೇನೠನೀತಿಯ ಮೂಲಕ ನಿರà³à²µà²¹à²¿à²¸à²²à²¾à²—ಿದೆ." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "ಹಂಚಿಕೊಳà³à²³à³" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ರದà³à²¦à³à²®à²¾à²¡à³" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "ನಿಯಂತà³à²°à²£à²µà²¨à³à²¨à³ ವೀಕà³à²·à²¿à²¸à²²à³ ನೀವೠಮತà³à²¤à³Šà²¬à³à²¬ ಬಳಕೆದಾರರಿಗೆ ಈ ಕಂಪà³à²¯à³‚ಟರೠಅನà³à²¨à³ ಹಂಚಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾?" + }, + "SHOW_STATS": { + "message": "ಅಂಕಿಅಂಶಗಳನà³à²¨à³ ತೋರಿಸಿ" + }, + "SHOW_STATS_WITH_RTT": { + "message": "ಅಂಕಿಅಂಶಗಳನà³à²¨à³ ತೋರಿಸಿ (ಸಂಪರà³à²•: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ಹೊಂದಿಸಲೠಕà³à²—à³à²—ಿಸಿ" + }, + "SIGN_IN_BUTTON": { + "message": "ಸೈನೠಇನà³" + }, + "SIGN_OUT_BUTTON": { + "message": "ಸೈನೠಔಟà³" + }, + "STOP_SHARING_BUTTON": { + "message": "ಹಂಚಿಕೆಯನà³à²¨à³ ನಿಲà³à²²à²¿à²¸à²¿" + }, + "SURVEY_INVITATION": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಸà³à²§à²¾à²°à²£à³†à²—ೆ ಸಹಾಯ ಮಾಡಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾? $1$ಸಮೀಕà³à²·à³† ತೆಗೆದà³à²•à³Šà²³à³à²³à²¿.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ಸಮಯ" + }, + "TOGGLE_STATS": { + "message": "ಅಂಕಿಅಂಶಗಳನà³à²¨à³ ತೋರಿಸಿ" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ ಗೆ ಸಂಪರà³à²•à²¿à²¸à²¿", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ಈ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ೆ ರಿಮೋಟೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ" + }, + "TOOLTIP_REFRESH": { + "message": "ಹೋಸà³à²Ÿà³â€Œà²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ರಿಫà³à²°à³†à²¶à³ ಮಾಡಿ" + }, + "TOOLTIP_RENAME": { + "message": "ಕಂಪà³à²¯à³‚ಟರೠಹೆಸರನà³à²¨à³ ಸಂಪಾದಿಸಿ" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (ದಿನಾಂಕ ಮà³à²•à³à²¤à²¾à²¯à²—ೊಂಡಿದೆ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "ಖಾತೆ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಮೂಲಕ ಪà³à²°à²µà³‡à²¶à²µà²¨à³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à²²à³, ಕೆಳಗೆ ನಿಮà³à²® ಖಾತೆ ಮತà³à²¤à³ PIN ಅನà³à²¨à³ ದೃಢೀಕರಿಸಿ." + }, + "WARNING_NAT_DISABLED": { + "message": "ಸೂಚನೆ: ನಿಮà³à²® ನೆಟà³â€Œà²µà²°à³à²•à³â€Œà²¨à³Šà²³à²—ಿರà³à²µ ಕಂಪà³à²¯à³‚ಟರà³â€Œà²—ಳ ನಡà³à²µà³† ಮಾತà³à²° ನೀತಿ ಸೆಟà³à²Ÿà²¿à²‚ಗà³â€Œà²—ಳೠಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à³à²¤à³à²¤à²µà³†." + }, + "WARNING_NOT_WINDOWED": { + "message": "ಗಮನಿಸಿ: ಎಲà³à²² ಕೀಬೋರà³à²¡à³ ಶಾರà³à²Ÿà³â€Œà²•à²Ÿà³â€Œà²—ಳೠಲಭà³à²¯à²µà²¿à²¦à³†à²¯à³‡ ಎಂದೠಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²²à³, ‘ವಿಂಡೊ ರೂಪದಲà³à²²à²¿ ತೆರೆಯಲà³â€™ Chrome ರಿಮೋಟೠಡೆಸà³à²•à³â€Œà²Ÿà²¾à²ªà³ ಅನà³à²¨à³ ನೀವೠಕಾನà³à²«à²¿à²—ರೠಮಾಡಬಹà³à²¦à³." + }, + "WHY_IS_THIS_SAFE": { + "message": "ಇದೠà²à²•à³† ಸà³à²°à²•à³à²·à²¿à²¤?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "ಕಾರà³à²¯à²¨à²¿à²°à³à²µà²¹à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³†..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ko/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ko/messages.json new file mode 100644 index 000000000000..e68ad526dfaf --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ko/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ë™ì˜ ë° ì„¤ì¹˜" + }, + "ACCESS_CODE": { + "message": "액세스 코드" + }, + "ACCESS_CODE_TIMER": { + "message": "액세스 코드가 $1$ì´ˆ í›„ì— ë§Œë£Œë©ë‹ˆë‹¤.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "문제 ì‹ ê³ " + }, + "ALL_CONNECTIONS": { + "message": "모든 ì—°ê²°" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN 확ì¸" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "취소" + }, + "CLEAR_HISTORY": { + "message": "ê¸°ë¡ ì‚­ì œ" + }, + "CLOSE": { + "message": "닫기" + }, + "CLOSE_PROMPT": { + "message": "ì´ íŽ˜ì´ì§€ë¥¼ 닫으면 Chrome ì›ê²© ë°ìŠ¤í¬í†± ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." + }, + "CLOSE_WINDOW": { + "message": "ì°½ 닫기" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$와(ê³¼)ì˜ ì›ê²© ì—°ê²°ì„ ì‚¬ìš©ì¤‘ì§€í•˜ì‹œê² ìŠµë‹ˆê¹Œ? ìƒê°ì´ 바뀌면 해당 컴퓨터ì—ì„œ ì—°ê²°ì„ ë‹¤ì‹œ 사용하ë„ë¡ ì„¤ì •í•´ì•¼ 합니다.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "ì—°ê²° 실패" + }, + "CONNECTION_FROM_HEADER": { + "message": "í´ë¼ì´ì–¸íŠ¸" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ì—°ê²° 기ë¡" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "보통" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "좋ìŒ" + }, + "CONNECTION_QUALITY_POOR": { + "message": "나ì¨" + }, + "CONNECTION_TO_HEADER": { + "message": "호스트" + }, + "CONNECT_ANYWAY": { + "message": "연결하기" + }, + "CONNECT_BUTTON": { + "message": "ì—°ê²°" + }, + "CONTINUE_BUTTON": { + "message": "계ì†" + }, + "CONTINUE_PROMPT": { + "message": "현재 ì´ ì»´í“¨í„°ë¥¼ 다른 사용ìžì™€ 공유하고 있습니다. ê³„ì† ê³µìœ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + }, + "CONTROLLER_NAME": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트 컨트롤러" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. All Rights Reserved." + }, + "CREDITS": { + "message": "í¬ë ˆë”§" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "ëª¨ë‘ ì‚­ì œ" + }, + "DELETE_PAIRED_CLIENT": { + "message": "ì‚­ì œ" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "계ì†í•˜ë ¤ë©´ ë‚´ ì»´í“¨í„°ì— í™•ìž¥ 액세스 ê¶Œí•œì„ ë¶€ì—¬í•´ì•¼ 합니다. ì´ ìž‘ì—…ì€ í•œë²ˆë§Œ 수행하면 ë©ë‹ˆë‹¤." + }, + "DESCRIPTION_CONNECT": { + "message": "액세스하려는 ì»´í“¨í„°ì˜ ì‚¬ìš©ìžì—게 '$1$'를 í´ë¦­í•˜ì—¬ 액세스 코드를 달ë¼ê³  요청하세요.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 사용하면 웹ì—ì„œ ë‚´ 컴퓨터를 안전하게 공유할 수 있습니다. 양쪽 ì‚¬ìš©ìž ëª¨ë‘ $1$ 페ì´ì§€ì— 있는 Chrome ì›ê²© ë°ìŠ¤í¬í†± ì•±ì„ ì‹¤í–‰í•´ì•¼ 합니다.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "ì›ê²© 호스트는 타사 웹사ì´íŠ¸ì— 대한 ì¸ì¦ì´ 필요합니다. 계ì†í•˜ë ¤ë©´ ì´ ì£¼ì†Œì— ì•¡ì„¸ìŠ¤í•  수 있ë„ë¡ Chrome ì›ê²© ë°ìŠ¤í¬í†±ì— 추가 ê¶Œí•œì„ í—ˆìš©í•´ì•¼ 합니다." + }, + "DISABLE_HOST": { + "message": "사용 중지" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "ì—°ê²° í•´ì œ" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± 서비스" + }, + "DURATION_HEADER": { + "message": "기간" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "ì´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 실행할 수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "ì¸ì¦ì— 실패했습니다. Chromeì— ë‹¤ì‹œ 로그ì¸í•˜ì„¸ìš”." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "ì¼ë¶€ 필수 구성요소가 누ë½ë˜ì—ˆìŠµë‹ˆë‹¤. ì†Œí”„íŠ¸ì›¨ì–´ì˜ ìµœì‹  ë²„ì „ì„ ì„¤ì¹˜í–ˆëŠ”ì§€ 확ì¸í•œ ë’¤ 다시 ì‹œë„해주세요." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "ë„¤íŠ¸ì›Œí¬ ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 기기가 다시 온ë¼ì¸ ìƒíƒœê°€ ë˜ë©´ ì•±ì„ ë‹¤ì‹œ 시작하겠습니다." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "ì›ê²© 컴퓨터가 ì„¸ì…˜ì„ ì´ˆê¸°í™”í•˜ëŠ” ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. 문제가 지ì†ë˜ë©´ 호스트를 다시 구성해 보시기 ë°”ëžë‹ˆë‹¤." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "ì›ê²© 컴퓨터가 ì—°ê²° ìš”ì²­ì— ì‘답하지 않습니다. 온ë¼ì¸ ìƒíƒœì¸ì§€ 확ì¸í•œ ë’¤ 다시 ì‹œë„í•´ 주세요." + }, + "ERROR_HOST_OVERLOAD": { + "message": "누군가 ìž˜ëª»ëœ PIN으로 ì—°ê²°ì„ ì‹œë„하여 ì›ê²© ì»´í“¨í„°ì— ëŒ€í•œ ì—°ê²°ì´ ì¼ì‹œì ìœ¼ë¡œ 차단ë˜ì—ˆìŠµë‹ˆë‹¤. ë‚˜ì¤‘ì— ë‹¤ì‹œ ì‹œë„í•´ 주세요." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "컴퓨터를 등ë¡í•˜ëŠ” ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "호환ë˜ì§€ 않는 프로토콜 ë²„ì „ì´ ê°ì§€ë˜ì—ˆìŠµë‹ˆë‹¤. 양쪽 컴퓨터 모ë‘ì—ì„œ 소프트웨어가 최신 버전ì¸ì§€ 확ì¸í•œ ë’¤ 다시 ì‹œë„í•´ 주세요." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "액세스 코드가 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 다시 ì‹œë„í•´ 주세요." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "ì •ì±… 설정ì—ì„œ ì´ ì»´í“¨í„°ë¥¼ Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트로 공유하는 ê²ƒì„ í—ˆìš©í•˜ì§€ 않습니다. ë„ì›€ì´ í•„ìš”í•˜ë©´ 시스템 관리ìžì—게 문ì˜í•˜ì„¸ìš”." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "ì›ê²© ì„¸ì…˜ì´ ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "ERROR_MISSING_PLUGIN": { + "message": "ì¼ë¶€ 필수 구성요소가 누ë½ë˜ì—ˆìŠµë‹ˆë‹¤. Chrome 최신 ë²„ì „ì„ ì‹¤í–‰í•˜ê³  있는지 확ì¸í•œ ë’¤ 다시 ì‹œë„í•´ 주세요." + }, + "ERROR_NACL_DISABLED": { + "message": "필수 구성요소가 ì¼ë¶€ 누ë½ë˜ì—ˆìŠµë‹ˆë‹¤. chrome://pluginsë¡œ ì´ë™í•˜ì—¬ Native Client를 사용하ë„ë¡ ì„¤ì •ë˜ì–´ 있는지 확ì¸í•´ 주시기 ë°”ëžë‹ˆë‹¤." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "필수 구성 요소가 ìž‘ë™ì´ 중지ë˜ì—ˆìŠµë‹ˆë‹¤. 개발ìžì—게 문제를 ì‹ ê³ í•´ 주세요." + }, + "ERROR_NETWORK_FAILURE": { + "message": "네트워í¬ì— ì—°ê²°í•  수 없습니다. 기기가 온ë¼ì¸ ìƒíƒœì¸ì§€ 확ì¸í•˜ì‹œê¸° ë°”ëžë‹ˆë‹¤." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Chromeì— ë¡œê·¸ì¸í•˜ì§€ 않았습니다. ë¡œê·¸ì¸ í›„ 다시 ì‹œë„하세요." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "ì´ ìž‘ì—…ì„ ìˆ˜í–‰í•  수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤." + }, + "ERROR_NOT_FOUND": { + "message": "요청한 개체가 없습니다." + }, + "ERROR_P2P_FAILURE": { + "message": "í˜¸ìŠ¤íŠ¸ì— ì—°ê²°í•  수 없습니다. 사용 ì¤‘ì¸ ë„¤íŠ¸ì›Œí¬ì˜ 구성 ë•Œë¬¸ì¼ ìˆ˜ 있습니다." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "서비스를 ì¼ì‹œì ìœ¼ë¡œ ì´ìš©í•  수 없습니다. ìž ì‹œ 후 다시 ì‹œë„í•´ 주세요." + }, + "ERROR_UNEXPECTED": { + "message": "예기치 ì•Šì€ ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 개발ìžì—게 문제를 ì‹ ê³ í•´ 주세요." + }, + "EXIT_FULL_SCREEN": { + "message": "전체화면 닫기" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "애플리케ì´ì…˜ì„ 재설정할 수 없지만 버그 보고서를 보낼 수는 있습니다." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "애플리케ì´ì…˜ì„ 재설정합니다. 저장하지 ì•Šì€ ìž‘ì—…ì„ ìžƒê²Œ ë©ë‹ˆë‹¤." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "애플리케ì´ì…˜ì´ 열리지 ì•ŠìŒ" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "애플리케ì´ì…˜ì´ 너무 ëŠë¦¼" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "ë‚´ Google ë“œë¼ì´ë¸Œ 파ì¼ì„ ì—´ 수 ì—†ìŒ" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Google ë“œë¼ì´ë¸Œì— ì €ìž¥ëœ íŒŒì¼ì„ 온ë¼ì¸ìœ¼ë¡œ ë³¼ 수 ì—†ìŒ" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "키보드나 ë§ˆìš°ìŠ¤ì— ë¬¸ì œê°€ 있ìŒ" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "ì–´ë–¤ 문제ì¸ì§€ ë§ì”€í•´ 주시면 ë¬¸ì œí•´ê²°ì— ë„ì›€ì´ ë©ë‹ˆë‹¤." + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "기타 문제" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "ì„ íƒâ€¦" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Googleì´ ë” ìžì„¸í•œ ë‚´ìš©ì„ í™•ì¸í•˜ê¸° 위해 ì—°ë½í•  수 있ë„ë¡, 제출한 ì˜ê²¬ì— 사용ìžì˜ ì´ë©”ì¼ ì£¼ì†Œë¥¼ í¬í•¨í•´ì£¼ì‹œê¸° ë°”ëžë‹ˆë‹¤." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "문제 ì‹ ê³ " + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "ë¬¸ì œí•´ê²°ì— ë„ì›€ì´ ë˜ë„ë¡ ì• í”Œë¦¬ì¼€ì´ì…˜ 로그를 í¬í•¨í•©ë‹ˆë‹¤(ë¡œê·¸ì— ë¹„ê³µê°œ ì •ë³´ê°€ í¬í•¨ë  수 있ìŒ)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "애플리케ì´ì…˜ 로그는 사용ìžì˜ ID(ì´ë©”ì¼ ì£¼ì†Œ)와 Google ë“œë¼ì´ë¸Œì— 있는 íŒŒì¼ ë° í´ë”ì˜ ì´ë¦„ê³¼ ì†ì„± ë“±ì˜ ë¹„ê³µê°œ 정보를 í¬í•¨í•  수 있습니다." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ì´ ì •ë³´ëŠ” ë³´ê³ ëœ ë¬¸ì œë¥¼ 진단하는 ë°ë§Œ 사용ë˜ê³  ë³´ê³ ì„œ 조사 담당ìžë§Œ ë³¼ 수 있으며, 30ì¼ ì´ë‚´ì— í기ë©ë‹ˆë‹¤." + }, + "FOOTER_CONNECTING": { + "message": "ì—°ê²° 중..." + }, + "FOOTER_WAITING": { + "message": "ì—°ê²° 대기 중..." + }, + "FOR_PLATFORM_MAC": { + "message": "Macìš©(OS X 10.6 ì´ìƒ)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windowsìš©(XP ì´ìƒ)" + }, + "FULL_SCREEN": { + "message": "전체화면" + }, + "GET_STARTED": { + "message": "시작하기" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "수ë½" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "거부" + }, + "HELP": { + "message": "ë„움ë§" + }, + "HOME_ACCESS_BUTTON": { + "message": "액세스" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "공유한 컴퓨터를 ë³´ê³  제어합니다." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 사용하여 ì»´í“¨í„°ì— ì•ˆì „í•˜ê²Œ 액세스할 수 있습니다." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN 변경" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "ì´ ì»´í“¨í„°ëŠ” 현재 다른 계정으로 공유ë˜ì–´ 있습니다." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "보기/수정" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "ì´ ì»´í“¨í„°ëŠ” í•œ ê°œ ì´ìƒì˜ í´ë¼ì´ì–¸íŠ¸ê°€ PINì„ ìž…ë ¥í•˜ì§€ ì•Šê³ ë„ ì—°ê²°í•  수 있ë„ë¡ êµ¬ì„±ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "ì›ê²© ì—°ê²° 사용" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 사용하여 ì»´í“¨í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ ì›ê²© ì—°ê²°ì„ ì‚¬ìš©í•˜ë„ë¡ ì„¤ì •í•´ì•¼ 합니다." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "ì›ê²© ì—°ê²° 사용중지" + }, + "HOME_SHARE_BUTTON": { + "message": "공유" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "다른 사용ìžê°€ ë³´ê³  제어할 수 있ë„ë¡ ì´ ì»´í“¨í„°ë¥¼ 공유합니다." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ì´ ì»´í“¨í„°ì—ì„œ 사용할 수 없는 기능입니다.)" + }, + "HOST_CATEGORY": { + "message": "호스트" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "%1 í´ë¼ì´ì–¸íŠ¸ì˜ 액세스가 거부ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "HOST_CLIENT_CONNECTED": { + "message": "ì—°ê²°ëœ í´ë¼ì´ì–¸íŠ¸: %1" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "ì—°ê²° í•´ì œëœ í´ë¼ì´ì–¸íŠ¸: %1" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "í´ë¼ì´ì–¸íŠ¸ìš© ì±„ë„ IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'" + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "다른 ì»´í“¨í„°ì— ì›ê²© ì—°ê²°ì„ ì‚¬ìš©í•˜ë ¤ë©´ Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 설치하고 '$1$' ë²„íŠ¼ì„ í´ë¦­í•˜ì„¸ìš”.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "등ë¡ëœ 컴퓨터가 없습니다. ì»´í“¨í„°ì— ì›ê²© ì—°ê²°ì„ ì‚¬ìš©í•˜ë ¤ë©´ Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 설치하고 '$1$' ë²„íŠ¼ì„ í´ë¦­í•˜ì„¸ìš”.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "ì´ì „ì— $1$($2$)(으)ë¡œ 로그ì¸í•œ ì ì´ 있습니다. ì´ ê³„ì •ìœ¼ë¡œ ì»´í“¨í„°ì— ì•¡ì„¸ìŠ¤í•˜ë ¤ë©´ ì´ ê³„ì •ì„ ì‚¬ìš©í•´ $3$Chromeì— ë¡œê·¸ì¸$4$하고 Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 다시 설치하세요.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "소프트웨어 ì—…ë°ì´íŠ¸ëŠ” 보통 ìžë™ìœ¼ë¡œ 시행ë˜ë©°, 드물지만 실패하는 ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. 소프트웨어 ì—…ë°ì´íŠ¸ëŠ” 몇 분 ì •ë„ ì†Œìš”ë˜ë©° 컴퓨터가 ì›ê²©ìœ¼ë¡œ ì—°ê²°ë˜ì–´ ìžˆì„ ë•Œ ì´ë£¨ì–´ì§‘니다." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ì˜ Chrome ì›ê²© ë°ìŠ¤í¬í†±ì´ 오래ë˜ì–´ ì—…ë°ì´íŠ¸í•´ì•¼ 합니다.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "사용 통계 ë° ì˜¤ë¥˜ ë³´ê³ ì„œ ìˆ˜ì§‘ì„ í—ˆìš©í•˜ì—¬ Chrome ì›ê²© ë°ìŠ¤í¬í†± ê°œì„ ì— ì°¸ì—¬í•˜ê² ìŠµë‹ˆë‹¤." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "액세스 ì œí•œì„ í†µí•´ ì´ ì»´í“¨í„°ë¥¼ 보호하려면 $1$최소 6ìžë¦¬$2$ì˜ PINì„ ì„ íƒí•˜ì„¸ìš”. ì´ PINì€ ë‹¤ë¥¸ 위치ì—ì„œ ì—°ê²°í•  ë•Œ 필요합니다.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "ì›ê²© 액세스 서비스를 시작하지 못했습니다." + }, + "HOST_SETUP_INSTALL": { + "message": "Chromeì—ì„œ ì›ê²© ë°ìŠ¤í¬í†± 호스트 설치 í”„ë¡œê·¸ëž¨ì„ ë‹¤ìš´ë¡œë“œ 중입니다. 다운로드가 완료ë˜ë©´ 계ì†í•˜ê¸° ì „ì— ì„¤ì¹˜ í”„ë¡œê·¸ëž¨ì„ ì‹¤í–‰í•˜ì„¸ìš”." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "계ì†í•˜ê¸° ì „ì— ì„¤ì¹˜ í”„ë¡œê·¸ëž¨ì„ ì‹¤í–‰í•˜ì„¸ìš”." + }, + "HOST_SETUP_STARTED": { + "message": "ì»´í“¨í„°ì˜ ì›ê²© ì—°ê²°ì„ ì‚¬ìš©í•˜ë„ë¡ ì„¤ì •í–ˆìŠµë‹ˆë‹¤." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "ì»´í“¨í„°ì˜ ì „ì› ê´€ë¦¬ ì„¤ì •ì„ í™•ì¸í•˜ê³  유휴 ìƒíƒœì¼ ë•Œ 절전 모드로 전환ë˜ë„ë¡ ì„¤ì •ë˜ì§€ 않았는지 확ì¸í•˜ì„¸ìš”." + }, + "HOST_SETUP_STARTING": { + "message": "ì»´í“¨í„°ì˜ ì›ê²© ì—°ê²°ì„ ì‚¬ìš©í•˜ë„ë¡ ì„¤ì • 중..." + }, + "HOST_SETUP_STOPPED": { + "message": "ì»´í“¨í„°ì˜ ì›ê²© ì—°ê²°ì´ ì‚¬ìš©ì¤‘ì§€ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "HOST_SETUP_STOPPING": { + "message": "ì»´í“¨í„°ì˜ ì›ê²© ì—°ê²°ì„ ì‚¬ìš©ì¤‘ì§€í•˜ëŠ” 중..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "ì»´í“¨í„°ì— ëŒ€í•œ ì›ê²© 액세스를 사용중지하지 못했습니다. ë‚˜ì¤‘ì— ë‹¤ì‹œ ì‹œë„í•´ 주세요." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트 설치 í”„ë¡œê·¸ëž¨ì„ ë‹¤ìš´ë¡œë“œí•˜ë©´ Google $1$서비스 약관$4ì— ë™ì˜í•˜ê²Œ ë©ë‹ˆë‹¤.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PINì´ ì—…ë°ì´íŠ¸ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PINì„ ì—…ë°ì´íŠ¸í•˜ì§€ 못했습니다. ë‚˜ì¤‘ì— ë‹¤ì‹œ ì‹œë„í•´ 주세요." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "ì»´í“¨í„°ì˜ PINì„ ì—…ë°ì´íŠ¸ 중…" + }, + "HOST_STARTED": { + "message": "사용ìž(%1)ì˜ í˜¸ìŠ¤íŠ¸ê°€ 시작ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "HOST_STOPPED": { + "message": "호스트가 중지ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "IDLE_CONTINUE": { + "message": "계ì†" + }, + "IDLE_DISCONNECT": { + "message": "지금 ì—°ê²° í•´ì œ" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "$1$ ì„¸ì…˜ì´ ì¼ì • 시간 비활성화 ìƒíƒœì˜€ìœ¼ë¯€ë¡œ 곧 ì—°ê²° í•´ì œë©ë‹ˆë‹¤.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "ì´ ì»´í“¨í„°ë¡œì˜ ì—°ê²°" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트 설치 프로그램 다운로드" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "ë°ìŠ¤í¬í†± 공유를 시작하려면 ë‚´ ë°ìŠ¤í¬í†±ì— 액세스하려는 사용ìžì—게 아래 액세스 코드를 알려주세요." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "액세스 코드를 입력하면 공유 ì„¸ì…˜ì´ ì‹œìž‘ë©ë‹ˆë‹¤." + }, + "INVALID_PIN": { + "message": "6ìžë¦¬ ì´ìƒì˜ 숫ìžë¡œ êµ¬ì„±ëœ PINì„ ìž…ë ¥í•˜ì„¸ìš”." + }, + "IT2ME_FIRST_RUN": { + "message": "ì‚¬ìš©ìž ê°„ 화면 공유가 가능하며 ì›ê²© 기술 지ì›ì— ì í•©í•©ë‹ˆë‹¤." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "키보드 ë ˆì´ì•„웃" + }, + "LABEL_CONNECTED": { + "message": "ì—°ê²°ë¨:" + }, + "LAST_ONLINE": { + "message": "$1$(최근 ì—°ê²°: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "ìžì„¸ížˆ 알아보기" + }, + "LEARN_MORE": { + "message": "ìžì„¸ížˆ 알아보기" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트 환경설정" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome ì›ê²©\në°ìŠ¤í¬í†± 호스트" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트 제거 프로그램" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "오른쪽 Ctrl를 Win 키로 사용(Macì˜ ê²½ìš° ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "ì°½ 최대화" + }, + "ME2ME_FIRST_RUN": { + "message": "어디서든 ë‚´ ì»´í“¨í„°ì— ì•¡ì„¸ìŠ¤í•  수 있습니다." + }, + "MESSAGE_GENERATING": { + "message": "액세스 코드 ìƒì„± 중..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†± ì„¸ì…˜ì´ ì¢…ë£Œë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "MESSAGE_SHARED": { + "message": "ë‚´ 컴퓨터를 $1$님과 공유하고 있습니다.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "ì°½ 최소화" + }, + "MODE_AUTHORIZE": { + "message": "승ì¸" + }, + "MODE_IT2ME": { + "message": "ì›ê²© 지ì›" + }, + "MODE_ME2ME": { + "message": "ë‚´ 컴퓨터" + }, + "NEW_WINDOW": { + "message": "새 창…" + }, + "NO_PAIRED_CLIENTS": { + "message": "페어ë§ëœ í´ë¼ì´ì–¸íŠ¸ê°€ ëª¨ë‘ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "ë°ìŠ¤í¬í†± í†µí•©ì´ ì´ í”Œëž«í¼ì—ì„œ 지ì›ë˜ì§€ 않습니다. 애플리케ì´ì…˜ì„ 사용할 수는 있지만, ì‚¬ìš©ìž í™˜ê²½ì´ ì €í•˜ë  ìˆ˜ 있습니다." + }, + "OFFLINE": { + "message": "$1$(오프ë¼ì¸)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "호스트 ì´ˆê¸°í™”ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "호스트 êµ¬ì„±ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "ìž˜ëª»ëœ í˜¸ìŠ¤íŠ¸ ì†Œìœ ìž ë„ë©”ì¸ìž…니다." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "호스트 IDê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "호스트가 ìž˜ëª»ëœ OAuth ì‚¬ìš©ìž ì¸ì¦ ì •ë³´ë¡œ 구성ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "콘솔 ë¡œì§ í™”ë©´ì—ì„œ 실행 ì¤‘ì¸ í˜¸ìŠ¤íŠ¸ê°€ 사용ìžë³„ 세션ì—ì„œ 실행 ì¤‘ì¸ í˜¸ìŠ¤íŠ¸ë¡œ 전환하여 커튼 모드를 지ì›í•˜ê¸° 위해 종료ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ì •ì±… 변경 ì‚¬í•­ì„ ë°˜ì˜í•˜ê¸° 위해 호스트를 다시 시작하는 중입니다." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "호스트ì—ì„œ ì •ì±…ì„ í™•ì¸í•˜ì§€ 못했습니다." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "호스트가 꺼져 있습니다." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ì•Œ 수 없는 호스트 오류입니다. $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "호스트 소유ìžê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤." + }, + "OK": { + "message": "확ì¸" + }, + "OPTIONS_MENU": { + "message": "옵션" + }, + "OUTGOING_CONNECTIONS": { + "message": "ì´ ì»´í“¨í„°ì—ì„œ 시작한 ì—°ê²°" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "ë‹¤ìŒ í´ë¼ì´ì–¸íŠ¸ëŠ” ì´ ì»´í“¨í„°ì™€ 페어ë§ë˜ì—ˆìœ¼ë©° PINì„ ì œê³µí•˜ì§€ ì•Šê³ ë„ ì—°ê²°í•  수 있습니다. 언제든지 개별 í´ë¼ì´ì–¸íŠ¸ ë˜ëŠ” 모든 í´ë¼ì´ì–¸íŠ¸ì— 대해 ì´ ê¶Œí•œì„ ì·¨ì†Œí•  수 있습니다." + }, + "PAIRED_CLIENT_DATE": { + "message": "íŽ˜ì–´ë§ ë‚ ì§œ" + }, + "PAIRED_CLIENT_NAME": { + "message": "í´ë¼ì´ì–¸íŠ¸" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "ë‘ ìž…ë ¥ëž€ì— ê°™ì€ PINì„ ìž…ë ¥í•˜ì„¸ìš”." + }, + "PIN_MESSAGE": { + "message": "$1$ì˜ PINì„ ìž…ë ¥í•˜ì„¸ìš”.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "ì›ê²© ì»´í“¨í„°ì˜ PINì„ ìž…ë ¥í•˜ì„¸ìš”." + }, + "PRODUCT_DESCRIPTION": { + "message": "다른 ì»´í“¨í„°ì— ì•¡ì„¸ìŠ¤í•˜ê±°ë‚˜ 다른 사용ìžê°€ ì¸í„°ë„·ì„ 통해 안전하게 ë‚´ ì»´í“¨í„°ì— ì•¡ì„¸ìŠ¤í•  수 있습니다." + }, + "PRODUCT_NAME": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†±" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome 앱 스트리ë°" + }, + "RECONNECT": { + "message": "다시 ì—°ê²°" + }, + "REMEMBER_PIN": { + "message": "ì´ ê¸°ê¸°ì—ì„œ ì´ í˜¸ìŠ¤íŠ¸ë¡œ ì—°ê²°í•  ë•Œ PINì„ ë‹¤ì‹œ 요청하지 않습니다." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "핵심 ë¼ì´ë¸ŒëŸ¬ë¦¬" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ë°ìŠ¤í¬í†± 통합 프로세스" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "애플리케ì´ì…˜ì—ì„œ Chrome ì›ê²© ë°ìŠ¤í¬í†± 호스트로 ëª…ë ¹ì„ ì „ì†¡í•©ë‹ˆë‹¤." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "호스트 프로세스" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "ì›ê²© 호스트 관리를 위한 기본 메시징 호스트" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "ì›ê²© 지ì›ì„ 위한 기본 메시징 호스트" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "보안 키 ì›ê²© 설정 프로세스" + }, + "RESIZE_TO_CLIENT": { + "message": "ë°ìŠ¤í¬í†± í¬ê¸° ì¡°ì •" + }, + "RESTART_BUTTON": { + "message": "지금 다시 시작" + }, + "RESTORE_WINDOW": { + "message": "ë³µì› ì°½" + }, + "RETRY": { + "message": "다시 ì‹œë„" + }, + "SCREEN_OPTIONS": { + "message": "화면 옵션" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del 전송" + }, + "SEND_FEEDBACK": { + "message": "문제 신고하기" + }, + "SEND_KEYS": { + "message": "키 보내기" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn 전송" + }, + "SERVICE_DESCRIPTION": { + "message": "ì´ ì„œë¹„ìŠ¤ë¥¼ ì´ìš©í•˜ë©´ Chrome ì›ê²© ë°ìŠ¤í¬í†± í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„°ì˜ ì—°ê²°ì„ ìˆ˜ì‹ í•  수 있습니다." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "ì´ ì„¤ì •ì€ ë„ë©”ì¸ ì •ì±…ì— ì˜í•´ 관리ë©ë‹ˆë‹¤." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "공유" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "취소" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "ì´ ì»´í“¨í„°ë¥¼ 다른 사용ìžê°€ ë³´ê³  제어하ë„ë¡ ê³µìœ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" + }, + "SHOW_STATS": { + "message": "통계 보기" + }, + "SHOW_STATS_WITH_RTT": { + "message": "통계 보기(ì—°ê²°: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "í¬ê¸°ì— 맞게 축소" + }, + "SIGN_IN_BUTTON": { + "message": "로그ì¸" + }, + "SIGN_OUT_BUTTON": { + "message": "로그아웃" + }, + "STOP_SHARING_BUTTON": { + "message": "공유 중지" + }, + "SURVEY_INVITATION": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ 개선하ë„ë¡ ë„와주려면 $1$ì„¤ë¬¸ì¡°ì‚¬ì— ì°¸ì—¬í•˜ì„¸ìš”.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "시간" + }, + "TOGGLE_STATS": { + "message": "통계 보기" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ì— ì—°ê²°", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ì»´í“¨í„°ì— ì›ê²© ì—°ê²° 사용중지" + }, + "TOOLTIP_REFRESH": { + "message": "호스트 ëª©ë¡ ìƒˆë¡œê³ ì¹¨" + }, + "TOOLTIP_RENAME": { + "message": "컴퓨터 ì´ë¦„ 수정" + }, + "UPDATE_REQUIRED": { + "message": "$1$(ì´ì „ 버전)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "계정" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome ì›ê²© ë°ìŠ¤í¬í†±ìŠ¤ìœ¼ë¡œ 액세스할 수 있ë„ë¡ ì•„ëž˜ 계정 ë° PINì„ í™•ì¸í•˜ì„¸ìš”." + }, + "WARNING_NAT_DISABLED": { + "message": "참고: ì •ì±… ì„¤ì •ì— ë”°ë¼ ë„¤íŠ¸ì›Œí¬ ë‚´ì— ìžˆëŠ” 컴퓨터 ê°„ì˜ ì—°ê²°ë§Œ 허용ë©ë‹ˆë‹¤." + }, + "WARNING_NOT_WINDOWED": { + "message": "참고: 모든 단축키를 사용하려면 Chrome ì›ê²© ë°ìŠ¤í¬í†±ì„ '창으로 열기'ë¡œ 설정합니다." + }, + "WHY_IS_THIS_SAFE": { + "message": "안전한 ì´ìœ " + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "처리 중…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lt/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lt/messages.json new file mode 100644 index 000000000000..1ef68d947263 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lt/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Sutikti ir įdiegti" + }, + "ACCESS_CODE": { + "message": "Prieigos kodas" + }, + "ACCESS_CODE_TIMER": { + "message": "Å io prieigos kodo galiojimo laikas baigsis po $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Atsiliepimai" + }, + "ALL_CONNECTIONS": { + "message": "Visi ryÅ¡iai" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "IÅ¡ naujo įveskite PIN kodÄ…" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN kodas" + }, + "CANCEL": { + "message": "AtÅ¡aukti" + }, + "CLEAR_HISTORY": { + "message": "IÅ¡valyti istorijÄ…" + }, + "CLOSE": { + "message": "Uždaryti" + }, + "CLOSE_PROMPT": { + "message": "IÅ¡Ä—jus iÅ¡ Å¡io puslapio, baigsis „Chrome“ nuotolinio kompiuterio valdymo sesija." + }, + "CLOSE_WINDOW": { + "message": "Uždaryti langÄ…" + }, + "COMPANY_NAME": { + "message": "„Google Inc.“" + }, + "CONFIRM_HOST_DELETE": { + "message": "Ar tikrai norite neleisti nuotolinio ryÅ¡io su „$1$“? Jei apsigalvosite, turÄ—site iÅ¡ naujo įgalinti ryšį tame kompiuteryje.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Nepavyko užmegzti ryÅ¡io" + }, + "CONNECTION_FROM_HEADER": { + "message": "Ryšį užmezga" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "RyÅ¡ių istorija" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Neblogas" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Geras" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Prastas" + }, + "CONNECTION_TO_HEADER": { + "message": "RyÅ¡ys užmezgamas su" + }, + "CONNECT_ANYWAY": { + "message": "Vis tiek prijungti" + }, + "CONNECT_BUTTON": { + "message": "Prisijungti" + }, + "CONTINUE_BUTTON": { + "message": "TÄ™sti" + }, + "CONTINUE_PROMPT": { + "message": "Å iuo metu šį kompiuterį bendrinate su kitu naudotoju. Ar norite toliau bendrinti?" + }, + "CONTROLLER_NAME": { + "message": "„Chrome“ nuotolinio kompiuterio valdymo prieglobos valdymo priemonÄ—" + }, + "COPYRIGHT": { + "message": "Autorių teisÄ—s priklauso „Google Inc.“, 2013 m. Visos teisÄ—s saugomos." + }, + "CREDITS": { + "message": "Titrai" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "IÅ¡trinti viskÄ…" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Panaikinti" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Jei norite tÄ™sti, pirmiausia turite suteikti iÅ¡plÄ—stinÄ—s prieigos prie kompiuterio leidimus. Tai reikÄ—s atlikti tik vienÄ… kartÄ…." + }, + "DESCRIPTION_CONNECT": { + "message": "PapraÅ¡ykite naudotojo, kurio kompiuterį norite pasiekti, spustelÄ—ti „$1$“ ir suteikti pasiekiamumo kodÄ….", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Naudodami „Chrome“ nuotolinį kompiuterio valdymÄ…, galite saugiai bendrinti kompiuterį žiniatinklyje. Abu naudotojai turi paleisti „Chrome“ nuotolinio kompiuterio valdymo programÄ…, kuriÄ… galima rasti adresu $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "NuotolinÄ— priegloba reikalauja autentifikuoti treÄiosios Å¡alies svetainÄ™. Jei norite tÄ™sti, turite suteikti „Chrome“ nuotolinio kompiuterio valdymo programai papildomas teises pasiekti šį adresÄ…" + }, + "DISABLE_HOST": { + "message": "Neleisti" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Atsijungti" + }, + "DISPLAY_SERVICE_NAME": { + "message": "„Chrome“ nuotolinio kompiuterio valdymo paslauga" + }, + "DURATION_HEADER": { + "message": "TrukmÄ—" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Neturite leidimo paleisti Å¡iÄ… programÄ…." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Nepavyko autentifikuoti. Dar kartÄ… prisijunkite prie „Chrome“." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "TrÅ«ksta kai kurių bÅ«tinų komponentų. Ä®sitikinkite, kad įdiegÄ—te naujausios versijos programinÄ™ įrangÄ…, ir bandykite dar kartÄ…." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ä®vyko tinklo klaida. Kai įrenginys bus vÄ—l prijungtas, iÅ¡ naujo paleisime programÄ…." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Nuotoliniam kompiuteriui nepavyko inicijuoti sesijos. Jei problema iÅ¡lieka, pabandykite dar kartÄ… sukonfigÅ«ruoti prieglobÄ…." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Nuotolinis kompiuteris neatsako į ryÅ¡io užklausas. Patikrinkite, ar jis prijungtas, ir bandykite dar kartÄ…." + }, + "ERROR_HOST_OVERLOAD": { + "message": "RyÅ¡ys su nuotoliniu kompiuteriu laikinai blokuojamas, nes kažkas bandÄ— prisijungti prie jo naudodamas netinkamÄ… PIN kodÄ…. Bandykite dar kartÄ… vÄ—liau." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "MÄ—ginant užregistruoti šį kompiuterį įvyko klaida." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Aptikta nesuderinama protokolo versija. Ä®sitikinkite, kad įdiegÄ—te naujausios versijos programinÄ™ įrangÄ… abiejuose kompiuteriuose ir bandykite dar kartÄ…." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Netinkamas prieigos kodas. Bandykite dar kartÄ…." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Pagal politikos nustatymus Å¡io kompiuterio negalima bendrinti kaip „Chrome“ nuotolinio kompiuterio valdymo prieglobos. KreipkitÄ—s pagalbos į sistemos administratorių." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "BaigÄ—si nuotolinÄ—s sesijos galiojimo laikas." + }, + "ERROR_MISSING_PLUGIN": { + "message": "TrÅ«ksta kai kurių bÅ«tinų komponentų. Ä®sitikinkite, kad naudojate naujausios versijos „Chrome“, ir bandykite dar kartÄ…." + }, + "ERROR_NACL_DISABLED": { + "message": "TrÅ«ksta kai kurių bÅ«tinų komponentų. Apsilankykite adresu chrome://plugins ir įsitikinkite, kad įgalinta „Native Client“." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "BÅ«tinas komponentas nebeveikia. PraneÅ¡kite apie Å¡iÄ… problemÄ… kÅ«rÄ—jams." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nepavyko prisijungti prie tinklo. Patikrinkite, ar jÅ«sų įrenginys prisijungÄ™s." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Nesate prisijungÄ™ prie „Chrome“. Prisijunkite ir bandykite dar kartÄ…." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Neturite leidimo atlikti šį veiksmÄ…." + }, + "ERROR_NOT_FOUND": { + "message": "PraÅ¡omas objektas neegzistuoja." + }, + "ERROR_P2P_FAILURE": { + "message": "Neįmanoma pasiekti prieglobos. Taip greiÄiausiai nutiko dÄ—l naudojamo tinklo konfigÅ«racijos." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Paslauga laikinai negalima. Bandykite dar kartÄ… vÄ—liau." + }, + "ERROR_UNEXPECTED": { + "message": "Ä®vyko netikÄ—ta klaida. PraneÅ¡kite apie problemÄ… kÅ«rÄ—jams." + }, + "EXIT_FULL_SCREEN": { + "message": "IÅ¡eiti iÅ¡ viso ekrano režimo" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Nepavyko iÅ¡ naujo nustatyti programos. Vis tiek galite iÅ¡siųsti rikto ataskaitÄ…." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "IÅ¡ naujo nustatykite programÄ…. Prarasite visus neiÅ¡saugotus duomenis." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Nepavyksta atidaryti programos." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Programa per lÄ—ta." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Nepavyksta atidaryti „Google“ disko failų." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Prisijungus nerodomi „Google“ diske iÅ¡saugoti failai." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Kyla problemų dÄ—l klaviatÅ«ros ir pelÄ—s." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "PadÄ—kite iÅ¡sprÄ™sti problemÄ… nurodydami, dÄ—l ko kilo problema:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Kažkas kita." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Pasirinkite…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Kad galÄ—tume su jumis susisiekti dÄ—l iÅ¡samesnÄ—s informacijos, jÅ«sų el. paÅ¡to adresas bus įtrauktas į bet kurį jÅ«sų pateiktÄ… atsiliepimÄ…." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "PraneÅ¡ti apie problemÄ…" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Ä®traukite programų žurnalus, kad padÄ—tumÄ—te iÅ¡sprÄ™sti problemÄ… (žurnaluose gali bÅ«ti privaÄios informacijos)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Ä® programų žurnalus gali bÅ«ti įtraukta privaÄios informacijos, įskaitant jÅ«sų tapatybÄ™ (el. paÅ¡to adresÄ…) ir failų bei aplankų „Google“ diske pavadinimus ir nuosavybes." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Å i informacija naudojama tik problemos, apie kuriÄ… praneÅ¡ate, diagnozavimo tikslais, ji pasiekiama tik ataskaitÄ… nagrinÄ—janÄiam asmeniui ir saugoma ne ilgiau nei 30 dienų." + }, + "FOOTER_CONNECTING": { + "message": "Jungiamasi…" + }, + "FOOTER_WAITING": { + "message": "Laukiama ryÅ¡io..." + }, + "FOR_PLATFORM_MAC": { + "message": "Skirta „Mac“ (10.6 ir naujesnÄ—s versijos „OS X“)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Skirta „Windows“ (XP ir naujesnÄ—s versijos)" + }, + "FULL_SCREEN": { + "message": "Viso ekrano režimas" + }, + "GET_STARTED": { + "message": "PradÄ—kite" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Priimti" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Atmesti" + }, + "HELP": { + "message": "Žinynas" + }, + "HOME_ACCESS_BUTTON": { + "message": "Prieiga" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Matykite ir valdykite bendrinamÄ… kompiuterį." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Galite saugiai pasiekti kompiuterį naudodami „Chrome“ nuotolinį kompiuterio valdymÄ…." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Keisti PIN kodÄ…" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Å is kompiuteris Å¡iuo metu bendrinamas su kita paskyra." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ŽiÅ«rÄ—ti / redaguoti" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Å is kompiuteris sukonfigÅ«ruotas leisti vienam ar keliems klientams prisijungti neįvedus PIN kodo." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Ä®galinti nuotolinį ryšį" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Jei norite naudoti „Chrome“ nuotolinį kompiuterio valdymÄ… Å¡iam kompiuteriui pasiekti, turite įgalinti nuotolinį ryšį." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Neleisti nuotolinio ryÅ¡io" + }, + "HOME_SHARE_BUTTON": { + "message": "Bendrinti" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Bendrinkite šį kompiuterį, kad kitas naudotojas galÄ—tų jį matyti ir valdyti." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Å¡i funkcija dar nepasiekiama jÅ«sų kompiuteryje)" + }, + "HOST_CATEGORY": { + "message": "Priegloba" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Kliento prieiga atmesta: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Prijungtas klientas: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Atjungtas klientas: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kliento kanalo IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Jei norite įgalinti nuotolinį ryšį su kitu kompiuteriu, jame įdiekite „Chrome“ nuotolinį kompiuterio valdymÄ… ir spustelÄ—kite „$1$“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Neturite jokių registruotų kompiuterių. Jei norite įgalinti nuotolinį ryšį su kompiuteriu, jame įdiekite „Chrome“ nuotolinį kompiuterio valdymÄ… ir spustelÄ—kite „$1$“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "AnksÄiau prisijungÄ—te kaip $1$ ($2$). Kad pasiektumÄ—te kompiuterius toje paskyroje, $3$prisijunkite prie „Google Chrome“$4$ naudodami tÄ… paskyrÄ… ir iÅ¡ naujo įdiekite „Chrome“ nuotolinį kompiuterio valdymÄ….", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Dažniausiai programinÄ— įranga atnaujinama automatiÅ¡kai, bet retais atvejais to padaryti nepavyksta. PrograminÄ—s įrangos atnaujinimas neturÄ—tų trukti ilgiau nei kelias minutes. Tai galima atlikti prisijungus prie kompiuterio nuotoliniu bÅ«du." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "„Chrome“ nuotolinis kompiuterio valdymas $1$ yra pasenÄ™s ir jį reikia atnaujinti.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "LeidÄ™ mums kaupti naudojimo statistikÄ… ir strigÄių ataskaitas, padÄ—site tobulinti „Chrome“ nuotolinį kompiuterio valdymÄ…." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Jei norite apsaugoti prieigÄ… prie Å¡io kompiuterio, pasirinkite $1$bent Å¡eÅ¡ių skaitmenų$2$ PIN kodÄ…. Å io PIN kodo reikÄ—s prisijungiant iÅ¡ kitos vietos.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Paleidžiant nuotolinÄ—s prieigos paslaugÄ… įvyko klaida." + }, + "HOST_SETUP_INSTALL": { + "message": "„Chrome“ atsisiunÄiama „Chrome“ nuotolinio kompiuterio valdymo diegimo programa. Kai atsisiuntimas bus baigtas, prieÅ¡ tÄ™sdami paleiskite jÄ…." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Paleiskite diegimo programÄ… prieÅ¡ tÄ™sdami." + }, + "HOST_SETUP_STARTED": { + "message": "Nuotolinis ryÅ¡ys Å¡iame kompiuteryje įgalintas." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Patikrinkite kompiuterio galios tvarkymo nustatymus ir įsitikinkite, kad jis nÄ—ra sukonfigÅ«ruotas užmigti neveikos bÅ«senos." + }, + "HOST_SETUP_STARTING": { + "message": "Ä®galinamas nuotolinis ryÅ¡ys Å¡iame kompiuteryje…" + }, + "HOST_SETUP_STOPPED": { + "message": "Nuotolinis ryÅ¡ys Å¡iame kompiuteryje neleidžiamas." + }, + "HOST_SETUP_STOPPING": { + "message": "Neleidžiamas nuotolinis ryÅ¡ys Å¡iame kompiuteryje…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Neleidžiant nuotolinÄ—s prieigos prie Å¡io kompiuterio įvyko klaida. Bandykite dar kartÄ… vÄ—liau." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Atsisiųsdami „Chrome“ nuotolinio kompiuterio valdymo prieglobos diegimo programÄ… sutinkate su „Google“ $1$paslaugų teikimo sÄ…lygomis$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN kodas atnaujintas." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Atnaujinant PIN kodÄ… įvyko klaida. Bandykite dar kartÄ… vÄ—liau." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Å io kompiuterio PIN kodas atnaujinamas…" + }, + "HOST_STARTED": { + "message": "PradÄ—ta naudotojo priegloba: %1." + }, + "HOST_STOPPED": { + "message": "Priegloba sustabdyta." + }, + "IDLE_CONTINUE": { + "message": "TÄ™sti" + }, + "IDLE_DISCONNECT": { + "message": "Atjungti dabar" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "JÅ«sų „$1$“ sesija buvo neaktyvi ir netrukus bus atjungta.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Su Å¡iuo kompiuteriu" + }, + "INSTALLER_DOWNLOAD": { + "message": "„Chrome“ nuotolinio kompiuterio valdymo prieglobos diegimo programos atsisiuntimas" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Jei norite pradÄ—ti bendrinti darbalaukį, pateikite toliau nurodytÄ… prieigos kodÄ… padÄ—jÄ—jui." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Kai jis įves kodÄ…, prasidÄ—s bendrinimo sesija." + }, + "INVALID_PIN": { + "message": "Ä®veskite PIN kodÄ…, sudarytÄ… iÅ¡ Å¡eÅ¡ių ar daugiau skaitmenų." + }, + "IT2ME_FIRST_RUN": { + "message": "Ekrano „naudotojas naudotojui“ bendrinimas, puikiai tinkantis nuotoliniam techniniam palaikymui vykdyti." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "KlaviatÅ«ros iÅ¡dÄ—stymai" + }, + "LABEL_CONNECTED": { + "message": "Prisijungta:" + }, + "LAST_ONLINE": { + "message": "$1$ (paskutinį kartÄ… prisijungta $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Sužinokite, kaip tai padaryti." + }, + "LEARN_MORE": { + "message": "Sužinokite daugiau." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "„Chrome“ nuotolinio kompiuterio valdymo prieglobos nuostatos" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "„Chrome“ nuotolinio kompiuterio\nvaldymo priegloba" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "„Chrome“ nuotolinio kompiuterio valdymo prieglobos paÅ¡alinimo priemonÄ—" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "KlaviÅ¡ui „Win“ naudokite deÅ¡inÄ—je pusÄ—je esantį klaviÅ¡Ä… „Ctrl“ (⌘ sistemoje „Mac“)" + }, + "MAXIMIZE_WINDOW": { + "message": "Padidinti langÄ…" + }, + "ME2ME_FIRST_RUN": { + "message": "Pasiekite savo kompiuterį iÅ¡ bet kur." + }, + "MESSAGE_GENERATING": { + "message": "Generuojamas prieigos kodas..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "BaigÄ—si „Chrome“ nuotolinio kompiuterio valdymo sesija." + }, + "MESSAGE_SHARED": { + "message": "Å iuo metu darbalaukis bendrinamas su Å¡iuo naudotoju: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Sumažinti langÄ…" + }, + "MODE_AUTHORIZE": { + "message": "Suteikti prieigos teisÄ™" + }, + "MODE_IT2ME": { + "message": "NuotolinÄ— pagalba" + }, + "MODE_ME2ME": { + "message": "Mano kompiuteriai" + }, + "NEW_WINDOW": { + "message": "Naujas langas..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Visi susieti klientai iÅ¡trinti." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Kompiuterio integravimas nepalaikomas Å¡ioje platformoje. Vis tiek galite naudoti programÄ…, bet bus teikiamos ne visos funkcijos." + }, + "OFFLINE": { + "message": "„$1$“ (neprisijungta)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Prieglobos inicijavimo veiksmas nepavyko." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Netinkama prieglobos konfigÅ«racija." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Netinkamas prieglobos savininko domenas." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Netinkamas prieglobos ID." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Priegloba sukonfigÅ«ruota naudojant netinkamus „OAuth“ prisijungimo duomenis." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Priegloba, veikianti pulto logikos ekrane, iÅ¡jungta, kad bÅ«tų galima palaikyti nerodomo vaizdo režimÄ… perjungus į prieglobÄ…, veikianÄiÄ… konkretaus naudotojo sesijoje." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Priegloba paleidžiama iÅ¡ naujo, kad įsigaliotų politikos pakeitimas." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Prieglobai nepavyko nuskaityti politikos." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Priegloba iÅ¡jungta." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Neatpažinta prieglobos klaida: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Netinkamas prieglobos savininkas." + }, + "OK": { + "message": "Gerai" + }, + "OPTIONS_MENU": { + "message": "Parinktys" + }, + "OUTGOING_CONNECTIONS": { + "message": "IÅ¡ Å¡io kompiuterio" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Nurodyti klientai susieti su Å¡iuo kompiuteriu ir gali prisijungti nepateikÄ™ PIN kodo. Bet kada galite atÅ¡aukti šį leidimÄ… atskiriems arba visiems klientams." + }, + "PAIRED_CLIENT_DATE": { + "message": "Susiejimo data" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klientas" + }, + "PIN": { + "message": "PIN kodas" + }, + "PINS_NOT_EQUAL": { + "message": "Ä®veskite tÄ… patį PIN kodÄ… abiejuose laukeliuose." + }, + "PIN_MESSAGE": { + "message": "Ä®veskite „$1$“ PIN kodÄ….", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Ä®veskite nuotolinio kompiuterio PIN kodÄ…." + }, + "PRODUCT_DESCRIPTION": { + "message": "Pasiekite kitus kompiuterius arba leiskite kitam naudotojui saugiai pasiekti kompiuterį internetu." + }, + "PRODUCT_NAME": { + "message": "„Chrome“ nuotolinis kompiuterio valdymas" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "„Chrome“ programos srautinis perdavimas" + }, + "RECONNECT": { + "message": "Pakartotinai prijungti" + }, + "REMEMBER_PIN": { + "message": "NepraÅ¡yti įvesti PIN kodÄ… dar kartÄ…, kai Å¡iuo įrenginiu bus jungiamasi prie Å¡io prieglobos kompiuterio." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "PagrindinÄ— biblioteka" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Darbalaukio integravimo procesas" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Programa, skirta komandoms perduoti į „Chrome“ nuotolinio kompiuterio valdymo prieglobÄ…." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Prieglobos procesas" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "VietinÄ— praneÅ¡imų priegloba, skirta prieglobai nuotoliniu bÅ«du tvarkyti" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "VietinÄ— nuotolinÄ—s pagalbos praneÅ¡imų priegloba" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Saugos rakto nuotolinio valdymo procesas" + }, + "RESIZE_TO_CLIENT": { + "message": "Sumažinti darbalaukį, kad tilptų" + }, + "RESTART_BUTTON": { + "message": "Paleisti iÅ¡ naujo dabar" + }, + "RESTORE_WINDOW": { + "message": "Atkurti langÄ…" + }, + "RETRY": { + "message": "Bandyti dar kartÄ…" + }, + "SCREEN_OPTIONS": { + "message": "Ekrano parinktys" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Siųsti „Ctrl“ + „Alt“ + „Del“" + }, + "SEND_FEEDBACK": { + "message": "PraneÅ¡imas apie problemÄ…..." + }, + "SEND_KEYS": { + "message": "Siųsti klavišų paspaudimÄ…" + }, + "SEND_PRINT_SCREEN": { + "message": "Siųsti „PrtScn“" + }, + "SERVICE_DESCRIPTION": { + "message": "Naudojant Å¡iÄ… paslaugÄ… įgalinami „Chrome“ nuotolinio kompiuterio valdymo klientų prisijungimai." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Å is nustatymas tvarkomas pagal domeno politikÄ…." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Bendrinti" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "AtÅ¡aukti" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Ar norite bendrinti šį kompiuterį su kitu naudotoju, kuris galÄ—s matyti ir tvarkyti jo turinį?" + }, + "SHOW_STATS": { + "message": "Rodyti statistikÄ…" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Rodyti statistikÄ… (ryÅ¡ys: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Sumažinti, kad tilptų" + }, + "SIGN_IN_BUTTON": { + "message": "Prisijungti" + }, + "SIGN_OUT_BUTTON": { + "message": "Atsijungti" + }, + "STOP_SHARING_BUTTON": { + "message": "Stabdyti bendrinimÄ…" + }, + "SURVEY_INVITATION": { + "message": "Norite padÄ—ti tobulinti „Chrome“ nuotolinį kompiuterio valdymÄ…? $1$Sudalyvaukite apklausoje.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Laikas" + }, + "TOGGLE_STATS": { + "message": "Rodyti statistikÄ…" + }, + "TOOLTIP_CONNECT": { + "message": "Prisijungti prie „$1$“", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Neleisti nuotolinio ryÅ¡io su Å¡iuo kompiuteriu" + }, + "TOOLTIP_REFRESH": { + "message": "Atnaujinti prieglobų sÄ…raÅ¡Ä…" + }, + "TOOLTIP_RENAME": { + "message": "Redaguoti kompiuterio pavadinimÄ…" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (pasenusi)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Paskyra" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Kad leistumÄ—te prieigÄ… naudojant „Chrome“ nuotolinį kompiuterio valdymÄ…, toliau patvirtinkite savo paskyrÄ… ir PIN kodÄ…." + }, + "WARNING_NAT_DISABLED": { + "message": "PASTABA: pagal politikos nustatymus leidžiama užmegzti ryšį tik tarp tinkle esanÄių kompiuterių." + }, + "WARNING_NOT_WINDOWED": { + "message": "PASTABA: jei norite užtikrinti, kad galimi visi spartieji klaviÅ¡ai, galite konfigÅ«ruoti „Chrome“ nuotolinio kompiuterio valdymÄ… į „Atidaryti kaip langą“." + }, + "WHY_IS_THIS_SAFE": { + "message": "KodÄ—l tai saugu?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Apdorojama…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lv/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lv/messages.json new file mode 100644 index 000000000000..461b7ab259e8 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/lv/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Piekrist un instalÄ“t" + }, + "ACCESS_CODE": { + "message": "Piekļuves kods" + }, + "ACCESS_CODE_TIMER": { + "message": "Å Ä« piekļuves koda derÄ«guma termiņš beigsies pÄ“c $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Atsauksmes" + }, + "ALL_CONNECTIONS": { + "message": "Visi savienojumi" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "AtkÄrtoti ievadiet PIN." + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Atcelt" + }, + "CLEAR_HISTORY": { + "message": "NotÄ«rÄ«t vÄ“sturi" + }, + "CLOSE": { + "message": "AizvÄ“rt" + }, + "CLOSE_PROMPT": { + "message": "Aizverot Å¡o lapu, Chrome attÄlÄs darbvirsmas sesija tiks pÄrtraukta." + }, + "CLOSE_WINDOW": { + "message": "AizvÄ“rt logu" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Vai tieÅ¡Äm vÄ“laties atspÄ“jot attÄlos savienojumus ar saimniekdatoru $1$? Ja pÄrdomÄsiet, savienojumus ar Å¡o datoru varÄ“siet iespÄ“jot tikai klÄtienÄ“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Savienojuma kļūme" + }, + "CONNECTION_FROM_HEADER": { + "message": "No" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Savienojumu vÄ“sture" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "viduvÄ“js" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "labs" + }, + "CONNECTION_QUALITY_POOR": { + "message": "vÄjÅ¡" + }, + "CONNECTION_TO_HEADER": { + "message": "Ar" + }, + "CONNECT_ANYWAY": { + "message": "Izveidot savienojumu jebkurÄ gadÄ«jumÄ" + }, + "CONNECT_BUTTON": { + "message": "PievienoÅ¡ana" + }, + "CONTINUE_BUTTON": { + "message": "TurpinÄt" + }, + "CONTINUE_PROMPT": { + "message": "Å obrÄ«d jÅ«s koplietojat Å¡o ierÄ«ci ar citu lietotÄju. Vai vÄ“laties turpinÄt koplietoÅ¡anu?" + }, + "CONTROLLER_NAME": { + "message": "Chrome attÄlÄs darbvirsmas saimniekdatora kontrolleris" + }, + "COPYRIGHT": { + "message": "AutortiesÄ«bas © 2013 Google Inc. Visas tiesÄ«bas paturÄ“tas." + }, + "CREDITS": { + "message": "Titri" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "DzÄ“st visu" + }, + "DELETE_PAIRED_CLIENT": { + "message": "DzÄ“st" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Lai turpinÄtu, jums vispirms ir jÄpieÅ¡Ä·ir paplaÅ¡inÄtas piekļuves atļaujas savam datoram. Tas ir jÄdara tikai vienreiz." + }, + "DESCRIPTION_CONNECT": { + "message": "PalÅ«dziet lietotÄjam, kura datoru vÄ“laties lietot, noklikÅ¡Ä·inÄt uz “$1$†un pieÅ¡Ä·irt jums piekļuves kodu.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Izmantojot Chrome attÄlo darbvirsmu, varat droÅ¡i koplietot savu datoru tÄ«meklÄ«. Abiem lietotÄjiem ir jÄizmanto lietotne Chrome attÄlÄ darbvirsma, kas ir pieejama vietnÄ“ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "AttÄlajÄ saimniekdatorÄ tiek pieprasÄ«ts, lai veicat autentificÄ“Å¡anu treÅ¡Äs puses vietnÄ“. Lai turpinÄtu, jums jÄpieÅ¡Ä·ir Chrome attÄlajai darbvirsmai papildu atļaujas piekļūt Å¡ai adresei:" + }, + "DISABLE_HOST": { + "message": "AtspÄ“jot" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Atvienot" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome attÄlÄs darbvirsmas pakalpojums" + }, + "DURATION_HEADER": { + "message": "Ilgums" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Jums nav atļauju, lai palaistu Å¡o lietojumprogrammu." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "AutentificÄ“Å¡ana neizdevÄs. LÅ«dzu, vÄ“lreiz pierakstieties pÄrlÅ«kÄ Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "TrÅ«kst dažu nepiecieÅ¡amo komponentu. PÄrbaudiet, vai ir instalÄ“ta programmatÅ«ras jaunÄkÄ versija, un mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "RadÄs tÄ«kla kļūda. Kad ierÄ«ce atkal darbosies tieÅ¡saistÄ“, lietotne tiks restartÄ“ta." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "AttÄlajam datoram neizdevÄs inicializÄ“t sesiju. Ja problÄ“ma atkÄrtojas, lÅ«dzu, mÄ“Ä£iniet vÄ“lreiz konfigurÄ“t saimniekdatoru." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "AttÄlais dators nereaģē uz savienojuma pieprasÄ«jumiem. PÄrbaudiet, vai tam ir savienojums ar internetu, un mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Savienojumi ar attÄlo datoru Ä«slaicÄ«gi ir bloÄ·Ä“ti, jo kÄda persona mÄ“Ä£inÄja izveidot savienojumu, izmantojot nederÄ«gu PIN. LÅ«dzu, vÄ“lÄk mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "NeizdevÄs reÄ£istrÄ“t Å¡o datoru." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Tika konstatÄ“ta nesaderÄ«ga protokola versija. LÅ«dzu, pÄrbaudiet, vai abos datoros ir instalÄ“ta programmatÅ«ras jaunÄkÄ versija, un mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Piekļuves kods nav derÄ«gs. LÅ«dzu, mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "SaskaÅ†Ä ar politikas iestatÄ«jumiem Å¡o datoru nevar koplietot kÄ Chrome attÄlÄs darbvirsmas saimniekdatoru. Lai saņemtu palÄ«dzÄ«bu, sazinieties ar sistÄ“mas administratoru." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "AttÄlÄs sesijas termiņš ir beidzies." + }, + "ERROR_MISSING_PLUGIN": { + "message": "TrÅ«kst dažu nepiecieÅ¡amo komponentu. PÄrbaudiet, vai izmantojat jaunÄko Chrome versiju un mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_NACL_DISABLED": { + "message": "TrÅ«kst dažu nepiecieÅ¡amo komponentu. LÅ«dzu, atveriet lapu chrome://plugins un pÄrbaudiet, vai tehnoloÄ£ija Native Client ir iespÄ“jota." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Tika pÄrtraukta obligÄtÄ komponenta darbÄ«ba. LÅ«dzu, ziņojiet par Å¡o problÄ“mu izstrÄdÄtÄjiem." + }, + "ERROR_NETWORK_FAILURE": { + "message": "NevarÄ“ja izveidot savienojumu ar tÄ«klu. LÅ«dzu, pÄrbaudiet, vai ierÄ«ce darbojas tieÅ¡saistes režīmÄ." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "JÅ«s neesat pierakstÄ«jies pÄrlÅ«kÄ Chrome. LÅ«dzu, pierakstieties un mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Jums nav atļauju, lai veiktu Å¡o darbÄ«bu." + }, + "ERROR_NOT_FOUND": { + "message": "PieprasÄ«tais objekts nepastÄv." + }, + "ERROR_P2P_FAILURE": { + "message": "Nevar sasniegt saimniekdatoru. IespÄ“jamais iemesls var bÅ«t tÄ«kla konfigurÄcija, kuru izmantojat." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Å obrÄ«d pakalpojums nav pieejams. LÅ«dzu, vÄ“lÄk mÄ“Ä£iniet vÄ“lreiz." + }, + "ERROR_UNEXPECTED": { + "message": "RadÄs neparedzÄ“ta kļūda. LÅ«dzu, ziņojiet par Å¡o problÄ“mu izstrÄdÄtÄjiem." + }, + "EXIT_FULL_SCREEN": { + "message": "Iziet no pilnekrÄna režīma" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "NevarÄ“ja atiestatÄ«t lietojumprogrammu. JÅ«s joprojÄm varat nosÅ«tÄ«t kļūdu pÄrskatu." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "AtiestatÄ«t lietojumprogrammu. Tiks zaudÄ“ts viss nesaglabÄtais saturs." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Nevaru atvÄ“rt lietojumprogrammu." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Lietojumprogramma ir pÄrÄk lÄ“na." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Nevaru atvÄ“rt savus Google diska failus." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Google diskÄ neredzu savus tieÅ¡saistÄ“ saglabÄtos failus." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Man raduÅ¡Äs problÄ“mas ar tastatÅ«ru vai peli." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Lai mÄ“s varÄ“tu novÄ“rst problÄ“mu, lÅ«dzu, aprakstiet to:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Cita problÄ“ma." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "AtlasÄ«t..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Lai mÄ“s varÄ“tu ar jums sazinÄties un iegÅ«t papildu informÄciju, iesniegtajÄs atsauksmÄ“s tiks ietverta jÅ«su e-pasta adrese." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Ziņot par problÄ“mu" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Ietvert lietojumprogrammu žurnÄlus, lai palÄ«dzÄ“tu novÄ“rst problÄ“mu (žurnÄlos var bÅ«t ietverta privÄta informÄcija)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Lietojumprogrammu žurnÄlos var bÅ«t ietverta privÄta informÄcija, tostarp jÅ«su identitÄte (e-pasta adrese) un Google diska failu un mapju nosaukumi un rekvizÄ«ti." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Å Ä« informÄcija tiek izmantota tikai tÄs problÄ“mas diagnosticÄ“Å¡anai, par kuru ziņojat, un tÄ ir pieejama tikai personai, kura izskata jÅ«su ziņojumu, kÄ arÄ« tiek saglabÄta ne ilgÄk kÄ 30 dienas." + }, + "FOOTER_CONNECTING": { + "message": "Notiek savienojuma izveide…" + }, + "FOOTER_WAITING": { + "message": "tiek gaidÄ«ta savienojuma izveide..." + }, + "FOR_PLATFORM_MAC": { + "message": "OperÄ“tÄjsistÄ“mai Mac (OS X 10.6 un jaunÄkas versijas)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "OperÄ“tÄjsistÄ“mai Windows (XP un jaunÄkas versijas)" + }, + "FULL_SCREEN": { + "message": "PilnekrÄna režīms" + }, + "GET_STARTED": { + "message": "SÄkt darbu" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Pieņemt" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "NoraidÄ«t" + }, + "HELP": { + "message": "PalÄ«dzÄ«ba" + }, + "HOME_ACCESS_BUTTON": { + "message": "Piekļūt" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Skatiet un kontrolÄ“jiet kopÄ«gotu datoru." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Varat izveidot droÅ¡u savienojumu ar Å¡o datoru, izmantojot Chrome attÄlo darbvirsmu." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "MainÄ«t PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Å is dators Å¡obrÄ«d tiek koplietots, izmantojot citu kontu." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "SkatÄ«t/rediģēt" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Å ajÄ datorÄ ir konfigurÄ“ta atļauja vienam vai vairÄkiem klientiem izveidot savienojumu, neievadot PIN kodu." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "IespÄ“jot attÄlos savienojumus" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Ja vÄ“laties piekļūt Å¡im datoram, izmantojot Chrome attÄlo darbvirsmu, ir jÄiespÄ“jo attÄlie savienojumi." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "AtspÄ“jot attÄlos savienojumus" + }, + "HOME_SHARE_BUTTON": { + "message": "KopÄ«got" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Koplietojiet Å¡o datoru, lai cits lietotÄjs redzÄ“tu un kontrolÄ“tu tÄ darbvirsmu." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Å¡Ä« funkcija vÄ“l nav pieejama jÅ«su datoram)" + }, + "HOST_CATEGORY": { + "message": "Saimniekdators" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Piekļuve liegta Å¡im klientam: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klients, kas izveidojis savienojumu: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Atvienotais klients: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Klienta kanÄla IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Lai iespÄ“jotu attÄlus savienojumus ar citu datoru, instalÄ“jiet Chrome attÄlo darbvirsmu attiecÄ«gajÄ datorÄ un noklikÅ¡Ä·iniet uz $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Jums nav neviena reÄ£istrÄ“ta datora. Lai iespÄ“jotu attÄlus savienojumus ar kÄdu datoru, instalÄ“jiet Chrome attÄlo darbvirsmu attiecÄ«gajÄ datorÄ un noklikÅ¡Ä·iniet uz $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "IepriekÅ¡ bijÄt pierakstÄ«jies kÄ $1$ ($2$). Lai piekļūtu datoriem Å¡ajÄ kontÄ, $3$pierakstieties pÄrlÅ«kÄ Google Chrome$4$, izmantojot Å¡o kontu, un atkÄrtoti instalÄ“jiet Chrome attÄlo darbvirsmu.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "ProgrammatÅ«ras atjauninÄjumi parasti tiek veikti automÄtiski, taÄu dažkÄrt Å¡is process var neizdoties. ProgrammatÅ«ras atjauninÄÅ¡ana ilgst ne vairÄk kÄ dažas minÅ«tes un var tikt veikta, kamÄ“r esat izveidojis attÄlu savienojumu ar datoru." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome attÄlÄ darbvirsma saimniekdatorÄ $1$ ir novecojusi un ir jÄatjaunina.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "PalÄ«dziet mums uzlabot Chrome attÄlo darbvirsmu, ļaujot mums apkopot lietojuma statistiku un avÄriju pÄrskatus." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Lai izveidotu droÅ¡u savienojumu ar Å¡o datoru, lÅ«dzu, izvÄ“lieties tÄdu PIN, kura garums ir $1$vismaz seÅ¡i cipari$2$. Å is PIN bÅ«s nepiecieÅ¡ams, lai izveidotu savienojumu no citas atraÅ¡anÄs vietas.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "NeizdevÄs sÄkt attÄlÄs piekļuves pakalpojumu." + }, + "HOST_SETUP_INSTALL": { + "message": "No pÄrlÅ«ka Chrome tiek lejupielÄdÄ“ta Chrome attÄlÄs darbvirsmas saimniekdatoram paredzÄ“tÄ instalÄ“Å¡anas programma. Kad lejupielÄde bÅ«s pabeigta, lÅ«dzu, vispirms palaidiet instalÄ“Å¡anas programmu." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "LÅ«dzu, vispirms palaidiet instalÄ“Å¡anas programmu." + }, + "HOST_SETUP_STARTED": { + "message": "Å im datoram tika iespÄ“joti attÄlie savienojumi." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "LÅ«dzu, pÄrbaudiet datora baroÅ¡anas pÄrvaldÄ«bas iestatÄ«jumus: datoram ir jÄbÅ«t konfigurÄ“tam tÄ, lai netiktu aktivizÄ“ts miega režīms, kad dators netiek lietots." + }, + "HOST_SETUP_STARTING": { + "message": "Notiek attÄlo savienojumu iespÄ“joÅ¡ana Å¡im datoram…" + }, + "HOST_SETUP_STOPPED": { + "message": "Å im datoram tika atspÄ“joti attÄlie savienojumi." + }, + "HOST_SETUP_STOPPING": { + "message": "Notiek attÄlo savienojumu atspÄ“joÅ¡ana Å¡im datoram…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Å im datoram neizdevÄs atspÄ“jot attÄlo piekļuvi. LÅ«dzu, vÄ“lÄk mÄ“Ä£iniet vÄ“lreiz." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "LejupielÄdÄ“jot Chrome attÄlÄs darbvirsmas saimniekdatora instalÄ“Å¡anas programmu, jÅ«s piekrÄ«tat Google $1$pakalpojumu sniegÅ¡anas noteikumiem$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "JÅ«su PIN ir atjauninÄts." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "NeizdevÄs atjauninÄt PIN. LÅ«dzu, vÄ“lÄk mÄ“Ä£iniet vÄ“lreiz." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Notiek Å¡Ä« datora PIN atjauninÄÅ¡ana…" + }, + "HOST_STARTED": { + "message": "Saimniekdators startÄ“ts Å¡Ädam lietotÄjam: %1." + }, + "HOST_STOPPED": { + "message": "Saimniekdatora darbÄ«ba ir apturÄ“ta." + }, + "IDLE_CONTINUE": { + "message": "TurpinÄt" + }, + "IDLE_DISCONNECT": { + "message": "Atvienot tÅ«lÄ«t" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "JÅ«su $1$ sesija jau kÄdu laiku nav aktÄ«va, un drÄ«zumÄ tiks pÄrtraukts savienojums.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Ar Å¡o datoru" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome attÄlÄs darbvirsmas saimniekdatora instalÄ“Å¡anas programmas lejupielÄde" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Lai koplietotu savu darbvirsmu, paziņojiet tÄlÄk redzamo piekļuves kodu lietotÄjam, kurÅ¡ jums palÄ«dzÄ“s." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "TiklÄ«dz kods ir ievadÄ«ts, tiek sÄkta koplietoÅ¡anas sesija." + }, + "INVALID_PIN": { + "message": "LÅ«dzu, ievadiet PIN, kura garums ir vismaz seÅ¡i cipari." + }, + "IT2ME_FIRST_RUN": { + "message": "EkrÄna koplietoÅ¡ana — ideÄli piemÄ“rota, lai saņemtu attÄlo tehnisko atbalstu." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "TastatÅ«ras izkÄrtojumi" + }, + "LABEL_CONNECTED": { + "message": "Savienojums ir izveidots:" + }, + "LAST_ONLINE": { + "message": "$1$ (pÄ“dÄ“joreiz tieÅ¡saistÄ“: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Uzziniet vairÄk" + }, + "LEARN_MORE": { + "message": "Uzziniet vairÄk." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome attÄlÄs darbvirsmas saimniekdatora preferences" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome attÄlÄs\ndarbvirsmas saimniekdators" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome attÄlÄs darbvirsmas saimniekdatora atinstalÄ“Å¡anas programma" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win datorÄ izmantot labÄs puses Ctrl taustiņu (Mac datorÄ — ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "MaksimizÄ“t logu" + }, + "ME2ME_FIRST_RUN": { + "message": "Piekļūstiet savam datoram, atrodoties jebkurÄ vietÄ." + }, + "MESSAGE_GENERATING": { + "message": "Notiek piekļuves koda Ä£enerÄ“Å¡ana..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "JÅ«su Chrome attÄlÄs darbvirsmas sesija ir pÄrtraukta." + }, + "MESSAGE_SHARED": { + "message": "JÅ«su darbvirsma Å¡obrÄ«d tiek koplietota ar lietotÄju $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "MinimizÄ“t logu" + }, + "MODE_AUTHORIZE": { + "message": "AutorizÄ“Å¡ana" + }, + "MODE_IT2ME": { + "message": "AttÄlÄ palÄ«dzÄ«ba" + }, + "MODE_ME2ME": { + "message": "Mani datori" + }, + "NEW_WINDOW": { + "message": "Jauns logs..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Visi pÄrÄ« savienotie klienti ir dzÄ“sti." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Å ajÄ platformÄ netiek atbalstÄ«ta darbvirsmas integrÄcija. JÅ«s joprojÄm varat izmantot lietojumprogrammu, taÄu lietotÄja pieredze nebÅ«s pietiekami laba." + }, + "OFFLINE": { + "message": "$1$ (bezsaistÄ“)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "NeizdevÄs inicializÄ“t saimniekdatoru." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Saimniekdatora konfigurÄcija nav derÄ«ga." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Saimniekdatora Ä«paÅ¡nieka domÄ“ns nav derÄ«gs." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Saimniekdatora ID nav derÄ«gs." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Saimniekdators ir konfigurÄ“ts ar nederÄ«giem OAuth akreditÄcijas datiem." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Saimniekdators, kas darbojas konsoles pieteikÅ¡anÄs ekrÄnÄ, ir izslÄ“gts, lai atbalstÄ«tu aizkara režīmu, pÄrslÄ“dzoties uz saimniekdatoru, kurÅ¡ darbojas noteikta lietotÄja sesijÄ." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Saimniekdators tiek restartÄ“ts, lai tiktu ņemtas vÄ“rÄ politikas izmaiņas." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Saimniekdatoram neizdevÄs nolasÄ«t politiku." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Saimniekdators tika izslÄ“gts." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "NeatpazÄ«ta saimniekdatora kļūda: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Saimniekdatora Ä«paÅ¡nieka vÄrds nav derÄ«gs." + }, + "OK": { + "message": "Labi" + }, + "OPTIONS_MENU": { + "message": "Opcijas" + }, + "OUTGOING_CONNECTIONS": { + "message": "No Å¡Ä« datora" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "TÄlÄk norÄdÄ«tie klienti ir savienoti pÄrÄ« ar Å¡o datoru un var izveidot savienojumu, nenorÄdot PIN kodu. Varat atsaukt Å¡o atļauju jebkurÄ brÄ«dÄ« (individuÄli vai visiem klientiem)." + }, + "PAIRED_CLIENT_DATE": { + "message": "Datums, kad savienots pÄrÄ«" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klients" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "LÅ«dzu, ievadiet vienu un to paÅ¡u PIN abos lodziņos." + }, + "PIN_MESSAGE": { + "message": "LÅ«dzu, ievadiet saimniekdatora $1$ PIN.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "LÅ«dzu, ievadiet attÄlÄ datora PIN." + }, + "PRODUCT_DESCRIPTION": { + "message": "DroÅ¡i piekļūstiet citiem datoriem vai ļaujiet citam lietotÄjam piekļūt jÅ«su datoram, izmantojot interneta savienojumu." + }, + "PRODUCT_NAME": { + "message": "Chrome attÄlÄ darbvirsma" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome lietotnes straumÄ“Å¡ana" + }, + "RECONNECT": { + "message": "AtkÄrtoti savienot" + }, + "REMEMBER_PIN": { + "message": "NepieprasÄ«t PIN kodu vÄ“lreiz, kad no Å¡Ä«s ierÄ«ces izveidoju savienojumu ar Å¡o saimniekdatoru." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "GalvenÄ bibliotÄ“ka" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Darbvirsmas integrÄcijas process" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Lietojumprogramma, kas paredzÄ“ta komandu sniegÅ¡anai Chrome attÄlÄs darbvirsmas saimniekdatoram." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Saimniekdatora process" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "VietÄ“jais ziņojumapmaiņas saimniekdators attÄlai saimniekdatora pÄrvaldÄ«bai" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "VietÄ“jais ziņojumapmaiņas saimniekdators attÄlai palÄ«dzÄ«bai" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "DroÅ¡Ä«bas atslÄ“gas tÄlvadÄ«bas process" + }, + "RESIZE_TO_CLIENT": { + "message": "MainÄ«t darbvirsmas izmÄ“rus, lai tÄ atbilstu" + }, + "RESTART_BUTTON": { + "message": "RestartÄ“t tÅ«lÄ«t" + }, + "RESTORE_WINDOW": { + "message": "Atjaunot logu" + }, + "RETRY": { + "message": "MÄ“Ä£inÄt vÄ“lreiz" + }, + "SCREEN_OPTIONS": { + "message": "EkrÄna opcijas" + }, + "SEND_CTRL_ALT_DEL": { + "message": "SÅ«tÄ«t Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Ziņot par problÄ“mu..." + }, + "SEND_KEYS": { + "message": "SÅ«tÄ«t taustiņus" + }, + "SEND_PRINT_SCREEN": { + "message": "SÅ«tÄ«t PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Izmantojot Å¡o pakalpojumu, tiek iespÄ“jota ienÄkoÅ¡o savienojumu izveide no Chrome attÄlÄs darbvirsmas klientiem." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Uz Å¡o iestatÄ«jumu attiecas jÅ«su domÄ“na politika." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "KopÄ«got" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Atcelt" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Vai vÄ“laties koplietot Å¡o datoru ar citu lietotÄju, lai viņš varÄ“tu skatÄ«t un pÄrvaldÄ«t tajÄ esoÅ¡o saturu?" + }, + "SHOW_STATS": { + "message": "RÄdÄ«t statistiku" + }, + "SHOW_STATS_WITH_RTT": { + "message": "RÄdÄ«t statistiku (savienojums: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "SamazinÄt, lai ietilptu" + }, + "SIGN_IN_BUTTON": { + "message": "PierakstÄ«ties" + }, + "SIGN_OUT_BUTTON": { + "message": "IzrakstÄ«ties" + }, + "STOP_SHARING_BUTTON": { + "message": "PÄrtraukt koplietoÅ¡anu" + }, + "SURVEY_INVITATION": { + "message": "Vai vÄ“laties palÄ«dzÄ“t uzlabot Chrome attÄlo darbvirsmu? $1$Atbildiet uz aptaujas jautÄjumiem!$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Laiks" + }, + "TOGGLE_STATS": { + "message": "RÄdÄ«t statistiku" + }, + "TOOLTIP_CONNECT": { + "message": "Izveidojiet savienojumu ar $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "AtspÄ“jojiet attÄlos savienojumus ar Å¡o datoru." + }, + "TOOLTIP_REFRESH": { + "message": "AtsvaidzinÄt saimniekdatoru sarakstu" + }, + "TOOLTIP_RENAME": { + "message": "Rediģējiet datora nosaukumu." + }, + "UPDATE_REQUIRED": { + "message": "$1$ (novecojis)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konts" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Lai atļautu piekļuvi, izmantojot Chrome attÄlo darbvirsmu, lÅ«dzu, apstipriniet kontu un PIN kodu." + }, + "WARNING_NAT_DISABLED": { + "message": "PIEZĪME. SaskaÅ†Ä ar politikas iestatÄ«jumiem savienojumus ir atļauts veidot tikai starp jÅ«su tÄ«kla datoriem." + }, + "WARNING_NOT_WINDOWED": { + "message": "PIEZĪME. Lai bÅ«tu pieejami visi Ä«sinÄjumtaustiņi, Chrome attÄlo darbvirsmu varat konfigurÄ“t Å¡Ädi: “AtvÄ“rt kÄ loguâ€." + }, + "WHY_IS_THIS_SAFE": { + "message": "KÄpÄ“c tas ir droÅ¡i?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Logi" + }, + "WORKING": { + "message": "Notiek apstrÄde..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ml/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ml/messages.json new file mode 100644 index 000000000000..f6314c9534b5 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ml/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "അംഗീകരിചàµà´šàµ ഇൻസàµà´±àµà´±à´¾à´³àµà´šàµ†à´¯àµà´¯àµà´•" + }, + "ACCESS_CODE": { + "message": "ആകàµâ€Œà´¸à´¸àµ കോഡàµ" + }, + "ACCESS_CODE_TIMER": { + "message": "$1$-ൽ ആകàµâ€Œà´¸à´¸àµ കോഡൠകാലഹരണപàµà´ªàµ†à´Ÿàµà´‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "ഫീഡàµà´¬à´¾à´•àµà´•àµ" + }, + "ALL_CONNECTIONS": { + "message": "à´Žà´²àµà´²à´¾ കണകàµà´·à´¨àµà´•à´³àµà´‚" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN വീണàµà´Ÿàµà´‚ ടൈപàµà´ªàµà´šàµ†à´¯àµà´¯àµà´•" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "റദàµà´¦à´¾à´•àµà´•àµ‚" + }, + "CLEAR_HISTORY": { + "message": "à´šà´°à´¿à´¤àµà´°à´‚ മായàµâ€Œà´•àµà´•àµà´•" + }, + "CLOSE": { + "message": "à´…à´Ÿà´¯àµà´•àµà´•àµà´•" + }, + "CLOSE_PROMPT": { + "message": "à´ˆ പേജൠഉപേകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ സെഷനàµâ€ അവസാനിപàµà´ªà´¿à´•àµà´•àµà´‚." + }, + "CLOSE_WINDOW": { + "message": "വിനàµâ€à´¡àµ‹ à´…à´Ÿà´¯àµà´•àµà´•àµà´•" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$ à´Žà´¨àµà´¨à´¤à´¿à´²àµ‡à´•àµà´•àµà´³àµà´³ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•à´¾àµ» നിങàµà´™àµ¾ താൽപàµà´ªà´°àµà´¯à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨àµà´µàµ†à´¨àµà´¨àµ തീർചàµà´šà´¯à´¾à´£àµ‹? നിങàµà´™àµ¾ മനസàµà´¸àµ മാറàµà´±àµà´•à´¯à´¾à´£àµ†à´™àµà´•à´¿àµ½, കണകàµà´·à´¨àµà´•àµ¾ à´ªàµà´¨à´ƒà´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ à´† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ സനàµà´¦àµ¼à´¶à´¿à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "കണകàµà´·àµ» പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ" + }, + "CONNECTION_FROM_HEADER": { + "message": "അയചàµà´šà´¯à´¾àµ¾" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "കണകàµà´·àµ» à´šà´°à´¿à´¤àµà´°à´‚" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "തൃപàµâ€Œà´¤à´¿à´•à´°à´‚" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "നലàµà´²à´¤àµ" + }, + "CONNECTION_QUALITY_POOR": { + "message": "മോശമായതàµ" + }, + "CONNECTION_TO_HEADER": { + "message": "à´¸àµà´µàµ€à´•àµ¼à´¤àµà´¤à´¾à´µàµ" + }, + "CONNECT_ANYWAY": { + "message": "à´à´¤àµà´µà´¿à´§àµ‡à´¨à´¯àµà´‚ കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´•" + }, + "CONNECT_BUTTON": { + "message": "കണകàµâ€Œà´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´•" + }, + "CONTINUE_BUTTON": { + "message": "à´¤àµà´Ÿà´°àµ‚" + }, + "CONTINUE_PROMPT": { + "message": "നിങàµà´™àµ¾ നിലവിൽ à´ˆ മെഷീൻ മറàµà´±àµŠà´°àµ ഉപയോകàµà´¤à´¾à´µàµà´®à´¾à´¯à´¿ പങàµà´•à´¿à´Ÿàµà´•à´¯à´¾à´£àµ. നിങàµà´™àµ¾à´•àµà´•àµ à´ˆ പങàµà´•à´¿à´Ÿàµ½ à´¤àµà´Ÿà´°à´£àµ‹?" + }, + "CONTROLLER_NAME": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ കൺടàµà´°àµ‹à´³àµ¼" + }, + "COPYRIGHT": { + "message": "പകർപàµà´ªà´µà´•à´¾à´¶à´‚ 2013 Google Inc. à´Žà´²àµà´²à´¾ അവകാശങàµà´™à´³àµà´‚ നികàµà´·à´¿à´ªàµâ€Œà´¤à´‚." + }, + "CREDITS": { + "message": "à´•àµà´°àµ†à´¡à´¿à´±àµà´±àµà´•àµ¾" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "à´Žà´²àµà´²à´¾à´‚ ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´•" + }, + "DELETE_PAIRED_CLIENT": { + "message": "ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµ‚" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "à´¤àµà´Ÿà´°à´¾àµ» നിങàµà´™à´³à´¾à´¦àµà´¯à´‚ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµ വിപàµà´²àµ€à´•à´°à´¿à´šàµà´š ആകàµâ€Œà´¸à´¸àµà´¸àµ à´…à´¨àµà´®à´¤à´¿à´•àµ¾ à´…à´¨àµà´µà´¦à´¿à´•àµà´•à´£à´‚. നിങàµà´™à´³à´¿à´¤àµ à´’à´°àµà´¤à´µà´£ മാതàµà´°à´‚ ചെയàµâ€Œà´¤à´¾àµ½ മതി." + }, + "DESCRIPTION_CONNECT": { + "message": "“$1$†കàµà´²à´¿à´•àµà´•àµà´šàµ†à´¯àµâ€Œà´¤àµ ആകàµâ€Œà´¸à´¸àµà´¸àµ കോഡൠനൽകാൻ ആരàµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¾à´£àµ നിങàµà´™àµ¾ ആകàµâ€Œà´¸à´¸àµà´¸àµà´šàµ†à´¯àµà´¯à´¾àµ» താൽപàµà´ªà´°àµà´¯à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¤àµ†à´¨àµà´¨àµ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ‹à´Ÿàµ ചോദികàµà´•àµà´•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ വെബിലàµà´Ÿà´¨àµ€à´³à´‚ à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¿ പങàµà´•à´¿à´Ÿà´¾àµ» നിങàµà´™à´³àµ† à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨àµ. à´°à´£àµà´Ÿàµ ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµà´‚ $1$ à´Žà´¨àµà´¨à´¤à´¿àµ½ à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾à´¨à´¾à´•àµà´¨àµà´¨ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "റിമോടàµà´Ÿàµ ഹോസàµà´±àµà´±à´¿à´¨àµ നിങàµà´™à´³àµ† ഒരൠമൂനàµà´¨à´¾à´‚à´•à´•àµà´·à´¿ വെബàµâ€Œà´¸àµˆà´±àµà´±à´¿à´²àµ‡à´•àµà´•àµ à´ªàµà´°à´¾à´®à´¾à´£àµ€à´•à´°à´¿à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµ ആവശàµà´¯à´®à´¾à´£àµ. à´¤àµà´Ÿà´°àµà´¨àµà´¨à´¤à´¿à´¨àµ, ഇനിപàµà´ªà´±à´¯àµà´¨àµà´¨ വിലാസം ആകàµâ€Œà´¸à´¸àµà´¸àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ നിങàµà´™àµ¾ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ അധിക à´…à´¨àµà´®à´¤à´¿à´•àµ¾ à´…à´¨àµà´µà´¦à´¿à´•àµà´•à´£à´‚:" + }, + "DISABLE_HOST": { + "message": "à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´•" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "വിചàµà´›àµ‡à´¦à´¿à´•àµà´•àµà´•" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ സേവനം" + }, + "DURATION_HEADER": { + "message": "സമയ ദൈർഘàµà´¯à´‚" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "à´ˆ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•à´¾àµ» നിങàµà´™àµ¾à´•àµà´•àµ à´…à´¨àµà´®à´¤à´¿à´¯à´¿à´²àµà´²." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "à´ªàµà´°à´¾à´®à´¾à´£àµ€à´•à´°à´£à´‚ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. Chrome-ൽ വീണàµà´Ÿàµà´‚ സൈൻ ഇൻ ചെയàµà´¯àµà´•." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "ആവശàµà´¯à´®àµà´³àµà´³ à´šà´¿à´² ഘടകങàµà´™àµ¾ കാണàµà´¨àµà´¨à´¿à´²àµà´². സോഫàµâ€Œà´±àµà´±àµâ€Œà´µàµ†à´¯à´±à´¿à´¨àµà´±àµ† à´à´±àµà´±à´µàµà´‚ à´ªàµà´¤à´¿à´¯ പതിപàµà´ªàµ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµâ€Œà´¤à´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿàµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´•àµà´•à´¿ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "ഒരൠനെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•àµ പിശകൠഉണàµà´Ÿà´¾à´¯à´¿. നിങàµà´™à´³àµà´Ÿàµ† ഉപകരണം വീണàµà´Ÿàµà´‚ ഓൺലൈൻ ആകàµà´®àµà´ªàµ‹àµ¾ à´žà´™àµà´™àµ¾ ആപàµà´ªàµ à´ªàµà´¨à´°à´¾à´°à´‚à´­à´¿à´•àµà´•àµà´‚." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "സെഷൻ സമാരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ റിമോടàµà´Ÿàµ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. à´ªàµà´°à´¶àµâ€Œà´¨à´‚ നിലനിൽകàµà´•àµà´•à´¯à´¾à´£àµ†à´™àµà´•à´¿àµ½, ഹോസàµâ€Œà´±àµà´±àµ വീണàµà´Ÿàµà´‚ കോൺഫിഗർ ചെയàµà´¯à´¾àµ» à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "വിദൂര à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ കണകàµà´·àµ» à´…à´­àµà´¯àµ¼à´¤àµà´¥à´¨à´•à´³àµ‹à´Ÿàµ à´ªàµà´°à´¤à´¿à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´². ഇതൠഓൺലൈനിലാണോ à´Žà´¨àµà´¨àµ പരിശോധിചàµà´š ശേഷം വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_HOST_OVERLOAD": { + "message": "അസാധàµà´µà´¾à´¯ PIN ഉപയോഗിചàµà´šàµ വിദൂര à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµ ആരോ കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯à´¾àµ» à´¶àµà´°à´®à´¿à´šàµà´šà´¿à´°àµà´¨àµà´¨à´¤à´¿à´¨à´¾àµ½ അതിലേകàµà´•àµà´³àµà´³ കണകàµà´·à´¨àµà´•àµ¾ താൽകàµà´•à´¾à´²à´¿à´•à´®à´¾à´¯à´¿ തടഞàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. പിനàµà´¨àµ€à´Ÿàµ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ രജിസàµà´±àµà´±àµ¼ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "à´…à´¨àµà´¯àµ‹à´œàµà´¯à´®à´²àµà´²à´¾à´¤àµà´¤ à´ªàµà´°àµ‹à´Ÿàµà´Ÿàµ‹à´•àµà´•àµ‹àµ¾ പതിപàµà´ªàµ തിരിചàµà´šà´±à´¿à´žàµà´žàµ. à´°à´£àµà´Ÿàµ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´•à´³à´¿à´²àµà´‚ à´à´±àµà´±à´µàµà´‚ à´ªàµà´¤à´¿à´¯ പതിപàµà´ªàµ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµâ€Œà´¤à´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿàµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´•àµà´•àµà´•." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "ആകàµâ€Œà´¸à´¸àµ കോഡൠഅസാധàµà´µà´¾à´£àµ. വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±à´¾à´¯à´¿ പങàµà´•à´¿à´Ÿà´¾àµ» നയ à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™àµ¾ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´². സഹായതàµà´¤à´¿à´¨à´¾à´¯à´¿ നിങàµà´™à´³àµà´Ÿàµ† സിസàµà´±àµà´±à´‚ à´…à´¡àµâ€Œà´®à´¿à´¨à´¿à´¸àµâ€Œà´Ÿàµà´°àµ‡à´±àµà´±à´±àµà´®à´¾à´¯à´¿ ബനàµà´§à´ªàµà´ªàµ†à´Ÿàµà´•." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "റിമോടàµà´Ÿàµ സെഷൻ കാലഹരണപàµà´ªàµ†à´Ÿàµà´Ÿàµ." + }, + "ERROR_MISSING_PLUGIN": { + "message": "ആവശàµà´¯à´®àµà´³àµà´³ à´šà´¿à´² ഘടകങàµà´™àµ¾ കാണàµà´¨àµà´¨à´¿à´²àµà´². നിങàµà´™àµ¾ Chrome-à´¨àµà´±àµ† à´à´±àµà´±à´µàµà´‚ à´ªàµà´¤à´¿à´¯ പതിപàµà´ªàµ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµà´µàµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´•àµà´•à´¿ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_NACL_DISABLED": { + "message": "ആവശàµà´¯à´®à´¾à´¯ à´šà´¿à´² ഘടകങàµà´™àµ¾ നഷàµâ€Œà´Ÿà´®à´¾à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. chrome://plugins à´Žà´¨àµà´¨à´¤à´¿àµ½ പോയി നേറàµà´±àµ€à´µàµ à´•àµà´²à´¯à´¨àµà´±àµ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´•àµà´·à´®à´®à´¾à´•àµà´•à´¿à´¯à´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿàµ‹à´¯àµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´•àµà´•àµà´•." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "ആവശàµà´¯à´®àµà´³àµà´³ ഒരൠഘടകം à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´‚ നിർതàµà´¤à´¿. à´ˆ à´ªàµà´°à´¶àµâ€Œà´¨à´‚ ഡവലപàµà´ªàµ¼à´®à´¾àµ¼à´•àµà´•àµ റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµà´šàµ†à´¯àµà´¯àµà´•." + }, + "ERROR_NETWORK_FAILURE": { + "message": "നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•à´¿à´²àµ‡à´•àµà´•àµ കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯à´¾à´¨à´¾à´¯à´¿à´²àµà´². നിങàµà´™à´³àµà´Ÿàµ† ഉപകരണം കണകàµà´±àµà´±àµà´šàµ†à´¯àµâ€Œà´¤à´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿàµ‹ à´Žà´¨àµà´¨àµ പരിശോധികàµà´•àµà´•." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "നിങàµà´™àµ¾ Chrome-ൽ സൈൻ ഇൻ ചെയàµâ€Œà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´². സൈൻ ഇൻ ചെയàµâ€Œà´¤àµ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "à´† à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´‚ നടതàµà´¤à´¾àµ» നിങàµà´™àµ¾à´•àµà´•àµ à´…à´¨àµà´®à´¤à´¿à´¯à´¿à´²àµà´²." + }, + "ERROR_NOT_FOUND": { + "message": "à´…à´­àµà´¯àµ¼à´¤àµà´¥à´¿à´šàµà´š വസàµâ€Œà´¤àµ നിലവിലിലàµà´²." + }, + "ERROR_P2P_FAILURE": { + "message": "ഹോസàµà´±àµà´±à´¿àµ½ à´Žà´¤àµà´¤à´¿à´šàµà´šàµ‡à´°à´¾à´¨à´¾à´¯à´¿à´²àµà´². ഇതൠനിങàµà´™àµ¾ ഉപയോഗികàµà´•àµà´¨àµà´¨ നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•à´¿à´¨àµà´±àµ† കോൺഫിഗറേഷൻ കാരണമാകാം." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "സേവനം താലàµâ€â€Œà´•àµà´•à´¾à´²à´¿à´•à´®à´¾à´¯à´¿ ലഭàµà´¯à´®à´²àµà´². പിനàµà´¨àµ€à´Ÿàµ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "ERROR_UNEXPECTED": { + "message": "à´…à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´¤à´®à´¾à´¯ ഒരൠപിശകൠസംഭവിചàµà´šàµ. à´ˆ à´ªàµà´°à´¶àµâ€Œà´¨à´‚ ഡവലപàµà´ªàµ¼à´®à´¾àµ¼à´•àµà´•àµ റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµà´šàµ†à´¯àµà´¯àµà´•." + }, + "EXIT_FULL_SCREEN": { + "message": "പൂരàµâ€à´£àµà´£ à´¸àµà´•àµà´°àµ€à´¨à´¿à´²àµâ€ നിനàµà´¨àµ à´ªàµà´±à´¤àµà´¤àµà´•à´Ÿà´•àµà´•àµà´•" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» റീസെറàµà´±àµà´šàµ†à´¯àµà´¯à´¾à´¨à´¾à´¯à´¿à´²àµà´². à´¤àµà´Ÿàµ¼à´¨àµà´¨àµà´‚ ഒരൠബഗൠറിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµ നിങàµà´™àµ¾à´•àµà´•àµ അയയàµâ€Œà´•àµà´•à´¾à´¨à´¾à´•àµà´‚." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» à´ªàµà´¨à´ƒà´¸à´œàµà´œà´®à´¾à´•àµà´•àµà´•. സംരകàµà´·à´¿à´•àµà´•à´¾à´¤àµà´¤ വർകàµà´•àµ ഉണàµà´Ÿàµ†à´™àµà´•à´¿àµ½ അതൠനഷàµâ€Œà´Ÿà´®à´¾à´•àµà´‚." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "എനികàµà´•àµ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» à´¤àµà´±à´•àµà´•à´¾à´¨à´¾à´•àµà´¨àµà´¨à´¿à´²àµà´²." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·à´¨àµ വേഗത തീരെ à´•àµà´±à´µà´¾à´£àµ." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "എനികàµà´•àµ Google à´¡àµà´°àµˆà´µàµ ഫയലàµà´•àµ¾ à´¤àµà´±à´•àµà´•à´¾à´¨à´¾à´•àµà´¨àµà´¨à´¿à´²àµà´²." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "എനികàµà´•àµ Google à´¡àµà´°àµˆà´µà´¿àµ½ സംരകàµà´·à´¿à´šàµà´š ഫയലàµà´•àµ¾ ഓൺലൈനിൽ കാണാനാകàµà´¨àµà´¨à´¿à´²àµà´²." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "à´Žà´¨àµà´±àµ† കീബോർഡിലോ മൗസിലോ à´ªàµà´°à´¶àµâ€Œà´¨à´™àµà´™à´³àµà´£àµà´Ÿàµ." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† à´ªàµà´°à´¶àµâ€Œà´¨à´‚ പരിഹരികàµà´•à´¾àµ» à´žà´™àµà´™à´³àµ† സഹായികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, തെറàµà´±à´¾à´¯à´¿ സംഭവിചàµà´š കാരàµà´¯à´‚ പറയàµà´•:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "മറàµà´±àµ†à´¨àµà´¤àµ†à´™àµà´•à´¿à´²àµà´‚." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "കൂടàµà´¤àµ½ വിവരങàµà´™àµ¾à´•àµà´•àµ നിങàµà´™à´³àµ† ബനàµà´§à´ªàµà´ªàµ†à´Ÿà´¾àµ» à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, നിങàµà´™àµ¾ സമർപàµà´ªà´¿à´•àµà´•àµà´¨àµà´¨ à´Žà´²àµà´²à´¾ ഫീഡàµâ€Œà´¬à´¾à´•àµà´•à´¿à´²àµà´‚ ഇമെയിൽ വിലാസം ഉൾപàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´‚." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "ഒരൠപàµà´°à´¶àµâ€Œà´¨à´‚ റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµà´šàµ†à´¯àµà´¯àµà´•" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† à´ªàµà´°à´¶àµâ€Œà´¨à´‚ പരിഹരികàµà´•à´¾àµ» à´žà´™àµà´™à´³àµ† സഹായികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» ലോഗàµà´•àµ¾ ഉൾപàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´• (ലോഗിൽ à´¸àµà´µà´•à´¾à´°àµà´¯ വിവരങàµà´™àµ¾ ഉൾപàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•à´¾à´‚)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† à´à´¡à´¨àµà´±à´¿à´±àµà´±à´¿à´¯àµà´‚ (ഇമെയിൽ വിലാസം), Google à´¡àµà´°àµˆà´µà´¿à´²àµ† ഫയലàµà´•à´³àµà´Ÿàµ†à´¯àµà´‚ ഫോൾഡറàµà´•à´³àµà´Ÿàµ†à´¯àµà´‚ പേരàµà´•à´³àµà´‚ à´ªàµà´°àµ‹à´ªàµà´ªàµ¼à´Ÿàµà´Ÿà´¿à´•à´³àµà´‚ ഉൾപàµà´ªàµ†à´Ÿàµ†à´¯àµà´³àµà´³ à´¸àµà´µà´•à´¾à´°àµà´¯ വിവരങàµà´™àµ¾ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ» ലോഗàµà´•à´³à´¿àµ½ ഉൾപàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•à´¾à´‚." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "നിങàµà´™àµ¾ റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨ à´ªàµà´°à´¶àµâ€Œà´¨à´‚ പരിഹരികàµà´•à´¾à´¨à´¾à´¯à´¿ മാതàµà´°à´®àµ‡ à´ˆ വിവരങàµà´™àµ¾ ഉപയോഗികàµà´•àµ‚, ഇതൠനിങàµà´™à´³àµà´Ÿàµ† റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµ à´…à´¨àµà´µàµ‡à´·à´¿à´•àµà´•àµà´¨àµà´¨à´µàµ¼à´•àµà´•àµ മാതàµà´°à´®àµ‡ ലഭàµà´¯à´®à´¾à´•àµ‚ à´’à´ªàµà´ªà´‚ 30 ദിവസതàµà´¤à´¿àµ½ കൂടàµà´¤àµ½ നിലനിർതàµà´¤àµà´•à´¯àµà´®à´¿à´²àµà´²." + }, + "FOOTER_CONNECTING": { + "message": "കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨àµ..." + }, + "FOOTER_WAITING": { + "message": "കണകàµà´·à´¨à´¾à´¯à´¿ കാതàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6-ഉം അതിനàµà´¶àµ‡à´·à´®àµà´³àµà´³à´¤àµà´‚)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP-ഉം അതിനàµà´¶àµ‡à´·à´®àµà´³àµà´³à´¤àµà´‚)" + }, + "FULL_SCREEN": { + "message": "പൂരàµâ€à´£àµà´£ à´¸àµà´•àµà´°àµ€à´¨àµâ€" + }, + "GET_STARTED": { + "message": "ആരംഭികàµà´•à´¾à´‚" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "à´¸àµà´µàµ€à´•à´°à´¿à´•àµà´•àµà´•" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "നിരസികàµà´•àµà´•" + }, + "HELP": { + "message": "സഹായം" + }, + "HOME_ACCESS_BUTTON": { + "message": "ആകàµâ€Œà´¸à´¸àµ" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "ഒരൠപങàµà´•à´¿à´Ÿàµà´Ÿ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ കാണàµà´•, നിയനàµà´¤àµà´°à´¿à´•àµà´•àµà´•." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഉപയോഗിചàµà´šàµ നിങàµà´™àµ¾à´•àµà´•àµ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¿ ആകàµâ€Œà´¸à´¸àµà´¸àµà´šàµ†à´¯àµà´¯à´¾àµ» à´•à´´à´¿à´žàµà´žàµ‡à´•àµà´•à´¾à´‚." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN മാറàµà´±àµà´•" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ നിലവിൽ മറàµà´±àµŠà´°àµ à´…à´•àµà´•àµ—à´£àµà´Ÿà´¿à´²à´¾à´£àµ പങàµà´•à´¿à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "കാണàµà´•/à´Žà´¡à´¿à´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´•" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "ഒരൠPIN നൽകാതെ à´’à´¨àµà´¨àµ‹ അതിലധികമോ à´•àµà´²à´¯à´¨àµà´±àµà´•à´³àµ† കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯à´¾àµ» à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ കോൺഫിഗർ ചെയàµâ€Œà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´•" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ആകàµâ€Œà´¸à´¸àµà´¸àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഉപയോഗികàµà´•à´¾àµ» താൽപàµà´ªà´°àµà´¯à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨àµà´µàµ†à´™àµà´•à´¿àµ½ നിങàµà´™àµ¾ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµ." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´•" + }, + "HOME_SHARE_BUTTON": { + "message": "പങàµà´•à´¿à´Ÿàµà´•" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "മറàµà´±àµŠà´°àµ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ കാണാനàµà´‚ നിയനàµà´¤àµà´°à´¿à´•àµà´•à´¾à´¨àµà´®à´¾à´¯à´¿ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ പങàµà´•à´¿à´Ÿàµà´•." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯à´¿ à´ˆ ഫീചàµà´šàµ¼ ഇതàµà´µà´°àµ† ലഭàµà´¯à´®à´²àµà´²)" + }, + "HOST_CATEGORY": { + "message": "ഹോസàµà´±àµà´±àµ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "ഇനിപàµà´ªà´±à´¯àµà´¨àµà´¨ à´•àµà´²à´¯à´¨àµà´±à´¿à´¨àµ ആകàµâ€Œà´¸à´¸àµà´¸àµ നിരസിചàµà´šàµ: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "à´•àµà´²à´¯à´¨àµà´±àµ കണകàµà´±àµà´±àµà´šàµ†à´¯àµâ€Œà´¤àµ: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "à´•àµà´²à´¯à´¨àµà´±àµ വിചàµà´›àµ‡à´¦à´¿à´šàµà´šàµ: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "à´•àµà´²à´¯à´¨àµà´±à´¿à´¨à´¾à´¯àµà´³àµà´³ ചാനൽ IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "മറàµà´±àµŠà´°àµ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿àµ½ വിദൂര കണകàµà´·àµ» à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, അതിൽ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµâ€Œà´¤àµ “$1$†കàµà´²à´¿à´•àµà´•àµà´šàµ†à´¯àµà´¯àµà´•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "നിങàµà´™àµ¾à´•àµà´•àµ രജിസàµà´±àµà´±àµ¼ ചെയàµâ€Œà´¤ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´•à´³àµŠà´¨àµà´¨àµà´®à´¿à´²àµà´². ഒരൠകമàµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ അതിൽ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµâ€Œà´¤àµ “$1$†കàµà´²à´¿à´•àµà´•àµà´šàµ†à´¯àµà´¯àµà´•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "നിങàµà´™àµ¾ à´®àµà´®àµà´ªàµ $1$ ($2$) à´Žà´¨àµà´¨àµ സൈൻ ഇൻ ചെയàµâ€Œà´¤à´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿàµ. à´† à´…à´•àµà´•àµ—à´£àµà´Ÿà´¿àµ½ നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´•àµ¾ ആകàµâ€Œà´¸à´¸àµà´¸àµ ചെയàµà´¯à´¾àµ», à´† à´…à´•àµà´•àµ—à´£àµà´Ÿàµ ഉപയോഗിചàµà´šàµ, $3$Google Chrome-ലേകàµà´•àµ സൈൻ ഇൻ ചെയàµâ€Œà´¤àµ$4$ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ വീണàµà´Ÿàµà´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "സോഫàµà´±àµà´±àµâ€Œà´µàµ†à´¯àµ¼ à´…à´ªàµâ€Œà´¡àµ‡à´±àµà´±àµà´•àµ¾ സാധാരണഗതിയിൽ യാനàµà´¤àµà´°à´¿à´•à´®à´¾à´¯à´¿ സംഭവികàµà´•àµà´®àµ†à´™àµà´•à´¿à´²àµà´‚ അപൂർവàµà´µà´®à´¾à´¯ à´šà´¿à´² സാഹചരàµà´¯à´™àµà´™à´³à´¿àµ½ à´…à´µ പരാജയപàµà´ªàµ†à´Ÿà´¾à´‚. സോഫàµà´±àµà´±àµâ€Œà´µàµ†à´¯àµ¼ à´…à´ªàµâ€Œà´¡àµ‡à´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´¨àµ à´•àµà´±à´šàµà´šàµà´¸à´®à´¯à´‚ മാതàµà´°à´®àµ‡ à´Žà´Ÿàµà´•àµà´•àµ‚, നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ വിദൂരമായി കണകàµà´±àµà´±àµà´šàµ†à´¯àµâ€Œà´¤à´¿à´°à´¿à´•àµà´•àµà´®àµà´ªàµ‹à´´àµà´‚ ഇതൠചെയàµà´¯à´¾à´¨à´¾à´•àµà´‚." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ à´Žà´¨àµà´¨à´¤à´¿à´²àµ† Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ കാലഹരണപàµà´ªàµ†à´Ÿàµà´Ÿà´¤à´¾à´¯à´¤à´¿à´¨à´¾àµ½ à´…à´ªàµâ€Œà´¡àµ‡à´±àµà´±àµà´šàµ†à´¯àµà´¯àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "ഉപയോഗ à´¸àµà´¥à´¿à´¤à´¿à´µà´¿à´µà´°à´•àµà´•à´£à´•àµà´•àµà´•à´³àµà´‚ à´•àµà´°à´¾à´·àµ റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµà´•à´³àµà´‚ ശേഖരികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ à´žà´™àµà´™à´³àµ† à´…à´¨àµà´µà´¦à´¿à´šàµà´šàµà´•àµŠà´£àµà´Ÿàµ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ മെചàµà´šà´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµ à´žà´™àµà´™à´³àµ† സഹായികàµà´•àµà´•." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµà´³àµà´³ ആകàµâ€Œà´¸à´¸àµ പരിരകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, $1$ആറൠഅകàµà´•à´™àµà´™à´³àµ†à´™àµà´•à´¿à´²àµà´‚$2$ ഉളàµà´³ ഒരൠPIN തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•. മറàµà´±àµŠà´°àµ ലൊകàµà´•àµ‡à´·à´¨à´¿àµ½ നിനàµà´¨àµ കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´®àµà´ªàµ‹àµ¾ à´ˆ PIN ആവശàµà´¯à´®à´¾à´¯à´¿à´µà´°àµà´‚.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "വിദൂര ആകàµâ€Œà´¸à´¸àµ സേവനം ആരംഭികàµà´•àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome, Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ ഡൗൺലോഡàµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨àµ. ഡൗൺലോഡàµà´šàµ†à´¯àµà´¯àµ½ പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¾àµ½ à´¤àµà´Ÿà´°àµà´¨àµà´¨à´¤à´¿à´¨àµ à´®àµà´®àµà´ªà´¾à´¯à´¿ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "à´¤àµà´Ÿà´°àµà´¨àµà´¨à´¤à´¿à´¨àµ à´®àµà´®àµà´ªà´¾à´¯à´¿ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•." + }, + "HOST_SETUP_STARTED": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯à´¿ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•à´¿." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨àµà´±àµ† പവർ മാനേജàµà´®àµ†à´¨àµà´±àµ à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™àµ¾ പരിശോധിചàµà´šàµ, നിഷàµâ€Œà´•àµà´°à´¿à´¯à´®à´¾à´¯à´¿à´°à´¿à´•àµà´•àµà´®àµà´ªàµ‹àµ¾ à´¸àµà´²àµ€à´ªàµà´ªàµ മോഡാകàµà´¨àµà´¨ തരതàµà´¤à´¿àµ½ കോൺഫിഗർ ചെയàµâ€Œà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²àµ†à´¨àµà´¨àµ ഉറപàµà´ªàµà´µà´°àµà´¤àµà´¤àµà´•." + }, + "HOST_SETUP_STARTING": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯à´¿ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨àµâ€¦" + }, + "HOST_SETUP_STOPPED": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯à´¿ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•à´¿." + }, + "HOST_SETUP_STOPPING": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯à´¿ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµà´³àµà´³ വിദൂര ആകàµâ€Œà´¸à´¸àµà´¸àµ à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. പിനàµà´¨àµ€à´Ÿàµ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome റിമോടàµà´Ÿàµ ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ ഡൗൺലോഡàµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµ‚ടെ, നിങàµà´™àµ¾ Google $1$സേവനനിബനàµà´§à´¨à´•àµ¾$4 അംഗീകരികàµà´•àµà´¨àµà´¨àµ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† PIN à´…à´ªàµâ€Œà´¡àµ‡à´±àµà´±àµà´šàµ†à´¯àµâ€Œà´¤àµ." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN à´…à´ªàµâ€Œà´¡àµ‡à´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. പിനàµà´¨àµ€à´Ÿàµ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯àµà´³àµà´³ PIN à´…à´ªàµâ€Œà´¡àµ‡à´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨àµâ€¦" + }, + "HOST_STARTED": { + "message": "ഇനിപàµà´ªà´±à´¯àµà´¨àµà´¨ ഉപയോകàµà´¤à´¾à´µà´¿à´¨à´¾à´¯à´¿ ഹോസàµà´±àµà´±àµ ആരംഭിചàµà´šàµ: %1." + }, + "HOST_STOPPED": { + "message": "ഹോസàµà´±àµà´±àµ നിർതàµà´¤à´¿." + }, + "IDLE_CONTINUE": { + "message": "à´¤àµà´Ÿà´°àµ‚" + }, + "IDLE_DISCONNECT": { + "message": "ഇപàµà´ªàµ‹àµ¾ വിചàµà´›àµ‡à´¦à´¿à´•àµà´•àµà´•" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† $1$ സെഷൻ à´•àµà´±à´šàµà´šàµà´¨àµ‡à´°à´¤àµà´¤àµ‡à´•àµà´•àµ നിർജàµà´œàµ€à´µà´®à´¾à´•àµà´•à´¯àµà´‚ അതൠഉടൻ തനàµà´¨àµ† വിചàµà´›àµ‡à´¦à´¿à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´•à´¯àµà´‚ ചെയàµà´¯àµà´‚.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµ" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome റിമോടàµà´Ÿàµ ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ ഡൗൺലോഡàµà´šàµ†à´¯àµà´¯àµà´•" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ പങàµà´•à´¿à´Ÿàµà´¨àµà´¨à´¤àµ ആരംഭികàµà´•à´¾àµ», നിങàµà´™à´³àµ† സഹായികàµà´•àµà´¨àµà´¨ à´µàµà´¯à´•àµà´¤à´¿à´•àµà´•àµ താഴെയàµà´³àµà´³ ആകàµâ€Œà´¸à´¸àµ കോഡൠനൽകàµà´•." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "അവർ കോഡൠനൽകിയാൽ ഉടൻ തനàµà´¨àµ† നിങàµà´™à´³àµà´Ÿàµ† പങàµà´•à´¿à´Ÿàµ½ സെഷൻ à´¤àµà´Ÿà´™àµà´™àµà´‚." + }, + "INVALID_PIN": { + "message": "ആറോ അതിലധികമോ à´…à´•àµà´•à´™àµà´™àµ¾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨ PIN നൽകàµà´•." + }, + "IT2ME_FIRST_RUN": { + "message": "ഉപയോകàµà´¤à´¾à´µà´¿àµ½ നിനàµà´¨àµà´‚ ഉപയോകàµà´¤à´¾à´µà´¿à´²àµ‡à´•àµà´•àµà´³àµà´³ à´¸àµâ€Œà´•àµà´°àµ€àµ» പങàµà´•à´¿à´Ÿàµ½, വിദൂര സാങàµà´•àµ‡à´¤à´¿à´• പിനàµà´¤àµà´£à´¯àµâ€Œà´•àµà´•àµ ഉതàµà´¤à´®à´‚." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "കീബോർഡൠലേഔടàµà´Ÿàµà´•àµ¾" + }, + "LABEL_CONNECTED": { + "message": "കണകàµà´±àµà´±àµà´šàµ†à´¯àµâ€Œà´¤àµ:" + }, + "LAST_ONLINE": { + "message": "$1$ (അവസാനം ഓൺലൈനിൽ ഉണàµà´Ÿà´¾à´¯à´¿à´°àµà´¨àµà´¨à´¤àµ, $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "à´Žà´™àµà´™à´¨àµ†à´¯àµ†à´¨àµà´¨à´±à´¿à´¯àµà´•." + }, + "LEARN_MORE": { + "message": "കൂടàµà´¤à´²à´±à´¿à´¯àµà´•." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ à´®àµàµ»à´—ണനകൾ" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome വിദൂര\nഡെസàµà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±àµ അൺഇൻസàµà´±àµà´±à´¾à´³àµ¼" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win കീയàµâ€Œà´•àµà´•à´¾à´¯à´¿ വലതൠCtrl ഉപയോഗികàµà´•àµà´• (Mac-ൽ ⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "വിൻഡോ വലàµà´¤à´¾à´•àµà´•àµà´•" + }, + "ME2ME_FIRST_RUN": { + "message": "എവിടെനിനàµà´¨àµà´‚ നിങàµà´™à´³àµà´Ÿàµ† à´¸àµà´µà´¨àµà´¤à´‚ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ആകàµâ€Œà´¸à´¸àµà´šàµ†à´¯àµà´¯àµà´•." + }, + "MESSAGE_GENERATING": { + "message": "ആകàµâ€Œà´¸à´¸àµ കോഡൠസൃഷàµâ€Œà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨àµ..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ സെഷനàµâ€ അവസാനിചàµà´šàµ." + }, + "MESSAGE_SHARED": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ $1$ à´Žà´¨àµà´¨à´¯à´¾à´³àµà´®à´¾à´¯à´¿ നിലവിൽ പങàµà´•à´¿à´Ÿàµà´¨àµà´¨àµ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "വിൻഡോ ചെറàµà´¤à´¾à´•àµà´•àµà´•" + }, + "MODE_AUTHORIZE": { + "message": "അംഗീകരികàµà´•àµà´•" + }, + "MODE_IT2ME": { + "message": "വിദൂര സഹായം" + }, + "MODE_ME2ME": { + "message": "à´Žà´¨àµà´±àµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´•àµ¾" + }, + "NEW_WINDOW": { + "message": "à´ªàµà´¤à´¿à´¯ വിനàµâ€à´¡àµ‹â€¦" + }, + "NO_PAIRED_CLIENTS": { + "message": "ജോടിയാകàµà´•à´¿à´¯ à´Žà´²àµà´²à´¾ à´•àµà´²à´¯à´¨àµà´±àµà´•à´³àµ†à´¯àµà´‚ ഇലàµà´²à´¾à´¤à´¾à´•àµà´•à´¿." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "à´ˆ à´ªàµà´²à´¾à´±àµà´±àµâ€Œà´«àµ‹à´®à´¿àµ½ ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ സംയോജനം പിനàµà´¤àµà´£à´¯àµâ€Œà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´². നിങàµà´™àµ¾à´•àµà´•àµ à´¤àµà´Ÿàµ¼à´¨àµà´¨àµà´‚ ആപàµà´²à´¿à´•àµà´•àµ‡à´·àµ» ഉപയോഗികàµà´•à´¾à´¨à´¾à´•àµà´‚, à´Žà´¨àµà´¨à´¾àµ½ ഉപയോകàµà´¤àµƒ à´…à´¨àµà´­à´µà´‚ തരംതാഴàµâ€Œà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´‚." + }, + "OFFLINE": { + "message": "$1$ (à´“à´«àµâ€Œà´²àµˆàµ»)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "ഹോസàµà´±àµà´±àµ സമാരംഭികàµà´•àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "ഹോസàµà´±àµà´±àµ കോൺഫിഗറേഷൻ അസാധàµà´µà´¾à´£àµ." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "ഹോസàµà´±àµà´±àµ ഉടമ ഡൊമെയàµâ€Œàµ» അസാധàµà´µà´¾à´£àµ." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ഹോസàµà´±àµà´±àµ à´à´¡à´¿ അസാധàµà´µà´¾à´£àµ." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "അസാധàµà´µà´¾à´¯ OAuth à´•àµà´°à´¡àµ»à´·àµà´¯à´²àµà´•àµ¾ ഉപയോഗിചàµà´šàµ ഹോസàµà´±àµà´±àµ കോൺഫിഗർ ചെയàµâ€Œà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "കൺസോൾ ലോജികൠസàµâ€Œà´•àµà´°àµ€à´¨à´¿àµ½ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨ ഹോസàµà´±àµà´±àµ കർടàµà´Ÿàµ» മോഡിനെ പിനàµà´¤àµà´£à´¯àµâ€Œà´•àµà´•à´¾àµ» ഒരൠഉപയോകàµà´¤àµƒ നിർദàµà´¦à´¿à´·àµâ€Œà´Ÿ സെഷനിൽ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨ ഒരൠഹോസàµà´±àµà´±à´¿à´²àµ‡à´•àµà´•àµ മാറികàµà´•àµŠà´£àµà´Ÿàµ à´·à´Ÿàµà´Ÿàµ ഡൗൺ ആയി." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ഒരൠനയ മാറàµà´±à´‚ ബാധകമാകàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ഹോസàµà´±àµà´±àµ à´ªàµà´¨à´°à´¾à´°à´‚à´­à´¿à´•àµà´•àµà´¨àµà´¨àµ." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "നയം റീഡചെയàµà´¯àµà´¨àµà´¨à´¤à´¿àµ½ ഹോസàµà´±àµà´±àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ഹോസàµà´±àµà´±àµ à´·à´Ÿàµà´Ÿàµâ€Œ ഡൗൺ ചെയàµâ€Œà´¤àµ." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "തിരിചàµà´šà´±à´¿à´¯à´ªàµà´ªàµ†à´Ÿà´¾à´¤àµà´¤ ഹോസàµà´±àµà´±àµ പിശകàµ: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "ഹോസàµà´±àµà´±àµ ഉടമ അസാധàµà´µà´¾à´£àµ." + }, + "OK": { + "message": "ശരി" + }, + "OPTIONS_MENU": { + "message": "à´à´šàµà´›à´¿à´•à´™àµà´™à´³àµâ€â€Œ" + }, + "OUTGOING_CONNECTIONS": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµâ€ നിനàµà´¨àµà´‚" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "ഇനിപàµà´ªà´±à´¯àµà´¨àµà´¨ à´•àµà´²à´¯à´¨àµà´±àµà´•àµ¾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´®à´¾à´¯à´¿ ജോടിയാകàµà´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾àµ½ ഒരൠPIN നൽകാതെ കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯à´¾à´¨à´¾à´µàµà´‚. നിങàµà´™àµ¾à´•àµà´•àµ à´à´¤àµà´¸à´®à´¯à´¤àµà´¤àµà´‚ à´ˆ à´…à´¨àµà´®à´¤à´¿ à´µàµà´¯à´•àµà´¤à´¿à´—തമായോ à´Žà´²àµà´²à´¾ à´•àµà´²à´¯à´¨àµà´±àµà´•àµ¾à´•àµà´•àµà´®à´¾à´¯àµ‹ റദàµà´¦à´¾à´•àµà´•à´¾à´¨à´¾à´µàµà´‚." + }, + "PAIRED_CLIENT_DATE": { + "message": "ജോടിയാകàµà´•à´¿à´¯ തീയതി" + }, + "PAIRED_CLIENT_NAME": { + "message": "à´•àµà´²à´¯à´¨àµà´±àµ" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "à´°à´£àµà´Ÿàµ ബോകàµâ€Œà´¸àµà´•à´³à´¿à´²àµà´‚ സമാന PIN നൽകàµà´•." + }, + "PIN_MESSAGE": { + "message": "$1$ à´Žà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ നിങàµà´™à´³àµà´Ÿàµ† PIN നൽകàµà´•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "വിദൂര à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨à´¾à´¯à´¿ നിങàµà´™à´³àµà´Ÿàµ† പിൻ നൽകàµà´•." + }, + "PRODUCT_DESCRIPTION": { + "message": "നെറàµà´±à´¿àµ½ à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¿ മറàµà´±àµ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´•àµ¾ ആകàµâ€Œà´¸à´¸àµ ചെയàµà´¯àµà´• à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ മറàµà´±àµ ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ആകàµâ€Œà´¸à´¸àµ ചെയàµà´¯à´¾àµ» à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´•." + }, + "PRODUCT_NAME": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App à´¸àµâ€Œà´Ÿàµà´°àµ€à´®à´¿à´‚à´—àµ" + }, + "RECONNECT": { + "message": "വീണàµà´Ÿàµà´‚ ബനàµà´§à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•" + }, + "REMEMBER_PIN": { + "message": "à´ˆ ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµ à´ˆ ഹോസàµâ€Œà´±àµà´±à´¿à´²àµ‡à´¯àµà´•àµà´•àµ കണകàµâ€Œà´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´®àµà´ªàµ‹àµ¾ വീണàµà´Ÿàµà´‚ പിൻ ചോദികàµà´•à´°àµà´¤àµ." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "കോർ ലൈബàµà´°à´±à´¿" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ഡെസàµâ€Œà´•àµà´Ÿàµ‹à´ªàµà´ªàµ സംയോജന à´ªàµà´°à´•àµà´°à´¿à´¯" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome റിമോടàµà´Ÿàµ ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ ഹോസàµà´±àµà´±à´¿à´²àµ‡à´•àµà´•àµ കമാൻഡàµà´•àµ¾ നൽകàµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·àµ»." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ഹോസàµà´±àµà´±àµ à´ªàµà´°àµ‹à´¸à´¸àµà´¸àµ" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "വിദൂര ഹോസàµâ€Œà´±àµà´±àµ നിയനàµà´¤àµà´°à´£à´¤àµà´¤à´¿à´¨àµà´³àµà´³ à´ªàµà´°à´¾à´¦àµ‡à´¶à´¿à´• സനàµà´¦àµ‡à´¶à´®à´¯à´¯àµà´•àµà´•àµ½ ഹോസàµâ€Œà´±àµà´±àµ" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "വിദൂര സഹായതàµà´¤à´¿à´¨àµà´³àµà´³ à´ªàµà´°à´¾à´¦àµ‡à´¶à´¿à´• സനàµà´¦àµ‡à´¶à´®à´¯à´¯àµà´•àµà´•àµ½ ഹോസàµâ€Œà´±àµà´±àµ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "à´¸àµà´°à´•àµà´·à´¾ കീ റിമോടàµà´Ÿà´¿à´‚ഗൠപàµà´°àµ‹à´¸à´¸àµà´¸àµ" + }, + "RESIZE_TO_CLIENT": { + "message": "à´…à´¨àµà´¯àµ‹à´œàµà´¯à´®à´¾à´¯ രീതിയിൽ ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªà´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´•" + }, + "RESTART_BUTTON": { + "message": "ഇപàµà´ªàµ‹àµ¾ വീണàµà´Ÿàµà´‚ ആരംഭികàµà´•àµà´•" + }, + "RESTORE_WINDOW": { + "message": "വിൻഡോ à´ªàµà´¨à´ƒà´¸àµà´¥à´¾à´ªà´¿à´•àµà´•àµà´•" + }, + "RETRY": { + "message": "വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•" + }, + "SCREEN_OPTIONS": { + "message": "à´¸àµâ€Œà´•àµà´°àµ€àµ» à´“à´ªàµâ€Œà´·à´¨àµà´•àµ¾" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del അയയàµâ€Œà´•àµà´•àµà´•" + }, + "SEND_FEEDBACK": { + "message": "ഒരൠപàµà´°à´¶àµâ€Œà´¨à´‚ റിപàµà´ªàµ‹àµ¼à´Ÿàµà´Ÿàµà´šàµ†à´¯àµà´¯àµà´•..." + }, + "SEND_KEYS": { + "message": "കീകൾ അയയàµâ€Œà´•àµà´•àµà´•" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn അയയàµâ€Œà´•àµà´•àµà´•" + }, + "SERVICE_DESCRIPTION": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµà´Ÿàµ‹à´ªàµà´ªàµ à´•àµà´²à´¯à´¨àµà´±àµà´•à´³à´¿àµ½ നിനàµà´¨àµà´³àµà´³ ഇൻകമിംഗൠകണകàµà´·à´¨àµà´•à´³àµ† à´ˆ സേവനം à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´•àµà´·à´®à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "നിങàµà´™à´³àµà´Ÿàµ† ഡൊമെയàµâ€Œàµ» നയമാണൠഈ à´•àµà´°à´®àµ€à´•à´°à´£à´¤àµà´¤àµ† നിയനàµà´¤àµà´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "പങàµà´•à´¿à´Ÿàµà´•" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "റദàµà´¦à´¾à´•àµà´•àµ‚" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ കാണàµà´¨àµà´¨à´¤à´¿à´¨àµà´‚ നിയനàµà´¤àµà´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´‚ മറàµà´±àµŠà´°àµ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ പങàµà´•à´¿à´Ÿà´¾àµ» നിങàµà´™àµ¾à´•àµà´•àµ താൽപàµà´ªà´°àµà´¯à´®àµà´£àµà´Ÿàµ‹?" + }, + "SHOW_STATS": { + "message": "à´¸àµà´¥à´¿à´¤à´¿à´µà´¿à´µà´°à´•àµà´•à´£à´•àµà´•àµà´•àµ¾ കാണികàµà´•àµà´•" + }, + "SHOW_STATS_WITH_RTT": { + "message": "à´¸àµà´¥à´¿à´¤à´¿à´µà´¿à´µà´°à´•àµà´•à´£à´•àµà´•àµà´•àµ¾ കാണികàµà´•àµà´• (കണകàµà´·àµ»: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "à´¯àµà´•àµà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ à´šàµà´°àµà´•àµà´•àµà´•" + }, + "SIGN_IN_BUTTON": { + "message": "സൈൻ ഇൻ" + }, + "SIGN_OUT_BUTTON": { + "message": "à´ªàµà´±à´¤àµà´¤àµà´•à´Ÿà´•àµà´•àµà´•" + }, + "STOP_SHARING_BUTTON": { + "message": "പങàµà´•à´¿à´Ÿàµà´¨àµà´¨à´¤àµ നിർതàµà´¤àµà´•" + }, + "SURVEY_INVITATION": { + "message": "Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ മെചàµà´šà´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµ സഹായികàµà´•à´£àµ‹? $1$സർവàµà´µàµ‡à´¯à´¿àµ½ പങàµà´•àµ†à´Ÿàµà´•àµà´•àµà´•.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "സമയം" + }, + "TOGGLE_STATS": { + "message": "à´¸àµà´¥à´¿à´¤à´¿à´µà´¿à´µà´°à´•àµà´•à´£à´•àµà´•àµà´•àµ¾ കാണികàµà´•àµà´•" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ à´Žà´¨àµà´¨à´¤à´¿à´²àµ‡à´•àµà´•àµ കണകàµà´±àµà´±àµà´šàµ†à´¯àµà´¯àµà´•", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´²àµ‡à´•àµà´•àµà´³àµà´³ വിദൂര കണകàµà´·à´¨àµà´•àµ¾ à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•àµà´•" + }, + "TOOLTIP_REFRESH": { + "message": "ഹോസàµà´±àµà´±àµà´•à´³àµà´Ÿàµ† ലിസàµà´±àµà´±àµ à´ªàµà´¤àµà´•àµà´•àµà´•" + }, + "TOOLTIP_RENAME": { + "message": "à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨àµà´±àµ† പേരൠഎഡിറàµà´±àµà´šàµ†à´¯àµà´¯àµà´•" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (കാലഹരണപàµà´ªàµ†à´Ÿàµà´Ÿà´¤àµ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "à´…à´•àµà´•àµ—à´£àµà´Ÿàµ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome വിദൂര ഡെസàµà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªà´¿à´²àµ‚ടെ ആകàµâ€Œà´¸à´¸àµà´¸àµ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ à´šàµà´µà´Ÿàµ†à´¯àµà´³àµà´³ നിങàµà´™à´³àµà´Ÿàµ† à´…à´•àµà´•àµ—à´£àµà´Ÿàµà´‚ PIN-ഉം à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•àµà´•." + }, + "WARNING_NAT_DISABLED": { + "message": "à´¶àµà´°à´¦àµà´§à´¿à´•àµà´•àµà´•: നിങàµà´™à´³àµà´Ÿàµ† നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•à´¿à´¨àµà´³àµà´³à´¿à´²àµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±àµà´•àµ¾ തമàµà´®à´¿à´²àµà´³àµà´³ കണകàµà´·à´¨àµà´•àµ¾ മാതàµà´°à´®àµ‡ നയ à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™àµ¾ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµ‚." + }, + "WARNING_NOT_WINDOWED": { + "message": "à´¶àµà´°à´¦àµà´§à´¿à´•àµà´•àµà´•: à´Žà´²àµà´²à´¾ കീബോർഡൠകàµà´±àµà´•àµà´•àµà´µà´´à´¿à´•à´³àµà´‚ ലഭàµà´¯à´®à´¾à´£àµ†à´¨àµà´¨àµ ഉറപàµà´ªà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, നിങàµà´™àµ¾à´•àµà´•àµ Chrome വിദൂര ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªàµ 'വിൻഡോ ആയി à´¤àµà´±à´•àµà´•àµà´•' à´Žà´¨àµà´¨à´¤à´¿à´²àµ‡à´•àµà´•àµ കോൺഫിഗർ ചെയàµà´¯à´¾à´¨à´¾à´•àµà´‚." + }, + "WHY_IS_THIS_SAFE": { + "message": "ഇതൠസàµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¤àµ à´Žà´¨àµà´¤àµà´•àµŠà´£àµà´Ÿàµ?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "à´ªàµà´°àµ‹à´—മികàµà´•àµà´¨àµà´¨àµâ€¦" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/mr/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/mr/messages.json new file mode 100644 index 000000000000..d32cf928d9bf --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/mr/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "सà¥à¤µà¥€à¤•à¤¾à¤° करा आणि सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करा" + }, + "ACCESS_CODE": { + "message": "पà¥à¤°à¤µà¥‡à¤¶ कोड" + }, + "ACCESS_CODE_TIMER": { + "message": "हा पà¥à¤°à¤µà¥‡à¤¶ कोड $1$ मधà¥à¤¯à¥‡ कालबाहà¥à¤¯ होईल.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "अभिपà¥à¤°à¤¾à¤¯" + }, + "ALL_CONNECTIONS": { + "message": "सरà¥à¤µ कनेकà¥à¤¶à¤¨" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN पà¥à¤¨à¥à¤¹à¤¾-टाइप करा" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "रदà¥à¤¦ करा" + }, + "CLEAR_HISTORY": { + "message": "इतिहास साफ करा" + }, + "CLOSE": { + "message": "बंद करा" + }, + "CLOSE_PROMPT": { + "message": "हे पृषà¥à¤  सोडलà¥à¤¯à¤¾à¤¨à¥‡ आपले Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सतà¥à¤° समापà¥à¤¤ होईल." + }, + "CLOSE_WINDOW": { + "message": "विंडो बंद करा" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "आपलà¥à¤¯à¤¾à¤²à¤¾ खातà¥à¤°à¥€ आहे की $1$ ची दूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ आपण अकà¥à¤·à¤® करू इचà¥à¤›à¤¿à¤¤à¤¾? आपण आपला विचार बदललà¥à¤¯à¤¾à¤¸, आपलà¥à¤¯à¤¾à¤²à¤¾ कनेकà¥à¤¶à¤¨ पà¥à¤¨à¥à¤¹à¤¾-सकà¥à¤·à¤® करणà¥â€à¤¯à¤¾à¤¸à¤¾à¤ à¥€ तà¥à¤¯à¤¾ संगणकाला भेट देणे आवशà¥à¤¯à¤• असेल.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "कनेकà¥à¤¶à¤¨ अयशसà¥à¤µà¥€" + }, + "CONNECTION_FROM_HEADER": { + "message": "पà¥à¤°à¥‡à¤·à¤•" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "कनेकà¥à¤¶à¤¨ इतिहास" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "मधà¥à¤¯à¤®" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "चांगला" + }, + "CONNECTION_QUALITY_POOR": { + "message": "खराब" + }, + "CONNECTION_TO_HEADER": { + "message": "पà¥à¤°à¤¤à¤¿" + }, + "CONNECT_ANYWAY": { + "message": "तरीही कनेकà¥à¤Ÿ करा" + }, + "CONNECT_BUTTON": { + "message": "कनेकà¥â€à¤Ÿ करा" + }, + "CONTINUE_BUTTON": { + "message": "सà¥à¤°à¥‚ ठेवा" + }, + "CONTINUE_PROMPT": { + "message": "आपण दà¥à¤¸à¤°à¥â€à¤¯à¤¾ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤¬à¤°à¥‹à¤¬à¤° सधà¥â€à¤¯à¤¾ या मशीनचे सामयिकरण करीत आहात. आपण सामायिकरण सà¥à¤°à¥ ठेऊ इचà¥à¤›à¤¿à¤¤à¤¾?" + }, + "CONTROLLER_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ नियंतà¥à¤°à¤•" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. सरà¥à¤µ हकà¥à¤• राखीव." + }, + "CREDITS": { + "message": "कà¥à¤°à¥‡à¤¡à¤¿à¤Ÿ" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "सरà¥à¤µ हटवा" + }, + "DELETE_PAIRED_CLIENT": { + "message": "हटवा" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "सà¥à¤°à¥ ठेवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आपण सरà¥à¤µà¤ªà¥à¤°à¤¥à¤® आपलà¥à¤¯à¤¾ संगणकावर विसà¥à¤¤à¤¾à¤°à¤¿à¤¤ पà¥à¤°à¤µà¥‡à¤¶ परवानगà¥à¤¯à¤¾ मंजूर करणे आवशà¥à¤¯à¤• आहे. आपलà¥à¤¯à¤¾à¤²à¤¾ हे केवळ à¤à¤•à¤¦à¤¾à¤š करावे लागते." + }, + "DESCRIPTION_CONNECT": { + "message": "आपण जà¥à¤¯à¤¾ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ संगणकामधà¥â€à¤¯à¥‡ पà¥à¤°à¤µà¥‡à¤¶ करू इचà¥à¤›à¤¿à¤¤à¤¾ तà¥à¤¯à¤¾à¤¸ “$1$†कà¥à¤²à¤¿à¤• करणà¥â€à¤¯à¤¾à¤¸ आणि आपलà¥â€à¤¯à¤¾à¤²à¤¾ पà¥à¤°à¤µà¥‡à¤¶ कोड देणà¥â€à¤¯à¤¾à¤¸ सांगा.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª आपलà¥à¤¯à¤¾à¤²à¤¾ वेबवर आपला संगणक सà¥à¤°à¤•à¥à¤·à¤¿à¤¤à¤ªà¤£à¥‡ सामायिक करणà¥â€à¤¯à¤¾à¤šà¥€ अनà¥à¤®à¤¤à¥€ देतो. दोनà¥à¤¹à¥€ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤‚नी Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª अâ€à¥…प चालवत असणे आवशà¥â€à¤¯à¤• आहे, जो $1$ येथे सापडू शकतो.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "दूरसà¥à¤¥ होसà¥à¤Ÿà¤¸à¤¾à¤ à¥€ आपण à¤à¤•à¤¾ तृतीय-पकà¥à¤· वेबसाइटवर पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¥ƒà¤¤ करणे आवशà¥à¤¯à¤• आहे. सà¥à¤°à¥‚ ठेवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, या पतà¥à¤¤à¥à¤¯à¤¾à¤®à¤§à¥à¤¯à¥‡ पà¥à¤°à¤µà¥‡à¤¶ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आपण Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ªà¤²à¤¾ अतिरिकà¥à¤¤ परवानगà¥à¤¯à¤¾ मंजूर करणे आवशà¥à¤¯à¤• आहे:" + }, + "DISABLE_HOST": { + "message": "अकà¥à¤·à¤® करा" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "â€à¤¡à¤¿à¤¸à¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सेवा" + }, + "DURATION_HEADER": { + "message": "कालावधी" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "आपलà¥à¤¯à¤¾à¤²à¤¾ हा अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— चालविणà¥à¤¯à¤¾à¤šà¥€ परवानगी नाही." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¤°à¤£ अयशसà¥à¤µà¥€. कृपया Chrome वर पà¥à¤¨à¥à¤¹à¤¾ साइन इन करा." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "काही आवशà¥à¤¯à¤• घटक गहाळ आहेत. कृपया आपण सॉफà¥à¤Ÿà¤µà¥‡à¤…रची नवीनतम आवृतà¥à¤¤à¥€ सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ केली असलà¥à¤¯à¤¾à¤šà¥‡ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करा आणि पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "à¤à¤• नेटवरà¥à¤• तà¥à¤°à¥à¤Ÿà¥€ आली. आपले डिवà¥â€à¤¹à¤¾à¤‡à¤¸ पà¥à¤¨à¥à¤¹à¤¾ ऑनलाइन असते तेवà¥â€à¤¹à¤¾ आमà¥â€à¤¹à¥€ अâ€à¥…प रीसà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ करू." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "सतà¥à¤° आरंभ करणà¥à¤¯à¤¾à¤¤ दूरसà¥à¤¥ संगणक अयशसà¥à¤µà¥€ à¤à¤¾à¤²à¥‡ आहे. समसà¥à¤¯à¤¾ कायम राहिलà¥à¤¯à¤¾à¤¸ कृपया होसà¥à¤Ÿ पà¥à¤¨à¥à¤¹à¤¾ कॉनà¥à¤«à¤¿à¤—र करणà¥â€à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "कनेकà¥â€à¤¶à¤¨ विनंतà¥à¤¯à¤¾à¤‚ना दूरसà¥à¤¥ संगणक पà¥à¤°à¤¤à¤¿à¤¸à¤¾à¤¦ देत नाही. ते ऑनलाइन असलà¥à¤¯à¤¾à¤šà¥‡ सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करा आणि पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_HOST_OVERLOAD": { + "message": "दूरसà¥à¤¥ संगणकाची कनेकà¥à¤¶à¤¨ तातà¥à¤ªà¥à¤°à¤¤à¥€ अवरोधित करणà¥à¤¯à¤¾à¤¤ आली आहेत कारण कोणीतरी अवैध PIN सह तà¥à¤¯à¤¾à¤µà¤° कनेकà¥à¤Ÿ करणà¥â€à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करीत होते. कृपया नंतर पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "या संगणकावर नोंदणी करणà¥â€à¤¯à¤¾à¤¤ अयशसà¥à¤µà¥€." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "विसंगत पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤² आवृतà¥à¤¤à¥€ आढळली. कृपया आपलà¥à¤¯à¤¾à¤•à¤¡à¥‡ दोनà¥à¤¹à¥€ संगणकांवर सॉफà¥à¤Ÿà¤µà¥‡à¤…रची नवीनतम आवृतà¥à¤¤à¥€ सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ केली असलà¥à¤¯à¤¾à¤šà¥‡ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करा आणि पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "पà¥à¤°à¤µà¥‡à¤¶ कोड अवैध आहे. कृपया पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "धोरण सेटिंगà¥à¤œ हा संगणक Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿà¤šà¥à¤¯à¤¾ रà¥à¤ªà¤¾à¤¤ सामायिकरणास परवानगी देत नाहीत. सहायà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आपलà¥à¤¯à¤¾ सिसà¥à¤Ÿà¥€à¤® पà¥à¤°à¤¶à¤¾à¤¸à¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "दूरसà¥à¤¥ सतà¥à¤° कालबाहà¥à¤¯ à¤à¤¾à¤²à¥‡ आहे." + }, + "ERROR_MISSING_PLUGIN": { + "message": "काही आवशà¥à¤¯à¤• घटक गहाळ आहेत. कृपया आपण Chrome ची नवीनतम आवृतà¥à¤¤à¥€ चालवत असलà¥à¤¯à¤¾à¤šà¥‡ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करा आणि पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_NACL_DISABLED": { + "message": "काही आवशà¥à¤¯à¤• घटक गहाळ आहेत. कृपया Chrome://pluginz येथे जा आणि मूळ कà¥à¤²à¤¾à¤¯à¤‚ट सकà¥à¤·à¤® केलेला असलà¥à¤¯à¤¾à¤šà¥€ खातà¥à¤°à¥€ करा." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "à¤à¤•à¤¾ आवशà¥à¤¯à¤• घटकाने कारà¥à¤¯ करणे थांबविले आहे. कृपया विकासकांकडे या समसà¥à¤¯à¥‡à¤šà¤¾ अहवाल दà¥à¤¯à¤¾." + }, + "ERROR_NETWORK_FAILURE": { + "message": "नेटवरà¥à¤•à¤²à¤¾ कनेकà¥à¤Ÿ करू शकलो नाही. कृपया आपले डिवà¥à¤¹à¤¾à¤‡à¤¸ ऑन-लाइन असलà¥à¤¯à¤¾à¤šà¥‡ तपासा." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "आपण Chrome वर साइन इन केलेले नाही. कृपया साइन इन करा आणि पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "आपलà¥à¤¯à¤¾à¤²à¤¾ ती कà¥à¤°à¤¿à¤¯à¤¾ करणà¥à¤¯à¤¾à¤šà¥€ परवानगी नाही." + }, + "ERROR_NOT_FOUND": { + "message": "विनंती केलेले ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ नाही." + }, + "ERROR_P2P_FAILURE": { + "message": "होसà¥â€à¤Ÿà¤µà¤° पोहोचणà¥â€à¤¯à¤¾à¤¤ अकà¥à¤·à¤®. हे बहà¥à¤¦à¤¾ आपण वापरत असलेलà¥à¤¯à¤¾ नेटवरà¥à¤•à¤šà¥à¤¯à¤¾ कॉनà¥à¤«à¤¿à¤—रेशनमà¥à¤³à¥‡ à¤à¤¾à¤²à¥‡ आहे." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "सेवा तातà¥à¤ªà¥à¤°à¤¤à¥€ अनà¥à¤ªà¤²à¤¬à¥à¤§ आहे. कृपया नंतर पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "ERROR_UNEXPECTED": { + "message": "à¤à¤• अनपेकà¥à¤·à¤¿à¤¤ तà¥à¤°à¥à¤Ÿà¥€ आली. कृपया विकसकांकडे या समसà¥à¤¯à¥‡à¤šà¤¾ अहवाल दà¥à¤¯à¤¾." + }, + "EXIT_FULL_SCREEN": { + "message": "पूरà¥à¤£ सà¥à¤•à¥à¤°à¥€à¤¨à¤®à¤§à¥‚न निरà¥à¤—मन करा" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— रीसेट करणे शकà¥à¤¯ à¤à¤¾à¤²à¥‡ नाही. आपण तरीही à¤à¤• दोष अहवाल पाठवू शकता." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— रीसेट करा. आपण कोणतेही जतन न केलेले कारà¥à¤¯ गमवाल." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "मी अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— उघडू शकत नाही." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— खूप धीमा à¤à¤¾à¤²à¤¾ आहे." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "मी माà¤à¥à¤¯à¤¾ Google डà¥à¤°à¤¾à¤‡à¤µà¥à¤¹ फायली उघडू शकत नाही." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "मी Google डà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¤®à¤§à¥à¤¯à¥‡ माà¤à¥à¤¯à¤¾ जतन केलेलà¥à¤¯à¤¾ फायली ऑनलाइन पाहू शकत नाही." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "मला माà¤à¥à¤¯à¤¾ कीबोरà¥à¤¡ किंवा माऊसमधà¥à¤¯à¥‡ समसà¥à¤¯à¤¾ येत आहेत." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "आपलà¥à¤¯à¤¾ समसà¥à¤¯à¥‡à¤šà¥‡ निराकरण करणà¥à¤¯à¤¾à¤¤ आमà¥à¤¹à¤¾à¤²à¤¾ मदत करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, कृपया काय चà¥à¤•à¤²à¥‡ ते आमà¥à¤¹à¤¾à¤²à¤¾ सांगा:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "काहीतरी दà¥à¤¸à¤°à¥‡." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "निवडा…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "अधिक माहितीसाठी आपलà¥à¤¯à¤¾à¤¶à¥€ संपरà¥à¤• साधणà¥à¤¯à¤¾à¤¸ आमà¥à¤¹à¤¾à¤²à¤¾ अनà¥à¤®à¤¤à¥€ देणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾, आपला ईमेल पतà¥à¤¤à¤¾ आपण सबमिट करता तà¥à¤¯à¤¾ कोणतà¥à¤¯à¤¾à¤¹à¥€ अभिपà¥à¤°à¤¾à¤¯à¤¾à¤¤ समाविषà¥à¤Ÿ केला जाईल." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "समसà¥à¤¯à¥‡à¤šà¤¾ अहवाल दà¥à¤¯à¤¾" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "आपलà¥à¤¯à¤¾ समसà¥à¤¯à¥‡à¤šà¥‡ निराकरण करणà¥à¤¯à¤¾à¤¤ आमà¥à¤¹à¤¾à¤²à¤¾ मदत करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— लॉग समाविषà¥à¤Ÿ करा (लॉगमधà¥à¤¯à¥‡ खाजगी माहिती असू शकते)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— लॉगमधà¥à¤¯à¥‡ आपली ओळख (ईमेल पतà¥à¤¤à¤¾) आणि Google डà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¤®à¤§à¥€à¤² फायली आणि फोलà¥à¤¡à¤°à¤šà¥€ नावे आणि गà¥à¤£à¤§à¤°à¥à¤® यासह, खाजगी माहिती समाविषà¥à¤Ÿ असू शकते." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ही माहिती केवळ आपण अहवाल देत असलेलà¥à¤¯à¤¾ समसà¥à¤¯à¥‡à¤šà¥‡ निदान करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ वापरली जाते, ही आपलà¥à¤¯à¤¾ अहवालाचे अनà¥à¤µà¥‡à¤·à¤£ करणारà¥â€à¤¯à¤¾ केवळ à¤à¤–ादà¥à¤¯à¤¾ वà¥à¤¯à¤•à¥à¤¤à¥€à¤¸à¤¾à¤ à¥€ उपलबà¥à¤§ असते आणि ही 30 दिवसांपेकà¥à¤·à¤¾ जासà¥à¤¤ ठेवली जात नाही." + }, + "FOOTER_CONNECTING": { + "message": "कनेकà¥à¤Ÿ करीत आहे..." + }, + "FOOTER_WAITING": { + "message": "कनेकà¥à¤¶à¤¨à¤¸à¤¾à¤ à¥€ पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करत आहे…" + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 आणि तà¥à¤¯à¤¾à¤¨à¤‚तरचे) साठी" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP आणि तà¥à¤¯à¤¾à¤¨à¤‚तरचे) साठी" + }, + "FULL_SCREEN": { + "message": "पूरà¥à¤£ सà¥à¤•à¥à¤°à¥€à¤¨" + }, + "GET_STARTED": { + "message": "पà¥à¤°à¤¾à¤°à¤‚भ करा" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "सà¥à¤µà¥€à¤•à¤¾à¤°à¤¾" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "नकार दà¥à¤¯à¤¾" + }, + "HELP": { + "message": "मदत" + }, + "HOME_ACCESS_BUTTON": { + "message": "पà¥à¤°à¤µà¥‡à¤¶" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "सामायिक केलेला संगणक पहा आणि नियंतà¥à¤°à¤¿à¤¤ करा." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome दूरसà¥â€à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª वापरà¥à¤¨ आपण या संगणकावर सà¥à¤°à¤•à¥à¤·à¤¿à¤¤à¤ªà¤£à¥‡ पà¥à¤°à¤µà¥‡à¤¶ करू शकता." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN बदला" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "हा संगणक सधà¥à¤¯à¤¾ à¤à¤•à¤¾ वेगळà¥à¤¯à¤¾ खातà¥à¤¯à¤¾ अंतरà¥à¤—त सामायिक केला आहे." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "पहा/संपादित करा" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "हा संगणक PIN पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ न करता à¤à¤• किंवा अधिक कà¥à¤²à¤¾à¤¯à¤‚टना कनेकà¥à¤Ÿ करणà¥à¤¯à¤¾à¤šà¥€ अनà¥à¤®à¤¤à¥€ देणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ कॉनà¥à¤«à¤¿à¤—र केला आहे." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "दूरसà¥à¤¥ कनेकà¥â€à¤¶à¤¨ सकà¥à¤·à¤® करा" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "या संगणकावर पà¥à¤°à¤µà¥‡à¤¶ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आपण Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª वापरू इचà¥à¤›à¤¿à¤¤ असलà¥à¤¯à¤¾à¤¸ आपण दूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करणे आवशà¥à¤¯à¤• आहे." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "दूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® करा" + }, + "HOME_SHARE_BUTTON": { + "message": "सामà¤¾à¤¯à¤¿à¤• करा" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "पाहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आणि नियंतà¥à¤°à¤£à¤¾à¤¸à¤¾à¤ à¥€ हा संगणक दà¥à¤¸à¤°à¥â€à¤¯à¤¾ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤¶à¥€ सामयिक करा." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(हे वैशिषà¥à¤Ÿà¥à¤¯ अदà¥à¤¯à¤¾à¤ª आपलà¥à¤¯à¤¾ संगणकासाठी उपलबà¥à¤§ नाही)" + }, + "HOST_CATEGORY": { + "message": "होसà¥à¤Ÿ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "कà¥à¤²à¤¾à¤¯à¤‚टसाठी पà¥à¤°à¤µà¥‡à¤¶ नाकारला: %1" + }, + "HOST_CLIENT_CONNECTED": { + "message": "कनेकà¥à¤Ÿ केलेला कà¥à¤²à¤¾à¤¯à¤‚ट: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ केलेला कà¥à¤²à¤¾à¤¯à¤‚ट: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "कà¥à¤²à¤¾à¤¯à¤‚ट साठी चॅनेल IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "à¤à¤•à¤¾ वेगळà¥à¤¯à¤¾ संगणकावर दूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª तेथे सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करा आणि “$1$†कà¥à¤²à¤¿à¤• करा.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "आपलà¥à¤¯à¤¾à¤•à¤¡à¥‡ नोंदणी केलेले कोणतेही संगणक नाहीत. संगणकावर दूरसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª तेथे सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करा आणि “$1$†कà¥à¤²à¤¿à¤• करा.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "आपण यापूरà¥à¤µà¥€ $1$ ($2$) मà¥à¤¹à¤£à¥‚न साइन इन केले होते. तà¥à¤¯à¤¾ खातà¥à¤¯à¤¾à¤®à¤§à¥à¤¯à¥‡ आपलà¥à¤¯à¤¾ संगणकावर पà¥à¤°à¤µà¥‡à¤¶ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, तà¥à¤¯à¤¾ खातà¥à¤¯à¤¾à¤¸à¤¹ $3$Google Chrome वर साइन इन करा$4$ आणि Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª पà¥à¤¨à¥à¤¹à¤¾ सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करा.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "सॉफà¥à¤Ÿà¤µà¥‡à¤…र अदà¥à¤¯à¤¤à¤¨à¥‡ सामानà¥à¤¯à¤¤à¤ƒ सà¥à¤µà¤¯à¤‚चलितपणे होतात, परंतॠकाही कà¥à¤µà¤šà¤¿à¤¤ पà¥à¤°à¤•à¤°à¤£à¤¾à¤‚मधà¥à¤¯à¥‡ अयशसà¥à¤µà¥€ होऊ शकतात. सॉफà¥à¤Ÿà¤µà¥‡à¤…र अदà¥à¤¯à¤¤à¤¨à¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ काही मिनिटांपेकà¥à¤·à¤¾ जासà¥à¤¤ वेळ लागत नाही आणि आपलà¥à¤¯à¤¾ संगणकास दूरसà¥à¤¥à¤ªà¤£à¥‡ कनेकà¥à¤Ÿ केलेले असताना पूरà¥à¤£ केली जाऊ शकतात." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ वरील Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª कालबाहà¥à¤¯ à¤à¤¾à¤²à¤¾ आहे आणि अदà¥à¤¯à¤¤à¤¨à¤¿à¤¤ करणà¥à¤¯à¤¾à¤šà¥€ आवशà¥à¤¯à¤•à¤¤à¤¾ आहे.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "आमà¥à¤¹à¤¾à¤²à¤¾ वापर आकडेवारी आणि कà¥à¤°à¥…श अहवाल संकलित करणà¥â€à¤¯à¤¾à¤¸à¤¾à¤ à¥€ अनà¥à¤®à¤¤à¥€ देऊन आमà¥à¤¹à¤¾à¤²à¤¾ Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सà¥à¤§à¤¾à¤°à¤£à¥à¤¯à¤¾à¤¸ मदत करा." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "या संगणकावर पà¥à¤°à¤µà¥‡à¤¶ संरकà¥à¤·à¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, कृपया $1$कमीत कमी सहा अंकांचा$2$ à¤à¤• PIN निवडा. दà¥à¤¸à¤°à¥â€à¤¯à¤¾ सà¥à¤¥à¤¾à¤¨à¤¾à¤µà¤°à¥‚न कनेकà¥à¤Ÿ करताना हा PIN आवशà¥à¤¯à¤• असेल.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "दूरसà¥â€à¤¥ पà¥à¤°à¤µà¥‡à¤¶ सेवा पà¥à¤°à¤¾à¤°à¤‚भ करणà¥â€à¤¯à¤¾à¤¤ अयशसà¥à¤µà¥€." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome हे Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ इनà¥à¤¸à¥â€à¤Ÿà¥‰à¤²à¤° डाउनलोड करीत आहे. à¤à¤•à¤¦à¤¾ डाउनलोड पूरà¥à¤£ à¤à¤¾à¤²à¥à¤¯à¤¾à¤¨à¤‚तर, कृपया सà¥à¤°à¥ ठेवणà¥â€à¤¯à¤¾à¤ªà¥‚रà¥à¤µà¥€ इनà¥à¤¸à¥â€à¤Ÿà¥‰à¤²à¤° चालवा." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "कृपया सà¥à¤°à¥ ठेवणà¥â€à¤¯à¤¾à¤ªà¥‚रà¥à¤µà¥€ इनà¥à¤¸à¥â€à¤Ÿà¥‰à¤²à¤° चालवा." + }, + "HOST_SETUP_STARTED": { + "message": "या संगणकाची â€à¤¦à¥‚रसà¥à¤¥ कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करणà¥â€à¤¯à¤¾à¤¤ आली आहेत." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "कृपया आपलà¥à¤¯à¤¾ संगणकाची ऊरà¥à¤œà¤¾ वà¥à¤¯à¤µà¤¸à¥â€à¤¥à¤¾à¤ªà¤¨ सेटिंगà¥à¤œ तपासा आणि निषà¥à¤•à¥à¤°à¤¿à¤¯ असताना तà¥à¤¯à¤¾ सà¥à¤²à¥€à¤ª मधà¥â€à¤¯à¥‡ जाणà¥â€à¤¯à¤¾à¤¸à¤¾à¤ à¥€ कॉनà¥â€à¤«à¤¿à¤—र केलà¥à¤¯à¤¾ नसलà¥à¤¯à¤¾à¤šà¥‡ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करा." + }, + "HOST_SETUP_STARTING": { + "message": "या संगणकासाठी दूरसà¥à¤¥ कनेकà¥â€à¤¶à¤¨ सकà¥à¤·à¤® करीत आहे..." + }, + "HOST_SETUP_STOPPED": { + "message": "या संगणकाची दूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® केली गेली आहेत." + }, + "HOST_SETUP_STOPPING": { + "message": "या संगणकासाठी दूरसà¥â€à¤¥ कनेकà¥à¤¶à¤¨ अकà¥à¤·à¤® करीत आहे..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "या संगणकावरील दूरसà¥â€à¤¥ पà¥à¤°à¤µà¥‡à¤¶ अकà¥à¤·à¤® करणà¥â€à¤¯à¤¾à¤¤ अयशसà¥à¤µà¥€. कृपया नंतर पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¤° डाउनलोड करून, आपण Google $1$सेवा अटीं$4ना सहमती देता.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "आपला PIN अदà¥à¤¯à¤¤à¤¨à¤¿à¤¤ केला गेला." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN अदà¥à¤¯à¤¤à¤¤à¤¨à¤¿à¤¤ करणà¥â€à¤¯à¤¾à¤¤ अयशसà¥à¤µà¥€. कृपया नंतर पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "या संगणकासाठी PIN अदà¥à¤¯à¤¤à¤¨à¤¿à¤¤ करणà¥â€à¤¯à¤¾à¤¤ येत आहे..." + }, + "HOST_STARTED": { + "message": "वापरकरà¥à¤¤à¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पà¥à¤°à¤¾à¤°à¤‚भ केलेला होसà¥à¤Ÿ: %1." + }, + "HOST_STOPPED": { + "message": "होसà¥à¤Ÿ थांबले." + }, + "IDLE_CONTINUE": { + "message": "सà¥à¤°à¥‚ ठेवा" + }, + "IDLE_DISCONNECT": { + "message": "आता डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ करा" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "आपले $1$ सतà¥à¤° काही काळ निषà¥à¤•à¥à¤°à¤¿à¤¯ होते आणि लवकरच डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ केले जाईल.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "या संगणकावर" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¤° डाउनलोड करा" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "आपलà¥à¤¯à¤¾ डेसà¥à¤•à¤Ÿà¥‰à¤ªà¤šà¥‡ सामायिकरण सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, आपलà¥à¤¯à¤¾à¤²à¤¾ सहायà¥à¤¯ करणारà¥â€à¤¯à¤¾ वà¥à¤¯à¤•à¥à¤¤à¥€à¤²à¤¾ खालील पà¥à¤°à¤µà¥‡à¤¶ कोड दà¥à¤¯à¤¾." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "à¤à¤•à¤¦à¤¾ तà¥à¤¯à¤¾à¤‚नी कोड पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ केलà¥à¤¯à¤¾à¤¨à¤‚तर आपले सामायिकरण सतà¥à¤° सà¥à¤°à¥‚ होईल." + }, + "INVALID_PIN": { + "message": "कृपया सहा किंवा अधिक अंक असलेला à¤à¤• PIN पà¥à¤°à¤µà¤¿à¤·à¥â€à¤Ÿ करा." + }, + "IT2ME_FIRST_RUN": { + "message": "वापरकरà¥à¤¤à¤¾-ते-वापरकरà¥à¤¤à¤¾ सà¥à¤•à¥à¤°à¥€à¤¨ सामायिकरण दूरसà¥â€à¤¥ तांतà¥à¤°à¤¿à¤• समरà¥à¤¥à¤¨à¤¾à¤¸à¤¾à¤ à¥€ परिपूरà¥à¤£." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "कीबोरà¥à¤¡ लेआउट" + }, + "LABEL_CONNECTED": { + "message": "कनेकà¥à¤Ÿ केले:" + }, + "LAST_ONLINE": { + "message": "$1$ (अखरेचे ऑनलाइन $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "कसे ते जाणून घà¥à¤¯à¤¾." + }, + "LEARN_MORE": { + "message": "अधिक जाणून घà¥à¤¯à¤¾." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¥‡" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome दूरसà¥à¤¥\nडेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿ विसà¥à¤¥à¤¾à¤ªà¤¨à¤•à¤°à¥à¤¤à¤¾" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win की साठी (⌘ Mac वर) योगà¥à¤¯ Ctrl वापरा" + }, + "MAXIMIZE_WINDOW": { + "message": "विंडो वाढवा" + }, + "ME2ME_FIRST_RUN": { + "message": "आपलà¥à¤¯à¤¾ सà¥à¤µà¤¤:चà¥à¤¯à¤¾ संगणकावर कà¥à¤ à¥‚नही पà¥à¤°à¤µà¥‡à¤¶ करा." + }, + "MESSAGE_GENERATING": { + "message": "पà¥à¤°à¤µà¥‡à¤¶ कोड वà¥à¤¯à¥à¤¤à¥à¤ªà¤¨à¥à¤¨ करत आहे…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "आपले Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सतà¥à¤° समापà¥à¤¤ à¤à¤¾à¤²à¥‡ आहे." + }, + "MESSAGE_SHARED": { + "message": "आपला डेसà¥à¤•à¤Ÿà¥‰à¤ª सधà¥à¤¯à¤¾ $1$ सह सामायिक केला आहे.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "विंडो लहान करा" + }, + "MODE_AUTHORIZE": { + "message": "अधिकृत करा" + }, + "MODE_IT2ME": { + "message": "दूरसà¥â€à¤¥ सहायà¥à¤¯" + }, + "MODE_ME2ME": { + "message": "माà¤à¥‡ संगणक" + }, + "NEW_WINDOW": { + "message": "नवीन विंडो…" + }, + "NO_PAIRED_CLIENTS": { + "message": "सरà¥à¤µ जोडलेले कà¥à¤²à¤¾à¤¯à¤‚ट हटविणà¥à¤¯à¤¾à¤¤ आले आहेत." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "डेसà¥à¤•à¤Ÿà¥‰à¤ª संकलन या पà¥à¤²à¥…टफॉरà¥à¤®à¤µà¤° समरà¥à¤¥à¤¿à¤¤ नाही. आपण तरीही अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— वापरू शकता, परंतॠवापरकरà¥à¤¤à¤¾ अनà¥à¤­à¤µ शà¥à¤°à¥‡à¤£à¥€à¤…वनत केला जाईल." + }, + "OFFLINE": { + "message": "$1$ (ऑफलाइन)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "होसà¥à¤Ÿ पà¥à¤°à¤¾à¤°à¤‚भ अयशसà¥à¤µà¥€ à¤à¤¾à¤²à¤¾." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "अवैध होसà¥à¤Ÿ कॉनà¥à¤«à¤¿à¤—रेशन." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "अवैध होसà¥à¤Ÿ मालक डोमेन." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "अवैध होसà¥à¤Ÿ id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "अवैध OAuth कà¥à¤°à¥‡à¤¡à¥‡à¤¨à¥â€à¤¾à¤¿à¤¯à¤²à¤¸à¤¹ होसà¥à¤Ÿ कॉनà¥à¤«à¤¿à¤—र केले आहे." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "पडदा मोडला समरà¥à¤¥à¤¨ देणà¥â€à¤¯à¤¾à¤¸à¤¾à¤ à¥€ वापरकरà¥à¤¤à¤¾-विशिषà¥â€à¤Ÿ सतà¥à¤°à¤¾à¤®à¤§à¥â€à¤¯à¥‡ चालत असलेलà¥à¤¯à¤¾ होसà¥à¤Ÿà¤µà¤° सà¥à¤µà¤¿à¤š करून कनà¥à¤¸à¥‹à¤² तरà¥à¤• सà¥à¤•à¥à¤°à¥€à¤¨à¤µà¤° चालू असलेलà¥à¤¯à¤¾ होसà¥à¤Ÿà¤¨à¥‡ बंद केले आहे." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "धोरण बदल विचारात घेणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, होसà¥à¤Ÿ रीसà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ करीत आहे." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "धोरण वाचणà¥à¤¯à¤¾à¤¤ होसà¥à¤Ÿ अयशसà¥à¤µà¥€." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "होसà¥à¤Ÿà¤¨à¥‡ बंद केले आहे." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "न ओळखलेली होसà¥à¤Ÿ तà¥à¤°à¥à¤Ÿà¥€: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "अवैध होसà¥à¤Ÿ मालक." + }, + "OK": { + "message": "ठीक आहे" + }, + "OPTIONS_MENU": { + "message": "परà¥à¤¯à¤¾à¤¯" + }, + "OUTGOING_CONNECTIONS": { + "message": "या संगणकावरà¥à¤¨" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "खालील कà¥à¤²à¤¾à¤¯à¤‚ट या संगणकासह जोडणà¥à¤¯à¤¾à¤¤ आले आहेत आणि PIN पà¥à¤°à¤¦à¤¾à¤¨ न करता कनेकà¥à¤Ÿ करू शकतात. आपण à¤à¤•à¤¤à¤° वैयकà¥à¤¤à¤¿à¤•à¤°à¤¿à¤¤à¥à¤¯à¤¾ किंवा सरà¥à¤µ कà¥à¤²à¤¾à¤¯à¤‚टकरिता, कोणतà¥à¤¯à¤¾à¤¹à¥€ वेळी ही परवानगी मागे घेऊ शकता." + }, + "PAIRED_CLIENT_DATE": { + "message": "जोडलà¥à¤¯à¤¾à¤šà¥€ तारीख" + }, + "PAIRED_CLIENT_NAME": { + "message": "कà¥à¤²à¤¾à¤¯à¤‚ट" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "कृपया दोनà¥à¤¹à¥€ बॉकà¥à¤¸à¥‡à¤¸à¤®à¤§à¥â€à¤¯à¥‡ सारखाच PIN पà¥à¤°à¤µà¤¿à¤·à¥â€à¤Ÿ करा." + }, + "PIN_MESSAGE": { + "message": "कृपया $1$ साठीचा आपला PIN पà¥à¤°à¤µà¤¿à¤·à¥â€à¤Ÿ करा.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "कृपया दूरसà¥à¤¥ संगणकासाठी आपला पिन पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ करा." + }, + "PRODUCT_DESCRIPTION": { + "message": "इतर संगणकांवर पà¥à¤°à¤µà¥‡à¤¶ करा किंवा इंटरनेटवर आपलà¥à¤¯à¤¾ संगणकावर सà¥à¤°à¤•à¥à¤·à¤¿à¤¤à¤ªà¤£à¥‡ पà¥à¤°à¤µà¥‡à¤¶ करणà¥à¤¯à¤¾à¤¸ दà¥à¤¸à¤°à¥â€à¤¯à¤¾ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤¸ अनà¥à¤®à¤¤à¥€ दà¥à¤¯à¤¾." + }, + "PRODUCT_NAME": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome अॅप पà¥à¤°à¤µà¤¾à¤¹" + }, + "RECONNECT": { + "message": "रीकनेकà¥à¤Ÿ करा" + }, + "REMEMBER_PIN": { + "message": "या डिवà¥à¤¹à¤¾à¤‡à¤¸à¤µà¤°à¥‚न या होसà¥à¤Ÿà¤¶à¥€ कनेकà¥à¤Ÿ करताना पà¥à¤¨à¥à¤¹à¤¾ पिन साठी विचारू नका." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "कोअर लायबà¥à¤°à¤°à¥€" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "डेसà¥à¤•à¤Ÿà¥‰à¤ª संकलन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª होसà¥à¤Ÿà¤µà¤° आदेश जारी करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "होसà¥à¤Ÿ पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "दूरसà¥à¤¥ होसà¥à¤Ÿ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨à¤¾à¤¸à¤¾à¤ à¥€ मूळ संदेशन होसà¥à¤Ÿ" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "दूरसà¥à¤¥ सहायà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मूळ संदेशन होसà¥à¤Ÿ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "सà¥à¤°à¤•à¥à¤·à¤¾ की रिमोट करणे पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾" + }, + "RESIZE_TO_CLIENT": { + "message": "फिट करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ डेसà¥à¤•à¤Ÿà¥‰à¤ªà¤šà¤¾ आकार बदला" + }, + "RESTART_BUTTON": { + "message": "आता रीसà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ करा" + }, + "RESTORE_WINDOW": { + "message": "विंडो पà¥à¤¨à¤°à¥à¤¸à¤‚चयित करा" + }, + "RETRY": { + "message": "पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा" + }, + "SCREEN_OPTIONS": { + "message": "सà¥à¤•à¥à¤°à¥€à¤¨ परà¥à¤¯à¤¾à¤¯" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del पाठवा" + }, + "SEND_FEEDBACK": { + "message": "समसà¥à¤¯à¥‡à¤šà¤¾ अहवाल दà¥à¤¯à¤¾â€¦" + }, + "SEND_KEYS": { + "message": "की पाठवा" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn पाठवा" + }, + "SERVICE_DESCRIPTION": { + "message": "ही सेवा Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª कà¥à¤²à¤¾à¤¯à¤‚टकडील येणारी कनेकà¥à¤¶à¤¨ सकà¥à¤·à¤® करते." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "हे सेटिंग आपलà¥â€à¤¯à¤¾ डोमेन धोरणादà¥à¤µà¤¾à¤°à¥‡ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ केले आहे." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "सामायिक करा" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "रदà¥à¤¦ करा" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "आपण हा संगणक दà¥à¤¸à¤°à¥â€à¤¯à¤¾ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ पाहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आणि नियंतà¥à¤°à¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ सामायिक करू इचà¥à¤›à¤¿à¤¤à¤¾?" + }, + "SHOW_STATS": { + "message": "आकडेवारी दरà¥à¤¶à¤µà¤¾" + }, + "SHOW_STATS_WITH_RTT": { + "message": "आकडेवारी दरà¥à¤¶à¤µà¤¾ (कनेकà¥à¤¶à¤¨: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "फिट करणà¥â€à¤¯à¤¾à¤¸à¤¾à¤ à¥€ संकà¥à¤šà¤¿à¤¤ करा" + }, + "SIGN_IN_BUTTON": { + "message": "साइन इन करा" + }, + "SIGN_OUT_BUTTON": { + "message": "साइन आउट करा" + }, + "STOP_SHARING_BUTTON": { + "message": "सामायिकरण थांबवा" + }, + "SURVEY_INVITATION": { + "message": "Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª सà¥à¤§à¤¾à¤°à¤£à¥à¤¯à¤¾à¤¤ मदत करू इचà¥à¤›à¤¿à¤¤à¤¾? $1$à¤à¤• सरà¥à¤µà¥‡à¤•à¥à¤·à¤£ घà¥à¤¯à¤¾.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "वेळ" + }, + "TOGGLE_STATS": { + "message": "आकडेवारी दरà¥à¤¶à¤µà¤¾" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ शी कनेकà¥â€à¤Ÿ करा", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "या संगणकाची दूरसà¥â€à¤¥ कनेकà¥â€à¤¶à¤¨ अकà¥à¤·à¤® करा" + }, + "TOOLTIP_REFRESH": { + "message": "होसà¥à¤Ÿà¤šà¥€ सूची रीफà¥à¤°à¥‡à¤¶ करा" + }, + "TOOLTIP_RENAME": { + "message": "संगणक नाव संपादित करा" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (कालबाहà¥à¤¯)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "खाते" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "कृपया Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ªà¤¦à¥à¤µà¤¾à¤°à¥‡ पà¥à¤°à¤µà¥‡à¤¶ करणà¥à¤¯à¤¾à¤¸ अनà¥à¤®à¤¤à¥€ देणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आपलà¥à¤¯à¤¾ खातà¥à¤¯à¤¾à¤šà¥€ आणि PIN ची खाली पà¥à¤·à¥à¤Ÿà¥€ करा." + }, + "WARNING_NAT_DISABLED": { + "message": "टिप: धोरण सेटिंगà¥à¤œ केवळ आपलà¥à¤¯à¤¾ नेटवरà¥à¤•à¤®à¤§à¥€à¤² संगणकांचà¥à¤¯à¤¾ कनेकà¥à¤¶à¤¨à¤¨à¤¾ परवानगी देतात." + }, + "WARNING_NOT_WINDOWED": { + "message": "टीप: सरà¥à¤µ कीबोरà¥à¤¡ शॉरà¥à¤Ÿà¤•à¤Ÿ उपलबà¥à¤§ असलà¥à¤¯à¤¾à¤šà¥‡ सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, आपण ‘विंडो मà¥à¤¹à¤£à¥‚न उघडणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€â€™ Chrome दूरसà¥à¤¥ डेसà¥à¤•à¤Ÿà¥‰à¤ª कॉनà¥à¤«à¤¿à¤—र करू शकता." + }, + "WHY_IS_THIS_SAFE": { + "message": "हे सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ का आहे?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "विंडो" + }, + "WORKING": { + "message": "कारà¥à¤¯à¤°à¤¤ आहे..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ms/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ms/messages.json new file mode 100644 index 000000000000..6dff3ca8e07d --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ms/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Terima dan Pasang" + }, + "ACCESS_CODE": { + "message": "Kod akses" + }, + "ACCESS_CODE_TIMER": { + "message": "Kod akses ini akan tamat tempoh dalam $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Maklum balas" + }, + "ALL_CONNECTIONS": { + "message": "Semua sambungan" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Taipkan semula PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Batal" + }, + "CLEAR_HISTORY": { + "message": "Kosongkan sejarah" + }, + "CLOSE": { + "message": "Tutup" + }, + "CLOSE_PROMPT": { + "message": "Tindakan meninggalkan halaman ini akan menamatkan sesi Desktop Jauh Chrome anda." + }, + "CLOSE_WINDOW": { + "message": "Tutup tetingkap" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Adakah anda pasti mahu melumpuhkan sambungan jauh ke $1$? Jika anda berubah fikiran, anda perlu pergi ke komputer tersebut untuk mendayakan semula sambungan.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Sambungan gagal" + }, + "CONNECTION_FROM_HEADER": { + "message": "Daripada" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Sejarah Sambungan" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Sederhana" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Bagus" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Lemah" + }, + "CONNECTION_TO_HEADER": { + "message": "Kepada" + }, + "CONNECT_ANYWAY": { + "message": "Sambungkan juga" + }, + "CONNECT_BUTTON": { + "message": "Sambung" + }, + "CONTINUE_BUTTON": { + "message": "Teruskan" + }, + "CONTINUE_PROMPT": { + "message": "Anda sedang berkongsi mesin ini dengan pengguna lain. Adakah anda mahu terus berkongsi?" + }, + "CONTROLLER_NAME": { + "message": "Alat Kawalan Hos Desktop Jauh Chrome" + }, + "COPYRIGHT": { + "message": "Hak Cipta 2013 Google Inc. Hak Cipta Terpelihara." + }, + "CREDITS": { + "message": "Kredit" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Padamkan semua" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Padam" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Untuk meneruskan, anda mesti memberikan kebenaran akses lanjutan terlebih dahulu kepada komputer anda. Anda hanya perlu melakukannya sekali." + }, + "DESCRIPTION_CONNECT": { + "message": "Minta pemilik komputer yang ingin anda gunakan itu supaya mengklik “$1$†dan memberi anda kod aksesnya.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Desktop Jauh Chrome membolehkan anda berkongsi komputer anda dengan selamat melalui Web. Kedua-dua pengguna perlu menjalankan apl Desktop Jauh Chrome, yang boleh didapati di $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Hos jauh memerlukan anda membuat pengesahan pada tapak web pihak ketiga. Untuk meneruskan, anda hendaklah memberikan Desktop Jauh Chrome kebenaran tambahan untuk mengakses alamat ini:" + }, + "DISABLE_HOST": { + "message": "Lumpuhkan" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Putuskan sambungan" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Perkhidmatan Desktop Jauh Chrome" + }, + "DURATION_HEADER": { + "message": "Tempoh" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Anda tidak mempunyai kebenaran untuk menjalankan aplikasi ini." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Pengesahan gagal. Sila log masuk ke Chrome sekali lagi." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Sesetengah komponen yang diperlukan hilang. Sila pastikan anda telah memasang versi terkini perisian dan cuba lagi." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ralat rangkaian berlaku. Kami akan memulakan semula apl apabila peranti anda berada dalam talian kelak." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Komputer jauh gagal memulakan sesi. Jika masalah berterusan, sila cuba mengkonfigurasi hos sekali lagi." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Komputer jauh tidak memberikan tindak balas terhadap permintaan sambungan. Sila sahkan bahawa ia berada dalam talian dan cuba lagi." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Sambungan kepada komputer jauh disekat buat sementara waktu kerana seseorang sedang cuba untuk menyambung kepadanya dengan PIN yang tidak sah. Sila cuba lagi kemudian." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Gagal mendaftarkan komputer ini." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Versi protokol yang tidak serasi telah dikesan. Sila pastikan bahawa anda telah memasang versi terkini perisian pada kedua-dua komputer dan cuba lagi." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Kod akses tidak sah. Sila cuba lagi." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Tetapan dasar tidak membenarkan komputer ini dikongsi sebagai hos Desktop Jauh Chrome. Hubungi pentadbir sistem anda untuk mendapatkan bantuan." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Sesi jauh telah tamat tempoh." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Sesetengah komponen yang diperlukan hilang. Sila pastikan anda menjalankan versi terkini Chrome dan cuba lagi." + }, + "ERROR_NACL_DISABLED": { + "message": "Beberapa komponen yang diperlukan didapati hilang. Sila pergi ke chrome://plugins dan pastikan Klien Natif didayakan." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Komponen yang diperlukan telah berhenti berfungsi. Sila laporkan masalah ini kepada pembangun." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Tidak dapat menyambung ke rangkaian. Sila pastikan peranti anda berada dalam talian." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Anda tidak log masuk ke Chrome. Sila log masuk dan cuba lagi." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Anda tidak mempunyai kebenaran untuk melakukan tindakan itu." + }, + "ERROR_NOT_FOUND": { + "message": "Objek yang diminta tidak wujud." + }, + "ERROR_P2P_FAILURE": { + "message": "Tidak dapat mencapai hos. Hal ini mungkin disebabkan oleh konfigurasi rangkaian yang anda gunakan." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Perkhidmatan ini tergendala buat sementara waktu. Sila cuba lagi kemudian." + }, + "ERROR_UNEXPECTED": { + "message": "Ralat yang tidak dijangka telah berlaku. Sila laporkan masalah ini kepada pembangun." + }, + "EXIT_FULL_SCREEN": { + "message": "Keluar daripada skrin penuh" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Tidak dapat menetapkan semula aplikasi. Anda masih boleh menghantar laporan pepijat." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Tetapkan semula aplikasi. Anda akan kehilangan sebarang kerja yang belum disimpan." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Saya tidak boleh membuka aplikasi ini." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Aplikasi ini terlalu perlahan." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Saya tidak boleh membuka fail Google Drive saya." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Saya tidak nampak fail saya yang disimpan dalam talian di Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Saya menghadapi masalah dengan papan kekunci atau tetikus saya." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Untuk membantu kami menyelesaikan masalah anda, sila beritahu kami masalahnya:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Sesuatu yang lain." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Pilih..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Untuk membolehkan kami menghubungi anda untuk mendapatkan maklumat lanjut, alamat e-mel anda akan dimasukkan ke dalam mana-mana maklum balas yang anda serahkan." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Laporkan isu" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Termasuk log aplikasi untuk membantu kami menyelesaikan masalah anda (log mungkin termasuk maklumat peribadi)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Log aplikasi mungkin termasuk maklumat peribadi, termasuk pengenalan anda (alamat e-mel) dan nama serta sifat fail dan folder dalam Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Maklumat ini hanya digunakan untuk mendiagnosis masalah yang anda laporkan, hanya tersedia kepada seseorang yang menyiasat laporan anda dan dikekalkan selama tidak lebih daripada 30 hari." + }, + "FOOTER_CONNECTING": { + "message": "Menyambung…" + }, + "FOOTER_WAITING": { + "message": "menunggu sambungan…" + }, + "FOR_PLATFORM_MAC": { + "message": "Untuk Mac (OS X 10.6 dan ke atas)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Untuk Windows (XP dan ke atas)" + }, + "FULL_SCREEN": { + "message": "Skrin penuh" + }, + "GET_STARTED": { + "message": "Bermula" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Terima" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Tolak" + }, + "HELP": { + "message": "Bantuan" + }, + "HOME_ACCESS_BUTTON": { + "message": "Akses" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Lihat dan kawal komputer kongsi." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Anda boleh mengakses komputer ini dengan selamat menggunakan Desktop Jauh Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Tukar PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Komputer ini dikongsi di bawah akaun yang berbeza pada masa ini." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Lihat/edit" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Komputer ini dikonfigurasi untuk membenarkan satu atau beberapa klien bersambung tanpa memasukkan PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Dayakan sambungan jauh" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Anda mesti mendayakan sambungan jauh jika anda mahu menggunakan Desktop Jauh Chrome untuk mengakses komputer ini." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Lumpuhkan sambungan jauh" + }, + "HOME_SHARE_BUTTON": { + "message": "Kongsi" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Kongsi komputer ini untuk dilihat dan dikawal oleh pengguna lain." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ciri ini belum lagi tersedia untuk komputer anda)" + }, + "HOST_CATEGORY": { + "message": "Hos" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Akses ditolak untuk klien: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klien disambungkan: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Klien diputuskan sambungan: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP Saluran untuk klien: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Untuk mendayakan sambungan jauh pada komputer lain, pasang Desktop Jauh Chrome pada komputer tersebut dan klik “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Anda tidak mempunyai komputer yang berdaftar. Untuk mendayakan sambungan jauh pada komputer, pasang Desktop Jauh Chrome pada komputer tersebut dan klik “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Sebelum ini anda telah log masuk sebagai $1$ ($2$). Untuk mengakses komputer anda dalam akaun itu, $3$log masuk ke Google Chrome$4$ dengan akaun itu dan pasang semula Desktop Jauh Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Kemas kini perisian biasanya berlaku secara automatik, tetapi boleh gagal dalam beberapa kes yang jarang berlaku. Proses mengemas kini perisian akan mengambil masa tidak lebih daripada beberapa minit dan boleh dilakukan semasa disambungkan ke komputer anda dari jauh." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Desktop Jauh Chrome pada $1$ sudah lapuk dan perlu dikemas kini.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Bantu kami mempertingkatkan Desktop Jauh Chrome dengan membenarkan kami mengumpulkan perangkaan penggunaan dan laporan keranapan." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Untuk melindungi akses kepada komputer ini, sila pilih PIN $1$sekurang-kurangnya enam digit$2$. PIN ini akan diperlukan apabila menyambung dari lokasi lain.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Gagal memulakan perkhidmatan akses jauh." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome sedang memuat turun pemasang Hos Desktop Jauh Chrome. Setelah muat turun selesai, sila jalankan pemasang sebelum meneruskan." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Sila jalankan pemasang sebelum meneruskan." + }, + "HOST_SETUP_STARTED": { + "message": "Sambungan jauh untuk komputer ini telah didayakan." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Sila semak tetapan pengurusan kuasa komputer anda dan pastikan bahawa komputer anda tidak dikonfigurasikan untuk tidur apabila melahu." + }, + "HOST_SETUP_STARTING": { + "message": "Mendayakan sambungan jauh untuk komputer ini…" + }, + "HOST_SETUP_STOPPED": { + "message": "Sambungan jauh untuk komputer ini telah dilumpuhkan." + }, + "HOST_SETUP_STOPPING": { + "message": "Melumpuhkan sambungan jauh untuk komputer ini…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Gagal melumpuhkan akses jauh kepada komputer ini. Sila cuba lagi kemudian." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Apabila memuat turun Pemasang Hos Desktop Jauh Chrome, anda bersetuju menerima $1$Syarat Perkhidmatan$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN anda telah dikemas kini." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Gagal mengemas kini PIN. Sila cuba lagi kemudian." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN untuk komputer ini sedang dikemas kini…" + }, + "HOST_STARTED": { + "message": "Hos dimulakan untuk pengguna: %1." + }, + "HOST_STOPPED": { + "message": "Hos dihentikan." + }, + "IDLE_CONTINUE": { + "message": "Teruskan" + }, + "IDLE_DISCONNECT": { + "message": "Putuskan sambungan sekarang" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Sesi $1$ anda tidak aktif untuk sementara waktu dan akan diputuskan sambungannya tidak lama lagi.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Kepada komputer ini" + }, + "INSTALLER_DOWNLOAD": { + "message": "Muat turun Pemasang Hos Desktop Jauh Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Untuk mula berkongsi desktop anda, berikan kod akses di bawah kepada orang yang akan membantu anda." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Setelah mereka memasukkan kod, sesi perkongsian anda akan bermula." + }, + "INVALID_PIN": { + "message": "Sila masukkan PIN yang mengandungi enam atau lebih angka." + }, + "IT2ME_FIRST_RUN": { + "message": "Perkongsian skrin pengguna kepada pengguna, sesuai untuk sokongan teknikal jauh." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Reka letak papan kekunci" + }, + "LABEL_CONNECTED": { + "message": "Disambungkan:" + }, + "LAST_ONLINE": { + "message": "$1$ (kali terakhir dalam talian $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Ketahui cara." + }, + "LEARN_MORE": { + "message": "Ketahui lebih lanjut." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Pilihan Hos Desktop Jauh Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Hos Desktop\nJauh Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Penyahpasang Hos Desktop Jauh Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Gunakan Ctrl kanan untuk kekunci Win (⌘ pada Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maksimumkan tetingkap" + }, + "ME2ME_FIRST_RUN": { + "message": "Akses komputer anda sendiri dari mana-mana sahaja." + }, + "MESSAGE_GENERATING": { + "message": "Menghasilkan kod akses…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Sesi Desktop Jauh Chrome anda telah tamat." + }, + "MESSAGE_SHARED": { + "message": "Desktop anda sedang dikongsi dengan $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimumkan tetingkap" + }, + "MODE_AUTHORIZE": { + "message": "Beri keizinan" + }, + "MODE_IT2ME": { + "message": "Bantuan Jauh" + }, + "MODE_ME2ME": { + "message": "Komputer Saya" + }, + "NEW_WINDOW": { + "message": "Tetingkap baharu…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Semua klien berpasangan telah dipadamkan." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Integrasi desktop tidak disokong pada platform ini. Anda masih boleh menggunakan aplikasi, tetapi pengalaman pengguna akan diturun taraf." + }, + "OFFLINE": { + "message": "$1$ (luar talian)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Pemulaan hos gagal." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Konfigurasi hos tidak sah." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Domain pemilik hos tidak sah." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Id hos tidak sah." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Hos dikonfigurasikan dengan bukti kelayakan OAuth yang tidak sah." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Hos yang berjalan pada skrin logik konsol telah ditutup untuk menyokong mod tirai dengan menukar kepada hos yang berjalan dalam sesi khusus pengguna." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Hos ini dimulakan semula, untuk mengambil kira perubahan dasar." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hos gagal membaca dasar." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Hos telah ditutup." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Ralat hos tak dikenali: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Pemilik hos tidak sah." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Pilihan" + }, + "OUTGOING_CONNECTIONS": { + "message": "Dari komputer ini" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Klien berikut telah berpasangan dengan komputer ini dan boleh berhubung tanpa memberikan PIN. Anda boleh membatalkan kebenaran ini pada bila-bila masa, sama ada secara individu atau untuk semua klien." + }, + "PAIRED_CLIENT_DATE": { + "message": "Tarikh berpasangan" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klien" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Sila masukkan PIN yang sama dalam kedua-dua kotak." + }, + "PIN_MESSAGE": { + "message": "Sila masukkan PIN anda untuk $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Sila masukkan PIN anda untuk komputer jauh." + }, + "PRODUCT_DESCRIPTION": { + "message": "Akses komputer lain atau benarkan pengguna lain mengakses komputer anda dengan selamat melalui Internet." + }, + "PRODUCT_NAME": { + "message": "Desktop Jauh Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Penstriman Apl Chrome" + }, + "RECONNECT": { + "message": "Sambung semula" + }, + "REMEMBER_PIN": { + "message": "Jangan meminta PIN lagi apabila bersambung ke hos ini dari peranti ini." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Pustaka Teras" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proses Persepaduan Desktop" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikasi untuk mengeluarkan perintah kepada hos desktop jauh Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Hos Proses" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Hos pemesejan asal untuk pengurusan hos kejauhan" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Hos pemesejan asal untuk bantuan jauh" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proses Kaedah Jauh Kunci Keselamatan" + }, + "RESIZE_TO_CLIENT": { + "message": "Ubah saiz desktop supaya sesuai" + }, + "RESTART_BUTTON": { + "message": "Mulakan semula sekarang" + }, + "RESTORE_WINDOW": { + "message": "Pulihkan tetingkap" + }, + "RETRY": { + "message": "Cuba semula" + }, + "SCREEN_OPTIONS": { + "message": "Pilihan skrin" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Hantar Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Laporkan isu..." + }, + "SEND_KEYS": { + "message": "Hantar kekunci" + }, + "SEND_PRINT_SCREEN": { + "message": "Hantar PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Perkhidmatan ini membolehkan sambungan masuk daripada klien Desktop Jauh Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Tetapan ini diurus oleh dasar domain anda." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Kongsi" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Batal" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Adakah anda ingin berkongsi komputer ini untuk dilihat dan dikawal oleh pengguna lain?" + }, + "SHOW_STATS": { + "message": "Tunjukkan statistik" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Tunjukkan statistik (sambungan: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Kecilkan supaya muat" + }, + "SIGN_IN_BUTTON": { + "message": "Log masuk" + }, + "SIGN_OUT_BUTTON": { + "message": "Log keluar" + }, + "STOP_SHARING_BUTTON": { + "message": "Hentikan Perkongsian" + }, + "SURVEY_INVITATION": { + "message": "Ingin membantu meningkatkan Desktop Jauh Chrome? $1$Jawab tinjauan.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Masa" + }, + "TOGGLE_STATS": { + "message": "Tunjukkan statistik" + }, + "TOOLTIP_CONNECT": { + "message": "Sambung ke $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Lumpuhkan sambungan jauh kepada komputer ini" + }, + "TOOLTIP_REFRESH": { + "message": "Muat semula senarai hos" + }, + "TOOLTIP_RENAME": { + "message": "Edit nama komputer" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (sudah lapuk)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Akaun" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Sila sahkan akaun dan PIN anda di bawah untuk membenarkan akses melalui Desktop Jauh Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTA: Tetapan dasar membenarkan sambungan antara komputer dalam rangkaian anda sahaja." + }, + "WARNING_NOT_WINDOWED": { + "message": "PERHATIAN: Untuk memastikan semua pintasan papan kekunci tersedia, anda boleh mengkonfigurasi Desktop Jauh Chrome kepada ‘Buka sebagai tetingkap’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Mengapa dianggap selamat?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Mengusahakan..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nb/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nb/messages.json new file mode 100644 index 000000000000..34b7bc03d081 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nb/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Godta og installer" + }, + "ACCESS_CODE": { + "message": "Tilgangskode" + }, + "ACCESS_CODE_TIMER": { + "message": "Denne tilgangskoden utløper om $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Google Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Alle tilkoblinger" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Tast inn PIN-koden pÃ¥ nytt" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Avbryt" + }, + "CLEAR_HISTORY": { + "message": "Tøm logg" + }, + "CLOSE": { + "message": "Lukk" + }, + "CLOSE_PROMPT": { + "message": "Hvis du forlater denne siden, avsluttes Chrome Eksternt skrivebord-økten." + }, + "CLOSE_WINDOW": { + "message": "Lukk vindu" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Er du sikker pÃ¥ at du vil deaktivere eksterne tilkoblinger til $1$? Hvis du ombestemmer deg, mÃ¥ du tilbake til datamaskinen for Ã¥ gjenopprette tilkoblingene.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Tilkobling mislyktes" + }, + "CONNECTION_FROM_HEADER": { + "message": "Fra" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Tilkoblingslogg" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Akseptabel" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "God" + }, + "CONNECTION_QUALITY_POOR": { + "message": "DÃ¥rlig" + }, + "CONNECTION_TO_HEADER": { + "message": "Til" + }, + "CONNECT_ANYWAY": { + "message": "Koble til likevel" + }, + "CONNECT_BUTTON": { + "message": "Koble til" + }, + "CONTINUE_BUTTON": { + "message": "Fortsett" + }, + "CONTINUE_PROMPT": { + "message": "Du deler denne datamaskinen med en annen bruker. Vil du fortsette Ã¥ dele?" + }, + "CONTROLLER_NAME": { + "message": "Kontroller for Chrome Eksternt skrivebord-vert" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Med enerett." + }, + "CREDITS": { + "message": "Medvirkende" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Slett alle" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Slett" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Før du kan fortsette, mÃ¥ du gi datamaskinen utvidede tilgangstillatelser. Det er bare nødvendig Ã¥ gjøre dette én gang." + }, + "DESCRIPTION_CONNECT": { + "message": "Be brukeren av datamaskinen du vil ha tilgang til, om Ã¥ klikke pÃ¥ «$1$» og gi deg tilgangskoden.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Med Chrome Eksternt skrivebord kan du trygt dele datamaskinen din pÃ¥ nettet. Begge brukerne mÃ¥ installere Chrome Eksternt skrivebord-appen, som er Ã¥ finne pÃ¥ $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Den eksterne verten krever at du godkjenner via et tredjepartsnettsted. For Ã¥ fortsette mÃ¥ du gi Chrome Eksternt skrivebord ytterligere tillatelser til Ã¥ Ã¥pne denne adressen:" + }, + "DISABLE_HOST": { + "message": "SlÃ¥ av" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Koble fra" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Eksternt skrivebord-tjeneste" + }, + "DURATION_HEADER": { + "message": "Varighet" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Du har ikke tillatelse til Ã¥ kjøre dette programmet." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autentiseringen mislyktes. Logg pÃ¥ Chrome pÃ¥ nytt." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Det mangler noen nødvendige komponenter. Kontrollér at du kjører den nyeste versjonen av programvaren, og prøv pÃ¥ nytt." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "En nettverksfeil oppsto. Appen blir startet pÃ¥ nytt nÃ¥r enheten din er pÃ¥ nettet igjen." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Den eksterne datamaskinen kunne ikke initialisere økten. Hvis problemet vedvarer, kan du prøve Ã¥ konfigurere verten pÃ¥ nytt." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Den eksterne datamaskinen svarer ikke pÃ¥ tilkoblingsforespørsler. Kontrollér at datamaskinen er koblet til Internett, og prøv pÃ¥ nytt." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Tilkoblinger til den eksterne datamaskinen er midlertidig blokkert fordi noen prøvde Ã¥ koble seg til med en ugyldig PIN-kode. Prøv pÃ¥ nytt senere." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Kunne ikke registrere denne datamaskinen." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Det ble oppdaget en ikke-kompatibel protokollversjon. Kontrollér at du har nyeste programvareversjon installert pÃ¥ begge datamaskinene, og prøv igjen." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Tilgangskoden er ugyldig. Prøv pÃ¥ nytt." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Innstillingene tillater ikke at denne datamaskinen deles som vert for Chrome Eksternt skrivebord. Ta kontakt med systemadministratoren for Ã¥ fÃ¥ hjelp." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Den eksterne økten er utløpt." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Det mangler noen nødvendige komponenter. Kontrollér at du kjører den nyeste versjonen av Chrome, og prøv pÃ¥ nytt." + }, + "ERROR_NACL_DISABLED": { + "message": "Det mangler noen nødvendige komponenter. GÃ¥ til chrome://plugins og sjekk at Native Client er slÃ¥tt pÃ¥." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "En nødvendig komponent har sluttet Ã¥ fungere. Vennligst rapportér dette problemet til utviklerne." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Kunne ikke koble til nettverket. Ssjekk at enheten har nettilkobling." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Du er ikke logget pÃ¥ Chrome. Logg pÃ¥, og prøv pÃ¥ nytt." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Du har ikke tillatelse til Ã¥ utføre denne handlingen." + }, + "ERROR_NOT_FOUND": { + "message": "Det forespurte elementet finnes ikke." + }, + "ERROR_P2P_FAILURE": { + "message": "Kunne ikke nÃ¥ verten. Dette er sannsynligvis pÃ¥ grunn av innstillingene for nettverket du bruker." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Tjenesten er ikke tilgjengelig for øyeblikket. Prøv pÃ¥ nytt senere." + }, + "ERROR_UNEXPECTED": { + "message": "Det oppsto en uventet feil. Rapportér dette problemet til utviklerne." + }, + "EXIT_FULL_SCREEN": { + "message": "Avslutt fullskjerm" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Programmet kunne ikke tilbakestilles. Du kan likevel sende inn en feilrapport." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Tilbakestill programmet. Du mister alt arbeid som ikke er lagret." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Jeg kan ikke Ã¥pne appen." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Appen er for langsom." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Jeg kan ikke Ã¥pne Google Disk-filene mine." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Jeg ser ikke de lagrede filene mine pÃ¥ nettet i Google Disk." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Jeg har problemer med tastaturet eller musen." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Fortell oss hva som gikk galt, slik at vi kan prøve Ã¥ løse problemet ditt." + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Noe annet." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Velg" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Hvis du gir oss tillatelse til Ã¥ kontakte deg for Ã¥ be om ytterligere informasjon, blir e-postadressen din inkludert i eventuelle tilbakemeldinger du sender inn." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Rapportér et problem" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Inkluder programlogger for Ã¥ hjelpe oss med Ã¥ løse problemet ditt (loggene kan inneholde privat informasjon)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Programlogger kan inneholde privat informasjon, deriblant identiteten din (e-postadressen) og navnene og egenskapene til filer og mapper i Google Disk." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Denne informasjonen brukes bare til Ã¥ diagnostisere problemet du rapporterer om. Informasjonen er bare tilgjengelig for personer som gÃ¥r gjennom rapporten, og den slettes etter maksimalt 30 dager." + }, + "FOOTER_CONNECTING": { + "message": "Kobler til …" + }, + "FOOTER_WAITING": { + "message": "venter pÃ¥ tilkobling …" + }, + "FOR_PLATFORM_MAC": { + "message": "For Mac (OS X 10.6 og høyere)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "For Windows (XP og nyere)" + }, + "FULL_SCREEN": { + "message": "Full skjerm" + }, + "GET_STARTED": { + "message": "Kom i gang" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Godta" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Avvis" + }, + "HELP": { + "message": "Hjelp" + }, + "HOME_ACCESS_BUTTON": { + "message": "Tilgang" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Se og kontrollér en delt datamaskin." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Du kan fÃ¥ sikker tilgang til denne datamaskinen ved Ã¥ bruke Chrome Eksternt skrivebord." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Endre personlig kode" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Denne datamaskinen er for øyeblikket delt under en annen konto." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Se/rediger" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Denne datamaskinen er konfigurer for Ã¥ la én eller flere klienter koble til uten Ã¥ skrive inn noen PIN-kode." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "SlÃ¥ pÃ¥ eksterne tilkoblinger" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Du mÃ¥ aktivere eksterne tilkoblinger hvis du vil ha tilgang til denne datamaskinen gjennom Chrome Eksternt skrivebord." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Deaktiver eksterne tilkoblinger" + }, + "HOME_SHARE_BUTTON": { + "message": "Del" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Del denne datamaskinen slik at en annen bruker kan se og kontrollere den." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Denne funksjonen er ikke tilgjengelig for datamaskinen din ennÃ¥.)" + }, + "HOST_CATEGORY": { + "message": "Vert" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Klienten ble nektet tilgang: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klienten ble tilknyttet: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Klienten koblet fra: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kanal-IP for klienten: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "For Ã¥ muliggjøre ekstern tilkobling til en annen datamaskin mÃ¥ du installere Chrome Eksternt skrivebord pÃ¥ maskinen, og klikke pÃ¥ «$1$».", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Du har ikke registrert noen datamaskiner. For Ã¥ aktivere ekstern tilkobling til en datamaskin mÃ¥ du installere Chrome Eksternt skrivebord pÃ¥ maskinen, og klikke pÃ¥ «$1$».", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Du har tidligere logget pÃ¥ som $1$ ($2$). Hvis du vil ha tilgang til datamaskiner pÃ¥ den kontoen, mÃ¥ du bruke den til Ã¥ $3$logge pÃ¥ Chrome$4$ og deretter installere Chrome Eksternt skriverbord pÃ¥ nytt.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Programvareoppdateringer skjer vanligvis automatisk, men kan i noen sjeldne tilfeller mislykkes. Oppdateringen av programvare bør ikke ta mer enn noen fÃ¥ minutter og kan gjøres via ekstern tilgang." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Eksternt skrivebord pÃ¥ $1$ er utdatert og mÃ¥ oppdateres.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Hjelp oss med Ã¥ forbedre Chrome Eksternt skrivebord ved Ã¥ gi oss tillatelse til Ã¥ samle bruksstatistikk og programstopprapporter." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "For Ã¥ beskytte tilgangen til denne datamaskinen mÃ¥ du velge en PIN-kode bestÃ¥ende av $1$minst seks tall$2$. Denne PIN-koden kreves nÃ¥r man kobler til fra en annen posisjon.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Kunne ikke starte tjenesten for ekstern tilgang." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome laster ned installasjonsprogrammet for Chrome Eksternt skrivebord-vert. NÃ¥r nedlastingen er ferdig mÃ¥ du kjøre installasjonsprogrammet før du fortsetter." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Kjør installasjonsprogrammet før du fortsetter." + }, + "HOST_SETUP_STARTED": { + "message": "Eksterne tilkoblinger for denne datamaskinen er slÃ¥tt pÃ¥." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Kontrollér datamaskinens strøminnstillinger og sørg for at den ikke er konfigurert til Ã¥ gÃ¥ i dvale nÃ¥r den ikke er i bruk." + }, + "HOST_SETUP_STARTING": { + "message": "SlÃ¥r pÃ¥ eksterne tilkoblinger for denne datamaskinen …" + }, + "HOST_SETUP_STOPPED": { + "message": "Eksterne tilkoblinger for denne datamaskinen er slÃ¥tt av." + }, + "HOST_SETUP_STOPPING": { + "message": "SlÃ¥r av eksterne tilkoblinger for denne datamaskinen …" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Kunne ikke deaktivere fjerntilgang til denne datamaskinen. Prøv pÃ¥ nytt senere." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Ved Ã¥ laste ned installasjonsprogrammet for verten for Chrome Eksternt skrivebord samtykker du i Googles $1$vilkÃ¥r for bruk$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN-koden din er oppdatert." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Kunne ikke oppdatere PIN-koden. Prøv pÃ¥ nytt senere." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN-koden for denne datamaskinen oppdateres …" + }, + "HOST_STARTED": { + "message": "Vert startet for brukeren: %1." + }, + "HOST_STOPPED": { + "message": "Verten stoppet." + }, + "IDLE_CONTINUE": { + "message": "Fortsett" + }, + "IDLE_DISCONNECT": { + "message": "Koble fra nÃ¥" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "$1$-økten din har vært inaktiv en stund og kommer snart til Ã¥ bli koblet fra.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Til denne datamaskinen" + }, + "INSTALLER_DOWNLOAD": { + "message": "Last ned installasjonsprogrammet for verten for Chrome Eksternt skrivebord" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Kom i gang med deling av skrivebordet ved Ã¥ gi adgangskoden nedenfor til personen som skal hjelpe deg." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "NÃ¥r brukeren har skrevet inn koden, starter delingsøkten." + }, + "INVALID_PIN": { + "message": "Skriv inn en PIN-kode pÃ¥ seks sifre eller fler." + }, + "IT2ME_FIRST_RUN": { + "message": "Skjermdeling bruker-til-bruker, perfekt for ekstern teknisk støttte." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Tastaturoppsett" + }, + "LABEL_CONNECTED": { + "message": "Tilkoblet:" + }, + "LAST_ONLINE": { + "message": "$1$ (sist pÃ¥ nettet $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Finn ut hvordan." + }, + "LEARN_MORE": { + "message": "Finn ut mer" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Alternativer for Chrome Eksternt skrivebord-vert" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Eksternt\nskrivebord-vert" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Avinstalleringsprogram for Chrome Eksternt skrivebord-vert" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Bruk høyre Ctrl som Win-tast (⌘ pÃ¥ Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maksimerer vinduet" + }, + "ME2ME_FIRST_RUN": { + "message": "Bruk din egen datamaskin uansett hvor du er." + }, + "MESSAGE_GENERATING": { + "message": "Genererer tilgangskode …" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Chrome Eksternt skrivebord-økten din er avsluttet." + }, + "MESSAGE_SHARED": { + "message": "Skrivebordet ditt deles for øyeblikket med $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimerer vinduet" + }, + "MODE_AUTHORIZE": { + "message": "Autoriser" + }, + "MODE_IT2ME": { + "message": "Fjernhjelp" + }, + "MODE_ME2ME": { + "message": "Mine datamaskiner" + }, + "NEW_WINDOW": { + "message": "Nytt vindu" + }, + "NO_PAIRED_CLIENTS": { + "message": "Alle tilknyttede klienter har blitt slettet." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Denne plattformen har ikke støtte for skrivebordsintegrasjon. Du kan fortsatt bruke programmet, men brukeropplevelsen blir redusert." + }, + "OFFLINE": { + "message": "$1$ (ikke pÃ¥ nett)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Vertsinitialiseringen mislyktes." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ugyldig vertskonfigurasjon." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ugyldig domene for vertseieren." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ugyldig verts-ID." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Verten er konfigurert med ugyldig OAuth-legitimasjon." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Verten som kjører pÃ¥ skjermen for konsollpÃ¥logging, har blitt avsluttet for Ã¥ støtte gardinmodus ved Ã¥ bytte til en vert som kjører i en brukerspesifikk økt." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Verten startes pÃ¥ nytt for Ã¥ implementere en policy-endring." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Verten kunne ikke lese policyen." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Verten har slÃ¥tt seg av." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Ukjent vertsfeil: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ugyldig vertseier." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Alternativer" + }, + "OUTGOING_CONNECTIONS": { + "message": "Fra denne datamaskinen" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Følgende kunder har blitt tilknyttet denne datamaskinen og kan koble til uten Ã¥ mÃ¥tte oppgi PIN-kode. Du kan trekke tilbake denne tillatelsen nÃ¥r som helst, bÃ¥de individuelt og for alle klienter." + }, + "PAIRED_CLIENT_DATE": { + "message": "Tilknytningsdato" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Skriv inn samme PIN-kode i begge feltene." + }, + "PIN_MESSAGE": { + "message": "Skriv inn PIN-koden for $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Skriv inn PIN-koden for den eksterne datamaskinen." + }, + "PRODUCT_DESCRIPTION": { + "message": "FÃ¥ tilgang til andre datamaskiner eller gi en annen bruker sikker tilgang til datamaskinen din via Internett." + }, + "PRODUCT_NAME": { + "message": "Chrome Eksternt skrivebord" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome-appstrømming" + }, + "RECONNECT": { + "message": "Koble til pÃ¥ nytt" + }, + "REMEMBER_PIN": { + "message": "Ikke be om PIN-kode igjen nÃ¥r du kobler til denne verten fra denne enheten." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Core-bibliotek" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Integrasjonsprosess for skrivebord" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Program som brukes til Ã¥ sende kommandoer til verten for Chrome Eksternt skriverbord." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Vertsprosess" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Innebygd meldingsvert for administrasjon av ekstern vert" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Innebygd meldingsvert for ekstern hjelp" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Prosess for ekstern sikkerhetsnøkkel" + }, + "RESIZE_TO_CLIENT": { + "message": "Tilpass størrelsen pÃ¥ skrivebordet" + }, + "RESTART_BUTTON": { + "message": "Start pÃ¥ nytt nÃ¥" + }, + "RESTORE_WINDOW": { + "message": "Gjenopprett vinduet" + }, + "RETRY": { + "message": "Prøv pÃ¥ nytt" + }, + "SCREEN_OPTIONS": { + "message": "Skjermalternativer" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Send Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Rapportér et problem" + }, + "SEND_KEYS": { + "message": "Send nøkler" + }, + "SEND_PRINT_SCREEN": { + "message": "Send PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Med denne tjenesten kan du motta innkommende tilkoblinger fra Chrome Eksternt skrivebord-klienter." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Denne innstillingen administreres av domeneretningslinjene dine." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Del" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Avbryt" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Har du lyst til Ã¥ dele denne datamaskinen slik at en annen bruker kan se og kontrollere den?" + }, + "SHOW_STATS": { + "message": "Vis statistikk" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Vis statistikk (tilkobling: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Forminsk til den passer" + }, + "SIGN_IN_BUTTON": { + "message": "Logg pÃ¥" + }, + "SIGN_OUT_BUTTON": { + "message": "Logg av" + }, + "STOP_SHARING_BUTTON": { + "message": "Stopp deling" + }, + "SURVEY_INVITATION": { + "message": "Vil du være med pÃ¥ Ã¥ forbedre Chrome Eksternt skrivebord? $1$Delta i spørreundersøkelsen.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Klokkeslett" + }, + "TOGGLE_STATS": { + "message": "Vis statistikk" + }, + "TOOLTIP_CONNECT": { + "message": "Koble til $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Deaktiver eksterne tilkoblinger til denne datamaskinen." + }, + "TOOLTIP_REFRESH": { + "message": "Oppdater vertslisten" + }, + "TOOLTIP_RENAME": { + "message": "Rediger datamaskinnavnet" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (utdatert)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konto" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Bekreft kontoen og PIN-koden din nedenfor for Ã¥ tillate tilgang via Chrome Eksternt skrivebord." + }, + "WARNING_NAT_DISABLED": { + "message": "MERK: I henhold til lokale retningslinjer er tilkobling tillatt bare mellom datamaskiner i nettverket ditt." + }, + "WARNING_NOT_WINDOWED": { + "message": "MERK: For Ã¥ sikre at alle hurtigtastene er tilgjengelige, kan du konfigurere Chrome Eksternt skrivebord til «Åpne som vindu»." + }, + "WHY_IS_THIS_SAFE": { + "message": "Hvorfor er dette trygt?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Vinduer" + }, + "WORKING": { + "message": "Behandler …" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nl/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nl/messages.json new file mode 100644 index 000000000000..f62f5f641c15 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/nl/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Accepteren en installeren" + }, + "ACCESS_CODE": { + "message": "Toegangscode" + }, + "ACCESS_CODE_TIMER": { + "message": "Deze toegangscode verloopt over $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Alle verbindingen" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Pincode nogmaals opgeven" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "Pincode" + }, + "CANCEL": { + "message": "Annuleren" + }, + "CLEAR_HISTORY": { + "message": "Geschiedenis wissen" + }, + "CLOSE": { + "message": "Sluiten" + }, + "CLOSE_PROMPT": { + "message": "Als je deze pagina verlaat, wordt je Chrome Remote Desktop-sessie beëindigd." + }, + "CLOSE_WINDOW": { + "message": "Venster sluiten" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Weet je zeker dat je externe verbindingen met $1$ wilt uitschakelen? Als je van gedachten verandert, moet je naar die computer gaan om de verbindingen weer in te schakelen.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Verbinding mislukt" + }, + "CONNECTION_FROM_HEADER": { + "message": "Van" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Verbindingsgeschiedenis" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Redelijk" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Goed" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Slecht" + }, + "CONNECTION_TO_HEADER": { + "message": "Aan" + }, + "CONNECT_ANYWAY": { + "message": "Toch verbinding maken" + }, + "CONNECT_BUTTON": { + "message": "Verbinding maken" + }, + "CONTINUE_BUTTON": { + "message": "Doorgaan" + }, + "CONTINUE_PROMPT": { + "message": "Je deelt deze computer momenteel met een andere gebruiker. Wil je doorgaan met delen?" + }, + "CONTROLLER_NAME": { + "message": "Controller voor Chrome Remote Desktop-host" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Alle rechten voorbehouden." + }, + "CREDITS": { + "message": "Credits" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Alles verwijderen" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Verwijderen" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Als je wilt doorgaan, moet je eerst uitgebreide toegangsrechten voor je computer verlenen. Je hoeft dit slechts één keer te doen." + }, + "DESCRIPTION_CONNECT": { + "message": "Vraag de gebruiker tot wiens computer je toegang wilt hebben, op $1$ te klikken en je de toegangscode te geven.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Met Chrome Remote Desktop kun je je computer veilig delen via internet. Beide gebruikers moeten hiervoor de app Chrome Remote Desktop uitvoeren, die beschikbaar is op $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "De externe host vereist dat je op een website van derden wordt geverifieerd. Als je wilt doorgaan, moet je Chrome Remote Desktop aanvullende machtigingen geven om toegang tot dit adres te krijgen:" + }, + "DISABLE_HOST": { + "message": "Uitschakelen" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Verbinding verbreken" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktop-service" + }, + "DURATION_HEADER": { + "message": "Duur" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Je hebt geen toestemming om deze app uit te voeren." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Verificatie mislukt. Log opnieuw in bij Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Er ontbreken enkele vereiste componenten. Controleer of de nieuwste versie van de software is geïnstalleerd en probeer het opnieuw." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Er is een netwerkfout opgetreden. We starten de app opnieuw wanneer je apparaat weer online is." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "De externe computer kan de sessie niet initialiseren. Als het probleem blijft optreden, configureer je de host opnieuw." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "De externe computer reageert niet op verbindingsverzoeken. Controleer of deze online is en probeer het opnieuw." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Verbindingen met de externe computer zijn tijdelijk geblokkeerd omdat iemand heeft geprobeerd met een ongeldige pincode verbinding te maken met de computer. Probeer het later opnieuw." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Kan deze computer niet registreren." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Er is een incompatibele versie gedetecteerd. Controleer of de nieuwste versie van de software is geïnstalleerd op beide computers en probeer het opnieuw." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "De toegangscode is ongeldig. Probeer het opnieuw." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "De beleidsinstellingen staan het delen van deze computer als host voor Chrome Remote Desktop niet toe. Neem contact op met je systeembeheerder voor hulp." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "De externe sessie is verlopen." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Er ontbreken enkele vereiste componenten. Controleer of je de nieuwste versie van Chrome gebruikt en probeer het opnieuw." + }, + "ERROR_NACL_DISABLED": { + "message": "Er ontbreken enkele vereiste componenten. Ga naar chrome://plugins en zorg ervoor dat Native Client is ingeschakeld." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Een vereiste component werkt niet meer. Meld dit probleem aan de ontwikkelaars." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Kan geen verbinding maken met het netwerk. Controleer of je apparaat online is." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Je bent niet ingelogd bij Chrome. Log in en probeer het opnieuw." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Je hebt geen toestemming om die actie uit te voeren." + }, + "ERROR_NOT_FOUND": { + "message": "Het gevraagde object bestaat niet." + }, + "ERROR_P2P_FAILURE": { + "message": "Kan de host niet bereiken. Dit komt waarschijnlijk door de configuratie van het netwerk dat je gebruikt." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "De service is tijdelijk niet beschikbaar. Probeer het later opnieuw." + }, + "ERROR_UNEXPECTED": { + "message": "Er is een onverwachte fout opgetreden. Meld dit probleem aan de ontwikkelaars." + }, + "EXIT_FULL_SCREEN": { + "message": "Volledig scherm sluiten" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Kan de app niet opnieuw instellen. Je kunt nog steeds een foutmelding verzenden." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "De app opnieuw instellen. Al je niet-opgeslagen werk gaat verloren." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ik kan de app niet openen." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "De app is te langzaam." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ik kan mijn Google Drive-bestanden niet openen." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Ik kan mijn opgeslagen bestanden niet online zien in Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Ik ondervind problemen met mijn toetsenbord of muis." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Vertel ons wat er is misgegaan zodat we je probleem kunnen oplossen:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Iets anders." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Selecteren…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Je e-mailadres wordt opgenomen in alle feedback die je verzendt zodat we contact met je kunnen opnemen voor meer informatie." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Een probleem melden" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "App-logboeken toevoegen om ons te helpen je probleem op te lossen (logboeken bevatten mogelijk privégegevens)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "App-logboeken bevatten mogelijk privégegevens, inclusief je identiteit (e-mailadres) en de namen en eigenschappen van bestanden en mappen in Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Deze informatie wordt alleen gebruikt voor een diagnose van het probleem dat je meldt, is alleen beschikbaar voor iemand die je melding onderzoekt en wordt maximaal 30 dagen bewaard." + }, + "FOOTER_CONNECTING": { + "message": "Verbinding maken…" + }, + "FOOTER_WAITING": { + "message": "wachten op verbinding…" + }, + "FOR_PLATFORM_MAC": { + "message": "Voor Mac (OS X 10.6 en hoger)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Voor Windows (XP en hoger)" + }, + "FULL_SCREEN": { + "message": "Volledig scherm" + }, + "GET_STARTED": { + "message": "Aan de slag" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accepteren" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Afwijzen" + }, + "HELP": { + "message": "Help" + }, + "HOME_ACCESS_BUTTON": { + "message": "Verbinding maken" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Een gedeelde computer bekijken en beheren." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Je kunt veilig toegang krijgen tot deze computer via Chrome Remote Desktop." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Pincode wijzigen" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Deze computer wordt momenteel via een ander account gedeeld." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Weergeven/bewerken" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Deze computer is geconfigureerd om een of meer clients toestemming te geven verbinding te maken zonder een pincode op te geven." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Externe verbindingen inschakelen" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Je moet externe verbindingen inschakelen als je Chrome Remote Desktop wilt gebruiken voor toegang tot deze computer." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Externe verbindingen uitschakelen" + }, + "HOME_SHARE_BUTTON": { + "message": "Delen" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "De computer delen zodat een andere gebruiker deze kan bekijken en beheren." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(deze functie is nog niet beschikbaar voor je computer)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Toegang geweigerd voor client: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client verbonden: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Verbinding met client verbroken: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Kanaal-IP voor client: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Als je externe verbindingen met een andere computer mogelijk wilt maken, installeer je Chrome Remote Desktop op die computer en klik je op '$1$'.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Je hebt geen geregistreerde computers. Als je externe verbindingen met een computer mogelijk wilt maken, installeer je Chrome Remote Desktop op die computer en klik je op '$1$'.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Je bent eerder ingelogd als $1$ ($2$). Als je toegang wilt tot je computers met dat account, $3$log je in bij Google Chrome$4$ met dat account en installeer je Chrome Remote Desktop opnieuw.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Software-updates worden gewoonlijk automatisch uitgevoerd, maar kunnen in zeldzame gevallen mislukken. Het bijwerken van de software duurt slechts een paar minuten en kan worden gedaan terwijl je extern bent verbonden met je computer." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop op $1$ is verouderd en moet worden bijgewerkt.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Help ons Chrome Remote Desktop te verbeteren door ons toestemming te geven gebruiksstatistieken en crashrapporten te verzamelen." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Om de toegang tot deze computer te beschermen, kies je een pincode van $1$ten minste zes cijfers$2$. Je moet deze pincode opgeven wanneer je verbinding maakt vanaf een andere locatie.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Kan de service voor externe toegang niet starten." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome downloadt het installatieprogramma voor de Chrome Remote Desktop-host. Zodra het downloaden is voltooid, voer je het installatieprogramma uit voordat je doorgaat." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Voer het installatieprogramma uit voordat je doorgaat." + }, + "HOST_SETUP_STARTED": { + "message": "Externe verbindingen voor deze computer zijn ingeschakeld." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Controleer de instellingen voor energiebeheer van je computer en zorg ervoor dat de slaapstand niet wordt geactiveerd wanneer de computer inactief is." + }, + "HOST_SETUP_STARTING": { + "message": "Externe verbindingen voor deze computer inschakelen…" + }, + "HOST_SETUP_STOPPED": { + "message": "Externe verbindingen voor deze computer zijn uitgeschakeld." + }, + "HOST_SETUP_STOPPING": { + "message": "Externe verbindingen voor deze computer uitschakelen…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Kan externe toegang tot deze computer niet uitschakelen. Probeer het later opnieuw." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Door het installatieprogramma voor de Chrome Remote Desktop-host te downloaden, ga je akkoord met de $1$Servicevoorwaarden$4 van Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Je pincode is bijgewerkt." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Kan pincode niet updaten. Probeer het later opnieuw." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "De pincode voor deze computer wordt bijgewerkt…" + }, + "HOST_STARTED": { + "message": "Host gestart voor gebruiker: %1." + }, + "HOST_STOPPED": { + "message": "Host is gestopt." + }, + "IDLE_CONTINUE": { + "message": "Doorgaan" + }, + "IDLE_DISCONNECT": { + "message": "Nu verbinding verbreken" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Je $1$-sessie is al enige tijd inactief. Binnenkort wordt de verbinding verbroken.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Naar deze computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Installatieprogramma voor Chrome Remote Desktop-host downloaden" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Om je bureaublad te delen, geef je de onderstaande toegangscode aan de persoon die je gaat helpen." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Zodra deze persoon de code opgeeft, wordt je deelsessie gestart." + }, + "INVALID_PIN": { + "message": "Geef een pincode van zes of meer cijfers op." + }, + "IT2ME_FIRST_RUN": { + "message": "Schermen delen tussen gebruikers, perfect voor externe ondersteuning." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Toetsenbordindeling" + }, + "LABEL_CONNECTED": { + "message": "Verbonden:" + }, + "LAST_ONLINE": { + "message": "$1$ (laatst online: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Meer informatie." + }, + "LEARN_MORE": { + "message": "Meer informatie." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Voorkeuren voor Chrome Remote Desktop-host" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop-host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Verwijderprogramma voor Chrome Remote Desktop-host" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Gebruik rechter Ctrl-toets als Windows-toets (⌘ op Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Venster maximaliseren" + }, + "ME2ME_FIRST_RUN": { + "message": "Krijg overal toegang tot je eigen computer." + }, + "MESSAGE_GENERATING": { + "message": "Toegangscode genereren…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Je Chrome Remote Desktop-sessie is beëindigd." + }, + "MESSAGE_SHARED": { + "message": "Je bureaublad wordt momenteel gedeeld met $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Venster minimaliseren" + }, + "MODE_AUTHORIZE": { + "message": "Autoriseren" + }, + "MODE_IT2ME": { + "message": "Externe ondersteuning" + }, + "MODE_ME2ME": { + "message": "Mijn computers" + }, + "NEW_WINDOW": { + "message": "Nieuw venster…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Alle gekoppelde clients zijn verwijderd." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Bureaubladintegratie wordt niet ondersteund op dit platform. Je kunt de app nog steeds gebruiken, maar de gebruikerservaring is beperkt." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Initialisatie van host mislukt." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ongeldige hostconfiguratie." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ongeldig domein voor hosteigenaar." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ongeldige host-ID." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host is geconfigureerd met ongeldige OAuth-inloggegevens." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "De host die werd uitgevoerd op het console-inlogscherm, is uitgeschakeld om de gordijnmodus te ondersteunen door over te schakelen naar een host die in een gebruikersspecifieke sessie wordt uitgevoerd." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host wordt opnieuw gestart om een beleidswijziging toe te passen." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Host kan het beleid niet lezen." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host is afgesloten." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Onbekende hostfout: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ongeldige hosteigenaar." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Opties" + }, + "OUTGOING_CONNECTIONS": { + "message": "Vanaf deze computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "De volgende clients zijn gekoppeld met deze computer en kunnen verbinding maken zonder een pincode op te geven. Je kunt deze toestemming op elk gewenst moment intrekken, voor afzonderlijke clients of voor alle clients." + }, + "PAIRED_CLIENT_DATE": { + "message": "Koppelingsdatum" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "Pincode" + }, + "PINS_NOT_EQUAL": { + "message": "Geef dezelfde pincode in beide vakken op." + }, + "PIN_MESSAGE": { + "message": "Geef je pincode voor $1$ op.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Voer je pincode voor de externe computer in." + }, + "PRODUCT_DESCRIPTION": { + "message": "Toegang krijgen tot andere computers of andere gebruikers toestemming geven veilig toegang te krijgen tot je computer via internet." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Streaming via Chrome-app" + }, + "RECONNECT": { + "message": "Opnieuw verbinding maken" + }, + "REMEMBER_PIN": { + "message": "Niet meer vragen naar een pincode bij het aansluiten van dit apparaat op deze host." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Basisbibliotheek" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Desktopintegratieproces" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "App die opdrachten geeft aan de Chrome Remote Desktop-host." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Hostproces" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Systeemeigen berichthost voor extern hostbeheer" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Systeemeigen berichthost voor externe ondersteuning" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proces voor externe toegang tot beveiligingssleutel" + }, + "RESIZE_TO_CLIENT": { + "message": "Formaat van bureaublad aanpassen" + }, + "RESTART_BUTTON": { + "message": "Nu opnieuw starten" + }, + "RESTORE_WINDOW": { + "message": "Venster herstellen" + }, + "RETRY": { + "message": "Opnieuw proberen" + }, + "SCREEN_OPTIONS": { + "message": "Schermopties" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del verzenden" + }, + "SEND_FEEDBACK": { + "message": "Een probleem melden…" + }, + "SEND_KEYS": { + "message": "Toetsen verzenden" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn verzenden" + }, + "SERVICE_DESCRIPTION": { + "message": "Met deze service worden inkomende verbindingen van Chrome Remote Desktop-clients ingeschakeld." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Deze instelling wordt beheerd door je domeinbeleid." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Delen" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Annuleren" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Wil je deze computer delen zodat een andere gebruiker deze kan bekijken en bedienen?" + }, + "SHOW_STATS": { + "message": "Statistieken weergeven" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Statistieken weergeven (verbinding: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Aanpassen aan venster" + }, + "SIGN_IN_BUTTON": { + "message": "Inloggen" + }, + "SIGN_OUT_BUTTON": { + "message": "Uitloggen" + }, + "STOP_SHARING_BUTTON": { + "message": "Delen stoppen" + }, + "SURVEY_INVITATION": { + "message": "Wil je ons helpen Chrome Remote Desktop te verbeteren? $1$Vul de enquête in.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Tijd" + }, + "TOGGLE_STATS": { + "message": "Statistieken weergeven" + }, + "TOOLTIP_CONNECT": { + "message": "Verbinding maken met $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Externe verbindingen naar deze computer uitschakelen" + }, + "TOOLTIP_REFRESH": { + "message": "Lijst met hosts vernieuwen" + }, + "TOOLTIP_RENAME": { + "message": "Computernaam bewerken" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (verouderd)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Account" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Bevestig je account en pincode hieronder om toegang door Chrome Remote Desktop toe te staan." + }, + "WARNING_NAT_DISABLED": { + "message": "OPMERKING: beleidsinstellingen staan alleen verbindingen tussen computers binnen je netwerk toe." + }, + "WARNING_NOT_WINDOWED": { + "message": "Opmerking: als je er zeker van wilt zijn dat alle sneltoetsen beschikbaar zijn, kun je Chrome Remote Desktop configureren om de modus 'Openen als venster' te gebruiken." + }, + "WHY_IS_THIS_SAFE": { + "message": "Waarom is dit veilig?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Vensters" + }, + "WORKING": { + "message": "Bezig…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pl/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pl/messages.json new file mode 100644 index 000000000000..c3000f0b3d76 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pl/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Zaakceptuj i zainstaluj" + }, + "ACCESS_CODE": { + "message": "Kod dostÄ™pu" + }, + "ACCESS_CODE_TIMER": { + "message": "Ten kod dostÄ™pu wygasa za $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Twoja opinia" + }, + "ALL_CONNECTIONS": { + "message": "Wszystkie poÅ‚Ä…czenia" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ponownie wpisz PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Anuluj" + }, + "CLEAR_HISTORY": { + "message": "Wyczyść historiÄ™" + }, + "CLOSE": { + "message": "Zamknij" + }, + "CLOSE_PROMPT": { + "message": "JeÅ›li opuÅ›cisz tÄ™ stronÄ™, sesja Pulpitu zdalnego Chrome zostanie zakoÅ„czona." + }, + "CLOSE_WINDOW": { + "message": "Zamknij okno" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Na pewno chcesz wyÅ‚Ä…czyć poÅ‚Ä…czenia zdalne z: $1$? JeÅ›li zmienisz zdanie, poÅ‚Ä…czenia bÄ™dzie trzeba wÅ‚Ä…czyć na tamtym komputerze.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "PoÅ‚Ä…czenie siÄ™ nie udaÅ‚o" + }, + "CONNECTION_FROM_HEADER": { + "message": "Od" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historia poÅ‚Ä…czeÅ„" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Åšrednia" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Dobra" + }, + "CONNECTION_QUALITY_POOR": { + "message": "SÅ‚aba" + }, + "CONNECTION_TO_HEADER": { + "message": "Do" + }, + "CONNECT_ANYWAY": { + "message": "PoÅ‚Ä…cz mimo to" + }, + "CONNECT_BUTTON": { + "message": "PoÅ‚Ä…cz" + }, + "CONTINUE_BUTTON": { + "message": "Kontynuuj" + }, + "CONTINUE_PROMPT": { + "message": "Obecnie udostÄ™pniasz ten komputer innemu użytkownikowi. Czy chcesz kontynuować udostÄ™pnianie?" + }, + "CONTROLLER_NAME": { + "message": "Kontroler hosta Pulpitu zdalnego Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Wszelkie prawa zastrzeżone." + }, + "CREDITS": { + "message": "Autorzy" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "UsuÅ„ wszystkie" + }, + "DELETE_PAIRED_CLIENT": { + "message": "UsuÅ„" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Aby przejść dalej, musisz najpierw przyznać rozszerzone uprawnienia dostÄ™pu do swojego komputera. Trzeba to zrobić tylko raz." + }, + "DESCRIPTION_CONNECT": { + "message": "PoproÅ› użytkownika, z którego komputera chcesz korzystać, by kliknÄ…Å‚ „$1$†i udostÄ™pniÅ‚ Ci kod dostÄ™pu.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Pulpit zdalny Chrome pozwala na bezpieczne udostÄ™pnianie komputera przez internet. Obaj użytkownicy muszÄ… mieć uruchomionÄ… aplikacjÄ™ Pulpit zdalny Chrome, którÄ… można znaleźć na $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Host zdalny wymaga uwierzytelnienia w witrynie innej firmy. Aby kontynuować, musisz udzielić Pulpitowi zdalnemu Chrome dodatkowych uprawnieÅ„ dostÄ™pu do tego adresu:" + }, + "DISABLE_HOST": { + "message": "WyÅ‚Ä…cz" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "RozÅ‚Ä…cz" + }, + "DISPLAY_SERVICE_NAME": { + "message": "UsÅ‚uga Pulpitu zdalnego Chrome" + }, + "DURATION_HEADER": { + "message": "Czas trwania" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Nie masz uprawnieÅ„ do uruchamiania tej aplikacji." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Uwierzytelnianie nie powiodÅ‚o siÄ™. Zaloguj siÄ™ ponownie do Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Brak niektórych wymaganych komponentów. Upewnij siÄ™, że masz zainstalowanÄ… najnowszÄ… wersjÄ™ oprogramowania, i spróbuj ponownie." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "WystÄ…piÅ‚ bÅ‚Ä…d sieci. Uruchomimy ponownie aplikacjÄ™, gdy urzÄ…dzenie znów bÄ™dzie online." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Komputerowi zdalnemu nie udaÅ‚o siÄ™ zainicjować sesji. JeÅ›li problem nie zniknie, spróbuj ponownie skonfigurować hosta." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Komputer zdalny nie odpowiada na żądania poÅ‚Ä…czenia. Sprawdź, czy jest on podÅ‚Ä…czony do internetu i spróbuj ponownie." + }, + "ERROR_HOST_OVERLOAD": { + "message": "PoÅ‚Ä…czenia z komputerem zdalnym sÄ… chwilowo zablokowane, bo ktoÅ› próbowaÅ‚ siÄ™ z nim poÅ‚Ä…czyć, podajÄ…c nieprawidÅ‚owy PIN. Spróbuj ponownie później." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Nie udaÅ‚o siÄ™ zarejestrować tego komputera." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Wykryto niezgodnÄ… wersjÄ™ protokoÅ‚u. Upewnij siÄ™, że na obu komputerach masz zainstalowanÄ… najnowszÄ… wersjÄ™ oprogramowania, i spróbuj ponownie." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Kod dostÄ™pu jest nieprawidÅ‚owy. Spróbuj ponownie." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Ustawienia zasad nie zezwalajÄ… na udostÄ™pnianie tego komputera jako hosta Pulpitu zdalnego Chrome. Aby uzyskać pomoc, skontaktuj siÄ™ z administratorem systemu." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Sesja zdalna wygasÅ‚a." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Brak niektórych wymaganych komponentów. Upewnij siÄ™, że korzystasz z najnowszej wersji Chrome, i spróbuj ponownie." + }, + "ERROR_NACL_DISABLED": { + "message": "Brak niektórych wymaganych komponentów. Otwórz stronÄ™ chrome://plugins i upewnij siÄ™, że jest wÅ‚Ä…czony Klient natywny." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "PrzestaÅ‚ dziaÅ‚ać wymagany komponent. ZgÅ‚oÅ› ten problem programistom." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nie można poÅ‚Ä…czyć siÄ™ z sieciÄ…. Sprawdź, czy urzÄ…dzenie jest online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Nie jesteÅ› zalogowany do Chrome. Zaloguj siÄ™ i spróbuj ponownie." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Nie masz uprawnieÅ„ do wykonywania tej czynnoÅ›ci." + }, + "ERROR_NOT_FOUND": { + "message": "Żądany obiekt nie istnieje." + }, + "ERROR_P2P_FAILURE": { + "message": "Nie można poÅ‚Ä…czyć siÄ™ z hostem. Problem prawdopodobnie wynika z konfiguracji Twojej sieci." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "UsÅ‚uga jest tymczasowo niedostÄ™pna. Spróbuj ponownie później." + }, + "ERROR_UNEXPECTED": { + "message": "WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d. ZgÅ‚oÅ› ten problem programistom." + }, + "EXIT_FULL_SCREEN": { + "message": "Zamknij peÅ‚ny ekran" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Nie można zresetować aplikacji. Wciąż możesz przesÅ‚ać zgÅ‚oszenie bÅ‚Ä™du." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Zresetuj aplikacjÄ™. Niezapisane dane zostanÄ… utracone." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Nie mogÄ™ otworzyć aplikacji." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Aplikacja dziaÅ‚a za wolno." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Nie mogÄ™ otworzyć moich plików na Dysku Google." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Nie widzÄ™ moich plików zapisanych na Dysku Google, gdy jestem online." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Mam problem z klawiaturÄ… lub myszÄ…." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Aby pomóc nam w rozwiÄ…zaniu problemu, opisz, na czym on polega:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Inny problem." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Wybierz…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Aby umożliwić nam skontaktowanie siÄ™ z TobÄ… w sprawie dodatkowych informacji, Twój adres e-mail zostanie doÅ‚Ä…czony do każdego zgÅ‚oszenia, które przeÅ›lesz." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "ZgÅ‚oÅ› problem" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "DoÅ‚Ä…cz dzienniki aplikacji, by pomóc nam rozwiÄ…zać ten problem (dzienniki mogÄ… zawierać informacje prywatne)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Dzienniki aplikacji mogÄ… zawierać informacje prywatne, w tym Twoje dane osobowe (adres e-mail) oraz nazwy i wÅ‚aÅ›ciwoÅ›ci plików i folderów na Dysku Google." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Użyjemy tych informacji jedynie do zdiagnozowania zgÅ‚oszonego problemu, udostÄ™pnimy je tylko osobie sprawdzajÄ…cej zgÅ‚oszenie i usuniemy w ciÄ…gu 30 dni." + }, + "FOOTER_CONNECTING": { + "message": "ÅÄ…czę…" + }, + "FOOTER_WAITING": { + "message": "czekam na poÅ‚Ä…czenie…" + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 lub nowszy)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP lub nowszy)" + }, + "FULL_SCREEN": { + "message": "PeÅ‚ny ekran" + }, + "GET_STARTED": { + "message": "Rozpocznij" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Akceptuj" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Odrzuć" + }, + "HELP": { + "message": "Pomoc" + }, + "HOME_ACCESS_BUTTON": { + "message": "PoÅ‚Ä…cz" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Zobacz i kontroluj udostÄ™pniony komputer." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Możesz bezpiecznie korzystać z tego komputera przez Pulpit zdalny Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "ZmieÅ„ kod PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Ten komputer jest obecnie udostÄ™pniany na innym koncie." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "WyÅ›wietl/edytuj" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Ten komputer jest skonfigurowany do zezwalania jednemu lub wielu klientom na Å‚Ä…czenie siÄ™ bez podawania kodu PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "WÅ‚Ä…cz poÅ‚Ä…czenia zdalne" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "JeÅ›li chcesz korzystać z tego komputera przez Pulpit zdalny Chrome, musisz wÅ‚Ä…czyć poÅ‚Ä…czenia zdalne." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "WyÅ‚Ä…cz poÅ‚Ä…czenia zdalne" + }, + "HOME_SHARE_BUTTON": { + "message": "UdostÄ™pnij" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "UdostÄ™pnij ten komputer innemu użytkownikowi, by mógÅ‚ go widzieć i kontrolować." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ta funkcja nie jest jeszcze dostÄ™pna na tym komputerze)" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Odmowa dostÄ™pu dla klienta: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "PodÅ‚Ä…czyÅ‚ siÄ™ klient: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "RozÅ‚Ä…czyÅ‚ siÄ™ klient: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Adres IP kanaÅ‚u dla klienta: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Aby umożliwić zdalne poÅ‚Ä…czenia z innym komputerem, zainstaluj na nim Pulpit zdalny Chrome i kliknij „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Nie masz zarejestrowanych komputerów. Aby umożliwić zdalne poÅ‚Ä…czenia z komputerem, zainstaluj na nim Pulpit zdalny Chrome i kliknij „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Poprzednio logowaÅ‚eÅ› siÄ™ jako $1$ ($2$). Aby uzyskać dostÄ™p do swoich komputerów na tym koncie, $3$zaloguj siÄ™ na to konto w Google Chrome$4$ i ponownie zainstaluj Pulpit zdalny Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Aktualizacje oprogramowania sÄ… zwykle instalowane automatycznie, ale w niektórych rzadkich przypadkach koÅ„czÄ… siÄ™ niepowodzeniem. Aktualizacja oprogramowania nie powinna trwać dÅ‚użej niż kilka minut i można jÄ… wykonać przy zdalnym poÅ‚Ä…czeniu z komputerem." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Pulpit zdalny Chrome na komputerze $1$ jest nieaktualny i wymaga aktualizacji.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Pomóż nam udoskonalić Pulpit zdalny Chrome, zezwalajÄ…c na gromadzenie przez nas statystyk użytkowania i raportów o awariach." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Aby zabezpieczyć dostÄ™p do tego komputera, wybierz PIN zÅ‚ożony z $1$co najmniej szeÅ›ciu cyfr$2$. BÄ™dzie on wymagany przy Å‚Ä…czeniu siÄ™ z innej lokalizacji.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Nie udaÅ‚o siÄ™ uruchomić usÅ‚ugi dostÄ™pu zdalnego." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome pobiera instalatora hosta Pulpitu zdalnego Chrome. Po zakoÅ„czeniu pobierania uruchom instalatora." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Najpierw uruchom instalatora." + }, + "HOST_SETUP_STARTED": { + "message": "PoÅ‚Ä…czenia zdalne z tym komputerem zostaÅ‚y wÅ‚Ä…czone." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Sprawdź ustawienia zarzÄ…dzania zasilaniem komputera i upewnij siÄ™, że nie jest on skonfigurowany do przechodzenia podczas bezczynnoÅ›ci w tryb uÅ›pienia." + }, + "HOST_SETUP_STARTING": { + "message": "WÅ‚Ä…czam poÅ‚Ä…czenia zdalne z tym komputerem…" + }, + "HOST_SETUP_STOPPED": { + "message": "PoÅ‚Ä…czenia zdalne z tym komputerem zostaÅ‚y wyÅ‚Ä…czone." + }, + "HOST_SETUP_STOPPING": { + "message": "WyÅ‚Ä…czam poÅ‚Ä…czenia zdalne z tym komputerem…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Nie udaÅ‚o siÄ™ wyÅ‚Ä…czyć dostÄ™pu zdalnego do tego komputera. Spróbuj ponownie później." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "PobierajÄ…c instalatora hosta Pulpitu zdalnego Chrome, akceptujesz $1$Warunki korzystania z usÅ‚ug$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN zostaÅ‚ zaktualizowany." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Nie udaÅ‚o siÄ™ zaktualizować PIN-u. Spróbuj ponownie później." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "AktualizujÄ™ PIN tego komputera…" + }, + "HOST_STARTED": { + "message": "Uruchomiono host dla użytkownika: %1." + }, + "HOST_STOPPED": { + "message": "Host zostaÅ‚ zatrzymany." + }, + "IDLE_CONTINUE": { + "message": "Kontynuuj" + }, + "IDLE_DISCONNECT": { + "message": "OdÅ‚Ä…cz teraz" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Sesja aplikacji $1$ jest od jakiegoÅ› czasu nieaktywna i zostanie wkrótce zakoÅ„czona.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Z tym komputerem" + }, + "INSTALLER_DOWNLOAD": { + "message": "Pobierz instalatora hosta Pulpitu zdalnego Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Aby udostÄ™pnić pulpit, podaj poniższy kod dostÄ™pu osobie, która bÄ™dzie Ci pomagać." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Po wprowadzeniu kodu przez drugÄ… stronÄ™ rozpocznie siÄ™ sesja udostÄ™pniania." + }, + "INVALID_PIN": { + "message": "Wpisz PIN zÅ‚ożony z co najmniej szeÅ›ciu cyfr." + }, + "IT2ME_FIRST_RUN": { + "message": "Dzielenie siÄ™ ekranem z innym użytkownikiem – doskonaÅ‚e do zdalnej pomocy technicznej." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "UkÅ‚ady klawiatury" + }, + "LABEL_CONNECTED": { + "message": "PoÅ‚Ä…czono:" + }, + "LAST_ONLINE": { + "message": "$1$ (ostatnio online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Dowiedz siÄ™ jak." + }, + "LEARN_MORE": { + "message": "WiÄ™cej informacji." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Ustawienia hosta Pulpitu zdalnego Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host Pulpitu\nzdalnego Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Program do odinstalowywania hosta Pulpitu zdalnego Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Użyj prawego klawisza Ctrl w systemie Windows (⌘ na Macu)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maksymalizuj okno" + }, + "ME2ME_FIRST_RUN": { + "message": "DostÄ™p do wÅ‚asnego komputera z dowolnego miejsca." + }, + "MESSAGE_GENERATING": { + "message": "GenerujÄ™ kod dostÄ™pu…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Sesja Pulpitu zdalnego Chrome zostaÅ‚a zakoÅ„czona." + }, + "MESSAGE_SHARED": { + "message": "Twój pulpit jest obecnie udostÄ™pniany użytkownikowi: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimalizuj okno" + }, + "MODE_AUTHORIZE": { + "message": "Autoryzuj" + }, + "MODE_IT2ME": { + "message": "Pomoc zdalna" + }, + "MODE_ME2ME": { + "message": "Moje komputery" + }, + "NEW_WINDOW": { + "message": "Nowe okno..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Wszystkie sparowane klienty zostaÅ‚y usuniÄ™te." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Integracja pulpitu jest niedostÄ™pna na tej platformie. Wciąż możesz używać aplikacji, jednak praca bÄ™dzie mniej wygodna." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Nie udaÅ‚o siÄ™ zainicjować hosta." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "NieprawidÅ‚owa konfiguracja hosta." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "NieprawidÅ‚owa domena wÅ‚aÅ›ciciela hosta." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "NieprawidÅ‚owy identyfikator hosta." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Host zostaÅ‚ skonfigurowany z nieprawidÅ‚owymi danymi logowania protokoÅ‚u OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Host uruchomiony na ekranie logowania konsoli zostaÅ‚ zamkniÄ™ty, by umożliwić wÅ‚Ä…czenie trybu kurtyny, przeÅ‚Ä…czajÄ…c siÄ™ na hosta uruchomionego w sesji danego użytkownika." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Host uruchamia siÄ™ ponownie, by uwzglÄ™dnić zmianÄ™ zasad." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Host nie może odczytać zasad." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Host zostaÅ‚ wyÅ‚Ä…czony." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Nieznany bÅ‚Ä…d hosta: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "NieprawidÅ‚owy wÅ‚aÅ›ciciel hosta." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Opcje" + }, + "OUTGOING_CONNECTIONS": { + "message": "Z tego komputera" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Te klienty zostaÅ‚y sparowane z tym komputerem i mogÄ… Å‚Ä…czyć siÄ™ bez podawania kodu PIN. Możesz anulować to uprawnienie w dowolnym momencie – pojedynczo lub dla wszystkich klientów." + }, + "PAIRED_CLIENT_DATE": { + "message": "Data parowania" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Wpisz ten sam PIN w obu polach." + }, + "PIN_MESSAGE": { + "message": "Wpisz PIN dla: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Wpisz kod PIN komputera zdalnego." + }, + "PRODUCT_DESCRIPTION": { + "message": "Uzyskuj dostÄ™p do innych komputerów lub zezwalaj innym użytkownikom na bezpieczny dostÄ™p do swojego komputera przez internet." + }, + "PRODUCT_NAME": { + "message": "Pulpit zdalny Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "PoÅ‚Ä…cz ponownie" + }, + "REMEMBER_PIN": { + "message": "Nie pytaj ponownie o kod PIN, gdy bieżące urzÄ…dzenie bÄ™dzie Å‚Ä…czyć siÄ™ z tym hostem." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteka główna" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proces integracji pulpitu" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikacja do wysyÅ‚ania poleceÅ„ do hosta Pulpitu zdalnego Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proces hosta" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Host natywnego przesyÅ‚ania komunikatów do zdalnego zarzÄ…dzania hostem" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Host natywnego przesyÅ‚ania komunikatów do pomocy zdalnej" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proces zdalnego stosowania klucza bezpieczeÅ„stwa" + }, + "RESIZE_TO_CLIENT": { + "message": "Dopasuj pulpit" + }, + "RESTART_BUTTON": { + "message": "Uruchom ponownie teraz" + }, + "RESTORE_WINDOW": { + "message": "Przywróć okno" + }, + "RETRY": { + "message": "Ponów próbÄ™" + }, + "SCREEN_OPTIONS": { + "message": "Opcje ekranu" + }, + "SEND_CTRL_ALT_DEL": { + "message": "WyÅ›lij Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "ZgÅ‚oÅ› problem…" + }, + "SEND_KEYS": { + "message": "WyÅ›lij naciÅ›niÄ™cia klawiszy" + }, + "SEND_PRINT_SCREEN": { + "message": "WyÅ›lij PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ta usÅ‚uga umożliwia obsÅ‚ugÄ™ poÅ‚Ä…czeÅ„ przychodzÄ…cych z klientów Pulpitu zdalnego Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Tym ustawieniem zarzÄ…dzajÄ… zasady domeny." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "UdostÄ™pnij" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Anuluj" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Chcesz udostÄ™pnić ten komputer innemu użytkownikowi, by mógÅ‚ przeglÄ…dać jego zawartość i sterować nim?" + }, + "SHOW_STATS": { + "message": "Pokaż statystyki" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Pokaż statystyki (jakość poÅ‚Ä…czenia: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Zmniejsz, by dopasować" + }, + "SIGN_IN_BUTTON": { + "message": "Zaloguj siÄ™" + }, + "SIGN_OUT_BUTTON": { + "message": "Wyloguj siÄ™" + }, + "STOP_SHARING_BUTTON": { + "message": "Zatrzymaj udostÄ™pnianie" + }, + "SURVEY_INVITATION": { + "message": "Chcesz pomóc w ulepszeniu Pulpitu zdalnego Chrome? $1$WypeÅ‚nij ankietÄ™$2$.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Godzina" + }, + "TOGGLE_STATS": { + "message": "Pokaż statystyki" + }, + "TOOLTIP_CONNECT": { + "message": "PoÅ‚Ä…cz z: $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "WyÅ‚Ä…cz poÅ‚Ä…czenia zdalne z tym komputerem" + }, + "TOOLTIP_REFRESH": { + "message": "OdÅ›wież listÄ™ hostów" + }, + "TOOLTIP_RENAME": { + "message": "Edytuj nazwÄ™ komputera" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (nieaktualne)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konto" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Potwierdź poniżej swoje konto i kod PIN, by pozwolić na dostÄ™p przez Pulpit zdalny Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "UWAGA: ustawienia zasad zezwalajÄ… wyÅ‚Ä…cznie na poÅ‚Ä…czenia miÄ™dzy komputerami w Twojej sieci." + }, + "WARNING_NOT_WINDOWED": { + "message": "UWAGA: aby wszystkie skróty klawiszowe byÅ‚y dostÄ™pne, ustaw Pulpit zdalny Chrome na „Otwórz jako oknoâ€." + }, + "WHY_IS_THIS_SAFE": { + "message": "Dlaczego to bezpieczne?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Okna" + }, + "WORKING": { + "message": "Przetwarzam…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_BR/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_BR/messages.json new file mode 100644 index 000000000000..5acbb13d9eee --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_BR/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Aceitar e instalar" + }, + "ACCESS_CODE": { + "message": "Código de acesso" + }, + "ACCESS_CODE_TIMER": { + "message": "Este código de acesso expira em $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Comentários" + }, + "ALL_CONNECTIONS": { + "message": "Todas as conexões" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Digite o PIN novamente" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancelar" + }, + "CLEAR_HISTORY": { + "message": "Limpar histórico" + }, + "CLOSE": { + "message": "Fechar" + }, + "CLOSE_PROMPT": { + "message": "Abandonar esta página encerrará sua sessão na Ãrea de trabalho remota do Google Chrome." + }, + "CLOSE_WINDOW": { + "message": "Fechar janela" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Tem certeza de que deseja desativar conexões remotas para $1$? Se mudar de idéia, precisará visitar este computador para reativar as conexões.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Falha na conexão" + }, + "CONNECTION_FROM_HEADER": { + "message": "De" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Histórico de conexões" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Regular" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Boa" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Insatisfatória" + }, + "CONNECTION_TO_HEADER": { + "message": "Para" + }, + "CONNECT_ANYWAY": { + "message": "Conectar assim mesmo" + }, + "CONNECT_BUTTON": { + "message": "Conectar-se" + }, + "CONTINUE_BUTTON": { + "message": "Continuar" + }, + "CONTINUE_PROMPT": { + "message": "Esta máquina está sendo compartilhada com outro usuário. Deseja continuar compartilhando?" + }, + "CONTROLLER_NAME": { + "message": "Controlador do host da Ãrea de trabalho remota do Google Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Todos os direitos reservados." + }, + "CREDITS": { + "message": "Créditos" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Excluir tudo" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Excluir" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Para continuar, é necessário conceder permissões de acesso estendidas ao seu computador. Você só precisará fazer isso uma vez." + }, + "DESCRIPTION_CONNECT": { + "message": "Peça ao usuário do computador que você deseja acessar que clique em \"$1$\" e forneça o código de acesso para você.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "A Ãrea de trabalho remota do Google Chrome permite que você compartilhe seu computador com segurança através da Web. Para isso, é preciso que os usuários executem simultaneamente o aplicativo da Ãrea de trabalho remota do Google Chrome, disponível em $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "O host remoto requer a autenticação em um website de terceiros. Para continuar, você deve conceder à Ãrea de trabalho remota do Google Chrome acesso a permissões adicionais para acessar este endereço:" + }, + "DISABLE_HOST": { + "message": "Desativar" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Desconectar" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Serviço Ãrea de trabalho remota do Google Chrome" + }, + "DURATION_HEADER": { + "message": "Duração" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Você não tem permissão para executar este aplicativo." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Falha na autenticação. Faça login novamente no Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Alguns componentes obrigatórios não foram encontrados. Certifique-se de que você esteja executando a última versão do software e tente novamente." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ocorreu um erro de rede. Reiniciaremos o aplicativo quando seu dispositivo estiver on-line novamente." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "O computador remoto apresentou uma falha ao inicializar a sessão. Se o problema persistir, tente configurar o host novamente." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "O computador remoto não está respondendo às solicitações de conexão. Certifique-se de que ele esteja on-line e tente novamente." + }, + "ERROR_HOST_OVERLOAD": { + "message": "As conexões ao computador remoto estão temporariamente bloqueadas porque alguém estava tentando se conectar a ele com um PIN inválido. Tente novamente mais tarde." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Falha ao registrar este computador." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Foi detectada uma versão incompatível do protocolo. Certifique-se de que você tenha a versão mais recente do software instalada em ambos os computadores e tente novamente." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Código de acesso inválido. Tente novamente." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "As definições da política não permitem compartilhar este computador como um host da Ãrea de trabalho remota do Google Chrome. Entre em contato com o administrador do sistema para obter ajuda." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "A sessão remota expirou." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Alguns componentes obrigatórios não foram encontrados. Certifique-se de que você esteja executando a última versão do Google Chrome e tente novamente." + }, + "ERROR_NACL_DISABLED": { + "message": "Alguns componentes obrigatórios não foram encontrados. Acesse chrome://plugins e certifique-se de que \"Cliente nativo' esteja ativado." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Um componente necessário parou de funcionar. Informe esse problema aos desenvolvedores." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Não foi possível conectar à rede. Verifique se seu dispositivo está on-line." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Você não está conectado ao Chrome. Faça login e tente novamente." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Você não tem permissão para executar esta ação." + }, + "ERROR_NOT_FOUND": { + "message": "O objeto solicitado não existe." + }, + "ERROR_P2P_FAILURE": { + "message": "Não é possível acessar o host. Isso se deve, provavelmente, à configuração da rede que você está usando." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "O serviço está temporariamente indisponível. Tente novamente mais tarde." + }, + "ERROR_UNEXPECTED": { + "message": "Ocorreu um erro inesperado. Informe este problema aos desenvolvedores." + }, + "EXIT_FULL_SCREEN": { + "message": "Sair do modo tela cheia" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Não foi possível redefinir o aplicativo. Você ainda pode enviar um relatório de bug." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Reinicie o aplicativo. Você perderá qualquer trabalho que não tenha sido salvo." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Não consigo abrir o aplicativo." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "O aplicativo está muito lento." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Não consigo abrir meus arquivos do Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Não consigo ver meus arquivos salvos on-line no Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Meu teclado ou mouse estão com problemas." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Para nos ajudar a resolver seu problema, diga o que deu errado:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Outro." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Selecionar..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Para que possamos entrar em contato com mais informações, seu endereço de e-mail será incluído em todo o feedback enviado por você." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Informar um problema" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Inclua os registros do aplicativo para nos ajudar a resolver seu problema. Os registros podem incluir informações particulares." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Os registros do aplicativo podem incluir informações particulares, inclusive sua identidade (endereço de e-mail) e os nomes e as propriedades dos arquivos e das pastas no Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Essa informação é usada apenas para diagnosticar o problema que você está relatando, está disponível apenas para as pessoas que estão investigando seu relatório e só fica retida por até 30 dias." + }, + "FOOTER_CONNECTING": { + "message": "Conectando..." + }, + "FOOTER_WAITING": { + "message": "aguardando conexão..." + }, + "FOR_PLATFORM_MAC": { + "message": "Para Mac (OS X 10.6 e acima)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Para Windows (XP e acima)" + }, + "FULL_SCREEN": { + "message": "Tela cheia" + }, + "GET_STARTED": { + "message": "Primeiros passos" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Aceitar" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Recusar" + }, + "HELP": { + "message": "Ajuda" + }, + "HOME_ACCESS_BUTTON": { + "message": "Acessar" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Ver e controlar um computador compartilhado." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Você pode acessar este computador com segurança, usando a Ãrea de trabalho remota do Google Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Alterar PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Atualmente, este computador é compartilhado com uma conta diferente." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Visualizar/editar" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Este computador está configurado para permitir que um ou mais clientes se conectem sem ter que inserir um PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Ativar conexões remotas" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Ative conexões remotas se desejar usar a Ãrea de trabalho remota do Google Chrome para acessar este computador." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Desativar conexões remotas" + }, + "HOME_SHARE_BUTTON": { + "message": "Compartilhar" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Compartilhe este computador para que outro usuário possa visualizá-lo e controlá-lo." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "Este recurso ainda não está disponível para seu computador" + }, + "HOST_CATEGORY": { + "message": "Host" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Acesso negado para o cliente %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Cliente conectado: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Cliente desconectado: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP do canal do cliente: %1 ip='%2' ip_host='%3' canal='%4' conexão='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Para ativar conexões remotas a um computador diferente, instale a Ãrea de trabalho remota do Google Chrome no computador desejado e clique em \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Você não tem computadores cadastrados. Para ativar conexões remotas a um computador, instale a Ãrea de trabalho remota do Google Chrome no computador desejado e clique em \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Você fez login anteriormente como $1$ ($2$). Para acessar seus computadores nessa conta, $3$faça login no Google Chrome$4$ usando essa conta e reinstale a Ãrea de trabalho remota do Google Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "As atualizações de software geralmente ocorrem automaticamente, mas podem falhar em casos raros. Essa atualização não deve demorar mais do que alguns minutos e pode ser feita enquanto você estiver conectado ao computador remotamente." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "A Ãrea de trabalho remota do Google Chrome em $1$ está desatualizada e precisa ser atualizada.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Ajude-nos a melhorar a Ãrea de trabalho remota do Google Chrome por meio da coleta de estatísticas de uso e de relatórios de falhas." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Para proteger o acesso a este computador, selecione um PIN de $1$pelo menos seis dígitos$2$. Este PIN será necessário para estabelecer conexão a partir de outro local.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Falha ao iniciar o serviço de acesso remoto." + }, + "HOST_SETUP_INSTALL": { + "message": "O Google Chrome está fazendo download do instalador do host da Ãrea de trabalho remota do Google Chrome. Quando o download estiver concluído, execute o instalador antes de continuar." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Execute o instalador antes de continuar." + }, + "HOST_SETUP_STARTED": { + "message": "As conexões remotas deste computador foram ativadas." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Verifique as configurações de gerenciamento de energia de seu computador para garantir que ele não esteja configurado para entrar em modo de espera quando estiver inativo." + }, + "HOST_SETUP_STARTING": { + "message": "Permitindo conexões remotas a este computador..." + }, + "HOST_SETUP_STOPPED": { + "message": "As conexões remotas deste computador foram desativadas." + }, + "HOST_SETUP_STOPPING": { + "message": "Desativando conexões remotas para este computador..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Falha ao desativar o acesso remoto a este computador. Tente novamente mais tarde." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Ao fazer o download do instalador do host da Ãrea de trabalho remota do Google Chrome, você concorda com os $1$Termos de Serviço$4 do Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "O PIN foi atualizado." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Falha ao atualizar o PIN. Tente novamente mais tarde." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "O PIN para este computador está sendo atualizado..." + }, + "HOST_STARTED": { + "message": "Host iniciado para o usuário %1." + }, + "HOST_STOPPED": { + "message": "O host parou." + }, + "IDLE_CONTINUE": { + "message": "Continuar" + }, + "IDLE_DISCONNECT": { + "message": "Desconectar agora" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Sua sessão do $1$ está inativa há um tempo e será desconectada em breve.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "A este computador" + }, + "INSTALLER_DOWNLOAD": { + "message": "Fazer o download do instalador do host da Ãrea de trabalho remota do Google Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Para começar a compartilhar seu computador, forneça o código de acesso abaixo à pessoa que ajudará você." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Assim que o código for inserido, sua sessão de compartilhamento será iniciada." + }, + "INVALID_PIN": { + "message": "Digite um PIN de seis ou mais dígitos." + }, + "IT2ME_FIRST_RUN": { + "message": "Compartilhamento de tela de usuário a usuário, perfeito para suporte técnico remoto." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Layouts de teclado" + }, + "LABEL_CONNECTED": { + "message": "Conectado:" + }, + "LAST_ONLINE": { + "message": "$1$ (última vez on-line em $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Saiba como." + }, + "LEARN_MORE": { + "message": "Saiba mais." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferências do host da Ãrea de trabalho remota do Google Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Host da Ãrea de trabalho\nremota do Google Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Desinstalador do host da Ãrea de trabalho remota do Google Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Usar Ctrl da direita para enviar tecla Win (⌘ no Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximizar janela" + }, + "ME2ME_FIRST_RUN": { + "message": "Acesse seu computador de qualquer lugar." + }, + "MESSAGE_GENERATING": { + "message": "Gerando código de acesso..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Sua sessão na Ãrea de trabalho remota do Google Chrome foi encerrada." + }, + "MESSAGE_SHARED": { + "message": "Seu computador está sendo compartilhado com $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimizar janela" + }, + "MODE_AUTHORIZE": { + "message": "Autorizar" + }, + "MODE_IT2ME": { + "message": "Assistência remota" + }, + "MODE_ME2ME": { + "message": "Meus computadores" + }, + "NEW_WINDOW": { + "message": "Nova janela..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Todos os clientes pareados foram excluídos." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "A integração da área de trabalho não é compatível com esta plataforma. Você ainda pode usar o aplicativo, mas sua experiência de usuário será reduzida." + }, + "OFFLINE": { + "message": "$1$ (off-line)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Falha ao iniciar host." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Configuração de host inválida." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Domínio de proprietário de host inválido." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID de host inválido." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "O host está configurado com credenciais de OAuth inválidas." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "O host que está sendo executado na tela de lógica do console foi encerrado para suportar o modo de cortina, alternando para um host executado em uma sessão específica do usuário." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "O host está reiniciando para levar em conta a alteração de uma política." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Não foi possível para o host ler a política." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "O host foi encerrado." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Erro de host não reconhecido: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Proprietário de host inválido." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Opções" + }, + "OUTGOING_CONNECTIONS": { + "message": "Deste computador" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Os clientes a seguir foram pareados com este computador e podem se conectar sem o fornecimento de um PIN. Você pode revogar esta permissão a qualquer momento, individualmente ou para todos os clientes." + }, + "PAIRED_CLIENT_DATE": { + "message": "Data do pareamento" + }, + "PAIRED_CLIENT_NAME": { + "message": "Cliente" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Digite o mesmo PIN nas duas caixas." + }, + "PIN_MESSAGE": { + "message": "Digite seu PIN para $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Digite seu PIN do computador remoto." + }, + "PRODUCT_DESCRIPTION": { + "message": "Acesse outros computadores ou permita que outro usuário acesse seu computador de forma segura pela Internet." + }, + "PRODUCT_NAME": { + "message": "Ãrea de trabalho remota do Google Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Reconectar" + }, + "REMEMBER_PIN": { + "message": "Não pedir um PIN novamente ao se conectar a este host neste dispositivo." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteca principal" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Processo de integração da área de trabalho" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplicativo para emitir comandos ao host da Ãrea de trabalho remota do Google Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Processo do host" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Host de mensagens nativas para gerenciamento de host remoto" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Host de mensagens nativas para assistência remota" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Processo remoto de Chave de segurança" + }, + "RESIZE_TO_CLIENT": { + "message": "Redimensionar área de trabalho para ajustar" + }, + "RESTART_BUTTON": { + "message": "Reiniciar agora" + }, + "RESTORE_WINDOW": { + "message": "Restaurar janela" + }, + "RETRY": { + "message": "Tentar novamente" + }, + "SCREEN_OPTIONS": { + "message": "Opções de tela" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Enviar Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Informar um problema..." + }, + "SEND_KEYS": { + "message": "Enviar chaves" + }, + "SEND_PRINT_SCREEN": { + "message": "Enviar PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Este serviço permite conexões de entrada a partir de clientes da Ãrea de trabalho remota do Google Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Esta configuração é gerenciada pela política do seu domínio." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Compartilhar" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancelar" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Gostaria de compartilhar este computador para que outro usuário o veja e controle?" + }, + "SHOW_STATS": { + "message": "Mostrar estatísticas" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Mostrar estatísticas (conexão: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Reduzir para ajustar" + }, + "SIGN_IN_BUTTON": { + "message": "Fazer login" + }, + "SIGN_OUT_BUTTON": { + "message": "Sair" + }, + "STOP_SHARING_BUTTON": { + "message": "Parar compartilhamento" + }, + "SURVEY_INVITATION": { + "message": "Quer ajudar a melhorar a Ãrea de trabalho remota do Google Chrome? $1$Responda à pesquisa.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Tempo" + }, + "TOGGLE_STATS": { + "message": "Mostrar estatísticas" + }, + "TOOLTIP_CONNECT": { + "message": "Conectar a $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Desativar conexões remotas a este computador" + }, + "TOOLTIP_REFRESH": { + "message": "Atualiza a lista de hosts" + }, + "TOOLTIP_RENAME": { + "message": "Editar nome do computador" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (desatualizado)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Conta" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Confirme sua conta e seu PIN abaixo para permitir acesso pela Ãrea de trabalho remota do Google Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "OBSERVAÇÃO: as configurações da política permitem conexão apenas entre computadores em sua rede." + }, + "WARNING_NOT_WINDOWED": { + "message": "OBSERVAÇÃO: para garantir que todos os atalhos do teclado estejam disponíveis, você pode configurar a Ãrea de trabalho remota do Google Chrome para \"Abrir como janela\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "Por que isto é seguro?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Processando…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_PT/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_PT/messages.json new file mode 100644 index 000000000000..e91e3b87db43 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/pt_PT/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Aceitar e instalar" + }, + "ACCESS_CODE": { + "message": "Código de acesso" + }, + "ACCESS_CODE_TIMER": { + "message": "Este código de acesso irá expirar em $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Comentários" + }, + "ALL_CONNECTIONS": { + "message": "Todas as ligações" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Voltar a introduzir o PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Cancelar" + }, + "CLEAR_HISTORY": { + "message": "Limpar histórico" + }, + "CLOSE": { + "message": "Fechar" + }, + "CLOSE_PROMPT": { + "message": "Se sair desta página, terminará a sessão do Ambiente de Trabalho Remoto do Chrome." + }, + "CLOSE_WINDOW": { + "message": "Fechar janela" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Tem a certeza de que pretende desativar as ligações remotas a $1$? Se mudar de ideias, será necessário aceder a esse computador e voltar a ativar as ligações.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Falha na ligação" + }, + "CONNECTION_FROM_HEADER": { + "message": "De" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Histórico de Ligações" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Razoável" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Boa" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Má" + }, + "CONNECTION_TO_HEADER": { + "message": "Para" + }, + "CONNECT_ANYWAY": { + "message": "Estabelecer ligação mesmo assim" + }, + "CONNECT_BUTTON": { + "message": "Ligar" + }, + "CONTINUE_BUTTON": { + "message": "Continuar" + }, + "CONTINUE_PROMPT": { + "message": "Está atualmente a partilhar este computador com outro utilizador. Pretende continuar a partilhar?" + }, + "CONTROLLER_NAME": { + "message": "Controlador do Anfitrião do Ambiente de Trabalho Remoto do Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Todos os Direitos Reservados." + }, + "CREDITS": { + "message": "Créditos" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Eliminar todos" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Eliminar" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Para continuar, precisa primeiro de conceder autorizações de acesso alargadas ao computador. Apenas tem de efetuar esta operação uma vez." + }, + "DESCRIPTION_CONNECT": { + "message": "Solicite ao utilizador a cujo computador pretende aceder para clicar em \"$1$\" e dar-lhe o código de acesso.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "O Ambiente de Trabalho Remoto do Chrome permite partilhar o computador de forma segura através da Web. Ambos os utilizadores devem ter em execução a aplicação Ambiente de Trabalho Remoto do Chrome, que pode ser encontrada em $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "O anfitrião remoto requer que efetue a autenticação num Website de terceiros. Para continuar, necessita de conceder permissões adicionais ao Ambiente de Trabalho Remoto do Chrome para aceder a este endereço:" + }, + "DISABLE_HOST": { + "message": "Desactivar" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Desligar" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Serviço Ambiente de Trabalho Remoto do Chrome" + }, + "DURATION_HEADER": { + "message": "Duração" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Não tem autorização para executar esta aplicação." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Falha na autenticação. Inicie sessão novamente no Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Faltam alguns componentes necessários. Certifique-se de que tem a versão mais recente do software instalada e tente novamente." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ocorreu um erro de rede. Quando o dispositivo estiver online novamente, reiniciamos a aplicação." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "O computador remoto não conseguiu inicializar a sessão. Se o problema persistir, experimente configurar o anfitrião novamente." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "O computador remoto não está a responder aos pedidos de ligação. Verifique se está online e tente novamente." + }, + "ERROR_HOST_OVERLOAD": { + "message": "As ligações ao computador remoto estão temporariamente bloqueadas, porque alguém tentou estabelecer ligação com um PIN inválido. Volte a tentar mais tarde." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Falha ao registar o computador." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Foi detetada uma versão de protocolo incompatível. Certifique-se de que tem a versão mais recente do software instalada em ambos os computadores e tente novamente." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "O código de acesso é inválido. Tente novamente." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "As definições da política não permitem a partilha deste computador como um anfitrião do Ambiente de Trabalho Remoto do Chrome. Contacte o administrador do sistema para obter assistência." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "A sessão remota expirou." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Faltam alguns componentes necessários. Certifique-se de que está a executar a versão mais recente do Chrome e tente novamente." + }, + "ERROR_NACL_DISABLED": { + "message": "Faltam alguns componentes necessários. Aceda a chrome://plugins e certifique-se de que o Native Client está ativado." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Um componente necessário deixou de funcionar. Comunique este problema aos programadores." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Não foi possível estabelecer ligação à rede. Verifique se o dispositivo está online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Não tem sessão iniciada no Chrome. Inicie sessão e tente novamente." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Não tem autorização para executar essa ação." + }, + "ERROR_NOT_FOUND": { + "message": "O objeto solicitado não existe." + }, + "ERROR_P2P_FAILURE": { + "message": "Não é possível contactar o anfitrião. Provavelmente, isso deve-se à configuração da rede que está a utilizar." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "O serviço está temporariamente indisponível. Tente novamente mais tarde." + }, + "ERROR_UNEXPECTED": { + "message": "Ocorreu um erro inesperado. Comunique este problema aos programadores." + }, + "EXIT_FULL_SCREEN": { + "message": "Sair do modo de ecrã inteiro" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Não foi possível repor a aplicação. Ainda pode enviar um relatório de erros." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Reponha a aplicação. O trabalho não guardado é perdido." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Não consigo abrir a aplicação." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "A aplicação está demasiado lenta." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Não consigo abrir os meus ficheiros do Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Não consigo ver os ficheiros guardados online no Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Estou a ter problemas com o teclado ou o rato." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Para nos ajudar a resolver o problema, diga-nos o que correu mal:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Outro." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Selecionar..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Para que o(a) possamos contactar para mais informações, o seu endereço de email é incluído em quaisquer comentários que enviar." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Comunicar um problema" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Inclua registos da aplicação para nos ajudar a resolver o problema (os registos podem incluir informações privadas)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Os registos da aplicação podem incluir informações privadas, incluindo a sua identidade (endereço de email) e os nomes e as propriedades dos ficheiros e das pastas no Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Estas informações apenas são utilizadas para diagnosticar o problema que está a comunicar, apenas estão disponíveis para quem está a investigar o relatório e não são mantidas por mais de 30 dias." + }, + "FOOTER_CONNECTING": { + "message": "A ligar..." + }, + "FOOTER_WAITING": { + "message": "a aguardar ligação..." + }, + "FOR_PLATFORM_MAC": { + "message": "Para Mac (OS X 10.6 e superior)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Para Windows (XP e superior)" + }, + "FULL_SCREEN": { + "message": "Ecrã inteiro" + }, + "GET_STARTED": { + "message": "Começar" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Aceitar" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Recusar" + }, + "HELP": { + "message": "Ajuda" + }, + "HOME_ACCESS_BUTTON": { + "message": "Acesso" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Ver e controlar um computador partilhado." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Pode aceder com segurança ao computador utilizando o Ambiente de Trabalho Remoto do Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Alterar PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Atualmente, este computador é partilhado através de outra conta." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Ver/editar" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Este computador está configurado para permitir que um ou mais clientes se liguem sem introduzir um PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Ativar ligações remotas" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Se pretende utilizar o Ambiente de Trabalho Remoto do Chrome para aceder ao computador, é necessário ativar as ligações remotas." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Desativar ligações remotas" + }, + "HOME_SHARE_BUTTON": { + "message": "Partilhar" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Partilhar este computador para que outro utilizador o possa ver e controlar." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(esta funcionalidade ainda não está disponível para o seu computador)" + }, + "HOST_CATEGORY": { + "message": "Anfitrião" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Acesso negado ao cliente: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Cliente ligado: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Cliente desligado: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP do canal para o cliente: %1 ip=\"%2\" ip_anfitrião=\"%3\" canal=\"%4\" ligação=\"%5\"." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Para ativar as ligações remotas a outro computador, instale o Ambiente de Trabalho Remoto do Chrome aí e clique em \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Não existem computadores registados. Para ativar as ligações remotas a um computador, instale o Ambiente de Trabalho Remoto do Chrome aí e clique em “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Iniciou sessão anteriormente como $1$ ($2$). Para aceder aos computadores nessa conta, $3$inicie sessão no Google Chrome$4$ com essa conta e reinstale o Ambiente de Trabalho Remoto do Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "As atualizações de software normalmente ocorrem automaticamente, embora possam falhar nalguns casos raros. A atualização de software não deve demorar mais do que alguns minutos e pode ser feita através do acesso remoto ao seu computador." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "O Ambiente de Trabalho Remoto em $1$ está desatualizado e necessita de atualização.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Ajude-nos a melhorar o Ambiente de Trabalho Remoto do Chrome, permitindo-nos recolher estatísticas de utilização e relatórios de falhas." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Para proteger o acesso a este computador, escolha um PIN de $1$pelo menos seis dígitos$2$. Este PIN será necessário quando ligar a partir de outra localização.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Falha ao iniciar o serviço de acesso remoto." + }, + "HOST_SETUP_INSTALL": { + "message": "O Chrome está a transferir o ficheiro de instalação do Anfitrião do Ambiente de Trabalho Remoto do Chrome. Concluída a transferência, execute o ficheiro de instalação antes de continuar." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Execute o ficheiro de instalação antes de continuar." + }, + "HOST_SETUP_STARTED": { + "message": "Foram ativadas as ligações remotas neste computador." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Verifique as definições de gestão de energia do computador e certifique-se de que não está configurado para suspender quando inativo." + }, + "HOST_SETUP_STARTING": { + "message": "A ativar as ligações remotas neste computador…" + }, + "HOST_SETUP_STOPPED": { + "message": "Foram desativadas as ligações remotas neste computador." + }, + "HOST_SETUP_STOPPING": { + "message": "A desativar as ligações remotas neste computador…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Falha ao desativar o acesso remoto a este computador. Tente novamente mais tarde." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Ao transferir o instalador do anfitrião do Ambiente de Trabalho Remoto do Chrome, aceita os $1$Termos de Utilização$4 do Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "O seu PIN foi atualizado." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Falha ao atualizar o PIN. Tente novamente mais tarde." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "O PIN para este computador está a ser atualizado..." + }, + "HOST_STARTED": { + "message": "O anfitrião começou para o utilizador: %1." + }, + "HOST_STOPPED": { + "message": "O anfitrião parou." + }, + "IDLE_CONTINUE": { + "message": "Continuar" + }, + "IDLE_DISCONNECT": { + "message": "Desligar agora" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "A sua sessão de $1$ está inativa há algum tempo e será desligada dentro de momentos.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "A este computador" + }, + "INSTALLER_DOWNLOAD": { + "message": "Transferir o instalador do anfitrião do Ambiente de Trabalho Remoto do Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Para começar a partilhar o seu ambiente de trabalho, forneça o código de acesso abaixo à pessoa que o irá ajudar." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "A sessão de partilha começa assim que introduzirem o código." + }, + "INVALID_PIN": { + "message": "Introduza um PIN com seis ou mais dígitos." + }, + "IT2ME_FIRST_RUN": { + "message": "Partilha de ecrã entre utilizadores, ideal para suporte técnico remoto." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Esquemas do teclado" + }, + "LABEL_CONNECTED": { + "message": "Ligado:" + }, + "LAST_ONLINE": { + "message": "$1$ (última vez online em $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Saiba como." + }, + "LEARN_MORE": { + "message": "Saiba mais." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Preferências do Anfitrião do Ambiente de Trabalho Remoto do Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Anfitrião do Ambiente de Trabalho\nRemoto do Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Desinstalador do Anfitrião do Ambiente de Trabalho Remoto do Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Utilizar a tecla Ctrl direita para a tecla Win (⌘ no Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximizar janela" + }, + "ME2ME_FIRST_RUN": { + "message": "Aceda ao seu computador a partir de qualquer lugar." + }, + "MESSAGE_GENERATING": { + "message": "A gerar código de acesso..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "A sessão do Ambiente de Trabalho Remoto do Chrome terminou." + }, + "MESSAGE_SHARED": { + "message": "O seu ambiente de trabalho está a ser atualmente partilhado com $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimizar janela" + }, + "MODE_AUTHORIZE": { + "message": "Autorizar" + }, + "MODE_IT2ME": { + "message": "Assistência Remota" + }, + "MODE_ME2ME": { + "message": "Os Meus Computadores" + }, + "NEW_WINDOW": { + "message": "Nova janela…" + }, + "NO_PAIRED_CLIENTS": { + "message": "Todos os clientes sincronizados foram eliminados." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "A integração do ambiente de trabalho não é suportada nesta plataforma. Pode continuar a utilizar a aplicação, mas a experiência de utilizador não é a ideal." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Falha ao inicializar o anfitrião." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Configuração de anfitrião inválida." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Domínio do proprietário do anfitrião inválido." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID de anfitrião inválido." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "O anfitrião está configurado com credenciais OAuth inválidas." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "O anfitrião em execução no ecrã de início de sessão da consola foi encerrado para suportar o modo de cortina ao alternar para um anfitrião em execução numa sessão específica de utilizador." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "O anfitrião está a reiniciar para incorporar uma alteração de política." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "O anfitrião não conseguiu ler a política." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "O anfitrião foi desligado." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Erro de anfitrião não reconhecido: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Proprietário do anfitrião inválido." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Opções" + }, + "OUTGOING_CONNECTIONS": { + "message": "A partir deste computador" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Os seguintes clientes foram sincronizados com este computador e podem ligar-se sem fornecer um PIN. É possível revogar esta autorização em qualquer altura, individualmente ou para todos os clientes." + }, + "PAIRED_CLIENT_DATE": { + "message": "Data da sincronização" + }, + "PAIRED_CLIENT_NAME": { + "message": "Cliente" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Introduza o mesmo PIN em ambas as caixas." + }, + "PIN_MESSAGE": { + "message": "Introduza o PIN para $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Introduza o PIN para o computador remoto." + }, + "PRODUCT_DESCRIPTION": { + "message": "Aceder a outros computadores ou permitir que outro utilizador aceda ao seu computador de forma segura através da Internet." + }, + "PRODUCT_NAME": { + "message": "Ambiente de Trabalho Remoto do Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Restabelecer ligação" + }, + "REMEMBER_PIN": { + "message": "Não voltar a pedir um PIN ao ligar a este anfitrião a partir deste dispositivo." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteca Principal" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Processo de Integração do Ambiente de Trabalho" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplicação para emitir comandos para o anfitrião do Ambiente de Trabalho Remoto do Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Processo do Anfitrião" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Anfitrião de mensagens nativo para gestão de anfitrião remota" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Anfitrião de mensagens nativo para assistência remota" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Processo de comunicação remota da chave de segurança" + }, + "RESIZE_TO_CLIENT": { + "message": "Redimensionar o ambiente de trabalho para ajustar ao tamanho" + }, + "RESTART_BUTTON": { + "message": "Reiniciar agora" + }, + "RESTORE_WINDOW": { + "message": "Restaurar janela" + }, + "RETRY": { + "message": "Repetir" + }, + "SCREEN_OPTIONS": { + "message": "Opções de ecrã" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Enviar Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Comunicar um problema..." + }, + "SEND_KEYS": { + "message": "Enviar teclas" + }, + "SEND_PRINT_SCREEN": { + "message": "Enviar PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Este serviço permite receber ligações de clientes do Ambiente de Trabalho Remoto do Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Esta definição é gerida pela política do seu domínio." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Partilhar" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Cancelar" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Pretende partilhar este computador e permitir que outro utilizador o veja e controle?" + }, + "SHOW_STATS": { + "message": "Mostrar estatísticas" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Mostrar estatísticas (ligação: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Ajustar texto" + }, + "SIGN_IN_BUTTON": { + "message": "Iniciar sessão" + }, + "SIGN_OUT_BUTTON": { + "message": "Terminar sessão" + }, + "STOP_SHARING_BUTTON": { + "message": "Terminar Partilha" + }, + "SURVEY_INVITATION": { + "message": "Pretende ajudar a melhorar o Ambiente de Trabalho Remoto do Chrome? $1$Responda ao inquérito.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Tempo" + }, + "TOGGLE_STATS": { + "message": "Mostrar estatísticas" + }, + "TOOLTIP_CONNECT": { + "message": "Ligar a $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Desativar as ligações remotas a este computador" + }, + "TOOLTIP_REFRESH": { + "message": "Atualizar a lista de anfitriões" + }, + "TOOLTIP_RENAME": { + "message": "Editar nome do computador" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (desatualizado)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Conta" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Confirme a sua conta e PIN abaixo para permitir o acesso do Ambiente de Trabalho Remoto do Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTA: as definições da política permitem ligações apenas entre computadores da sua rede." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTA: Para garantir que todos os atalhos de teclado estão disponíveis, pode configurar o Ambiente de Trabalho Remoto do Chrome para \"Abrir como janela\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "Porque é que isto é seguro?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Em execução..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ro/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ro/messages.json new file mode 100644 index 000000000000..b33b6603e994 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ro/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Acceptă È™i instalează" + }, + "ACCESS_CODE": { + "message": "Cod de acces" + }, + "ACCESS_CODE_TIMER": { + "message": "Acest cod de acces va expira în $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Toate conexiunile" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "ReintroduceÈ›i codul PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "Cod PIN" + }, + "CANCEL": { + "message": "Anulează" + }, + "CLEAR_HISTORY": { + "message": "GoliÈ›i istoricul" + }, + "CLOSE": { + "message": "ÃŽnchide" + }, + "CLOSE_PROMPT": { + "message": "Părăsind această pagină, veÈ›i încheia sesiunea Desktop la distanță Chrome." + }, + "CLOSE_WINDOW": { + "message": "ÃŽnchide fereastra" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Sigur doriÈ›i să dezactivaÈ›i conexiunile la distanță la $1$? Dacă vă răzgândiÈ›i, va trebui să accesaÈ›i computerul respectiv pentru a reactiva conexiunile.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Nu s-a conectat" + }, + "CONNECTION_FROM_HEADER": { + "message": "De la" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Istoricul conexiunilor" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Acceptabilă" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Bună" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Slabă" + }, + "CONNECTION_TO_HEADER": { + "message": "La" + }, + "CONNECT_ANYWAY": { + "message": "ConectaÈ›i oricum" + }, + "CONNECT_BUTTON": { + "message": "Conectează-te" + }, + "CONTINUE_BUTTON": { + "message": "Continuă" + }, + "CONTINUE_PROMPT": { + "message": "ÃŽn prezent, permiteÈ›i accesul unui alt utilizator la acest computer. DoriÈ›i să permiteÈ›i în continuare accesul?" + }, + "CONTROLLER_NAME": { + "message": "Controler gazdă pentru Desktop la distanță Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Toate drepturile rezervate." + }, + "CREDITS": { + "message": "MulÈ›umiri" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "ȘtergeÈ›i tot" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Șterge" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Pentru a continua, trebuie să acorzi permisiuni extinse de acces la computer. Acest lucru este necesar o singură dată." + }, + "DESCRIPTION_CONNECT": { + "message": "Roagă utilizatorul al cărui computer doreÈ™ti să îl accesezi să dea clic pe „$1$†și să îți trimită codul de acces.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Cu aplicaÈ›ia Desktop la distanță Chrome, puteÈ›i permite accesul în siguranță la computerul dvs. pe web. Ambii utilizatori trebuie să ruleze aplicaÈ›ia Desktop la distanță Chrome, care poate fi găsită la $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Gazda la distanță solicită să vă autentificaÈ›i pe un site terță parte. Pentru a continua, trebuie să acordaÈ›i permisiuni suplimentare aplicaÈ›iei Desktop la distanță Chrome pentru a accesa această adresă:" + }, + "DISABLE_HOST": { + "message": "Dezactivează" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Deconectează-te" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Serviciul Desktop la distanță Chrome" + }, + "DURATION_HEADER": { + "message": "Durată" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Nu ai permisiunea să rulezi această aplicaÈ›ie." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autentificarea nu a reuÈ™it. Conectează-te din nou la Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Unele componente necesare lipsesc. Asigură-te că ai instalată cea mai recentă versiune a software-ului È™i încearcă din nou." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "A apărut o eroare de reÈ›ea. Vom reporni aplicaÈ›ia când dispozitivul va fi online din nou." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Computerul la distanță nu a putut să iniÈ›ializeze sesiunea. Dacă problema persistă, încearcă să configurezi gazda din nou." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Computerul la distanță nu răspunde la solicitările de conectare. VerificaÈ›i dacă respectivul computer este online È™i încercaÈ›i din nou." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Conexiunile la computerul la distanță sunt blocate temporar, întrucât cineva a încercat să se conecteze la acesta utilizând un cod PIN greÈ™it. ÃŽncercaÈ›i din nou mai târziu." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "ÃŽnregistrarea acestui computer nu a reuÈ™it." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "A fost detectată o versiune de protocol incompatibilă. Asigură-te că ai cea mai recentă versiune de software pe ambele computere È™i încearcă din nou." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Codul de acces este greÈ™it. ÃŽncercaÈ›i din nou." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Setările politicii nu acceptă permiterea accesului la acest computer în calitate de gazdă pentru Desktop la distanță Chrome. ContactaÈ›i administratorul de sistem pentru asistență." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Sesiunea la distanță a expirat." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Unele componente necesare lipsesc. Asigură-te că rulezi cea mai recentă versiune Chrome È™i încearcă din nou." + }, + "ERROR_NACL_DISABLED": { + "message": "Unele componente necesare lipsesc. Accesează chrome://plugins È™i asigură-te că ai activat Clientul nativ." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "O componentă obligatorie nu mai funcÈ›ionează. Raportează această problemă dezvoltatorilor." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nu s-a putut efectua conectarea la reÈ›ea. VerificaÈ›i dacă dispozitivul este online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Nu te-ai conectat la Chrome. Conectează-te È™i încearcă din nou." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Nu ai permisiunea de a efectua acÈ›iunea respectivă." + }, + "ERROR_NOT_FOUND": { + "message": "Obiectul solicitat nu există." + }, + "ERROR_P2P_FAILURE": { + "message": "Gazda nu poate fi accesată. Acest lucru este cauzat, probabil, de configuraÈ›ia reÈ›elei pe care o utilizaÈ›i." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Serviciul este temporar indisponibil. ÃŽncercaÈ›i din nou mai târziu." + }, + "ERROR_UNEXPECTED": { + "message": "A apărut o eroare neaÈ™teptată. RaportaÈ›i această problemă dezvoltatorilor." + }, + "EXIT_FULL_SCREEN": { + "message": "IeÈ™i din ecranul complet" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "AplicaÈ›ia nu a putut fi resetată. PoÈ›i totuÈ™i să trimiÈ›i un raport de eroare." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Resetează aplicaÈ›ia. Orice conÈ›inut nesalvat se va pierde." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Nu pot deschide aplicaÈ›ia." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "AplicaÈ›ia este prea lentă." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Nu pot deschide fiÈ™ierele din Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Nu pot vedea fiÈ™ierele salvate online în Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "ÃŽntâmpin probleme cu tastatura sau cu mouse-ul." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Pentru a remedia problema, spune-ne ce nu este în regulă:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Altă problemă." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Selectează..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Pentru a putea să te contactăm pentru mai multe informaÈ›ii, adresa ta de e-mail va fi inclusă în orice feedback pe care îl trimiÈ›i." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "SemnalaÈ›i o problemă" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Include jurnalele aplicaÈ›iei pentru a ne ajuta să îți rezolvăm problema (jurnalele pot să includă informaÈ›ii private)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Jurnalele aplicaÈ›iilor pot să includă informaÈ›ii private, inclusiv identitatea ta (adresa de e-mail) È™i numele È™i proprietățile fiÈ™ierelor È™i dosarelor din Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Această informaÈ›ie este folosită numai pentru diagnosticarea problemei pe care o raportezi, este disponibilă numai pentru persoana care îți examinează raportul È™i nu este păstrată pentru mai mult de 30 de zile." + }, + "FOOTER_CONNECTING": { + "message": "Se conectează…" + }, + "FOOTER_WAITING": { + "message": "se aÈ™teaptă realizarea conexiunii..." + }, + "FOR_PLATFORM_MAC": { + "message": "Pentru Mac (OS X 10.6 È™i versiuni ulterioare)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Pentru Windows (XP È™i versiuni ulterioare)" + }, + "FULL_SCREEN": { + "message": "Ecran complet" + }, + "GET_STARTED": { + "message": "ÃŽncepeÈ›i" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Accept" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Refuză" + }, + "HELP": { + "message": "Ajutor" + }, + "HOME_ACCESS_BUTTON": { + "message": "AccesaÈ›i" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "VedeÈ›i È™i controlaÈ›i un computer la care se permite accesul." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "PuteÈ›i accesa acest computer în siguranță utilizând Desktop la distanță Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Schimbă codul PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Momentan, accesul la computer este permis de pe un alt cont." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "AfiÈ™aÈ›i/EditaÈ›i" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Acest computer este configurat să permită conectarea unuia sau a mai multor clienÈ›i fără introducerea unui PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "ActivaÈ›i conexiunile la distanță" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Trebuie să activaÈ›i conexiunile la distanță dacă doriÈ›i să utilizaÈ›i Desktop la distanță Chrome pentru a accesa acest computer." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "DezactivaÈ›i conexiunile la distanță" + }, + "HOME_SHARE_BUTTON": { + "message": "Trimite" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "PermiteÈ›i accesul la acest computer altui utilizator, pentru ca acesta să îl poată vedea È™i controla." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(această funcÈ›ie nu este încă disponibilă pe computerul tău)" + }, + "HOST_CATEGORY": { + "message": "Gazdă" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Acces interzis pentru clientul: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Client conectat: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Client deconectat: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP canal pentru client: %1 ip=„%2†host_ip=„%3†channel=„%4†connection=„%5â€." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Pentru a activa conexiunile la distanță pentru un alt computer, instalaÈ›i Desktop la distanță Chrome pe acesta È™i daÈ›i clic pe „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Nu aveÈ›i niciun computer înregistrat. Pentru a activa conexiunile la distanță pentru un alt computer, instalaÈ›i Desktop la distanță Chrome pe acesta È™i daÈ›i clic pe „$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Anterior te-ai conectat ca $1$ ($2$). Pentru a accesa computerele în contul respectiv, $3$conectează-te la Google Chrome$4$ folosind contul respectiv È™i reinstalează Desktop la distanță Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Actualizările de software au loc de obicei în mod automat, dar în anumite cazuri pot să nu reuÈ™ească. Actualizarea software-ului nu trebuie să dureze mai mult de câteva minute È™i poate fi realizată cât timp sunteÈ›i conectat(ă) la computer de la distanță." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Desktop la distanță Chrome de pe $1$ este învechit È™i trebuie actualizat.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "AjutaÈ›i-ne să îmbunătățim Desktop la distanță Chrome, permițându-ne să colectăm statistici de utilizare È™i rapoarte de blocare." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Pentru a proteja accesul la acest computer, alegeÈ›i un cod PIN format din $1$cel puÈ›in È™ase cifre$2$. Acest cod PIN va fi necesar când vă conectaÈ›i din altă locaÈ›ie.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Pornirea serviciului de acces la distanță nu a reuÈ™it." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome descarcă programul de instalare a gazdei pentru Desktop la distanță Chrome. După ce se descarcă, rulaÈ›i programul de instalare înainte de a continua." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "RulaÈ›i programul de instalare înainte de a continua." + }, + "HOST_SETUP_STARTED": { + "message": "Conexiunile la distanță pentru acest computer au fost activate." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "VerificaÈ›i setările de gestionare a energiei pentru computerul dvs. È™i asiguraÈ›i-vă că nu este configurat să treacă în modul inactiv când este în repaus." + }, + "HOST_SETUP_STARTING": { + "message": "Se activează conexiunile la distanță pentru acest computer…" + }, + "HOST_SETUP_STOPPED": { + "message": "Conexiunile la distanță pentru acest computer au fost dezactivate." + }, + "HOST_SETUP_STOPPING": { + "message": "Se dezactivează conexiunile la distanță pentru acest computer…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Dezactivarea accesului la distanță la acest computer nu a reuÈ™it. ÃŽncercaÈ›i din nou mai târziu." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Descărcând programul de instalare gazdă pentru Desktop la distanță Chrome, accepÈ›i $1$Termenii È™i condiÈ›iile$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Codul PIN a fost actualizat." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Codul PIN nu a putut fi actualizat. ÃŽncercaÈ›i din nou mai târziu." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Se actualizează codul PIN pentru acest computer…" + }, + "HOST_STARTED": { + "message": "Gazda a fost iniÈ›iată pentru utilizatorul: %1." + }, + "HOST_STOPPED": { + "message": "Gazda s-a oprit." + }, + "IDLE_CONTINUE": { + "message": "Continuă" + }, + "IDLE_DISCONNECT": { + "message": "Deconectează acum" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Sesiunea $1$ este inactivă de ceva timp È™i în curând va fi deconectată.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "La acest computer" + }, + "INSTALLER_DOWNLOAD": { + "message": "Descarcă programul de instalare gazdă pentru Desktop la distanță Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Pentru a începe să permiteÈ›i accesul la desktopul dvs., trimiteÈ›i codul de acces de mai jos persoanei care vă va oferi asistență." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "După ce persoana respectivă introduce codul, sesiunea de permitere a accesului va începe." + }, + "INVALID_PIN": { + "message": "IntroduceÈ›i un cod PIN format din cel puÈ›in È™ase cifre." + }, + "IT2ME_FIRST_RUN": { + "message": "Permiterea accesului la ecran de tip utilizator-la-utilizator, perfectă pentru asistenÈ›a tehnică la distanță." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Aspecte de tastatură" + }, + "LABEL_CONNECTED": { + "message": "Conectat:" + }, + "LAST_ONLINE": { + "message": "$1$ (online ultima dată la $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "AflaÈ›i cum." + }, + "LEARN_MORE": { + "message": "AflaÈ›i mai multe." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "PreferinÈ›e privind gazda pentru Desktop la distanță Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Gazdă pentru Desktop\nla distanță Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Program de dezinstalare a gazdei pentru Desktop la distanță Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "FoloseÈ™te tasta Ctrl din dreapta pentru tasta Windows (⌘ pe Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "MaximizaÈ›i fereastra" + }, + "ME2ME_FIRST_RUN": { + "message": "AccesaÈ›i-vă computerul de oriunde." + }, + "MESSAGE_GENERATING": { + "message": "Se generează codul de acces..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Sesiunea Desktop la distanță Chrome s-a încheiat." + }, + "MESSAGE_SHARED": { + "message": "ÃŽn prezent, accesul la desktopul dvs. este permis pentru $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "MinimizaÈ›i fereastra" + }, + "MODE_AUTHORIZE": { + "message": "AutorizaÈ›i" + }, + "MODE_IT2ME": { + "message": "Asistență la distanță" + }, + "MODE_ME2ME": { + "message": "Computerele mele" + }, + "NEW_WINDOW": { + "message": "Fereastră nouă..." + }, + "NO_PAIRED_CLIENTS": { + "message": "ToÈ›i clienÈ›ii împerecheaÈ›i au fost È™terÈ™i." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Integrarea desktop nu este compatibilă cu această platformă. PoÈ›i să foloseÈ™ti în continuare această aplicaÈ›ie, însă experienÈ›a de utilizare va fi inferioară." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Gazda nu a fost iniÈ›ializată." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "ConfiguraÈ›ie nevalidă a gazdei." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Domeniu nevalid pentru proprietarul gazdei." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ID de gazdă nevalid." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Gazda este configurată cu date de conectare OAuth nevalide." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Executarea gazdei pe ecranul de conectare al consolei a fost oprită pentru a accepta modul perdea, comutând la o gazdă care rulează într-o sesiune specifică utilizatorului." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Gazda este în curs de repornire datorită unei schimbări de politică." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Gazda nu a putut citi politica." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Gazda a fost închisă." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Eroare nerecunoscută a gazdei: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Proprietar nevalid al gazdei." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "OpÈ›iuni" + }, + "OUTGOING_CONNECTIONS": { + "message": "De la acest computer" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Următorii clienÈ›i au fost împerecheaÈ›i cu acest computer È™i se pot conecta fără să indice un PIN. PuteÈ›i revoca oricând această permisiune, pentru fiecare client în parte sau pentru toÈ›i clienÈ›ii." + }, + "PAIRED_CLIENT_DATE": { + "message": "Data împerecherii" + }, + "PAIRED_CLIENT_NAME": { + "message": "Client" + }, + "PIN": { + "message": "Cod PIN" + }, + "PINS_NOT_EQUAL": { + "message": "IntroduceÈ›i acelaÈ™i cod PIN în ambele casete." + }, + "PIN_MESSAGE": { + "message": "IntroduceÈ›i codul PIN pentru $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "IntroduceÈ›i codul PIN pentru computerul la distanță." + }, + "PRODUCT_DESCRIPTION": { + "message": "AccesaÈ›i alte computere sau permiteÈ›i altui utilizator să vă acceseze computerul în siguranță pe internet." + }, + "PRODUCT_NAME": { + "message": "Desktop la distanță Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Reconectează-te" + }, + "REMEMBER_PIN": { + "message": "Nu mai solicita un cod PIN când mă conectez la această gazdă de pe acest dispozitiv." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Biblioteca nucleu" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proces de integrare desktop" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "AplicaÈ›ie pentru emiterea de comenzi către gazda Desktop la distanță Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proces gazdă" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Gazda de mesagerie nativă pentru gestionarea gazdei la distanță" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Gazda de mesagerie nativă pentru asistență la distanță" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proces de control la distanță al cheii de securitate" + }, + "RESIZE_TO_CLIENT": { + "message": "RedimensionaÈ›i desktopul pentru a încăpea" + }, + "RESTART_BUTTON": { + "message": "ReporneÈ™te acum" + }, + "RESTORE_WINDOW": { + "message": "RestabiliÈ›i fereastra" + }, + "RETRY": { + "message": "Reîncearcă" + }, + "SCREEN_OPTIONS": { + "message": "OpÈ›iuni ecran" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Trimite Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Raportează o problemă..." + }, + "SEND_KEYS": { + "message": "TrimiteÈ›i apăsări de taste" + }, + "SEND_PRINT_SCREEN": { + "message": "Trimite PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Acest serviciu permite conexiuni primite de la clienÈ›i Desktop la distanță Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Setarea este gestionată de politica de domeniu." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Trimite" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Anulează" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "DoreÈ™ti să permiÈ›i accesul la acest computer altui utilizator, pentru ca acesta să îl poată vedea È™i controla?" + }, + "SHOW_STATS": { + "message": "AfiÈ™ează statisticile" + }, + "SHOW_STATS_WITH_RTT": { + "message": "AfiÈ™ează statisticile (conexiune: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "PotriviÈ›i prin micÈ™orare" + }, + "SIGN_IN_BUTTON": { + "message": "Conectează-te" + }, + "SIGN_OUT_BUTTON": { + "message": "Deconectează-te" + }, + "STOP_SHARING_BUTTON": { + "message": "OpriÈ›i permiterea accesului" + }, + "SURVEY_INVITATION": { + "message": "DoriÈ›i să ne ajutaÈ›i să îmbunătățim Desktop la distanță Chrome? $1$ParticipaÈ›i la sondaj.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Oră" + }, + "TOGGLE_STATS": { + "message": "AfiÈ™ează statisticile" + }, + "TOOLTIP_CONNECT": { + "message": "ConectaÈ›i-vă la $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "DezactivaÈ›i conexiunile la distanță la acest computer" + }, + "TOOLTIP_REFRESH": { + "message": "ActualizaÈ›i lista gazdelor" + }, + "TOOLTIP_RENAME": { + "message": "ModificaÈ›i numele computerului" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (neactualizată)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Cont" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "ConfirmaÈ›i mai jos contul È™i codul PIN pentru a permite accesarea prin intermediul aplicaÈ›iei Desktop la distanță Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "NOTÄ‚: setările politicii permit conexiuni numai între computerele din reÈ›eaua dvs." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOTÄ‚: pentru a vă asigura că toate comenzile rapide de la tastatură sunt disponibile, puteÈ›i seta Desktop la distanță Chrome în modul „DeschideÈ›i ca fereastrăâ€." + }, + "WHY_IS_THIS_SAFE": { + "message": "De ce este această operaÈ›ie sigură?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Ferestre" + }, + "WORKING": { + "message": "Se procesează..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ru/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ru/messages.json new file mode 100644 index 000000000000..94b87ca34058 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ru/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ПринÑÑ‚ÑŒ уÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ уÑтановить" + }, + "ACCESS_CODE": { + "message": "Код доÑтупа" + }, + "ACCESS_CODE_TIMER": { + "message": "Срок дейÑÑ‚Ð²Ð¸Ñ Ñтого кода доÑтупа иÑтекает через $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Отзыв" + }, + "ALL_CONNECTIONS": { + "message": "Ð’Ñе подключениÑ" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Введите PIN-код ещё раз" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN-код" + }, + "CANCEL": { + "message": "Отмена" + }, + "CLEAR_HISTORY": { + "message": "Удалить иÑторию" + }, + "CLOSE": { + "message": "Закрыть" + }, + "CLOSE_PROMPT": { + "message": "ЕÑли вы покинете Ñту Ñтраницу, ÑÐµÐ°Ð½Ñ Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ рабочего Ñтола Chrome будет завершен." + }, + "CLOSE_WINDOW": { + "message": "Закрыть окно" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Заблокировать Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº $1$? ВоÑÑтановить их можно будет только на ÑоответÑтвующем компьютере.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Ошибка подключениÑ" + }, + "CONNECTION_FROM_HEADER": { + "message": "Клиент" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Ñреднее" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "выÑокое" + }, + "CONNECTION_QUALITY_POOR": { + "message": "низкое" + }, + "CONNECTION_TO_HEADER": { + "message": "ХоÑÑ‚" + }, + "CONNECT_ANYWAY": { + "message": "ПодключитьÑÑ" + }, + "CONNECT_BUTTON": { + "message": "Подключение" + }, + "CONTINUE_BUTTON": { + "message": "Далее" + }, + "CONTINUE_PROMPT": { + "message": "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтуп к Ñтому компьютеру предоÑтавлен другому пользователю. Продолжить ÑеанÑ?" + }, + "CONTROLLER_NAME": { + "message": "Контроллер хоÑта Удаленного рабочего Ñтола Chrome" + }, + "COPYRIGHT": { + "message": "© Google Inc., 2013. Ð’Ñе права защищены." + }, + "CREDITS": { + "message": "Ðвторы" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Удалить вÑе" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Удалить" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Чтобы продолжить, предоÑтавьте Ñвоему компьютеру раÑширенные права доÑтупа. Это нужно Ñделать вÑего один раз." + }, + "DESCRIPTION_CONNECT": { + "message": "Владелец компьютера, к которому вы хотите подключитьÑÑ, должен нажать \"$1$\" и предоÑтавить вам код доÑтупа.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Удаленный рабочий Ñтол Chrome обеÑпечит безопаÑный доÑтуп к компьютеру через Интернет. Приложение должно быть уÑтановлено на обоих компьютерах: вашем и удаленном. Загрузить его можно на Ñтранице $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Ð”Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ доÑтупа к Ñайту требуетÑÑ Ð¿Ñ€Ð¾Ð¹Ñ‚Ð¸ аутентификацию. Дайте Удаленному рабочему Ñтолу Chrome дополнительные Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñледующему адреÑу:" + }, + "DISABLE_HOST": { + "message": "Отключить" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "ОтключитьÑÑ" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Служба Удаленного рабочего Ñтола Chrome" + }, + "DURATION_HEADER": { + "message": "ПродолжительноÑÑ‚ÑŒ" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "У Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° запуÑк Ñтого приложениÑ." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Ошибка аутентификации. Войдите в Chrome ещё раз." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "ОтÑутÑтвуют некоторые необходимые компоненты. УÑтановите поÑледнюю верÑию ПО и повторите попытку." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Ошибка подключениÑ. Приложение Ñнова будет запущено, как только ваше уÑтройÑтво получит доÑтуп к Ñети." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Удаленному компьютеру не удалоÑÑŒ выполнить инициализацию ÑеанÑа. ЕÑли проблема ÑохранитÑÑ, попробуйте перенаÑтроить хоÑÑ‚." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Удаленный компьютер не отвечает на запроÑÑ‹. Проверьте, подключен ли он к Интернету, и повторите попытку." + }, + "ERROR_HOST_OVERLOAD": { + "message": "ÐŸÐ¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº удаленному компьютеру временно заблокированы, поÑкольку кто-то пыталÑÑ ÑоединитьÑÑ Ñ Ð½Ð¸Ð¼, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ PIN-код. Повторите попытку позже." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Ðе удалоÑÑŒ зарегиÑтрировать Ñтот компьютер." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Обнаружена неÑовмеÑÑ‚Ð¸Ð¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð°. УÑтановите на оба компьютера поÑледнюю верÑию ПО и повторите попытку." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Код доÑтупа недейÑтвителен. Повторите попытку." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Этот компьютер запрещено иÑпользовать в качеÑтве хоÑта Удаленного рабочего Ñтола Chrome. ОбратитеÑÑŒ к ÑиÑтемному админиÑтратору." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Ð’Ñ€ÐµÐ¼Ñ ÑеанÑа удаленного доÑтупа иÑтекло." + }, + "ERROR_MISSING_PLUGIN": { + "message": "ОтÑутÑтвуют некоторые необходимые компоненты. УÑтановите поÑледнюю верÑию браузера Chrome и повторите попытку." + }, + "ERROR_NACL_DISABLED": { + "message": "Ðекоторые компоненты отÑутÑтвуют. Перейдите на Ñтраницу chrome://plugins и включите плагин Native Client." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Ðужный компонент браузера переÑтал работать. Сообщите об Ñтой проблеме разработчикам." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Ðе удалоÑÑŒ подключитьÑÑ Ðº Ñети. Проверьте наличие Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½Ð° уÑтройÑтве." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Ошибка. Войдите в Chrome и повторите попытку." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "У Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° выполнение Ñтого дейÑтвиÑ." + }, + "ERROR_NOT_FOUND": { + "message": "Запрошенный объект не ÑущеÑтвует." + }, + "ERROR_P2P_FAILURE": { + "message": "Ðе удалоÑÑŒ ÑвÑзатьÑÑ Ñ Ñ…Ð¾Ñтом. ВероÑÑ‚Ð½Ð°Ñ Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð°Â â€“ иÑпользуемые вами наÑтройки Ñети." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Служба временно недоÑтупна. Повторите попытку позже." + }, + "ERROR_UNEXPECTED": { + "message": "ÐÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Сообщите об Ñтой проблеме разработчикам." + }, + "EXIT_FULL_SCREEN": { + "message": "Обычный режим" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Ðе удалоÑÑŒ ÑброÑить наÑтройки приложениÑ. Ð’Ñ‹ можете отправить Ñообщение об ошибке." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "ПерезапуÑтить приложение. Ð’Ñе неÑохраненные данные будут потерÑны." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ приложение." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Приложение работает Ñлишком медленно." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ файлы на Google ДиÑке." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Ðе удаетÑÑ Ð¿Ð¾Ñмотреть Ñохраненные на ДиÑке файлы онлайн." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Возникли проблемы Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð¾Ð¹ или мышью." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Опишите проблему, чтобы мы Ñмогли вам помочь:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Другое." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Выберите категорию" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты будет указан в каждом отзыве. Это необходимо Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы мы могли ответить на ваш запроÑ." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Сообщить о проблеме" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "ИÑпользовать Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ данные журналов приложений (в них может ÑодержатьÑÑ Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Журналы приложений могут Ñодержать перÑональные данные: например, Ð°Ð´Ñ€ÐµÑ Ñлектронной почты, а также Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑвойÑтва файлов/папок на Google ДиÑке." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Эти ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ð³ÑƒÑ‚ диагноÑтировать возникшую проблему. Они будут доÑтупны только ÑпециалиÑту, работающему над ее решением, на Ñрок не более 30 дней." + }, + "FOOTER_CONNECTING": { + "message": "Подключение…" + }, + "FOOTER_WAITING": { + "message": "ожидание подключениÑ…" + }, + "FOR_PLATFORM_MAC": { + "message": "Ð”Ð»Ñ Mac (OS X 10.6 и выше)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Ð”Ð»Ñ Windows (XP и выше)" + }, + "FULL_SCREEN": { + "message": "ПолноÑкранный режим" + }, + "GET_STARTED": { + "message": "Ðачало работы" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "ПринÑÑ‚ÑŒ" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Отклонить" + }, + "HELP": { + "message": "Справка" + }, + "HOME_ACCESS_BUTTON": { + "message": "ДоÑтуп" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Ð’Ñ‹ Ñможете получить доÑтуп к общему компьютеру." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Ð’Ñ‹ можете безопаÑно подключитьÑÑ Ðº Ñтому компьютеру Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Удаленного рабочего Ñтола Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Изменить PIN-код" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Этим компьютером ÑÐµÐ¹Ñ‡Ð°Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñет другой аккаунт." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ПроÑмотр/изменение" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Ðекоторые клиенты могут подключатьÑÑ Ðº Ñтому компьютеру без PIN-кода." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Разрешить удаленные подключениÑ" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "ЕÑли вам требуетÑÑ Ð´Ð¾Ñтуп к Ñтому компьютеру через Удаленный рабочий Ñтол Chrome, необходимо разрешить удаленные подключениÑ." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Запретить удаленные подключениÑ" + }, + "HOME_SHARE_BUTTON": { + "message": "ПоделитьÑÑ" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Ð’Ñ‹ Ñможете предоÑтавить доÑтуп к Ñтому компьютеру другому пользователю." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾ÐºÐ° недоÑтупна Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ компьютера)" + }, + "HOST_CATEGORY": { + "message": "ХоÑÑ‚" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Запрещен доÑтуп Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Подключен клиент: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Отключен клиент: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP-Ð°Ð´Ñ€ÐµÑ ÐºÐ°Ð½Ð°Ð»Ð° Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Чтобы разрешить удаленные Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½Ð° другом компьютере, уÑтановите на него Удаленный рабочий Ñтол Chrome и нажмите кнопку \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Ð”Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ аккаунта не зарегиÑтрировано ни одного компьютера. Чтобы разрешить удаленные Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½Ð° компьютере, уÑтановите на него Удаленный рабочий Ñтол Chrome и нажмите кнопку \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Ð’Ñ‹ уже вошли как $1$ ($2$). Чтобы получить доÑтуп к компьютерам, $3$войдите в Google Chrome$4$, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ñтого аккаунта, и переуÑтановите Удаленный рабочий Ñтол Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Программное обеÑпечение обычно обновлÑетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки, но иногда возможны Ñбои. Обновление занимает неÑколько минут и может выполнÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð¸ удаленном подключении к компьютеру." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Удаленный рабочий Ñтол Chrome ($1$) необходимо обновить.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Разрешить Google Ñобирать данные ÑтатиÑтики иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ отчеты о ÑбоÑÑ… Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Удаленного рабочего Ñтола Chrome" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Чтобы защитить компьютер от неÑанкционированного доÑтупа, выберите PIN-код, Ñодержащий $1$не менее шеÑти цифр$2$. Его необходимо будет ввеÑти при удаленном подключении.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Ðе удалоÑÑŒ запуÑтить Ñлужбу удаленного доÑтупа." + }, + "HOST_SETUP_INSTALL": { + "message": "Программа уÑтановки хоÑта Ð´Ð»Ñ Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ рабочего Ñтола Chrome ÑкачиваетÑÑ. ЗапуÑтите ее поÑле ÑкачиваниÑ." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Прежде чем продолжить, запуÑтите программу уÑтановки." + }, + "HOST_SETUP_STARTED": { + "message": "Удаленные Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñтого компьютера разрешены." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Отключите в наÑтройках ÑÐ½ÐµÑ€Ð³Ð¾Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° функцию перехода в ÑпÑщий режим при отÑутÑтвии активноÑти." + }, + "HOST_SETUP_STARTING": { + "message": "Разрешение удаленных подключений…" + }, + "HOST_SETUP_STOPPED": { + "message": "Удаленные Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñтого компьютера запрещены." + }, + "HOST_SETUP_STOPPING": { + "message": "Блокировка удаленных подключений…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Ðе удалоÑÑŒ заблокировать удаленный доÑтуп к Ñтому компьютеру. Повторите попытку позже." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Ð¡ÐºÐ°Ñ‡Ð¸Ð²Ð°Ñ ÑƒÑтановщик, вы принимаете $1$УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN-код обновлен." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Ðе удалоÑÑŒ изменить PIN-код. Повторите попытку позже." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Изменение PIN-кода…" + }, + "HOST_STARTED": { + "message": "Запущен хоÑÑ‚ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: %1." + }, + "HOST_STOPPED": { + "message": "ХоÑÑ‚ оÑтановлен." + }, + "IDLE_CONTINUE": { + "message": "Далее" + }, + "IDLE_DISCONNECT": { + "message": "Отключить" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Приложение $1$ бездейÑтвует уже некоторое времÑ. СеÑÑÐ¸Ñ Ñкоро будет завершена.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "К Ñтому компьютеру" + }, + "INSTALLER_DOWNLOAD": { + "message": "УÑтановка хоÑта Ð´Ð»Ñ Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ рабочего Ñтола Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Чтобы предоÑтавить другому пользователю доÑтуп к вашему рабочему Ñтолу, Ñообщите ему указанный ниже код." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Ð¡ÐµÐ°Ð½Ñ Ð½Ð°Ñ‡Ð½ÐµÑ‚ÑÑ Ð¿Ð¾Ñле ввода Ñтого кода." + }, + "INVALID_PIN": { + "message": "PIN-код должен Ñодержать не менее шеÑти цифр." + }, + "IT2ME_FIRST_RUN": { + "message": "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð´Ð¾Ñтупа к Ñкрану идеально подходит Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð¹ техничеÑкой поддержки." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "РаÑкладка клавиатуры" + }, + "LABEL_CONNECTED": { + "message": "Подключено:" + }, + "LAST_ONLINE": { + "message": "$1$ (поÑледнее подключение: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Подробнее..." + }, + "LEARN_MORE": { + "message": "Подробнее…" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "ÐаÑтройки Удаленного рабочего Ñтола Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "ХоÑÑ‚ Удаленного\nрабочего Ñтола Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Приложение Chrome Remote Desktop Host Uninstaller" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "ИÑпользовать правую клавишу CTRL в качеÑтве клавиши Windows (⌘ на Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Развернуть окно" + }, + "ME2ME_FIRST_RUN": { + "message": "Получайте доÑтуп к Ñвоему компьютеру откуда угодно." + }, + "MESSAGE_GENERATING": { + "message": "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð´Ð° доÑтупа…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Ð¡ÐµÐ°Ð½Ñ Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ рабочего Ñтола Chrome завершен." + }, + "MESSAGE_SHARED": { + "message": "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтуп к вашему рабочему Ñтолу предоÑтавлен пользователю $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Свернуть окно" + }, + "MODE_AUTHORIZE": { + "message": "ÐвторизациÑ" + }, + "MODE_IT2ME": { + "message": "Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°" + }, + "MODE_ME2ME": { + "message": "Мои компьютеры" + }, + "NEW_WINDOW": { + "message": "Ðовое окно..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Ð’Ñе ÑвÑзанные клиенты удалены." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ñ‹Ð¼ рабочим Ñтолом на Ñтой платформе не поддерживаетÑÑ. Это может вызвать некоторые трудноÑти при работе Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼." + }, + "OFFLINE": { + "message": "$1$ (не в Ñети)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Сбой инициализации хоÑта" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ…Ð¾Ñта" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Владелец хоÑта иÑпользует недопуÑтимый домен" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ÐедопуÑтимый идентификатор хоÑта" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Ð’ конфигурации хоÑта указаны недопуÑтимые учетные данные OAuth" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "ХоÑÑ‚ конÑоли Ñкрана авторизации не поддерживает режим Curtain mode (переключаетÑÑ Ð½Ð° пользовательÑкий ÑеанÑ)." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ХоÑÑ‚ перезапуÑкаетÑÑ, чтобы применить изменение правил к аккаунту." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ХоÑту не удалоÑÑŒ прочеÑÑ‚ÑŒ правила." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ХоÑÑ‚ отключен." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° хоÑта: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "ÐедопуÑтимый владелец хоÑта" + }, + "OK": { + "message": "ОК" + }, + "OPTIONS_MENU": { + "message": "Параметры" + }, + "OUTGOING_CONNECTIONS": { + "message": "С Ñтого компьютера" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Следующие клиенты ÑвÑзаны Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ компьютером и могут подключатьÑÑ, не ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ PIN-код. Ð’ любое Ð²Ñ€ÐµÐ¼Ñ Ñто разрешение можно отозвать Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ или вÑех клиентов." + }, + "PAIRED_CLIENT_DATE": { + "message": "Дата подключениÑ" + }, + "PAIRED_CLIENT_NAME": { + "message": "Клиент" + }, + "PIN": { + "message": "PIN-код" + }, + "PINS_NOT_EQUAL": { + "message": "Введите в обоих полÑÑ… одинаковый PIN-код." + }, + "PIN_MESSAGE": { + "message": "Введите PIN-код Ð´Ð»Ñ Ñ…Ð¾Ñта $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Введите PIN-код Ð´Ð»Ñ Ð´Ð¾Ñтупа к удаленному компьютеру." + }, + "PRODUCT_DESCRIPTION": { + "message": "ПозволÑет подключатьÑÑ Ðº удаленным компьютерам и предоÑтавлÑÑ‚ÑŒ другим пользователÑм безопаÑный доÑтуп к вашему компьютеру." + }, + "PRODUCT_NAME": { + "message": "Удаленный рабочий Ñтол Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "ПодключитьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾" + }, + "REMEMBER_PIN": { + "message": "Больше не запрашивать PIN-код при подключении к Ñтому хоÑту Ñ Ñтого уÑтройÑтва" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Библиотека Ñдра" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ПроцеÑÑ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ð¸ Удаленного рабочего Ñтола" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Приложение Ð´Ð»Ñ Ð¾Ñ‚Ð´Ð°Ñ‡Ð¸ команд хоÑту Удаленного рабочего Ñтола Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ПроцеÑÑ Ñ…Ð¾Ñта" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "СобÑтвенный хоÑÑ‚ Ñообщений Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ñ‹Ð¼ хоÑтом" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "СобÑтвенный хоÑÑ‚ Ñообщений Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ помощника" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "ПроцеÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ токеном" + }, + "RESIZE_TO_CLIENT": { + "message": "Подогнать размер рабочего Ñтола" + }, + "RESTART_BUTTON": { + "message": "ПерезапуÑтить" + }, + "RESTORE_WINDOW": { + "message": "ВоÑÑтановить окно" + }, + "RETRY": { + "message": "Повторить попытку" + }, + "SCREEN_OPTIONS": { + "message": "Параметры Ñкрана" + }, + "SEND_CTRL_ALT_DEL": { + "message": "ПоÑлать Ctrl+Alt+Del" + }, + "SEND_FEEDBACK": { + "message": "Сообщить о проблеме…" + }, + "SEND_KEYS": { + "message": "Клавиши удаленного управлениÑ" + }, + "SEND_PRINT_SCREEN": { + "message": "ПоÑлать PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ð”Ð°Ð½Ð½Ð°Ñ Ñлужба обеÑпечивает входÑщие ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ‚ клиентов Удаленного рабочего Ñтола Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "ÐаÑтройка применÑетÑÑ ÑоглаÑно правилам домена" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "ПоделитьÑÑ" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Отмена" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "ПредоÑтавить доÑтуп к Ñтому компьютеру другому пользователю?" + }, + "SHOW_STATS": { + "message": "Показать ÑтатиÑтику" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Показать ÑтатиÑтику (качеÑтво подключениÑ: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Уменьшить до размера окна" + }, + "SIGN_IN_BUTTON": { + "message": "Вход" + }, + "SIGN_OUT_BUTTON": { + "message": "Выйти" + }, + "STOP_SHARING_BUTTON": { + "message": "Закрыть доÑтуп" + }, + "SURVEY_INVITATION": { + "message": "Хотите помочь нам улучшить Удаленный рабочий Ñтол Chrome? $1$Примите учаÑтие в опроÑе.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ВремÑ" + }, + "TOGGLE_STATS": { + "message": "Показать ÑтатиÑтику" + }, + "TOOLTIP_CONNECT": { + "message": "ПодключитьÑÑ Ðº $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Заблокировать удаленные Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñтому компьютеру" + }, + "TOOLTIP_REFRESH": { + "message": "Обновите ÑпиÑок хоÑтов" + }, + "TOOLTIP_RENAME": { + "message": "Изменить Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð°" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (требует обновлениÑ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Ðккаунт" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Ð”Ð»Ñ Ð´Ð¾Ñтупа через Удаленный рабочий Ñтол Chrome подтвердите Ñвой аккаунт и PIN-код." + }, + "WARNING_NAT_DISABLED": { + "message": "Примечание. Ð’ ÑоответÑтвии Ñ Ð½Ð°Ñтройками политики допуÑкаютÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ компьютерами только внутри локальной Ñети." + }, + "WARNING_NOT_WINDOWED": { + "message": "ПРИМЕЧÐÐИЕ. Чтобы пользоватьÑÑ Ð²Ñеми быÑтрыми клавишами, Удаленный рабочий Ñтол Chrome можно открывать в отдельном окне, задав ÑоответÑтвующие наÑтройки." + }, + "WHY_IS_THIS_SAFE": { + "message": "БезопаÑно ли Ñто?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Окна" + }, + "WORKING": { + "message": "Ð’ процеÑÑе..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sk/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sk/messages.json new file mode 100644 index 000000000000..9d4627aacbcf --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sk/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "PrijaÅ¥ a inÅ¡talovaÅ¥" + }, + "ACCESS_CODE": { + "message": "Prístupový kód" + }, + "ACCESS_CODE_TIMER": { + "message": "PlatnosÅ¥ prístupového kódu vyprší o $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Spätná väzba" + }, + "ALL_CONNECTIONS": { + "message": "VÅ¡etky pripojenia" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Znova zadajte kód PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "Kód PIN" + }, + "CANCEL": { + "message": "ZruÅ¡iÅ¥" + }, + "CLEAR_HISTORY": { + "message": "VymazaÅ¥ históriu" + }, + "CLOSE": { + "message": "ZatvoriÅ¥" + }, + "CLOSE_PROMPT": { + "message": "Ak opustíte túto stránku, relácia Vzdialenej plochy Chrome sa ukonÄí." + }, + "CLOSE_WINDOW": { + "message": "ZavrieÅ¥ okno" + }, + "COMPANY_NAME": { + "message": "SpoloÄnosÅ¥ Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Naozaj chcete zakázaÅ¥ vzdialené pripojenia k poÄítaÄu $1$? Ak zmeníte názor, pripojenie budete musieÅ¥ znova povoliÅ¥ priamo z uvedeného poÄítaÄa.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Pripojenie zlyhalo" + }, + "CONNECTION_FROM_HEADER": { + "message": "Klient" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "História pripojení" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Priemerné" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Dobré" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Slabé" + }, + "CONNECTION_TO_HEADER": { + "message": "Komu" + }, + "CONNECT_ANYWAY": { + "message": "PripojiÅ¥" + }, + "CONNECT_BUTTON": { + "message": "Pripojenie" + }, + "CONTINUE_BUTTON": { + "message": "PokraÄovaÅ¥" + }, + "CONTINUE_PROMPT": { + "message": "Momentálne zdieľate tento poÄítaÄ s iným používateľom. Chcete pokraÄovaÅ¥ v zdieľaní?" + }, + "CONTROLLER_NAME": { + "message": "OvládaÄ hostiteľa Vzdialenej plochy Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. VÅ¡etky práva vyhradené." + }, + "CREDITS": { + "message": "PoÄakovanie" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "OdstrániÅ¥ vÅ¡etko" + }, + "DELETE_PAIRED_CLIENT": { + "message": "OdstrániÅ¥" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Ak chcete pokraÄovaÅ¥, musíte najprv udeliÅ¥ rozšírené povolenia na prístup k vášmu poÄítaÄu. StaÄí to urobiÅ¥ len raz." + }, + "DESCRIPTION_CONNECT": { + "message": "Požiadajte používateľa s poÄítaÄom, do ktorého chcete získaÅ¥ prístup, aby klikol na tlaÄidlo $1$ a poskytol vám prístupový kód.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Vzdialená plocha Chrome vám umožňuje bezpeÄne zdieľaÅ¥ váš poÄítaÄ cez internet. Obaja používatelia musia maÅ¥ spustenú aplikáciu Vzdialená plocha Chrome, ktorú nájdete na adrese $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Vzdialený hostiteľ od vás vyžaduje overenie na webových stránkach tretej strany. Ak chcete pokraÄovaÅ¥, musíte vzdialenej ploche Chrome udeliÅ¥ dodatoÄné oprávnenie na prístup k tejto adrese:" + }, + "DISABLE_HOST": { + "message": "ZakázaÅ¥" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "OdpojiÅ¥" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Služba Vzdialená plocha Chrome" + }, + "DURATION_HEADER": { + "message": "Trvanie" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Nemáte povolenie spustiÅ¥ túto aplikáciu." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Overenie zlyhalo. Prihláste sa do prehliadaÄa Chrome a skúste to znova." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Niektoré potrebné komponenty chýbajú. Uistite sa, že máte nainÅ¡talovanú najnovÅ¡iu verziu prísluÅ¡ného softvéru a skúste to znova." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Vyskytla sa chyba siete. KeÄ bude vaÅ¡e zariadenie znova online, aplikáciu reÅ¡tartujeme." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Inicializácia relácie vzdialeným poÄítaÄom sa nepodarila. Ak problém pretrváva, skúste opätovne nakonfigurovaÅ¥ hostiteľa." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Vzdialený poÄítaÄ nereaguje na žiadosti o pripojenie. Skontrolujte, Äi je online a skúste to znova." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Pripojenia k vzdialenému poÄítaÄu sú doÄasne zablokované, pretože sa k nemu niekto snažil pripojiÅ¥ pomocou neplatného kódu PIN. Skúste to znova neskôr." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Registrácia tohto poÄítaÄa zlyhala." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Bola zistená nekompatibilná verzia protokolu. Uistite sa, že máte na oboch poÄítaÄoch nainÅ¡talovanú najnovÅ¡iu verziu prísluÅ¡ného softvéru a skúste to znova." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Prístupový kód je neplatný. Skúste to znova." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Nastavenia pravidiel nepovoľujú zdieľanie tohto poÄítaÄa ako hostiteľa Vzdialenej plochy Chrome. Požiadajte o pomoc svojho správcu systému." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Vzdialená relácia vyprÅ¡ala." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Niektoré potrebné komponenty chýbajú. Uistite sa, že používate najnovÅ¡iu verziu prehliadaÄa Chrome a skúste to znova." + }, + "ERROR_NACL_DISABLED": { + "message": "Niektoré potrebné komponenty chýbajú. Prejdite na adresu chrome://plugins a uistite sa, že je aktivovaný doplnok Native Client." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Prestal fungovaÅ¥ požadovaný komponent. Nahláste tento problém vývojárom." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Nepodarilo sa pripojiÅ¥ k sieti. Skontrolujte, Äi je vaÅ¡e zariadenie online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Nie ste prihlásený/-á do prehliadaÄa Chrome. Prihláste sa a skúste to znova." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Nemáte povolenie vykonaÅ¥ túto akciu." + }, + "ERROR_NOT_FOUND": { + "message": "Požadovaný objekt neexistuje" + }, + "ERROR_P2P_FAILURE": { + "message": "Hostiteľa sa nepodarilo nájsÅ¥. Pravdepodobne je to spôsobené konfiguráciou siete, ktorú používate." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Služba je doÄasne nedostupná. Skúste to znova neskôr." + }, + "ERROR_UNEXPECTED": { + "message": "Vyskytla sa neoÄakávaná chyba. Nahláste tento problém vývojárom." + }, + "EXIT_FULL_SCREEN": { + "message": "UkonÄiÅ¥ zobrazenie na celú obrazovku" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Aplikáciu sa nepodarilo resetovaÅ¥. Stále vÅ¡ak môžete odoslaÅ¥ hlásenie o chybách." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "ResetovaÅ¥ aplikáciu. Prídete o vÅ¡etku neuloženú prácu." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Aplikáciu nemôžem spustiÅ¥." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Aplikácia je príliÅ¡ pomalá." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Nemôžem otvoriÅ¥ svoje súbory na Disku Google." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Nevidím svoje uložené súbory online na Disku Google." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Mám problémy s klávesnicou alebo myÅ¡ou." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Pomôžte nám vyrieÅ¡iÅ¥ váš problém. Dajte nám vedieÅ¥, Äo sa stalo:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "NieÄo iné." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Vyberte…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "VaÅ¡a e-mailová adresa bude uvedená v každej spätnej väzbe, ktorú odoÅ¡lete. Umožní nám to kontaktovaÅ¥ vás v prípade potreby Äalších informácií." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "NahlásiÅ¥ problém" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Zahrnúť denníky aplikácie s cieľom pomôcÅ¥ pri rieÅ¡ení tohto problému (denníky môžu obsahovaÅ¥ osobné informácie)" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Denníky aplikácie môžu obsahovaÅ¥ osobné informácie vrátane vaÅ¡ej totožnosti (e-mailovej adresy), názvov a vlastností súborov a prieÄinkov na Disku Google." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "K týmto informáciám, ktoré sa používajú iba na diagnostiku vami nahláseného problému, má prístup výhradne osoba preÅ¡etrujúca vaÅ¡e hlásenie. Tieto informácie budú uchovávané maximálne 30 dní." + }, + "FOOTER_CONNECTING": { + "message": "Prebieha pripájanie..." + }, + "FOOTER_WAITING": { + "message": "Äaká sa na pripojenie..." + }, + "FOR_PLATFORM_MAC": { + "message": "Pre poÄítaÄe Mac (OS X 10.6 a novší)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Pre systém Windows (XP a novší)" + }, + "FULL_SCREEN": { + "message": "Celá obrazovka" + }, + "GET_STARTED": { + "message": "ZaÄíname" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "PrijaÅ¥" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "OdmietnuÅ¥" + }, + "HELP": { + "message": "Pomocník" + }, + "HOME_ACCESS_BUTTON": { + "message": "Prístup" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Zobrazte a ovládajte zdieľaný poÄítaÄ." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "K tomuto poÄítaÄu môžete bezpeÄne pristupovaÅ¥ pomocou Vzdialenej plochy Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "ZmeniÅ¥ PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Tento poÄítaÄ je momentálne zdieľaný pod iným úÄtom" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ZobraziÅ¥/upraviÅ¥" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Tento poÄítaÄ je nakonfigurovaný tak, aby povolil pripojenie jedného alebo viacerých klientov bez zadania kódu PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "PovoliÅ¥ vzdialené pripojenia" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Ak chcete na prístup k tomuto poÄítaÄu použiÅ¥ Vzdialenú plochu Chrome, musíte povoliÅ¥ vzdialené pripojenia." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "ZakázaÅ¥ vzdialené pripojenia" + }, + "HOME_SHARE_BUTTON": { + "message": "ZdieľaÅ¥" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "ZdieľaÅ¥ tento poÄítaÄ, aby ho mohol iný používateľ zobraziÅ¥ a ovládaÅ¥." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(táto funkcia zatiaľ nie je k dispozícii pre váš poÄítaÄ)" + }, + "HOST_CATEGORY": { + "message": "Hostiteľ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Prístup bol odmietnutý klientskemu programu: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klient je pripojený: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Klient bol odpojený: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Adresa IP kanála pre klient: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Ak chcete povoliÅ¥ vzdialené pripojenie k inému poÄítaÄu, nainÅ¡talujte na ňom Vzdialenú plochu Chrome a potom kliknite na tlaÄidlo $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Nie sú zaregistrované žiadne poÄítaÄe. Ak chcete povoliÅ¥ vzdialené pripojenie k inému poÄítaÄu, nainÅ¡talujte na ňom Vzdialenú plochu Chrome a potom kliknite na tlaÄidlo $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Predtým ste sa prihlásili ako používateľ $1$ ($2$). Ak chcete získaÅ¥ prístup k poÄítaÄom v danom úÄte, musíte sa $3$prihlásiÅ¥ do prehliadaÄa Google Chrome$4$ pomocou daného úÄtu a znova nainÅ¡talovaÅ¥ aplikáciu Vzdialená plocha Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Aktualizácie systému zvyÄajne prebiehajú automaticky, ale v zriedkavých prípadoch môžu zlyhaÅ¥. Aktualizácia softvéru by nemala trvaÅ¥ dlhÅ¡ie ako niekoľko sekúnd a dá sa vykonaÅ¥ prostredníctvom vzdialeného pripojenia k poÄítaÄu." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Vzdialená plocha Chrome na poÄítaÄi $1$ je zastaraná a vyžaduje aktualizáciu.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Pomôžte nám vylepÅ¡iÅ¥ službu Vzdialená plocha Chrome tým, že nám umožníte zhromažÄovaÅ¥ Å¡tatistiky používania a správy o zlyhaní." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Ak chcete ochrániÅ¥ tento poÄítaÄ pred neautorizovaným prístupom, nastavte si kód PIN obsahujúci $1$najmenej Å¡esÅ¥ Äíslic$2$. Tento kód PIN budete musieÅ¥ zadaÅ¥ pri pokuse o pripojenie z iného miesta.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Spustenie služby vzdialeného prístupu zlyhalo." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome sÅ¥ahuje inÅ¡talátor hostiteľa Vzdialenej plochy Chrome. InÅ¡talátor po stiahnutí najprv spustite a pokraÄujte až potom." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Pred pokraÄovaním spustite inÅ¡talátor." + }, + "HOST_SETUP_STARTED": { + "message": "Vzdialené pripojenia k tomuto poÄítaÄu boli povolené." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Skontrolujte nastavenia správy napájania svojho poÄítaÄa a uistite sa, že nie je nakonfigurovaný prechod do režimu spánku pri neÄinnosti." + }, + "HOST_SETUP_STARTING": { + "message": "Prebieha povoľovanie vzdialených pripojení pre tento poÄítaÄ..." + }, + "HOST_SETUP_STOPPED": { + "message": "Vzdialené pripojenia k tomuto poÄítaÄu boli zakázané." + }, + "HOST_SETUP_STOPPING": { + "message": "Prebieha zakazovanie vzdialených pripojení pre tento poÄítaÄ..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Vzdialený prístup k tomuto poÄítaÄu sa nepodarilo zakázaÅ¥. Skúste to znova neskôr." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Stiahnutím nástroja na inÅ¡taláciu hostiteľa Vzdialenej plochy Chrome vyjadrujete súhlas so $1$zmluvnými podmienkami$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Váš kód PIN bol aktualizovaný." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Aktualizácia kódu PIN sa nepodarila. Skúste to znova neskôr." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Prebieha aktualizácia kódu PIN pre tento poÄítaÄ..." + }, + "HOST_STARTED": { + "message": "Hostiteľ bol spustený pre používateľa: %1." + }, + "HOST_STOPPED": { + "message": "Hostenie bolo zastavené." + }, + "IDLE_CONTINUE": { + "message": "PokraÄovaÅ¥" + }, + "IDLE_DISCONNECT": { + "message": "OdpojiÅ¥" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Relácia vaÅ¡ej aplikácie $1$ je už istý Äas neaktívna a Äoskoro bude odpojená.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "K tomuto poÄítaÄu" + }, + "INSTALLER_DOWNLOAD": { + "message": "Stiahnutie nástroja na inÅ¡taláciu hostiteľa Vzdialenej plochy Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Ak chcete zaÄaÅ¥ zdieľaÅ¥ svoju pracovnú plochu, poskytnite nižšie uvedený prístupový kód osobe, ktorá vám bude pomáhaÅ¥." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "VaÅ¡a relácia zdieľania zaÄne okamžite po zadaní kódu." + }, + "INVALID_PIN": { + "message": "Zadajte kód PIN obsahujúci 6 alebo viac Äíslic." + }, + "IT2ME_FIRST_RUN": { + "message": "Zdieľanie obrazovky medzi používateľmi – ideálne pre vzdialenú technickú podporu." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Rozloženia klávesnice" + }, + "LABEL_CONNECTED": { + "message": "Pripojený:" + }, + "LAST_ONLINE": { + "message": "$1$ (naposledy online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "ÄŽalÅ¡ie informácie." + }, + "LEARN_MORE": { + "message": "PreÄítajte si viac informácií." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Predvoľby hostiteľa Vzdialenej plochy Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Vzdialená plocha Chrome\nHostiteľ pracovnej plochy" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Nástroj na odinÅ¡talovanie hostiteľa Vzdialenej plochy Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Použitím pravého klávesa Ctrl vyvoláte kláves Win (kláves ⌘ na poÄítaÄi Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "MaximalizovaÅ¥ okno" + }, + "ME2ME_FIRST_RUN": { + "message": "Pristupujte k svojmu poÄítaÄu odkiaľkoľvek." + }, + "MESSAGE_GENERATING": { + "message": "Prebieha generovanie prístupového kódu..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "VaÅ¡a relácia Vzdialenej plochy Chrome bola ukonÄená." + }, + "MESSAGE_SHARED": { + "message": "Pracovnú plochu momentálne zdieľate s používateľom $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "MinimalizovaÅ¥ okno" + }, + "MODE_AUTHORIZE": { + "message": "Autorizácia" + }, + "MODE_IT2ME": { + "message": "Pomoc na diaľku" + }, + "MODE_ME2ME": { + "message": "Moje poÄítaÄe" + }, + "NEW_WINDOW": { + "message": "Nové okno…" + }, + "NO_PAIRED_CLIENTS": { + "message": "VÅ¡etky spárované klientske programy boli odstránené." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Táto platforma nepodporuje integráciu stolných poÄítaÄov. Aplikáciu môžete stále používaÅ¥, avÅ¡ak používateľské prostredie bude znehodnotené." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Nepodarilo sa inicializovaÅ¥ hostiteľa" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Neplatná konfigurácia hostiteľa" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Neplatná doména vlastníka hostiteľa" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Neplatný identifikátor hostiteľa" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Hostiteľ bol nakonfigurovaný pomocou neplatných poverení protokolu OAuth" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Hostiteľ spustený na obrazovke logiky konzoly bol ukonÄený, aby sa tým zaistil režim opony (curtain mode), a to prepnutím na hostiteľa spúšťaného v relácii konkrétneho používateľa" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Hostiteľ sa reÅ¡tartuje, aby zohľadnil zmenu v pravidlách" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Hostiteľovi sa nepodarilo preÄítaÅ¥ pravidlá" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Hostiteľ je vypnutý" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Nerozpoznaná chyba hostiteľa: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Neplatný vlastník hostiteľa" + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Možnosti" + }, + "OUTGOING_CONNECTIONS": { + "message": "Z tohto poÄítaÄa" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "S týmto poÄítaÄom boli spárované nasledujúce klientske programy a môžu sa pripojiÅ¥ bez kódu PIN. Toto povolenie môžete kedykoľvek odvolaÅ¥ buÄ pre jednotlivé programy, alebo pre vÅ¡etky programy naraz." + }, + "PAIRED_CLIENT_DATE": { + "message": "Dátum párovania" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "Kód PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Do obidvoch polí zadajte rovnaký kód PIN." + }, + "PIN_MESSAGE": { + "message": "Zadajte kód PIN pre poÄítaÄ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Zadajte Äíslo PIN pre vzdialený poÄítaÄ." + }, + "PRODUCT_DESCRIPTION": { + "message": "Pristupujte k iným poÄítaÄom alebo umožnite ÄalÅ¡iemu používateľovi pristupovaÅ¥ k vášmu poÄítaÄu bezpeÄne cez internet." + }, + "PRODUCT_NAME": { + "message": "Vzdialená plocha Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Znova pripojiÅ¥" + }, + "REMEMBER_PIN": { + "message": "Pri pripojení k tomuto hostiteľovi z tohto zariadenia nepožadovaÅ¥ znova kód PIN." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Základná knižnica" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Proces integrácie pracovnej plochy" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikácia na zadávanie príkazov hostiteľovi Vzdialenej plochy Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Proces hostiteľa" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Natívna hostiteľská aplikácia urÄená na odosielanie správ v rámci správy vzdialených hostiteľov" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Natívna hostiteľská aplikácia urÄená na odosielanie správ v rámci vzdialenej pomoci" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Proces vzdialeného prístupu bezpeÄnostného kľúÄa" + }, + "RESIZE_TO_CLIENT": { + "message": "PrispôsobiÅ¥ veľkosÅ¥ pracovnej plochy obrazovke klienta" + }, + "RESTART_BUTTON": { + "message": "ReÅ¡tartovaÅ¥" + }, + "RESTORE_WINDOW": { + "message": "Obnovenie okna" + }, + "RETRY": { + "message": "SkúsiÅ¥ znova" + }, + "SCREEN_OPTIONS": { + "message": "Možnosti obrazovky" + }, + "SEND_CTRL_ALT_DEL": { + "message": "OdoslaÅ¥ akciu Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "NahlásiÅ¥ problém..." + }, + "SEND_KEYS": { + "message": "OdoslaÅ¥ kombináciu klávesov" + }, + "SEND_PRINT_SCREEN": { + "message": "OdoslaÅ¥ akciu PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Táto služba povoľuje prichádzajúce pripojenia od klientov Vzdialenej plochy Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Toto nastavenie je spravované pravidlami domény." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "ZdieľaÅ¥" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ZruÅ¡iÅ¥" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Chcete tento poÄítaÄ zdieľaÅ¥ s Äalším používateľom, aby ho mohol zobraziÅ¥ a ovládaÅ¥?" + }, + "SHOW_STATS": { + "message": "ZobraziÅ¥ Å¡tatistiky" + }, + "SHOW_STATS_WITH_RTT": { + "message": "ZobraziÅ¥ Å¡tatistiky (pripojenie: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ZmenÅ¡iÅ¥ a prispôsobiÅ¥" + }, + "SIGN_IN_BUTTON": { + "message": "PrihlásiÅ¥ sa" + }, + "SIGN_OUT_BUTTON": { + "message": "OdhlásiÅ¥ sa" + }, + "STOP_SHARING_BUTTON": { + "message": "PrestaÅ¥ zdieľaÅ¥" + }, + "SURVEY_INVITATION": { + "message": "Chcete pomôcÅ¥ vylepÅ¡iÅ¥ funkciu Vzdialená plocha Chrome? $1$ZúÄastnite sa prieskumu.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ÄŒas" + }, + "TOGGLE_STATS": { + "message": "ZobraziÅ¥ Å¡tatistiky" + }, + "TOOLTIP_CONNECT": { + "message": "PripojiÅ¥ k poÄítaÄu $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ZakázaÅ¥ vzdialené pripojenia k tomuto poÄítaÄu" + }, + "TOOLTIP_REFRESH": { + "message": "ObnoviÅ¥ zoznam hostiteľov" + }, + "TOOLTIP_RENAME": { + "message": "UpraviÅ¥ názov poÄítaÄa" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (zastarané)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "ÚÄet" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Ak chcete povoliÅ¥ prístup k Vzdialenej ploche Chrome, potvrÄte svoj úÄet a kód PIN nižšie." + }, + "WARNING_NAT_DISABLED": { + "message": "Poznámka: Nastavenia pravidiel umožňujú pripojenie len medzi poÄítaÄmi v rámci vaÅ¡ej siete." + }, + "WARNING_NOT_WINDOWED": { + "message": "POZNÃMKA: Ak chcete maÅ¥ k dispozícii vÅ¡etky klávesové skratky, povoľte v konfigurácii Vzdialenej plochy Chrome možnosÅ¥ OtvoriÅ¥ ako okno." + }, + "WHY_IS_THIS_SAFE": { + "message": "PreÄo je to bezpeÄné?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Spracúva sa…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sl/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sl/messages.json new file mode 100644 index 000000000000..8e94e705a015 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sl/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Sprejmite in namestite" + }, + "ACCESS_CODE": { + "message": "Koda za dostop" + }, + "ACCESS_CODE_TIMER": { + "message": "Ta koda za dostop bo potekla Äez $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Povratne informacije" + }, + "ALL_CONNECTIONS": { + "message": "Vse povezave" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Znova vnesite PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "PrekliÄi" + }, + "CLEAR_HISTORY": { + "message": "PoÄisti zgodovino" + }, + "CLOSE": { + "message": "Zapri" + }, + "CLOSE_PROMPT": { + "message": "ÄŒe zapustite to stran, se bo seja Oddaljenega namizja za Chrome konÄala." + }, + "CLOSE_WINDOW": { + "message": "Zapre okno" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Ali ste prepriÄani, da želite onemogoÄiti oddaljene povezave z gostiteljem $1$? ÄŒe si premislite, boste morali v tistem raÄunalniku znova omogoÄiti povezave.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Vzpostavitev povezave ni uspela" + }, + "CONNECTION_FROM_HEADER": { + "message": "Od" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Zgodovina povezav" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Zadovoljiva" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Dobra" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Slaba" + }, + "CONNECTION_TO_HEADER": { + "message": "Za" + }, + "CONNECT_ANYWAY": { + "message": "Vseeno vzpostavi povezavo" + }, + "CONNECT_BUTTON": { + "message": "Povezovanje" + }, + "CONTINUE_BUTTON": { + "message": "Nadaljuj" + }, + "CONTINUE_PROMPT": { + "message": "Trenutno imate to napravo v skupni rabi z drugim uporabnikom. Ali želite nadaljevati skupno rabo?" + }, + "CONTROLLER_NAME": { + "message": "Krmilnik gostitelja za Oddaljeno namizje za Chrome" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. Vse pravice pridržane." + }, + "CREDITS": { + "message": "Seznam sodelujoÄih" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "IzbriÅ¡i vse" + }, + "DELETE_PAIRED_CLIENT": { + "message": "IzbriÅ¡i" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "ÄŒe želite nadaljevati, morate raÄunalniku najprej odobriti dovoljenja za razÅ¡irjen dostop. To je treba narediti samo enkrat." + }, + "DESCRIPTION_CONNECT": { + "message": "Uporabnika, do Äigar raÄunalnika želite dostopati, prosite, da klikne »$1$« in vam da kodo za dostop.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Oddaljeno namizje za Chrome omogoÄa varno skupno rabo raÄunalnika v spletu. Oba uporabnika morata uporabljati aplikacijo Oddaljeno namizje za Chrome, ki je na voljo na $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Oddaljeni gostitelj zahteva, da previte pristnost na spletnem mestu tretje osebe. ÄŒe želite nadaljevati, morate Oddaljenemu namizju za Chrome dodeliti dodatna dovoljenja za dostop do tega naslova:" + }, + "DISABLE_HOST": { + "message": "OnemogoÄi" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Prekini povezavo" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Storitev Oddaljeno namizje za Chrome" + }, + "DURATION_HEADER": { + "message": "Trajanje" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Nimate dovoljenja za izvajanje te aplikacije." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Preverjanje pristnosti ni uspelo. Å e enkrat se prijavite v Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Ni nekaterih zahtevanih delov. Preverite, ali imate najnovejÅ¡o razliÄico programske opreme in poskusite znova." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "PriÅ¡lo je do napake v omrežju. Ko bo naprava spet dosegljiva, bo aplikacija znova zagnana." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Oddaljeni raÄunalnik ni inicializiral seje. ÄŒe se težava ponovi, poskusite znova konfigurirati gostitelja." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Oddaljeni raÄunalnik se ne odziva na zahteve za povezavo. Preverite, ali ima vzpostavljeno povezavo, in poskusite znova." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Povezave z oddaljenim raÄunalnikom so zaÄasno onemogoÄene, ker je nekdo poskuÅ¡al vzpostaviti povezavo z njim z neveljavno kodo PIN. Poskusite znova pozneje." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "RaÄunalnika ni bilo mogoÄe registrirati." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Zaznana je bila nezdružljiva razliÄica protokola. Poskrbite, da ste v obeh raÄunalnikih nameÅ¡Äeni najnovejÅ¡i razliÄici, in poskusite znova." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Koda za dostop je neveljavna. Poskusite znova." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Nastavitve pravilnika ne dovoljujejo skupne rabe tega raÄunalnika kot gostitelja Oddaljenega namizja za Chrome. ÄŒe želite pomoÄ, se obrnite na sistemskega skrbnika." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Oddaljena seja je potekla." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Ni nekaterih zahtevanih delov. Preverite, ali imate najnovejÅ¡o razliÄico Chroma in poskusite znova." + }, + "ERROR_NACL_DISABLED": { + "message": "Ni nekaterih zahtevanih delov. Na chrome://plugins preverite, ali je omogoÄena tehnologija Native Client." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Zahtevana komponenta je nehala delovati. O tem obvestite razvijalce." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Povezana z omrežjem ni uspela. Preverite, ali je naprava povezana v omrežje." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Niste prijavljeni v Chrome. Prijavite se in poskusite znova." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Nimate dovoljenja za izvedbo tega dejanja." + }, + "ERROR_NOT_FOUND": { + "message": "Zahtevani predmet ne obstaja." + }, + "ERROR_P2P_FAILURE": { + "message": "Ni mogoÄe vzpostaviti povezave z gostiteljem; verjetno zaradi konfiguracije omrežja, ki ga uporabljate." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Ta storitev zaÄasno ni na voljo. Poskusite znova pozneje." + }, + "ERROR_UNEXPECTED": { + "message": "NepriÄakovana napaka. O tem obvestite razvijalce." + }, + "EXIT_FULL_SCREEN": { + "message": "Izhod iz celozaslonskega naÄina" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Aplikacije ni bilo mogoÄe ponastaviti. Kljub temu lahko poÅ¡ljete poroÄilo o napakah." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Ponastavite aplikacijo. Delo, ki ga niste shranili, bo izgubljeno." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ne morem odpreti aplikacije." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Ta aplikacija je prepoÄasna." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ne morem odpreti datotek v Googlu Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "V spletu ne vidim shranjenih datotek v Googlu Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Imam težave s tipkovnico ali miÅ¡ko." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Pomagajte nam odpraviti težave, tako da nam sporoÄite, kaj je narobe." + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Nekaj drugega." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Izberite …" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "V povratnih informacijah, ki nam jih poÅ¡ljete, bo vkljuÄen vaÅ¡ e-poÅ¡tni naslov, da se lahko obrnemo na vas glede dodatnih informacij." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Prijavite težavo" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "VkljuÄite dnevnike aplikacije, da bomo lažje razreÅ¡ili vaÅ¡o težavo (dnevniki morda vkljuÄujejo zasebne podatke)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Dnevniki aplikacij morda vsebujejo zasebne podatke, vkljuÄno z vaÅ¡o identiteto (e-poÅ¡tni naslov), in imena ter lastnosti datotek in map v Googlu Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Te informacije uporabljamo samo za diagnosticiranje težave, ki ste jo prijavili, na voljo so samo osebi, ki preuÄuje vaÅ¡o prijavo, in hranimo jih najveÄ 30 dni." + }, + "FOOTER_CONNECTING": { + "message": "Vzpostavljanje povezave ..." + }, + "FOOTER_WAITING": { + "message": "Äakanje na povezavo ..." + }, + "FOR_PLATFORM_MAC": { + "message": "Za Mac OS (OS X 10.6 in novejÅ¡i)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Za sistem Windows (XP in novejÅ¡e razliÄice)" + }, + "FULL_SCREEN": { + "message": "Celozaslonsko" + }, + "GET_STARTED": { + "message": "Kako zaÄeti" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Sprejmi" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Zavrni" + }, + "HELP": { + "message": "PomoÄ" + }, + "HOME_ACCESS_BUTTON": { + "message": "Dostop" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Ogled in nadziranje raÄunalnika v skupni rabi." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Oddaljeno namizje za Chrome omogoÄa varen dostop do tega raÄunalnika." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Spremeni PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Ta raÄunalnik je trenutno v skupni rabi z uporabo drugega raÄuna." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Ogled/urejanje" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Ta raÄunalnik je nastavljen tako, da enemu ali veÄ odjemalcem dovoli povezovanje brez vnosa kode PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "OmogoÄi oddaljene povezave" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "ÄŒe želite do raÄunalnika dostopati z Oddaljenim namizjem za Chrome, omogoÄite oddaljene povezave." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "OnemogoÄi oddaljene povezave" + }, + "HOME_SHARE_BUTTON": { + "message": "Skupna raba" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Dajte ta raÄunalnik v skupno rabo, da ga lahko drug uporabnik vidi in nadzira." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ta funkcija Å¡e ni na voljo za vaÅ¡ raÄunalnik)" + }, + "HOST_CATEGORY": { + "message": "Gostitelj" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Dostop zavrnjen za odjemalca: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Odjemalec povezan: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Povezava z odjemalcem prekinjena: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP kanala za odjemalca: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "ÄŒe želite omogoÄiti oddaljene povezave z drugim raÄunalnikom, vanj namestite Oddaljeno namizje za Chrome in kliknite »$1$«.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Nimate registriranih raÄunalnikov. ÄŒe želite omogoÄiti oddaljene povezave z raÄunalnikom, vanj namestite Oddaljeno namizje za Chrome in kliknite »$1$«.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "V preteklosti ste se prijavljali kot $1$ ($2$). Če želite dostopati do raÄunalnikov v tistem raÄunu, $3$se prijavite v Google Chrome$4$ s tistim raÄunom in znova namestite Oddaljeno namizje za Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Posodobitve programske opreme se obiÄajno izvedejo samodejno, vendar v redkih primerih posodobitev ni uspeÅ¡na. Posodabljanje naj bi trajalo samo nekaj minut in se lahko izvaja, medtem ko ste s svojim raÄunalnikom povezani oddaljeno." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Oddaljeno namizje za Chrome pri gostitelju $1$ je zastarelo in ga je treba posodobiti.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Pomagajte nam izboljÅ¡ati Oddaljeno namizje za Chrome, tako da nam dovolite zbiranje statistiÄnih podatkov o uporabi in poroÄil o zruÅ¡itvah." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "ÄŒe želite zaÅ¡Äititi dostop do tega raÄunalnika, izberite vsaj $1$Å¡estmestni$2$ PIN. Ta bo zahtevan pri povezovanju z drugega mesta.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Storitve oddaljenega dostopa ni bilo mogoÄe zagnati." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome prenaÅ¡a namestitveni program za gostitelja Oddaljenega namizja za Chrome. Po konÄanem prenosu zaženite namestitveni program, preden nadaljujete." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Zaženite namestitveni program, preden nadaljujete." + }, + "HOST_SETUP_STARTED": { + "message": "Oddaljene povezave za raÄunalnik so omogoÄene." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Preverite nastavitve raÄunalnika za upravljanje porabe in zagotovite, da za Äas nedejavnosti ni doloÄeno stanje pripravljenosti." + }, + "HOST_SETUP_STARTING": { + "message": "OmogoÄanje oddaljenih povezav za ta raÄunalnik ..." + }, + "HOST_SETUP_STOPPED": { + "message": "Oddaljene povezave za ta raÄunalnik so onemogoÄene." + }, + "HOST_SETUP_STOPPING": { + "message": "OnemogoÄanje oddaljenih povezav za ta raÄunalnik ..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Oddaljenega dostopa za raÄunalnik ni bilo mogoÄe onemogoÄiti. Poskusite znova pozneje." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "ÄŒe prenesete namestitveni program za gostitelja za oddaljeno namizje za Chrome, sprejemate Googlove $1$pogoje storitve$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN je posodobljen." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Kode PIN ni bilo mogoÄe posodobiti. Poskusite znova pozneje." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN za ta raÄunalnik se posodablja ..." + }, + "HOST_STARTED": { + "message": "Gostitelj zagnan za uporabnika: %1." + }, + "HOST_STOPPED": { + "message": "Gostitelj se je ustavil." + }, + "IDLE_CONTINUE": { + "message": "Nadaljuj" + }, + "IDLE_DISCONNECT": { + "message": "Prekini povezavo" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Seja aplikacije $1$ je že nekaj Äasa nedejavna, zato bo povezava kmalu prekinjena.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "S tem raÄunalnikom" + }, + "INSTALLER_DOWNLOAD": { + "message": "Prenos namestitvenega programa za gostitelja za Oddaljeno namizje za Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "ÄŒe želite zaÄeti skupno rabo namizja, poÅ¡ljite spodnjo kodo za dostop osebi, ki vam bo pomagala." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Ko je koda vnesena, se seja skupne rabe zaÄne." + }, + "INVALID_PIN": { + "message": "Vnesite kodo PIN, ki mora biti vsaj Å¡estmestna." + }, + "IT2ME_FIRST_RUN": { + "message": "Skupna raba zaslona je odliÄna reÅ¡itev za oddaljeno tehniÄno pomoÄ." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Postavitve tipkovnice" + }, + "LABEL_CONNECTED": { + "message": "Povezava vzpostavljena:" + }, + "LAST_ONLINE": { + "message": "$1$ (nazadnje s povezavo: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "VeÄ o tem." + }, + "LEARN_MORE": { + "message": "VeÄ o tem" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Nastavitve gostitelja za Oddaljeno namizje za Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Gostitelj za Oddaljeno\nnamizje za Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Odstranitveni program gostitelja za Oddaljeno namizje za Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Uporabi desno tipko Ctrl kot tipko Windows (⌘ v sistemu Mac OS)" + }, + "MAXIMIZE_WINDOW": { + "message": "PoveÄanje okna" + }, + "ME2ME_FIRST_RUN": { + "message": "Do raÄunalnika lahko dostopate od kjer koli." + }, + "MESSAGE_GENERATING": { + "message": "Ustvarjanje kode za dostop ..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Seja Oddaljenega namizja za Chrome je konÄana." + }, + "MESSAGE_SHARED": { + "message": "VaÅ¡e namizje je trenutno v skupni rabi z uporabnikom $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "PomanjÅ¡anje olna" + }, + "MODE_AUTHORIZE": { + "message": "Pooblasti" + }, + "MODE_IT2ME": { + "message": "Oddaljena pomoÄ" + }, + "MODE_ME2ME": { + "message": "Moji raÄunalniki" + }, + "NEW_WINDOW": { + "message": "Novo okno …" + }, + "NO_PAIRED_CLIENTS": { + "message": "Vsi seznanjeni odjemalci so izbrisani." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Integracija namizja v tem okolju ni podprta. Aplikacijo lahko Å¡e vedno uporabljate, vendar bo uporabniÅ¡ka izkuÅ¡nja okrnjena." + }, + "OFFLINE": { + "message": "$1$ (brez povezave)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Inicializacija gostitelja ni uspela." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Neveljavna konfiguracija gostitelja." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Neveljavna domena lastnika gostitelja." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Neveljaven ID gostitelja." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Gostitelj je konfiguriran z neveljavnimi poverilnicami OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Gostitelj, ki se je izvajal na zaslonu za prijavo v konzolo, se je zaustavil zaradi podpore naÄinu zavese, tako da je preklopil na gostitelja, ki se izvaja v seji uporabnika." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Gostitelj se znova zaganja zaradi uveljavitve spremembe pravilnika." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Gostitelj ni mogel prebrati pravilnika." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Gostitelj se je zaustavil." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Neprepoznana napaka gostitelja: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Neveljavni lastnik gostitelja." + }, + "OK": { + "message": "V redu" + }, + "OPTIONS_MENU": { + "message": "Možnosti" + }, + "OUTGOING_CONNECTIONS": { + "message": "Iz tega raÄunalnika" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Ti odjemalci so bili seznanjeni s tem raÄunalnikom in se lahko povežejo, ne da bi bilo treba vnesti PIN. To dovoljenje lahko kadar koli umaknete za vsakega posameznega odjemalca ali za vse." + }, + "PAIRED_CLIENT_DATE": { + "message": "Datum seznanjenja" + }, + "PAIRED_CLIENT_NAME": { + "message": "Odjemalec" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "V polji vnesite isto kodo PIN." + }, + "PIN_MESSAGE": { + "message": "Vnesite kodo PIN za gostitelja $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Vnesite PIN za oddaljeni raÄunalnik." + }, + "PRODUCT_DESCRIPTION": { + "message": "Dostopajte do drugih raÄunalnikov ali omogoÄite drugemu uporabniku, da varno dostopa do vaÅ¡ega raÄunalnika prek interneta." + }, + "PRODUCT_NAME": { + "message": "Oddaljeno namizje za Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Znova poveži" + }, + "REMEMBER_PIN": { + "message": "Pri povezovanju s tem gostiteljem iz tega raÄunalnika ne zahtevaj veÄ kode PIN." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Knjižnica jedra" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Postopek vkljuÄitve namizja" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Aplikacija naj poÅ¡ilja ukaze gostitelju Oddaljenega namizja za Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Gostiteljski postopek" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Izvorni gostitelj za sporoÄanje za upravljanje komunikacije na daljavo" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Izvorni gostitelj za sporoÄanje za pomoÄ na daljavo" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Postopek oddaljenega delovanja varnostnega kljuÄa" + }, + "RESIZE_TO_CLIENT": { + "message": "Prilagodi velikost namizja" + }, + "RESTART_BUTTON": { + "message": "Znova zaženi" + }, + "RESTORE_WINDOW": { + "message": "Obnovi okno" + }, + "RETRY": { + "message": "Poskusi znova" + }, + "SCREEN_OPTIONS": { + "message": "Možnosti zaslona" + }, + "SEND_CTRL_ALT_DEL": { + "message": "PoÅ¡lji Ctrl + Alt + Del" + }, + "SEND_FEEDBACK": { + "message": "Prijava težave …" + }, + "SEND_KEYS": { + "message": "PoÅ¡lji tipke" + }, + "SEND_PRINT_SCREEN": { + "message": "PoÅ¡lji PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ta storitev omogoÄa dohodne povezave iz odjemalcev za Oddaljeno namizje za Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "To nastavitev upravlja pravilnik vaÅ¡e domene." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Skupna raba" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "PrekliÄi" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Ali želite ta raÄunalnik deliti z drugimi, tako da bo imel drug uporabnik do njega dostop in ga bo lahko nadziral?" + }, + "SHOW_STATS": { + "message": "Prikaži statistiÄne podatke" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Prikaži statistiÄne podatke (povezava: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "SkrÄi na ustrezno velikost" + }, + "SIGN_IN_BUTTON": { + "message": "Prijava" + }, + "SIGN_OUT_BUTTON": { + "message": "Odjava" + }, + "STOP_SHARING_BUTTON": { + "message": "PrekliÄi skupno rabo" + }, + "SURVEY_INVITATION": { + "message": "Želite pomagati izboljÅ¡ati oddaljeno namizje za Chrome? $1$Sodelujte v anketi.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ÄŒas" + }, + "TOGGLE_STATS": { + "message": "Prikaži statistiÄne podatke" + }, + "TOOLTIP_CONNECT": { + "message": "Vzpostavljanje povezave z gostiteljem $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "OnemogoÄanje oddaljenih povezav za raÄunalnik" + }, + "TOOLTIP_REFRESH": { + "message": "Osveži seznam gostiteljev" + }, + "TOOLTIP_RENAME": { + "message": "Urejanje imena raÄunalnika" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (zastarelo)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "RaÄun" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "ÄŒe želite dovoliti dostop prek Oddaljenega namizja za Chrome, spodaj potrdite raÄun in PIN." + }, + "WARNING_NAT_DISABLED": { + "message": "OPOMBA: Nastavitve na podlagi pravilnika dovoljujejo povezave samo med raÄunalniki v vaÅ¡em omrežju." + }, + "WARNING_NOT_WINDOWED": { + "message": "OPOMBA: ÄŒe želite zagotoviti, da bodo na voljo vse bližnjiÄne tipke, lahko Oddaljeno namizje za Chrome konfigurirate na »Odpri kot okno«." + }, + "WHY_IS_THIS_SAFE": { + "message": "Zakaj je to varno?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Obdelava …" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sr/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sr/messages.json new file mode 100644 index 000000000000..ed858d6cf03b --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sr/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Прихвати и инÑталирај" + }, + "ACCESS_CODE": { + "message": "ПриÑтупни кôд" + }, + "ACCESS_CODE_TIMER": { + "message": "Овај приÑтупни кôд ће иÑтећи за $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Повратне информације" + }, + "ALL_CONNECTIONS": { + "message": "Све везе" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Поново унеÑите PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Откажи" + }, + "CLEAR_HISTORY": { + "message": "Обриши иÑторију" + }, + "CLOSE": { + "message": "Затвори" + }, + "CLOSE_PROMPT": { + "message": "Ðапуштањем ове Ñтранице завршићете ÑеÑију Chrome удаљеног рачунара." + }, + "CLOSE_WINDOW": { + "message": "Затварање прозора" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Желите ли Ñтварно да онемогућите даљинÑко повезивање Ñа хоÑтом $1$? Ðко Ñе предомиÑлите, треба да поÑетите тај рачунар да биÑте поново омогућили везе.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Повезивање није уÑпело" + }, + "CONNECTION_FROM_HEADER": { + "message": "Од" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ИÑторија повезивања" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Задовољавајућа" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Добра" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Лоша" + }, + "CONNECTION_TO_HEADER": { + "message": "Коме" + }, + "CONNECT_ANYWAY": { + "message": "Ипак повежи" + }, + "CONNECT_BUTTON": { + "message": "Повезивање" + }, + "CONTINUE_BUTTON": { + "message": "ÐаÑтави" + }, + "CONTINUE_PROMPT": { + "message": "Тренутно делите овај уређај Ñа још једним кориÑником. Да ли желите да наÑтавите дељење?" + }, + "CONTROLLER_NAME": { + "message": "Контролер хоÑта за Chrome удаљени рачунар" + }, + "COPYRIGHT": { + "message": "ÐуторÑка права 2013. Google Inc. Сва права Ñу задржана." + }, + "CREDITS": { + "message": "ЗаÑлуге" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Избриши Ñве" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Избриши" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Да биÑте наÑтавили, морате да одобрите дозволе за шири приÑтуп рачунару. То треба да урадите Ñамо једанпут." + }, + "DESCRIPTION_CONNECT": { + "message": "Затражите од кориÑника чијем рачунару желите да приÑтупите да кликне на „$1$“ и да вам да приÑтупни кôд.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome удаљени рачунар вам омогућава да безбедно делите рачунар на вебу. Потребно је да оба кориÑника покрену апликацију Chrome удаљени рачунар, која може да Ñе пронађе на $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Удаљени хоÑÑ‚ захтева да потврдите аутентичноÑÑ‚ на веб-Ñајту треће Ñтране. Да биÑте наÑтавили, морате да дате Chrome удаљеном рачунару додатне дозволе за приÑтуп овој адреÑи:" + }, + "DISABLE_HOST": { + "message": "Онемогући" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Прекини везу" + }, + "DISPLAY_SERVICE_NAME": { + "message": "УÑлуга Chrome удаљени рачунар" + }, + "DURATION_HEADER": { + "message": "Трајање" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Ðемате дозволу за покретање ове апликације." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Потврда аутентичноÑти није уÑпела. Пријавите Ñе поново у Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "ÐедоÑтају неке неопходне компоненте. Проверите да ли Ñте инÑталирали најновију верзију Ñофтвера и покушајте поново." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Дошло је до грешке на мрежи. Поново ћемо покренути апликацију када уређај поново буде онлајн." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Удаљени рачунар није уÑпео да покрене ÑеÑију. Ðко Ñе проблем наÑтави, покушајте да поново конфигуришете хоÑÑ‚." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Удаљени рачунар не одговара на захтеве за повезивање. Проверите да ли је на мрежи и покушајте поново." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Повезивање Ñа удаљеним рачунаром је привремено блокирано зато што је неко покушавао да Ñе повеже Ñа њим помоћу неважећег PIN-а. Покушајте поново каÑније." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "РегиÑтровање овог рачунара није уÑпело." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Откривена је некомпатибилна верзија протокола. Проверите да ли је на оба рачунара инÑталирана најновија верзија Ñофтвера и покушајте поново." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "ПриÑтупни кôд је неважећи. Покушајте поново." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Подешавања Ñмерница не дозвољавају да Ñе овај рачунар дели као хоÑÑ‚ Chrome удаљеног рачунара. Потражите помоћ од админиÑтратора ÑиÑтема." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "ДаљинÑка ÑеÑија је иÑтекла." + }, + "ERROR_MISSING_PLUGIN": { + "message": "ÐедоÑтају неке неопходне компоненте. Проверите да ли кориÑтите најновију верзију Chrome-а и покушајте поново." + }, + "ERROR_NACL_DISABLED": { + "message": "ÐедоÑтају неке неопходне компоненте. Идите на chrome://plugins и уверите Ñе да је Native Client омогућен." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Обавезна компонента је преÑтала да функционише. Пријавите овај проблем програмерима." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Ðије могуће повезати Ñе Ñа мрежом. Проверите да ли је уређај онлајн." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "ÐиÑте пријављени у Chrome. Пријавите Ñе и покушајте поново." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Ðемате дозволу за обављање те радње." + }, + "ERROR_NOT_FOUND": { + "message": "Захтевани објекат не поÑтоји." + }, + "ERROR_P2P_FAILURE": { + "message": "Ðије могуће уÑпоÑтавити везу Ñа хоÑтом. До овога је вероватно дошло због конфигурације мреже коју кориÑтите." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "УÑлуга је привремено недоÑтупна. Покушајте поново каÑније." + }, + "ERROR_UNEXPECTED": { + "message": "Дошло је до неочекиване грешке. Пријавите овај проблем програмерима." + }, + "EXIT_FULL_SCREEN": { + "message": "Изађи из режима целог екрана" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "РеÑетовање апликације није уÑпело. И даље можете да пошаљете извештај о грешци." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "РеÑетујте апликацију. Изгубићете Ñве податке које ниÑте Ñачували." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Ðе могу да отворим апликацију." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Ðпликација је преÑпора." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Ðе могу да отворим датотеке на Google диÑку." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Ðе могу да видим Ñачуване датотеке онлајн на Google диÑку." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Имам проблема Ñа таÑтатуром или мишем." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Да биÑте нам помогли да решимо проблем, реците нам шта није у реду:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Ðешто друго." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Изаберите..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Да биÑмо могли да Ð²Ð°Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸Ñ€Ð°Ð¼Ð¾ ради додатних информација, имејл адреÑа ће бити уврштена у Ñве повратне информације које пошаљете." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Пријави проблем" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "УврÑти евиденције апликација ради помоћи у решавању проблема (евиденције могу да Ñадрже приватне информације)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Евиденције апликације могу да Ñадрже приватне информације, укључујући идентитет (имејл адреÑу) и називе и ÑвојÑтва датотека и директоријума на Google диÑку." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Ови подаци Ñе кориÑте Ñамо за откривање проблема који пријављујете, доÑтупни Ñу Ñамо оÑоби која иÑтражује извештај и не задржавамо их дуже од 30 дана." + }, + "FOOTER_CONNECTING": { + "message": "Повезивање…" + }, + "FOOTER_WAITING": { + "message": "чека Ñе уÑпоÑтављање везе…" + }, + "FOR_PLATFORM_MAC": { + "message": "За Mac (OS X 10.6 и новији)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "За Windows (XP и новији)" + }, + "FULL_SCREEN": { + "message": "Цео екран" + }, + "GET_STARTED": { + "message": "Започнимо" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Прихвати" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Одбиј" + }, + "HELP": { + "message": "Помоћ" + }, + "HOME_ACCESS_BUTTON": { + "message": "ПриÑтупи" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Прегледајте и контролишите дељени рачунар." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Овом рачунару можете безбедно да приÑтупите помоћу Chrome удаљеног рачунара." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Промени PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Овај рачунар Ñе тренутно дели у Ñклопу другог налога." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Прикажи/измени" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Овај рачунар је конфигуриÑан тако да омогућава да Ñе један клијент или више њих повезују без уношења PIN-а." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Омогући даљинÑко повезивање" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Морате да омогућите даљинÑко повезивање ако желите да кориÑтите Chrome удаљени рачунар да биÑте приÑтупали овом рачунару." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Онемогући даљинÑко повезивање" + }, + "HOME_SHARE_BUTTON": { + "message": "Дели" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Делите овај рачунар да би други кориÑник могао да га прегледа и контролише." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(ова функција још увек није доÑтупна за ваш рачунар)" + }, + "HOST_CATEGORY": { + "message": "ХоÑÑ‚" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "ПриÑтуп је одбијен за клијента: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Повезани клијент: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Клијент чија је веза прекинута: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP адреÑа канала за клијента: %1 ip=„%2“ host_ip=„%3“ channel=„%4“ connection=„%5“." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Да биÑте омогућили даљинÑко повезивање Ñа неким другим рачунаром, инÑталирајте Chrome удаљени рачунар на њега и кликните на „$1$“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Ðемате региÑтрованих рачунара. Да биÑте омогућили даљинÑко повезивање Ñа рачунаром, инÑталирајте Chrome удаљени рачунар на њега и кликните на „$1$“.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Претходно Ñте Ñе пријавили као $1$ ($2$). Да биÑте приÑтупили рачунарима преко тог налога, $3$пријавите Ñе у Google Chrome$4$ помоћу тог налога и поново инÑталирајте Chrome удаљени рачунар.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Ðжурирања Ñофтвера Ñе обично обављају аутоматÑки, али могу да буду неуÑпешна у неким ретким Ñлучајевима. Ðжурирање Ñофтвера не би требало да траје дуже од неколико минута и може да Ñе обавља док Ñте даљинÑки повезани Ñа рачунаром." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome удаљени рачунар на хоÑту $1$ је заÑтарео и треба да га ажурирате.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Помозите нам да побољшамо Chrome удаљени рачунар тако што ћете нам дозволити да прикупљамо ÑтатиÑтику коришћења и извештаје о отказивању." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Да биÑте заштитили приÑтуп овом рачунару, изаберите PIN од $1$најмање шеÑÑ‚ цифара$2$. Тај PIN ће бити потребан при повезивању Ñа друге локације.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Покретање уÑлуге даљинÑког приÑтупа није уÑпело." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome преузима инÑталациони програм ХоÑÑ‚ за Chrome удаљени рачунар. Када Ñе преузимање заврши, покрените инÑталациони програм пре него што наÑтавите." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Покрените инÑталациони програм пре него што наÑтавите." + }, + "HOST_SETUP_STARTED": { + "message": "ДаљинÑко повезивање за овај рачунар је омогућено." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Проверите подешавања за управљање напајањем рачунара и уверите Ñе да није конфигуриÑан тако да прелази у режим Ñпавања када је неактиван." + }, + "HOST_SETUP_STARTING": { + "message": "Омогућавање даљинÑког повезивања за овај рачунар…" + }, + "HOST_SETUP_STOPPED": { + "message": "ДаљинÑко повезивање за овај рачунар је онемогућено." + }, + "HOST_SETUP_STOPPING": { + "message": "Онемогућавање даљинÑког повезивања за овај рачунар…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Онемогућавање даљинÑког приÑтупа овом рачунару није уÑпело. Покушајте поново каÑније." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Преузимањем програма за инÑталацију хоÑта за Chrome удаљени рачунар прихватате Google $1$уÑлове коришћења$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN је ажуриран." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Ðжурирање PIN-а није уÑпело. Покушајте поново каÑније." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN за овај рачунар Ñе ажурира…" + }, + "HOST_STARTED": { + "message": "ХоÑÑ‚ је покренут за кориÑника: %1." + }, + "HOST_STOPPED": { + "message": "ХоÑÑ‚ је зауÑтављен." + }, + "IDLE_CONTINUE": { + "message": "ÐаÑтави" + }, + "IDLE_DISCONNECT": { + "message": "Прекини везу одмах" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "СеÑија апликације $1$ је неактивна неко време и веза ће уÑкоро бити прекинута.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Са овим рачунаром" + }, + "INSTALLER_DOWNLOAD": { + "message": "Преузмите програм за инÑталацију хоÑта за Chrome удаљени рачунар" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Да биÑте почели да делите рачунар, у наÑтавку дајте приÑтупни кôд оÑоби која ће вам помагати." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Када унеÑе кôд, почеће ÑеÑија дељења." + }, + "INVALID_PIN": { + "message": "УнеÑите PIN који Ñе ÑаÑтоји од шеÑÑ‚ или више цифара." + }, + "IT2ME_FIRST_RUN": { + "message": "Дељење екрана између кориÑника, Ñавршено за даљинÑку техничку подршку." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "РаÑпоред таÑтера на таÑтатури" + }, + "LABEL_CONNECTED": { + "message": "Повезани Ñа:" + }, + "LAST_ONLINE": { + "message": "$1$ (поÑледњи пут онлајн $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Сазнајте како." + }, + "LEARN_MORE": { + "message": "Сазнајте више." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Подешавања хоÑта за Chrome удаљени рачунар" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "ХоÑÑ‚ за Chrome удаљени рачунар" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Ðлатка за деинÑталацију хоÑта за Chrome удаљени рачунар" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "КориÑти деÑни таÑтер Ctrl као таÑтер Windows (⌘ на Mac-у)" + }, + "MAXIMIZE_WINDOW": { + "message": "Повећавање прозора" + }, + "ME2ME_FIRST_RUN": { + "message": "ПриÑтупите ÑопÑтвеном рачунару Ñа било које локације." + }, + "MESSAGE_GENERATING": { + "message": "ГенериÑање приÑтупног кода…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "СеÑија Chrome удаљеног рачунара је завршена." + }, + "MESSAGE_SHARED": { + "message": "Рачунар тренутно делите Ñа кориÑником $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Смањивање прозора" + }, + "MODE_AUTHORIZE": { + "message": "Одобравање" + }, + "MODE_IT2ME": { + "message": "ДаљинÑка помоћ" + }, + "MODE_ME2ME": { + "message": "Моји рачунари" + }, + "NEW_WINDOW": { + "message": "Ðови прозор..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Сви упарени клијенти Ñу избриÑани." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Интеграција Ñа рачунаром и даље није подржана на овој платформи. И даље можете да кориÑтите апликацију, али ће кориÑнички доживљај бити лошији." + }, + "OFFLINE": { + "message": "$1$ (ван мреже)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Покретање хоÑта није уÑпело." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Конфигурација хоÑта је неважећа." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Домен влаÑника хоÑта је неважећи." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ИД хоÑта је неважећи." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "ХоÑÑ‚ је конфигуриÑан помоћу неважећих OAuth акредитива." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "ХоÑÑ‚ који је покренут на екрану за пријављивање на конзолу је иÑкључен да би подржао режим завеÑе прелаÑком на хоÑта који је покренут у ÑеÑији одређеног кориÑника." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ХоÑÑ‚ Ñе реÑтартује да би уÑвојио промену Ñмерница." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ХоÑÑ‚ није уÑпео да прочита Ñмернице." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ХоÑÑ‚ Ñе иÑкључио." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Ðепозната грешка у вези Ñа хоÑтом: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "ВлаÑник хоÑта је неважећи." + }, + "OK": { + "message": "Потврди" + }, + "OPTIONS_MENU": { + "message": "Опције" + }, + "OUTGOING_CONNECTIONS": { + "message": "Са овог рачунара" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Следећи клијенти Ñу упарени Ñа овим рачунаром и могу да Ñе повезују без навођења PIN-а. Можете да опозовете ову дозволу у било ком тренутку, било појединачно или за Ñве клијенте." + }, + "PAIRED_CLIENT_DATE": { + "message": "Датум упаривања" + }, + "PAIRED_CLIENT_NAME": { + "message": "Клијент" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "УнеÑите иÑти PIN у оба оквира." + }, + "PIN_MESSAGE": { + "message": "УнеÑите PIN за $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "УнеÑите PIN за удаљени рачунар." + }, + "PRODUCT_DESCRIPTION": { + "message": "ПриÑтупајте другим рачунарима или омогућите другом кориÑнику да безбедно приÑтупа вашем рачунару преко интернета." + }, + "PRODUCT_NAME": { + "message": "Chrome удаљени рачунар" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Стримовање Chrome апликација" + }, + "RECONNECT": { + "message": "Поново Ñе повежи" + }, + "REMEMBER_PIN": { + "message": "Ðе тражи поново PIN при повезивању Ñа овим хоÑтом Ñа овог уређаја." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "ОÑновна библиотека" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ˜Ðµ рачунара" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Ðпликација издаје команде хоÑту за Chrome удаљени рачунар." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ñ…Ð¾Ñта" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Матични хоÑÑ‚ за размену порука за омогућавање даљинÑког управљања хоÑтом" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Матични хоÑÑ‚ за размену порука за даљинÑку помоћ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "ДаљинÑки Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° безбедноÑни кључ" + }, + "RESIZE_TO_CLIENT": { + "message": "Промени величину радне површине да би Ñе уклопила" + }, + "RESTART_BUTTON": { + "message": "Поново покрени одмах" + }, + "RESTORE_WINDOW": { + "message": "Вратите прозор" + }, + "RETRY": { + "message": "Покушај поново" + }, + "SCREEN_OPTIONS": { + "message": "Опције екрана" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Пошаљи Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Пријави проблем..." + }, + "SEND_KEYS": { + "message": "Пошаљи таÑтере" + }, + "SEND_PRINT_SCREEN": { + "message": "Пошаљи PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ова уÑлуга омогућава долазне везе клијената Chrome удаљеног рачунара." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Овим подешавањем управљају Ñмернице за домен." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Дели" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Откажи" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Желите ли да делите овај рачунар да би други кориÑник могао да га види и контролише?" + }, + "SHOW_STATS": { + "message": "Прикажи ÑтатиÑтику" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Прикажи ÑтатиÑтику (веза: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Умањи према величини прозора" + }, + "SIGN_IN_BUTTON": { + "message": "Пријави ме" + }, + "SIGN_OUT_BUTTON": { + "message": "Одјави ме" + }, + "STOP_SHARING_BUTTON": { + "message": "ЗауÑтави дељење" + }, + "SURVEY_INVITATION": { + "message": "Желите да нам помогнете да побољшамо Chrome удаљени рачунар? $1$Попуните анкету.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Време" + }, + "TOGGLE_STATS": { + "message": "Прикажи ÑтатиÑтику" + }, + "TOOLTIP_CONNECT": { + "message": "Повежите Ñе Ñа хоÑтом $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Онемогућите даљинÑко повезивање Ñа овим рачунаром" + }, + "TOOLTIP_REFRESH": { + "message": "ОÑвежите лиÑту хоÑтова" + }, + "TOOLTIP_RENAME": { + "message": "Измените назив рачунара" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (заÑтарело)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Ðалог" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Потврдите налог и PIN у наÑтавку да биÑте омогућили приÑтуп за Chrome удаљени рачунар." + }, + "WARNING_NAT_DISABLED": { + "message": "ÐÐПОМЕÐÐ: Подешавања Ñмерница дозвољавају везе Ñамо између рачунара у оквиру ваше мреже." + }, + "WARNING_NOT_WINDOWED": { + "message": "ÐÐПОМЕÐÐ: Да биÑте обезбедили доÑтупноÑÑ‚ Ñвих таÑтерÑких пречица, можете да конфигуришете Chrome удаљени рачунар на „Отвори као прозор“." + }, + "WHY_IS_THIS_SAFE": { + "message": "Зашто је ово безбедно?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Обрада..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sv/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sv/messages.json new file mode 100644 index 000000000000..243f67f95a8f --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sv/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Godkänn och installera" + }, + "ACCESS_CODE": { + "message": "Ã…tkomstkod" + }, + "ACCESS_CODE_TIMER": { + "message": "Ã…tkomstkoden upphör att gälla om $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Feedback" + }, + "ALL_CONNECTIONS": { + "message": "Alla anslutningar" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ange PIN-koden igen" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN-kod" + }, + "CANCEL": { + "message": "Avbryt" + }, + "CLEAR_HISTORY": { + "message": "Rensa historik" + }, + "CLOSE": { + "message": "Stäng" + }, + "CLOSE_PROMPT": { + "message": "Om du lämnar sidan avslutas sessionen i Chrome Remote Desktop." + }, + "CLOSE_WINDOW": { + "message": "Stäng fönstret" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Är du säker pÃ¥ att du vill inaktivera fjärranslutningar till $1$? Om du Ã¥ngrar dig mÃ¥ste du besöka datorn för att kunna aktivera anslutningar igen.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Anslutningen misslyckades" + }, + "CONNECTION_FROM_HEADER": { + "message": "FrÃ¥n" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Anslutningshistorik" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "OK" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Bra" + }, + "CONNECTION_QUALITY_POOR": { + "message": "DÃ¥lig" + }, + "CONNECTION_TO_HEADER": { + "message": "Till" + }, + "CONNECT_ANYWAY": { + "message": "Anslut ändÃ¥" + }, + "CONNECT_BUTTON": { + "message": "Ansluta" + }, + "CONTINUE_BUTTON": { + "message": "Fortsätt" + }, + "CONTINUE_PROMPT": { + "message": "Du delar nu den här datorn med en annan användare. Vill du fortsätta att dela?" + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktop Host Controller" + }, + "COPYRIGHT": { + "message": "Upphovsrätt 2013 Google Inc. Med ensamrätt." + }, + "CREDITS": { + "message": "Medverkande" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Ta bort alla" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Radera" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Innan du kan fortsätta mÃ¥ste du bevilja utökad Ã¥tkomstbehörighet till datorn. Du behöver bara göra det en gÃ¥ng." + }, + "DESCRIPTION_CONNECT": { + "message": "Be användaren vars dator du vill använda att klicka pÃ¥ $1$ och ge dig Ã¥tkomstkoden.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Med Chrome Remote Desktop kan du dela din dator via internet pÃ¥ ett säkert sätt. BÃ¥da användarna mÃ¥ste köra appen Chrome Remote Desktop som du hittar pÃ¥ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Fjärrvärden kräver att du autentiserar via en tredje parts webbplats. Om du vill fortsätta mÃ¥ste du ge Chrome Remote Desktop ytterligare behörigheter att komma Ã¥t den här adressen:" + }, + "DISABLE_HOST": { + "message": "Inaktivera" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Koppla frÃ¥n" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Tjänsten Chrome Remote Desktop" + }, + "DURATION_HEADER": { + "message": "Varaktighet" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Du har inte behörighet att köra den här appen." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Autentiseringen misslyckades. Logga in i Chrome igen." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Vissa obligatoriska komponenter saknas. Kontrollera att du har installerat den senaste versionen av programvaran och försök igen." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Det uppstod ett nätverksfel. Vi startar om appen när enheten är online igen." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Fjärrdatorn har misslyckats med att starta sessionen. Konfigurera värden pÃ¥ nytt om problemet kvarstÃ¥r." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Fjärrdatorn svarar inte pÃ¥ anslutningsbegäran. Kontrollera att den är ansluten till Internet och försök igen." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Anslutningar till fjärrdatorn är tillfälligt blockerade eftersom nÃ¥gon försökt ansluta till fjärrdatorn med en ogiltig PIN-kod. Försök igen senare." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Det gick inte att registrera datorn." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "En inkompatibel version av protokollet upptäcktes. Kontrollera att du har den senaste versionen av programvaran pÃ¥ bÃ¥da datorerna och försök igen." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Koden är ogiltig. Försök igen." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Enligt policyinställningarna fÃ¥r du inte dela den här datorn som en Chrome Remote Desktop-värd. Kontakta systemadministratören om du behöver hjälp." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Fjärrsessionen har avslutats." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Vissa obligatoriska komponenter saknas. Kontrollera att du kör den senaste versionen av Chrome och försök igen." + }, + "ERROR_NACL_DISABLED": { + "message": "Vissa obligatoriska komponenter saknas. Öppna chrome://plugins och kontrollera att Native Client har aktiverats." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "En obligatorisk komponent har slutat fungera. Rapportera problemet till utvecklarna." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Det gick inte att ansluta till nätverket. Kontrollera att enheten är online." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Du är inte inloggad i Chrome. Logga in och försök igen." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Du har inte behörighet att utföra den Ã¥tgärden." + }, + "ERROR_NOT_FOUND": { + "message": "Det begärda objektet finns inte." + }, + "ERROR_P2P_FAILURE": { + "message": "Det gÃ¥r inte att nÃ¥ värden. Detta beror troligen pÃ¥ konfigurationen av nätverket som du använder." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Tjänsten är inte tillgänglig för närvarande. Försök igen senare." + }, + "ERROR_UNEXPECTED": { + "message": "Ett oväntat fel uppstod. Rapportera problemet till utvecklarna." + }, + "EXIT_FULL_SCREEN": { + "message": "Avsluta helskärmsläge" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Det gick inte att Ã¥terställa programmet. Du kan fortfarande skicka en felrapport." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Ã…terställ programmet. Ändringar som inte har sparats gÃ¥r förlorade." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Jag kan inte öppna appen." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Appen är för lÃ¥ngsam." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Jag kan inte öppna mina Google Drive-filer." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Jag ser inte mina sparade filer online pÃ¥ Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Jag har problem med tangentbordet eller musen." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Hjälp oss att lösa problemet och berätta vad som har gÃ¥tt fel." + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "NÃ¥got annat." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Välj …" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Din e-postadress skickas tillsammans med din feedback sÃ¥ att vi kan kontakta dig om vi behöver mer information." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Rapportera ett problem" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Bifoga programloggar som en hjälp för oss att Ã¥tgärda problemet (loggar kan innehÃ¥lla privata uppgifter)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Programloggar kan innehÃ¥lla privata uppgifter, som din identitet (e-postadress) och namn pÃ¥ och egenskaper hos filer och mappar pÃ¥ Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Den här informationen används bara för att diagnostisera det som felrapporten gäller. Bara den som arbetar med ärendet kan se den och den sparas i högst 30 dagar." + }, + "FOOTER_CONNECTING": { + "message": "Anslutningen upprättas …" + }, + "FOOTER_WAITING": { + "message": "väntar pÃ¥ anslutning ..." + }, + "FOR_PLATFORM_MAC": { + "message": "För Mac (OS X 10.6 eller senare)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "För Windows (XP eller senare)" + }, + "FULL_SCREEN": { + "message": "Helskärm" + }, + "GET_STARTED": { + "message": "Kom igÃ¥ng" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Acceptera" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Godkänn inte" + }, + "HELP": { + "message": "Hjälp" + }, + "HOME_ACCESS_BUTTON": { + "message": "Ã…tkomst" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Visa och styra en delad dator." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Du kan fÃ¥ säker Ã¥tkomst till den här datorn med Chrome Remote Desktop." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Byt PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Datorn delas under ett annat konto." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Visa/redigera" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Den här datorn är konfigurerad för att tillÃ¥ta att en eller flera klienter ansluter utan att en pinkod mÃ¥ste anges." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Aktivera fjärranslutningar" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Du mÃ¥ste aktivera fjärranslutningar om du vill använda Chrome Remote Desktop för att fÃ¥ Ã¥tkomst till den här datorn." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Inaktivera fjärranslutningar" + }, + "HOME_SHARE_BUTTON": { + "message": "Dela" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Dela den här datorn sÃ¥ att en annan användare kan visa och styra den." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(den här funktionen är ännu inte tillgänglig för din dator)" + }, + "HOST_CATEGORY": { + "message": "Värd" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Ã…tkomst nekad för klient: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Klient ansluten: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Klient frÃ¥nkopplad: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP-adress för kanal för klient: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Om du vill aktivera fjärranslutning till en annan dator installerar du Chrome Remote Desktop pÃ¥ den och klickar pÃ¥ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Du har inte registrerat nÃ¥gra datorer. Om du vill aktivera fjärranslutningar till en dator installerar du Chrome Remote Desktop pÃ¥ datorn och klickar pÃ¥ $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Du har tidigare loggat in som $1$ ($2$). Om du vill kunna ansluta till de datorer som sparats i det kontot $3$loggar du in i Google Chrome$4$ med det kontot och installerar om Chrome Remote Desktop.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Programuppdateringar sker oftast automatiskt, men kan ibland misslyckas. Uppdateringen av programvaran bör inte ta mer än nÃ¥gra minuter och du kan göra den när du är fjärransluten till datorn." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop pÃ¥ $1$ är inaktuellt och mÃ¥ste uppdateras.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Hjälp oss att förbättra Chrome Remote Desktop genom att lÃ¥ta oss samla in användningsstatistik och felrapporter." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Om du vill skydda Ã¥tkomsten till den här datorn väljer du en PIN-kod som bestÃ¥r av $1$minst sex siffror$2$. PIN-koden krävs när du ansluter frÃ¥n en annan plats.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Det gick inte att starta fjärrÃ¥tkomsttjänsten." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome laddar ned installationsprogrammet för fjärranslutningsvärden Chrome Remote Desktop Host. Kör installationsprogrammet sÃ¥ fort nedladdningen är klar." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Kör installationsprogrammet innan du fortsätter." + }, + "HOST_SETUP_STARTED": { + "message": "Fjärranslutningar har aktiverats för den här datorn." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Kontrollera datorns inställningar för energisparfunktioner och se till att den inte försätts i viloläge vid inaktivitet." + }, + "HOST_SETUP_STARTING": { + "message": "Fjärranslutningar aktiveras för den här datorn ..." + }, + "HOST_SETUP_STOPPED": { + "message": "Fjärranslutningar har inaktiverats för den här datorn." + }, + "HOST_SETUP_STOPPING": { + "message": "Fjärranslutningar inaktiveras för den här datorn ..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Det gick inte att inaktivera fjärrÃ¥tkomst till den här datorn. Försök igen senare." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "När du laddar ned installationsprogrammet för fjärranslutningsvärden Chrome Remote Desktop godkänner du Googles $1$användarvillkor$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN-koden har uppdaterats." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Det gick inte att uppdatera PIN-koden. Försök igen senare." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN-koden för den här datorn uppdateras …" + }, + "HOST_STARTED": { + "message": "Värd startad för användaren: %1." + }, + "HOST_STOPPED": { + "message": "Värden stoppades." + }, + "IDLE_CONTINUE": { + "message": "Fortsätt" + }, + "IDLE_DISCONNECT": { + "message": "Koppla frÃ¥n nu" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Sessionen med $1$ har varit inaktiv en stund och kommer snart att kopplas frÃ¥n.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Till den här datorn" + }, + "INSTALLER_DOWNLOAD": { + "message": "Ladda ned installationsprogrammet för fjärranslutningsvärden Chrome Remote Desktop" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Om du vill dela ditt skrivbord ger du Ã¥tkomstkoden nedan till den som ska hjälpa dig." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "När koden anges startar delningssessionen." + }, + "INVALID_PIN": { + "message": "Ange en PIN-kod som bestÃ¥r av minst sex siffror." + }, + "IT2ME_FIRST_RUN": { + "message": "Skärmdelning mellan användare är perfekt för fjärrstyrd teknisk support." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Tangentbordslayouter" + }, + "LABEL_CONNECTED": { + "message": "Ansluten:" + }, + "LAST_ONLINE": { + "message": "$1$ (senast online $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Läs mer." + }, + "LEARN_MORE": { + "message": "Läs mer." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Preferences" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop Host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Uninstaller" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Använd höger Ctrl-tangent för Windows-tangenten (⌘ pÃ¥ Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Maximera fönstret" + }, + "ME2ME_FIRST_RUN": { + "message": "FÃ¥ Ã¥tkomst till din egen dator var du än är." + }, + "MESSAGE_GENERATING": { + "message": "Ã…tkomstkod genereras ..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Chrome Remote Desktop-sessionen har avslutats." + }, + "MESSAGE_SHARED": { + "message": "Ditt skrivbord delas just nu med $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Minimera fönstret" + }, + "MODE_AUTHORIZE": { + "message": "Auktorisera" + }, + "MODE_IT2ME": { + "message": "Fjärrhjälp" + }, + "MODE_ME2ME": { + "message": "Mina datorer" + }, + "NEW_WINDOW": { + "message": "Nytt fönster ..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Alla kopplade klienter har tagits bort." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Integrering med skrivbordet stöds inte pÃ¥ den här plattformen. Du kan använda appen ändÃ¥, men användarupplevelsen försämras." + }, + "OFFLINE": { + "message": "$1$ (offline)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Värdinitieringen misslyckades." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ogiltig värdkonfiguration." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ogiltig domän för värdens ägare." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ogiltigt värd-id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Värden konfigurerades med ogiltiga användaruppgifter för OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Värden som kördes pÃ¥ konsolens inloggningsskärm har avslutats för att stödja Curtain Mode genom att byta till en värd som körs i en användarspecifik session." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Värdenheten startar om för att implementera en ändring i policyn." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Värdenheten kunde inte läsa policyn." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Värdenheten har stängts av." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Okänt värdfel: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ogiltig ägare till värden." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Alternativ" + }, + "OUTGOING_CONNECTIONS": { + "message": "FrÃ¥n den här datorn" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Följande klienter har kopplats ihop med den här datorn och kan ansluta utan att en pinkod behöver anges. Du kan Ã¥terkalla behörigheten när som helst, antingen individuellt eller för alla klienter." + }, + "PAIRED_CLIENT_DATE": { + "message": "Kopplade den" + }, + "PAIRED_CLIENT_NAME": { + "message": "Klient" + }, + "PIN": { + "message": "PIN-kod" + }, + "PINS_NOT_EQUAL": { + "message": "Ange samma PIN-kod i bÃ¥da rutorna." + }, + "PIN_MESSAGE": { + "message": "Ange din PIN-kod för $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Ange din pinkod för fjärrdatorn." + }, + "PRODUCT_DESCRIPTION": { + "message": "FÃ¥ Ã¥tkomst till andra datorer eller ge andra Ã¥tkomst till din dator över internet pÃ¥ ett säkert sätt." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "Ã…teranslut" + }, + "REMEMBER_PIN": { + "message": "Be inte om en pinkod igen när du ansluter till den här värden frÃ¥n den här enheten." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Huvudbibliotek" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Integreringsprocess för Desktop" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Program som används för att skicka kommandon till värddatorn för Chrome Remote Desktop." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Värdprocess" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Lokal meddelandevärd för fjärrvärdshantering" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Lokal meddelandevärd för fjärrhjälp" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Fjärrkommunikationsprocess för säkerhetsnyckel" + }, + "RESIZE_TO_CLIENT": { + "message": "Anpassa skrivbordets storlek" + }, + "RESTART_BUTTON": { + "message": "Starta om nu" + }, + "RESTORE_WINDOW": { + "message": "Ã…terställ fönstret" + }, + "RETRY": { + "message": "Försök igen" + }, + "SCREEN_OPTIONS": { + "message": "Skärmalternativ" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Skicka Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Rapportera ett problem …" + }, + "SEND_KEYS": { + "message": "Skicka tangenter" + }, + "SEND_PRINT_SCREEN": { + "message": "Skicka PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Med den här tjänsten aktiveras inkommande anslutningar frÃ¥n Chrome Remote Desktop-klienter." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Den här inställningen hanteras enligt domänprincipen." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Dela" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Avbryt" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Vill du dela den här datorn sÃ¥ att en annan användare kan visa och styra den?" + }, + "SHOW_STATS": { + "message": "Visa statistik" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Visa statistik (anslutning: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Krymp den sÃ¥ att den passar in" + }, + "SIGN_IN_BUTTON": { + "message": "Logga in" + }, + "SIGN_OUT_BUTTON": { + "message": "Logga ut" + }, + "STOP_SHARING_BUTTON": { + "message": "Sluta dela" + }, + "SURVEY_INVITATION": { + "message": "Vill du hjälpa till att förbättra Chrome Remote Desktop? $1$Fyll i enkäten.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Tid" + }, + "TOGGLE_STATS": { + "message": "Visa statistik" + }, + "TOOLTIP_CONNECT": { + "message": "Anslut till $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Inaktivera fjärranslutningar till den här datorn" + }, + "TOOLTIP_REFRESH": { + "message": "Uppdatera listan med värdar" + }, + "TOOLTIP_RENAME": { + "message": "Ändra datorns namn" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (inaktuellt)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Konto" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Bekräfta ditt konto och pinkoden nedan för att tillÃ¥ta Ã¥tkomst via Chrome Remote Desktop." + }, + "WARNING_NAT_DISABLED": { + "message": "OBS! Enligt policyinställningarna tillÃ¥ts endast anslutning mellan datorer i ditt nätverk." + }, + "WARNING_NOT_WINDOWED": { + "message": "Obs! Om du vill vara säker pÃ¥ att alla kortkommandon är tillgängliga kan du ställa in Chrome Remote Desktop pÃ¥ Öppna som fönster." + }, + "WHY_IS_THIS_SAFE": { + "message": "Varför är det säkert?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Fönster" + }, + "WORKING": { + "message": "Arbetar ..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sw/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sw/messages.json new file mode 100644 index 000000000000..c79e74a1bb98 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/sw/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Kubali na Usakinishe" + }, + "ACCESS_CODE": { + "message": "Msimbo wa ufikiaji" + }, + "ACCESS_CODE_TIMER": { + "message": "Msimbo huu wa ufikiji utaisha muda baada ya $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Mwitiko" + }, + "ALL_CONNECTIONS": { + "message": "Miunganisho yote" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Charaza PIN upya" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Ghairi" + }, + "CLEAR_HISTORY": { + "message": "Futa historia" + }, + "CLOSE": { + "message": "Funga" + }, + "CLOSE_PROMPT": { + "message": "Kuondoka kwenye ukurasa huu kutakamilisha kipindi chako cha Eneo-kazi la Mbali la Chrome." + }, + "CLOSE_WINDOW": { + "message": "Funga dirisha" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Una uhakika kuwa unataka kufunga miunganisho ya mbali kwa $1$? Ukibadilisha nia, utahitajika kutembelea kompyuta hiyo ili uwashe miunganisho upya.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Muunganisho haujafaulu" + }, + "CONNECTION_FROM_HEADER": { + "message": "Kutoka" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Historia ya Muunganisho" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Wastani" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Mzuri" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Mbaya" + }, + "CONNECTION_TO_HEADER": { + "message": "Kwa" + }, + "CONNECT_ANYWAY": { + "message": "Hata hivyo unganisha" + }, + "CONNECT_BUTTON": { + "message": "Unganisha" + }, + "CONTINUE_BUTTON": { + "message": "Endelea" + }, + "CONTINUE_PROMPT": { + "message": "Kwa sasa unashiriki mashine hii na mtumiaji mwengine. Unataka kuendelea kushiriki?" + }, + "CONTROLLER_NAME": { + "message": "Kidhibiti cha Seva Pangishi ya Kompyuta ya Mbali ya Chrome" + }, + "COPYRIGHT": { + "message": "Hakimiliki 2013 Google Inc. Haki Zote Zimehifadhiwa." + }, + "CREDITS": { + "message": "Mikopo" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Futa zote" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Futa" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Ili kuendelea lazima uipe kompyuta yako ruhusa za ufikiaji zilizoongezwa kwanza. Unahitaji kufanya hili mara moja pekee." + }, + "DESCRIPTION_CONNECT": { + "message": "Mwombe mtumiaji wa kompyuta unayotaka kufikia abofye “$1$†na akupe nambari ya kuthibitisha ya idhini ya kufikia.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Eneo-kazi la Mbali la Chrome hukuruhusu kushiriki kompyuta yako kwa usalama kwenye Wavuti. Watumiaji wote wawili lazima wawe na programu ya Eneo-kazi la Mbali la Chrome, inayoweza kupatikana katika $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Seva pangishi ya mbali inakuhitaji uhalalishe hadi kwenye tovuti nyingine. Ili kuendelea, sharti uipe Chrome Remote Desktop idhini za ziada ili ifikie anwani hii:" + }, + "DISABLE_HOST": { + "message": "Zima" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Tenganisha" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Huduma ya Kompyuta ya Mbali ya Chrome" + }, + "DURATION_HEADER": { + "message": "Muda" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Huna ruhusa ya kuendesha programu hii." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Uidhinishaji haujafaulu. Tafadhali ingia kwenye Chrome tena." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Baadhi ya vipengele vinavyohitajika havipo. Tafadhali hakikisha kuwa umesakinisha toleo jipya la programu na ujaribu tena." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Hitilafu ya mtandao imetokea. Tutazima na kuwasha programu kifaa chako kikiwa mtandaoni tena." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Kompyuta ya mbali imeshindwa kuanzisha kipindi. Tatizo likiendelea tafadhali jaribu kuweka mipangilio ya seva pangishi tena." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Kompyuta ya mbali haikubali maombi ya muunganisho. Tafadhali thibitisha kuwa iko kwenye mtandao na ujaribu tena." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Miunganisho ya kompyuta ya mbali imezuiwa kwa muda kwa sababu mtu alikuwa akijaribu kuunganisha kwayo kwa PIN batili. Tafadhali jaribu tena baadaye." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Ilishindwa kusajili kompyuta hii." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Toleo lisilooana la itifaki liligunduliwa. Tafadhali hakikisha kuwa umesakinisha toleo jipya la programu kwenye kompyuta zote mbili na ujaribu tena." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Msimbo wa ufikiaji ni batili. Tafadhali jaribu tena." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Mipangilio ya sera hairuhusu kushiriki kompyuta hii kama mpangishaji wa Eneokazi la Mbali la Chrome. Wasiliana na msimamizi wa mfumo wako kwa usaidizi." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Kipindi cha mbali kimekwisha muda." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Baadhi ya vipengele vinavyohitajika havipo. Tafadhali hakikisha kuwa unatumia toleo jipya la Chrome na ujaribu tena." + }, + "ERROR_NACL_DISABLED": { + "message": "Baadhi ya vipengele vinavyohitajika havipo. Tafadhali nenda kwenye chrome://plugins na uhakikishe kipengee cha Native Client kimewashwa." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Kipengele kinachohitajika kimeacha kufanya kazi. Tafadhali ripoti tatizo hili kwa wasanidi programu." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Haikuweza kuunganisha kwenye mtandao. Tafadhali angalia kuwa kifaa chako kipo mtandaoni." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Hujaingia kwenye Chrome. Tafadhali ingia na ujaribu tena." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Huna ruhusua ya kutekeleza hatua hiyo." + }, + "ERROR_NOT_FOUND": { + "message": "Kipengele kilichoombwa hakipo." + }, + "ERROR_P2P_FAILURE": { + "message": "Haiwezi kufikia seva pangishi. Labda hii ni kwa sababu ya usanidi wa mtandao unaotumia." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Huduma haipatikani kwa muda. Tafadhali jaribu tena baadaye." + }, + "ERROR_UNEXPECTED": { + "message": "Hitilafu isiyotarajiwa imetokea. Tafadhali ripoti tatizo hili kwa wasanidi programu." + }, + "EXIT_FULL_SCREEN": { + "message": "Ondoka kwenye Skrini nzima" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Haikuweza kuweka upya programu. Bado unaweza kutuma ripoti ya hitilafu." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Weka upya programu. Utapoteza kazi yoyote ambayo haijahifadhiwa." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Siwezi kuifungua programu." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Programu inafanya kazi polepole sana." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Siwezi kufungua faili zangu za Hifadhi ya Google." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Siwezi kuona faili zangu zilizohifadhiwa mtandaoni katika Hifadhi ya Google." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Ninatatizwa na kibodi au kipanya changu." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Ili kutusaidia kutatua tatizo lako, tafadhali tuambie kilichokwenda kombo:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Kitu kingine." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Chagua..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Ili kuturuhusu kuwasiliana nawe kwa maelezo zaidi, anwani yako ya barua pepe itajumuishwa katika maoni yoyote unayowasilisha." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Ripoti tatizo" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Jumuisha kumbukumbu za programu ili kutusaidia kutatua tatizo lako (kumbukumbu zinaweza kujumuisha maelezo ya binafsi)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Kumbukumbu za programu zinaweza kujumisha maelezo ya faragha, ikiwemo utambulisho wako (anwani ya barua pepe) na majina na mipangilio ya faili na folda katika Hifadhi ya Google." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Maelezo haya yanatumika tu kwa kutambua tatizo unaloripoti, yanapatikana tu kwa mtu anayechunguza ripoti yako, na yanahifadhiwa kwa siku zisizozidi 30." + }, + "FOOTER_CONNECTING": { + "message": "Inaunganisha..." + }, + "FOOTER_WAITING": { + "message": "inasubiri muunganisho…" + }, + "FOR_PLATFORM_MAC": { + "message": "Kwa Mac (OS X 10.6 na matoleo ya baadaye)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Kwa Windows (XP na matoleo ya baadaye)" + }, + "FULL_SCREEN": { + "message": "Skrini nzima" + }, + "GET_STARTED": { + "message": "Anza" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Kubali" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Kataa" + }, + "HELP": { + "message": "Usaidizi" + }, + "HOME_ACCESS_BUTTON": { + "message": "Ufikiaji" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Ona na udhibiti kompyuta iliyoshirikiwa." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Unaweza kufikia kompyuta hii kwa usalama kutumia Eneo-kazi la Mbali la Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Badilisha PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Kompyuta hii kwa sasa inashirikiwa chini ya akaunti tofauti." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Tazama/badilisha" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Kompyuta hii imesanidiwa kuruhusu kiteja kimoja au zaidi kuunganisha bila kuingiza PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Washa miunganisho ya mbali" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Lazima uwashe miunganisho ya mbali ukitaka kutumia Eneo-kazi la Mbali la Chrome kufikia kompyuta hii." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Funga miunganisho ya mbali" + }, + "HOME_SHARE_BUTTON": { + "message": "Shiriki" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Shiriki kompyuta hii ili mtumiaji mwengine aone na adhibiti." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(kipengele hiki bado hakipatikani kwa kompyuta yako)" + }, + "HOST_CATEGORY": { + "message": "Mpangishi" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Kiteja kimenyimwa idhini ya kufikia: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Kiteja kimeunganishwa: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Kiteja kimeondolewa: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP ya Kituo cha kiteja: %1 ip='%2' ip ya mpangishi='%3' kituo='%4' muunganisho='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Ili uwashe miunganisho ya mbali kwenye kompyuta tofauti, sakinisha Eneo-kazi la Mbali la Chrome na ubofye “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Huna kompyuta zilizosajiliwa. Ili uwashe miunganisho ya mbali, sakinisha Eneo-kazi la Mbali la Chrome hapo na ubofye “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Mwanzoni uliingia katika akaunti kama $1$ ($2$). Ili kufikia kompyuta zako katika akaunti hiyo, $3$ingia katika Google Chrome$4$ kwa akaunti hiyo na usakinishe tena Kompyuta ya Mbali kwenye Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Usasishaji wa programu kwa kawaida hufanyika kiotomatiki, lakini wakati mwingine unaweza kushindwa japo kwa nadra. Kusasisha programu kunapaswa kuchukua si zaidi ya dakika chache na kunaweza kufanyika wakati imeunganishwa kwa kompyuta yako kwa mbali." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Kompyuta ya Mbali ya Chrome kwenye $1$ imepitwa na wakati na inahitaji kusasishwa.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Tusaidie kuboresha Eneo-kazi la Mbali la Chrome kwa kuturuhusu tukusanye takwimu za matumizi na ripoti za hitilafu." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Ili ulinde ufikiaji kwenye kompyuta hii, tafadhali chagua PIN ya $1$angalau tarakimu sita$2$. PIN hii itahitajika utakapounganisha kutoka eneo jingine.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Imeshindwa kuanza huduma ya ufikiaji wa mbali." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome inapakua kisakinishi cha Seva pangishi cha Eneo-kazi la Mbali la Chrome. Mara upakuaji unapokamilika, tafadhali endesha kisakinishi kabla ya kuendelea." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Tafadhali endesha kisakinishi kabla ya kuendelea." + }, + "HOST_SETUP_STARTED": { + "message": "Miunganisho ya mbali ya kompyuta hii imefungwa." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Tafadhali kagua mipangilio ya usimamizi wa nishati wa kompyuta yako na uhakikishe kuwa haijasanidiwa kulala inapokuwa haifanyi kitu." + }, + "HOST_SETUP_STARTING": { + "message": "Inawasha miunganisho ya mbali kwa kompyuta hii..." + }, + "HOST_SETUP_STOPPED": { + "message": "Miunganisho ya mbali ya kompyuta hii imefungwa." + }, + "HOST_SETUP_STOPPING": { + "message": "Inafunga miunganisho ya mbali ya kompyuta hii..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Imeshindwa kufunga ufikiaji wa mbali kwenye kompyuta hii. Tafadhali jaribu tena baadaye." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Kwa kupakua Kisakinishaji cha Seva Pangishi ya Programu ya Chrome ya Ufikiaji wa Kompyuta kutoka Mbali, unakubaliana na $1$Sheria na Masharti ya Google$4.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN yako imesasishwa." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Imeshindwa kusasisha PIN. Tafadhali jaribu tena baadaye." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "PIN ya kompyuta hii inasasishwa..." + }, + "HOST_STARTED": { + "message": "Seva pangishi ya mtumiaji: %1 Imeanza." + }, + "HOST_STOPPED": { + "message": "Mpangishi amesimamishwa." + }, + "IDLE_CONTINUE": { + "message": "Endelea" + }, + "IDLE_DISCONNECT": { + "message": "Ondoa sasa" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Kipindi chako cha $1$ hakijawa kikitumika kwa muda na kitaondolewa baada ya muda mfupi.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Kwenye kompyuta hii" + }, + "INSTALLER_DOWNLOAD": { + "message": "Pakua Kisakinishaji cha Seva Pangishi ya Programu ya Chrome ya Ufikiaji wa Kompyuta kutoka Mbali" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Ili uanze kushiriki enezo-kazi lako, toa msimbo wa ufikiji hapa chini kwa mtu atakayekuwa akikusaidia." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Mara tu anapoingiza msimbo kipindi chako cha kushiriki kitaanza." + }, + "INVALID_PIN": { + "message": "Tafadhali ingiza PIN iliyo na tarakimu sita au zaidi." + }, + "IT2ME_FIRST_RUN": { + "message": "Kushiriki skrini kwa mtumiaji hadi mtumiaji, ni bora kwa msaada wa kiufundi wa mbali." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Mipangilio ya kibodi" + }, + "LABEL_CONNECTED": { + "message": "Umeunganishwa:" + }, + "LAST_ONLINE": { + "message": "$1$ (mara ya mwisho mtandaoni $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Pata maelezo ya jinsi ya.\n" + }, + "LEARN_MORE": { + "message": "Pata maelezo zaidi." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Mapendeleo ya Seva Pangishi ya Kompyuta ya Mbali ya Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Mpangishi wa Kompyuta\nya Mbali ya Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Kiondoa Seva Pangishi ya Kompyuta ya Mbali cha Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Tumia Ctrl ya kulia kwa kitufe cha Win (⌘ kwenye Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Zidisha dirisha" + }, + "ME2ME_FIRST_RUN": { + "message": "Fikia kompyuta yako mwenyewe kutoka mahali popote." + }, + "MESSAGE_GENERATING": { + "message": "Inazalisha msimbo wa ufikiaji…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Kipindi chako cha Eneo-kazi la Mbali la Chrome kimekamilika." + }, + "MESSAGE_SHARED": { + "message": "Kwa sasa kompyuta yako inashirikiwa na $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Punguza dirisha" + }, + "MODE_AUTHORIZE": { + "message": "Idhinisha" + }, + "MODE_IT2ME": { + "message": "Usaidizi wa Mbali" + }, + "MODE_ME2ME": { + "message": "Kompyuta Zangu" + }, + "NEW_WINDOW": { + "message": "Dirisha jipya..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Viteja vyote vilivyooanishwa vimefutwa." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Ujumuishaji wa eneo-kazi hautumiki kwenye mfumo huu. Bado unaweza kutumia programu, lakini hali ya mtumiaji itaharibiwa." + }, + "OFFLINE": { + "message": "$1$ (nje ya mtandao)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Seva pangishi haikufaulu kuanzisha." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Usanidi wa seva pangishi si sahihi." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Kikoa cha mmiliki wa seva pangishi si sahihi." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Kitambulisho cha seva pangishi si sahihi." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Seva pangishi imesanidiwa pamoja na kitambulisho cha OAuth ambacho si sahihi." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Seva pangishi inayotumika kwenye skrini ya dashibodi imezima ili kutumia hali ya pazia kwa kubadilisha hadi seva pangishi inayotumika katika kipindi mahususi cha mtumiaji." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Pangishi inazima halafu iwashe, ili izingatie mabadiliko ya sera." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Pangishi haijafaulu kusoma sera." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Pangishi imezima." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Hitilafu ya seva pangishi isiyotambulika: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Mmiliki wa seva pangishi si sahihi." + }, + "OK": { + "message": "Sawa" + }, + "OPTIONS_MENU": { + "message": "Chaguo" + }, + "OUTGOING_CONNECTIONS": { + "message": "Kutoka kwenye kompyuta hii" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Viteja vifuatavyo vimeoanishwa na kompyuta hii na vinaweza kuunganisha bila kutoa PIN. Unaweza kufuta ruhusa hii wakati wowote, iwe kwa kimoja, au viteja vyote." + }, + "PAIRED_CLIENT_DATE": { + "message": "Tarehe ya kuoanisha" + }, + "PAIRED_CLIENT_NAME": { + "message": "Kiteja" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Tafadhali ingiza PIN ile ile katika vikasha vyote viwili." + }, + "PIN_MESSAGE": { + "message": "Tafadhali ingiza PIN yako ya $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Tafadhali weka PIN yako ya kompyuta ya mbali." + }, + "PRODUCT_DESCRIPTION": { + "message": "Fikia kompyuta zingine au uruhusu mtumiaji mwingine kufikia kompyuta yako kwa usalama kwenye Intaneti." + }, + "PRODUCT_NAME": { + "message": "Eneo-kazi la Mbali la Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Utiririshaji wa Programu ya Chrome" + }, + "RECONNECT": { + "message": "Unganisha upya" + }, + "REMEMBER_PIN": { + "message": "Usiulize PIN tena unapounganisha kwenye seva pangishi kutoka kwenye kifaa hiki." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Mkataba Kuu" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Mchakato wa Muingiliano wa Eneo-kazi" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Programu ya kupeleka amri kwa mpangishi wa kompyuta ya mbali kwenye Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Mchakato wa Seva Pangishi" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Mpangishi wa ujumbe halisi kwa usimamizi wa mpangishi wa mbali" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Mpangishi wa ujumbe halisi kwa usaidizi wa mbali" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Mchakato wa Mbali wa Ufunguo wa Usalama" + }, + "RESIZE_TO_CLIENT": { + "message": "Badilisha ukubwa wa eneo-kazi ili litoshe" + }, + "RESTART_BUTTON": { + "message": "Zima na uwashe sasa" + }, + "RESTORE_WINDOW": { + "message": "Rejesha dirisha" + }, + "RETRY": { + "message": "Jaribu tena" + }, + "SCREEN_OPTIONS": { + "message": "Chaguo za skrini" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Tuma Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Ripoti tatizo..." + }, + "SEND_KEYS": { + "message": "Vitufe vya kutuma" + }, + "SEND_PRINT_SCREEN": { + "message": "Tuma PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Huduma hii inawezesha miunganisho inayoingia kutoka kwa viteja vya Kompyuta za Mbali za Chrome" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Mipangilio inadhibitiwa na sera ya kikoa chako." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Shiriki" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Ghairi" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Ungependa kushiriki kompyuta hii kwa mtumiaji mwingine ili kuangalia na kudhibiti?" + }, + "SHOW_STATS": { + "message": "Onyesha takwimu" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Onyesha takwimu (muunganisho: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Punguza ili itoshe" + }, + "SIGN_IN_BUTTON": { + "message": "Ingia" + }, + "SIGN_OUT_BUTTON": { + "message": "Ondoka" + }, + "STOP_SHARING_BUTTON": { + "message": "Acha Kushiriki" + }, + "SURVEY_INVITATION": { + "message": "Je, unataka kusaidia kuboresha Kompyuta ya Mbali ya Chrome? $1$Shiriki utafiti.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Muda" + }, + "TOGGLE_STATS": { + "message": "Onyesha takwimu" + }, + "TOOLTIP_CONNECT": { + "message": "Unganisha kwenye $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Funga miunganisho ya mbali kwenye kompyuta hii" + }, + "TOOLTIP_REFRESH": { + "message": "Onyesha upya orodha ya seva pangishi" + }, + "TOOLTIP_RENAME": { + "message": "Badilisha jina la kompyuta" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (imepitwa na wakati)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Akaunti" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Tafadhali thibitisha akaunti yako na PIN hapa chini ili kuruhusu ufikiaji kwa Kompyuta ya Mbali ya Chrome" + }, + "WARNING_NAT_DISABLED": { + "message": "DOKEZO: Mipangilio ya sera inakubali miunganisho kati ya kompyuta zilizo katika mtandao wako." + }, + "WARNING_NOT_WINDOWED": { + "message": "KUMBUKA: Ili kuhakikisha kuwa mikato yote ya kibodi inapatikana, unaweza kusanidi Kompyuta ya Mbali ya Chrome ili \"Ifungue kama dirisha'’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Kwa nini hii ni salama?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Inafanya kazi…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ta/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ta/messages.json new file mode 100644 index 000000000000..333ee5e35bde --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/ta/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "à®à®±à¯à®±à¯ நிறà¯à®µà¯" + }, + "ACCESS_CODE": { + "message": "அணà¯à®•à®²à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯" + }, + "ACCESS_CODE_TIMER": { + "message": "இநà¯à®¤ அணà¯à®•à®²à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯ $1$ வினாடியில௠காலாவதியாகி விடà¯à®®à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "கரà¯à®¤à¯à®¤à¯" + }, + "ALL_CONNECTIONS": { + "message": "எலà¯à®²à®¾ இணைபà¯à®ªà¯à®•à®³à¯à®®à¯" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN ஠மீணà¯à®Ÿà¯à®®à¯ தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®•" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "ரதà¯à®¤à¯ செயà¯" + }, + "CLEAR_HISTORY": { + "message": "வரலாறà¯à®±à¯ˆ அழி" + }, + "CLOSE": { + "message": "மூடà¯" + }, + "CLOSE_PROMPT": { + "message": "இநà¯à®¤à®ªà¯ பகà¯à®•à®¤à¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெளியேறினாலà¯, உஙà¯à®•à®³à¯ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ அமரà¯à®µà¯ˆ à®®à¯à®Ÿà®¿à®•à¯à®•à¯à®®à¯." + }, + "CLOSE_WINDOW": { + "message": "சாளரதà¯à®¤à¯ˆ மூடà¯à®•" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$ கà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ நிசà¯à®šà®¯à®®à®¾à®• à®®à¯à®Ÿà®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾? மனம௠மாறிவிடà¯à®Ÿà®¾à®²à¯, இணைபà¯à®ªà¯à®•à®³à¯ˆ மீணà¯à®Ÿà¯à®®à¯ செயலாகà¯à®•, நீஙà¯à®•à®³à¯ அநà¯à®¤à®•à¯ கணினியை மீணà¯à®Ÿà¯à®®à¯ பாரà¯à®µà¯ˆà®¯à®¿à®Ÿ வேணà¯à®Ÿà®¿à®¯à®¿à®°à¯à®•à¯à®•à¯à®®à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "இணைபà¯à®ªà¯à®¤à¯ தோலà¯à®µà®¿" + }, + "CONNECTION_FROM_HEADER": { + "message": "அனà¯à®ªà¯à®ªà¯à®¨à®°à¯" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "இணைபà¯à®ªà¯ வரலாறà¯" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "மோசமிலà¯à®²à¯ˆ" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "நனà¯à®±à¯" + }, + "CONNECTION_QUALITY_POOR": { + "message": "மோசமà¯" + }, + "CONNECTION_TO_HEADER": { + "message": "பெறà¯à®¨à®°à¯" + }, + "CONNECT_ANYWAY": { + "message": "எபà¯à®ªà®Ÿà®¿à®¯à¯à®®à¯ இணை" + }, + "CONNECT_BUTTON": { + "message": "இணை" + }, + "CONTINUE_BUTTON": { + "message": "தொடரà¯à®•" + }, + "CONTINUE_PROMPT": { + "message": "தறà¯à®ªà¯‹à®¤à¯ இநà¯à®¤à®•à¯ கணினியை மறà¯à®±à¯Šà®°à¯ பயனரà¯à®Ÿà®©à¯ பகிரà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯. தொடரà¯à®¨à¯à®¤à¯ பகிர விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" + }, + "CONTROLLER_NAME": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ பà¯à®°à®µà®©à¯ கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿" + }, + "COPYRIGHT": { + "message": "பதிபà¯à®ªà¯à®°à®¿à®®à¯ˆ 2013 Google Inc. அனைதà¯à®¤à¯ உரிமைகளà¯à®®à¯ பாதà¯à®•à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®µà¯ˆ." + }, + "CREDITS": { + "message": "பஙà¯à®•à®³à®¿à®¤à¯à®¤à®µà®°à¯à®•à®³à¯" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "எலà¯à®²à®¾à®®à¯ நீகà¯à®•à¯" + }, + "DELETE_PAIRED_CLIENT": { + "message": "நீகà¯à®•à¯" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "தொடரà¯à®µà®¤à®±à¯à®•à¯, உஙà¯à®•à®³à¯ கணினிகà¯à®•à¯ நீடà¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ அணà¯à®•à®²à¯ அனà¯à®®à®¤à®¿à®•à®³à¯ˆ à®®à¯à®¤à®²à®¿à®²à¯ வழஙà¯à®• வேணà¯à®Ÿà¯à®®à¯. இதை நீஙà¯à®•à®³à¯ ஒர௠மà¯à®±à¯ˆ மடà¯à®Ÿà¯à®®à¯‡ செயà¯à®¯ வேணà¯à®Ÿà®¿à®¯à®¿à®°à¯à®•à¯à®•à¯à®®à¯." + }, + "DESCRIPTION_CONNECT": { + "message": "நீஙà¯à®•à®³à¯ அணà¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ கணினியின௠பயனரிடமà¯, “$1$â€à®à®•à¯ கிளிக௠செயà¯à®¤à¯ அணà¯à®•à®²à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ˆ அளிகà¯à®•à¯à®®à¯à®ªà®Ÿà®¿ கேடà¯à®•à®µà¯à®®à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "இணையதà¯à®¤à®¿à®²à¯ உஙà¯à®•à®³à¯ கணினியைப௠பாதà¯à®•à®¾à®ªà¯à®ªà®¾à®• பகிர Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®¿à®±à®¤à¯. இர௠பயனரà¯à®•à®³à¯à®®à¯ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ இயகà¯à®• வேணà¯à®Ÿà¯à®®à¯, அதை $1$ இல௠காணலாமà¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "ஒர௠மூனà¯à®±à®¾à®®à¯ தரபà¯à®ªà¯ இணையதளதà¯à®¤à¯ˆ நீஙà¯à®•à®³à¯ à®…à®™à¯à®•à¯€à®•à®°à®¿à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯ எனà¯à®±à¯ தொலைநிலை ஹோஸà¯à®Ÿà¯ கேடà¯à®•à®¿à®±à®¤à¯. தொடரà¯à®µà®¤à®±à¯à®•à¯, இநà¯à®¤ à®®à¯à®•à®µà®°à®¿à®¯à¯ˆ அணà¯à®• Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà®¿à®±à¯à®•à¯ கூடà¯à®¤à®²à¯ அனà¯à®®à®¤à®¿à®•à®³à¯ˆ நீஙà¯à®•à®³à¯ வழஙà¯à®• வேணà¯à®Ÿà¯à®®à¯:" + }, + "DISABLE_HOST": { + "message": "à®®à¯à®Ÿà®•à¯à®•à¯" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "தொடரà¯à®ªà¯ˆà®¤à¯ தà¯à®£à¯à®Ÿà®¿" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ சேவை" + }, + "DURATION_HEADER": { + "message": "மொதà¯à®¤ நேரமà¯" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "இநà¯à®¤à®ªà¯ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ இயகà¯à®•à¯à®µà®¤à®±à¯à®•à®¾à®© அனà¯à®®à®¤à®¿ உஙà¯à®•à®³à¯à®•à¯à®•à¯ இலà¯à®²à¯ˆ." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "à®…à®™à¯à®•à¯€à®•à®°à®¿à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ. Chrome இல௠மீணà¯à®Ÿà¯à®®à¯ உளà¯à®¨à¯à®´à¯ˆà®¯à®µà¯à®®à¯." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "தேவையான சில உறà¯à®ªà¯à®ªà¯à®•à®³à¯ காணவிலà¯à®²à¯ˆ. மெனà¯à®ªà¯Šà®°à¯à®³à®¿à®©à¯ சமீபதà¯à®¤à®¿à®¯ பதிபà¯à®ªà¯ˆ நிறà¯à®µà®¿à®¯à¯à®³à¯à®³à¯€à®°à¯à®•à®³à¯ எனà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿à®šà¯†à®¯à¯à®¤à¯, மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "நெடà¯à®µà¯Šà®°à¯à®•à¯ பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯. உஙà¯à®•à®³à¯ சாதனம௠மீணà¯à®Ÿà¯à®®à¯ ஆனà¯à®²à¯ˆà®©à¯ வரà¯à®®à¯à®ªà¯‹à®¤à¯ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ மீணà¯à®Ÿà¯à®®à¯ தொடஙà¯à®•à¯à®µà¯‹à®®à¯." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "தொலைநிலைக௠கணினியால௠அமரà¯à®µà¯ˆà®¤à¯ தொடஙà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ. சிகà¯à®•à®²à¯ நீடிதà¯à®¤à®¾à®²à¯ ஹோஸà¯à®Ÿà¯à®Ÿà¯ˆ மீணà¯à®Ÿà¯à®®à¯ உளà¯à®³à®®à¯ˆà®•à¯à®• à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "இணைபà¯à®ªà¯à®•à¯ கோரிகà¯à®•à¯ˆà®•à®³à¯à®•à¯à®•à¯ தொலைநிலைக௠கணினி பதில௠அளிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ. அத௠ஆனà¯à®²à¯ˆà®©à®¿à®²à¯ இரà¯à®•à¯à®•à®¿à®±à®¤à®¾ எனà¯à®ªà®¤à¯ˆà®šà¯ சரிபாரà¯à®¤à¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "ERROR_HOST_OVERLOAD": { + "message": "யாரோ à®’à®°à¯à®µà®°à¯ தவறான PIN à®à®•à¯ கொணà¯à®Ÿà¯ கணினியை இணைகà¯à®• à®®à¯à®¯à®±à¯à®šà®¿à®¤à¯à®¤à®¤à®¾à®²à¯, தொலைநிலைக௠கணினிகà¯à®•à®¾à®© இணைபà¯à®ªà¯à®•à®³à¯ தறà¯à®•à®¾à®²à®¿à®•à®®à®¾à®• தடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®©. பினà¯à®©à®°à¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "இநà¯à®¤à®•à¯ கணினியை பதிவà¯à®šà¯†à®¯à¯à®µà®¤à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "இணகà¯à®•à®®à®¿à®²à¯à®²à®¾à®¤à®ªà¯ பதிபà¯à®ªà¯ கணà¯à®Ÿà®±à®¿à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯. இரணà¯à®Ÿà¯ கணினிகளிலà¯à®®à¯ சமீபதà¯à®¤à®¿à®¯ பதிபà¯à®ªà¯ நிறà¯à®µà®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯ எனà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿à®šà¯†à®¯à¯à®¤à¯, மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "அணà¯à®•à®²à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯ தவறானதà¯. மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "கொளà¯à®•à¯ˆ அமைபà¯à®ªà¯à®•à®³à®¾à®©à®¤à¯ இநà¯à®¤à®•à¯ கணினியை Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ ஹோஸà¯à®Ÿà¯à®Ÿà®¾à®•à®ªà¯ பகிரà¯à®µà®¤à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à®¾à®¤à¯. உதவிகà¯à®•à¯ உஙà¯à®•à®³à¯ கணினி நிரà¯à®µà®¾à®•à®¿à®¯à¯ˆà®¤à¯ தொடரà¯à®ªà¯à®•à¯Šà®³à¯à®•." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "தொலைநிலை அமரà¯à®µà¯ காலாவதியானதà¯." + }, + "ERROR_MISSING_PLUGIN": { + "message": "தேவையான சில உறà¯à®ªà¯à®ªà¯à®•à®³à¯ காணவிலà¯à®²à¯ˆ. Chrome இன௠சமீபதà¯à®¤à®¿à®¯ பதிபà¯à®ªà¯ˆà®¤à¯ தான௠இயகà¯à®•à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯ எனà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿à®šà¯†à®¯à¯à®¤à¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯." + }, + "ERROR_NACL_DISABLED": { + "message": "தேவையான சில உறà¯à®ªà¯à®ªà¯à®•à®³à¯ˆà®•à¯ காணவிலà¯à®²à¯ˆ. chrome://plugins எனà¯à®ªà®¤à®±à¯à®•à¯à®šà¯ செனà¯à®±à¯ நேடà¯à®Ÿà®¿à®µà¯ கிளையனà¯à®Ÿà¯ இயகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®ªà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "தேவையான உபகரணம௠ஒனà¯à®±à®¿à®©à¯ செயலà¯à®ªà®¾à®Ÿà¯ நினà¯à®±à¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯. இநà¯à®¤à®šà¯ சிகà¯à®•à®²à¯ˆ டெவெலபà¯à®ªà®°à¯à®•à®³à¯à®•à¯à®•à¯à®¤à¯ தெரிவிகà¯à®•à®µà¯à®®à¯." + }, + "ERROR_NETWORK_FAILURE": { + "message": "பிணையதà¯à®¤à¯à®Ÿà®©à¯ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ. உஙà¯à®•à®³à¯ சாதனம௠ஆனà¯à®²à¯ˆà®©à®¿à®²à¯ இரà¯à®ªà¯à®ªà®¤à¯ˆà®šà¯ சரிபாரà¯à®•à¯à®•à®µà¯à®®à¯." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Chrome இல௠உளà¯à®¨à¯à®´à¯ˆà®¯à®µà®¿à®²à¯à®²à¯ˆ. உளà¯à®¨à¯à®´à¯ˆà®¨à¯à®¤à¯, மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "இநà¯à®¤à®šà¯ செயலை செயà¯à®µà®¤à®±à¯à®•à®¾à®© அனà¯à®®à®¤à®¿ உஙà¯à®•à®³à¯à®•à¯à®•à¯ இலà¯à®²à¯ˆ." + }, + "ERROR_NOT_FOUND": { + "message": "கோரிய பொரà¯à®³à¯ இலà¯à®²à¯ˆ." + }, + "ERROR_P2P_FAILURE": { + "message": "ஹோஸà¯à®Ÿà¯à®Ÿà¯ˆ அடைய à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ. இதà¯, ஒர௠வேளை நீஙà¯à®•à®³à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ பிணையதà¯à®¤à®¿à®©à¯ உளà¯à®³à®®à¯ˆà®ªà¯à®ªà¯ காரணமாக இரà¯à®•à¯à®•à®²à®¾à®®à¯." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "சேவை தறà¯à®•à®¾à®²à®¿à®•à®®à®¾à®• கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ. பினà¯à®©à®°à¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "ERROR_UNEXPECTED": { + "message": "எதிரà¯à®ªà®¾à®°à®¾à®¤ பிழை. இநà¯à®¤à®šà¯ சிகà¯à®•à®²à¯ˆ டெவலபà¯à®ªà®°à¯à®•à®³à¯à®•à¯à®•à¯à®¤à¯ தெரிவிகà¯à®•à®µà¯à®®à¯." + }, + "EXIT_FULL_SCREEN": { + "message": "à®®à¯à®´à¯à®¤à¯à®¤à®¿à®°à¯ˆà®¯à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெளியேறà¯" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ மீடà¯à®Ÿà®®à¯ˆà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ. தொடரà¯à®¨à¯à®¤à¯ நீஙà¯à®•à®³à¯ பிழைத௠தொடரà¯à®ªà®¾à®© பà¯à®•à®¾à®°à¯ˆ அனà¯à®ªà¯à®ªà®²à®¾à®®à¯." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ மீடà¯à®Ÿà®®à¯ˆà®•à¯à®•à®µà¯à®®à¯. சேமிகà¯à®•à®¾à®¤à®ªà¯ பணியை இழபà¯à®ªà¯€à®°à¯à®•à®³à¯." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆà®¤à¯ திறகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "பயனà¯à®ªà®¾à®Ÿà¯ மிகவà¯à®®à¯ மெதà¯à®µà®¾à®• இயஙà¯à®•à¯à®•à®¿à®±à®¤à¯." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "எனத௠Google இயகà¯à®•à®•à®•à¯ கோபà¯à®ªà¯à®•à®³à¯ˆà®¤à¯ திறகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Google இயகà¯à®•à®•à®¤à¯à®¤à®¿à®²à¯ ஆனà¯à®²à¯ˆà®©à®¿à®²à¯ நான௠சேமிதà¯à®¤ கோபà¯à®ªà¯à®•à®³à¯ இலà¯à®²à¯ˆ." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "எனத௠விசைபà¯à®ªà®²à®•à¯ˆ அலà¯à®²à®¤à¯ மவà¯à®¸à®¿à®²à¯ சிகà¯à®•à®²à¯à®•à®³à¯ உளà¯à®³à®©." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "உஙà¯à®•à®³à¯ சிகà¯à®•à®²à¯ˆà®¤à¯ தீரà¯à®ªà¯à®ªà®¤à®¿à®²à¯ எஙà¯à®•à®³à¯à®•à¯à®•à¯ உதவ, எனà¯à®© தவற௠நேரà¯à®¨à¯à®¤à®¤à¯ எனக௠கூறவà¯à®®à¯:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "பிற விஷயஙà¯à®•à®³à¯." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯â€¦" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "மேறà¯à®•à¯Šà®£à¯à®Ÿà¯ உஙà¯à®•à®³à¯ˆà®¤à¯ தொடரà¯à®ªà¯à®•à¯Šà®³à¯à®µà®¤à®±à¯à®•à¯, நீஙà¯à®•à®³à¯ சமரà¯à®ªà¯à®ªà®¿à®•à¯à®•à¯à®®à¯ எநà¯à®¤à®µà¯Šà®°à¯ கரà¯à®¤à¯à®¤à®¿à®²à¯à®®à¯ உஙà¯à®•à®³à¯ மினà¯à®©à®žà¯à®šà®²à¯ à®®à¯à®•à®µà®°à®¿ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "சிகà¯à®•à®²à¯ கà¯à®±à®¿à®¤à¯à®¤à¯à®ªà¯ பà¯à®•à®¾à®°à¯ செயà¯" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "உஙà¯à®•à®³à¯ சிகà¯à®•à®²à¯ˆà®¤à¯ தீரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯ உதவ, பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯à®ªà¯ பதிவà¯à®•à®³à¯ˆà®šà¯ சேரà¯à®•à¯à®•à®µà¯à®®à¯ (பதிவà¯à®•à®³à¯ தனிபà¯à®ªà®Ÿà¯à®Ÿ தகவலைக௠கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®•à®²à®¾à®®à¯)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "உஙà¯à®•à®³à¯ அடையாளம௠(மினà¯à®©à®žà¯à®šà®²à¯ à®®à¯à®•à®µà®°à®¿) மறà¯à®±à¯à®®à¯ Google இயகà¯à®•à®•à®¤à¯à®¤à®¿à®²à¯ உளà¯à®³ கோபà¯à®ªà¯à®•à®³à¯ மறà¯à®±à¯à®®à¯ கோபà¯à®ªà¯à®±à¯ˆà®•à®³à®¿à®©à¯ பெயரà¯à®•à®³à¯ மறà¯à®±à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯ உளà¯à®³à®¿à®Ÿà¯à®Ÿ, தனிபà¯à®ªà®Ÿà¯à®Ÿ தகவலை பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯à®ªà¯ பதிவà¯à®•à®³à¯ உளà¯à®³à®Ÿà®•à¯à®•à®²à®¾à®®à¯." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "இநà¯à®¤à®¤à¯ தகவல௠நீஙà¯à®•à®³à¯ பà¯à®•à®¾à®°à®³à®¿à®¤à¯à®¤ சிகà¯à®•à®²à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®µà®¤à®±à¯à®•à®¾à®• மடà¯à®Ÿà¯à®®à¯‡ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯, உஙà¯à®•à®³à¯ பà¯à®•à®¾à®°à¯ˆ விசாரணை செயà¯à®ªà®µà®°à¯ மடà¯à®Ÿà¯à®®à¯‡ இநà¯à®¤à®¤à¯ தகவலை பாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯ மறà¯à®±à¯à®®à¯ இநà¯à®¤à®¤à¯ தகவல௠30 நாடà¯à®•à®³à¯à®•à¯à®•à¯ மேல௠வைதà¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à®ªà¯à®ªà®Ÿà®¾à®¤à¯." + }, + "FOOTER_CONNECTING": { + "message": "இணைகà¯à®•à®¿à®±à®¤à¯..." + }, + "FOOTER_WAITING": { + "message": "இணைபà¯à®ªà®¿à®±à¯à®•à®¾à®•à®•à¯ காதà¯à®¤à®¿à®°à¯à®•à¯à®•à®¿à®±à®¤à¯..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 மறà¯à®±à¯à®®à¯ அதறà¯à®•à¯à®ªà¯ பிநà¯à®¤à¯ˆà®¯ பதிபà¯à®ªà¯) இல௠நிறà¯à®µ" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP மறà¯à®±à¯à®®à¯ அதறà¯à®•à¯à®ªà¯ பிநà¯à®¤à¯ˆà®¯ பதிபà¯à®ªà¯) இல௠நிறà¯à®µ" + }, + "FULL_SCREEN": { + "message": "à®®à¯à®´à¯à®¤à¯à®¤à®¿à®°à¯ˆ" + }, + "GET_STARTED": { + "message": "தொடஙà¯à®•à¯à®•" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "à®à®±à¯à®•à®¿à®±à¯‡à®©à¯" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "நிராகரி" + }, + "HELP": { + "message": "உதவி" + }, + "HOME_ACCESS_BUTTON": { + "message": "அணà¯à®•à¯" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "பகிரபà¯à®ªà®Ÿà¯à®Ÿ கணினியைக௠கணà¯à®Ÿà¯ கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¾à®®à¯." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ இநà¯à®¤à®•à¯ கணினியை பாதà¯à®•à®¾à®ªà¯à®ªà®¾à®• அணà¯à®•à®²à®¾à®®à¯." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN ஠மாறà¯à®±à®µà¯à®®à¯" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "இநà¯à®¤à®•à¯ கணினி தறà¯à®ªà¯‹à®¤à¯ வேறொர௠கணகà¯à®•à¯à®Ÿà®©à¯ பகிரபà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "பாரà¯/திரà¯à®¤à¯à®¤à¯" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "PIN ஠உளà¯à®³à®¿à®Ÿà®¾à®®à®²à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à®±à¯à®•à¯ ஒனà¯à®±à¯ அலà¯à®²à®¤à¯ அதறà¯à®•à¯ மேறà¯à®ªà®Ÿà¯à®Ÿ கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯à®•à®³à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à¯à®®à¯ வகையில௠இநà¯à®¤à®•à¯ கணினி உளà¯à®³à®®à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ இயகà¯à®•à¯" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "இநà¯à®¤à®•à¯ கணினியை அணà¯à®•à¯à®µà®¤à®±à¯à®•à¯, Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯, தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ இயகà¯à®• வேணà¯à®Ÿà¯à®®à¯." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ à®®à¯à®Ÿà®•à¯à®•à¯" + }, + "HOME_SHARE_BUTTON": { + "message": "பகிரà¯" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "பிறர௠பாரà¯à®•à¯à®•à®µà¯à®®à¯ கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯ இநà¯à®¤à®•à¯ கணினியைப௠பகிரலாமà¯." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(இநà¯à®¤ à®…à®®à¯à®šà®®à¯ உஙà¯à®•à®³à¯ கணினியில௠இனà¯à®©à¯à®®à¯ கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ)" + }, + "HOST_CATEGORY": { + "message": "பà¯à®°à®µà®©à¯" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯à®Ÿà®¿à®±à¯à®•à¯ அணà¯à®•à®²à¯ மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯ தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯à®Ÿà®¿à®±à¯à®•à®¾à®© சேனல௠IP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "வேற௠கணினிகà¯à®•à¯à®¤à¯ தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ இயகà¯à®•, Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ நிறà¯à®µà®¿ “$1$†à®à®•à¯ கிளிக௠செயà¯à®•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "கணினிகளைப௠பதிவà¯à®šà¯†à®¯à¯à®¯à®µà®¿à®²à¯à®²à¯ˆ. கணினிகà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆà®šà¯ செயலாகà¯à®•, Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ நிறà¯à®µà®¿ “$1$†à®à®•à¯ கிளிக௠செயà¯à®•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "நீஙà¯à®•à®³à¯ இதறà¯à®•à¯ à®®à¯à®©à¯à®ªà¯ $1$ ($2$) என உளà¯à®¨à¯à®´à¯ˆà®¨à¯à®¤à¯à®³à¯à®³à¯€à®°à¯à®•à®³à¯. அநà¯à®¤à®•à¯ கணகà¯à®•à®¿à®²à¯ உஙà¯à®•à®³à¯ கணினிகளை அணà¯à®•, அநà¯à®¤à®•à¯ கணகà¯à®•à®¿à®©à¯ˆà®•à¯ கொணà¯à®Ÿà¯ $3$Google Chrome இல௠உளà¯à®¨à¯à®´à¯ˆà®•$4$ மறà¯à®±à¯à®®à¯ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ மீணà¯à®Ÿà¯à®®à¯ நிறà¯à®µà¯à®•.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "மெனà¯à®ªà¯Šà®°à¯à®³à®¿à®©à¯ பà¯à®¤à¯à®ªà¯à®ªà®¿à®ªà¯à®ªà¯à®•à®³à¯ வழகà¯à®•à®®à®¾à®• தானாகவே நிகழà¯à®®à¯, ஆனால௠சில அரிதான நிகழà¯à®µà¯à®•à®³à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®¾à®•à®²à®¾à®®à¯. சில நிமிடஙà¯à®•à®³à®¿à®²à¯ மெனà¯à®ªà¯Šà®°à¯à®³à¯ˆà®ªà¯ பà¯à®¤à¯à®ªà¯à®ªà®¿à®¤à¯à®¤à¯ விடலாம௠மேலà¯à®®à¯ இதை உஙà¯à®•à®³à¯ கணினியைத௠தொலைநிலையில௠இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®•à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ செயà¯à®¯à®²à®¾à®®à¯." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ இல௠உளà¯à®³ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ காலாவதியானதà¯, அதைப௠பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ பà¯à®³à¯à®³à®¿à®µà®¿à®µà®°à®™à¯à®•à®³à¯ˆà®¯à¯à®®à¯ சிதைவ௠அறிகà¯à®•à¯ˆà®•à®³à¯ˆà®¯à¯à®®à¯ சேகரிகà¯à®• எஙà¯à®•à®³à¯ˆ அனà¯à®®à®¤à®¿à®¤à¯à®¤à¯ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤ உதவவà¯à®®à¯." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© அணà¯à®•à®²à¯ˆà®¤à¯ தடà¯à®•à¯à®•, $1$கà¯à®±à¯ˆà®¨à¯à®¤à®ªà®Ÿà¯à®šà®®à¯ ஆற௠இலகà¯à®•à®™à¯à®•à®³à¯$2$ கொணà¯à®Ÿ PIN à®à®¤à¯ தேரà¯à®µà¯à®šà¯†à®¯à¯à®•. வேற௠இரà¯à®ªà¯à®ªà®¿à®Ÿà®¤à¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ இணைகà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ இநà¯à®¤ PIN தேவைபà¯à®ªà®Ÿà¯à®®à¯.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "தொலைநிலை அணà¯à®•à®²à¯ சேவையைத௠தொடஙà¯à®•à¯à®µà®¤à¯ தோலà¯à®µà®¿." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome ஆனத௠Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ ஹோஸà¯à®Ÿà¯ நிறà¯à®µà®¿à®¯à¯ˆà®ªà¯ பதிவிறகà¯à®•à¯à®•à®¿à®±à®¤à¯. பதிவிறகà¯à®•à®®à¯ à®®à¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯à®®à¯, தொடரà¯à®µà®¤à®±à¯à®•à¯ à®®à¯à®©à¯, நிறà¯à®µà®¿à®¯à¯ˆ இயகà¯à®•à®µà¯à®®à¯." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "தொடரà¯à®µà®¤à®±à¯à®•à¯ à®®à¯à®©à¯, நிறà¯à®µà®¿à®¯à¯ˆ இயகà¯à®•à®µà¯à®®à¯." + }, + "HOST_SETUP_STARTED": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ இயகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "உஙà¯à®•à®³à¯ கணினியின௠சகà¯à®¤à®¿ நிரà¯à®µà®•à®¿à®ªà¯à®ªà¯ அமைபà¯à®ªà¯à®•à®³à¯ˆà®šà¯ சரிபாரà¯à®¤à¯à®¤à¯, அத௠செயலறà¯à®±à¯ இரà¯à®•à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ à®®à¯à®Ÿà®™à¯à®•à¯à®®à®¾à®±à¯ உளà¯à®³à®®à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ எனà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿ செயà¯à®¯à®µà¯à®®à¯." + }, + "HOST_SETUP_STARTING": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ இயகà¯à®•à¯à®•à®¿à®±à®¤à¯..." + }, + "HOST_SETUP_STOPPED": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©." + }, + "HOST_SETUP_STOPPING": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ à®®à¯à®Ÿà®•à¯à®•à¯à®•à®¿à®±à®¤à¯..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© தொலைநிலை அணà¯à®•à®²à¯ˆ à®®à¯à®Ÿà®•à¯à®•à¯à®µà®¤à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯. பினà¯à®©à®°à¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ ஹோஸà¯à®Ÿà¯ நிறà¯à®µà®¿à®¯à¯ˆà®ªà¯ பதிவிறகà¯à®•à¯à®µà®¤à®©à¯ மூலமà¯, Google இன௠$1$சேவை விதிமà¯à®±à¯ˆà®•à®³à¯ˆ$4 à®à®±à¯à®±à¯à®•à¯à®•à¯Šà®³à¯à®•à®¿à®±à¯€à®°à¯à®•à®³à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "உஙà¯à®•à®³à¯ PIN பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN à®à®ªà¯ பà¯à®¤à¯à®ªà¯à®ªà®¿à®ªà¯à®ªà®¤à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯. பினà¯à®©à®°à¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© PIN பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯..." + }, + "HOST_STARTED": { + "message": "பயனரà¯à®•à¯à®•à®¾à®© பà¯à®°à®µà®©à¯ தொடஙà¯à®•à®¿à®¯à®¤à¯: %1." + }, + "HOST_STOPPED": { + "message": "ஹோஸà¯à®Ÿà¯ நிறà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯." + }, + "IDLE_CONTINUE": { + "message": "தொடரà¯à®•" + }, + "IDLE_DISCONNECT": { + "message": "இபà¯à®ªà¯‹à®¤à¯ தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®µà¯à®®à¯" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "$1$கà¯à®•à®¾à®© அமரà¯à®µà®¿à®©à¯ இயகà¯à®•à®®à¯ சிறித௠நேரம௠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®¾à®¤à¯ மறà¯à®±à¯à®®à¯ விரைவில௠இத௠தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "இநà¯à®¤à®•à¯ கணினியிலà¯" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ ஹோஸà¯à®Ÿà¯ நிறà¯à®µà®¿à®¯à¯ˆà®ªà¯ பதிவிறகà¯à®•à¯" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "உஙà¯à®•à®³à¯ டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ பகிரà¯à®¤à®²à¯ˆà®¤à¯ தொடஙà¯à®•, கீழே உளà¯à®³ அணà¯à®•à®²à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ˆ உஙà¯à®•à®³à¯à®•à¯à®•à¯ உதவà¯à®ªà®µà®°à®¿à®Ÿà®®à¯ வழஙà¯à®•à¯à®•." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ˆ அவரà¯à®•à®³à¯ உளà¯à®³à®¿à®Ÿà¯à®Ÿà®µà¯à®Ÿà®©à¯, உஙà¯à®•à®³à¯ பகிரà¯à®¤à®²à¯ அமரà¯à®µà¯ தொடஙà¯à®•à¯à®®à¯." + }, + "INVALID_PIN": { + "message": "நானà¯à®•à¯ அலà¯à®²à®¤à¯ அதறà¯à®•à¯ மேறà¯à®ªà®Ÿà¯à®Ÿ இலகà¯à®•à®™à¯à®•à®³à¯ˆà®•à¯ கொணà¯à®Ÿ PIN ஠உளà¯à®³à®¿à®Ÿà¯à®•." + }, + "IT2ME_FIRST_RUN": { + "message": "à®’à®°à¯à®µà®°à®¿à®Ÿà®®à®¿à®°à¯à®¨à¯à®¤à¯ இனà¯à®©à¯Šà®°à¯à®µà®°à¯à®•à¯à®•à¯ திரையைப௠பகிரà¯à®¤à®²à¯, தொலைநிலை தொழிலà¯à®¨à¯à®Ÿà¯à®ª ஆதரவில௠சிறபà¯à®ªà®¾à®• செயலà¯à®ªà®Ÿà¯à®®à¯." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "விசைபà¯à®ªà®²à®•à¯ˆà®¤à¯ தளவமைபà¯à®ªà¯à®•à®³à¯" + }, + "LABEL_CONNECTED": { + "message": "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯:" + }, + "LAST_ONLINE": { + "message": "$1$ (கடைசியாக ஆனà¯à®²à¯ˆà®©à®¿à®²à¯ இரà¯à®¨à¯à®¤à®¤à¯: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "எபà¯à®ªà®Ÿà®¿ என அறிக." + }, + "LEARN_MORE": { + "message": "மேலà¯à®®à¯ அறிக." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ பà¯à®°à®µà®©à¯ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯‡à®°à¯à®µà¯à®•à®³à¯" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome தொலைநிலை\nடெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ பà¯à®°à®µà®©à¯" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ பà¯à®°à®µà®©à¯ நிறà¯à®µà®²à¯ நீகà¯à®•à®¿" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win விசைகà¯à®•à¯à®ªà¯ பதில௠வலத௠Ctrlà®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ (Mac இல௠⌘)" + }, + "MAXIMIZE_WINDOW": { + "message": "சாளரதà¯à®¤à¯ˆ பெரிதாகà¯à®•à¯" + }, + "ME2ME_FIRST_RUN": { + "message": "எஙà¯à®•à®¿à®°à¯à®¨à¯à®¤à¯à®®à¯ உஙà¯à®•à®³à¯ சொநà¯à®¤à®•à¯ கணினியை அணà¯à®•à®²à®¾à®®à¯." + }, + "MESSAGE_GENERATING": { + "message": "அணà¯à®•à®²à¯ கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯à®•à®¿à®±à®¤à¯..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "உஙà¯à®•à®³à¯ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ அமரà¯à®µà¯ à®®à¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯." + }, + "MESSAGE_SHARED": { + "message": "தறà¯à®ªà¯‹à®¤à¯ உஙà¯à®•à®³à¯ டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ $1$ உடன௠பகிரபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "சாளரதà¯à®¤à¯ˆ சிறிதாகà¯à®•à¯" + }, + "MODE_AUTHORIZE": { + "message": "à®…à®™à¯à®•à¯€à®•à®°à®¿" + }, + "MODE_IT2ME": { + "message": "தொலைநிலை உதவி" + }, + "MODE_ME2ME": { + "message": "எனத௠கணினிகளà¯" + }, + "NEW_WINDOW": { + "message": "பà¯à®¤à®¿à®¯ சாளரமà¯..." + }, + "NO_PAIRED_CLIENTS": { + "message": "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ எலà¯à®²à®¾ கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯à®•à®³à¯à®®à¯ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "இநà¯à®¤ இயஙà¯à®•à¯à®¤à®³à®®à¯ டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ à®’à®°à¯à®™à¯à®•à®¿à®£à¯ˆà®ªà¯à®ªà¯ˆ ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ. நீஙà¯à®•à®³à¯ தொடரà¯à®¨à¯à®¤à¯ இநà¯à®¤à®ªà¯ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à®¾à®®à¯, ஆனால௠பயனர௠அனà¯à®ªà®µà®®à¯ கà¯à®±à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯." + }, + "OFFLINE": { + "message": "$1$ (ஆஃபà¯à®²à¯ˆà®©à¯)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "ஹோஸà¯à®Ÿà¯ தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "தவறான ஹோஸà¯à®Ÿà¯ உளà¯à®³à®®à¯ˆà®µà¯." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "தவறான ஹோஸà¯à®Ÿà¯ உரிமையாளர௠டொமைனà¯." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ஹோஸà¯à®Ÿà¯ à®à®Ÿà®¿ தவறà¯." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "தவறான OAuth நறà¯à®šà®¾à®©à¯à®±à¯à®•à®³à¯à®Ÿà®©à¯ ஹோஸà¯à®Ÿà¯ உளà¯à®³à®®à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "பயனரà¯-சாரà¯à®¨à¯à®¤ அமரà¯à®µà®¿à®²à¯ இயஙà¯à®•à¯à®®à¯ ஹோஸà¯à®Ÿà¯à®Ÿà¯ˆ மாறà¯à®±à¯à®µà®¤à®©à¯ மூலமà¯, கரà¯à®Ÿà¯à®Ÿà¯ˆà®©à¯ பயனà¯à®®à¯à®±à¯ˆà®¯à¯ˆ ஆதரிபà¯à®ªà®¤à®±à¯à®•à®¾à®•, கனà¯à®šà¯‹à®²à¯ லாஜிக௠திரையில௠இயகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ ஹோஸà¯à®Ÿà¯ நிறà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "கொளà¯à®•à¯ˆ மாறà¯à®±à®¤à¯à®¤à®¿à®©à¯ காரணமாக, ஹோஸà¯à®Ÿà¯ மீணà¯à®Ÿà¯à®®à¯ தொடஙà¯à®•à¯à®•à®¿à®±à®¤à¯." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ஹோஸà¯à®Ÿà¯, கொளà¯à®•à¯ˆà®¯à¯ˆà®ªà¯ படிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ஹோஸà¯à®Ÿà¯ இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "அறியபà¯à®ªà®Ÿà®¾à®¤ ஹோஸà¯à®Ÿà¯ பிழை: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "தவறான ஹோஸà¯à®Ÿà¯ உரிமையாளரà¯." + }, + "OK": { + "message": "சரி" + }, + "OPTIONS_MENU": { + "message": "விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯‡à®°à¯à®µà¯à®•à®³à¯" + }, + "OUTGOING_CONNECTIONS": { + "message": "இநà¯à®¤à®•à¯ கணினியிலிரà¯à®¨à¯à®¤à¯" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "இநà¯à®¤à®•à¯ கணினியà¯à®Ÿà®©à¯ பினà¯à®µà®°à¯à®®à¯ கிளையனà¯à®Ÿà¯à®•à®³à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®©, மேலà¯à®®à¯, PIN ஠வழஙà¯à®•à®¾à®®à®²à¯ இவறà¯à®±à¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯. நீஙà¯à®•à®³à¯ எபà¯à®ªà¯‹à®¤à¯ வேணà¯à®Ÿà¯à®®à®¾à®©à®¾à®²à¯à®®à¯ இநà¯à®¤ அனà¯à®®à®¤à®¿à®¯à¯ˆà®¤à¯ தனிதà¯à®¤à®©à®¿à®¯à®¾à®•à®µà¯‹ அலà¯à®²à®¤à¯ எலà¯à®²à®¾ கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ திரà¯à®®à¯à®ªà®ªà¯ பெறலாமà¯." + }, + "PAIRED_CLIENT_DATE": { + "message": "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ தேதி" + }, + "PAIRED_CLIENT_NAME": { + "message": "கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "இரணà¯à®Ÿà¯ பெடà¯à®Ÿà®¿à®•à®³à®¿à®²à¯à®®à¯ ஒரே PIN ஠உளà¯à®³à®¿à®Ÿà¯à®•." + }, + "PIN_MESSAGE": { + "message": "$1$ கà¯à®•à®¾à®© உஙà¯à®•à®³à¯ PIN ஠உளà¯à®³à®¿à®Ÿà¯à®•.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "தொலைநிலைக௠கணினிகà¯à®•à®¾à®© உஙà¯à®•à®³à¯ PIN ஠உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯." + }, + "PRODUCT_DESCRIPTION": { + "message": "இணையதளதà¯à®¤à®¿à®²à¯ பாதà¯à®•à®¾à®ªà¯à®ªà®¾à®• உஙà¯à®•à®³à¯ கணினிகளை அணà¯à®•à¯à®µà®¤à®±à¯à®•à¯ பிற கணினிகளை அணà¯à®•à®²à®¾à®®à¯ அலà¯à®²à®¤à¯ உஙà¯à®•à®³à¯ பிற பயனரà¯à®•à®³à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à®²à®¾à®®à¯." + }, + "PRODUCT_NAME": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®©à¯ அறிவிபà¯à®ªà¯à®•à®³à¯" + }, + "RECONNECT": { + "message": "மீணà¯à®Ÿà¯à®®à¯ இணை" + }, + "REMEMBER_PIN": { + "message": "இநà¯à®¤à®šà¯ சாதனதà¯à®¤à¯ˆ, இநà¯à®¤ ஹோஸà¯à®Ÿà¯à®Ÿà®©à¯ இணைகà¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ PIN ஠மீணà¯à®Ÿà¯à®®à¯ கேடà¯à®• வேணà¯à®Ÿà®¾à®®à¯." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "à®®à¯à®•à¯à®•à®¿à®¯ நூலகமà¯" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ à®’à®°à¯à®™à¯à®•à®¿à®£à¯ˆà®ªà¯à®ªà¯à®šà¯ செயலà¯à®®à¯à®±à¯ˆ" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ ஹோஸà¯à®Ÿà¯à®Ÿà®¿à®±à¯à®•à¯ கடà¯à®Ÿà®³à¯ˆà®•à®³à¯ˆ வழஙà¯à®•à¯à®®à¯ பயனà¯à®ªà®¾à®Ÿà¯." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "பà¯à®°à®µà®©à¯ செயலà¯à®®à¯à®±à¯ˆ" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "தொலைநிலை ஹோஸà¯à®Ÿà¯ மேலாணà¯à®®à¯ˆà®•à¯à®•à®¾à®© நேடà¯à®Ÿà®¿à®µà¯ செயà¯à®¤à®¿à®¯à®¿à®Ÿà®²à¯ ஹோஸà¯à®Ÿà¯" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "தொலைநிலை உதவிகà¯à®•à®¾à®© நேடà¯à®Ÿà®¿à®µà¯ செயà¯à®¤à®¿à®¯à®¿à®Ÿà®²à¯ ஹோஸà¯à®Ÿà¯" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "பாதà¯à®•à®¾à®ªà¯à®ªà¯ விசையின௠தொலைநிலை செயலà¯à®®à¯à®±à¯ˆ" + }, + "RESIZE_TO_CLIENT": { + "message": "பொரà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à¯ டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ மறà¯à®…ளவிடà¯" + }, + "RESTART_BUTTON": { + "message": "இபà¯à®ªà¯‹à®¤à¯ மீணà¯à®Ÿà¯à®®à¯ தொடஙà¯à®•à¯" + }, + "RESTORE_WINDOW": { + "message": "சாளரதà¯à®¤à¯ˆ மீடà¯à®Ÿà¯†à®Ÿà¯" + }, + "RETRY": { + "message": "மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à®µà¯à®®à¯" + }, + "SCREEN_OPTIONS": { + "message": "திரை விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del ஠அனà¯à®ªà¯à®ªà¯" + }, + "SEND_FEEDBACK": { + "message": "சிகà¯à®•à®²à¯ˆà®ªà¯ பà¯à®•à®¾à®°à®³à®¿..." + }, + "SEND_KEYS": { + "message": "விசைகளை அனà¯à®ªà¯à®ªà¯" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn ஠அனà¯à®ªà¯à®ªà¯" + }, + "SERVICE_DESCRIPTION": { + "message": "இநà¯à®¤à®šà¯ சேவை Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ கà¯à®³à¯ˆà®¯à®©à¯à®Ÿà¯à®•à®³à®¿à®Ÿà®®à®¿à®°à¯à®¨à¯à®¤à¯ வரà¯à®®à¯ இணைபà¯à®ªà¯à®•à®³à¯ˆ இயகà¯à®•à¯à®•à®¿à®±à®¤à¯." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "உஙà¯à®•à®³à¯ டொமைன௠கொளà¯à®•à¯ˆà®¯à®¿à®©à®¾à®²à¯, இநà¯à®¤ அமைபà¯à®ªà¯ நிரà¯à®µà®•à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "பகிரà¯" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ரதà¯à®¤à¯ செயà¯" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "பிறர௠இநà¯à®¤à®•à¯ கணினியைப௠பாரà¯à®•à¯à®• மறà¯à®±à¯à®®à¯ கடà¯à®Ÿà¯à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤, அதைப௠பகிரà¯à®¨à¯à®¤à¯ கொளà¯à®³ விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" + }, + "SHOW_STATS": { + "message": "பà¯à®³à¯à®³à®¿à®µà®¿à®µà®°à®™à¯à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯" + }, + "SHOW_STATS_WITH_RTT": { + "message": "பà¯à®³à¯à®³à®¿à®µà®¿à®µà®°à®™à¯à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯ (இணைபà¯à®ªà¯: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "பொரà¯à®¤à¯à®¤à®®à®¾à®•à®šà¯ சà¯à®°à¯à®•à¯à®•à¯" + }, + "SIGN_IN_BUTTON": { + "message": "உளà¯à®¨à¯à®´à¯ˆà®•" + }, + "SIGN_OUT_BUTTON": { + "message": "வெளியேறà¯" + }, + "STOP_SHARING_BUTTON": { + "message": "பகிரà¯à®¤à®²à¯ˆ நிறà¯à®¤à¯à®¤à¯" + }, + "SURVEY_INVITATION": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à¯ உதவ விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? $1$கரà¯à®¤à¯à®¤à¯à®•à¯à®•à®£à®¿à®ªà¯à®ªà®¿à®²à¯ பஙà¯à®•à¯‡à®±à¯à®•à®µà¯à®®à¯.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "நேரமà¯" + }, + "TOGGLE_STATS": { + "message": "பà¯à®³à¯à®³à®¿à®µà®¿à®µà®°à®™à¯à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ இல௠இணைகà¯à®•à®µà¯à®®à¯", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "இநà¯à®¤à®•à¯ கணினிகà¯à®•à®¾à®© தொலைநிலை இணைபà¯à®ªà¯à®•à®³à¯ˆ à®®à¯à®Ÿà®•à¯à®•à®µà¯à®®à¯" + }, + "TOOLTIP_REFRESH": { + "message": "ஹோஸà¯à®Ÿà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பà¯à®¤à¯à®ªà¯à®ªà®¿" + }, + "TOOLTIP_RENAME": { + "message": "கணினி பெயரைத௠திரà¯à®¤à¯à®¤à®µà¯à®®à¯" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (காலாவதியானதà¯)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "கணகà¯à®•à¯" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯ மூலம௠அணà¯à®•à®²à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•, கீழே உஙà¯à®•à®³à¯ கணகà¯à®•à¯ˆà®¯à¯à®®à¯, PIN à®à®¯à¯à®®à¯ உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯." + }, + "WARNING_NAT_DISABLED": { + "message": "கà¯à®±à®¿à®ªà¯à®ªà¯: உஙà¯à®•à®³à¯ பிணையதà¯à®¤à®¿à®²à¯ உளà¯à®³ கணினிகளà¯à®•à¯à®•à¯ இடையில௠மடà¯à®Ÿà¯à®®à¯‡ இணைபà¯à®ªà¯à®•à®³à¯ˆ கொளà¯à®•à¯ˆ அமைபà¯à®ªà¯à®•à®³à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®¿à®©à¯à®±à®©." + }, + "WARNING_NOT_WINDOWED": { + "message": "கà¯à®±à®¿à®ªà¯à®ªà¯: எலà¯à®²à®¾ விசைபà¯à®ªà®²à®•à¯ˆà®•à¯ கà¯à®±à¯à®•à¯à®•à¯à®µà®´à®¿à®•à®³à¯à®®à¯ இரà¯à®ªà¯à®ªà®¤à¯ˆ உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤, ‘சாளரமாக திற\" எனà¯à®ªà®¤à®±à¯à®•à¯ Chrome தொலைநிலை டெஸà¯à®•à¯à®Ÿà®¾à®ªà¯à®ªà¯ˆ உளà¯à®³à®®à¯ˆà®•à¯à®•à®²à®¾à®®à¯." + }, + "WHY_IS_THIS_SAFE": { + "message": "இத௠à®à®©à¯ பாதà¯à®•à®¾à®ªà¯à®ªà®¾à®©à®¤à¯?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "இயஙà¯à®•à®¿ கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/te/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/te/messages.json new file mode 100644 index 000000000000..547ef5b43b7b --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/te/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ఆమోదించి, ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేయి" + }, + "ACCESS_CODE": { + "message": "à°ªà±à°°à°¾à°ªà±à°¯à°¤ కోడà±" + }, + "ACCESS_CODE_TIMER": { + "message": "à°ˆ à°ªà±à°°à°¾à°ªà±à°¯à°¤ కోడౠగడà±à°µà± $1$లో à°®à±à°—à±à°¸à±à°¤à±à°‚ది", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "à°…à°­à°¿à°ªà±à°°à°¾à°¯à°‚" + }, + "ALL_CONNECTIONS": { + "message": "à°…à°¨à±à°¨à°¿ కనెకà±à°·à°¨à±â€Œà°²à±" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PINనౠమళà±à°²à±€ టైపౠచేయండి" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "à°°à°¦à±à°¦à± చెయà±à°¯à°¿" + }, + "CLEAR_HISTORY": { + "message": "à°šà°°à°¿à°¤à±à°°à°¨à± à°•à±à°²à°¿à°¯à°°à± చేయి" + }, + "CLOSE": { + "message": "మూసివేయి" + }, + "CLOSE_PROMPT": { + "message": "à°ˆ పేజీ à°¨à±à°‚à°¡à°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà°¡à°‚ వలన మీ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± సెషనౠమà±à°—à±à°¸à±à°¤à±à°‚ది." + }, + "CLOSE_WINDOW": { + "message": "విండోనౠమà±à°¸à°¿à°µà±‡à°¯à°¿" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "మీరౠ$1$కౠరిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± à°–à°šà±à°šà°¿à°¤à°‚à°—à°¾ నిలిపివేయాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? మీరౠమీ మనసà±à°¸à± మారà±à°šà±à°•à±à°‚టే, కనెకà±à°·à°¨à±â€Œà°²à°¨à± à°ªà±à°¨à°ƒà°ªà±à°°à°¾à°°à°‚భించడానికి మీరౠఆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± సందరà±à°¶à°¿à°‚చాలి.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "కనెకà±à°·à°¨à± విఫలమైంది" + }, + "CONNECTION_FROM_HEADER": { + "message": "దీని à°¨à±à°‚à°¡à°¿" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "కనెకà±à°·à°¨à± à°šà°°à°¿à°¤à±à°°" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "పరà±à°µà°¾à°²à±‡à°¦à±" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "బాగà±à°‚ది" + }, + "CONNECTION_QUALITY_POOR": { + "message": "బలహీనంగా ఉంది" + }, + "CONNECTION_TO_HEADER": { + "message": "à°¸à±à°µà±€à°•à°°à±à°¤" + }, + "CONNECT_ANYWAY": { + "message": "à°à°¦à±‡à°®à±ˆà°¨à°¾ కనెకà±à°Ÿà± చేయి" + }, + "CONNECT_BUTTON": { + "message": "కనెకà±à°Ÿà± చేయండి" + }, + "CONTINUE_BUTTON": { + "message": "కొనసాగà±" + }, + "CONTINUE_PROMPT": { + "message": "మీరౠపà±à°°à°¸à±à°¤à±à°¤à°‚ à°ˆ మెషీనà±â€Œà°¨à± మరొక వినియోగదారà±à°¤à±‹ భాగసà±à°µà°¾à°®à±à°¯à°‚ చేసà±à°¤à±à°¨à±à°¨à°¾à°°à±. మీరౠభాగసà±à°µà°¾à°®à±à°¯à°‚ చేయడానà±à°¨à°¿ కొనసాగించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?" + }, + "CONTROLLER_NAME": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± à°•à°‚à°Ÿà±à°°à±‹à°²à°°à±" + }, + "COPYRIGHT": { + "message": "కాపీరైటౠ2013 Google Inc. సరà±à°µ హకà±à°•à±à°²à± à°ªà±à°°à°¤à±à°¯à±‡à°•à°¿à°‚చబడà±à°¡à°¾à°¯à°¿." + }, + "CREDITS": { + "message": "à°•à±à°°à±†à°¡à°¿à°Ÿà±â€Œà°²à±" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "అందరినీ తొలగించండి" + }, + "DELETE_PAIRED_CLIENT": { + "message": "తొలగించà±" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "కొనసాగించడానికి à°®à±à°‚à°¦à±à°—à°¾ మీరౠతపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à°¿ అదనపౠపà±à°°à°¾à°ªà±à°¯à°¤ à°…à°¨à±à°®à°¤à±à°²à°¨à± మంజూరౠచేయాలి. మీరౠఒకసారి మంజూరౠచేసà±à°¤à±‡ సరిపోతà±à°‚ది." + }, + "DESCRIPTION_CONNECT": { + "message": "మీరౠపà±à°°à°¾à°ªà±à°¯à°¤ చేయాలని కోరà±à°•à±à°¨à±‡ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à±‹ “$1$†కà±à°²à°¿à°•à± చేసి, మీకౠపà±à°°à°¾à°ªà±à°¯à°¤ కోడౠఇవà±à°µà°®à°¨à°¿ వినియోగదారà±à°¨à± à°…à°¡à°—à°‚à°¡à°¿.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± వెబà±â€Œà°²à±‹ మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± à°¸à±à°°à°•à±à°·à°¿à°¤à°‚à°—à°¾ భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయడానికి మిమà±à°®à°²à±à°¨à°¿ à°…à°¨à±à°®à°¤à°¿à°¸à±à°¤à±à°‚ది. వినియోగదారà±à°²à± ఇదà±à°¦à°°à±‚ తపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ $1$లో à°•à°¨à±à°—ొనబడే Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ అమలౠచేసà±à°¤à±à°‚డాలి.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "మీరౠమూడవ పకà±à°· వెబà±â€Œà°¸à±ˆà°Ÿà±â€Œà°•à± à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°¿à°‚చాలని రిమోటౠహోసà±à°Ÿà± కోరà±à°¤à±‹à°‚ది. కొనసాగడానికి, మీరౠతపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°•à± à°ˆ à°šà°¿à°°à±à°¨à°¾à°®à°¾à°¨à± à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయడానికి అదనపౠఅనà±à°®à°¤à±à°²à°¨à± మంజూరౠచేయాలి:" + }, + "DISABLE_HOST": { + "message": "ఆపివెయà±à°¯à°¿" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "à°¡à°¿à°¸à±â€Œà°•à°¨à±†à°•à±à°Ÿà± చెయà±à°¯à°¿" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± సేవ" + }, + "DURATION_HEADER": { + "message": "à°µà±à°¯à°µà°§à°¿" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "à°ˆ à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ అమలౠచేయడానికి మీకౠఅనà±à°®à°¤à°¿ లేదà±." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°£ విఫలమైంది. దయచేసి Chromeà°•à°¿ మళà±à°²à±€ సైనౠఇనౠచేయండి." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "కొనà±à°¨à°¿ ఆవశà±à°¯à°• అంశాలౠలేవà±. దయచేసి మీరౠతాజా సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± సంసà±à°•à°°à°£à°¨à± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేసారని నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°•à±Šà°¨à°¿, ఆపై మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "నెటà±â€Œà°µà°°à±à°•à± లోపం సంభవించింది. మీ పరికరం మళà±à°²à±€ ఆనà±â€Œà°²à±ˆà°¨à±â€Œà°²à±‹à°•à°¿ వచà±à°šà°¿à°¨à°ªà±à°ªà±à°¡à± మేమౠఅనà±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ à°ªà±à°¨à°ƒà°ªà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à°¾à°®à±." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "సెషనà±â€Œà°¨à± à°ªà±à°°à°¾à°°à°‚భించడంలో రిమోటౠకంపà±à°¯à±‚టరౠవిఫలమైంది. సమసà±à°¯ కొనసాగితే, దయచేసి హోసà±à°Ÿà±â€Œà°¨à± మళà±à°²à±€ కానà±à°«à°¿à°—రౠచేసి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "రిమోటౠకంపà±à°¯à±‚టరౠకనెకà±à°·à°¨à± à°…à°­à±à°¯à°°à±à°¥à°¨à°²à°•à± à°ªà±à°°à°¤à°¿à°¸à±à°ªà°‚దించడం లేదà±. దయచేసి ఇది ఆనà±â€Œà°²à±ˆà°¨à±â€Œà°²à±‹ ఉందని ధృవీకరించà±à°•à±à°¨à°¿, మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_HOST_OVERLOAD": { + "message": "ఒకరౠచెలà±à°²à°¨à°¿ PINతో రిమోటౠకంపà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± కనెకà±à°Ÿà± చేయడానికి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚చినందà±à°¨ దీనికి కనెకà±à°·à°¨à±â€Œà°²à± తాతà±à°•à°¾à°²à°¿à°•à°‚à°—à°¾ à°¬à±à°²à°¾à°•à± చేయబడà±à°¡à°¾à°¯à°¿. దయచేసి తరà±à°µà°¾à°¤ మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± నమోదౠచేయడంలో విఫలమైంది." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "అననà±à°•à±‚à°² à°ªà±à°°à±‹à°Ÿà±‹à°•à°¾à°²à± సంసà±à°•à°°à°£ à°—à±à°°à±à°¤à°¿à°‚చబడింది. దయచేసి రెండౠకంపà±à°¯à±‚à°Ÿà°°à±â€Œà°²à±à°²à±‹à°¨à± తాజా సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± సంసà±à°•à°°à°£à°¨à± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేసారని నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°•à±Šà°¨à°¿, ఆపై మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "à°ªà±à°°à°¾à°ªà±à°¯à°¤ కోడౠచెలà±à°²à°¦à±. దయచేసి మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "విధాన సెటà±à°Ÿà°¿à°‚à°—à±â€Œà°²à± à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± వలె భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయడానికి à°…à°¨à±à°®à°¤à°¿à°‚à°šà°µà±. సహాయం కోసం సిసà±à°Ÿà°®à± నిరà±à°µà°¾à°¹à°•à±à°¨à°¿ సంపà±à°°à°¦à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "రిమోటౠసెషనౠగడà±à°µà± à°®à±à°—ిసింది." + }, + "ERROR_MISSING_PLUGIN": { + "message": "కొనà±à°¨à°¿ ఆవశà±à°¯à°• అంశాలౠలేవà±. దయచేసి మీరౠతాజా Chrome సంసà±à°•à°°à°£à°¨à± అమలౠచేసà±à°¤à±à°¨à±à°¨à°¾à°°à°¨à°¿ నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°•à±Šà°¨à°¿, ఆపై మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_NACL_DISABLED": { + "message": "అవసరమైన కొనà±à°¨à°¿ భాగాలౠలేవà±. దయచేసి chrome://pluginsà°•à°¿ వెళà±à°²à°¿, à°¸à±à°¥à°¾à°¨à°¿à°• à°•à±à°²à°¯à°¿à°‚à°Ÿà± à°ªà±à°°à°¾à°°à°‚à°­à°¿à°‚à°šà°¿ ఉనà±à°¨à°Ÿà±à°²à± నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°•à±‹à°‚à°¡à°¿." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "అవసరమైన భాగం పని చేయడం లేదà±. దయచేసి à°ˆ సమసà±à°¯à°¨à± డెవలపరà±â€Œà°²à°•à± నివేదించండి." + }, + "ERROR_NETWORK_FAILURE": { + "message": "నెటà±â€Œà°µà°°à±à°•à±â€Œà°•à± కనెకà±à°Ÿà± చేయడం సాధà±à°¯à°ªà°¡à°²à±‡à°¦à±. దయచేసి మీ పరికరం ఆనà±â€Œà°²à±ˆà°¨à±â€Œà°²à±‹ ఉందని తనిఖీ చేయండి." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "మీరౠChromeà°•à°¿ సైనౠఇనౠచేయలేదà±. దయచేసి సైనౠఇనౠచేసి, మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "à°† à°šà°°à±à°¯à°¨à± అమలౠచేయడానికి మీకౠఅనà±à°®à°¤à°¿ లేదà±." + }, + "ERROR_NOT_FOUND": { + "message": "à°…à°­à±à°¯à°°à±à°¥à°¿à°‚à°šà°¿à°¨ ఆబà±à°œà±†à°•à±à°Ÿà± లేదà±." + }, + "ERROR_P2P_FAILURE": { + "message": "హోసà±à°Ÿà±â€Œà°•à± చేరà±à°•à±‹à°µà°¡à°‚ సాధà±à°¯à°ªà°¡à°²à±‡à°¦à±. ఇది బహà±à°¶à°¾ మీరౠఉపయోగిసà±à°¤à±à°¨à±à°¨ నెటà±â€Œà°µà°°à±à°•à± యొకà±à°• కానà±à°«à°¿à°—రేషనౠవలà±à°² సంభవించి ఉండవచà±à°šà±." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "సేవ తాతà±à°•à°¾à°²à°¿à°•à°‚à°—à°¾ à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±. దయచేసి తరà±à°µà°¾à°¤ మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "ERROR_UNEXPECTED": { + "message": "ఊహించని లోపం సంభవించింది. దయచేసి డెవలపరà±â€Œà°²à°•à± à°ˆ సమసà±à°¯à°¨à± నివేదించండి." + }, + "EXIT_FULL_SCREEN": { + "message": "పూరà±à°¤à°¿ à°¸à±à°•à±à°°à±€à°¨à± à°¨à±à°‚à°¡à°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ రీసెటౠచేయలేకపోయింది. మీరౠఇపà±à°ªà°Ÿà°¿à°•à±€ బగౠనివేదికనౠపంపవచà±à°šà±." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ రీసెటౠచేయండి. మీరౠà°à°¦à±ˆà°¨à°¾ సేవౠచేయని పనిని కోలà±à°ªà±‹à°¤à°¾à°°à±." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "నేనౠఅనà±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ తెరవలేకపోతà±à°¨à±à°¨à°¾à°¨à±." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "à°…à°¨à±à°µà°°à±à°¤à°¨à°‚ చాలా నెమà±à°®à°¦à°¿à°—à°¾ ఉంది." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "నేనౠనా Google à°¡à°¿à°¸à±à°•à± ఫైలà±â€Œà°²à°¨à± తెరవలేకపోతà±à°¨à±à°¨à°¾à°¨à±." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "నాకౠGoogle à°¡à°¿à°¸à±à°•à±â€Œà°²à±‹ ఆనà±â€Œà°²à±ˆà°¨à±â€Œà°²à±‹ సేవౠచేసిన నా ఫైలà±â€Œà°²à± కనిపించడం లేదà±." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "నాకౠనా కీబోరà±à°¡à± లేదా మౌసà±â€Œà°¤à±‹ సమసà±à°¯à°²à± ఉనà±à°¨à°¾à°¯à°¿." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "మీ సమసà±à°¯à°¨à± పరిషà±à°•à°°à°¿à°‚చడంలో మాకౠసహాయపడటానికి, దయచేసి à°à°®à°¿ తపà±à°ªà± జరిగిందో మాకౠచెపà±à°ªà°‚à°¡à°¿:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "వేరేది." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "à°Žà°‚à°šà±à°•à±‹à°‚డి…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "తదà±à°ªà°°à°¿ సమాచారం కోసం మిమà±à°®à°²à±à°¨à°¿ సంపà±à°°à°¦à°¿à°‚చేందà±à°•à± మాకౠఅనà±à°®à°¤à°¿ ఇవà±à°µà°¡à°¾à°¨à°¿à°•à°¿, మీరౠసమరà±à°ªà°¿à°‚చే à°à°¦à±ˆà°¨à°¾ à°…à°­à°¿à°ªà±à°°à°¾à°¯à°¾à°¨à°¿à°•à°¿ మీ ఇమెయిలౠచిరà±à°¨à°¾à°®à°¾ చేరà±à°šà°¬à°¡à±à°¤à±à°‚ది." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "సమసà±à°¯à°¨à± నివేదించà±" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "మీ సమసà±à°¯à°¨à± పరిషà±à°•à°°à°¿à°‚చడంలో మాకౠసహాయపడటానికి à°…à°¨à±à°µà°°à±à°¤à°¨ లాగà±â€Œà°²à°¨à± చేరà±à°šà°‚à°¡à°¿ (లాగà±â€Œà°²à± à°ªà±à°°à±ˆà°µà±‡à°Ÿà± సమాచారానà±à°¨à°¿ కలిగి ఉండవచà±à°šà±)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "à°…à°¨à±à°µà°°à±à°¤à°¨ లాగà±â€Œà°²à± మీ à°—à±à°°à±à°¤à°¿à°‚పౠ(ఇమెయిలౠచిరà±à°¨à°¾à°®à°¾) మరియౠGoogle à°¡à°¿à°¸à±à°•à±â€Œà°²à±‹à°¨à°¿ ఫైలà±â€Œà°²à± మరియౠఫోలà±à°¡à°°à±â€Œà°² పేరà±à°²à±, à°—à±à°£à°§à°°à±à°®à°¾à°²à°¤à±‹ సహా à°ªà±à°°à±ˆà°µà±‡à°Ÿà± సమాచారానà±à°¨à°¿ కలిగి ఉండవచà±à°šà±." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "à°ˆ సమాచారం మీరౠనివేదిసà±à°¤à±à°¨à±à°¨ సమసà±à°¯à°¨à± విశà±à°²à±‡à°·à°¿à°‚చడానికి మాతà±à°°à°®à±‡ ఉపయోగించబడà±à°¤à±à°‚ది, ఇది మీ నివేదికనౠదరà±à°¯à°¾à°ªà±à°¤à± చేసే à°µà±à°¯à°•à±à°¤à°¿à°•à°¿ మాతà±à°°à°®à±‡ à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉంటà±à°‚ది మరియౠ30 రోజà±à°² కంటే à°Žà°•à±à°•à±à°µ కాలం ఉంచబడదà±." + }, + "FOOTER_CONNECTING": { + "message": "కనెకà±à°Ÿà± చేసà±à°¤à±‹à°‚ది…" + }, + "FOOTER_WAITING": { + "message": "కనెకà±à°·à°¨à± కోసం వేచి ఉంది..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac కోసం (OS X 10.6 మరియౠఅంతకంటే అధిక సంసà±à°•à°°à°£)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows కోసం (XP మరియౠఅంతకంటే అధిక సంసà±à°•à°°à°£)" + }, + "FULL_SCREEN": { + "message": "పూరà±à°¤à°¿ à°¸à±à°•à±à°°à±€à°¨à±" + }, + "GET_STARTED": { + "message": "à°ªà±à°°à°¾à°°à°‚à°­à°¿à°‚à°šà°‚à°¡à°¿" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "ఆమోదించà±" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "తిరసà±à°•à°°à°¿à°‚à°šà±" + }, + "HELP": { + "message": "సహాయం" + }, + "HOME_ACCESS_BUTTON": { + "message": "à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయి" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "భాగసà±à°µà°¾à°®à±à°¯ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± చూడండి మరియౠనియంతà±à°°à°¿à°‚à°šà°‚à°¡à°¿." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "మీరౠChrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± ఉపయోగించి à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± à°¸à±à°°à°•à±à°·à°¿à°¤à°‚à°—à°¾ à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయవచà±à°šà±." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "పినౠమారà±à°ªà±" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à± à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ వేరొక ఖాతా à°•à±à°°à°¿à°‚à°¦ భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయబడింది." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "వీకà±à°·à°¿à°‚à°šà°‚à°¡à°¿/సవరించండి" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à± PINని నమోదౠచేయకà±à°‚డానే కనెకà±à°Ÿà± కావడానికి à°’à°•à°Ÿà°¿ లేదా అంతకంటే à°Žà°•à±à°•à±à°µà°®à°‚ది à°•à±à°²à°¯à°¿à°‚à°Ÿà±â€Œà°²à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚చడానికి కానà±à°«à°¿à°—రౠచేయబడింది." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± à°ªà±à°°à°¾à°°à°‚à°­à°¿à°‚à°šà±" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "మీరౠఈ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయడానికి Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± ఉపయోగించాలనà±à°•à±à°‚టే మీరౠరిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± తపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ à°ªà±à°°à°¾à°°à°‚భించాలి." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± నిలిపివేయి" + }, + "HOME_SHARE_BUTTON": { + "message": "భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయి" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± మరొక వినియోగదారౠచూడటానికి మరియౠనియంతà±à°°à°¿à°‚చడానికి భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయండి." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(à°ˆ లకà±à°·à°£à°‚ మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à°¿ ఇంకా à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±)" + }, + "HOST_CATEGORY": { + "message": "హోసà±à°Ÿà±" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "à°ˆ à°•à±à°²à°¯à°¿à°‚à°Ÿà±â€Œà°•à°¿ à°ªà±à°°à°¾à°ªà±à°¯à°¤ తిరసà±à°•à°°à°¿à°‚చబడింది: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "à°ˆ à°•à±à°²à°¯à°¿à°‚టౠకనెకà±à°Ÿà± చేయబడà±à°¡à°¾à°°à±: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "à°ˆ à°•à±à°²à°¯à°¿à°‚à°Ÿà± à°¡à°¿à°¸à±â€Œà°•à°¨à±†à°•à±à°Ÿà± చేయబడà±à°¡à°¾à°°à±: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "à°ˆ à°•à±à°²à°¯à°¿à°‚టౠకోసం ఛానెలౠIP: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "వేరొక à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± à°ªà±à°°à°¾à°°à°‚భించడానికి, à°…à°•à±à°•à°¡ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేసి “$1$â€à°¨à± à°•à±à°²à°¿à°•à± చేయండి.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "మీరౠనమోదౠఅయిన à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à°¨à± కలిగి ఉండలేదà±. à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± à°ªà±à°°à°¾à°°à°‚భించడానికి, à°…à°•à±à°•à°¡ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేసి “$1$â€à°¨à± à°•à±à°²à°¿à°•à± చేయండి.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "మీరౠమà±à°¨à±à°ªà± $1$ ($2$)à°—à°¾ సైనౠఇనౠచేసారà±. à°† ఖాతాలో మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à°¨à± à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయడానికి, à°† ఖాతాతో $3$Google Chromeà°•à°¿ సైనౠఇనౠచేయండి$4$ మరియౠChrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à°¿ మళà±à°²à±€ ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à± చేయండి.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "సాధారణంగా సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± నవీకరణలౠసà±à°µà°¯à°‚చాలకంగా జరà±à°—à±à°¤à°¾à°¯à°¿, కానీ కొనà±à°¨à°¿ à°…à°°à±à°¦à±ˆà°¨ సందరà±à°­à°¾à°²à±à°²à±‹ విఫలం కావచà±à°šà±. సాఫà±à°Ÿà±â€Œà°µà±‡à°°à±â€Œà°¨à± నవీకరించడానికి కొనà±à°¨à°¿ నిమిషాల కంటే à°Žà°•à±à°•à±à°µ సమయం పటà±à°Ÿà°¦à± మరియౠమీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± రిమోటà±â€Œà°—à°¾ కనెకà±à°Ÿà± చేసినపà±à°ªà±à°¡à± కూడా పూరà±à°¤à°¿ చేయవచà±à°šà±." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$లో Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°—à°¡à±à°µà± తేదీ à°®à±à°—ిసింది మరియౠనవీకరించాలà±à°¸à°¿à°¨ అవసరం ఉంది.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "వినియోగ గణాంకాలనౠమరియౠకà±à°°à°¾à°·à± నివేదికలనౠసేకరించడానికి మమà±à°®à°²à±à°¨à°¿ à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¡à°‚ à°¦à±à°µà°¾à°°à°¾ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± మెరà±à°—à±à°ªà°°à°šà°¡à°‚లో మాకౠసహాయపడండి." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± à°ªà±à°°à°¾à°ªà±à°¯à°¤à°¨à± à°°à°•à±à°·à°¿à°‚చడానికి, దయచేసి $1$కనీసం ఆరౠఅంకెలà±$2$ కలిగి ఉనà±à°¨ PINనౠఎంచà±à°•à±‹à°‚à°¡à°¿. à°ˆ PIN వేరొక à°¸à±à°¥à°¾à°¨à°‚ à°¨à±à°‚à°¡à°¿ కనెకà±à°Ÿà± చేసà±à°¤à±à°¨à±à°¨à°ªà±à°ªà±à°¡à± అవసరం à°…à°µà±à°¤à±à°‚ది.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "రిమోటౠపà±à°°à°¾à°ªà±à°¯à°¤ సేవనౠపà±à°°à°¾à°°à°‚భించడంలో విఫలమైంది." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à°°à±â€Œà°¨à± Chrome డౌనà±â€Œà°²à±‹à°¡à± చేసà±à°¤à±‹à°‚ది. డౌనà±â€Œà°²à±‹à°¡à± పూరà±à°¤à°¯à°¿à°¨ తరà±à°µà°¾à°¤, దయచేసి కొనసాగడానికి à°®à±à°‚దౠఇనà±â€Œà°¸à±à°Ÿà°¾à°²à°°à±â€Œà°¨à± అమలౠచేయండి." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "దయచేసి కొనసాగడానికి à°®à±à°‚దౠఇనà±â€Œà°¸à±à°Ÿà°¾à°²à°°à±â€Œà°¨à± అమలౠచేయండి." + }, + "HOST_SETUP_STARTED": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚టరౠకోసం రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à± à°ªà±à°°à°¾à°°à°‚భించబడà±à°¡à°¾à°¯à°¿." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "దయచేసి మీ à°•à°‚à°ªà±à°¯à±‚టరౠయొకà±à°• విదà±à°¯à±à°¤à± నిరà±à°µà°¹à°£ సెటà±à°Ÿà°¿à°‚à°—à±â€Œà°²à°¨à± తనిఖీ చేసి, ఇది నిషà±à°•à±à°°à°¿à°¯à°‚à°—à°¾ ఉనà±à°¨à°ªà±à°ªà±à°¡à± నిదà±à°°à°¾à°µà°¸à±à°¥à°²à±‹à°•à°¿ వెళà±à°²à±‡à°²à°¾ కానà±à°«à°¿à°—రౠచేయబడలేదని నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°•à±‹à°‚à°¡à°¿." + }, + "HOST_SETUP_STARTING": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚టరౠకోసం రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± à°ªà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à±‹à°‚ది…" + }, + "HOST_SETUP_STOPPED": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚టరౠకోసం రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à± నిలిపివేయబడà±à°¡à°¾à°¯à°¿." + }, + "HOST_SETUP_STOPPING": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚టరౠకోసం రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± నిలిపివేసà±à°¤à±‹à°‚ది..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± రిమోటౠపà±à°°à°¾à°ªà±à°¯à°¤à°¨à± నిలిపివేయడంలో విఫలమైంది. దయచేసి తరà±à°µà°¾à°¤ మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à°°à±â€Œà°¨à± డౌనà±â€Œà°²à±‹à°¡à± చేయడం à°¦à±à°µà°¾à°°à°¾, మీరౠGoogle $1$సేవా నిబంధనలà±$4 అంగీకరిసà±à°¤à±à°¨à±à°¨à°¾à°°à±.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "మీ PIN నవీకరించబడింది." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PINనౠనవీకరించడంలో విఫలమైంది. దయచేసి తరà±à°µà°¾à°¤ మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚టరౠకోసం PIN నవీకరించబడà±à°¤à±‹à°‚ది…" + }, + "HOST_STARTED": { + "message": "à°ˆ వినియోగదారౠకోసం హోసà±à°Ÿà± à°ªà±à°°à°¾à°°à°‚భించబడింది: %1." + }, + "HOST_STOPPED": { + "message": "హోసà±à°Ÿà± ఆపివేయబడింది." + }, + "IDLE_CONTINUE": { + "message": "కొనసాగà±" + }, + "IDLE_DISCONNECT": { + "message": "ఇపà±à°ªà±à°¡à±‡ à°¡à°¿à°¸à±â€Œà°•à°¨à±†à°•à±à°Ÿà± చేయి" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "మీ $1$ సెషనౠకొదà±à°¦à°¿ సమయం à°¨à±à°‚à°¡à°¿ నిషà±à°•à±à°°à°¿à°¯à°‚à°—à°¾ ఉంది, à°•à°¨à±à°• కాసేపటిలో à°¡à°¿à°¸à±â€Œà°•à°¨à±†à°•à±à°Ÿà± చేయబడà±à°¤à±à°‚ది.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à±" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± ఇనà±â€Œà°¸à±à°Ÿà°¾à°²à°°à±â€Œà°¨à± డౌనà±â€Œà°²à±‹à°¡à± చేయండి" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "మీ డెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయడానà±à°¨à°¿ à°ªà±à°°à°¾à°°à°‚భించడానికి, మీకౠసహాయం చేసే à°µà±à°¯à°•à±à°¤à°¿à°•à°¿ దిగà±à°µ à°ªà±à°°à°¾à°ªà±à°¯à°¤ కోడà±â€Œà°¨à± ఇవà±à°µà°‚à°¡à°¿." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "వారౠకోడà±â€Œà°¨à± నమోదౠచేసిన తరà±à°µà°¾à°¤ మీ భాగసà±à°µà°¾à°®à±à°¯ సెషనౠపà±à°°à°¾à°°à°‚భమవà±à°¤à±à°‚ది." + }, + "INVALID_PIN": { + "message": "దయచేసి ఆరౠలేదా అంతకంటే à°Žà°•à±à°•à±à°µ అంకెలనౠకలిగి ఉండే PINనౠనమోదౠచేయండి." + }, + "IT2ME_FIRST_RUN": { + "message": "వినియోగదారౠనà±à°‚à°¡à°¿ వినియోగదారà±à°•à± à°¸à±à°•à±à°°à±€à°¨à± భాగసà±à°µà°¾à°®à±à°¯à°‚ అనేది రిమోటౠసాంకేతిక మదà±à°¦à°¤à± కోసం ఉతà±à°¤à°®à°®à±ˆà°¨à°¦à°¿." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "కీబోరà±à°¡à± లేఅవà±à°Ÿà±â€Œà°²à±" + }, + "LABEL_CONNECTED": { + "message": "దీనికి కనెకà±à°Ÿà± చేయబడింది:" + }, + "LAST_ONLINE": { + "message": "$1$ (చివరిగా ఆనà±â€Œà°²à±ˆà°¨à±â€Œà°²à±‹ ఉనà±à°¨à°¦à°¿ $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "ఎలాగో తెలà±à°¸à±à°•à±‹à°‚à°¡à°¿." + }, + "LEARN_MORE": { + "message": "మరింత తెలà±à°¸à±à°•à±‹à°‚à°¡à°¿." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± à°ªà±à°°à°¾à°§à°¾à°¨à±à°¯à°¤à°²à±" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome రిమోటà±\nడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà±" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà± à°…à°¨à±â€Œà°‡à°¨à±â€Œà°¸à±à°Ÿà°¾à°²à°°à±" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win à°•à±€ (Macలో ⌘) కోసం à°•à±à°¡à°¿ Ctrl ఉపయోగించండి" + }, + "MAXIMIZE_WINDOW": { + "message": "విండోనౠగరిషà±à°Ÿà±€à°•à°°à°¿à°‚à°šà±" + }, + "ME2ME_FIRST_RUN": { + "message": "మీ à°¸à±à°µà°‚à°¤ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± à°Žà°•à±à°•à°¡à°¿ à°¨à±à°‚డైనా à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయండి." + }, + "MESSAGE_GENERATING": { + "message": "à°ªà±à°°à°¾à°ªà±à°¯à°¤ కోడà±â€Œà°¨à± రూపొందిసà±à°¤à±‹à°‚ది..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "మీ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± సెషనౠమà±à°—ిసింది." + }, + "MESSAGE_SHARED": { + "message": "మీ డెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ $1$తో భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయబడింది.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "విండోనౠకనిషà±à°Ÿà±€à°•à°°à°¿à°‚à°šà±" + }, + "MODE_AUTHORIZE": { + "message": "à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°¿à°‚à°šà°‚à°¡à°¿" + }, + "MODE_IT2ME": { + "message": "రిమోటౠసహాయం" + }, + "MODE_ME2ME": { + "message": "నా à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à±" + }, + "NEW_WINDOW": { + "message": "కొతà±à°¤ విండో..." + }, + "NO_PAIRED_CLIENTS": { + "message": "జత చేయబడిన à°•à±à°²à°¯à°¿à°‚à°Ÿà±â€Œà°²à± అందరౠతొలగించబడà±à°¡à°¾à°°à±." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "à°ˆ à°ªà±à°²à°¾à°Ÿà±â€Œà°«à°¾à°°à°®à±â€Œà°²à±‹ డెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°à°•à±€à°•à°°à°£à°•à°¿ మదà±à°¦à°¤à± లేదà±. మీరౠఇపà±à°ªà°Ÿà°¿à°•à±€ à°…à°¨à±à°µà°°à±à°¤à°¨à°¾à°¨à±à°¨à°¿ ఉపయోగించవచà±à°šà±, కానీ వినియోగదారౠఅనà±à°­à°µà°‚ తకà±à°•à±à°µ à°¸à±à°¥à°¾à°¯à°¿à°²à±‹ ఉంటà±à°‚ది." + }, + "OFFLINE": { + "message": "$1$ (ఆఫà±â€Œà°²à±ˆà°¨à±)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "హోసà±à°Ÿà±â€Œà°¨à± à°ªà±à°°à°¾à°°à°‚భించడంలో విఫలమైంది." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "చెలà±à°²à°¨à°¿ హోసà±à°Ÿà± కానà±à°«à°¿à°—రేషనà±." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "చెలà±à°²à°¨à°¿ హోసà±à°Ÿà± యజమాని డొమైనà±." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "చెలà±à°²à°¨à°¿ హోసà±à°Ÿà± id." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "హోసà±à°Ÿà± చెలà±à°²à°¨à°¿ OAuth ఆధారాలతో కానà±à°«à°¿à°—రౠచేయబడింది." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "à°•à°¨à±à°¸à±‹à°²à± లాజికౠసà±à°•à±à°°à±€à°¨à±â€Œà°²à±‹ అమలయà±à°¯à±‡ హోసà±à°Ÿà± వినియోగదారౠనిరà±à°¦à°¿à°·à±à°Ÿ సెషనà±â€Œà°²à±‹ అమలయà±à°¯à±‡ హోసà±à°Ÿà±â€Œà°•à°¿ మారడం à°¦à±à°µà°¾à°°à°¾ à°•à°°à±à°Ÿà±†à°¯à°¿à°¨à± మోడà±â€Œà°•à°¿ మదà±à°¦à°¤à± ఇవà±à°µà°¡à°¾à°¨à°¿à°•à°¿ à°·à°Ÿà±â€Œà°¡à±Œà°¨à± చేయబడింది." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "విధాన మారà±à°ªà±à°¨à°¿ à°…à°¨à±à°®à°¤à°¿à°‚చడానికి హోసà±à°Ÿà± à°ªà±à°¨à°ƒà°ªà±à°°à°¾à°°à°‚భించబడà±à°¤à±‹à°‚ది." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "విధానానà±à°¨à°¿ చదవడంలో హోసà±à°Ÿà± విఫలమైంది." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "హోసà±à°Ÿà± షటౠడౌనౠఅయà±à°¯à°¿à°‚ది." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "à°—à±à°°à±à°¤à±à°ªà°Ÿà±à°Ÿà°¨à°¿ హోసà±à°Ÿà± లోపం: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "చెలà±à°²à°¨à°¿ హోసà±à°Ÿà± యజమాని." + }, + "OK": { + "message": "సరే" + }, + "OPTIONS_MENU": { + "message": "ఎంపికలà±" + }, + "OUTGOING_CONNECTIONS": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à± à°¨à±à°‚à°¡à°¿" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "కింది à°•à±à°²à°¯à°¿à°‚à°Ÿà±â€Œà°²à± à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± జత చేయబడà±à°¡à°¾à°°à± మరియౠPINని అందించకà±à°‚డానే కనెకà±à°Ÿà± కాగలవà±. మీరౠఈ à°…à°¨à±à°®à°¤à°¿à°¨à°¿ à°Žà°ªà±à°ªà±à°¡à±ˆà°¨à°¾ à°’à°•à±à°•à±Šà°•à±à°•à°°à°¿ కోసం లేదా à°•à±à°²à°¯à°¿à°‚à°Ÿà±â€Œà°²à± అందరి కోసం ఉపసంహరించవచà±à°šà±." + }, + "PAIRED_CLIENT_DATE": { + "message": "జత చేయబడిన తేదీ" + }, + "PAIRED_CLIENT_NAME": { + "message": "à°•à±à°²à°¯à°¿à°‚à°Ÿà±" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "దయచేసి రెండౠపెటà±à°Ÿà±†à°²à±à°²à±‹à°¨à±‚ ఒకే PINనౠనమోదౠచేయండి." + }, + "PIN_MESSAGE": { + "message": "దయచేసి $1$ కోసం మీ PINనౠనమోదౠచేయండి.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "దయచేసి రిమోటౠకంపà±à°¯à±‚టరౠకోసం మీ PINనౠనమోదౠచేయండి." + }, + "PRODUCT_DESCRIPTION": { + "message": "ఇంటరà±à°¨à±†à°Ÿà±â€Œà°²à±‹ à°¸à±à°°à°•à±à°·à°¿à°¤à°‚à°—à°¾ ఇతర à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à°¨à± à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయండి లేదా మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à± à°ªà±à°°à°¾à°ªà±à°¯à°¤ చేయడానికి మరొక వినియోగదారà±à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà°‚à°¡à°¿." + }, + "PRODUCT_NAME": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome à°…à°¨à±à°µà°°à±à°¤à°¨ à°¸à±à°Ÿà±à°°à±€à°®à°¿à°‚à°—à±" + }, + "RECONNECT": { + "message": "మళà±à°³à±€ కనెకà±à°Ÿà± చెయà±à°¯à°¿" + }, + "REMEMBER_PIN": { + "message": "మరోసారి à°ˆ పరికరం à°¨à±à°‚à°¡à°¿ à°ˆ హోసà±à°Ÿà±â€Œà°•à± కనెకà±à°Ÿà± చేసà±à°¤à±à°¨à±à°¨à°ªà±à°ªà±à°¡à± PINనౠఅడగవదà±à°¦à±." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "à°ªà±à°°à°§à°¾à°¨ లైబà±à°°à°°à±€" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "డెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°à°•à±€à°•à°°à°£ à°ªà±à°°à°•à±à°°à°¿à°¯" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± హోసà±à°Ÿà±â€Œà°•à°¿ ఆదేశాలనౠజారీ చేసే à°…à°¨à±à°µà°°à±à°¤à°¨à°‚." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "హోసà±à°Ÿà± à°ªà±à°°à°•à±à°°à°¿à°¯" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "రిమోటింగౠహోసà±à°Ÿà± నిరà±à°µà°¹à°£ కోసం à°¸à±à°¥à°¾à°¨à°¿à°• సందేశ హోసà±à°Ÿà±" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "రిమోటౠసహాయం కోసం à°¸à±à°¥à°¾à°¨à°¿à°• సందేశ హోసà±à°Ÿà±" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "à°­à°¦à±à°°à°¤à°¾ à°•à±€ రిమోటింగౠపà±à°°à°¾à°¸à±†à°¸à±" + }, + "RESIZE_TO_CLIENT": { + "message": "డెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± సరిపోయే పరిమాణానికి మారà±à°šà±" + }, + "RESTART_BUTTON": { + "message": "ఇపà±à°ªà±à°¡à±‡ à°ªà±à°¨à°ƒà°ªà±à°°à°¾à°°à°‚à°­à°¿à°‚à°šà±" + }, + "RESTORE_WINDOW": { + "message": "à°ªà±à°¨à°°à±à°¦à±à°§à°°à°£ విండో" + }, + "RETRY": { + "message": "మళà±à°²à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿" + }, + "SCREEN_OPTIONS": { + "message": "à°¸à±à°•à±à°°à±€à°¨à± ఎంపికలà±" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Delని పంపà±" + }, + "SEND_FEEDBACK": { + "message": "సమసà±à°¯à°¨à± నివేదించండి..." + }, + "SEND_KEYS": { + "message": "పంపే కీలà±" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScnని పంపà±" + }, + "SERVICE_DESCRIPTION": { + "message": "à°ˆ సేవ Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°•à±à°²à°¯à°¿à°‚à°Ÿà±â€Œà°² à°¨à±à°‚à°¡à°¿ ఇనà±â€Œà°•à°®à°¿à°‚గౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± à°…à°¨à±à°®à°¤à°¿à°¸à±à°¤à±à°‚ది." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "à°ˆ సెటà±à°Ÿà°¿à°‚గౠమీ డొమైనౠవిధానం à°¦à±à°µà°¾à°°à°¾ నిరà±à°µà°¹à°¿à°‚చబడà±à°¤à±‹à°‚ది." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయి" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "à°°à°¦à±à°¦à± చెయà±à°¯à°¿" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "మీరౠఈ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°¨à°¿ మరో వినియోగదారౠచూడటానికి మరియౠనియంతà±à°°à°¿à°‚చడానికి దీనà±à°¨à°¿ భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?" + }, + "SHOW_STATS": { + "message": "గణాంకాలనౠచూపà±" + }, + "SHOW_STATS_WITH_RTT": { + "message": "గణాంకాలనౠచూపౠ(కనెకà±à°·à°¨à±: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "సరిపోయేలా à°•à±à°¦à°¿à°‚à°šà±" + }, + "SIGN_IN_BUTTON": { + "message": "సైనౠఇనà±" + }, + "SIGN_OUT_BUTTON": { + "message": "సైనౠఔటà±" + }, + "STOP_SHARING_BUTTON": { + "message": "భాగసà±à°µà°¾à°®à±à°¯à°‚ చేయడానà±à°¨à°¿ ఆపివేయి" + }, + "SURVEY_INVITATION": { + "message": "Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± మెరà±à°—à±à°ªà°°à°šà°¡à°‚లో సహాయం చేయాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? $1$సరà±à°µà±‡à°²à±‹ పాలà±à°—ొనండి.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "సమయం" + }, + "TOGGLE_STATS": { + "message": "గణాంకాలనౠచూపà±" + }, + "TOOLTIP_CONNECT": { + "message": "$1$కౠకనెకà±à°Ÿà± చేయి", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "à°ˆ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°•à± రిమోటౠకనెకà±à°·à°¨à±â€Œà°²à°¨à± నిలిపివేయి" + }, + "TOOLTIP_REFRESH": { + "message": "హోసà±à°Ÿà±â€Œà°² జాబితానౠరీఫà±à°°à±†à°·à± చేయి" + }, + "TOOLTIP_RENAME": { + "message": "à°•à°‚à°ªà±à°¯à±‚టరౠపేరà±à°¨à± సవరించà±" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (à°—à°¡à±à°µà±-తేదీ-à°®à±à°—ిసింది)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "ఖాతా" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "దయచేసి Chrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà± à°¦à±à°µà°¾à°°à°¾ à°ªà±à°°à°¾à°ªà±à°¯à°¤à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚చడానికి దిగà±à°µ మీ ఖాతా మరియౠPINనౠనిరà±à°§à°¾à°°à°¿à°‚à°šà°‚à°¡à°¿." + }, + "WARNING_NAT_DISABLED": { + "message": "గమనిక: విధాన సెటà±à°Ÿà°¿à°‚à°—à±â€Œà°²à± మీ నెటà±â€Œà°µà°°à±à°•à±â€Œà°²à±‹à°¨à°¿ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°² మధà±à°¯ మాతà±à°°à°®à±‡ కనెకà±à°·à°¨à±â€Œà°²à°¨à± à°…à°¨à±à°®à°¤à°¿à°¸à±à°¤à°¾à°¯à°¿." + }, + "WARNING_NOT_WINDOWED": { + "message": "గమనిక: à°…à°¨à±à°¨à°¿ కీబోరà±à°¡à± సతà±à°µà°°à°®à°¾à°°à±à°—ాలౠఅందà±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨à°¾à°¯à°¨à°¿ నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°•à±‹à°µà°¡à°¾à°¨à°¿à°•à°¿, మీరౠChrome రిమోటౠడెసà±à°•à±â€Œà°Ÿà°¾à°ªà±â€Œà°¨à± ‘విండోగా తెరà±à°µà±â€™à°•à± కానà±à°«à°¿à°—రౠచేయవచà±à°šà±." + }, + "WHY_IS_THIS_SAFE": { + "message": "ఇది à°Žà°‚à°¦à±à°•à± à°¸à±à°°à°•à±à°·à°¿à°¤à°‚?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "విండోలà±" + }, + "WORKING": { + "message": "పని చేసà±à°¤à±‹à°‚ది..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/th/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/th/messages.json new file mode 100644 index 000000000000..a14ed390ba75 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/th/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ยอมรับà¹à¸¥à¸°à¸•à¸´à¸”ตั้ง" + }, + "ACCESS_CODE": { + "message": "รหัสà¸à¸²à¸£à¹€à¸‚้าถึง" + }, + "ACCESS_CODE_TIMER": { + "message": "รหัสà¸à¸²à¸£à¹€à¸‚้าถึงนี้จะหมดอายุในอีภ$1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "ความคิดเห็น" + }, + "ALL_CONNECTIONS": { + "message": "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸—ั้งหมด" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "พิมพ์ PIN ซ้ำอีà¸à¸„รั้ง" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "ยà¸à¹€à¸¥à¸´à¸" + }, + "CLEAR_HISTORY": { + "message": "ล้างประวัติ" + }, + "CLOSE": { + "message": "ปิด" + }, + "CLOSE_PROMPT": { + "message": "à¸à¸²à¸£à¸­à¸­à¸à¸ˆà¸²à¸à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰à¸ˆà¸°à¸ªà¸´à¹‰à¸™à¸ªà¸¸à¸”เซสชัน Chrome Remote Desktop ของคุณ" + }, + "CLOSE_WINDOW": { + "message": "ปิดหน้าต่าง" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ว่าต้องà¸à¸²à¸£à¸›à¸´à¸”ใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸à¸±à¸š $1$ หาà¸à¸„ุณเปลี่ยนใจภายหลัง คุณจะต้องไปที่คอมพิวเตอร์เครื่องนั้นเพื่อเปิดใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸­à¸µà¸à¸„รั้ง", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§" + }, + "CONNECTION_FROM_HEADER": { + "message": "จาà¸" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ประวัติà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "พอใช้" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "ดี" + }, + "CONNECTION_QUALITY_POOR": { + "message": "à¹à¸¢à¹ˆ" + }, + "CONNECTION_TO_HEADER": { + "message": "ถึง" + }, + "CONNECT_ANYWAY": { + "message": "ยังต้องà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­" + }, + "CONNECT_BUTTON": { + "message": "เชื่อมต่อ" + }, + "CONTINUE_BUTTON": { + "message": "ดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­" + }, + "CONTINUE_PROMPT": { + "message": "ขณะนี้คุณà¸à¸³à¸¥à¸±à¸‡à¹à¸Šà¸£à¹Œà¸„อมพิวเตอร์เครื่องนี้à¸à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸­à¸·à¹ˆà¸™ คุณต้องà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸•à¹ˆà¸­à¹„ปหรือไม่" + }, + "CONTROLLER_NAME": { + "message": "Chrome Remote Desktop Host Controller" + }, + "COPYRIGHT": { + "message": "ลิขสิทธิ์ 2013 Google Inc. สงวนลิขสิทธิ์" + }, + "CREDITS": { + "message": "เครดิต" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "ลบทั้งหมด" + }, + "DELETE_PAIRED_CLIENT": { + "message": "ลบ" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­ คุณจะต้องให้สิทธิ์เพิ่มเติมในà¸à¸²à¸£à¹€à¸‚้าถึงคอมพิวเตอร์ของคุณà¸à¹ˆà¸­à¸™ โดยต้องทำเพียงครั้งเดียว" + }, + "DESCRIPTION_CONNECT": { + "message": "ขอให้ผู้ใช้ที่เป็นเจ้าของคอมพิวเตอร์ที่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸„ลิภ“$1$†à¹à¸¥à¸°à¹ƒà¸«à¹‰à¸£à¸«à¸±à¸ªà¸à¸²à¸£à¹€à¸‚้าถึงà¹à¸à¹ˆà¸„ุณ", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¸„ุณà¹à¸Šà¸£à¹Œà¸„อมพิวเตอร์ของคุณผ่านเว็บอย่างปลอดภัย ผู้ใช้ทั้งสองà¸à¹ˆà¸²à¸¢à¸ˆà¸°à¸•à¹‰à¸­à¸‡à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชัน Chrome Remote Desktop ซึ่งสามารถรับได้ที่ $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "โฮสต์ระยะไà¸à¸¥à¸à¸³à¸«à¸™à¸”ให้คุณตรวจสอบสิทธิ์à¸à¸±à¸šà¹€à¸§à¹‡à¸šà¹„ซต์ของบุคคลที่สาม หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­ คุณต้องให้สิทธิ์อนุà¸à¸²à¸•à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•à¸´à¸¡à¹à¸à¹ˆ Chrome Remote Desktop เพื่อเข้าถึงที่อยู่นี้:" + }, + "DISABLE_HOST": { + "message": "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "ตัดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Remote Desktop Service" + }, + "DURATION_HEADER": { + "message": "ระยะเวลา" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "คุณไม่มีสิทธิ์ในà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันนี้" + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "à¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸ªà¸´à¸—ธิ์ล้มเหลว โปรดลงชื่อเข้าใช้ Chrome อีà¸à¸„รั้ง" + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "คอมโพเนนต์ที่จำเป็นบางอย่างขาดหายไป โปรดตรวจสอบว่าคุณได้ติดตั้งซอฟต์à¹à¸§à¸£à¹Œà¹€à¸§à¸­à¸£à¹Œà¸Šà¸±à¸™à¸¥à¹ˆà¸²à¸ªà¸¸à¸”à¹à¸¥à¸°à¸¥à¸­à¸‡à¸­à¸µà¸à¸„รั้ง" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "เà¸à¸´à¸”ข้อผิดพลาดในเครือข่าย เราจะรีสตาร์ทà¹à¸­à¸›à¹€à¸¡à¸·à¹ˆà¸­à¸­à¸¸à¸›à¸à¸£à¸“์ของคุณออนไลน์อีà¸à¸„รั้ง" + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "คอมพิวเตอร์ระยะไà¸à¸¥à¹„ม่สามารถเริ่มต้นเซสชัน หาà¸à¸›à¸±à¸à¸«à¸²à¸¢à¸±à¸‡à¸„งอยู่ โปรดลองà¸à¸³à¸«à¸™à¸”ค่าโฮสต์อีà¸à¸„รั้ง" + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "คอมพิวเตอร์ระยะไà¸à¸¥à¹„ม่ตอบสนองคำขอà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­ โปรดตรวจยืนยันว่าคอมพิวเตอร์ดังà¸à¸¥à¹ˆà¸²à¸§à¸­à¸­à¸™à¹„ลน์อยู่à¹à¸¥à¸°à¸¥à¸­à¸‡à¸­à¸µà¸à¸„รั้ง" + }, + "ERROR_HOST_OVERLOAD": { + "message": "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¸„อมพิวเตอร์ระยะไà¸à¸¥à¸–ูà¸à¸šà¸¥à¹‡à¸­à¸à¹„ว้ชั่วคราว เนื่องจาà¸à¸¡à¸µà¸œà¸¹à¹‰à¸žà¸¢à¸²à¸¢à¸²à¸¡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¸„อมพิวเตอร์ดังà¸à¸¥à¹ˆà¸²à¸§à¹‚ดยใช้ PIN ที่ไม่ถูà¸à¸•à¹‰à¸­à¸‡ โปรดลองอีà¸à¸„รั้งในภายหลัง" + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "ไม่สามารถลงทะเบียนคอมพิวเตอร์เครื่องนี้" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "ระบบตรวจพบเวอร์ชันของโปรโตคอลที่เข้าà¸à¸±à¸™à¹„ม่ได้ โปรดตรวจสอบว่าคุณมีซอฟต์à¹à¸§à¸£à¹Œà¹€à¸§à¸­à¸£à¹Œà¸Šà¸±à¸™à¸¥à¹ˆà¸²à¸ªà¸¸à¸”ติดตั้งอยู่บนคอมพิวเตอร์ทั้ง 2 เครื่องà¹à¸¥à¹‰à¸§ à¹à¸¥à¸°à¸¥à¸­à¸‡à¸­à¸µà¸à¸„รั้ง" + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "รหัสà¸à¸²à¸£à¹€à¸‚้าถึงไม่ถูà¸à¸•à¹‰à¸­à¸‡ โปรดลองอีà¸à¸„รั้ง" + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่านโยบายไม่อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹à¸Šà¸£à¹Œà¸„อมพิวเตอร์นี้เป็นโฮสต์ Chrome Remote Desktop โปรดติดต่อขอรับความช่วยเหลือจาà¸à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¸‚องคุณ" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "เซสชันระยะไà¸à¸¥à¸«à¸¡à¸”อายุลงà¹à¸¥à¹‰à¸§" + }, + "ERROR_MISSING_PLUGIN": { + "message": "คอมโพเนนต์ที่จำเป็นบางอย่างขาดหายไป โปรดตรวจสอบว่าคุณใช้ Chrome เวอร์ชันล่าสุดà¹à¸¥à¸°à¸¥à¸­à¸‡à¸­à¸µà¸à¸„รั้ง" + }, + "ERROR_NACL_DISABLED": { + "message": "คอมโพเนนต์ที่ต้องใช้หายไปบางส่วน โปรดไปที่ chrome://plugins à¹à¸¥à¸°à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸§à¹ˆà¸²à¹„ด้เปิดใช้ Native Client à¹à¸¥à¹‰à¸§" + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "คอมโพเนนต์ที่ต้องใช้หยุดทำงาน โปรดรายงานปัà¸à¸«à¸²à¸™à¸µà¹‰à¹„ปยังนัà¸à¸žà¸±à¸’นาซอฟต์à¹à¸§à¸£à¹Œ" + }, + "ERROR_NETWORK_FAILURE": { + "message": "ไม่สามารถเชื่อมต่อเครือข่าย โปรดตรวจสอบว่าอุปà¸à¸£à¸“์ออนไลน์อยู่" + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "คุณยังไม่ได้ลงชื่อเข้าใช้ Chrome โปรดลงชื่อเข้าใช้à¹à¸¥à¸°à¸¥à¸­à¸‡à¸­à¸µà¸à¸„รั้ง" + }, + "ERROR_NOT_AUTHORIZED": { + "message": "คุณไม่มีสิทธิ์ในà¸à¸²à¸£à¸—ำงานนี้" + }, + "ERROR_NOT_FOUND": { + "message": "ออบเจ็à¸à¸•à¹Œà¸—ี่ขอไม่มีอยู่" + }, + "ERROR_P2P_FAILURE": { + "message": "ไม่สามารถเข้าถึงโฮสต์ อาจเป็นเพราะà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของเครือข่ายที่คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸­à¸¢à¸¹à¹ˆ" + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "ไม่สามารถให้บริà¸à¸²à¸£à¸™à¸µà¹‰à¹„ด้ชั่วคราว โปรดลองอีà¸à¸„รั้งในภายหลัง" + }, + "ERROR_UNEXPECTED": { + "message": "เà¸à¸´à¸”ข้อผิดพลาดที่ไม่คาดคิด โปรดรายงานปัà¸à¸«à¸²à¸™à¸µà¹‰à¹ƒà¸«à¹‰à¸™à¸±à¸à¸žà¸±à¸’นาซอฟต์à¹à¸§à¸£à¹Œà¸—ราบ" + }, + "EXIT_FULL_SCREEN": { + "message": "ออà¸à¸ˆà¸²à¸à¸à¸²à¸£à¹à¸ªà¸”งà¹à¸šà¸šà¹€à¸•à¹‡à¸¡à¸«à¸™à¹‰à¸²à¸ˆà¸­" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "ไม่สามารถรีเซ็ตà¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันนี้ คุณยังคงสามารถส่งรายงานข้อบà¸à¸žà¸£à¹ˆà¸­à¸‡à¹„ด้" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "รีเซ็ตà¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชัน คุณจะสูà¸à¹€à¸ªà¸µà¸¢à¸‡à¸²à¸™à¸—ี่ไม่ได้บันทึà¸à¹„ว้ทั้งหมด" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "ฉันไม่สามารถเปิดà¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันนี้" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันทำงานช้าเà¸à¸´à¸™à¹„ป" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "ฉันไม่สามารถเปิดไฟล์ใน Google ไดรฟ์" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "ฉันไม่เห็นไฟล์ที่บันทึà¸à¹„ว้à¹à¸šà¸šà¸­à¸­à¸™à¹„ลน์ใน Google ไดรฟ์" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "ฉันมีปัà¸à¸«à¸²à¹€à¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸«à¸£à¸·à¸­à¹€à¸¡à¸²à¸ªà¹Œ" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "เพื่อช่วยเราในà¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸² โปรดบอà¸à¸›à¸±à¸à¸«à¸²à¹ƒà¸«à¹‰à¹€à¸£à¸²à¸—ราบ:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "มีปัà¸à¸«à¸²à¸­à¸·à¹ˆà¸™" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "เลือà¸â€¦" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¹€à¸£à¸²à¸•à¸´à¸”ต่อคุณสำหรับข้อมูลเพิ่มเติม จะมีà¸à¸²à¸£à¹ƒà¸ªà¹ˆà¸—ี่อยู่อีเมลของคุณในความคิดเห็นทั้งหมดที่คุณส่งมา" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "รายงานปัà¸à¸«à¸²" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "รวมบันทึà¸à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันที่จะช่วยเราในà¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¸‚องคุณ (บันทึà¸à¸­à¸²à¸ˆà¸¡à¸µà¸‚้อมูลส่วนตัว)" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "บันทึà¸à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸Šà¸±à¸™à¸­à¸²à¸ˆà¸£à¸§à¸¡à¸‚้อมูลส่วนตัว รวมถึงข้อมูลประจำตัวของคุณ (ที่อยู่อีเมล) ตลอดจนชื่อà¹à¸¥à¸°à¸„ุณสมบัติของไฟล์à¹à¸¥à¸°à¹‚ฟลเดอร์ใน Google ไดรฟ์" + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "ข้อมูลนี้จะใช้เพื่อวินิจฉัยปัà¸à¸«à¸²à¸—ี่คุณรายงานเท่านั้น โดยจะมีเพียงผู้ตรวจสอบรายงานเท่านั้นที่ใช้งานได้ à¹à¸¥à¸°à¸ˆà¸°à¸¡à¸µà¸à¸²à¸£à¹€à¸à¹‡à¸šà¸£à¸±à¸à¸©à¸²à¹„ว้ไม่เà¸à¸´à¸™ 30 วัน" + }, + "FOOTER_CONNECTING": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­â€¦" + }, + "FOOTER_WAITING": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¸£à¸­à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­..." + }, + "FOR_PLATFORM_MAC": { + "message": "สำหรับ Mac (OS X 10.6 ขึ้นไป)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "สำหรับ Windows (XP ขึ้นไป)" + }, + "FULL_SCREEN": { + "message": "เต็มหน้าจอ" + }, + "GET_STARTED": { + "message": "เริ่มต้น" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "ยอมรับ" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "ปà¸à¸´à¹€à¸ªà¸˜" + }, + "HELP": { + "message": "ช่วยเหลือ" + }, + "HOME_ACCESS_BUTTON": { + "message": "เข้าถึง" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "ดูà¹à¸¥à¸°à¸„วบคุมคอมพิวเตอร์ที่ใช้งานร่วมà¸à¸±à¸™" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "คุณสามารถเข้าถึงคอมพิวเตอร์เครื่องนี้ได้อย่างปลอดภัยโดยใช้ Chrome Remote Desktop" + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "เปลี่ยน PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "มีà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸„อมพิวเตอร์เครื่องนี้ภายใต้บัà¸à¸Šà¸µà¸—ี่ต่างà¸à¸±à¸™à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸‚ณะนี้" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ดู/à¹à¸à¹‰à¹„ข" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "คอมพิวเตอร์เครื่องนี้ได้รับà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าให้อนุà¸à¸²à¸•à¹„คลเอ็นต์หนึ่งหรือมาà¸à¸à¸§à¹ˆà¸²à¸ªà¸²à¸¡à¸²à¸£à¸–เชื่อมต่อโดยไม่ต้องป้อน PIN" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "เปิดใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "คุณต้องเปิดใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸«à¸²à¸à¸„ุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰ Chrome Remote Desktop ในà¸à¸²à¸£à¹€à¸‚้าถึงคอมพิวเตอร์เครื่องนี้" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "ปิดใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥" + }, + "HOME_SHARE_BUTTON": { + "message": "à¹à¸Šà¸£à¹Œ" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "à¹à¸Šà¸£à¹Œà¸„อมพิวเตอร์นี้เพื่อให้ผู้ใช้อื่นเห็นà¹à¸¥à¸°à¸„วบคุมคอมพิวเตอร์ได้" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(คุณลัà¸à¸©à¸“ะนี้ยังไม่มีให้ใช้งานในคอมพิวเตอร์ของคุณ)" + }, + "HOST_CATEGORY": { + "message": "โฮสต์" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "à¸à¸²à¸£à¹€à¸‚้าถึงถูà¸à¸›à¸à¸´à¹€à¸ªà¸˜à¸ªà¸³à¸«à¸£à¸±à¸šà¹„คลเอ็นต์: %1" + }, + "HOST_CLIENT_CONNECTED": { + "message": "ไคลเอ็นต์ที่เชื่อมต่อ: %1" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "ไคลเอ็นต์ที่ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­: %1" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP ช่องสำหรับไคลเอ็นต์: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "ในà¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸à¸±à¸šà¸„อมพิวเตอร์เครื่องอื่น ให้ติดตั้ง Chrome Remote Desktop ที่คอมพิวเตอร์ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸„ลิภ\"$1$\"", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "คุณไม่มีคอมพิวเตอร์ที่ได้ลงทะเบียนไว้ หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸à¸±à¸šà¸„อมพิวเตอร์ ให้ติดตั้ง Chrome Remote Desktop ที่คอมพิวเตอร์ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸„ลิภ\"$1$\"", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰à¸„ุณได้ลงชื่อเข้าใช้เป็น $1$ ($2$) หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¹€à¸‚้าถึงคอมพิวเตอร์ในบัà¸à¸Šà¸µà¸™à¸±à¹‰à¸™ ให้$3$ลงชื่อเข้าใช้ Google Chrome$4$ ด้วยบัà¸à¸Šà¸µà¸™à¸±à¹‰à¸™à¹à¸¥à¸°à¸•à¸´à¸”ตั้ง Chrome Remote Desktop อีà¸à¸„รั้ง", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "โดยปà¸à¸•à¸´à¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตซอฟต์à¹à¸§à¸£à¹Œà¸ˆà¸°à¸—ำงานโดยอัตโนมัติ à¹à¸•à¹ˆà¸­à¸²à¸ˆà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§à¹ƒà¸™à¸šà¸²à¸‡à¸à¸£à¸“ีซึ่งพบไม่บ่อย à¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตซอฟต์à¹à¸§à¸£à¹Œà¸ˆà¸°à¹ƒà¸Šà¹‰à¹€à¸§à¸¥à¸²à¹„ม่เà¸à¸´à¸™à¸ªà¸­à¸‡à¸ªà¸²à¸¡à¸™à¸²à¸—ี à¹à¸¥à¸°à¸ªà¸²à¸¡à¸²à¸£à¸–ดำเนินà¸à¸²à¸£à¸‚ณะเชื่อมต่อคอมพิวเตอร์จาà¸à¸£à¸°à¸¢à¸°à¹„à¸à¸¥" + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Chrome Remote Desktop บน $1$ เà¸à¹ˆà¸²à¹€à¸à¸´à¸™à¹„ปà¹à¸¥à¸°à¸•à¹‰à¸­à¸‡à¸¡à¸µà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ต", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "ช่วยเราปรับปรุง Chrome Remote Desktop ให้ดีขึ้นด้วยà¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¹€à¸£à¸²à¸£à¸§à¸šà¸£à¸§à¸¡à¸ªà¸–ิติà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸£à¸²à¸¢à¸‡à¸²à¸™à¸‚้อขัดข้อง" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸›à¹‰à¸­à¸‡à¸à¸±à¸™à¸à¸²à¸£à¹€à¸‚้าถึงคอมพิวเตอร์เครื่องนี้ โปรดเลือภPIN $1$อย่างน้อยหà¸à¸«à¸¥à¸±à¸$2$ โดยจะต้องป้อน PIN นี้เมื่อเชื่อมต่อจาà¸à¸•à¸³à¹à¸«à¸™à¹ˆà¸‡à¸­à¸·à¹ˆà¸™", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "ไม่สามารถเริ่มบริà¸à¸²à¸£à¹€à¸‚้าถึงระยะไà¸à¸¥" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลดตัวติดตั้ง Chrome Remote Desktop Host เมื่อดาวน์โหลดเสร็จà¹à¸¥à¹‰à¸§ โปรดเรียà¸à¹ƒà¸Šà¹‰à¹‚ปรà¹à¸à¸£à¸¡à¸•à¸´à¸”ตั้งà¸à¹ˆà¸­à¸™à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­" + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "โปรดเรียà¸à¹ƒà¸Šà¹‰à¸•à¸±à¸§à¸•à¸´à¸”ตั้งà¸à¹ˆà¸­à¸™à¸”ำเนินà¸à¸²à¸£à¸•à¹ˆà¸­" + }, + "HOST_SETUP_STARTED": { + "message": "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸ªà¸³à¸«à¸£à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้ถูà¸à¹€à¸›à¸´à¸”ใช้งานà¹à¸¥à¹‰à¸§" + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "โปรดตรวจสอบà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸žà¸¥à¸±à¸‡à¸‡à¸²à¸™à¸‚องคอมพิวเตอร์ที่ใช้ à¹à¸¥à¸°à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¹ƒà¸«à¹‰à¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¹„ม่ได้à¸à¸³à¸«à¸™à¸”ค่าให้เข้าสู่โหมดสลีปเมื่อไม่มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™" + }, + "HOST_SETUP_STARTING": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¹€à¸›à¸´à¸”ใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸ªà¸³à¸«à¸£à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้…" + }, + "HOST_SETUP_STOPPED": { + "message": "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸ªà¸³à¸«à¸£à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้ถูà¸à¸›à¸´à¸”ใช้งานà¹à¸¥à¹‰à¸§" + }, + "HOST_SETUP_STOPPING": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¸›à¸´à¸”ใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸ªà¸³à¸«à¸£à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "ไม่สามารถปิดใช้งานà¸à¸²à¸£à¹€à¸‚้าถึงคอมพิวเตอร์เครื่องนี้จาà¸à¸£à¸°à¸¢à¸°à¹„à¸à¸¥ โปรดลองอีà¸à¸„รั้งในภายหลัง" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "à¸à¸²à¸£à¸”าวน์โหลด Chrome Remote Desktop Host Installer หมายถึงคุณยอมรับ$1$ข้อà¸à¸³à¸«à¸™à¸”ในà¸à¸²à¸£à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£$4ของ Google", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN ของคุณได้รับà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตà¹à¸¥à¹‰à¸§" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "ไม่สามารถอัปเดต PIN โปรดลองอีà¸à¸„รั้งในภายหลัง" + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸›à¹€à¸”ต PIN สำหรับคอมพิวเตอร์เครื่องนี้…" + }, + "HOST_STARTED": { + "message": "โฮสต์เริ่มใช้งานสำหรับผู้ใช้: %1" + }, + "HOST_STOPPED": { + "message": "หยุดโฮสต์à¹à¸¥à¹‰à¸§" + }, + "IDLE_CONTINUE": { + "message": "ดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­" + }, + "IDLE_DISCONNECT": { + "message": "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¹€à¸¥à¸¢" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "เซสชัน $1$ ไม่มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸¡à¸²à¸£à¸°à¸¢à¸°à¸«à¸™à¸¶à¹ˆà¸‡à¹à¸¥à¹‰à¸§ à¹à¸¥à¸°à¸£à¸°à¸šà¸šà¸ˆà¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¹€à¸£à¹‡à¸§à¹† นี้", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "à¸à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้" + }, + "INSTALLER_DOWNLOAD": { + "message": "ดาวน์โหลด Chrome Remote Desktop Host Installer" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¹€à¸”สà¸à¹Œà¸—็อปของคุณ โปรดให้รหัสà¸à¸²à¸£à¹€à¸‚้าถึงที่ด้านล่างนี้à¹à¸à¹ˆà¸šà¸¸à¸„คลที่จะให้ความช่วยเหลือคุณ" + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "เมื่อพวà¸à¹€à¸‚าป้อนรหัสà¹à¸¥à¹‰à¸§ เซสชันà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚องคุณจะเริ่มขึ้น" + }, + "INVALID_PIN": { + "message": "โปรดป้อน PIN ที่ประà¸à¸­à¸šà¸”้วยตัวเลขอย่างน้อยหà¸à¸«à¸¥à¸±à¸" + }, + "IT2ME_FIRST_RUN": { + "message": "à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸«à¸™à¹‰à¸²à¸ˆà¸­à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ เหมาะสำหรับà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸—างเทคนิคจาà¸à¸£à¸°à¸¢à¸°à¹„à¸à¸¥" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "à¸à¸²à¸£à¸ˆà¸±à¸”วางà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œ" + }, + "LABEL_CONNECTED": { + "message": "เชื่อมต่อà¹à¸¥à¹‰à¸§:" + }, + "LAST_ONLINE": { + "message": "$1$ (ออนไลน์ล่าสุดเมื่อ $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "เรียนรู้วิธีà¸à¸²à¸£" + }, + "LEARN_MORE": { + "message": "เรียนรู้เพิ่มเติม" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Preferences" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Remote\nDesktop Host" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Remote Desktop Host Uninstaller" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "ใช้ Ctrl ขวาสำหรับà¹à¸›à¹‰à¸™ Win (⌘ สำหรับ Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "ขยายหน้าต่างเต็มหน้าจอ" + }, + "ME2ME_FIRST_RUN": { + "message": "เข้าถึงคอมพิวเตอร์ของคุณเองจาà¸à¸—ี่ใดà¸à¹‡à¹„ด้" + }, + "MESSAGE_GENERATING": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸«à¸±à¸ªà¸à¸²à¸£à¹€à¸‚้าถึง..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "เซสชัน Chrome Remote Desktop ของคุณสิ้นสุดà¹à¸¥à¹‰à¸§" + }, + "MESSAGE_SHARED": { + "message": "ขณะนี้มีà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¹€à¸”สà¸à¹Œà¸—็อปของคุณà¸à¸±à¸š $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "ย่อหน้าต่าง" + }, + "MODE_AUTHORIZE": { + "message": "ให้สิทธิ์" + }, + "MODE_IT2ME": { + "message": "ความช่วยเหลือจาà¸à¸£à¸°à¸¢à¸°à¹„à¸à¸¥" + }, + "MODE_ME2ME": { + "message": "คอมพิวเตอร์ของฉัน" + }, + "NEW_WINDOW": { + "message": "หน้าต่างใหม่…" + }, + "NO_PAIRED_CLIENTS": { + "message": "ไคลเอ็นต์ที่ได้รับà¸à¸²à¸£à¸ˆà¸±à¸šà¸„ู่ทั้งหมดถูà¸à¸¥à¸šà¹à¸¥à¹‰à¸§" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "à¸à¸²à¸£à¸£à¸§à¸¡à¸£à¸°à¸šà¸šà¹€à¸”สà¸à¹Œà¸—็อปไม่ได้รับà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸šà¸™à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¸™à¸µà¹‰ คุณยังคงสามารถใช้à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันนี้ได้ à¹à¸•à¹ˆà¸›à¸£à¸°à¸ªà¸šà¸à¸²à¸£à¸“์ของผู้ใช้จะมีคุณภาพลดลง" + }, + "OFFLINE": { + "message": "$1$ (ออฟไลน์)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "à¸à¸²à¸£à¹€à¸•à¸£à¸µà¸¢à¸¡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹‚ฮสต์ล้มเหลว" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าโฮสต์ไม่ถูà¸à¸•à¹‰à¸­à¸‡" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "โดเมนเจ้าของโฮสต์ไม่ถูà¸à¸•à¹‰à¸­à¸‡" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "รหัสโฮสต์ไม่ถูà¸à¸•à¹‰à¸­à¸‡" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "โฮสต์ได้รับà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าด้วยข้อมูลรับรอง OAuth ที่ไม่ถูà¸à¸•à¹‰à¸­à¸‡" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "โฮสต์ที่ทำงานที่หน้าจอตรรà¸à¸°à¸‚องคอนโซลได้ปิดตัวลงเพื่อสนับสนุนโหมด Curtain โดยà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹„ปเป็นโฮสต์ที่ทำงานในเซสชันเฉพาะผู้ใช้" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "โฮสต์à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™à¹ƒà¸«à¸¡à¹ˆ เพื่อนำà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸™à¹‚ยบายมาใช้" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "โฮสต์ไม่สามารถอ่านนโยบายได้" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "โฮสต์ปิดตัวลงà¹à¸¥à¹‰à¸§" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ข้อผิดพลาดของโฮสต์ที่ไม่รู้จัà¸: $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "เจ้าของโฮสต์ไม่ถูà¸à¸•à¹‰à¸­à¸‡" + }, + "OK": { + "message": "ตà¸à¸¥à¸‡" + }, + "OPTIONS_MENU": { + "message": "ตัวเลือà¸" + }, + "OUTGOING_CONNECTIONS": { + "message": "จาà¸à¸„อมพิวเตอร์เครื่องนี้" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "ไคลเอ็นต์ต่อไปนี้ถูà¸à¸ˆà¸±à¸šà¸„ู่à¸à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้à¹à¸¥à¸°à¸ªà¸²à¸¡à¸²à¸£à¸–เชื่อมต่อโดยไม่ต้องใส่รหัส PIN คุณสามารถยà¸à¹€à¸¥à¸´à¸à¸ªà¸´à¸—ธิ์นี้ได้ทุà¸à¹€à¸¡à¸·à¹ˆà¸­ ไม่ว่าจะเป็นทีละไคลเอ็นต์หรือสำหรับไคลเอ็นต์ทั้งหมด" + }, + "PAIRED_CLIENT_DATE": { + "message": "วันที่จับคู่" + }, + "PAIRED_CLIENT_NAME": { + "message": "ไคลเอ็นต์" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "โปรดป้อน PIN เดียวà¸à¸±à¸™à¸¥à¸‡à¹ƒà¸™à¸—ั้งสองช่อง" + }, + "PIN_MESSAGE": { + "message": "โปรดป้อน PIN ของคุณสำหรับ $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "โปรดป้อน PIN สำหรับคอมพิวเตอร์ระยะไà¸à¸¥" + }, + "PRODUCT_DESCRIPTION": { + "message": "เข้าถึงคอมพิวเตอร์เครื่องอื่นหรืออนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸­à¸·à¹ˆà¸™à¹€à¸‚้าถึงคอมพิวเตอร์ของคุณอย่างปลอดภัยผ่านทางอินเทอร์เน็ต" + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "เชื่อมต่อใหม่" + }, + "REMEMBER_PIN": { + "message": "อย่าขอ PIN อีà¸à¹€à¸¡à¸·à¹ˆà¸­à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¹„ปยังโฮสต์นี้จาà¸à¸­à¸¸à¸›à¸à¸£à¸“์เครื่องนี้" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Core Library" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Desktop Integration Process" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชันที่จะออà¸à¸„ำสั่งให้โฮสต์ของ Chrome Remote Desktop" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Host Process" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "โฮสต์à¸à¸²à¸£à¸£à¸±à¸šà¸ªà¹ˆà¸‡à¸‚้อความดั้งเดิมสำหรับà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¹‚ฮสต์ระยะไà¸à¸¥" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "โฮสต์à¸à¸²à¸£à¸£à¸±à¸šà¸ªà¹ˆà¸‡à¸‚้อความดั้งเดิมสำหรับà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸£à¸°à¸¢à¸°à¹„à¸à¸¥" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸—ำงานระยะไà¸à¸¥à¸‚องคีย์ความปลอดภัย" + }, + "RESIZE_TO_CLIENT": { + "message": "ปรับขนาดเดสà¸à¹Œà¸—็อปให้พอดี" + }, + "RESTART_BUTTON": { + "message": "รีสตาร์ทเลย" + }, + "RESTORE_WINDOW": { + "message": "à¸à¸¹à¹‰à¸„ืนหน้าต่าง" + }, + "RETRY": { + "message": "ลองอีà¸à¸„รั้ง" + }, + "SCREEN_OPTIONS": { + "message": "ตัวเลือà¸à¸«à¸™à¹‰à¸²à¸ˆà¸­" + }, + "SEND_CTRL_ALT_DEL": { + "message": "ส่ง Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "รายงานปัà¸à¸«à¸²â€¦" + }, + "SEND_KEYS": { + "message": "à¹à¸›à¹‰à¸™à¸ªà¹ˆà¸‡" + }, + "SEND_PRINT_SCREEN": { + "message": "ส่ง PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "บริà¸à¸²à¸£à¸™à¸µà¹‰à¸ˆà¸°à¸Šà¹ˆà¸§à¸¢à¹ƒà¸«à¹‰à¸ªà¸²à¸¡à¸²à¸£à¸–ใช้à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸‚าเข้าจาà¸à¹„คลเอ็นต์ Chrome Remote Desktop" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่านี้ได้รับà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¹‚ดยนโยบายโดเมนของคุณ" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "à¹à¸Šà¸£à¹Œ" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "ยà¸à¹€à¸¥à¸´à¸" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "คุณต้องà¸à¸²à¸£à¸ˆà¸°à¹à¸Šà¸£à¹Œà¸„อมพิวเตอร์เครื่องนี้เพื่อให้ผู้ใช้อื่นเห็นà¹à¸¥à¸°à¸„วบคุมไหม" + }, + "SHOW_STATS": { + "message": "à¹à¸ªà¸”งสถิติ" + }, + "SHOW_STATS_WITH_RTT": { + "message": "à¹à¸ªà¸”งสถิติ (à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "ลดขนาดให้พอดี" + }, + "SIGN_IN_BUTTON": { + "message": "ลงชื่อเข้าใช้" + }, + "SIGN_OUT_BUTTON": { + "message": "ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š" + }, + "STOP_SHARING_BUTTON": { + "message": "หยุดà¸à¸²à¸£à¹à¸Šà¸£à¹Œ" + }, + "SURVEY_INVITATION": { + "message": "หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸Šà¹ˆà¸§à¸¢à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡ Chrome Remote Desktop โปรด$1$ตอบà¹à¸šà¸šà¸ªà¸³à¸£à¸§à¸ˆ$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "เวลา" + }, + "TOGGLE_STATS": { + "message": "à¹à¸ªà¸”งสถิติ" + }, + "TOOLTIP_CONNECT": { + "message": "เชื่อมต่อà¸à¸±à¸š $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "ปิดใช้งานà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸¢à¸°à¹„à¸à¸¥à¸à¸±à¸šà¸„อมพิวเตอร์เครื่องนี้" + }, + "TOOLTIP_REFRESH": { + "message": "รีเฟรชรายà¸à¸²à¸£à¹‚ฮสต์" + }, + "TOOLTIP_RENAME": { + "message": "à¹à¸à¹‰à¹„ขชื่อคอมพิวเตอร์" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (ล้าสมัย)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "บัà¸à¸Šà¸µ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "โปรดยืนยันบัà¸à¸Šà¸µà¹à¸¥à¸° PIN ของคุณด้านล่างเพื่ออนุà¸à¸²à¸•à¹ƒà¸«à¹‰ Chrome Remote Desktop สามารถเข้าถึง" + }, + "WARNING_NAT_DISABLED": { + "message": "หมายเหตุ: à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่านโยบายอนุà¸à¸²à¸•à¹€à¸‰à¸žà¸²à¸°à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸„อมพิวเตอร์ภายในเครือข่ายของคุณเท่านั้น" + }, + "WARNING_NOT_WINDOWED": { + "message": "หมายเหตุ: เพื่อให้มั่นใจว่าทุà¸à¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸¥à¸±à¸”พร้อมใช้งาน คุณสามารถà¸à¸³à¸«à¸™à¸”ค่า Chrome Remote Desktop เป็น \"เปิดเป็นหน้าต่าง\"" + }, + "WHY_IS_THIS_SAFE": { + "message": "เหตุใดà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸™à¸µà¹‰à¸ˆà¸¶à¸‡à¸›à¸¥à¸­à¸”ภัย" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "หน้าต่าง" + }, + "WORKING": { + "message": "à¸à¸³à¸¥à¸±à¸‡à¸—ำงาน…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/tr/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/tr/messages.json new file mode 100644 index 000000000000..d47c6a085263 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/tr/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Kabul Et ve Yükle" + }, + "ACCESS_CODE": { + "message": "EriÅŸim kodu" + }, + "ACCESS_CODE_TIMER": { + "message": "Bu eriÅŸim kodunun süresi $1$ saniye içinde sona erecek", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Geri Bildirim" + }, + "ALL_CONNECTIONS": { + "message": "Tüm baÄŸlantılar" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "PIN'i yeniden yazın" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "Ä°ptal" + }, + "CLEAR_HISTORY": { + "message": "GeçmiÅŸi temizle" + }, + "CLOSE": { + "message": "Kapat" + }, + "CLOSE_PROMPT": { + "message": "Bu sayfadan ayrılırsanız Chrome Uzaktan Masaüstü oturumunuz sonlanır." + }, + "CLOSE_WINDOW": { + "message": "Pencereyi kapat" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "$1$ adlı ana bilgisayara uzaktan baÄŸlantıları devre dışı bırakmak istediÄŸinizden emin misiniz? Daha sonra fikrinizi deÄŸiÅŸtirirseniz, baÄŸlantıları yeniden etkinleÅŸtirmek için söz konusu bilgisayarı ziyaret etmeniz gerekecektir.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "BaÄŸlantı baÅŸarısız oldu" + }, + "CONNECTION_FROM_HEADER": { + "message": "Kimden" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "BaÄŸlantı GeçmiÅŸi" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Orta" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Ä°yi" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Kötü" + }, + "CONNECTION_TO_HEADER": { + "message": "Kime" + }, + "CONNECT_ANYWAY": { + "message": "Yine de baÄŸlan" + }, + "CONNECT_BUTTON": { + "message": "BaÄŸlan" + }, + "CONTINUE_BUTTON": { + "message": "Devam Et" + }, + "CONTINUE_PROMPT": { + "message": "Bu makineyi ÅŸu anda baÅŸka bir kullanıcıyla paylaşıyorsunuz. PaylaÅŸmaya devam etmek istiyor musunuz?" + }, + "CONTROLLER_NAME": { + "message": "Chrome Uzaktan Masaüstü Ana Makine Denetleyicisi" + }, + "COPYRIGHT": { + "message": "Telif Hakkı 2013 Google Inc. Tüm Hakları Saklıdır." + }, + "CREDITS": { + "message": "Katkıda Bulunanlar" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Tümünü sil" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Sil" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Devam etmek için öncelikle bilgisayarınıza geniÅŸletilmiÅŸ eriÅŸim izinleri vermelisiniz. Bunu yalnızca bir kez yapmanız yeterlidir." + }, + "DESCRIPTION_CONNECT": { + "message": "Bilgisayarına eriÅŸmek istediÄŸiniz kullanıcıdan “$1$†öğesini tıklamasını ve size eriÅŸim kodunu vermesini isteyin.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Uzaktan Masaüstü, bilgisayarınızı Web üzerinden güvenli bir ÅŸekilde paylaÅŸabilmenize olanak saÄŸlar. Her iki kullanıcının da Chrome Uzaktan Masaüstü uygulamasını çalıştırıyor olması gerekir. Uygulamayı $1$ adresinde bulabilirsiniz.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Uzak ana makine üçüncü taraf bir web sitesine kimlik doÄŸrulama iÅŸlemi yapmanızı gerektiriyor. Devam etmek üzere ÅŸu adrese eriÅŸim için Chrome Uzaktan Masaüstü'ne ek izinler vermelisiniz:" + }, + "DISABLE_HOST": { + "message": "Devre dışı bırak" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "BaÄŸlantıyı kes" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome Uzaktan Masaüstü Hizmeti" + }, + "DURATION_HEADER": { + "message": "Süre" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Bu uygulamayı çalıştırmak için izniniz yok." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Kimlik doÄŸrulama baÅŸarısız oldu. Lütfen Chrome'da tekrar oturum açın." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Bazı gerekli bileÅŸenler eksik. Lütfen yazılımın en son sürümünü yüklediÄŸinizden emin olun ve tekrar deneyin." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "AÄŸ hatası oluÅŸtu. Cihazınız tekrar çevrimiçi olduÄŸunda uygulamayı yeniden baÅŸlatacağız." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Uzak bilgisayar, oturumu ilk kullanıma hazırlayamadı. Sorun devam ederse lütfen ana makineyi tekrar yapılandırmayı deneyin." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Uzaktan baÄŸlanacağınız bilgisayar, baÄŸlantı isteklerine yanıt vermiyor. Lütfen bu bilgisayarın çevrimiçi olduÄŸunu doÄŸrulayın ve tekrar deneyin." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Bir kullanıcı geçersiz PIN ile baÄŸlanmaya çalıştığından uzak bilgisayara yapılan baÄŸlantılar geçici olarak engellenmiÅŸtir. Lütfen daha sonra tekrar deneyin." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Bu bilgisayar kaydettirilemedi." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Uyumsuz bir protokol sürümü algılandı. Lütfen her iki bilgisayara da yazılımın en son sürümünü yüklediÄŸinizden emin olun ve tekrar deneyin." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "EriÅŸim kodu geçersiz. Lütfen tekrar deneyin." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Politika ayarları bu bilgisayarın bir Chrome Uzaktan Masaüstü ana bilgisayarı olarak paylaşılmasına izin vermiyor. Yardım için sistem yöneticinizle iletiÅŸim kurun." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Uzak oturumun süresi sona erdi." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Bazı gerekli bileÅŸenler eksik. Lütfen Google Chrome'un son sürümünü çalıştırdığınızdan emin olun ve tekrar deneyin." + }, + "ERROR_NACL_DISABLED": { + "message": "Bazı gerekli bileÅŸenler eksik. Lütfen chrome://plugins adresine gidin ve Native Client'in etkinleÅŸtirildiÄŸinden emin olun." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Gerekli bir bileÅŸenin çalışması durdu. Lütfen bu sorunu geliÅŸtiricilere bildirin." + }, + "ERROR_NETWORK_FAILURE": { + "message": "AÄŸa baÄŸlanılamıyor. Lütfen cihazınızın çevrimiçi olduÄŸunu kontrol edin." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Chrome'da oturum açmadınız. Lütfen oturum açın ve tekrar deneyin." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Bu iÅŸlemi gerçekleÅŸtirmek için izniniz yok." + }, + "ERROR_NOT_FOUND": { + "message": "Ä°stenen nesne mevcut deÄŸil." + }, + "ERROR_P2P_FAILURE": { + "message": "Ana bilgisayara eriÅŸilemiyor. Bu sorun, kullandığınız ağın yapılandırmasından kaynaklanıyor olabilir." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Hizmet geçici olarak kullanılamıyor. Lütfen daha sonra tekrar deneyin." + }, + "ERROR_UNEXPECTED": { + "message": "Beklenmeyen bir hata oluÅŸtu. Lütfen bu sorunu geliÅŸtiricilere bildirin." + }, + "EXIT_FULL_SCREEN": { + "message": "Tam ekrandan çık" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Uygulama sıfırlanamadı. Hâlâ bir hata raporu gönderebilirsiniz." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Uygulamayı sıfırlayın. KaydedilmemiÅŸ çalışmalarınızın tümünü kaybedeceksiniz." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Uygulamayı açamıyorum." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Uygulama çok yavaÅŸ." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Google Drive dosyalarımı açamıyorum." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Google Drive'daki kaydedilmiÅŸ dosyalarımı çevrimiçi olarak göremiyorum." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Klavye veya faremle ilgili sorun yaşıyorum." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Sorununuzu çözmemize yardımcı olmak için lütfen bize nasıl bir sorun olduÄŸunu bildirin:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "BaÅŸka bir ÅŸey." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Seç..." + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Daha ayrıntılı bilgi almak üzere sizinle iletiÅŸim kurabilmemiz için e-posta adresiniz gönderdiÄŸiniz geri bildirimlere eklenecektir." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Sorun bildir" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Sonunuzu çözmemize yardımcı olmak için uygulama günlüklerini ekleyin (günlükler gizli bilgiler içerebilir)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Uygulama günlükleri, kimliÄŸiniz (e-posta adresi) ve Google Drive'daki dosyalarla klasörlerin adları ve özellikleri dahil olmak üzere, bazı gizli bilgiler içerebilir." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Bu bilgi yalnızca bildirdiÄŸiniz sorunun teÅŸhisi için kullanılır, yalnızca raporunuzu araÅŸtıran kiÅŸi tarafından görülebilir ve en fazla 30 gün tutulur." + }, + "FOOTER_CONNECTING": { + "message": "BaÄŸlanıyor..." + }, + "FOOTER_WAITING": { + "message": "baÄŸlantı bekleniyor..." + }, + "FOR_PLATFORM_MAC": { + "message": "Mac (OS X 10.6 ve sonraki sürümler) için" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Windows (XP ve sonraki sürümler) için" + }, + "FULL_SCREEN": { + "message": "Tam ekran" + }, + "GET_STARTED": { + "message": "BaÅŸlayın" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Kabul et" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Reddet" + }, + "HELP": { + "message": "Yardım" + }, + "HOME_ACCESS_BUTTON": { + "message": "EriÅŸ" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Paylaşılan bir bilgisayarı görün ve denetleyin." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Chrome Uzaktan Masaüstü uygulamasını kullanarak bu bilgisayara güvenli bir ÅŸekilde eriÅŸebilirsiniz." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "PIN'i deÄŸiÅŸtir" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Bu bilgisayar ÅŸu anda farklı bir hesap altında paylaşılıyor." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Görüntüle/düzenle" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Bu bilgisayar PIN girmeden bir veya daha fazla istemcinin baÄŸlanmasına izin verecek ÅŸekilde yapılandırılmıştır." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Uzaktan baÄŸlantıları etkinleÅŸtir" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Bu bilgisayara eriÅŸmek için Chrome Uzaktan Masaüstü uygulamasını kullanmak istiyorsanız uzaktan baÄŸlantıları etkinleÅŸtirmelisiniz." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Uzaktan baÄŸlantıları devre dışı bırak" + }, + "HOME_SHARE_BUTTON": { + "message": "PaylaÅŸ" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Bu bilgisayarı baÅŸka bir kullanıcının görmesi ve kontrol etmesi için paylaşın." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(bu özellik henüz bilgisayarınız için kullanılamıyor)" + }, + "HOST_CATEGORY": { + "message": "Ana makine" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Åžu istemci için eriÅŸim reddedildi: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Ä°stemci baÄŸlandı: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Ä°stemcinin baÄŸlantısı kesildi: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "Ä°stemci için kanal IP'si: %1 ip=\"%2\" host_ip=\"%3\" channel=\"%4\" connection=\"%5\"." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "BaÅŸka bir bilgisayara uzaktan baÄŸlantıları etkinleÅŸtirmek için Chrome Uzaktan Masaüstü'nü o bilgisayara yükleyin ve “$1$†düğmesini tıklayın.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Kayıtlı bilgisayarınız yok. Bir bilgisayara uzaktan baÄŸlantıları etkinleÅŸtirmek için Chrome Uzaktan Masaüstü uygulamasını o bilgisayara yükleyin ve “$1$†düğmesini tıklayın.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Daha önce $1$ ($2$) olarak oturum açmıştınız. Bu hesapla bilgisayarlarınıza eriÅŸmek için bu hesabı kullanarak $3$Google Chrome'da oturum açın$4$ ve Chrome Uzaktan Masaüstü'nü yeniden yükleyin.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Yazılım güncellemeleri genellikle otomatik olarak gerçekleÅŸtirilir, ancak bazı nadir durumlarda güncelleme baÅŸarısız olabilir. Yazılımın güncellenmesi birkaç dakikadan fazla sürmeyecektir ve bilgisayarınıza uzaktan baÄŸlanılarak yapılabilir." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ üzerindeki Chrome Uzaktan Masaüstü eski ve güncellenmesi gerekiyor.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Kullanım istatistiklerini ve kilitlenme raporlarını toplamamıza izin vererek Chrome Uzaktan Masaüstü'nü daha iyi hale getirmemize yardımcı olun." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Bu bilgisayara eriÅŸimi korumak için lütfen $1$en az altı basamaklı$2$ bir PIN seçin. BaÅŸka bir yerden baÄŸlanırken bu PIN gerekecektir.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Uzaktan eriÅŸim hizmeti baÅŸlatılamadı." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome, Chrome Uzaktan Masaüstü Ana Bilgisayar yükleyicisini indiriyor. Ä°ndirme iÅŸlemi tamamlandığında, devam etmeden önce lütfen yükleyiciyi çalıştırın." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Devam etmeden önce lütfen yükleyiciyi çalıştırın." + }, + "HOST_SETUP_STARTED": { + "message": "Bu bilgisayar için uzaktan baÄŸlantılar etkinleÅŸtirildi." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Lütfen bilgisayarınızın güç yönetimi ayarlarını kontrol edin ve boÅŸta kaldığında uyku moduna geçecek ÅŸekilde ayarlanmadığından emin olun." + }, + "HOST_SETUP_STARTING": { + "message": "Bu bilgisayara uzaktan baÄŸlantılar etkinleÅŸtiriliyor…" + }, + "HOST_SETUP_STOPPED": { + "message": "Bu bilgisayara uzaktan baÄŸlantılar devre dışı bırakıldı." + }, + "HOST_SETUP_STOPPING": { + "message": "Bu bilgisayara uzaktan baÄŸlantılar devre dışı bırakılıyor…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Bu bilgisayara uzaktan eriÅŸim devre dışı bırakılamadı. Lütfen daha sonra tekrar deneyin." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Chrome Uzaktan Masaüstü Ana Makine Yükleyicisi'ni indirerek Google $1$Hizmet Åžartları$4'nı kabul etmiÅŸ olursunuz.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN'iniz güncellendi." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "PIN güncellenemedi. Lütfen daha sonra tekrar deneyin." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Bu bilgisayarın PIN'i güncelleniyor…" + }, + "HOST_STARTED": { + "message": "Ana makine bu kullanıcı için baÅŸlatıldı: %1." + }, + "HOST_STOPPED": { + "message": "Ana makine durdu." + }, + "IDLE_CONTINUE": { + "message": "Devam Et" + }, + "IDLE_DISCONNECT": { + "message": "BaÄŸlantıyı ÅŸimdi kes" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "$1$ oturumunuz bir süredir etkin deÄŸil ve kısa bir süre sonra baÄŸlantısı kesilecek.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Bu bilgisayara" + }, + "INSTALLER_DOWNLOAD": { + "message": "Chrome Uzaktan Masaüstü Ana Makinesi Yükleyicisi'ni indirin" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Masaüstünüzü paylaÅŸmaya baÅŸlamak için, size yardımcı olacak kiÅŸiye aÅŸağıdaki eriÅŸim kodunu verin." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Kullanıcı, kodu girdiÄŸinde paylaşım oturumunuz baÅŸlar." + }, + "INVALID_PIN": { + "message": "Lütfen altı veya daha fazla basamaklı bir PIN kodu girin." + }, + "IT2ME_FIRST_RUN": { + "message": "Kullanıcılar arası ekran paylaşımı, uzaktan teknik destek için mükemmeldir." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Klavye düzenleri" + }, + "LABEL_CONNECTED": { + "message": "BaÄŸlı:" + }, + "LAST_ONLINE": { + "message": "$1$ (son çevrimiçi olma zamanı: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Nasıl yapıldığını öğrenin." + }, + "LEARN_MORE": { + "message": "Daha fazla bilgi edinin." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome Uzaktan Masaüstü Ana Makine Tercihleri" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome Uzaktan\nMasaüstü Ana Makinesi" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome Uzaktan Masaüstü Ana Makine Yüklemesini Kaldırma Programı" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Win tuÅŸu (Mac'te ⌘) için saÄŸ Ctrl tuÅŸunu kullan" + }, + "MAXIMIZE_WINDOW": { + "message": "Pencereyi ekranı kaplayacak ÅŸekilde büyüt" + }, + "ME2ME_FIRST_RUN": { + "message": "Bilgisayarınıza her yerden eriÅŸin." + }, + "MESSAGE_GENERATING": { + "message": "EriÅŸim kodu oluÅŸturuluyor..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Chrome Uzaktan Masaüstü oturumunuz sonlandı." + }, + "MESSAGE_SHARED": { + "message": "Masaüstünüz ÅŸu anda $1$ ile paylaşılıyor.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Pencereyi simge durumuna küçült" + }, + "MODE_AUTHORIZE": { + "message": "Yetkilendir" + }, + "MODE_IT2ME": { + "message": "Uzaktan Yardım" + }, + "MODE_ME2ME": { + "message": "Bilgisayarlarım" + }, + "NEW_WINDOW": { + "message": "Yeni pencere…" + }, + "NO_PAIRED_CLIENTS": { + "message": "EÅŸlenen tüm istemciler silindi." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Masaüstü entegrasyonu bu platformda desteklenmiyor. Uygulamayı kullanmaya devam edebilirsiniz, ancak kullanıcı deneyimi olumsuz etkilenecektir." + }, + "OFFLINE": { + "message": "$1$ (çevrimdışı)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Ana makinenin ilk kullanıma hazırlanması baÅŸarısız oldu." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Ana makinenin yapılandırması geçersiz." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Ana makinenin sahip alan adı geçersiz." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Ana makine kimliÄŸi geçersiz." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Ana makine, geçersiz OAuth kimlik bilgileriyle yapılandırılmış." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Konsol mantık ekranında çalışan ana makine, kullanıcı tanımlı oturumda çalışan bir ana makineye geçerek perde modunu desteklemek için kapandı." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Ana makine, bir politika deÄŸiÅŸikliÄŸini dikkate almak için yeniden baÅŸlatılıyor." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Ana makine politikayı okuyamadı." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Ana makine kapatıldı." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Tanınmayan ana makine hatası: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Ana makinenin sahibi geçersiz." + }, + "OK": { + "message": "Tamam" + }, + "OPTIONS_MENU": { + "message": "Seçenekler" + }, + "OUTGOING_CONNECTIONS": { + "message": "Bu bilgisayardan" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "AÅŸağıdaki istemciler bu bilgisayarla eÅŸlendi ve bir PIN saÄŸlamadan baÄŸlanabilir. Bu izni, istediÄŸiniz zaman tek tek veya tüm istemciler için iptal edebilirsiniz." + }, + "PAIRED_CLIENT_DATE": { + "message": "EÅŸleme tarihi" + }, + "PAIRED_CLIENT_NAME": { + "message": "Ä°stemci" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Lütfen her iki kutuya da aynı PIN'i girin." + }, + "PIN_MESSAGE": { + "message": "Lütfen $1$ için PIN'inizi girin.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Lütfen uzak bilgisayara iliÅŸkin PIN'inizi girin." + }, + "PRODUCT_DESCRIPTION": { + "message": "Ä°nternet üzerinden güvenli bir ÅŸekilde diÄŸer bilgisayarlara eriÅŸin veya baÅŸka kullanıcıların bilgisayarınıza eriÅŸmesine izin verin." + }, + "PRODUCT_NAME": { + "message": "Chrome Uzaktan Masaüstü" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome Uygulama Akışı" + }, + "RECONNECT": { + "message": "Yeniden baÄŸlan" + }, + "REMEMBER_PIN": { + "message": "Bu cihazdan bu ana makineye baÄŸlantı kurarken bir daha PIN sorma." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Çekirdek Kitaplığı" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Masaüstü Entegrasyon Ä°ÅŸlemi" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Chrome uzaktan masaüstü ana makinesine komutları verecek uygulama." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Ana Makine Ä°ÅŸlemi" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Remoting ana bilgisayar yönetimi için yerel mesajlaÅŸma ana makinesi" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Uzaktan yardım için yerel mesajlaÅŸma ana makinesi" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Güvenlik Anahtarı Uzaktan EriÅŸim Ä°ÅŸlemi" + }, + "RESIZE_TO_CLIENT": { + "message": "Masaüstünü uygun ÅŸekilde yeniden boyutlandır" + }, + "RESTART_BUTTON": { + "message": "Åžimdi yeniden baÅŸlat" + }, + "RESTORE_WINDOW": { + "message": "Pencereyi geri yükle" + }, + "RETRY": { + "message": "Yeniden Dene" + }, + "SCREEN_OPTIONS": { + "message": "Ekran seçenekleri" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Ctrl-Alt-Del Gönder" + }, + "SEND_FEEDBACK": { + "message": "Sorun bildir…" + }, + "SEND_KEYS": { + "message": "TuÅŸları gönder" + }, + "SEND_PRINT_SCREEN": { + "message": "PrtScn Gönder" + }, + "SERVICE_DESCRIPTION": { + "message": "Bu hizmet Chrome Uzaktan Masaüstü istemcilerinden gelen baÄŸlantıları etkinleÅŸtirir." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Bu ayar, alan adı politikanız tarafından yönetilir." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "PaylaÅŸ" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Ä°ptal" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Bu bilgisayarı baÅŸka bir kullanıcının görmesi ve kontrol etmesi için paylaÅŸmak istiyor musunuz?" + }, + "SHOW_STATS": { + "message": "Ä°statistikleri göster" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Ä°statistikleri göster (baÄŸlantı: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Sığacak ÅŸekilde küçült" + }, + "SIGN_IN_BUTTON": { + "message": "Oturum açın" + }, + "SIGN_OUT_BUTTON": { + "message": "Çıkış" + }, + "STOP_SHARING_BUTTON": { + "message": "PaylaÅŸmayı Durdur" + }, + "SURVEY_INVITATION": { + "message": "Chrome Uzaktan Masaüstü'nü daha iyi hale getirmeye yardımcı olmak ister misiniz? $1$Ankete katılın.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Zaman" + }, + "TOGGLE_STATS": { + "message": "Ä°statistikleri göster" + }, + "TOOLTIP_CONNECT": { + "message": "$1$ adlı ana bilgisayara baÄŸlan", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Bu bilgisayara uzaktan baÄŸlantıları devre dışı bırak" + }, + "TOOLTIP_REFRESH": { + "message": "Ana makine listesini yenile" + }, + "TOOLTIP_RENAME": { + "message": "Bilgisayarın adını düzenle" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (eski)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Hesap" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Chrome Uzaktan Masaüstü tarafından eriÅŸime izin vermek için lütfen aÅŸağıda hesabınızı ve PIN kodunuzu onaylayın." + }, + "WARNING_NAT_DISABLED": { + "message": "NOT: Politika ayarları, yalnızca ağınızdaki bilgisayarlar arasındaki baÄŸlantılara izin veriyor." + }, + "WARNING_NOT_WINDOWED": { + "message": "NOT: Tüm klavye kısayollarının kullanılabilir olmasını saÄŸlamak için Chrome Uzaktan Masaüstü'nü 'Pencere olarak aç' modunda yapılandırabilirsiniz." + }, + "WHY_IS_THIS_SAFE": { + "message": "Bu iÅŸlem neden güvenli?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Çalışıyor..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/uk/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/uk/messages.json new file mode 100644 index 000000000000..1818d1edd90b --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/uk/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "ПрийнÑти та вÑтановити" + }, + "ACCESS_CODE": { + "message": "Код доÑтупу" + }, + "ACCESS_CODE_TIMER": { + "message": "Коду доÑтупу діÑтиме ще $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Відгуки" + }, + "ALL_CONNECTIONS": { + "message": "УÑÑ– з’єднаннÑ" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Ще раз введіть PIN-код" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN-код" + }, + "CANCEL": { + "message": "СкаÑувати" + }, + "CLEAR_HISTORY": { + "message": "ОчиÑтити Ñ–Ñторію" + }, + "CLOSE": { + "message": "Закрити" + }, + "CLOSE_PROMPT": { + "message": "Якщо залишити цю Ñторінку, ÑÐµÐ°Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome закінчитьÑÑ." + }, + "CLOSE_WINDOW": { + "message": "Закрити вікно" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "ДійÑно вимкнути віддалені Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· хоÑтом $1$? Якщо ви передумаєте, потрібно буде знову ввімкнути Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ð° відповідному комп’ютері.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Ðемає з’єднаннÑ" + }, + "CONNECTION_FROM_HEADER": { + "message": "Від" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Ðадійний Ñигнал" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "Хороший Ñигнал" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Слабкий Ñигнал" + }, + "CONNECTION_TO_HEADER": { + "message": "Кому" + }, + "CONNECT_ANYWAY": { + "message": "УÑе одно під’єднатиÑÑ" + }, + "CONNECT_BUTTON": { + "message": "Під’єднатиÑÑ" + }, + "CONTINUE_BUTTON": { + "message": "Продовжити" + }, + "CONTINUE_PROMPT": { + "message": "Зараз доÑтуп до цього комп’ютера має інший кориÑтувач. Продовжити Ñпільне кориÑтуваннÑ?" + }, + "CONTROLLER_NAME": { + "message": "Контролер хоÑту Віддаленого ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "COPYRIGHT": { + "message": "ÐвторÑьке право 2013 Google Inc. УÑÑ– права захищено." + }, + "CREDITS": { + "message": "УчаÑники" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Видалити вÑÑ–" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Видалити" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Щоб продовжити, Ñпершу надайте розширений доÑтуп до Ñвого комп’ютера. Це треба зробити лише один раз." + }, + "DESCRIPTION_CONNECT": { + "message": "ПопроÑÑ–Ñ‚ÑŒ кориÑтувача комп’ютера, до Ñкого ви хочете під’єднатиÑÑ, натиÑнути \"$1$\" Ñ– надіÑлати вам код доÑтупу.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Програма Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome дозволÑÑ” безпечно надавати доÑтуп до Ñвого комп’ютера через Інтернет. Обидва кориÑтувачі мають запуÑтити програму Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome, Ñку можна знайти на Ñторінці $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Віддалений хоÑÑ‚ вимагає, щоб ви автентифікувалиÑÑ Ð½Ð° веб-Ñайті третьої Ñторони. Щоб продовжити, програмі Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome потрібно надати додаткові дозволи Ð´Ð»Ñ Ð´Ð¾Ñтупу до цієї адреÑи:" + }, + "DISABLE_HOST": { + "message": "Вимкнути" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Від'єднатиÑÑ" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Служба Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "DURATION_HEADER": { + "message": "ТриваліÑÑ‚ÑŒ" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу запуÑкати цей додаток." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Помилка автентифікації. Увійдіть в обліковий Ð·Ð°Ð¿Ð¸Ñ Chrome знову." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Ðемає деÑких обов’Ñзкових компонентів. ПереконайтеÑÑ, що вÑтановлено найновішу верÑÑ–ÑŽ програмного забезпеченнÑ, Ñ– повторіть Ñпробу." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° мережі. Додаток перезапуÑтитьÑÑ, коли приÑтрій під’єднаєтьÑÑ Ð´Ð¾ Інтернету." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Віддаленому комп’ютеру не вдалоÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ ÑеанÑ. Якщо проблема не зникне, налаштуйте хоÑÑ‚ ще раз." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Віддалений комп’ютер не відповідає на запити про з’єднаннÑ. ПереконайтеÑÑ, що він під’єднаний до мережі, Ñ– повторіть Ñпробу." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· віддаленим комп’ютером тимчаÑово заблоковано, оÑкільки хтоÑÑŒ намагавÑÑ Ð¿Ñ–Ð´â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ð´Ð¾ нього, викориÑтовуючи недійÑний PIN-код. Повторіть Ñпробу пізніше." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати цей комп’ютер." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "ВиÑвлено неÑуміÑну верÑÑ–ÑŽ протоколу. ПереконайтеÑÑ, що на обох комп’ютерах уÑтановлено найновішу верÑÑ–ÑŽ програмного забезпеченнÑ, Ñ– повторіть Ñпробу." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "ÐедійÑний код доÑтупу. Повторіть Ñпробу." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Ðалаштовані правила не дозволÑÑŽÑ‚ÑŒ Ñпільно кориÑтуватиÑÑ Ñ†Ð¸Ð¼ комп’ютером Ñк хоÑтом програми Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome. ЗвернітьÑÑ Ð¿Ð¾ допомогу до Ñвого ÑиÑтемного адмініÑтратора." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Віддалений ÑÐµÐ°Ð½Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð²ÑÑ." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Ðемає деÑких обов’Ñзкових компонентів. ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð½Ð°Ð¹Ð½Ð¾Ð²Ñ–ÑˆÐ° верÑÑ–Ñ Chrome, Ñ– повторіть Ñпробу." + }, + "ERROR_NACL_DISABLED": { + "message": "Ðемає деÑких обов’Ñзкових компонентів. Ðа Ñторінці chrome://plugins перевірте, чи ввімкнено Native Client." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Обов’Ñзковий компонент переÑтав працювати. Повідомте розробникам про цю проблему." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Ðе вдалоÑÑŒ під’єднатиÑÑ Ð´Ð¾ мережі. Перевірте, чи ваш приÑтрій у режимі онлайн." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Ви не ввійшли в обліковий Ð·Ð°Ð¿Ð¸Ñ Chrome. Увійдіть Ñ– повторіть Ñпробу." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу виконувати цю дію." + }, + "ERROR_NOT_FOUND": { + "message": "Такого об’єкта немає." + }, + "ERROR_P2P_FAILURE": { + "message": "Ðе вдаєтьÑÑ Ð·Ð²â€™ÑзатиÑÑ Ð· хоÑтом. Можливо, це пов’Ñзано з конфігурацією мережі, Ñку ви викориÑтовуєте." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Ð¦Ñ Ñлужба тимчаÑово недоÑтупна. Повторіть Ñпробу пізніше." + }, + "ERROR_UNEXPECTED": { + "message": "СталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° помилка. Повідомте розробникам про цю проблему." + }, + "EXIT_FULL_SCREEN": { + "message": "Вийти з повноекранного режиму" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Ðе вдалоÑÑ Ñкинути дані додатка. Ви можете надіÑлати звіт про помилку." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Скинути дані додатка. УÑÑ– незбережені дані буде втрачено." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Додаток не відкриваєтьÑÑ." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Додаток працює заповільно." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Мої файли на Google ДиÑку не відкриваютьÑÑ." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Мої збережені файли не відображаютьÑÑ Ð½Ð° Google ДиÑку в Інтернеті." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Проблеми з клавіатурою або мишею." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Щоб ми могли вирішити вашу проблему, виберіть відповідну категорію." + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Інша проблема." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Виберіть…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Щоб ми могли зв’ÑзатиÑÑ Ð· вами, ваша електронна адреÑа включатиметьÑÑ Ñƒ відгуки, Ñкі ви надÑилаєте." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Повідомити про проблему" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Включити журнали додатків, Ñкі допоможуть вирішити проблему (журнали можуть міÑтити конфіденційну інформацію)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Журнали додатків можуть міÑтити конфіденційну інформацію, зокрема оÑобиÑÑ‚Ñ– дані (електронну адреÑу), назви та влаÑтивоÑÑ‚Ñ– файлів Ñ– папок на Google ДиÑку." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Ці дані потрібні лише Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики вашої проблеми. Вони надаютьÑÑ Ð»Ð¸ÑˆÐµ оÑобі, Ñка розглÑдає вашу заÑвку, Ñ– зберігаютьÑÑ Ð´Ð¾ 30 днів." + }, + "FOOTER_CONNECTING": { + "message": "З’єднаннÑ…" + }, + "FOOTER_WAITING": { + "message": "Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ..." + }, + "FOR_PLATFORM_MAC": { + "message": "Ð”Ð»Ñ Mac (OS X 10.6 Ñ– новіших верÑій)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Ð”Ð»Ñ Windows (XP та новіших верÑій)" + }, + "FULL_SCREEN": { + "message": "Ðа веÑÑŒ екран" + }, + "GET_STARTED": { + "message": "Початок роботи" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "ПрийнÑти" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Відхилити" + }, + "HELP": { + "message": "Довідка" + }, + "HOME_ACCESS_BUTTON": { + "message": "ДоÑтуп" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Бачити Ñпільний комп’ютер Ñ– керувати ним." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Ви можете отримати безпечний доÑтуп до цього комп’ютера за допомогою програми Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Змінити PIN-код" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Цим комп’ютером зараз віддалено кориÑтуютьÑÑ Ð² іншому обліковому запиÑÑ–." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "ПереглÑнути чи редагувати" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Ðа цьому комп’ютері одному чи кільком клієнтам дозволено під’єднуватиÑÑ Ð±ÐµÐ· PIN-коду." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Увімкнути віддалені з’єднаннÑ" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Щоб отримати доÑтуп до цього комп’ютера за допомогою програми Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome, потрібно ввімкнути віддалені з’єднаннÑ." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Вимкнути віддалені з’єднаннÑ" + }, + "HOME_SHARE_BUTTON": { + "message": "ÐадіÑлати" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Дозволити іншому кориÑтувачеві бачити цей комп’ютер Ñ– керувати ним." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ‰Ðµ не доÑтупна Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ комп’ютера)" + }, + "HOST_CATEGORY": { + "message": "ХоÑÑ‚" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Відмовлено в доÑтупі клієнту %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Під’єднано клієнт %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Від’єднано клієнт %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP-адреÑа каналу клієнта: %1 ip='%2' host_ip='%3' channel='%4' connection='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Щоб увімкнути віддалені Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· іншим комп’ютером, уÑтановіть на ньому програму Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome Ñ– натиÑніть кнопку \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” зареєÑтрованих комп’ютерів. Щоб увімкнути віддалені Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· комп’ютером, уÑтановіть на ньому програму Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome Ñ– натиÑніть кнопку \"$1$\".", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "Ви раніше входили Ñк $1$ ($2$). Щоб отримати доÑтуп до комп’ютерів, $3$увійдіть у Ñвій обліковий Ð·Ð°Ð¿Ð¸Ñ Google Chrome$4$ Ñ– перевÑтановіть Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð²Ð¸Ñ‡Ð°Ð¹ відбуваєтьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾, хоча інколи можуть виникати проблеми. ÐŸÑ€Ð¾Ñ†ÐµÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” тривати не більше кількох хвилин. Його можна виконати під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· комп’ютером." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "ВерÑÑ–Ñ Ð’Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome на $1$ заÑтаріла та потребує оновленнÑ.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Допоможіть нам покращити програму Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome, дозволивши збирати ÑтатиÑтику викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð° звіти про аварійне Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Щоб захиÑтити доÑтуп до цього комп’ютера, виберіть PIN-код із $1$принаймні шеÑти Ñимволів$2$. Цей PIN-код потрібно вводити, щоб під’єднатиÑÑ Ð· іншого міÑцÑ.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу віддаленого доÑтупу." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome завантажує програму вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ…Ð¾Ñту Віддаленого ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome. Коли Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ñ‚ÑŒÑÑ, запуÑÑ‚Ñ–Ñ‚ÑŒ програму вÑтановленнÑ, перш ніж продовжити." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Перш ніж продовжити, запуÑÑ‚Ñ–Ñ‚ÑŒ програму вÑтановленнÑ." + }, + "HOST_SETUP_STARTED": { + "message": "Віддалені Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ комп’ютера ввімкнено." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Перевірте параметри ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñм комп’ютера та переконайтеÑÑ, що його не налаштовано переходити в режим Ñну, Ñкщо він неактивний." + }, + "HOST_SETUP_STARTING": { + "message": "Ð£Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ñ… з’єднань Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ комп’ютера…" + }, + "HOST_SETUP_STOPPED": { + "message": "Віддалені Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ комп’ютера вимкнено." + }, + "HOST_SETUP_STOPPING": { + "message": "Ð’Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ñ… з’єднань Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ комп’ютера…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Ðе вдалоÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¸ віддалений доÑтуп до цього комп’ютера. Повторіть Ñпробу пізніше." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "УÑтановлюючи хоÑÑ‚ Ð´Ð»Ñ Ð’Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome, ви приймаєте $1$Загальні Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° умови$4 Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "PIN-код оновлено." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Ðе вдалоÑÑŒ оновити PIN-код. Повторіть Ñпробу пізніше." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ PIN-коду Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ комп’ютера…" + }, + "HOST_STARTED": { + "message": "Запущено хоÑÑ‚ Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %1." + }, + "HOST_STOPPED": { + "message": "ХоÑÑ‚ не працює." + }, + "IDLE_CONTINUE": { + "message": "Продовжити" + }, + "IDLE_DISCONNECT": { + "message": "Від’єднати зараз" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Ð¡ÐµÐ°Ð½Ñ Ñƒ додатку $1$ був неактивний тривалий чаÑ. Ðевдовзі його буде закрито.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "З цим комп’ютером" + }, + "INSTALLER_DOWNLOAD": { + "message": "УÑтановити хоÑÑ‚ Ð´Ð»Ñ Ð’Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Щоб надати доÑтуп до Ñвого комп’ютера, повідомте вказаний нижче код доÑтупу оÑобі, Ñка вам допомагатиме." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "ПіÑÐ»Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÐºÐ¾Ð´Ñƒ розпочнетьÑÑ ÑÐµÐ°Ð½Ñ Ñпільного доÑтупу." + }, + "INVALID_PIN": { + "message": "Введіть PIN-код із принаймні шеÑти Ñимволів." + }, + "IT2ME_FIRST_RUN": { + "message": "ДоÑтуп до екрана іншого кориÑтувача – чудовий ÑпоÑіб надавати віддалену технічну підтримку." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Розкладки клавіатури" + }, + "LABEL_CONNECTED": { + "message": "Під’єднано:" + }, + "LAST_ONLINE": { + "message": "$1$ (воÑтаннє онлайн: $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Докладніше." + }, + "LEARN_MORE": { + "message": "Докладніше." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ…Ð¾Ñту Віддаленого ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "ХоÑÑ‚ Віддаленого\nÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ…Ð¾Ñту Віддаленого ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "ВикориÑтовувати праву клавішу Ctrl Ñк клавішу Win (⌘ в ОС Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Розгорнути вікно" + }, + "ME2ME_FIRST_RUN": { + "message": "Отримуйте доÑтуп до Ñвого комп’ютера з будь-Ñкого міÑцÑ." + }, + "MESSAGE_GENERATING": { + "message": "Ð“ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ доÑтупу..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Ð¡ÐµÐ°Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome закінчено." + }, + "MESSAGE_SHARED": { + "message": "Зараз доÑтуп до цього комп’ютера має $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Згорнути вікно" + }, + "MODE_AUTHORIZE": { + "message": "ÐвторизаціÑ" + }, + "MODE_IT2ME": { + "message": "Віддалена допомога" + }, + "MODE_ME2ME": { + "message": "Мої комп’ютери" + }, + "NEW_WINDOW": { + "message": "Ðове вікно…" + }, + "NO_PAIRED_CLIENTS": { + "message": "УÑÑ– підключені клієнти видалено." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ð· комп’ютерами не підтримуєтьÑÑ Ð½Ð° цій платформі. Ви можете працювати з цим додатком, однак виникатимуть певні незручноÑÑ‚Ñ–." + }, + "OFFLINE": { + "message": "$1$ (офлайн)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Помилка ініціалізації хоÑту." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "ÐедійÑна ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ñ…Ð¾Ñту." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "ÐедійÑний домен влаÑника хоÑту." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "ÐедійÑний ідентифікатор хоÑту." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Ð”Ð»Ñ Ñ…Ð¾Ñту вказано недійÑні облікові дані OAuth." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "ХоÑÑ‚ на логічному екрані конÑолі вимкнувÑÑ. Щоб підтримати режим конфіденційноÑÑ‚Ñ–, зараз працює хоÑÑ‚ конкретного ÑеанÑу кориÑтувача." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "ХоÑÑ‚ перезавантажуєтьÑÑ, щоб заÑтоÑувати зміни правил." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "ХоÑÑ‚ не розпізнав правило." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "ХоÑÑ‚ завершив роботу." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Ðевідома помилка хоÑту: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "ÐедійÑний влаÑник хоÑту." + }, + "OK": { + "message": "ОК" + }, + "OPTIONS_MENU": { + "message": "Параметри" + }, + "OUTGOING_CONNECTIONS": { + "message": "З цього комп’ютера" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Перелічені нижче клієнти підключені до цього комп’ютера та можуть під’єднуватиÑÑ Ð±ÐµÐ· PIN-коду. Цей дозвіл можна будь-коли ÑкаÑувати Ð´Ð»Ñ Ð¾ÐºÑ€ÐµÐ¼Ð¸Ñ… або вÑÑ–Ñ… клієнтів." + }, + "PAIRED_CLIENT_DATE": { + "message": "Дата підключеннÑ" + }, + "PAIRED_CLIENT_NAME": { + "message": "Клієнт" + }, + "PIN": { + "message": "PIN-код" + }, + "PINS_NOT_EQUAL": { + "message": "Введіть однаковий PIN-код в обох полÑÑ…." + }, + "PIN_MESSAGE": { + "message": "Введіть PIN-код Ð´Ð»Ñ Ñ…Ð¾Ñту $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Введіть PIN-код Ð´Ð»Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ комп’ютера." + }, + "PRODUCT_DESCRIPTION": { + "message": "Отримуйте доÑтуп до інших комп’ютерів або надавайте іншим кориÑтувачам безпечний доÑтуп до Ñвого комп’ютера через Інтернет." + }, + "PRODUCT_NAME": { + "message": "Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "З'єднати повторно" + }, + "REMEMBER_PIN": { + "message": "Ðе запитувати PIN-код знову під Ñ‡Ð°Ñ Ð¿Ñ–Ð´â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ цього хоÑту з цього приÑтрою." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "Коренева бібліотека" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— комп’ютера" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Додаток, Ñкий надÑилає команди хоÑту Віддаленого ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "ÐŸÑ€Ð¾Ñ†ÐµÑ Ñ…Ð¾Ñту" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "МіÑцевий хоÑÑ‚ обміну повідомленнÑми Ð´Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ð¼ хоÑтом" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "МіÑцевий хоÑÑ‚ обміну повідомленнÑми Ð´Ð»Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ñ— допомоги" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Віддалений доÑтуп до ключа безпеки" + }, + "RESIZE_TO_CLIENT": { + "message": "Змінити робочий Ñтіл до розміру екрана" + }, + "RESTART_BUTTON": { + "message": "ПерезапуÑтити" + }, + "RESTORE_WINDOW": { + "message": "Відновити вікно" + }, + "RETRY": { + "message": "Повторити Ñпробу" + }, + "SCREEN_OPTIONS": { + "message": "Параметри екрана" + }, + "SEND_CTRL_ALT_DEL": { + "message": "ÐадіÑлати команду Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Повідомити про проблему…" + }, + "SEND_KEYS": { + "message": "ÐадіÑлати клавіші" + }, + "SEND_PRINT_SCREEN": { + "message": "ÐадіÑлати команду PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Ð¦Ñ Ñлужба дозволÑÑ” вÑтановлювати вхідні Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· клієнтів Віддаленого ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Це Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³ÑƒÐ»ÑŽÑ”Ñ‚ÑŒÑÑ Ð¿Ð¾Ð»Ñ–Ñ‚Ð¸ÐºÐ¾ÑŽ домену." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "ÐадіÑлати" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "СкаÑувати" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Дозволити цьому кориÑтувачеві бачити цей комп’ютер Ñ– керувати ним?" + }, + "SHOW_STATS": { + "message": "Показати ÑтатиÑтику" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Показати ÑтатиÑтику (з’єднаннÑ: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Зменшити до розмірів вікна" + }, + "SIGN_IN_BUTTON": { + "message": "Увійти" + }, + "SIGN_OUT_BUTTON": { + "message": "Вийти" + }, + "STOP_SHARING_BUTTON": { + "message": "СкаÑувати доÑтуп" + }, + "SURVEY_INVITATION": { + "message": "Хочете допомогти покращити програму Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome? $1$Візьміть учаÑÑ‚ÑŒ в опитуванні.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "ЧаÑ" + }, + "TOGGLE_STATS": { + "message": "Показати ÑтатиÑтику" + }, + "TOOLTIP_CONNECT": { + "message": "Під’єднатиÑÑ Ð´Ð¾ хоÑту $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Вимкнути віддалені Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· цим комп’ютером" + }, + "TOOLTIP_REFRESH": { + "message": "Оновити ÑпиÑок хоÑтів" + }, + "TOOLTIP_RENAME": { + "message": "Редагувати Ñ–Ð¼â€™Ñ ÐºÐ¾Ð¼Ð¿â€™ÑŽÑ‚ÐµÑ€Ð°" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (заÑтаріла верÑÑ–Ñ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Обліковий запиÑ" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Підтвердьте Ñвій обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ– PIN-код нижче, щоб дозволити Віддалене ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome." + }, + "WARNING_NAT_DISABLED": { + "message": "ПРИМІТКÐ. Ðалаштовані правила дозволÑÑŽÑ‚ÑŒ з’єднуватиÑÑ Ð»Ð¸ÑˆÐµ з комп’ютерами у вашій мережі." + }, + "WARNING_NOT_WINDOWED": { + "message": "ПРИМІТКÐ. Щоб переконатиÑÑ, що вÑÑ– комбінацій клавіш доÑтупні, можна вÑтановити Ð´Ð»Ñ Ð’Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Chrome параметр \"Відкрити вікно\"." + }, + "WHY_IS_THIS_SAFE": { + "message": "Чому це безпечно?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "ОС Windows" + }, + "WORKING": { + "message": "ВиконуєтьÑÑ…" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/vi/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/vi/messages.json new file mode 100644 index 000000000000..7253cf5892d1 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/vi/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "Chấp nhận và cài đặt" + }, + "ACCESS_CODE": { + "message": "Mã truy cập" + }, + "ACCESS_CODE_TIMER": { + "message": "Mã truy cập này sẽ hết hạn sau $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "Phản hồi" + }, + "ALL_CONNECTIONS": { + "message": "Tất cả kết nối" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "Nhập lại mã PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "Mã PIN" + }, + "CANCEL": { + "message": "Hủy" + }, + "CLEAR_HISTORY": { + "message": "Xóa lịch sá»­" + }, + "CLOSE": { + "message": "Äóng" + }, + "CLOSE_PROMPT": { + "message": "Thoát khá»i trang này sẽ kết thúc phiên Chrome Remote Desktop của bạn." + }, + "CLOSE_WINDOW": { + "message": "Äóng cá»­a sổ" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "Bạn có chắc chắn muốn tắt kết nối từ xa vá»›i $1$ không? Nếu bạn thay đổi ý định, bạn cần truy cập vào máy tính đó để bật lại kết nối.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "Không kết nối được" + }, + "CONNECTION_FROM_HEADER": { + "message": "Từ" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "Lịch sá»­ kết nối" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "Khá tốt" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "TôÌt" + }, + "CONNECTION_QUALITY_POOR": { + "message": "Kém" + }, + "CONNECTION_TO_HEADER": { + "message": "Äến" + }, + "CONNECT_ANYWAY": { + "message": "Vẫn tiếp tục kết nối" + }, + "CONNECT_BUTTON": { + "message": "Kết nối" + }, + "CONTINUE_BUTTON": { + "message": "Tiếp tục" + }, + "CONTINUE_PROMPT": { + "message": "Bạn hiện Ä‘ang chia sẻ máy này vá»›i má»™t ngÆ°á»i dùng khác. Bạn có muốn tiếp tục chia sẻ không?" + }, + "CONTROLLER_NAME": { + "message": "Trình Ä‘iá»u khiển máy chủ Chrome Remote Desktop" + }, + "COPYRIGHT": { + "message": "Bản quyá»n 2013 Google Inc. Má»i quyá»n được bảo lÆ°u." + }, + "CREDITS": { + "message": "Tín dụng" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "Xóa tất cả" + }, + "DELETE_PAIRED_CLIENT": { + "message": "Xóa" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "Äể tiếp tục, trÆ°á»›c tiên, bạn phải cấp các quyá»n truy cập mở rá»™ng cho máy tính của mình. Bạn chỉ phải thá»±c hiện việc này má»™t lần." + }, + "DESCRIPTION_CONNECT": { + "message": "Yêu cầu ngÆ°á»i dùng có máy tính bạn muốn truy cập nhấp vào “$1$†và cung cấp cho bạn mã truy cập.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome Remote Desktop cho phép bạn chia sẻ máy tính của mình má»™t cách an toàn qua Web. Cả hai ngÆ°á»i dùng Ä‘á»u phải chạy ứng dụng Chrome Remote Desktop mà bạn có thể tìm thấy tại $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "Máy chủ lÆ°u trữ từ xa yêu cầu bạn xác thá»±c vá»›i má»™t trang web của bên thứ ba. Äể tiếp tục, bạn phải cấp cho Chrome Remote Desktop thêm quyá»n truy cập vào địa chỉ sau:" + }, + "DISABLE_HOST": { + "message": "Vô hiệu hóa" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "Ngắt kết nối" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Dịch vụ Chrome Remote Desktop" + }, + "DURATION_HEADER": { + "message": "Thá»i lượng" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "Bạn không có quyá»n chạy ứng dụng này." + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "Xác thá»±c bị lá»—i. Vui lòng đăng nhập lại vào Chrome." + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "Thiếu má»™t số thành phần bắt buá»™c. Vui lòng đảm bảo rằng bạn đã cài đặt phiên bản má»›i nhất của phần má»m và thá»­ lại." + }, + "ERROR_CONNECTION_DROPPED": { + "message": "Äã xảy ra lá»—i mạng. Chúng tôi sẽ khởi Ä‘á»™ng lại ứng dụng khi thiết bị của bạn trá»±c tuyến trở lại." + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "Máy tính từ xa đã không khởi tạo được phiên. Nếu sá»± cố vẫn tiếp diá»…n, vui lòng thá»­ định cấu hình lại máy chủ." + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "Máy tính từ xa không phản hồi yêu cầu kết nối. Vui lòng xác minh rằng máy tính Ä‘ang trá»±c tuyến và thá»­ lại." + }, + "ERROR_HOST_OVERLOAD": { + "message": "Kết nối vá»›i máy tính từ xa tạm thá»i bị chặn vì ai đó đã cố gắng kết nối vá»›i máy tính đó bằng mã PIN không hợp lệ. Vui lòng thá»­ lại sau." + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "Không thể đăng ký máy tính này." + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "Äã phát hiện má»™t phiên bản giao thức không tÆ°Æ¡ng thích. Vui lòng đảm bảo rằng bạn đã cài đặt phiên bản má»›i nhất của phần má»m trên cả hai máy tính và thá»­ lại." + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "Mã truy cập không hợp lệ. Vui lòng thá»­ lại." + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "Cài đặt chính sách không cho phép chia sẻ máy tính này dÆ°á»›i dạng máy chủ lÆ°u trữ Chrome Remote Desktop. Liên hệ vá»›i quản trị viên hệ thống của bạn để được há»— trợ." + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "Phiên từ xa đã hết hạn." + }, + "ERROR_MISSING_PLUGIN": { + "message": "Thiếu má»™t số thành phần bắt buá»™c. Vui lòng đảm bảo rằng bạn Ä‘ang chạy phiên bản Chrome má»›i nhất và thá»­ lại." + }, + "ERROR_NACL_DISABLED": { + "message": "Thiếu má»™t số thành phần bắt buá»™c. Vui lòng chuyển tá»›i chrome://plugins và đảm bảo Native Client được bật." + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "Thành phần được yêu cầu đã dừng hoạt Ä‘á»™ng. Vui lòng báo cáo sá»± cố này cho nhà phát triển." + }, + "ERROR_NETWORK_FAILURE": { + "message": "Không thể kết nối vá»›i mạng. Vui lòng kiểm tra xem thiết bị của bạn đã được kết nối vá»›i mạng hay chÆ°a." + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "Bạn chÆ°a đăng nhập vào Chrome. Vui lòng đăng nhập và thá»­ lại." + }, + "ERROR_NOT_AUTHORIZED": { + "message": "Bạn không có quyá»n thá»±c hiện thao tác đó." + }, + "ERROR_NOT_FOUND": { + "message": "Äối tượng yêu cầu không tồn tại." + }, + "ERROR_P2P_FAILURE": { + "message": "Không thể kết nối vá»›i máy chủ. Äiá»u này có thể do cấu hình của mạng bạn Ä‘ang sá»­ dụng." + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "Dịch vụ tạm thá»i không khả dụng. Vui lòng thá»­ lại sau." + }, + "ERROR_UNEXPECTED": { + "message": "Äã xảy ra lá»—i không mong muốn. Vui lòng báo cáo vấn Ä‘á» này cho nhà phát triển." + }, + "EXIT_FULL_SCREEN": { + "message": "Thoát khá»i chế Ä‘á»™ toàn màn hình" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "Không thể đặt lại ứng dụng. Bạn sẽ vẫn có thể gá»­i báo cáo lá»—i." + }, + "FEEDBACK_ABANDON_HOST": { + "message": "Äặt lại ứng dụng. Bạn sẽ mất má»i công việc chÆ°a lÆ°u." + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "Tôi không thể mở ứng dụng." + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "Ứng dụng quá chậm." + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "Tôi không thể mở tệp trên Google Drive." + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "Tôi không thể xem các tệp đã lÆ°u của mình trá»±c tuyến trong Google Drive." + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "Tôi Ä‘ang gặp sá»± cố vá»›i bàn phím hoặc chuá»™t." + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "Äể giúp chúng tôi giải quyết sá»± cố của bạn, vui lòng cho chúng tôi biết vấn đỠđã xảy ra:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "Vấn Ä‘á» khác." + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "Chá»n…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "Äể cho phép chúng tôi liên hệ vá»›i bạn để biết thêm thông tin, địa chỉ email của bạn sẽ được bao gồm trong má»i phản hồi mà bạn gá»­i." + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "Báo cáo sá»± cố" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "Bao gồm nhật ký ứng dụng để giúp chúng tôi giải quyết vấn Ä‘á» của bạn (nhật ký có thể bao gồm thông tin riêng tÆ°)." + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "Nhật ký ứng dụng có thể bao gồm thông tin riêng tÆ°, bao gồm danh tính (địa chỉ email) của bạn và tên cÅ©ng nhÆ° thuá»™c tính của tệp và thÆ° mục trong Google Drive." + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "Thông tin này chỉ được sá»­ dụng để chẩn Ä‘oán sá»± cố bạn Ä‘ang báo cáo, chỉ khả dụng đối vá»›i ngÆ°á»i Ä‘iá»u tra báo cáo của bạn và được giữ lại tối Ä‘a 30 ngày." + }, + "FOOTER_CONNECTING": { + "message": "Äang kết nối..." + }, + "FOOTER_WAITING": { + "message": "Ä‘ang đợi kết nối…" + }, + "FOR_PLATFORM_MAC": { + "message": "Dành cho máy Mac (OS X 10.6 trở lên)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "Dành cho Windows (XP trở lên)" + }, + "FULL_SCREEN": { + "message": "Toàn màn hình" + }, + "GET_STARTED": { + "message": "Bắt đầu" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "Chấp nhận" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "Từ chối" + }, + "HELP": { + "message": "Trợ giúp" + }, + "HOME_ACCESS_BUTTON": { + "message": "Truy cập" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "Xem và kiểm soát máy tính dùng chung." + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "Bạn có thể truy cập an toàn vào máy tính này bằng Chrome Remote Desktop." + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "Thay đổi mã PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "Máy tính này hiện được chia sẻ dÆ°á»›i má»™t tài khoản khác." + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "Xem/chỉnh sá»­a" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "Máy tính này được định cấu hình để cho phép má»™t hoặc nhiá»u ứng dụng khách kết nối mà không cần nhập mã PIN." + }, + "HOME_DAEMON_START_BUTTON": { + "message": "Bật kết nối từ xa" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "Bạn phải bật kết nối từ xa nếu bạn muốn sá»­ dụng Chrome Remote Desktop để truy cập vào máy tính này." + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "Tắt kết nối từ xa" + }, + "HOME_SHARE_BUTTON": { + "message": "Chia sẻ" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "Chia sẻ máy tính này để ngÆ°á»i dùng khác xem và kiểm soát." + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(tính năng này chÆ°a khả dụng đối vá»›i máy tính của bạn)" + }, + "HOST_CATEGORY": { + "message": "Máy chủ" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "Truy cập bị từ chối đối vá»›i ứng dụng khách: %1." + }, + "HOST_CLIENT_CONNECTED": { + "message": "Ứng dụng khách đã kết nối: %1." + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "Ứng dụng khách đã ngắt kết nối: %1." + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "IP kênh dành cho ứng dụng khách: %1 ip='%2' host_ip='%3' kênh='%4' kết nối='%5'." + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "Äể bật kết nối từ xa vá»›i má»™t máy tính khác, hãy cài đặt Chrome Remote Desktop trên máy tính đó và nhấp “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "Bạn chÆ°a đăng ký máy tính nào. Äể bật kết nối từ xa vá»›i má»™t máy tính, hãy cài đặt Chrome Remote Desktop trên máy tính đó và nhấp “$1$â€.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "TrÆ°á»›c đó, bạn đã đăng nhập bằng $1$ ($2$). Äể truy cập máy tính của bạn bằng tài khoản đó, hãy $3$đăng nhập vào Google Chrome$4$ bằng tài khoản đó và cài đặt lại Chrome Remote Desktop.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "Cập nhật phần má»m thÆ°á»ng tá»± Ä‘á»™ng diá»…n ra nhÆ°ng trong má»™t số trÆ°á»ng hợp hiếm gặp, quá trình này có thể không thành công. Quá trình cập nhật phần má»m sẽ chỉ mất tối Ä‘a má»™t vài phút và có thể được thá»±c hiện trong khi kết nối từ xa tá»›i máy tính của bạn." + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "Kết nối từ xa trên Chrome trên $1$ đã lá»—i thá»i và cần được cập nhật.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "Giúp chúng tôi cải tiến Chrome Remote Desktop bằng cách cho phép chúng tôi thu thập số liệu thống kê sá»­ dụng và báo cáo sá»± cố." + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "Äể bảo vệ quyá»n truy cập vào máy tính này, vui lòng chá»n má»™t mã PIN $1$ít nhất sáu chữ số$2$. Mã PIN này sẽ được yêu cầu khi kết nối từ má»™t vị trí khác.", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "Không thể bắt đầu dịch vụ truy cập từ xa." + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome Ä‘ang tải xuống trình cài đặt máy chủ Chrome Remote Desktop. Sau khi quá trình tải xuống hoàn tất, vui lòng chạy trình cài đặt trÆ°á»›c khi tiếp tục." + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "Vui lòng chạy trình cài đặt trÆ°á»›c khi tiếp tục." + }, + "HOST_SETUP_STARTED": { + "message": "Kết nối từ xa cho máy tính này đã được bật." + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "Vui lòng kiểm tra cài đặt quản lý nguồn máy tính của bạn và đảm bảo rằng máy tính không được định cấu hình để ngủ khi không hoạt Ä‘á»™ng." + }, + "HOST_SETUP_STARTING": { + "message": "Äang bật kết nối từ xa cho máy tính này…" + }, + "HOST_SETUP_STOPPED": { + "message": "Kết nối từ xa cho máy tính này đã bị tắt." + }, + "HOST_SETUP_STOPPING": { + "message": "Äang tắt kết nối từ xa cho máy tính này…" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "Không thể tắt kết nối từ xa vá»›i máy tính này. Vui lòng thá»­ lại sau." + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "Khi tải xuống Trình cài đặt máy chủ Chrome Remote Desktop, bạn đồng ý vá»›i $1$Äiá»u khoản dịch vụ$4 của Google.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "Mã PIN của bạn đã được cập nhật." + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "Không thể cập nhật mã PIN. Vui lòng thá»­ lại sau." + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "Mã PIN cho máy tính này Ä‘ang được cập nhật…" + }, + "HOST_STARTED": { + "message": "Máy chủ đã khởi Ä‘á»™ng cho ngÆ°á»i dùng: %1." + }, + "HOST_STOPPED": { + "message": "Máy chủ đã dừng lại." + }, + "IDLE_CONTINUE": { + "message": "Tiếp tục" + }, + "IDLE_DISCONNECT": { + "message": "Ngắt kết nối ngay bây giá»" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "Phiên $1$ của bạn đã không hoạt Ä‘á»™ng má»™t thá»i gian và sẽ sá»›m bị ngắt kết nối.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "Tá»›i máy tính này" + }, + "INSTALLER_DOWNLOAD": { + "message": "Tải xuống trình cài đặt máy chủ Chrome Remote Desktop" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "Äể bắt đầu chia sẻ máy tính của bạn, hãy cung cấp mã truy cập bên dÆ°á»›i cho ngÆ°á»i sẽ trợ giúp bạn." + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "Sau khi há» nhập mã, phiên chia sẻ của bạn sẽ bắt đầu." + }, + "INVALID_PIN": { + "message": "Vui lòng nhập mã PIN có từ sáu chữ số trở lên." + }, + "IT2ME_FIRST_RUN": { + "message": "Chia sẻ màn hình giữa ngÆ°á»i dùng, hoàn hảo để há»— trợ kỹ thuật từ xa." + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "Bố cục bàn phím" + }, + "LABEL_CONNECTED": { + "message": "Äã kết nối:" + }, + "LAST_ONLINE": { + "message": "$1$ (trá»±c tuyến lần cuối $2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "Tìm hiểu cách thức." + }, + "LEARN_MORE": { + "message": "Tìm hiểu thêm." + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Tùy chá»n máy chủ Chrome Remote Desktop" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Máy chủ Chrome\nRemote Desktop" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Trình gỡ cài đặt máy chủ Chrome Remote Desktop" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "Sá»­ dụng phím Ctrl bên phải cho phím Win (⌘ trên máy Mac)" + }, + "MAXIMIZE_WINDOW": { + "message": "Phóng to cá»­a sổ" + }, + "ME2ME_FIRST_RUN": { + "message": "Truy cập vào máy tính của chính bạn ở má»i nÆ¡i." + }, + "MESSAGE_GENERATING": { + "message": "Äang tạo mã truy cập…" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "Phiên Chrome Remote Desktop của bạn đã kết thúc." + }, + "MESSAGE_SHARED": { + "message": "Máy tính của bạn hiện Ä‘ang được chia sẻ vá»›i $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "Thu nhá» cá»­a sổ" + }, + "MODE_AUTHORIZE": { + "message": "Cho phép" + }, + "MODE_IT2ME": { + "message": "Há»— trợ từ xa" + }, + "MODE_ME2ME": { + "message": "Máy tính của tôi" + }, + "NEW_WINDOW": { + "message": "Cá»­a sổ má»›i..." + }, + "NO_PAIRED_CLIENTS": { + "message": "Tất cả ứng dụng khách được ghép nối đã bị xóa." + }, + "NO_TRANSPARENCY_WARNING": { + "message": "Tích hợp máy tính để bàn không được há»— trợ trên ná»n tảng này. Bạn sẽ vẫn có thể sá»­ dụng ứng dụng nhÆ°ng trải nghiệm ngÆ°á»i dùng sẽ bị giảm." + }, + "OFFLINE": { + "message": "$1$ (ngoại tuyến)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "Khởi chạy máy chủ không thành công." + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "Cấu hình máy chủ không hợp lệ." + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "Miá»n của chủ sở hữu máy chủ không hợp lệ." + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "Id máy chủ không hợp lệ." + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "Máy chủ được định cấu hình bằng thông tin xác thá»±c OAuth không hợp lệ." + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "Máy chủ chạy trên màn hình logic của bảng Ä‘iá»u khiển đã tắt để há»— trợ chế Ä‘á»™ màn bằng cách chuyển sang máy chủ chạy trong phiên dành riêng cho ngÆ°á»i dùng." + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "Máy chủ Ä‘ang khởi Ä‘á»™ng lại, để thay đổi vá» chính sách có hiệu lá»±c." + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "Máy chủ không Ä‘á»c được chính sách." + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "Máy chủ đã tắt." + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "Lá»—i máy chủ không xác định: $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "Chủ sở hữu máy chủ không hợp lệ." + }, + "OK": { + "message": "OK" + }, + "OPTIONS_MENU": { + "message": "Tùy chá»n" + }, + "OUTGOING_CONNECTIONS": { + "message": "Từ máy tính này" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "Các ứng dụng khách sau đã được ghép nối vá»›i máy tính này và có thể kết nối mà không cung cấp mã PIN. Bạn có thể thu hồi quyá»n này bất kỳ lúc nào, từng ứng dụng khách má»™t hoặc tất cả các ứng dụng khách." + }, + "PAIRED_CLIENT_DATE": { + "message": "Ngày ghép nối" + }, + "PAIRED_CLIENT_NAME": { + "message": "Ứng dụng khách" + }, + "PIN": { + "message": "Mã PIN" + }, + "PINS_NOT_EQUAL": { + "message": "Vui lòng nhập cùng má»™t mã PIN vào cả hai há»™p." + }, + "PIN_MESSAGE": { + "message": "Vui lòng nhập mã PIN của bạn cho $1$.", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "Hãy nhập mã PIN của bạn cho máy tính từ xa." + }, + "PRODUCT_DESCRIPTION": { + "message": "Truy cập máy tính khác hoặc cho phép ngÆ°á»i dùng khác truy cập máy tính của bạn má»™t cách an toàn qua Internet." + }, + "PRODUCT_NAME": { + "message": "Chrome Remote Desktop" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Phát trá»±c tuyến ứng dụng Chrome" + }, + "RECONNECT": { + "message": "Kết nối lại" + }, + "REMEMBER_PIN": { + "message": "Không yêu cầu lại mã PIN khi kết nối vá»›i máy chủ này từ thiết bị này." + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "ThÆ° viện trung tâm" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "Quá trình tích hợp máy tính để bàn" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "Ứng dụng sẽ phát lệnh đến máy chủ Chrome Remote Desktop." + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "Quá trình lÆ°u trữ trên máy chủ" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "Máy chủ nhắn tin gốc dành cho quản lý máy chủ từ xa" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "Máy chủ nhắn tin gốc dành cho há»— trợ từ xa" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "Xá»­ lý từ xa bằng khóa bảo mật" + }, + "RESIZE_TO_CLIENT": { + "message": "Thay đổi kích thÆ°á»›c màn hình cho vừa" + }, + "RESTART_BUTTON": { + "message": "Khởi Ä‘á»™ng lại ngay" + }, + "RESTORE_WINDOW": { + "message": "Khôi phục cá»­a sổ" + }, + "RETRY": { + "message": "Thá»­ lại" + }, + "SCREEN_OPTIONS": { + "message": "Tùy chá»n màn hình" + }, + "SEND_CTRL_ALT_DEL": { + "message": "Gá»­i Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "Báo cáo sá»± cố…" + }, + "SEND_KEYS": { + "message": "Gá»­i phím" + }, + "SEND_PRINT_SCREEN": { + "message": "Gá»­i PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "Dịch vụ này kích hoạt các kết nối đến từ ứng dụng khách Chrome Remote Desktop." + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "Cài đặt này do chính sách miá»n của bạn quản lý." + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "Chia sẻ" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "Hủy" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "Bạn có muốn chia sẻ máy tính này cho má»™t ngÆ°á»i dùng khác xem và kiểm soát không?" + }, + "SHOW_STATS": { + "message": "Hiển thị số liệu thống kê" + }, + "SHOW_STATS_WITH_RTT": { + "message": "Hiển thị số liệu thống kê (kết nối: $1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "Co laÌ£i cho vÆ°Ì€a" + }, + "SIGN_IN_BUTTON": { + "message": "Äăng nhập" + }, + "SIGN_OUT_BUTTON": { + "message": "Äăng xuất" + }, + "STOP_SHARING_BUTTON": { + "message": "Ngừng chia sẻ" + }, + "SURVEY_INVITATION": { + "message": "Bạn muốn trợ giúp cải tiến ứng dụng Chrome Remote Desktop? Hãy $1$tham gia khảo sát.$2$", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "Thá»i gian" + }, + "TOGGLE_STATS": { + "message": "Hiển thị số liệu thống kê" + }, + "TOOLTIP_CONNECT": { + "message": "Kết nối vá»›i $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "Tắt kết nối từ xa vá»›i máy tính này" + }, + "TOOLTIP_REFRESH": { + "message": "Làm má»›i danh sách máy chủ" + }, + "TOOLTIP_RENAME": { + "message": "Chỉnh sá»­a tên máy tính" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (lá»—i thá»i)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "Tài khoản" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "Vui lòng xác nhận tài khoản và mã PIN của bạn bên dÆ°á»›i để cho phép Chrome Remote Desktop truy cập." + }, + "WARNING_NAT_DISABLED": { + "message": "LƯU Ã: Cài đặt chính sách chỉ cho phép kết nối giữa các máy tính trong mạng của bạn." + }, + "WARNING_NOT_WINDOWED": { + "message": "LƯU Ã: Nhằm đảm bảo rằng tất cả các phím tắt Ä‘á»u khả dụng, bạn có thể định cấu hình Chrome Remote Desktop để ‘Mở dÆ°á»›i dạng cá»­a sổ’." + }, + "WHY_IS_THIS_SAFE": { + "message": "Tại sao thao tác này lại an toàn?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "Windows" + }, + "WORKING": { + "message": "Äang xá»­ lý..." + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_CN/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_CN/messages.json new file mode 100644 index 000000000000..d6b0d26c7472 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_CN/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "接å—并安装" + }, + "ACCESS_CODE": { + "message": "访问代ç " + }, + "ACCESS_CODE_TIMER": { + "message": "此访问代ç å°†åœ¨ $1$ åŽå¤±æ•ˆã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "å馈" + }, + "ALL_CONNECTIONS": { + "message": "所有连接" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "é‡æ–°è¾“å…¥ PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "å–消" + }, + "CLEAR_HISTORY": { + "message": "清除历å²è®°å½•" + }, + "CLOSE": { + "message": "关闭" + }, + "CLOSE_PROMPT": { + "message": "如果您离开此页,那么您的 Chrome 远程桌é¢ä¼šè¯å°±ä¼šç»“æŸã€‚" + }, + "CLOSE_WINDOW": { + "message": "关闭窗å£" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "您确定è¦åœç”¨ä¸Žâ€œ$1$â€çš„远程连接å—?如果您日åŽæƒ³è¦é‡æ–°å¯ç”¨è¿žæŽ¥ï¼Œéœ€è¦è®¿é—®è¯¥è®¡ç®—机。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "连接失败" + }, + "CONNECTION_FROM_HEADER": { + "message": "æ¥è‡ª" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "连接历å²è®°å½•" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "一般" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "良好" + }, + "CONNECTION_QUALITY_POOR": { + "message": "较差" + }, + "CONNECTION_TO_HEADER": { + "message": "指å‘" + }, + "CONNECT_ANYWAY": { + "message": "ä»ç„¶è¿žæŽ¥" + }, + "CONNECT_BUTTON": { + "message": "连接" + }, + "CONTINUE_BUTTON": { + "message": "继续" + }, + "CONTINUE_PROMPT": { + "message": "您目å‰æ­£åœ¨ä¸Žå…¶ä»–用户共享此计算机。您希望继续共享å—?" + }, + "CONTROLLER_NAME": { + "message": "Chrome 远程桌é¢ä¸»æœºæŽ§åˆ¶å™¨" + }, + "COPYRIGHT": { + "message": "版æƒæ‰€æœ‰2013 Google Inc。ä¿ç•™æ‰€æœ‰æƒåˆ©ã€‚" + }, + "CREDITS": { + "message": "鸣谢" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "全部删除" + }, + "DELETE_PAIRED_CLIENT": { + "message": "删除" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "è¦ç»§ç»­ï¼Œæ‚¨å¿…须先为该应用授予对您的计算机的扩展访问æƒé™ï¼ˆè¯¥æ“作åªéœ€æ‰§è¡Œä¸€æ¬¡ï¼‰ã€‚" + }, + "DESCRIPTION_CONNECT": { + "message": "请让您想访问其计算机的用户点击“$1$â€ï¼Œç„¶åŽå‘您æ供访问代ç ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome 远程桌é¢å¯è®©æ‚¨é€šè¿‡ç½‘络安全地共享自己的计算机。åŒæ–¹ç”¨æˆ·å¿…é¡»åŒæ—¶è¿è¡Œ Chrome 远程桌é¢åº”用(下载地å€ä¸º $1$)。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "远程主机è¦æ±‚您对第三方网站进行身份验è¯ã€‚è¦ç»§ç»­æ“ä½œï¼Œæ‚¨å¿…é¡»å‘ Chrome 远程桌é¢æŽˆäºˆè®¿é—®ä»¥ä¸‹åœ°å€çš„é¢å¤–æƒé™ï¼š" + }, + "DISABLE_HOST": { + "message": "åœç”¨" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "断开连接" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome 远程桌é¢æœåŠ¡" + }, + "DURATION_HEADER": { + "message": "æŒç»­æ—¶é—´" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "您无æƒè¿è¡Œè¯¥åº”用。" + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "身份验è¯å¤±è´¥ã€‚请é‡æ–°ç™»å½• Chrome。" + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "缺少æŸäº›å¿…需的组件。请确ä¿æ‚¨å·²å®‰è£…该软件的最新版本,然åŽé‡è¯•ã€‚" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "出现网络错误。当您的设备é‡æ–°è”网åŽï¼Œç³»ç»Ÿå°†é‡æ–°å¯åŠ¨è¯¥åº”用。" + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "远程计算机未能将该会è¯åˆå§‹åŒ–。如果问题ä»ç„¶å­˜åœ¨ï¼Œè¯·å°è¯•é‡æ–°é…置主机。" + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "远程计算机没有对连接请求åšå‡ºå“应。请确ä¿å…¶åœ¨çº¿ï¼Œç„¶åŽé‡è¯•ã€‚" + }, + "ERROR_HOST_OVERLOAD": { + "message": "与远程计算机的连接已被暂时阻止,因为有人试图使用无效 PIN 连接到该计算机。请ç¨åŽé‡è¯•ã€‚" + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "无法注册此计算机。" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "检测到ä¸å…¼å®¹çš„å议版本。请确ä¿ä¸¤å°è®¡ç®—机上都已安装该软件的最新版本,然åŽé‡è¯•ã€‚" + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "访问代ç æ— æ•ˆï¼Œè¯·é‡è¯•ã€‚" + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "策略设置ä¸å…许以 Chrome 远程桌é¢ä¸»æœºçš„å½¢å¼å…±äº«æ­¤è®¡ç®—机。请与您的系统管ç†å‘˜è”系寻求帮助。" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "远程会è¯å·²è¿‡æœŸã€‚" + }, + "ERROR_MISSING_PLUGIN": { + "message": "缺少æŸäº›å¿…需的组件。请确ä¿æ‚¨è¿è¡Œçš„是最新版本的 Chrome,然åŽé‡è¯•ã€‚" + }, + "ERROR_NACL_DISABLED": { + "message": "缺少æŸäº›å¿…需的组件。请å‰å¾€ chrome://pluginsï¼Œç¡®ä¿ Native Client 处于å¯ç”¨çŠ¶æ€ã€‚" + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "æŸä¸ªå¿…è¦çš„组件已åœæ­¢è¿è¡Œã€‚请将此问题报告给开å‘者。" + }, + "ERROR_NETWORK_FAILURE": { + "message": "无法连接到网络。请检查您的设备是å¦å·²è¿žæŽ¥åˆ°ç½‘络。" + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "您尚未登录 Chrome。请登录,然åŽé‡è¯•ã€‚" + }, + "ERROR_NOT_AUTHORIZED": { + "message": "您无æƒæ‰§è¡Œè¯¥æ“作。" + }, + "ERROR_NOT_FOUND": { + "message": "请求的对象ä¸å­˜åœ¨ã€‚" + }, + "ERROR_P2P_FAILURE": { + "message": "无法连接到主机,这å¯èƒ½æ˜¯ç”±æ‚¨æ‰€ä½¿ç”¨ç½‘络的é…置导致的。" + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "æ­¤æœåŠ¡æš‚时无法使用。请ç¨åŽå†è¯•ã€‚" + }, + "ERROR_UNEXPECTED": { + "message": "å‘生æ„外错误。请将此问题报告给开å‘者。" + }, + "EXIT_FULL_SCREEN": { + "message": "退出全å±æ¨¡å¼" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "无法é‡ç½®è¯¥åº”用。您ä»å¯ä»¥å‘é€é”™è¯¯æŠ¥å‘Šã€‚" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "é‡ç½®è¯¥åº”用。所有未ä¿å­˜çš„工作都将会丢失。" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "我无法打开此应用。" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "此应用的è¿è¡Œé€Ÿåº¦å¤ªæ…¢ã€‚" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "我无法打开自己在 Google 云端硬盘中的文件。" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "我无法在 Google 云端硬盘中在线查看自己ä¿å­˜çš„文件。" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "我的键盘或鼠标无法正常使用。" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "请将您é‡åˆ°çš„问题告诉我们,以便我们为您解决:" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "其他。" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "请选择…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "为了便于我们与您è”系(以便了解更多信æ¯ï¼‰ï¼Œæ‚¨çš„电å­é‚®ä»¶åœ°å€å°†åŒ…å«åœ¨æ‚¨æ交的所有å馈中。" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "报告问题" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "包å«åº”用日志,以便我们解决您的问题(日志中å¯èƒ½åŒ…å«ç§äººä¿¡æ¯ï¼‰ã€‚" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "应用日志å¯èƒ½åŒ…å«ç§äººä¿¡æ¯ï¼Œå…¶ä¸­åŒ…括您的身份信æ¯ï¼ˆç”µå­é‚®ä»¶åœ°å€ï¼‰ä»¥åŠ Google 云端硬盘中的文件和文件夹的å称åŠå±žæ€§ã€‚" + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "这些信æ¯ä»…用于诊断您报告的问题,并且åªæœ‰è´Ÿè´£å¯¹æ‚¨æŠ¥å‘Šçš„问题进行调查的人员æ‰å¯ä½¿ç”¨ã€‚这些信æ¯çš„ä¿ç•™æ—¶é—´ä¸ä¼šè¶…过 30 天。" + }, + "FOOTER_CONNECTING": { + "message": "正在连接…" + }, + "FOOTER_WAITING": { + "message": "正在等待建立连接…" + }, + "FOR_PLATFORM_MAC": { + "message": "适用于 Mac(OS X 10.6 åŠæ›´é«˜ç‰ˆæœ¬ï¼‰" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "适用于 Windows(XP åŠæ›´é«˜ç‰ˆæœ¬ï¼‰" + }, + "FULL_SCREEN": { + "message": "å…¨å±" + }, + "GET_STARTED": { + "message": "开始使用" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "接å—" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "æ‹’ç»" + }, + "HELP": { + "message": "帮助" + }, + "HOME_ACCESS_BUTTON": { + "message": "访问" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "查看和控制共享的计算机。" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "您å¯ä½¿ç”¨ Chrome 远程桌é¢å®‰å…¨åœ°è®¿é—®æ­¤è®¡ç®—机。" + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "更改 PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "ç›®å‰ï¼Œæ­¤è®¡ç®—机åªèƒ½é€šè¿‡å¦ä¸€å¸æˆ·è¿›è¡Œå…±äº«ã€‚" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "查看/修改" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "此计算机已é…置为å…许一个或多个客户端无需输入 PIN å³å¯è¿›è¡Œè¿žæŽ¥ã€‚" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "å¯ç”¨è¿œç¨‹è¿žæŽ¥" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "如果您想使用 Chrome 远程桌é¢æ¥è®¿é—®æ­¤è®¡ç®—机,就必须å¯ç”¨è¿œç¨‹è¿žæŽ¥ã€‚" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "åœç”¨è¿œç¨‹è¿žæŽ¥" + }, + "HOME_SHARE_BUTTON": { + "message": "分享" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "共享此计算机以供其他用户查看和控制。" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(您的计算机尚ä¸æ”¯æŒè¯¥åŠŸèƒ½ï¼‰" + }, + "HOST_CATEGORY": { + "message": "主机" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "%1 访问客户端的请求é­æ‹’。" + }, + "HOST_CLIENT_CONNECTED": { + "message": "已连接客户端:%1。" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "与下列客户端的连接已中断:%1。" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "å®¢æˆ·ç«¯ä¿¡é“ IP:%1 ip='%2' host_ip='%3' channel='%4' connection='%5'。" + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "è¦å¯ç”¨åˆ°å¦ä¸€å°è®¡ç®—机的远程连接,请在该计算机上安装 Chrome 远程桌é¢å¹¶ç‚¹å‡»â€œ$1$â€ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "您未注册任何计算机。è¦å¯ç”¨åˆ°æŸå°è®¡ç®—机的远程连接,请在该计算机上安装 Chrome 远程桌é¢å¹¶ç‚¹å‡»â€œ$1$â€ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "您之å‰æ›¾ä½¿ç”¨ $1$ ($2$) 登录。è¦è®¿é—®è¯¥å¸æˆ·å下的计算机,请使用该å¸æˆ·$3$登录 Google Chrome$4$,然åŽé‡æ–°å®‰è£… Chrome 远程桌é¢ã€‚", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "系统通常会自动执行软件更新,但在æžå°‘数情况下,更新å¯èƒ½ä¼šå¤±è´¥ã€‚更新软件应该åªéœ€è¦å‡ åˆ†é’Ÿï¼Œè€Œä¸”å¯åœ¨è¿œç¨‹è¿žæŽ¥åˆ°è®¡ç®—机时执行。" + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$上的 Chrome 远程桌é¢å·²è¿‡æœŸï¼Œéœ€è¦æ›´æ–°ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "å…许我们收集使用情况统计信æ¯å’Œå´©æºƒæŠ¥å‘Šï¼Œä»¥å¸®åŠ©æ”¹è¿› Chrome 远程桌é¢ã€‚" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "为防止他人擅自访问此计算机,请选用一个$1$至少 6 ä½æ•°$2$çš„ PIN。当从其他ä½ç½®è¿žæŽ¥æ—¶ï¼Œå°†éœ€è¦è¾“入此 PIN。", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "无法å¯åŠ¨è¿œç¨‹è®¿é—®æœåŠ¡ã€‚" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome 正在下载 Chrome 远程桌é¢ä¸»æœºå®‰è£…程åºã€‚下载完æˆåŽï¼Œè¯·å…ˆè¿è¡Œè¯¥å®‰è£…程åºï¼Œå†ç»§ç»­æ“作。" + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "请先è¿è¡Œè¯¥å®‰è£…程åºï¼Œå†ç»§ç»­æ“作。" + }, + "HOST_SETUP_STARTED": { + "message": "此计算机的远程连接已å¯ç”¨ã€‚" + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "请检查您的计算机电æºç®¡ç†è®¾ç½®ï¼Œç¡®ä¿æœªå°†è¯¥è®¾ç½®é…置为无æ“作时进入休眠模å¼ã€‚" + }, + "HOST_SETUP_STARTING": { + "message": "正在对此计算机å¯ç”¨è¿œç¨‹è¿žæŽ¥â€¦" + }, + "HOST_SETUP_STOPPED": { + "message": "此计算机的远程连接已åœç”¨ã€‚" + }, + "HOST_SETUP_STOPPING": { + "message": "正在对此计算机åœç”¨è¿œç¨‹è¿žæŽ¥â€¦" + }, + "HOST_SETUP_STOP_FAILED": { + "message": "无法åœç”¨å¯¹æ­¤è®¡ç®—机的远程访问。请ç¨åŽé‡è¯•ã€‚" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "下载 Chrome 远程桌é¢ä¸»æœºå®‰è£…程åºï¼Œå³è¡¨ç¤ºæ‚¨åŒæ„éµå®ˆ Google $1$æœåŠ¡æ¡æ¬¾$4。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "您的 PIN 已更新。" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "无法更新 PIN。请ç¨åŽé‡è¯•ã€‚" + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "正在更新此计算机的 PIN…" + }, + "HOST_STARTED": { + "message": "已为用户%1å¯åŠ¨ä¸»æœºã€‚" + }, + "HOST_STOPPED": { + "message": "主机已åœæ­¢è¿è¡Œã€‚" + }, + "IDLE_CONTINUE": { + "message": "继续" + }, + "IDLE_DISCONNECT": { + "message": "ç«‹å³æ–­å¼€" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "您的$1$会è¯å·²ç»æœ‰ä¸€æ®µæ—¶é—´æ²¡æœ‰æ´»åŠ¨äº†ï¼Œè¿žæŽ¥å³å°†æ–­å¼€ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "指å‘此计算机" + }, + "INSTALLER_DOWNLOAD": { + "message": "下载 Chrome 远程桌é¢ä¸»æœºå®‰è£…程åº" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "è¦å¼€å§‹å…±äº«æ‚¨çš„æ¡Œé¢ï¼Œè¯·å°†ä¸‹é¢çš„访问代ç æ供给å助您的人员。" + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "他们输入访问代ç åŽï¼Œæ‚¨çš„共享会è¯å°±ä¼šç«‹å³å¼€å§‹ã€‚" + }, + "INVALID_PIN": { + "message": "è¯·è¾“å…¥è‡³å°‘åŒ…å« 6 ä½æ•°çš„ PIN。" + }, + "IT2ME_FIRST_RUN": { + "message": "用户对用户的å±å¹•å…±äº«åŠŸèƒ½ï¼Œå°¤å…¶é€‚用于远程技术支æŒã€‚" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "键盘布局" + }, + "LABEL_CONNECTED": { + "message": "已连接:" + }, + "LAST_ONLINE": { + "message": "$1$(上次è”网时间:$2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "了解详情。" + }, + "LEARN_MORE": { + "message": "了解详情。" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome 远程桌é¢ä¸»æœºå好设置" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome 远程\næ¡Œé¢ä¸»æœº" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome 远程桌é¢ä¸»æœºå¸è½½ç¨‹åº" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "使用å³ä¾§çš„ Ctrl 键执行 Win 键功能(在 Mac 上则使用 ⌘ 键)" + }, + "MAXIMIZE_WINDOW": { + "message": "最大化窗å£" + }, + "ME2ME_FIRST_RUN": { + "message": "从任何地方访问您自己的计算机。" + }, + "MESSAGE_GENERATING": { + "message": "正在生æˆè®¿é—®ä»£ç â€¦" + }, + "MESSAGE_SESSION_FINISHED": { + "message": "您的 Chrome 远程桌é¢ä¼šè¯å·²ç»“æŸã€‚" + }, + "MESSAGE_SHARED": { + "message": "您目å‰æ­£ä¸Ž $1$ 共享您的桌é¢ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "最å°åŒ–窗å£" + }, + "MODE_AUTHORIZE": { + "message": "授æƒ" + }, + "MODE_IT2ME": { + "message": "远程å助" + }, + "MODE_ME2ME": { + "message": "我的计算机" + }, + "NEW_WINDOW": { + "message": "打开新的窗å£â€¦" + }, + "NO_PAIRED_CLIENTS": { + "message": "已删除所有é…对的客户端。" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "该平å°ä¸æ”¯æŒæ¡Œé¢é›†æˆã€‚您ä»å¯ä»¥ä½¿ç”¨è¯¥åº”用,但用户体验将会å—到影å“。" + }, + "OFFLINE": { + "message": "$1$(离线)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "主机åˆå§‹åŒ–失败。" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "主机é…置无效。" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "主机所有者所在网域无效。" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "主机 ID 无效。" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "为主机指定的 OAuth 凭æ®æ— æ•ˆã€‚" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "在控制å°é€»è¾‘å±å¹•è¿è¡Œçš„主机已关闭。这是为了切æ¢åˆ°åœ¨ç”¨æˆ·ç‰¹å®šä¼šè¯ä¸­è¿è¡Œçš„主机,以便为 Curtain 模å¼æ供支æŒã€‚" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "由于å‘生了政策å˜æ›´ï¼Œä¸»æœºæ­£åœ¨é‡æ–°å¯åŠ¨ã€‚" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "主机无法读å–政策。" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "主机已关机。" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "无法识别的主机错误:$1$。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "主机所有者无效。" + }, + "OK": { + "message": "确定" + }, + "OPTIONS_MENU": { + "message": "选项" + }, + "OUTGOING_CONNECTIONS": { + "message": "æ¥è‡ªæ­¤è®¡ç®—机" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "下列客户端已与此计算机é…对,无需æä¾› PIN å³å¯è¿žæŽ¥ã€‚您éšæ—¶å¯ä»¥æ’¤æ¶ˆä¸ªåˆ«æˆ–所有客户端的这项æƒé™ã€‚" + }, + "PAIRED_CLIENT_DATE": { + "message": "é…对日期" + }, + "PAIRED_CLIENT_NAME": { + "message": "客户端" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "请在两个框中输入相åŒçš„ PIN。" + }, + "PIN_MESSAGE": { + "message": "请输入您用于“$1$â€çš„ PIN。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "请为远程计算机输入PINç ã€‚" + }, + "PRODUCT_DESCRIPTION": { + "message": "通过互è”网安全访问其他计算机,或å…许其他用户通过互è”网安全访问您的计算机。" + }, + "PRODUCT_NAME": { + "message": "Chrome 远程桌é¢" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome App Streaming" + }, + "RECONNECT": { + "message": "é‡æ–°è¿žæŽ¥" + }, + "REMEMBER_PIN": { + "message": "从这å°è®¾å¤‡è¿žæŽ¥åˆ°æ­¤ä¸»æœºæ—¶ä¸å†è¦æ±‚输入PINç ã€‚" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "核心数æ®åº“" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "æ¡Œé¢é›†æˆè¿›ç¨‹" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "å‘ Chrome 远程桌é¢ä¸»æœºå‘出命令的应用。" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "主机进程" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "用于远程主机管ç†çš„本地消æ¯ä¼ é€’主机" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "用于远程å助的本地消æ¯ä¼ é€’主机" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "安全密钥远程处ç†" + }, + "RESIZE_TO_CLIENT": { + "message": "将桌é¢è°ƒæ•´ä¸ºåˆé€‚大å°" + }, + "RESTART_BUTTON": { + "message": "ç«‹å³é‡æ–°å¯åŠ¨" + }, + "RESTORE_WINDOW": { + "message": "æ¢å¤çª—å£" + }, + "RETRY": { + "message": "é‡è¯•" + }, + "SCREEN_OPTIONS": { + "message": "å±å¹•é€‰é¡¹" + }, + "SEND_CTRL_ALT_DEL": { + "message": "å‘é€Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "报告问题…" + }, + "SEND_KEYS": { + "message": "å‘é€æŒ‰é”®" + }, + "SEND_PRINT_SCREEN": { + "message": "å‘é€PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "æ­¤æœåŠ¡å…许æ¥è‡ª Chrome 远程桌é¢å®¢æˆ·ç«¯çš„连接。" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "此设置å—您的网域政策管ç†ã€‚" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "分享" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "å–消" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "您è¦ä¸Žå…¶ä»–用户共享此计算机的查看和控制æƒé™å—?" + }, + "SHOW_STATS": { + "message": "显示统计信æ¯" + }, + "SHOW_STATS_WITH_RTT": { + "message": "显示统计信æ¯ï¼ˆè¿žæŽ¥ï¼š$1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "缩å°ä»¥é€‚åˆæµè§ˆå™¨çª—å£å¤§å°" + }, + "SIGN_IN_BUTTON": { + "message": "登录" + }, + "SIGN_OUT_BUTTON": { + "message": "退出" + }, + "STOP_SHARING_BUTTON": { + "message": "åœæ­¢å…±äº«" + }, + "SURVEY_INVITATION": { + "message": "æ„¿æ„帮忙改进 Chrome 远程桌é¢å—?$1$请å‚与调查$2$。", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "时间" + }, + "TOGGLE_STATS": { + "message": "显示统计信æ¯" + }, + "TOOLTIP_CONNECT": { + "message": "连接到“$1$â€", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "åœç”¨ä¸Žæ­¤è®¡ç®—机的远程连接" + }, + "TOOLTIP_REFRESH": { + "message": "刷新主机列表" + }, + "TOOLTIP_RENAME": { + "message": "修改计算机å称" + }, + "UPDATE_REQUIRED": { + "message": "$1$(已过期)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "å¸æˆ·" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "请在下方确认您的å¸æˆ·å’Œ PIN,以便å…许通过 Chrome 远程桌é¢è¿›è¡Œè®¿é—®ã€‚" + }, + "WARNING_NAT_DISABLED": { + "message": "注æ„:策略设置仅å…许您网络内的计算机之间建立连接。" + }, + "WARNING_NOT_WINDOWED": { + "message": "注æ„:为确ä¿æ‰€æœ‰é”®ç›˜å¿«æ·é”®éƒ½èƒ½æ­£å¸¸ä½¿ç”¨ï¼Œè¯·å°† Chrome 远程桌é¢é…置为“在窗å£ä¸­æ‰“å¼€â€ã€‚" + }, + "WHY_IS_THIS_SAFE": { + "message": "æ­¤æ“作为什么是安全的?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "窗å£" + }, + "WORKING": { + "message": "è¿è¡Œä¸­â€¦" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_TW/messages.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_TW/messages.json new file mode 100644 index 000000000000..3257ab695044 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_locales/zh_TW/messages.json @@ -0,0 +1,792 @@ +{ + "ACCEPT_AND_INSTALL": { + "message": "接å—並安è£" + }, + "ACCESS_CODE": { + "message": "å­˜å–碼" + }, + "ACCESS_CODE_TIMER": { + "message": "這個存å–碼將於 $1$ 後失效", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "ACTIONBAR_FEEDBACK": { + "message": "æ„見回饋" + }, + "ALL_CONNECTIONS": { + "message": "所有連線" + }, + "ASK_PIN_DIALOG_CONFIRM_LABEL": { + "message": "é‡æ–°è¼¸å…¥ PIN" + }, + "ASK_PIN_DIALOG_LABEL": { + "message": "PIN" + }, + "CANCEL": { + "message": "å–消" + }, + "CLEAR_HISTORY": { + "message": "清除紀錄" + }, + "CLOSE": { + "message": "關閉" + }, + "CLOSE_PROMPT": { + "message": "如果離開這個é é¢ï¼Œæ‚¨çš„ Chrome é ç«¯æ¡Œé¢å·¥ä½œéšŽæ®µä¹ŸæœƒçµæŸã€‚" + }, + "CLOSE_WINDOW": { + "message": "關閉視窗" + }, + "COMPANY_NAME": { + "message": "Google Inc." + }, + "CONFIRM_HOST_DELETE": { + "message": "您是å¦ç¢ºå®šè¦åœç”¨èˆ‡ $1$ 之間的é ç«¯é€£ç·šï¼Ÿå¦‚果之後改變心æ„的話,您必須親身å‰å¾€è©²é›»è…¦æ‰€åœ¨ä½ç½®ä¸¦ä¿®æ”¹è¨­å®šå¾Œï¼Œæ‰èƒ½é‡æ–°å•Ÿç”¨é€£ç·šã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "CONNECTION_FAILED": { + "message": "連線失敗" + }, + "CONNECTION_FROM_HEADER": { + "message": "來æºé›»è…¦" + }, + "CONNECTION_HISTORY_TITLE": { + "message": "連線紀錄" + }, + "CONNECTION_QUALITY_FAIR": { + "message": "普通" + }, + "CONNECTION_QUALITY_GOOD": { + "message": "良好" + }, + "CONNECTION_QUALITY_POOR": { + "message": "ä¸ä½³" + }, + "CONNECTION_TO_HEADER": { + "message": "目標電腦" + }, + "CONNECT_ANYWAY": { + "message": "繼續連線" + }, + "CONNECT_BUTTON": { + "message": "連線" + }, + "CONTINUE_BUTTON": { + "message": "繼續" + }, + "CONTINUE_PROMPT": { + "message": "您目å‰æ­£èˆ‡å¦ä¸€ä½ä½¿ç”¨è€…共用這å°é›»è…¦ï¼Œæ‚¨è¦ç¹¼çºŒå…±ç”¨å—Žï¼Ÿ" + }, + "CONTROLLER_NAME": { + "message": "Chrome é ç«¯æ¡Œé¢ä¸»æ©ŸæŽ§åˆ¶å™¨" + }, + "COPYRIGHT": { + "message": "Copyright 2013 Google Inc. ä¿ç•™æ‰€æœ‰æ¬Šåˆ©ã€‚" + }, + "CREDITS": { + "message": "製作人員åå–®" + }, + "DELETE_ALL_PAIRED_CLIENTS": { + "message": "全部刪除" + }, + "DELETE_PAIRED_CLIENT": { + "message": "刪除" + }, + "DESCRIPTION_AUTHORIZE": { + "message": "您必須先授予電腦的延伸存å–權é™ï¼Œæ‰èƒ½ç¹¼çºŒæ“作 (åªéœ€åŸ·è¡Œä¸€æ¬¡)。" + }, + "DESCRIPTION_CONNECT": { + "message": "請您è¦å­˜å–çš„é›»è…¦çš„ä½¿ç”¨è€…é»žé¸ [$1$],並æ供存å–碼給您。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_HOME": { + "message": "Chrome é ç«¯æ¡Œé¢æ供了安全的連線機制,å¯è®“您é€éŽç¶²è·¯èˆ‡ä»–人共用自己的電腦。您和共用å°è±¡éƒ½å¿…須執行 Chrome é ç«¯æ¡Œé¢æ‡‰ç”¨ç¨‹å¼ï¼Œè«‹å‰å¾€ $1$ 安è£ã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "DESCRIPTION_THIRD_PARTY_AUTH": { + "message": "é ç«¯ä¸»æ©Ÿè¦æ±‚您å‘第三方網站進行驗證。如è¦ç¹¼çºŒï¼Œæ‚¨å¿…須授予é¡å¤–權é™ï¼Œè®“ Chrome é ç«¯æ¡Œé¢èƒ½å¤ å­˜å–這個ä½å€ï¼š" + }, + "DISABLE_HOST": { + "message": "åœç”¨" + }, + "DISCONNECT_MYSELF_BUTTON": { + "message": "中斷連線" + }, + "DISPLAY_SERVICE_NAME": { + "message": "Chrome é ç«¯æ¡Œé¢æœå‹™" + }, + "DURATION_HEADER": { + "message": "æŒçºŒæ™‚é–“" + }, + "ERROR_APP_NOT_AUTHORIZED": { + "message": "您沒有執行這個應用程å¼çš„權é™ã€‚" + }, + "ERROR_AUTHENTICATION_FAILED": { + "message": "驗證失敗,請é‡æ–°ç™»å…¥ Chrome。" + }, + "ERROR_BAD_PLUGIN_VERSION": { + "message": "找ä¸åˆ°éƒ¨åˆ†å¿…è¦å…ƒä»¶ã€‚請確èªæ‚¨å·²å®‰è£æœ€æ–°ç‰ˆæœ¬çš„軟體,然後å†è©¦ä¸€æ¬¡ã€‚" + }, + "ERROR_CONNECTION_DROPPED": { + "message": "發生網路錯誤。系統將在您的è£ç½®æ¢å¾©ç¶²è·¯é€£ç·šå¾Œé‡æ–°å•Ÿå‹•æ‡‰ç”¨ç¨‹å¼ã€‚" + }, + "ERROR_HOST_CONFIGURATION_ERROR": { + "message": "é ç«¯é›»è…¦ç„¡æ³•åˆå§‹åŒ–工作階段。如果å•é¡ŒæŒçºŒç™¼ç”Ÿï¼Œè«‹å˜—試é‡æ–°è¨­å®šä¸»æ©Ÿã€‚" + }, + "ERROR_HOST_IS_OFFLINE": { + "message": "é ç«¯é›»è…¦æœªå›žæ‡‰æ‚¨çš„連線è¦æ±‚。請確èªé ç«¯é›»è…¦å·²åœ¨ç·šä¸Šï¼Œç„¶å¾Œå†è©¦ä¸€æ¬¡ã€‚" + }, + "ERROR_HOST_OVERLOAD": { + "message": "由於有人嘗試使用無效的 PIN 連線到é ç«¯é›»è…¦ï¼Œå› æ­¤æ‚¨çš„連線暫時é­åˆ°å°éŽ–。請ç¨å¾Œå†è©¦ã€‚" + }, + "ERROR_HOST_REGISTRATION_FAILED": { + "message": "無法註冊這å°é›»è…¦ã€‚" + }, + "ERROR_INCOMPATIBLE_PROTOCOL": { + "message": "åµæ¸¬åˆ°ä¸ç›¸å®¹çš„通訊å”定版本。請確èªå…©å°é›»è…¦éƒ½å®‰è£äº†æœ€æ–°ç‰ˆæœ¬çš„軟體,然後å†è©¦ä¸€æ¬¡ã€‚" + }, + "ERROR_INVALID_ACCESS_CODE": { + "message": "å­˜å–碼無效,請å†è©¦ä¸€æ¬¡ã€‚" + }, + "ERROR_INVALID_HOST_DOMAIN": { + "message": "政策設定ä¸å…許以 Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿçš„å½¢å¼å…±ç”¨é€™å°é›»è…¦ã€‚如需å”助,請與您的系統管ç†å“¡è¯çµ¡ã€‚" + }, + "ERROR_MAX_SESSION_LENGTH": { + "message": "é ç«¯å·¥ä½œéšŽæ®µå·²é€¾æ™‚。" + }, + "ERROR_MISSING_PLUGIN": { + "message": "找ä¸åˆ°éƒ¨åˆ†å¿…è¦å…ƒä»¶ã€‚請確èªæ‚¨åŸ·è¡Œçš„是最新版本的 Chrome,然後å†è©¦ä¸€æ¬¡ã€‚" + }, + "ERROR_NACL_DISABLED": { + "message": "找ä¸åˆ°éƒ¨åˆ†å¿…è¦å…ƒä»¶ã€‚è«‹é–‹å•Ÿ chrome://plugins é é¢ï¼Œç¢ºèªæ‚¨å·²å•Ÿç”¨ Native Client。" + }, + "ERROR_NACL_PLUGIN_CRASHED": { + "message": "å¿…è¦çš„元件已åœæ­¢é‹ä½œï¼Œè«‹å‘開發人員回報這個å•é¡Œã€‚" + }, + "ERROR_NETWORK_FAILURE": { + "message": "無法連上網路,請確èªè£ç½®æ˜¯å¦è™•æ–¼ä¸Šç·šç‹€æ…‹ã€‚" + }, + "ERROR_NOT_AUTHENTICATED": { + "message": "您尚未登入 Chrome,請登入並å†è©¦ä¸€æ¬¡ã€‚" + }, + "ERROR_NOT_AUTHORIZED": { + "message": "您沒有執行這項æ“作的權é™ã€‚" + }, + "ERROR_NOT_FOUND": { + "message": "è¦æ±‚的物件ä¸å­˜åœ¨ã€‚" + }, + "ERROR_P2P_FAILURE": { + "message": "無法連線到主機,原因å¯èƒ½èˆ‡æ‚¨ä½¿ç”¨çš„網路設定有關。" + }, + "ERROR_SERVICE_UNAVAILABLE": { + "message": "æœå‹™æš«æ™‚無法使用,請ç¨å¾Œå†è©¦ã€‚" + }, + "ERROR_UNEXPECTED": { + "message": "發生未é æœŸçš„錯誤,請å‘開發人員回報這個å•é¡Œã€‚" + }, + "EXIT_FULL_SCREEN": { + "message": "退出全螢幕模å¼" + }, + "FEEDBACK_ABANDON_FAILED": { + "message": "無法é‡è¨­æ‡‰ç”¨ç¨‹å¼ã€‚您ä»ç„¶å¯ä»¥å‚³é€éŒ¯èª¤å ±å‘Šã€‚" + }, + "FEEDBACK_ABANDON_HOST": { + "message": "é‡è¨­æ‡‰ç”¨ç¨‹å¼ã€‚所有未儲存的變更都會éºå¤±ã€‚" + }, + "FEEDBACK_CATEGORY_APP_LAUNCH": { + "message": "我無法開啟應用程å¼ã€‚" + }, + "FEEDBACK_CATEGORY_APP_PERFORMANCE": { + "message": "應用程å¼çš„é‹ä½œé€Ÿåº¦éŽæ…¢ã€‚" + }, + "FEEDBACK_CATEGORY_DRIVE_DOWNLOAD": { + "message": "我無法開啟自己的 Google 雲端硬碟檔案。" + }, + "FEEDBACK_CATEGORY_DRIVE_UPLOAD": { + "message": "我已儲存的檔案未顯示在線上 Google 雲端硬碟中。" + }, + "FEEDBACK_CATEGORY_INPUT": { + "message": "我無法順利使用éµç›¤æˆ–滑鼠。" + }, + "FEEDBACK_CATEGORY_INSTRUCTIONS": { + "message": "請將您é‡åˆ°çš„å•é¡Œå‘Šè¨´æˆ‘們,以å”助我們為您解決å•é¡Œï¼š" + }, + "FEEDBACK_CATEGORY_OTHER": { + "message": "其他。" + }, + "FEEDBACK_CATEGORY_SELECT": { + "message": "é¸å–…" + }, + "FEEDBACK_CONSENT_EMAIL": { + "message": "如果您å…許我們è¦æ±‚您æ供更進一步的資訊,凡是您æ交的æ„見回饋都會包å«æ‚¨çš„é›»å­éƒµä»¶åœ°å€ã€‚" + }, + "FEEDBACK_CONSENT_TITLE": { + "message": "回報å•é¡Œ" + }, + "FEEDBACK_INCLUDE_LOGS": { + "message": "包括應用程å¼ç´€éŒ„,以å”助我們解決您的å•é¡Œ (紀錄å¯èƒ½å«æœ‰ç§äººè³‡è¨Š)。" + }, + "FEEDBACK_PRIVACY_INFORMATION1": { + "message": "應用程å¼ç´€éŒ„å¯èƒ½å«æœ‰ç§äººè³‡è¨Šï¼ŒåŒ…括您的身分 (é›»å­éƒµä»¶åœ°å€)ï¼Œä»¥åŠ Google 雲端硬碟檔案與資料夾的å稱和屬性。" + }, + "FEEDBACK_PRIVACY_INFORMATION2": { + "message": "這些資訊åªæœƒç”¨æ–¼è¨ºæ–·æ‚¨æ‰€å›žå ±çš„å•é¡Œï¼Œä¸¦ä¸”僅供相關調查人員存å–。此外,系統會在 30 天後刪除這些資訊。" + }, + "FOOTER_CONNECTING": { + "message": "連線中..." + }, + "FOOTER_WAITING": { + "message": "正在等待連線..." + }, + "FOR_PLATFORM_MAC": { + "message": "é©ç”¨æ–¼ Mac (OS X 10.6 以上版本)" + }, + "FOR_PLATFORM_WINDOWS": { + "message": "é©ç”¨æ–¼ Windows (XP 以上版本)" + }, + "FULL_SCREEN": { + "message": "全螢幕" + }, + "GET_STARTED": { + "message": "開始使用" + }, + "HANGOUTS_CONFIRM_DIALOG_ACCEPT": { + "message": "接å—" + }, + "HANGOUTS_CONFIRM_DIALOG_DECLINE": { + "message": "拒絕" + }, + "HELP": { + "message": "說明" + }, + "HOME_ACCESS_BUTTON": { + "message": "å­˜å–" + }, + "HOME_ACCESS_DESCRIPTION": { + "message": "ç€è¦½åŠæ“作共用的電腦。" + }, + "HOME_DAEMON_ACTIVE_MESSAGE": { + "message": "您å¯ä»¥é€éŽ Chrome é ç«¯æ¡Œé¢å®‰å…¨åœ°å­˜å–這å°é›»è…¦ã€‚" + }, + "HOME_DAEMON_CHANGE_PIN_LINK": { + "message": "變更 PIN" + }, + "HOME_DAEMON_HOST_ENABLED_OTHER_ACCOUNT": { + "message": "您目å‰ç™»å…¥çš„帳戶ä¸æ˜¯é€™å°é›»è…¦çš„共用帳戶。" + }, + "HOME_DAEMON_MANAGE_PAIRINGS": { + "message": "檢視/編輯" + }, + "HOME_DAEMON_PAIRED_MESSAGE": { + "message": "這å°é›»è…¦å·²è¨­ç‚ºå…許一或多個用戶端å¯ä¸è¼¸å…¥ PIN 進行連線。" + }, + "HOME_DAEMON_START_BUTTON": { + "message": "啟用é ç«¯é€£ç·š" + }, + "HOME_DAEMON_START_MESSAGE": { + "message": "您必須啟用é ç«¯é€£ç·šï¼Œæ‰èƒ½é€éŽ Chrome é ç«¯æ¡Œé¢å­˜å–這å°é›»è…¦ã€‚" + }, + "HOME_DAEMON_STOP_BUTTON": { + "message": "åœç”¨é ç«¯é€£ç·š" + }, + "HOME_SHARE_BUTTON": { + "message": "分享" + }, + "HOME_SHARE_DESCRIPTION": { + "message": "共用這å°é›»è…¦ï¼Œé–‹æ”¾çµ¦å…¶ä»–使用者ç€è¦½åŠæ“作。" + }, + "HOME_SHARE_DESCRIPTION_UNSUPPORTED": { + "message": "(您的電腦目å‰æš«ä¸æ”¯æ´é€™é …功能)" + }, + "HOST_CATEGORY": { + "message": "主機" + }, + "HOST_CLIENT_ACCESS_DENIED": { + "message": "用戶端é­æ‹’絕存å–:%1。" + }, + "HOST_CLIENT_CONNECTED": { + "message": "已連線至用戶端:%1。" + }, + "HOST_CLIENT_DISCONNECTED": { + "message": "已中斷連線至用戶端:%1。" + }, + "HOST_CLIENT_ROUTING_CHANGED": { + "message": "用戶端版本 IP:%1 ip='%2' host_ip='%3' channel='%4' connection='%5'。" + }, + "HOST_LIST_EMPTY_HOSTING_SUPPORTED": { + "message": "如è¦ç‚ºå…¶ä»–電腦啟用é ç«¯é€£ç·šï¼Œè«‹åœ¨æ‚¨æƒ³è¦é€£ç·šçš„é›»è…¦ä¸Šå®‰è£ Chrome é ç«¯æ¡Œé¢ï¼Œç„¶å¾ŒæŒ‰ä¸€ä¸‹ [$1$]。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_HOSTING_UNSUPPORTED": { + "message": "您尚未註冊任何電腦。如è¦ç‚ºé›»è…¦å•Ÿç”¨é ç«¯é€£ç·šï¼Œè«‹åœ¨é›»è…¦ä¸Šå®‰è£ Chrome é ç«¯æ¡Œé¢ï¼Œç„¶å¾ŒæŒ‰ä¸€ä¸‹ [$1$]。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_LIST_EMPTY_V2_MIGRATION": { + "message": "您先å‰æ›¾ä»¥$1$ ($2$) 身分登入。如è¦é€éŽè©²å¸³æˆ¶å­˜å–您的電腦,請使用該帳戶$3$登入 Google Chrome$4$,並é‡æ–°å®‰è£ Chrome é ç«¯æ¡Œé¢ã€‚", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + }, + "3": { + "content": "$3" + }, + "4": { + "content": "$4" + } + } + }, + "HOST_NEEDS_UPDATE_DETAIL": { + "message": "系統通常會自動執行軟體更新,但在極少數情æ³ä¸‹ï¼Œæ›´æ–°å¯èƒ½æœƒå¤±æ•—。更新軟體的時間應該僅需數分é˜ï¼Œè€Œä¸”å¯é€éŽå¾žé ç«¯é€£ç·šè‡³é›»è…¦çš„æ–¹å¼å®Œæˆã€‚" + }, + "HOST_NEEDS_UPDATE_TITLE": { + "message": "$1$ 上的 Chrome é ç«¯æ¡Œé¢ç‰ˆæœ¬éŽèˆŠï¼Œå¿…須更新。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_CRASH_REPORTING_MESSAGE": { + "message": "å…許我們收集使用統計資料和當機報告,å”助我們改善 Chrome é ç«¯æ¡Œé¢ã€‚" + }, + "HOST_SETUP_DIALOG_DESCRIPTION": { + "message": "如è¦ä¿è­·é€™å°é›»è…¦ï¼Œé¿å…ä¸æ˜Žäººå£«å…¥ä¾µï¼Œè«‹é¸æ“‡ä¸€å€‹$1$至少 6 ä½æ•¸$2$çš„ PIN。當使用者從其他ä½ç½®é€£ç·šæ™‚,必須先輸入這個 PIN 驗證身分。", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "HOST_SETUP_HOST_FAILED": { + "message": "無法啟動é ç«¯å­˜å–æœå‹™ã€‚" + }, + "HOST_SETUP_INSTALL": { + "message": "Chrome 正在下載 Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿå®‰è£ç¨‹å¼ã€‚下載完æˆå¾Œï¼Œè«‹å…ˆåŸ·è¡Œå®‰è£ç¨‹å¼ï¼Œç„¶å¾Œå†ç¹¼çºŒæ“作。" + }, + "HOST_SETUP_INSTALL_PENDING": { + "message": "請先執行安è£ç¨‹å¼ï¼Œç„¶å¾Œå†ç¹¼çºŒæ“作。" + }, + "HOST_SETUP_STARTED": { + "message": "這å°é›»è…¦çš„é ç«¯é€£ç·šå·²å•Ÿç”¨ã€‚" + }, + "HOST_SETUP_STARTED_DISABLE_SLEEP": { + "message": "請檢查電腦的電æºç®¡ç†è¨­å®šï¼Œç¢ºèªé›»è…¦åœ¨é–’置時ä¸æœƒé€²å…¥ä¼‘眠狀態。" + }, + "HOST_SETUP_STARTING": { + "message": "正在啟用這å°é›»è…¦çš„é ç«¯é€£ç·š..." + }, + "HOST_SETUP_STOPPED": { + "message": "這å°é›»è…¦çš„é ç«¯é€£ç·šå·²åœç”¨ã€‚" + }, + "HOST_SETUP_STOPPING": { + "message": "正在åœç”¨é€™å°é›»è…¦çš„é ç«¯é€£ç·š..." + }, + "HOST_SETUP_STOP_FAILED": { + "message": "無法åœç”¨é€™å°é›»è…¦çš„é ç«¯å­˜å–功能,請ç¨å¾Œå†è©¦ã€‚" + }, + "HOST_SETUP_TERMS_OF_SERVICE": { + "message": "下載 Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿå®‰è£ç¨‹å¼å³è¡¨ç¤ºæ‚¨åŒæ„ Google 的《$1$æœå‹™æ¢æ¬¾$4》。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "HOST_SETUP_UPDATED_PIN": { + "message": "您的 PIN 已更新。" + }, + "HOST_SETUP_UPDATE_PIN_FAILED": { + "message": "無法更新 PIN,請ç¨å¾Œå†è©¦ã€‚" + }, + "HOST_SETUP_UPDATING_PIN": { + "message": "正在更新這å°é›»è…¦çš„ PIN..." + }, + "HOST_STARTED": { + "message": "已為下列使用者啟動主機:%1。" + }, + "HOST_STOPPED": { + "message": "主機已åœæ­¢ã€‚" + }, + "IDLE_CONTINUE": { + "message": "繼續" + }, + "IDLE_DISCONNECT": { + "message": "ç«‹å³ä¸­æ–·é€£ç·š" + }, + "IDLE_TIMEOUT_WARNING": { + "message": "您的「$1$ã€å·¥ä½œéšŽæ®µå·²é–’置一段時間,且å³å°‡ä¸­æ–·é€£ç·šã€‚", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "INCOMING_CONNECTIONS": { + "message": "與這å°é›»è…¦" + }, + "INSTALLER_DOWNLOAD": { + "message": "下載 Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿå®‰è£ç¨‹å¼" + }, + "INSTRUCTIONS_SHARE_ABOVE": { + "message": "如è¦é–‹å§‹å…±ç”¨æ‚¨çš„電腦,請將下方的存å–碼告知è¦å”助您的人員。" + }, + "INSTRUCTIONS_SHARE_BELOW": { + "message": "å°æ–¹è¼¸å…¥å­˜å–碼之後,共用工作階段å³æœƒé–‹å§‹ã€‚" + }, + "INVALID_PIN": { + "message": "請輸入一個至少 6 ä½æ•¸çš„ PIN。" + }, + "IT2ME_FIRST_RUN": { + "message": "讓兩端的使用者都能看到åŒä¸€å€‹èž¢å¹•ç•«é¢ï¼Œæ˜¯é ç«¯æŠ€è¡“支æ´ä½œæ¥­çš„利器。" + }, + "KEYBOARD_LAYOUTS_SUBMENU_TITLE": { + "message": "éµç›¤é…ç½®" + }, + "LABEL_CONNECTED": { + "message": "已連線的電腦:" + }, + "LAST_ONLINE": { + "message": "$1$ (上次上線時間:$2$)", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "LEARN_HOW": { + "message": "瞭解詳情" + }, + "LEARN_MORE": { + "message": "瞭解詳情" + }, + "MAC_PREFPANE_BUNDLE_NAME": { + "message": "Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿå好設定" + }, + "MAC_PREFPANE_ICON_LABEL": { + "message": "Chrome é ç«¯\næ¡Œé¢ä¸»æ©Ÿ" + }, + "MAC_UNINSTALLER_BUNDLE_NAME": { + "message": "Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿç«¯è§£é™¤å®‰è£ç¨‹å¼" + }, + "MAP_RIGHT_CTRL_TO_META": { + "message": "使用å³é‚Šçš„ Ctrl åšç‚º Windows éµ (Mac 上為 ⌘ éµ)" + }, + "MAXIMIZE_WINDOW": { + "message": "將視窗放到最大" + }, + "ME2ME_FIRST_RUN": { + "message": "無論您人在哪裡,都能存å–自己的電腦。" + }, + "MESSAGE_GENERATING": { + "message": "正在產生存å–碼..." + }, + "MESSAGE_SESSION_FINISHED": { + "message": "您的 Chrome é ç«¯æ¡Œé¢å·¥ä½œéšŽæ®µå·²çµæŸã€‚" + }, + "MESSAGE_SHARED": { + "message": "您目å‰æ­£èˆ‡ $1$ 共用電腦。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "MINIMIZE_WINDOW": { + "message": "將視窗縮到最å°" + }, + "MODE_AUTHORIZE": { + "message": "授權" + }, + "MODE_IT2ME": { + "message": "é ç«¯å”助" + }, + "MODE_ME2ME": { + "message": "我的電腦" + }, + "NEW_WINDOW": { + "message": "新增視窗…" + }, + "NO_PAIRED_CLIENTS": { + "message": "已刪除所有é…å°çš„用戶端。" + }, + "NO_TRANSPARENCY_WARNING": { + "message": "這個平å°ä¸æ”¯æ´æ¡Œé¢æ•´åˆã€‚您ä»ç„¶å¯ä»¥ä½¿ç”¨è©²æ‡‰ç”¨ç¨‹å¼ï¼Œä½†ä½¿ç”¨è€…體驗å¯èƒ½ä¸å¦‚é æœŸã€‚" + }, + "OFFLINE": { + "message": "$1$ (離線)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_INITIALIZATION_FAILED": { + "message": "主機åˆå§‹åŒ–失敗。" + }, + "OFFLINE_REASON_INVALID_HOST_CONFIGURATION": { + "message": "主機設定無效。" + }, + "OFFLINE_REASON_INVALID_HOST_DOMAIN": { + "message": "主機æ“有者網域無效。" + }, + "OFFLINE_REASON_INVALID_HOST_ID": { + "message": "主機 ID 無效。" + }, + "OFFLINE_REASON_INVALID_OAUTH_CREDENTIALS": { + "message": "用於設定主機的 OAuth 憑證無效。" + }, + "OFFLINE_REASON_LOGIN_SCREEN_NOT_SUPPORTED": { + "message": "在控制å°ç™»å…¥ç•«é¢åŸ·è¡Œçš„主機已關閉。這樣æ‰èƒ½åˆ‡æ›æˆåœ¨å€‹åˆ¥ä½¿ç”¨è€…工作階段中執行的主機,以支æ´å¸·å¹•æ¨¡å¼ã€‚" + }, + "OFFLINE_REASON_POLICY_CHANGE_REQUIRES_RESTART": { + "message": "主機正在é‡æ–°å•Ÿå‹•ï¼Œä»¥ä¾¿å¥—用政策變更。" + }, + "OFFLINE_REASON_POLICY_READ_ERROR": { + "message": "主機無法讀å–政策。" + }, + "OFFLINE_REASON_SUCCESS_EXIT": { + "message": "主機已關閉。" + }, + "OFFLINE_REASON_UNKNOWN": { + "message": "ä¸æ˜Žä¸»æ©ŸéŒ¯èª¤ï¼š$1$。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "OFFLINE_REASON_USERNAME_MISMATCH": { + "message": "主機æ“有者無效。" + }, + "OK": { + "message": "確定" + }, + "OPTIONS_MENU": { + "message": "é¸é …" + }, + "OUTGOING_CONNECTIONS": { + "message": "從這å°é›»è…¦" + }, + "PAIRED_CLIENTS_INTRODUCTION": { + "message": "下列用戶端已與這å°é›»è…¦é…å°ï¼Œé€£ç·šæ™‚å¯éœ€ä¸æä¾› PIN。您隨時å¯ä»¥ç‚ºå€‹åˆ¥æˆ–所有用戶端撤銷這項權é™ã€‚" + }, + "PAIRED_CLIENT_DATE": { + "message": "é…å°æ—¥æœŸ" + }, + "PAIRED_CLIENT_NAME": { + "message": "用戶端" + }, + "PIN": { + "message": "PIN" + }, + "PINS_NOT_EQUAL": { + "message": "請在兩個方塊中輸入相åŒçš„ PIN。" + }, + "PIN_MESSAGE": { + "message": "請輸入 $1$ çš„ PIN。", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "PIN_MESSAGE_ANDROID": { + "message": "請為é ç«¯é›»è…¦è¼¸å…¥æ‚¨çš„ PIN。" + }, + "PRODUCT_DESCRIPTION": { + "message": "在安全的連線機制下,é€éŽç¶²éš›ç¶²è·¯å­˜å–其他電腦,或是å…許其他使用者存å–您的電腦。" + }, + "PRODUCT_NAME": { + "message": "Chrome é ç«¯æ¡Œé¢" + }, + "PRODUCT_NAME_APP_STREAMING": { + "message": "Chrome 應用程å¼ä¸²æµ" + }, + "RECONNECT": { + "message": "é‡æ–°é€£ç·š" + }, + "REMEMBER_PIN": { + "message": "æ­¤è£ç½®é€£ç·šè‡³é€™å€‹ä¸»æ©Ÿæ™‚,ä¸å¿…å†æ¬¡è©¢å• PIN。" + }, + "REMOTING_CORE_DESCRIPTION": { + "message": "核心資料庫" + }, + "REMOTING_DESKTOP_DESCRIPTION": { + "message": "æ¡Œé¢æ•´åˆè™•ç†åº" + }, + "REMOTING_HOST_COMMAND_DESCRIPTION": { + "message": "è¦å° Chrome é ç«¯æ¡Œé¢ä¸»æ©Ÿç™¼å‡ºæŒ‡ä»¤çš„應用程å¼ã€‚" + }, + "REMOTING_HOST_DESCRIPTION": { + "message": "主機處ç†åº" + }, + "REMOTING_NATIVE_MESSAGING_HOST_DESCRIPTION": { + "message": "用於é ç«¯è™•ç†ä¸»æ©Ÿç®¡ç†çš„內建訊æ¯å‚³éžä¸»æ©Ÿ" + }, + "REMOTING_REMOTE_ASSISTANCE_HOST_DESCRIPTION": { + "message": "用於é ç«¯å”助的內建訊æ¯å‚³éžä¸»æ©Ÿ" + }, + "REMOTING_REMOTE_SECURITY_KEY_DESCRIPTION": { + "message": "é ç«¯è™•ç†å®‰å…¨é‡‘é‘°" + }, + "RESIZE_TO_CLIENT": { + "message": "將桌é¢èª¿æ•´ç‚ºåˆé©å¤§å°" + }, + "RESTART_BUTTON": { + "message": "ç«‹å³é‡æ–°å•Ÿå‹•" + }, + "RESTORE_WINDOW": { + "message": "還原視窗" + }, + "RETRY": { + "message": "é‡è©¦" + }, + "SCREEN_OPTIONS": { + "message": "螢幕é¸é …" + }, + "SEND_CTRL_ALT_DEL": { + "message": "å‚³é€ Ctrl-Alt-Del" + }, + "SEND_FEEDBACK": { + "message": "回報å•é¡Œâ€¦" + }, + "SEND_KEYS": { + "message": "é€å‡ºæŒ‰éµè¨Šè™Ÿ" + }, + "SEND_PRINT_SCREEN": { + "message": "å‚³é€ PrtScn" + }, + "SERVICE_DESCRIPTION": { + "message": "這項æœå‹™å…許來自 Chrome é ç«¯æ¡Œé¢ç”¨æˆ¶ç«¯çš„連線。" + }, + "SETTING_MANAGED_BY_POLICY": { + "message": "這項設定å—到您的網域政策管ç†ã€‚" + }, + "SHARE_CONFIRM_DIALOG_CONFIRM": { + "message": "分享" + }, + "SHARE_CONFIRM_DIALOG_DECLINE": { + "message": "å–消" + }, + "SHARE_CONFIRM_DIALOG_MESSAGE": { + "message": "您è¦èˆ‡å…¶ä»–使用者分享這å°é›»è…¦çš„ç€è¦½åŠæŽ§åˆ¶æ¬Šé™å—Žï¼Ÿ" + }, + "SHOW_STATS": { + "message": "顯示統計資料" + }, + "SHOW_STATS_WITH_RTT": { + "message": "顯示統計資料 (連線å“質:$1$)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "SHRINK_TO_FIT": { + "message": "縮å°ä»¥ç¬¦åˆè¦–窗大å°" + }, + "SIGN_IN_BUTTON": { + "message": "登入" + }, + "SIGN_OUT_BUTTON": { + "message": "登出" + }, + "STOP_SHARING_BUTTON": { + "message": "åœæ­¢å…±ç”¨" + }, + "SURVEY_INVITATION": { + "message": "想è¦å”助改善 Chrome é ç«¯æ¡Œé¢å—Žï¼Ÿ$1$請填寫我們的å•å·èª¿æŸ¥$2$。", + "placeholders": { + "1": { + "content": "$1" + }, + "2": { + "content": "$2" + } + } + }, + "TIME_HEADER": { + "message": "時間" + }, + "TOGGLE_STATS": { + "message": "顯示統計資料" + }, + "TOOLTIP_CONNECT": { + "message": "連線至 $1$", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "TOOLTIP_DELETE": { + "message": "åœç”¨èˆ‡é€™å°é›»è…¦çš„é ç«¯é€£ç·š" + }, + "TOOLTIP_REFRESH": { + "message": "é‡æ–°æ•´ç†ä¸»æ©Ÿæ¸…å–®" + }, + "TOOLTIP_RENAME": { + "message": "編輯電腦å稱" + }, + "UPDATE_REQUIRED": { + "message": "$1$ (版本éŽèˆŠ)", + "placeholders": { + "1": { + "content": "$1" + } + } + }, + "VERIFY_PIN_DIALOG_EMAIL_LABEL": { + "message": "帳戶" + }, + "VERIFY_PIN_DIALOG_MESSAGE": { + "message": "請在下方確èªæ‚¨çš„帳戶和 PIN,以便授予 Chrome é ç«¯æ¡Œé¢å­˜å–權é™ã€‚" + }, + "WARNING_NAT_DISABLED": { + "message": "注æ„:政策設定僅å…許您網路中的電腦相互連線。" + }, + "WARNING_NOT_WINDOWED": { + "message": "注æ„:如è¦ç¢ºä¿æ‰€æœ‰éµç›¤å¿«æ·éµéƒ½èƒ½æ­£å¸¸ä½¿ç”¨ï¼Œè«‹å°‡ Chrome é ç«¯æ¡Œé¢è¨­å®šç‚º [在視窗中開啟]。" + }, + "WHY_IS_THIS_SAFE": { + "message": "為什麼這項æ“作是安全的?" + }, + "WINDOWS_SUBMENU_TITLE": { + "message": "視窗" + }, + "WORKING": { + "message": "é‹ä½œä¸­â€¦" + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_metadata/verified_contents.json b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_metadata/verified_contents.json new file mode 100644 index 000000000000..d479234e2d94 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IllKZUg1cFlULWc4ajlMMF9fSWFLLV9xVWd3SWZfbVNRRW9rUXp6aTBlV2siLCJwYXRoIjoiX2xvY2FsZXMvYW0vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IkJkeHZxZDdRV1ZiZmVxSjdYRjBQVVhuVERYTEljbkJ2VzVfbnBqdkFuaEUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6InBXRnJGR1gtSjQ2S0x4cXZpVUtkNTVxOHg5Y3I2RElLMjczVjZEdVdEQUkiLCJwYXRoIjoiX2xvY2FsZXMvYXIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImNEOUw0bm5UU3VvQlkxZThnZFVmMUJpdHNwamNrejBfQlB4SFBsdU1DcEUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjNmLWZwWjVlcEF0Vk5uVGlDRzBYZXZxZmpRM00yLUhWUm9KbHBoYmdtUTQiLCJwYXRoIjoiX2xvY2FsZXMvYmcvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImNZOUg0eVczQnFfLUc0RW1reG9Hcl84d3BOWmw5enJPc0dQeGZUbk9PdG8ifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IndISmVVQ05kbmFweWczblJRRGU5X3hEM3lmWmljR05iMTgxS2NLLWx0c2MiLCJwYXRoIjoiX2xvY2FsZXMvYm4vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IlQ5M1NraXl5RXhiMjRBUjEyeTQ3SEtUc2hCRzh2aUxLOTBhak5KQXJGNW8ifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImQ3QXl3aW9IM0RvV2JYa2o0ZUlwdmRxLWJxTUhEMVZDWVY3LVdkM3ZUYnMiLCJwYXRoIjoiX2xvY2FsZXMvY2EvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Im5IelpTY3Rqcm1aRDlkSjBFSV94cVdsTWRvdURBVDNRSmV1Ukw0ZlZyWFUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlJPQm1SY0xIMFRPeXRucTlYSm1xMmdKRTdhT1BJMUVfbE1SN1JzdzFYTkkiLCJwYXRoIjoiX2xvY2FsZXMvY3MvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImVDQTJ4YkFLLVkyRE4zNFc2R3NIa05SNTU5Ul95ellTcW1ZMFF2ZHFkS0kifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImxFTVg0WVdJdzRoS0N2U053UXk4dEJvN0pvTFlCY2NxOWFiQVpyXzNleWciLCJwYXRoIjoiX2xvY2FsZXMvZGEvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjhDWjhTalJLS1pKU0FocWFBZ1ZUR0E3dnNTZ21WaUw3akRvUDZyQ0RrVEEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImZPLTRHcW5TcG1SdDBRZEVFMmNzY3lvVVpBZjRIZVZJWXVwV2hpUGthQkUiLCJwYXRoIjoiX2xvY2FsZXMvZGUvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImpOc1J5VEY1WWFaVTJyV0JjRUNXUjdhSFJqMWh1ejNPQW1OU05QR0ZfUTAifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjBxa2xFaEh6MmNCczBKdDY3dVFVWG1jZUdMSlYyLWNQeWE4a1ZWa0FUNzgiLCJwYXRoIjoiX2xvY2FsZXMvZWwvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6InR1ZkRJU2dLcExlNzhHS0tYNWFjZkkwLVcwVTdnRVd6VEZJdHN1VzhtUncifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IktVYjdGVHZja0tacGR4bVZxUEpCZVU3aG45MURJSnM4NmI2Z1lEU29Bc1EiLCJwYXRoIjoiX2xvY2FsZXMvZW4vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ik9wWUF2S01QRG1xRXRvUV95aEhWQVpVYkpHODNqVU5BNjVhUi1LajJMWkUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjhDazMwajFRazVTQlNQTXF4bXRYQzFudGNicGM0T2ZZVWc4SkE2TXA4STAiLCJwYXRoIjoiX2xvY2FsZXMvZW5fR0IvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImVPVC03YXdrdVpqemcwNWgxSTFnNzVpTHZJTXRGb1Utcm1qMEF6LU80TFEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IktDTlJxVmlUeDVKQXpKY1RMQWhtT1ZtcnJZTE81Nk9iVnBCMi1ZYUpYY1EiLCJwYXRoIjoiX2xvY2FsZXMvZXMvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImxKdjVmNktzaXBpQ2c0YkR0NmJCUDJFS0ZyQTM5QkY5UV9jWVhSdTI1OGcifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Ink2WWUweEw2QTNmSDk1c0pmdWpQNTVmdTFtWGhzeHJ5QlY2clRXR0pHRVEiLCJwYXRoIjoiX2xvY2FsZXMvZXNfNDE5L21lc3NhZ2VzLmpzb24iLCJyb290X2hhc2giOiI2aU5ac3hINjE1RGJHSDBENGM2RjI1cFNEWWdfUXhyeDBleDRvYWdNQ0hZIn0seyJjYW5vbmljYWxfanNvbl9yb290X2hhc2giOiIwdVBWZXBrdEZ6N0E1dnE5Z0hlenhNRGhiZ0dRdXFGNzFFSGRYWG5hMmFJIiwicGF0aCI6Il9sb2NhbGVzL2V0L21lc3NhZ2VzLmpzb24iLCJyb290X2hhc2giOiJ2ODF4QV9NM2xTOHd1QjY5Yk1iUXA4a0FVMHJOcHZ5Mi0tS1dEd3FOOUNnIn0seyJjYW5vbmljYWxfanNvbl9yb290X2hhc2giOiJZR1BZOWJIc1BoQXNnVDhReXp0ajV1LVQyTHB6NGhNTS1SaXZZSXRuSE9jIiwicGF0aCI6Il9sb2NhbGVzL2ZhL21lc3NhZ2VzLmpzb24iLCJyb290X2hhc2giOiJCcUhyek8tcGMzVGFucXZtR1BUQ1NDNzFhZmk1TVhqRjlHTnJmNk1uVnp3In0seyJjYW5vbmljYWxfanNvbl9yb290X2hhc2giOiJLVWI3RlR2Y2tLWnBkeG1WcVBKQmVVN2huOTFESUpzODZiNmdZRFNvQXNRIiwicGF0aCI6Il9sb2NhbGVzL2Zha2VfYmlkaS9tZXNzYWdlcy5qc29uIiwicm9vdF9oYXNoIjoiT3BZQXZLTVBEbXFFdG9RX3loSFZBWlViSkc4M2pVTkE2NWFSLUtqMkxaRSJ9LHsiY2Fub25pY2FsX2pzb25fcm9vdF9oYXNoIjoid0tQTlVDVWhuZ0laREs3WURGb0lwZktlZVRQdno1alZGLURvVzN5OVFrRSIsInBhdGgiOiJfbG9jYWxlcy9maS9tZXNzYWdlcy5qc29uIiwicm9vdF9oYXNoIjoicUJCaElDNHM1OUZmWFNRWXN5UEpCMkhYb00tdHYxYnhOajlQTEpxcnFxSSJ9LHsiY2Fub25pY2FsX2pzb25fcm9vdF9oYXNoIjoiTEY5d0ROdlNHVWJRcldpZ2NXelJaUTVMajM2YkJZM2ItbzdoY3YtWnotdyIsInBhdGgiOiJfbG9jYWxlcy9maWwvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ild4VzFrU1hhNF9acEN5UG1wemlvekpTT1djTVAtLWxGQ0RBOUZwTzU0bkUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Ii1MVEFRT2s0OG43OUxCcUFwN2R5aDNKci1VQzVwVnFwdmd5U3VyTk43OUkiLCJwYXRoIjoiX2xvY2FsZXMvZnIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ii15cHp0M2VOY3p2X19KUUtHTGlTdWo0MDRjazhyd05Pa0FQUTUzQ1Vab2cifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Ikg0QTVjbzRMcnl6a05EWU9OTnk4Ylh4N19kWDhEU1NXT3lHY0hLUkFJY0EiLCJwYXRoIjoiX2xvY2FsZXMvZ3UvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ikc3b3hxajZWQS1hakJSckZNWXNOSmllTnA1RXAzN2ZFanQyV3BjTVprRTAifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlY4ZUFTRS1iTVQxU2J4eWh0UmtBRm9KZGRsSHNRaWtYeWJYVEY5RVFnQ2MiLCJwYXRoIjoiX2xvY2FsZXMvaGUvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Il80WldNMEtVeGxUTFlWa2hDX3dHNnlMTE9pemxvMTh0cWVyckhESklDMkUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImtVbExPLWVobnhCa0JBb01fS1dSSGVHbkhpZFlsY3YxNVdPQlhPV01qdTAiLCJwYXRoIjoiX2xvY2FsZXMvaGkvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Imc1YllJbmxxT3A0T2U0Z3V5Q0FuWnBlNDV1SWxLelhDdDdCcy12eGlLTVEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Imd5MDA4RlZEOVE1ZzlXeUtDd1hRVFI0UXZJS0RFcHF4U3RkS1JyWjVZR0kiLCJwYXRoIjoiX2xvY2FsZXMvaHIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IlIxV2tETWRVdTNNSUtWNmhYNm1CTVFTQVlCYkp4Qi1TZFJXQUFJZVlMOG8ifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImpsdExDSXdUMDM3Mjd1N3piUTU0UjJERE84eFdfaTBQM0VlaGJFVU9MblEiLCJwYXRoIjoiX2xvY2FsZXMvaHUvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Il9yWlhSQllWQkMxWFVCNFlaUnByTlNTcmNndEJ4WXEzVGF1WFd1cF9TcWcifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImVVd3F5dUNiVkJZQmVRMDZqdDJhMEdqbmxHTmk0S0Rhb080VktlMEJrTkUiLCJwYXRoIjoiX2xvY2FsZXMvaWQvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ims5TVcwcTdMbzZoZ3Y1OGpLa2YwQWxUWk5abTN5RmZ3azA2Z3AzVjRrVnMifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IkxoSUJZUGdtQVFFUzNlRzY1Tm9sUEVjV2NLazdrckJxYWVab1VUbWxVMjAiLCJwYXRoIjoiX2xvY2FsZXMvaXQvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImVlNHdTWE1hRTZvZHdrT1k3MVNCd2ZjeTd1WlBGQzBNMzJfbVowQmFTVFUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlZiR090ZVQ1WEVQeFllbmFqZGtEWVV0M3JEeG1rOS1HMkw3cHdXVjBJR2siLCJwYXRoIjoiX2xvY2FsZXMvamEvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjlaNXFZeDJRTHFLS1BLN05oZ0F6ODhRajhDQklfSEp4enVteEJvWXNZYmMifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IldyTzlTVlVOdXRER0dBUnEybmpETWVFWlhmRVUzSkxLZkdIMXRqUmozcEkiLCJwYXRoIjoiX2xvY2FsZXMva24vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ik16VlpKbHhqMG5PUm15N1RyTEdVV2tzbmN5VktsbU10R2JsX1UwU2VudDQifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjV6b0lRZmpwUjJldlE0WkczaXFYNmZZUjZONzdKczRTZzQzeVliQnByYXMiLCJwYXRoIjoiX2xvY2FsZXMva28vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IkZmQnplRXFuM3RzR185WEVpcHM2ODNMOWl5WFE2R2QtM2ZlajJtY1ZWS2cifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImRLQlJnaTltMXFHMm5VeGo0ZjdWZVhsYjM5Rnk0Q2RqbWE2SXVUZ0JDcmsiLCJwYXRoIjoiX2xvY2FsZXMvbHQvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjJId3FrWDRDRUkyaDRaUURWT09PWXlwMVFQSXkzUFlqN3lZOHVWOElKTk0ifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6InV5QlZxYTd5T1gtNFNWQm80RWEtYWlpeVJSM1BFLXR5N1A5ejdldjc2SHMiLCJwYXRoIjoiX2xvY2FsZXMvbHYvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IkJZU3hQZnFqTFJHZnI1SWp0QjZOckFMRXdDT2MtWXo3UXRHeGFFaDktVGsifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImFBbjM2LW9UTWhkYnhQMGsyVTFOczZpNmJ5MW9HaldxMHp0Qk92SDROTEEiLCJwYXRoIjoiX2xvY2FsZXMvbWwvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImNnTjcwRVQ0UG92NEphNUo4bVg5NDJjeW5xME9FektWLXVtX0NYbnU0czQifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjJjTTFUbm5vdGNsM3dYSy1jNlI3cjl6d1BXYWpKM3hLYjRYUDBFOF9zd0EiLCJwYXRoIjoiX2xvY2FsZXMvbXIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImpyYlFkR0RRdGNCM0lYejNOVTRLYUdkN1h0WU5ucDUwcjZEN3ZNUnpJUlkifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImVpWjlHczVYOXVrT1dIZGdoQ0tRR2dMVll6dXljTzlHLTYwVFRUa2FRNlkiLCJwYXRoIjoiX2xvY2FsZXMvbXMvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ik9RbWZDdWRnSU1FTXJqN29nTnRka25ZX2pwMGhFUUxpZWo0elRhMTlCWjQifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImVGbWJsUDhWUk0zWEl4S1VrX0xGbFl1S0tzUmJQUjFHdU0zdTU4NFVZNjAiLCJwYXRoIjoiX2xvY2FsZXMvbmIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Im5XNHBJNUhPd3ZESUZQd2tRa193V2hER0NnT2dLVlNhWWxydlVuYTRRd2sifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IkRwWXoyeVBqbjZuNUwyOW9GS2JUbDM5QWllZEhLbjduWEl4MFpDNGRDRTgiLCJwYXRoIjoiX2xvY2FsZXMvbmwvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjJCZ1ZxMy05Njd3VWdkNDlBNjZPNldIVXdheGs2ZW5nbzFnSm5WVmVCSEEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImlHcFE1WHZRZFFEckU1MU9PT3JJZVpSdWE5X2E5c2xNVWFZUkg1R2NRdUkiLCJwYXRoIjoiX2xvY2FsZXMvcGwvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6InJ3T1J4YVFoajVZZERMS3o0SnlwWFJRY2hNdEZYRGtkem95VVJFb00tSFEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlVmZlhuR2tLbWlIenZhSTc2ejFIZWs3WGJkZE5iVHh2LTFPTDY4ZHhLYW8iLCJwYXRoIjoiX2xvY2FsZXMvcHRfQlIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IlhOTENkMHNLVWRLRjJydzNOU0JJdkJ6YS0yLW12X1gtOTdsZno4ZGYyTUUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Ii0xWHFOR0c2OVVReC1jTkdKaFJ6aGl4cFpfZUNFNmUyUGxudTZ1RkhrYmciLCJwYXRoIjoiX2xvY2FsZXMvcHRfUFQvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImQ2Q0dDVnJXeUNkRkZoQWVqbFcxNVEtMVZOMFZyZXphcWp0UUI5VGF5UHMifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjdlQUhnSGE4cEszSHl4RS16SDNOZUZ1V3hCWUQ2SUxBcTRPd05MMmdfU1UiLCJwYXRoIjoiX2xvY2FsZXMvcm8vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjZDSlVXQlJKWFFtYkVSNHVRVU4zYU5HVmR4QWFrSmE1MU9WTEgyNVFUY2cifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImhnemwyWVlxejZMZzZlSFVqUkxtM2lqTGlRMWpnRTl6QWxncENROGwyZTAiLCJwYXRoIjoiX2xvY2FsZXMvcnUvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IkJPTXBCNm5RdVNSTGpGYWVLTkhNamNOeGpOM1hGdXlsaWtFb2xYTTJ0eTQifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IkZCUS1oLTlDZ3Q2TEpVU1RXVzctXzVBcVgxTG85V0tJOURVYzhnYXFOVU0iLCJwYXRoIjoiX2xvY2FsZXMvc2svbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IkI4bUNlRUkxUUpjZG9MQ1RVM1NOdURaaGRJZU9GODJKX1Flc0hXWTV1NDQifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6InR5SFc3YUM5M2JDUDNsajlDMmY2b2JsX3k4TzE0R3lZbTJveTE3RW9pRkkiLCJwYXRoIjoiX2xvY2FsZXMvc2wvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6InVzUW5nZWd6RGcwb1owVzJDYm9RaGplMHN6cjd4TzQ3SlNRR3BKclRab0UifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjNaZjNaMjQ3TVlpYURWLVd4dmhBWDhtcUVBMUNiRUtDQ1dPTFRSdFEzd2ciLCJwYXRoIjoiX2xvY2FsZXMvc3IvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6InQxWVdBLUhzdTBuRmY1blhBS3NoVHBLNjFxRzA2Y2pqa3JfQnRKUm1qb3MifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjAtZGVlYW9HVzV3NWJNbnd4TnFSaUFKLXFxSEp4QVEyS3lwYk1RcDZfUEUiLCJwYXRoIjoiX2xvY2FsZXMvc3YvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImdJcURpNEZuVGJRLUNocDNJYnliYVVvVWxnY0pTakJQWnkxUEFxenRYblkifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlY1RjFob18wRkZUckQzNDlKUy1jQ1Fua1NZcG44OV9oVzZSQVdXMmFqVG8iLCJwYXRoIjoiX2xvY2FsZXMvc3cvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6InBLMlhaOFhrNTljZ2xxeHFaSklXVk9EYThvLU5ESGxrbXZyU2puRzQ1bEEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImZzVHdRT3hPV05ZczdLVkN0RV9ILTJsNmJneU9pXy1BcDdFVXZEOTBCeWMiLCJwYXRoIjoiX2xvY2FsZXMvdGEvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ijh0WkZSZUN5cDRmMmxFb3VOcEcwX0poekkzVlRYcmtQVktWTTM0SmFnbzQifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlplcjZxYlh0cFhtbElEX3Z5QlVXc3ZfbUUzQnUzTkduQ1k4Rmg2SW9QZDAiLCJwYXRoIjoiX2xvY2FsZXMvdGUvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjZMTFFhWkY0WWJYQjZvbXR6c3RkcXZVT1dxZ1hVZ0dTRTlENU9faFdVUlUifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjR1SFZNSk55M1JDMHJDUTBwQUlaSlFmbzktZEIyT2JhWnBybWJRdkFyMGciLCJwYXRoIjoiX2xvY2FsZXMvdGgvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IlVzczFYVDJSenkzMVhMcXFxT0pjdDAxdWstX2J2Y0VLSXNhM2VyX29yN3cifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Ill3TVdpUGNienZXVmVrRE5uOWVsdjdSWEttQ25GYTFBZ2ZMbjFYd3JGelkiLCJwYXRoIjoiX2xvY2FsZXMvdHIvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IlVya0cxSUJnMUNkT0RSOUNfQ2wycURZZU1pV1ZWQzdhRGxOWm1Mb3pJOHMifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IlFZd0FHZExJbXVBTUVHUnNHeDFMT0ZZTHNLU2dwbGdPZ0RIUDZjSkdhcnMiLCJwYXRoIjoiX2xvY2FsZXMvdWsvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6ImFyTEhCUWtPRXhzVmtrc2Y1YVVSQjZUMUVYOFVwaDBva1JNUGZPQjJxd1UifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6Inc3SV9YTldXMnZjazQtVUVFNHR2a0NBMl9VVmdUTTJSY1p3SlR5aHBKZVEiLCJwYXRoIjoiX2xvY2FsZXMvdmkvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ikc1dWxNS1lPVWtNQVZPbk9MSWhMdDVhYVRjbERNUnhzbGRCN0hJbmVZMkEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjBMOUh0Q3NSaVhMR29VX19vT0RLRUtHZk41cW5ERG05WUVXRkRGUFpFV0EiLCJwYXRoIjoiX2xvY2FsZXMvemhfQ04vbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6Ii1QV1hCenNKVUFtdXhXdGFkcEVFYm95X2ZkOUJDeDl4Um5pMWtkYTVXWmMifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImJTdEpzYVJod09iWmxPQU1jNU52aVNDeDVpdUcxbXpIODdBSkhBVTZzRDgiLCJwYXRoIjoiX2xvY2FsZXMvemhfVFcvbWVzc2FnZXMuanNvbiIsInJvb3RfaGFzaCI6IjhMVDNoR2V0SU5VMG16R2k0SUZWRk9LT2gxVkdNS0VEUFp2OUVPT1habzgifSx7InBhdGgiOiJhY3RpdmF0aW9uX2hhbmRsZXIuanMiLCJyb290X2hhc2giOiJ5OGNBanUtTUsyejdSRUlWM2tiVk5jYm1rOEpMcDI1emI1R1lvXzRyNi1FIn0seyJwYXRoIjoiYWN0aXZpdHkuanMiLCJyb290X2hhc2giOiJwOWhpelRLYlloUlpNTlQtTzljY1BDR3RvQjZGdXF6WkU2RFlMZHBFbi1ZIn0seyJwYXRoIjoiYXBwX2xhdW5jaGVyLmpzIiwicm9vdF9oYXNoIjoiU3hkLXdaOEdMcXlrSUdDQWhXRnM3akhJSlM3bU9RZVB4bkkzSDZLbEtfQSJ9LHsicGF0aCI6ImFwcGxpY2F0aW9uLmpzIiwicm9vdF9oYXNoIjoiZVBDOFp2Z21CREUyVXBuN21qY3ZUd3hESFQ4bFh0REh5Qk5fdGxxNlBkVSJ9LHsicGF0aCI6ImFwcHNfdjJfbWlncmF0aW9uLmpzIiwicm9vdF9oYXNoIjoiTUpDQmxtQ09LYWh6T3AzV2t4cFVBZ0dzU0VtUlExNFp0aGppZnlvd1dZRSJ9LHsicGF0aCI6ImF1dGhfaW5pdC5qcyIsInJvb3RfaGFzaCI6ImJ3b3Y5YzVrMlpESkVENlBSUTJZMzNqTld0Z0Q5ejNnaDBRMjJkWkZCbjQifSx7InBhdGgiOiJiYWNrZ3JvdW5kLmh0bWwiLCJyb290X2hhc2giOiJCWnh1alZJSERZUDFiT0k4VG1oanF3R2NIV0tSOHRaeGEwYUxZamV6aHRJIn0seyJwYXRoIjoiYmFja2dyb3VuZC5qcyIsInJvb3RfaGFzaCI6IjhBNmdaXzRJSzBUeG9IcTFqY1hybnh0eTMtLXBxTGQwN1Y3eVlwdi00YTAifSx7InBhdGgiOiJiYXNlLmpzIiwicm9vdF9oYXNoIjoiV2VSanNPRzROeTdvRDRESE5qcG5MdW92YVZDc0M5QkFOY2poYzFZdGhzRSJ9LHsicGF0aCI6ImJ1bXBfc2Nyb2xsZXIuanMiLCJyb290X2hhc2giOiJRVmdJVnR6WG9ZQ3BhSXJpNHQ1WkpraVZsU0hsclRjcGpGdHlRQWY0YlZrIn0seyJwYXRoIjoiYnV0dGVyX2Jhci5jc3MiLCJyb290X2hhc2giOiJjajl4ckI5RGNwTnAwRUFyZkhmZ1BYVU1LUXJBa0RzN1Zndm1xcGYtQkJrIn0seyJwYXRoIjoiYnV0dGVyX2Jhci5qcyIsInJvb3RfaGFzaCI6Ik16eE02NGRzR1RWaHNWOXZrYkZXZ3ItTVNhb2xkajRGVE1jR2xmZG1mRm8ifSx7InBhdGgiOiJjYWxsc3RhY2suanMiLCJyb290X2hhc2giOiJvQmdzX3BqUzNjX0pIaExGTExDc3ZTaGJOclgtVHBGUkFZTkllVG1JQk9VIn0seyJwYXRoIjoiY2hyb21vdGluZzEyOC53ZWJwIiwicm9vdF9oYXNoIjoiRmNyb0ZKLXpjNGVnV1BmdDdkbVM2SFFGTFJKOW5WTzNicV9kaGpLTk9ZWSJ9LHsicGF0aCI6ImNocm9tb3RpbmcxNi53ZWJwIiwicm9vdF9oYXNoIjoiOERaUzBoVTFCYWdwMkdmR1NJUVF6VHljRUpsU2VwbWFadlZ0N1ZtSU1SRSJ9LHsicGF0aCI6ImNocm9tb3Rpbmc0OC53ZWJwIiwicm9vdF9oYXNoIjoiRlcybVVva25PbHJzNXRMcUNRQWNfM2VXSUQ1VWE3YWM4Wkd6RTNZODhMdyJ9LHsicGF0aCI6ImNocm9tb3RpbmdfZXZlbnQuanMiLCJyb290X2hhc2giOiIxUUp2Y3pBUkRnVjNBMHhNLUtVY0lDSnVPQzZXdkxfU3ZLVlc0WlllaFhBIn0seyJwYXRoIjoiY2xpZW50X3BsdWdpbi5qcyIsInJvb3RfaGFzaCI6ImZLelVROVRvUjZndWY2Skptc0YyYXlkdFFEYjg1UjE3aS1xRnRMZ2VyblEifSx7InBhdGgiOiJjbGllbnRfcGx1Z2luX2hvc3RfZGVza3RvcF9pbXBsLmpzIiwicm9vdF9oYXNoIjoiRzY5c0hnTGh6VXhhRkFfWEY0Z3pfcUNZOXdrN3BDTDFHMGF3ZHRHQmJCdyJ9LHsicGF0aCI6ImNsaWVudF9wbHVnaW5faW1wbC5qcyIsInJvb3RfaGFzaCI6IksyWVdkWTliTVk3Nzg0a2tNMUcydlVzNW9ORldVQldtUmRTWW45UVcxdE0ifSx7InBhdGgiOiJjbGllbnRfc2Vzc2lvbi5qcyIsInJvb3RfaGFzaCI6ImVRb05KdDEwQTY5WW9QWXJVbTNXX2F3TkpNNzZMSjVpOVdDM3phZVNtOFkifSx7InBhdGgiOiJjbGllbnRfc2Vzc2lvbl9mYWN0b3J5LmpzIiwicm9vdF9oYXNoIjoicVdOZGQxc0tKT2FwTTFnN1FxdV93aE1oZ0lSeW9PeFpxTDRJVFF0ZUlmbyJ9LHsicGF0aCI6ImNsaXBib2FyZC5qcyIsInJvb3RfaGFzaCI6ImFGaTBnVjVoVEtjOWQyNkU3MkZKODBGazFIM1lxTTFGYkRsQWV1dUJrMkUifSx7InBhdGgiOiJjb21iaW5lZF9ob3N0X2xpc3RfYXBpLmpzIiwicm9vdF9oYXNoIjoiR2dRVzZFX0tGYTE2UEhHdmQwQi1ZTHhkcFlmTjFRcGh0MmVrajYzaS1pcyJ9LHsicGF0aCI6ImNvbm5lY3RlZF92aWV3LmpzIiwicm9vdF9oYXNoIjoidTI4RkJ0cWZlNWdNdFV0OUI3WFB0OEhPaXRGQk5CR01NNmN4SGo5YjU5ZyJ9LHsicGF0aCI6ImNvbm5lY3Rpb25fZHJvcHBlZF9kaWFsb2cuanMiLCJyb290X2hhc2giOiJSeW5oTTcwMV9EQWt5T1ZNRElfN1hzZFRBS0hzZzVlTmdRRGdNVzAxWWhJIn0seyJwYXRoIjoiY29ubmVjdGlvbl9pbmZvLmpzIiwicm9vdF9oYXNoIjoiZWwxcERDM3pTcGJXM1ZKd0NxdWZKdmtZVmRSM0Voa3pVQ0tQSkhQTnhTRSJ9LHsicGF0aCI6ImNvbm5lY3Rpb25fc3RhdHMuY3NzIiwicm9vdF9oYXNoIjoiVkptdkt3bVRXSmJCY0tpY3JtRnhNZjlTZjNGWnpNbGFZSkRtS1dhQmZmOCJ9LHsicGF0aCI6ImNvbm5lY3Rpb25fc3RhdHMuanMiLCJyb290X2hhc2giOiJ1U1ZyeEJwaG5QOUNEaGcyREZ6UTRycFRiV2VLVmZjOUhPdmNxN1ZHTXFVIn0seyJwYXRoIjoiY29uc29sZV93cmFwcGVyLmpzIiwicm9vdF9oYXNoIjoiNWNGNDZmeXpUWE92dGxPbnF1SEJ2dmtET1BpTHNnNVRyak93WHV0SnNmdyJ9LHsicGF0aCI6ImNyZF9hdXRoX2RpYWxvZy5qcyIsInJvb3RfaGFzaCI6InVsU3A2XzlnMWpmWFhCYW1wSlVzNWUtdGhlbks4MXRzc3FSNlFNdkxnMmMifSx7InBhdGgiOiJjcmRfZXZlbnRfaGFuZGxlcnMuanMiLCJyb290X2hhc2giOiI0T1B0eC10YXBBZGI5cWZvQjRyZXFTRUtQUUlnQVpOQTQwOTRudzVuV0pzIn0seyJwYXRoIjoiY3JkX2V4cGVyaW1lbnRhbC5qcyIsInJvb3RfaGFzaCI6IldIalVPODN5UFZYS050dFp4RHlNWUlVMUNuMHdOWWIzOURvTzhNUVQ1c00ifSx7InBhdGgiOiJjcmRfbWFpbi5jc3MiLCJyb290X2hhc2giOiJJWlFTSy1JZjdxb1FxWGxxWUJhc1BsbEIwcGxjdm5IdlFxelBPcXNVNkZZIn0seyJwYXRoIjoiY3JkX21haW4uanMiLCJyb290X2hhc2giOiItMjJlTko3VFhiRm1ZOE5VTHIzYzRGbElqb19CYV9BdVlwQW1nM1BFRjBzIn0seyJwYXRoIjoiY3JlZGVudGlhbHNfcHJvdmlkZXIuanMiLCJyb290X2hhc2giOiJMQlVhM19vUjJMSm8wX25zSHZQdFp0MlBUelBoX1gwVmM1cWwwQjc3MXA0In0seyJwYXRoIjoiY3JlZGl0cy5odG1sIiwicm9vdF9oYXNoIjoiaFVUNFBjZWpUc3VCU3NadGNQbWJqQ3htTm5uZGhBVHlDM0xKRTA2M1JBayJ9LHsicGF0aCI6ImNyZWRpdHNfY3NzLmNzcyIsInJvb3RfaGFzaCI6Imd6d0xlb3RCamVwbkpKTnBVSTVUMVVuN01WbU40RWtiZk5yRFdiaFNnTVEifSx7InBhdGgiOiJjcmVkaXRzX2pzLmpzIiwicm9vdF9oYXNoIjoiRHBKQnFNY01NSTNKTlNiWDR2Y1NlZnlVZzRHdVhOSjl4b3FKVXpEeE5GcyJ9LHsicGF0aCI6ImNzX29hdXRoMl90cmFtcG9saW5lLmpzIiwicm9vdF9oYXNoIjoidHp5cnZPM2ozQTlRaXNORHFaQlFEV1JRazE0Mjdkd0E0SkxBaHhGVU1EcyJ9LHsicGF0aCI6ImNzX3RoaXJkX3BhcnR5X2F1dGhfdHJhbXBvbGluZS5qcyIsInJvb3RfaGFzaCI6IlFsMmZrWC1hSTR6aklZRGJCM21vY3g1M0Z3Q0E0SXd0QUtJd21aRmZneEkifSx7InBhdGgiOiJkZXNrdG9wX2Nvbm5lY3RlZF92aWV3LmpzIiwicm9vdF9oYXNoIjoiTUNfY2tROXR2Sm1qZ2xNQTljY0RRc1F1WHRSclU1SFByWGtjNUNfRmY4NCJ9LHsicGF0aCI6ImRlc2t0b3BfcmVtb3RpbmcuanMiLCJyb290X2hhc2giOiJqS25vN1dGaWliU3AzT1Q2ang2QmN5UUVKd2JsdU1VZEE1RHRIdkk4Z1NJIn0seyJwYXRoIjoiZGVza3RvcF9yZW1vdGluZ19hY3Rpdml0eS5qcyIsInJvb3RfaGFzaCI6IlVSb1laR1BpbDBaNUx2T3A2d2VWd29NdGZ0R3hyRGZiTnFpVUFVci1sVG8ifSx7InBhdGgiOiJkZXNrdG9wX3ZpZXdwb3J0LmpzIiwicm9vdF9oYXNoIjoiUVBFa3pBSjFZZ3g4YTdKZTRPNWxSMmxhNEJCdkZ0N243bUNsY21YTVRlWSJ9LHsicGF0aCI6ImRpc2Nsb3N1cmVfYXJyb3dfZG93bi53ZWJwIiwicm9vdF9oYXNoIjoiOGl5Q1Q4djNuQU9FQkVRM2hMY3MxTUFhWF9rc2t2UFNUazdZNGp0UXFoOCJ9LHsicGF0aCI6ImRpc2Nsb3N1cmVfYXJyb3dfcmlnaHQud2VicCIsInJvb3RfaGFzaCI6ImNVUE94OXNrODhGTGdqZVNCdzFDTEw5aW1fTURoLWRtNlppZVE4Q0JxbE0ifSx7InBhdGgiOiJkbnNfYmxhY2tob2xlX2NoZWNrZXIuanMiLCJyb290X2hhc2giOiJZamZWaUxsTlgtMk5oSEJJVEIzeXVYaDhxVU1VZHYxWWkwWVNQYnNQTjhnIn0seyJwYXRoIjoiZHJhZy53ZWJwIiwicm9vdF9oYXNoIjoiLVZ1dmNYMWkzMEJSX2ROSDBWZzRUUlh1dE1PUnA1dHNrUVNZRW82ZjRNUSJ9LHsicGF0aCI6ImVycm9yLmpzIiwicm9vdF9oYXNoIjoiMm1yVnpOZTFmVldoV1pYSXNVUld3RWRIQnA1Y0tKMlZtRFM0ZVR1ZUhrVSJ9LHsicGF0aCI6ImV2ZW50X2hhbmRsZXJzLmpzIiwicm9vdF9oYXNoIjoiVmNNNHpTXzdhQXZQYkd3UFR6Q3Q1QVpteU1EcFE5cGpSTVdMeWdLUnRXdyJ9LHsicGF0aCI6ImV4cGVyaW1lbnRzLmpzIiwicm9vdF9oYXNoIjoiaEwyY0VSYW04OWFzS2ZCN2VjNThyZHRXbXZUc1Y2cmZfV21LWmV0UVJ2WSJ9LHsicGF0aCI6ImZhbGxiYWNrX3NpZ25hbF9zdHJhdGVneS5qcyIsInJvb3RfaGFzaCI6Im5EcE1LVnU1VEhjdC1hRDhKalVteEZvQkZqMFBIX1p4Q2pSdXVYZzNucFEifSx7InBhdGgiOiJmZWVkYmFjay5qcyIsInJvb3RfaGFzaCI6IjhMOFZjSlFNdTFIbTR2V3Y4M3J4X2ZVQ3h0cnV1emRnNEJoLTFkUEVXcEUifSx7InBhdGgiOiJmb3JtYXRfaXEuanMiLCJyb290X2hhc2giOiJCaFdUWUNJbDFoVzQzMHAwb0RuUWJ1ckpNZy03TEgwdl9NSEpIWUhudzBJIn0seyJwYXRoIjoiZnVsbHNjcmVlbi5qcyIsInJvb3RfaGFzaCI6Ikd0U1U2UExmc1NTUk5CMFVqVzMybjVtT2I5UXBfRExEWVBkUnVGRzBYNzgifSx7InBhdGgiOiJmdWxsc2NyZWVuX3YxLmpzIiwicm9vdF9oYXNoIjoianhTOUsxV3l0amUyblY3amwxbC1ycEZHWmowbExVTVo0ZnhlUVpnZ1dwYyJ9LHsicGF0aCI6ImZ1bGxzY3JlZW5fdjIuanMiLCJyb290X2hhc2giOiJiYW9QdGtmZVl5dTdDdlhoYUpYNExXeThQcG94R1RvMTltQkgxdXJnR1BjIn0seyJwYXRoIjoiZ2NkX2NsaWVudC5qcyIsInJvb3RfaGFzaCI6IkhSQk84endyTndpNHpiNE9CeUlzVHlvWU5mY3lrRk9lTTE5RmdRTFJCMlUifSx7InBhdGgiOiJnY2RfaG9zdF9saXN0X2FwaS5qcyIsInJvb3RfaGFzaCI6Ikh4dVVRaVR6VVZRRU8xUVpuWTRpa0RwTERLQUVtcy1JR2c4VDdvRkZNSXMifSx7InBhdGgiOiJnbnViYnlfYXV0aF9oYW5kbGVyLmpzIiwicm9vdF9oYXNoIjoiODkybEVnazRId1lKTjRfclZZSlBhU1dBbDRFRl9mUHNyWGt2ajQ3SjltdyJ9LHsicGF0aCI6Imhvc3QuanMiLCJyb290X2hhc2giOiJPNEVFYWc3UXFwTmk3Y3Z4YXNwUTJ0MEJmMXp0S2FuUkxzY2lGX19EeW1jIn0seyJwYXRoIjoiaG9zdF9jb250cm9sbGVyLmpzIiwicm9vdF9oYXNoIjoiZm5kbFB4dEh6Q2daald3SG1ScTVHNE5nT3BRMEdJSURrSy1sejM4aDFzayJ9LHsicGF0aCI6Imhvc3RfZGFlbW9uX2ZhY2FkZS5qcyIsInJvb3RfaGFzaCI6IjRhWjhwbE5vaUdRMmJOVU04cl81M180LUFKWkhvM3pyWWh2UUh1eTJFMUkifSx7InBhdGgiOiJob3N0X2Rlc2t0b3AuanMiLCJyb290X2hhc2giOiJSXzVIbml1dDNaZlc0aGlxbEN0bU5EOFQwREdWTnRFWm9YYW1ESXFtcXgwIn0seyJwYXRoIjoiaG9zdF9pbnN0YWxsX2RpYWxvZy5qcyIsInJvb3RfaGFzaCI6ImRKdGczVHBtdFVvV3BHT1JYMGpMc0xXWC1wZ0hVa29tMmF4cHpaMmpUWWsifSx7InBhdGgiOiJob3N0X2luc3RhbGxlci5qcyIsInJvb3RfaGFzaCI6IlZ2NVVYVTF6d0pGcEN2ZFN1MWhTVlptU3pSM1BfLWhSSDVWTjVyVmJsSjgifSx7InBhdGgiOiJob3N0X2xpc3QuanMiLCJyb290X2hhc2giOiIwZXdWSUQwOVhDc0JUajlndDBEY2ZIVXhqU3RsUDVtUTJTQ2paaVk0ZjRVIn0seyJwYXRoIjoiaG9zdF9saXN0X2FwaS5qcyIsInJvb3RfaGFzaCI6IkxlMEZwaEZkeXpPYjBVdlRHckhHR05PZ2VYLXFFM1hDQjZBY2JnaGNsWVkifSx7InBhdGgiOiJob3N0X29wdGlvbnMuanMiLCJyb290X2hhc2giOiJHSXA2Rml0dldlcElxNjhqZWtNbXpYRmhGZm5lUDJSTGoyNHcxNjA4Q2FRIn0seyJwYXRoIjoiaG9zdF9zY3JlZW4uanMiLCJyb290X2hhc2giOiI5XzR2SUQxU1hHYVJwZ09yWjVuOW9IUjllVU1idkRraGgxQkYtMGRYNXo4In0seyJwYXRoIjoiaG9zdF9zZXNzaW9uLmpzIiwicm9vdF9oYXNoIjoiMVZvd2M0Qm9ja0ZYY1d3N3MtcnY0WmhCWUtFdmJCSDMtMm1hWVMwNVF0cyJ9LHsicGF0aCI6Imhvc3Rfc2V0dXBfZGlhbG9nLmpzIiwicm9vdF9oYXNoIjoiTV9EWnFtRnM0Y1pjTnlhUVpOYjdLQlJodnlfRTB5c3pFbVhyX3V3RWpuRSJ9LHsicGF0aCI6Imhvc3Rfc2V0dXBfaW5zdHJ1Y3Rpb25zLndlYnAiLCJyb290X2hhc2giOiItdkw0ZXhqV0FpZ29BSkRreVFkTHkwNlM0TEZpb3hSRjh3cl9xSGF0NF9nIn0seyJwYXRoIjoiaG9zdF90YWJsZV9lbnRyeS5qcyIsInJvb3RfaGFzaCI6IllSZnRxTmFodW53aGl0U25Fcl9DOHNObDhkSjBGUlp0Nko5X0s4akVwZzAifSx7InBhdGgiOiJpY29uX2Nsb3NlLndlYnAiLCJyb290X2hhc2giOiJKTEg3ODZZaXVZMmx2ZnpQZ0ZkaUpqZkgwcUN1QjBPTktMbUZlaTJCNGY0In0seyJwYXRoIjoiaWNvbl9jcm9zcy53ZWJwIiwicm9vdF9oYXNoIjoiNWtpUGhMZTA1V2pBSEFFd2VfQURIUjNfMUx6ZExoVTlETXVnVERpNjdmRSJ9LHsicGF0aCI6Imljb25fZGlzY29ubmVjdC53ZWJwIiwicm9vdF9oYXNoIjoiQnJhaE5UcHRITlprRmVaN0Y4c3V6UVpJcVpXc2p1TVhMc1JNOUhzYVNCMCJ9LHsicGF0aCI6Imljb25fZnVsbHNjcmVlbi53ZWJwIiwicm9vdF9oYXNoIjoiNkxmdjhlZ0lMTWNJNll4U3d5S1VHMURSaEFzdnF0WTh4cHpQT2FVSnhDOCJ9LHsicGF0aCI6Imljb25faG9zdC53ZWJwIiwicm9vdF9oYXNoIjoiclBzaGFnY010YzJXSHhvdjgza3Z6NkJ5ck9uT1hBVldqWlYxR3hMbm9vOCJ9LHsicGF0aCI6Imljb25fbWF4aW1pemVfcmVzdG9yZS53ZWJwIiwicm9vdF9oYXNoIjoiUUx4SllSakpfQUJiblZMeHBuOVdDRjJFV2FOSmZQLXBjeDVwOHNwUDVqOCJ9LHsicGF0aCI6Imljb25fbWluaW1pemUud2VicCIsInJvb3RfaGFzaCI6IjVKZWhQd083YmxHa280VG5YZXc3cmY3ZXVnTmtFZVRPT1pUTzBpZnVwZmcifSx7InBhdGgiOiJpY29uX29wdGlvbnMud2VicCIsInJvb3RfaGFzaCI6Ik05dm5nczlaZzZoMTBPYzR5SjAwcFh0a1R5a2ZBRjBOYmg0d2lfZm9Hd3cifSx7InBhdGgiOiJpY29uX3BlbmNpbC53ZWJwIiwicm9vdF9oYXNoIjoiM0hGLXRHTnNnZWVYZkpuOEFSZjA3dmI4ZFNQMDVWR05tRW8tQlpCWHVtZyJ9LHsicGF0aCI6Imljb25fd2FybmluZy53ZWJwIiwicm9vdF9oYXNoIjoiYzRtUlNHeHdiOUdkbFRqempWTWI0anc3eks2UHZ3ZlhtUVRJN0EwSldVNCJ9LHsicGF0aCI6ImlkZW50aXR5LmpzIiwicm9vdF9oYXNoIjoiZ01fb1RPRGdJSnZjZGNRQWJSRTJmNUszTlR2TlNxbzA5Q2x5cHUxYWc1cyJ9LHsicGF0aCI6ImluZm9ncmFwaGljX215X2NvbXB1dGVycy53ZWJwIiwicm9vdF9oYXNoIjoiMWNUVjdkak5zUXFLeFVEbWJhaVBQSUx2T1ZqR2tEeEd6c0FMeFB4WW9yZyJ9LHsicGF0aCI6ImluZm9ncmFwaGljX3JlbW90ZV9hc3Npc3RhbmNlLndlYnAiLCJyb290X2hhc2giOiJtRFBWeXhzMFJKckpTaHRIVlFPRTI5TTBfdk1MR3h1eEFUSmliSnU2eXZNIn0seyJwYXRoIjoiaXBjLmpzIiwicm9vdF9oYXNoIjoiYmR0WHhWRF9reUF3dVBDZVBJUFBTVFlycWRISEpMYkYyZUlRWnpOLS1SQSJ9LHsicGF0aCI6Iml0Mm1lX2FjdGl2aXR5LmpzIiwicm9vdF9oYXNoIjoiMW5hekY3N1VDLWlmVUhvR1pCM05qME13b09LSVcwc0ZLMnRldXRibDNuTSJ9LHsicGF0aCI6Iml0Mm1lX2hvc3RfZmFjYWRlLmpzIiwicm9vdF9oYXNoIjoiWmstT2RDQVBNNWxEYnlFRGNHOFI3TTBpQ21qSDJ1dFBwS1lTcmZad0J1SSJ9LHsicGF0aCI6ImwxMG4uanMiLCJyb290X2hhc2giOiJ4Ukk3cWJzOEJ0WWN4YzcteUVITGhibkhzNjJOS2dOOTN2akNvZDFUeXVZIn0seyJwYXRoIjoibGVnYWN5X2hvc3RfbGlzdF9hcGkuanMiLCJyb290X2hhc2giOiJXNTA5UUtNVTNHbVhiamhuNTgtSHpjWmJxQW1KVGZ1NXBKSFBTdnh2TmpJIn0seyJwYXRoIjoibG9jYWxfaG9zdF9zZWN0aW9uLmpzIiwicm9vdF9oYXNoIjoiZUpFZVFTa3ZPcmZsOWNJeHNRQktJS1dmcnhvMGY2T20yeVRYdVhIVmtfbyJ9LHsicGF0aCI6Im1haW4uY3NzIiwicm9vdF9oYXNoIjoiSkZJTjB0TkN0WFhzenJlZm54ZzVPTWIwVmhzd2wzLUxHWWlUXzBLS09MNCJ9LHsicGF0aCI6Im1haW4uaHRtbCIsInJvb3RfaGFzaCI6InZEOVZaZTBHVUFpYUsteTJIWEhCSHltWlVhRThmd1BSeXNIMWM2cktrMlEifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6ImJCSEY4ZG42c2ZYaEFsM2VHeUNpM0dzcldmdTFKN243NU16dWhlckdhVGsiLCJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6Im9sOUVzTGdHYjc1aUFXc2g1aE5nZXV4anIzZ1l4d0tXYlFtNi1EWFBnR00ifSx7InBhdGgiOiJtZTJtZV9hY3Rpdml0eS5qcyIsInJvb3RfaGFzaCI6IlE5SlRkeDZ0S0ZsREVZM1JiRDNwelFBTTNfMk5LZF83YUc0WkIydUxqNHMifSx7InBhdGgiOiJtZW51X2J1dHRvbi5jc3MiLCJyb290X2hhc2giOiJabWlHNldVM19fWVNkei1EbFE5ejl3RW5FV3ZkcTduUDNfQlpUd0lCUWY4In0seyJwYXRoIjoibWVudV9idXR0b24uanMiLCJyb290X2hhc2giOiJrVXlPVnpuTEUtSzczZGg0WldzcElmaWNzMzRGcS12OEswbWNCUVlBeUpVIn0seyJwYXRoIjoibWVzc2FnZV93aW5kb3cuY3NzIiwicm9vdF9oYXNoIjoiUTdMdDBCN2Vwc1FJVXlJdjkwMWFieXUzNmlkVkRWbDdKSFdVMzIxcnJ3byJ9LHsicGF0aCI6Im1lc3NhZ2Vfd2luZG93Lmh0bWwiLCJyb290X2hhc2giOiJXd1dQSjZId1dmcThPRlNSSmlCQXhqQzJITWExSlFTRnQzdHVkYktSZVNZIn0seyJwYXRoIjoibWVzc2FnZV93aW5kb3cuanMiLCJyb290X2hhc2giOiJBNXdIZGE2b3hxYUZ6V2JrYVBid2ljOHN2SHpHdFNFQ3phNzg0ZkxVeDRVIn0seyJwYXRoIjoibW9kYWxfZGlhbG9ncy5qcyIsInJvb3RfaGFzaCI6ImRtT1NoVXBCdFlGb2E5SUhrcDF5c3pybkZKemluemc0Wk5ma2M1a2ZsQW8ifSx7InBhdGgiOiJuYXRpdmVfbWVzc2FnZV9ob3N0X2xvZ19tZXNzYWdlX2hhbmRsZXIuanMiLCJyb290X2hhc2giOiJZMUptOXFFeWF5SzYzWlh1VXhzbWYtSW5OTWt2c1RNQmFnaUIwNXBZTFBjIn0seyJwYXRoIjoibmV0d29ya19jb25uZWN0aXZpdHlfZGV0ZWN0b3IuanMiLCJyb290X2hhc2giOiJWZUtUMU81akZXVlBGd2hOeEpPaWdqMGVicVFhUjU3X09MOFhQTUVZd1o0In0seyJwYXRoIjoib2F1dGgyLmpzIiwicm9vdF9oYXNoIjoiX3VjUlBtakFOVlQ0Si1ZeGJNTk9sejhwOW5jWThuUC1SVXlyb0pMZG9VZyJ9LHsicGF0aCI6Im9hdXRoMl9hcGkuanMiLCJyb290X2hhc2giOiJPMU43VnFyTTVDcXBzWVNoOXg3dmgwaG5KdzJTQkJvVWJmRkJWbEJJaVE0In0seyJwYXRoIjoib2F1dGgyX2FwaV9pbXBsLmpzIiwicm9vdF9oYXNoIjoiVktVY0EwVGluZG1hcG9BTF9nRTdJLWEwNi00SGNWN2NaR1RlRjlDcXZPVSJ9LHsicGF0aCI6Im9wZW5fc2Fucy5jc3MiLCJyb290X2hhc2giOiI0Q0I4Mm1SOUtGTGVxcW8tRXBsN2F2TWl6ZTE1dDRuMlFHZU9LZWYtR3dVIn0seyJwYXRoIjoib3Blbl9zYW5zLndvZmYiLCJyb290X2hhc2giOiIyOE5ZcXBvcHBVTGh4WUJraHl5YmR4dVJ2VFE3OTBnTHRjZVRBeDNiVGdJIn0seyJwYXRoIjoib3B0aW9uc19tZW51LmpzIiwicm9vdF9oYXNoIjoiQVVwMkFOSmM3T3dXNjBVblM0MG5TTnZzYXdVYWJ0cTFGcHlwVmVFOHZiQSJ9LHsicGF0aCI6InBhaXJlZF9jbGllbnRfbWFuYWdlci5qcyIsInJvb3RfaGFzaCI6IktacUEtX29aRkoxcnZzTnM2ekp4V3BfRnhCT19PQWlOUUdQQVVDMkxUbjgifSx7InBhdGgiOiJwbGF0Zm9ybS5qcyIsInJvb3RfaGFzaCI6ImJRVDV6T1pXdHBhYWVoS1FRTzNuZmF5NGpMdHlXcUsyYUpEY1NYV3hpYTgifSx7InBhdGgiOiJwbHVnaW5fc2V0dGluZ3MuanMiLCJyb290X2hhc2giOiI5cFR4SHVvVzUyMGxSWWlYWVY2WnZ1NEVGMGRQRGViZVRrc09VYWpKOUQwIn0seyJwYXRoIjoicGx1cy53ZWJwIiwicm9vdF9oYXNoIjoiMnRhYlhCakk1MmFzbzhkdmt4eFloalJWZEtWMUxZNVhReW1ocjloRnE0ayJ9LHsicGF0aCI6InByb3RvY29sX2V4dGVuc2lvbi5qcyIsInJvb3RfaGFzaCI6Il9paTFCYl9HQXQyOFVZTmV5S1JuTm1acDNrY21qLVgtMzJ2Ym0wMUtOUXcifSx7InBhdGgiOiJwcm90b2NvbF9leHRlbnNpb25fbWFuYWdlci5qcyIsInJvb3RfaGFzaCI6IkhyVDdnNjFYaWhRY3A4Q0lnalc2eTdSOHBFQW1lNGNHS3p1X1NoRS05LVUifSx7InBhdGgiOiJwdWJsaWNfc2Vzc2lvbi5jc3MiLCJyb290X2hhc2giOiI0NWFFaFFCRjY2SUVBZmJ4LUpqMHQxVjJuX2VjWmVYX1Mwa3RZUVd1c0d3In0seyJwYXRoIjoicHVibGljX3Nlc3Npb24uaHRtbCIsInJvb3RfaGFzaCI6IlducjFiVERQLTdoSXlmMmFMTXotTTNSSUxWdHMyMURaQjE3YkVjMlBOeWsifSx7InBhdGgiOiJwdWJsaWNfc2Vzc2lvbl9tYWluLmpzIiwicm9vdF9oYXNoIjoiSEZybGpPdmJwQ1lKU3o0NGZsWmRGa01YSTFFQVVmUTlPS2ZkUzI3eDBDayJ9LHsicGF0aCI6InJlbG9hZC53ZWJwIiwicm9vdF9oYXNoIjoiZVRzZGZTdEptVGZFQWlUUW9QSDh1QnRZYTVQU1JCZHViV2hFbWltYlVBRSJ9LHsicGF0aCI6InJlbW90aW5nX2NsaWVudF9wbHVnaW5fbmV3bGliLnBleGUiLCJyb290X2hhc2giOiJ4MG92ZTJjRTF0VG9QakNLOW9zNTd3TXBHVXN4RXZwWXEtdEZpclV4WWlvIn0seyJwYXRoIjoicmVtb3RpbmdfY2xpZW50X3BuYWNsLm5tZiIsInJvb3RfaGFzaCI6InprU0VJd19zUklwQjh3R3VHUHJFR0RzX3BVR0tCY1I5Qno3bUF4RE5qRm8ifSx7InBhdGgiOiJzY2FsZS10by1maXQud2VicCIsInJvb3RfaGFzaCI6ImdYSkt6am00NjN0RnA2VTVZYzJKWU1pSURTdENDbUJGZGNrUzhoYUgtUjgifSx7InBhdGgiOiJzZXNzaW9uX2xvZ2dlci5qcyIsInJvb3RfaGFzaCI6ImtoX0FSb3A2R0FSYlhWMll3VHEtY3dicGkxMVFKcmY4NTd0U1o1bzl6R1UifSx7InBhdGgiOiJzaWduYWxfc3RyYXRlZ3kuanMiLCJyb290X2hhc2giOiJ2R080dmNLT3YtdFc5aXp2N2pCUlNCY20tN3VkS2Nwdk1HNmdmel9lQ0xVIn0seyJwYXRoIjoic3Bpbm5lci5naWYiLCJyb290X2hhc2giOiI4eUFYZUp4Q3B0NUZHZFFpTmV4aC1jQ1htVmZfeEhSQ2xlY2NqY2x2emtBIn0seyJwYXRoIjoic3RhdHNfYWNjdW11bGF0b3IuanMiLCJyb290X2hhc2giOiJqdGNzd3ZZZE9hSS1qTVBCcXJ2UGtuLWlwOS1mZmdDd2lZSEJFV1drSmpjIn0seyJwYXRoIjoic3VzcGVuZF9kZXRlY3Rvci5qcyIsInJvb3RfaGFzaCI6IjFaWTdWenItY2p3YUlidDhJQTZLdXA2REFEbWhQWlNuN0prMlJiYmE4Q2cifSx7InBhdGgiOiJ0Y3Bfc29ja2V0LmpzIiwicm9vdF9oYXNoIjoiLV9vcU5xRmcyY1lUUVIyVElEczBnUDVWaGg3RGFHMkxBM1RCcVkwVXRGZyJ9LHsicGF0aCI6InRlbGVtZXRyeV9ldmVudF93cml0ZXIuanMiLCJyb290X2hhc2giOiJ3M3ZGS0xEc1VGNm5ZNEtKdG9RS3NJbXhIdndCUGdnbVFMdDE0Nm9ZSHljIn0seyJwYXRoIjoidGhpcmRfcGFydHlfaG9zdF9wZXJtaXNzaW9ucy5qcyIsInJvb3RfaGFzaCI6IjFlZGJWS0NyaWxPZ0FJRXF1cG1lNkozdS1RQXVPeTdDTzRxSkMxM0FKU0EifSx7InBhdGgiOiJ0aGlyZF9wYXJ0eV90b2tlbl9mZXRjaGVyLmpzIiwicm9vdF9oYXNoIjoiaEhhVXlvRDJFWW5VNUJjUmRhUTBQaWV4OFlOYV9MLVFYSkJHQzJEWFFocyJ9LHsicGF0aCI6InRpY2sud2VicCIsInJvb3RfaGFzaCI6Ilc5NmtBaXAtdFZkN2YzVVA5OXpUeU51bnhjVFBLNlNMNGlhWXRhSjg1Ym8ifSx7InBhdGgiOiJ0b29sYmFyLmNzcyIsInJvb3RfaGFzaCI6ImpxbDNDa1c2TEZiZldPblJJYmlsU1ItYUk0Nmg1QTJZWU9hRF9hajh1TUEifSx7InBhdGgiOiJ0b29sYmFyLmpzIiwicm9vdF9oYXNoIjoiTzRiOWc0U1lPTHlBeHp3X0pkUjFZRktweFlqOFJOSzROeG1ZTEhjLVRZTSJ9LHsicGF0aCI6InR5cGVjaGVjay5qcyIsInJvb3RfaGFzaCI6IjRZOVBVNDNMcWFUZ0k5YmtKaV9tZXRHdGYxTzZqRU1SX1B1a0x2TzEydG8ifSx7InBhdGgiOiJ1aV9tb2RlLmpzIiwicm9vdF9oYXNoIjoiUVpRRFk5VTJ2U0w3MWRGc1hRRmlpSy0zbnB6Q0hWS2lXLVhLbFdndzJfRSJ9LHsicGF0aCI6InZpZXdwb3J0LmpzIiwicm9vdF9oYXNoIjoiWWhFQXhJSmFUbG9uMDlIbzhLUHpNMDBIc2dySDBGLXVHZHVfX1VUejRvVSJ9LHsicGF0aCI6Indjcy5qcyIsInJvb3RfaGFzaCI6Il9Qb01pTDd6a0dTQ1haMW01YnBRUGp0Vm1GeUc3N2lPdGVadU5henY3UEkifSx7InBhdGgiOiJ3Y3NfYWRhcHRlci5qcyIsInJvb3RfaGFzaCI6IlRDbGhDSFlYSVRVcFRYOGlvcU8zcERXaTNrUnFWUEdnUkF1WllNTnhwVWsifSx7InBhdGgiOiJ3Y3NfbG9hZGVyLmpzIiwicm9vdF9oYXNoIjoiLUN1MjF2R3NtbHFweGJPZ1lEZENVWnZIXzJzZFloQ3J6SGhUa1prWDVxSSJ9LHsicGF0aCI6Indjc19zYW5kYm94Lmh0bWwiLCJyb290X2hhc2giOiJNRmF3SVZmVmtHOEdzQTNJeXRPSXhrYkFNY0plbWtDaGgxLXVPa20wc2g0In0seyJwYXRoIjoid2NzX3NhbmRib3hfY29udGFpbmVyLmpzIiwicm9vdF9oYXNoIjoiRW5POFZKSWNxNkdZODU4R1VabWhXQTVGa2ViT2lMem1QMUMwN1MxeDV0byJ9LHsicGF0aCI6Indjc19zYW5kYm94X2NvbnRlbnQuanMiLCJyb290X2hhc2giOiJEbW5zS3A5MGlvRWRrR1FmazhVWUJVOWJLdFNqSlZ6dnhybDJkTjNXTXRBIn0seyJwYXRoIjoid2luZG93X2ZyYW1lLmNzcyIsInJvb3RfaGFzaCI6IlZDdURjR1g2dWtyS1lLZmtEdDhQZnc5MU9DRmhwcnQ3eXVLYmlhd1NBM00ifSx7InBhdGgiOiJ3aW5kb3dfZnJhbWUuanMiLCJyb290X2hhc2giOiJYSEMyN3E5QlVBcnRWcU9lakx2Z1dWMGJNOXpTZVVpRnpfZGRLWExDM09NIn0seyJwYXRoIjoid2luZG93X21lc3NhZ2VfZGlzcGF0Y2hlci5qcyIsInJvb3RfaGFzaCI6IkZXNlFEV0kzSWhjY2xLakttQk5oZUZXTUdrNDYzcXF2dmRad0wtMFlWclUifSx7InBhdGgiOiJ3aW5kb3dfc2hhcGUuanMiLCJyb290X2hhc2giOiJCZjRhNkxTei1lelp2MjZGNkVwcTZmY3JaRnh2bjZTdlVCTVBEWG5HeWZBIn0seyJwYXRoIjoieGhyLmpzIiwicm9vdF9oYXNoIjoiUXJuay1MVXV4Y0ZZSVp2bDhyMjJxUFlkTUpFTlRMLVpqNDdLaE13c1VROCJ9LHsicGF0aCI6Inhocl9ldmVudF93cml0ZXIuanMiLCJyb290X2hhc2giOiJvLTg5aEJNZ0NUYXgxWkFOa3BSbmZkbkxvb2RjZG0xbUZ5djZ3VmppU1dZIn0seyJwYXRoIjoieGhyX3Byb3h5LmpzIiwicm9vdF9oYXNoIjoibHQ3dm1oc01MQ1lXck45VDNtd2p4d2dkR2taY0c5NlhtZTVxVThWZkdqMCJ9LHsicGF0aCI6InhtcHBfY29ubmVjdGlvbi5qcyIsInJvb3RfaGFzaCI6ImpFLTByMml6SG5VRWFFd0hkMm9jSFFQa1AyTk1uNjl3NDF3ZjNvcFJubkkifSx7InBhdGgiOiJ4bXBwX2Vycm9yX2NhY2hlLmpzIiwicm9vdF9oYXNoIjoidXlLQV94X1R2V1NMNHV5cHVVcjBWMUM3S1BPY2JoWjk5R3ZFWmVZcU5zMCJ9LHsicGF0aCI6InhtcHBfbG9naW5faGFuZGxlci5qcyIsInJvb3RfaGFzaCI6IkFRamwwSjRGYzFpWkRLYUhiR2lMVXdEbllfdjNLR3hZT3pmekpUZFNqV3cifSx7InBhdGgiOiJ4bXBwX3N0cmVhbV9wYXJzZXIuanMiLCJyb290X2hhc2giOiJnYWRCVlZKakpMemhLNk1rTEQ2WTlPUGNvbi1RVWg4MnRUX1pjQ1hGSlA0In1dLCJmb3JtYXQiOiJ0cmVlaGFzaCIsImhhc2hfYmxvY2tfc2l6ZSI6NDA5Nn1dLCJpdGVtX2lkIjoiZ2JjaGNtaG1oYWhmZHBoa2hrbXBmbWloZW5pZ2ptcHAiLCJpdGVtX3ZlcnNpb24iOiI1MS4wLjI3MDQuNTMiLCJwcm90b2NvbF92ZXJzaW9uIjoxfQ","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"a8bazezXQh-Ut3GPpzjGhR-9yS0PHZ-jqzd-rKLaQaz_aIXf5Pq_Dfi-gJPrZzFkgVfa4IyRR3AGffogav5gsmxh-rO_2jFYlOnYEtQ3VqBck33byV6g4jhbYWaqVQbz9Vrkf8wIKFNI4zqFQurJdsEgDXzjBRwp53_QhQ7Bbjw"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"PHC01lNseZ5iTF1TTudCb1935KSYkg6KBFszThT9RmA-SyjGh6E9HrU-rV8n0aDohbV9gQRaXNKTy68dpnZ1eRqaz4RxHsppr_G9rZjNhJlY-SBLV0yAg1NzK5_Luh7gWo-fm7ZfhauQqx-MibSCPwKPEoEOho4oIl5hUQZwB9QsvtReRxaklcoea1UNlWqXRSxi8ML_Einn673mU3EK8fPrmQRpgam5MlDTFyqIjbwn6bmUdLQjQ_bp5-bi4zSKGlxsDOgL7fvuB4vEVLc7LX8uoccBoMBxCYDbeUc72gSn0OMfhszc3LxRx86HFmoS4Zv-imjnULwBINsPTeBVcg"}]}}] \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activation_handler.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activation_handler.js new file mode 100644 index 000000000000..32c93a5957d0 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activation_handler.js @@ -0,0 +1,168 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function(){ + +'use strict'; + +/** @type {string} */ +var NEW_WINDOW_MENU_ID_ = 'new-window'; + +/** + * A class that handles application activation. + * + * @param {base.Ipc} ipc + * @param {remoting.V2AppLauncher} appLauncher + * @param {remoting.TelemetryEventWriter.Service} telemetryService + * @extends {base.EventSourceImpl} + * @implements {base.Disposable} + * @constructor + */ +remoting.ActivationHandler = function (ipc, appLauncher, telemetryService) { + base.inherits(this, base.EventSourceImpl); + this.defineEvents(base.values(remoting.ActivationHandler.Events)); + + /** @private */ + this.ipc_ = ipc; + + /** @private {remoting.V2AppLauncher} */ + this.appLauncher_ = appLauncher; + + /** @private {Map} */ + this.windowClosedHooks_ = new Map(); + + /** @private */ + this.telemetryService_ = telemetryService; + + chrome.contextMenus.create({ + id: NEW_WINDOW_MENU_ID_, + contexts: ['launcher'], + title: chrome.i18n.getMessage(/*i18n-content*/'NEW_WINDOW') + }); + + this.disposables_ = new base.Disposables( + new base.ChromeEventHook(chrome.contextMenus.onClicked, + this.onContextMenu_.bind(this)), + new base.ChromeEventHook(chrome.app.runtime.onLaunched, + this.onLaunched_.bind(this))); + ipc.register(remoting.ActivationHandler.Ipc.RESTART, + this.onRestart_.bind(this)); + ipc.register(remoting.ActivationHandler.Ipc.LAUNCH, + this.onLaunched_.bind(this)); + +}; + +remoting.ActivationHandler.prototype.dispose = function() { + this.windowClosedHooks_.forEach(function(/** base.Disposable */ eventHook) { + base.dispose(eventHook); + }); + this.windowClosedHooks_.clear(); + + base.dispose(this.disposables_); + this.disposables_ = null; + this.ipc_.unregister(remoting.ActivationHandler.Ipc.LAUNCH); + this.ipc_.unregister(remoting.ActivationHandler.Ipc.RESTART); +}; + +/** @enum {string} */ +remoting.ActivationHandler.Ipc = { + LAUNCH: 'remoting.ActivationHandler.launch', + RESTART: 'remoting.ActivationHandler.restart' +}; + +/** + * @param {OnClickData} info + * @private + */ +remoting.ActivationHandler.prototype.onContextMenu_ = function(info) { + if (info.menuItemId == NEW_WINDOW_MENU_ID_) { + this.launchDefaultSession_(); + } +}; + +/** + * Restart the window with |id|. + * @param {string} id + * + * @private + */ +remoting.ActivationHandler.prototype.onRestart_ = function(id) { + this.appLauncher_.restart(id).then(this.onWindowCreated_.bind(this)); +}; + +/** + * @param {Object?} launchData |launchData| is null when this function + * is invoked from an IPC. + * + * @private + */ +remoting.ActivationHandler.prototype.onLaunched_ = function(launchData) { + if (Boolean(launchData) && Boolean(launchData['isPublicSession'])) { + this.launchIt2MeSession_(); + } else { + this.launchDefaultSession_(); + } +}; + +/** + * Create a new app window and register for the closed event. + * + * @private + */ +remoting.ActivationHandler.prototype.launchDefaultSession_ = function() { + this.appLauncher_.launch().then(this.onWindowCreated_.bind(this)); +}; + +/** + * @param {string} windowId + * + * @private + */ +remoting.ActivationHandler.prototype.onWindowCreated_ = function( + windowId) { + // Send the client heartbeat. + var event = + new remoting.ChromotingEvent(remoting.ChromotingEvent.Type.HEARTBEAT); + event.role = remoting.ChromotingEvent.Role.CLIENT; + this.telemetryService_.write(''/* No window Id for background page */, event); + + // Register close handler. + var appWindow = chrome.app.window.get(windowId); + console.assert(!this.windowClosedHooks_.has(windowId), + 'Duplicate close listener attached to window : ' + windowId); + this.windowClosedHooks_.set(windowId, new base.ChromeEventHook( + appWindow.onClosed, this.onWindowClosed_.bind(this, windowId))); +}; + +/** + * @param {string} id The id of the window that is closed. + * @private + */ +remoting.ActivationHandler.prototype.onWindowClosed_ = function(id) { + // Unhook the event. + var hook = /** @type {base.Disposable} */ (this.windowClosedHooks_.get(id)); + base.dispose(hook); + this.windowClosedHooks_.delete(id); + + this.raiseEvent(remoting.ActivationHandler.Events.windowClosed, id); +}; + +/** @private */ +remoting.ActivationHandler.prototype.launchIt2MeSession_ = function() { + chrome.app.window.create("public_session.html", { + 'width': 570, + 'height': 300, + 'resizable': false + }); +}; + +})(); + +/** @enum {string} */ +remoting.ActivationHandler.Events = { + windowClosed: 'windowClosed' +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activity.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activity.js new file mode 100644 index 000000000000..206073cd0938 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/activity.js @@ -0,0 +1,38 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * An Activity is a responsible for + * 1. Showing the appropriate UX to establish a connection with the host and + * create a remoting.ClientSession. + * 2. Handling connection failures and retrying if necessary. + * 3. Responding to session state changes and showing UX if necessary. + * + * @interface + * @extends {base.Disposable} + * @extends {remoting.ClientSession.EventHandler} + */ +remoting.Activity = function() {}; + +/** + * Starts a new connection. + * + * @return {void} + */ +remoting.Activity.prototype.start = function() {}; + +/** + * Cancels or disconnects a remote connection. + * @return {void} + */ +remoting.Activity.prototype.stop = function() {}; + +})(); \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/app_launcher.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/app_launcher.js new file mode 100644 index 000000000000..7441cc6716c9 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/app_launcher.js @@ -0,0 +1,177 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * AppLauncher is an interface that allows the client code to launch and close + * the app without knowing the implementation difference between a v1 app and + * a v2 app. + * + * To launch an app: + * var appLauncher = new remoting.V1AppLauncher(); + * var appId = ""; + * appLauncher.launch({arg1:'someValue'}).then(function(id){ + * appId = id; + * }); + * + * To close an app: + * appLauncher.close(appId); + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** @interface */ +remoting.AppLauncher = function() {}; + +/** + * @param {Object=} opt_launchArgs + * @return {Promise} The promise will resolve when the app is launched. It will + * provide the caller with the appId (which is either the id of the hosting tab + * or window). The caller can use the appId to close the app. + */ +remoting.AppLauncher.prototype.launch = function(opt_launchArgs) { }; + +/** + * @param {string} id The id of the app to close. + * @return {Promise} The promise will resolve when the app is closed. + */ +remoting.AppLauncher.prototype.close = function(id) {}; + +/** + * @constructor + * @implements {remoting.AppLauncher} + */ +remoting.V1AppLauncher = function() {}; + +remoting.V1AppLauncher.prototype.launch = function(opt_launchArgs) { + var url = base.urlJoin('main.html', opt_launchArgs); + + return new Promise(function(resolve, reject) { + chrome.tabs.create({ url: url, selected: true }, function(/**Tab*/ tab){ + if (!tab) { + reject(new Error(chrome.runtime.lastError.message)); + } else { + resolve(String(tab.id)); + } + }); + }); +}; + +remoting.V1AppLauncher.prototype.close = function(id) { + return new Promise(function(resolve, reject) { + chrome.tabs.get(parseInt(id, 10), function(/** Tab */ tab) { + if (!tab) { + reject(new Error(chrome.runtime.lastError.message)); + } else { + chrome.tabs.remove(tab.id, resolve); + } + }); + }); +}; + + +/** + * @constructor + * @implements {remoting.AppLauncher} + */ +remoting.V2AppLauncher = function() {}; + +var APP_MAIN_URL = 'main.html'; + +/** + * @param {string} id + * @return {Promise} A promise that resolves with the id of the created + * window, which is guaranteed to be the same as the current window id. + */ +remoting.V2AppLauncher.prototype.restart = function(id) { + return this.close(id).then(function() { + return createWindow_({'id' : id, 'frame': 'none'}); + }).then(function (/** string */ newId) { + console.assert(newId === id, 'restart() should preserve the window id.'); + return newId; + }); +}; + +/** + * @param {!chrome.app.window.CreateWindowOptions=} opt_options + * @param {Object=} opt_launchArgs + * @return {Promise} A promise that resolves with the id of the created + * window. + */ +function createWindow_(opt_options, opt_launchArgs) { + var url = base.urlJoin(APP_MAIN_URL, opt_launchArgs); + var deferred = new base.Deferred(); + + chrome.app.window.create(url, opt_options, + function(/** chrome.app.window.AppWindow= */ appWindow) { + if (!appWindow) { + deferred.reject(new Error(chrome.runtime.lastError.message)); + } else { + deferred.resolve(appWindow.id); + } + }); + return deferred.promise(); +} + +remoting.V2AppLauncher.prototype.launch = function(opt_launchArgs) { + var deferred = new base.Deferred(); + var START_FULLSCREEN = 'start-fullscreen'; + + /** @param {Object} values */ + var onValues = function(values) { + /** @type {string} */ + var state = values[START_FULLSCREEN] ? 'fullscreen' : 'normal'; + createWindow_({ + 'width': 800, + 'height': 634, + 'frame': 'none', + 'id': String(getNextWindowId()), + 'state': state + }, opt_launchArgs).then( + deferred.resolve.bind(deferred), + deferred.reject.bind(deferred) + ); + }; + chrome.storage.local.get(START_FULLSCREEN, onValues); + return deferred.promise(); +}; + +remoting.V2AppLauncher.prototype.close = function(id) { + return new Promise( + /** + * @param {function(*=):void} resolve + * @param {function(*=):void} reject + */ + function(resolve, reject) { + var appWindow = chrome.app.window.get(id); + if (!appWindow) { + return Promise.reject(new Error(chrome.runtime.lastError.message)); + } + appWindow.onClosed.addListener(resolve); + appWindow.close(); + }); +}; + +/** + * @return {number} The first available window id. Since Chrome remembers + * properties such as size and position for app windows, it is better + * to reuse window ids rather than allocating new ones. + */ +function getNextWindowId() { + var appWindows = chrome.app.window.getAll(); + var result = 1; + for (; result <= appWindows.length; ++result) { + if (!chrome.app.window.get(String(result))) { + break; + } + } + return result; +} + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/application.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/application.js new file mode 100644 index 000000000000..723e0a141d55 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/application.js @@ -0,0 +1,215 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Interface abstracting the Application functionality. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @type {base.EventSourceImpl} An event source object for handling global + * events. This is an interim hack. Eventually, we should move + * functionalities away from the remoting namespace and into smaller objects. + */ +remoting.testEvents; + +/** + * @constructor + * @implements {base.Disposable} + */ +remoting.Application = function() { + // Create global factories. + remoting.ClientPlugin.factory = new remoting.DefaultClientPluginFactory(); + + /** @protected {base.WindowMessageDispatcher} */ + this.windowMessageDispatcher_ = new base.WindowMessageDispatcher(); +}; + +remoting.Application.prototype.dispose = function() { + base.dispose(this.windowMessageDispatcher_); + this.windowMessageDispatcher_ = null; +}; + +/* Public method to exit the application. */ +remoting.Application.prototype.quit = function() { + this.exitApplication_(); +}; + +/** + * Close the main window when quitting the application. This should be called + * by exitApplication() in the subclass. + * @protected + */ +remoting.Application.prototype.closeMainWindow_ = function() { + chrome.app.window.current().close(); +}; + +/** + * Initialize the application and register all event handlers. After this + * is called, the app is running and waiting for user events. + */ +remoting.Application.prototype.start = function() { + // TODO(garykac): This should be owned properly rather than living in the + // global 'remoting' namespace. + remoting.settings = new remoting.Settings(); + + this.initGlobalObjects_(); + remoting.initIdentity(); + + this.initApplication_(); + + var that = this; + remoting.identity.getToken().then( + this.startApplication_.bind(this) + ).catch(function(/** !remoting.Error */ error) { + if (error.hasTag(remoting.Error.Tag.CANCELLED)) { + that.exitApplication_(); + } else { + that.signInFailed_(error); + } + }); +}; + +/** @private */ +remoting.Application.prototype.initGlobalObjects_ = function() { + if (base.isAppsV2()) { + var htmlNode = /** @type {HTMLElement} */ (document.body.parentNode); + htmlNode.classList.add('apps-v2'); + } + + console.log(this.getExtensionInfo()); + l10n.localize(); + + var sandbox = + /** @type {HTMLIFrameElement} */ (document.getElementById('wcs-sandbox')); + remoting.wcsSandbox = new remoting.WcsSandboxContainer( + sandbox.contentWindow, this.windowMessageDispatcher_); + remoting.initModalDialogs(); +}; + +/** + * @return {string} Information about the current extension. + */ +remoting.Application.prototype.getExtensionInfo = function() { + var v2OrLegacy = base.isAppsV2() ? " (v2)" : " (legacy)"; + var manifest = chrome.runtime.getManifest(); + if (manifest && manifest.version) { + var name = this.getApplicationName(); + return name + ' version: ' + manifest.version + v2OrLegacy; + } else { + return 'Failed to get product version. Corrupt manifest?'; + } +}; + +/** + * These functions must be overridden in the subclass. + */ + +/** + * @return {string} + * @suppress {missingReturn} + */ +remoting.Application.prototype.getApplicationId = function() { + console.assert(false, 'Subclass must override'); +}; + +/** + * @return {string} + * @suppress {missingReturn} + */ +remoting.Application.prototype.getApplicationName = function() { + console.assert(false, 'Subclass must override getApplicationName().'); +}; + +/** + * @return {remoting.Activity} The Current activity. + * @suppress {missingReturn} + */ +remoting.Application.prototype.getActivity = function() { + console.assert(false, 'Subclass must override getActivity().'); +}; + +/** + * @param {!remoting.Error} error + * @protected + */ +remoting.Application.prototype.signInFailed_ = function(error) { + console.assert(false, 'Subclass must override signInFailed().'); +}; + +/** @protected */ +remoting.Application.prototype.initApplication_ = function() { + console.assert(false, 'Subclass must override initApplication().'); +}; + +/** + * @param {string} token + * @protected + */ +remoting.Application.prototype.startApplication_ = function(token) { + console.assert(false, 'Subclass must override startApplication().'); +}; + +/** @protected */ +remoting.Application.prototype.exitApplication_ = function() { + console.assert(false, 'Subclass must override exitApplication().'); +}; + +/** + * The interface specifies the methods that a subclass of remoting.Application + * is required implement to override the default behavior. + * + * @interface + */ +remoting.ApplicationInterface = function() {}; + +/** + * @return {string} Application Id. + */ +remoting.ApplicationInterface.prototype.getApplicationId = function() {}; + +/** + * @return {string} Application product name to be used in UI. + */ +remoting.ApplicationInterface.prototype.getApplicationName = function() {}; + +/** + * Report an authentication error to the user. This is called in lieu of + * startApplication() if the user cannot be authenticated or if they decline + * the app permissions. + * + * @param {!remoting.Error} error The failure reason. + */ +remoting.ApplicationInterface.prototype.signInFailed_ = function(error) {}; + +/** + * Initialize the application. This is called before an OAuth token is requested + * and should be used for tasks such as initializing the DOM, registering event + * handlers, etc. After this is called, the app is running and waiting for + * user events. + */ +remoting.ApplicationInterface.prototype.initApplication_ = function() {}; + +/** + * Start the application. Once startApplication() is called, we can assume that + * the user has consented to all permissions specified in the manifest. + * + * @param {string} token An OAuth access token. The app should not cache + * this token, but can assume that it will remain valid during application + * start-up. + */ +remoting.ApplicationInterface.prototype.startApplication_ = function(token) {}; + +/** + * Close down the application before exiting. + */ +remoting.ApplicationInterface.prototype.exitApplication_ = function() {}; + +/** @type {remoting.Application} */ +remoting.app = null; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/apps_v2_migration.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/apps_v2_migration.js new file mode 100644 index 000000000000..aab9994badb2 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/apps_v2_migration.js @@ -0,0 +1,102 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** +* @fileoverview +* The current v1 web-app allows users to sign in as any user. Some users may +* be signed in using a different account than their chrome profile. When these +* users upgrade to the v2 app, their host list will be empty and it is not +* obvious why. remoting.AppsV2Migration shows a migration tip to the user to +* sign in to their previous accounts if necessary. +*/ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +// Storage key used for the migration settings. +var MIGRATION_KEY_ = 'remoting-v2-migration'; + +/** + * @param {string} email + * @param {string} fullName + * @constructor + */ +remoting.MigrationSettings = function(email, fullName) { + this.email = email; + this.fullName = fullName; +}; + +remoting.AppsV2Migration = function() {}; + +/** + * @return {Promise} A Promise object that would resolve to + * {remoting.MigrationSettings} if the user has previously signed-in to + * the v1 app with a different account that has hosts registered to it. + * Otherwise, the promise will be rejected. + */ +remoting.AppsV2Migration.hasHostsInV1App = function() { + if (!base.isAppsV2()) { + return Promise.reject(false); + } + + var getV1UserInfo = base.Promise.as(chrome.storage.local.get, + [MIGRATION_KEY_], + chrome.storage.local); + var getEmail = remoting.identity.getEmail(); + + return Promise.all([getV1UserInfo, getEmail]).then( + /** @param {Object} results */ + function(results){ + var v1User = + /**@type {remoting.MigrationSettings} */ (results[0][MIGRATION_KEY_]); + var currentEmail = /** @type {string}*/ (results[1]); + + if (v1User && v1User.email && v1User.email !== currentEmail) { + return Promise.resolve(v1User); + } + return Promise.reject(false); + } + ); +}; + +/** + * @param {string} email + * @param {string} fullName + * @return {string} + */ +remoting.AppsV2Migration.buildMigrationTips = function(email, fullName) { + var params = [ + fullName, + email, + '', + '']; + return l10n.getTranslationOrError( + /*i18n-content*/'HOST_LIST_EMPTY_V2_MIGRATION', params); +}; + +/** + * Saves the email and full name of the current user as the migration settings + * in the v1 app. Clears the migration settings in the v2 app. + */ +remoting.AppsV2Migration.saveUserInfo = function() { + if (base.isAppsV2()) { + chrome.storage.local.remove(MIGRATION_KEY_); + } else { + remoting.identity.getUserInfo().then( + /** @param {{email:string, name:string}} userInfo */ + function(userInfo) { + var preference = {}; + preference[MIGRATION_KEY_] = + new remoting.MigrationSettings(userInfo.email, userInfo.name); + chrome.storage.local.set(preference); + }).catch(base.doNothing); + } +}; + +}()); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/auth_init.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/auth_init.js new file mode 100644 index 000000000000..60bddf02c5d0 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/auth_init.js @@ -0,0 +1,50 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * Initialize the identity and authentication components. + * + * @return {void} Nothing. + */ +remoting.initIdentity = function() { + if (base.isAppsV2()) { + // TODO(jamiewalch): Add a getAuthDialog method to Application.Delegate + // to allow this behaviour to be customized. + remoting.identity = + new remoting.Identity(remoting.AuthDialog.getInstance()); + } else { + // TODO(garykac) Remove this and replace with identity. + remoting.oauth2 = new remoting.OAuth2(); + var oauth2 = /** @type {*} */ (remoting.oauth2); + remoting.identity = /** @type {remoting.Identity} */ (oauth2); + if (!remoting.identity.isAuthenticated()) { + remoting.AuthDialog.getInstance().show().then(function() { + remoting.oauth2.doAuthRedirect(function(){ + window.location.reload(); + }); + }); + } + } +}; + +/** + * Removes the cached token and restarts the app. + * + * @return {void} Nothing. + */ +remoting.handleAuthFailureAndRelaunch = function() { + remoting.identity.removeCachedAuthToken().then(function(){ + if (base.isAppsV2()) { + base.Ipc.invoke('remoting.ActivationHandler.restart', + chrome.app.window.current().id); + } else { + window.location.reload(); + } + }); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.html b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.html new file mode 100644 index 000000000000..7a8982280634 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.js new file mode 100644 index 000000000000..032593507800 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/background.js @@ -0,0 +1,62 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function(){ + +'use strict'; + +/** + * @constructor + */ +var BackgroundPage = function() { + /** @private {remoting.AppLauncher} */ + this.appLauncher_ = null; + /** @private {remoting.ActivationHandler} */ + this.activationHandler_ = null; + /** @private {remoting.TelemetryEventWriter.Service} */ + this.telemetryService_ = null; + /** @private */ + this.disposables_ = new base.Disposables(); + this.preInit_(); +}; + +/** + * Initialize members and globals that are valid throughout the entire lifetime + * of the background page. + * + * @private + */ +BackgroundPage.prototype.preInit_ = function() { + remoting.settings = new remoting.Settings(); + if (base.isAppsV2()) { + remoting.identity = new remoting.Identity(); + } else { + remoting.oauth2 = new remoting.OAuth2(); + var oauth2 = /** @type {*} */ (remoting.oauth2); + remoting.identity = /** @type {remoting.Identity} */ (oauth2); + } + + if (base.isAppsV2()) { + this.appLauncher_ = new remoting.V2AppLauncher(); + this.telemetryService_ = remoting.TelemetryEventWriter.Service.create(); + this.telemetryService_.init(); + this.activationHandler_ = new remoting.ActivationHandler( + base.Ipc.getInstance(), this.appLauncher_, this.telemetryService_); + this.disposables_.add(new base.EventHook( + this.activationHandler_, remoting.ActivationHandler.Events.windowClosed, + this.telemetryService_.unbindSession.bind(this.telemetryService_))); + } else { + this.appLauncher_ = new remoting.V1AppLauncher(); + } +}; + + +window.addEventListener('load', function() { + remoting.backgroundPage = new BackgroundPage(); +}, false); + +}()); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/base.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/base.js new file mode 100644 index 000000000000..e9921e5eee0f --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/base.js @@ -0,0 +1,875 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * A module that contains basic utility components and methods for the + * chromoting project + * + */ + +'use strict'; + +/** @suppress {duplicate} */ +var base = base || {}; + +/** + * @interface + */ +base.Disposable = function() {}; +base.Disposable.prototype.dispose = function() {}; + +/** + * @constructor + * @param {...base.Disposable} var_args + * @implements {base.Disposable} + * @suppress {reportUnknownTypes} + */ +base.Disposables = function(var_args) { + /** + * @type {Array} + * @private + */ + this.disposables_ = Array.prototype.slice.call(arguments, 0); +}; + +/** + * @param {...base.Disposable} var_args + * @suppress {reportUnknownTypes} + */ +base.Disposables.prototype.add = function(var_args) { + var disposables = Array.prototype.slice.call(arguments, 0); + for (var i = 0; i < disposables.length; i++) { + var current = /** @type {base.Disposable} */ (disposables[i]); + if (this.disposables_.indexOf(current) === -1) { + this.disposables_.push(current); + } + } +}; + +/** + * @param {...base.Disposable} var_args Dispose |var_args| and remove + * them from the current object. + * @suppress {reportUnknownTypes} + */ +base.Disposables.prototype.remove = function(var_args) { + var disposables = Array.prototype.slice.call(arguments, 0); + for (var i = 0; i < disposables.length; i++) { + var disposable = /** @type {base.Disposable} */ (disposables[i]); + var index = this.disposables_.indexOf(disposable); + if(index !== -1) { + this.disposables_.splice(index, 1); + disposable.dispose(); + } + } +}; + +base.Disposables.prototype.dispose = function() { + for (var i = 0; i < this.disposables_.length; i++) { + this.disposables_[i].dispose(); + } + this.disposables_ = null; +}; + +/** + * A utility function to invoke |obj|.dispose without a null check on |obj|. + * @param {base.Disposable} obj + */ +base.dispose = function(obj) { + if (obj) { + console.assert(typeof obj.dispose == 'function', + 'dispose() should have type function, not ' + + typeof obj.dispose + '.'); + obj.dispose(); + } +}; + +/** + * Copy all properties from src to dest. + * @param {Object} dest + * @param {Object} src + */ +base.mix = function(dest, src) { + for (var prop in src) { + if (src.hasOwnProperty(prop) && !(prop in dest)) { + dest[prop] = src[prop]; + } + } +}; + +/** + * Adds a mixin to a class. + * @param {Object} dest + * @param {Object} src + * @suppress {checkTypes|reportUnknownTypes} + */ +base.extend = function(dest, src) { + base.mix(dest.prototype, src.prototype || src); +}; + +/** + * Inherits properties and methods from |parentCtor| at object construction time + * using prototypical inheritance. e.g. + * + * var ParentClass = function(parentArg) { + * this.parentProperty = parentArg; + * } + * + * var ChildClass = function() { + * base.inherits(this, ParentClass, 'parentArg'); // must be the first line. + * } + * + * var child = new ChildClass(); + * child instanceof ParentClass // true + * + * See base_inherits_unittest.js for the guaranteed behavior of base.inherits(). + * This lazy approach is chosen so that it is not necessary to maintain proper + * script loading order between the parent class and the child class. + * + * @param {*} childObject + * @param {*} parentCtor + * @param {...} parentCtorArgs + * @suppress {checkTypes|reportUnknownTypes} + */ +base.inherits = function(childObject, parentCtor, parentCtorArgs) { + console.assert(parentCtor && parentCtor.prototype, + 'Invalid parent constructor.'); + var parentArgs = Array.prototype.slice.call(arguments, 2); + + // Mix in the parent's prototypes so that they're available during the parent + // ctor. + base.mix(childObject, parentCtor.prototype); + parentCtor.apply(childObject, parentArgs); + + // Note that __proto__ is deprecated. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ + // Global_Objects/Object/proto. + // It is used so that childObject instanceof parentCtor will + // return true. + childObject.__proto__.__proto__ = parentCtor.prototype; + console.assert(childObject instanceof parentCtor, + 'child is not an instance of parent.'); +}; + +base.doNothing = function() {}; + +/** + * Returns an array containing the values of |dict|. + * @param {!Object} dict + * @return {Array} + */ +base.values = function(dict) { + return Object.keys(dict).map( + /** @param {string} key */ + function(key) { + return dict[key]; + }); +}; + +/** + * @param {*} value + * @return {*} a recursive copy of |value| or null if |value| is not copyable + * (e.g. undefined, NaN). + */ +base.deepCopy = function(value) { + try { + return JSON.parse(JSON.stringify(value)); + } catch (e) {} + return null; +}; + +/** + * Returns a copy of the input object with all null/undefined fields + * removed. Returns an empty object for a null/undefined input. + * + * @param {Object|undefined} input + * @return {!Object} + * @template T + */ +base.copyWithoutNullFields = function(input) { + var result = {}; + base.mergeWithoutNullFields(result, input); + return result; +}; + +/** + * Merge non-null fields of |src| into |dest|. + * + * @param {!Object} dest + * @param {Object|undefined} src + * @template T + */ +base.mergeWithoutNullFields = function(dest, src) { + if (src) { + for (var field in src) { + var value = /** @type {*} */ (src[field]); + if (value != null) { + dest[field] = base.deepCopy(value); + } + } + } +}; + +/** + * @param {!Object} object + * @return {boolean} True if the object is empty (equal to {}); false otherwise. + */ +base.isEmptyObject = function(object) { + return Object.keys(object).length === 0; +}; + +/** + * @type {boolean|undefined} + * @private + */ +base.isAppsV2_ = undefined; + +/** + * @return {boolean} True if this is a v2 app; false if it is a legacy app. + */ +base.isAppsV2 = function() { + if (base.isAppsV2_ === undefined) { + var manifest = chrome.runtime.getManifest(); + base.isAppsV2_ = + Boolean(manifest && manifest.app && manifest.app.background); + } + return base.isAppsV2_; +}; + +/** + * Joins the |url| with optional query parameters defined in |opt_params| + * See unit test for usage. + * @param {string} url + * @param {Object=} opt_params + * @return {string} + */ +base.urlJoin = function(url, opt_params) { + if (!opt_params) { + return url; + } + var queryParameters = []; + for (var key in opt_params) { + queryParameters.push(encodeURIComponent(key) + "=" + + encodeURIComponent(opt_params[key])); + } + return url + '?' + queryParameters.join('&'); +}; + + +/** + * @return {Object} The URL parameters. + */ +base.getUrlParameters = function() { + var result = {}; + var parts = window.location.search.substring(1).split('&'); + for (var i = 0; i < parts.length; i++) { + var pair = parts[i].split('='); + result[pair[0]] = decodeURIComponent(pair[1]); + } + return result; +}; + +/** + * Convert special characters (e.g. &, < and >) to HTML entities. + * + * @param {string} str + * @return {string} + */ +base.escapeHTML = function(str) { + var div = document.createElement('div'); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; +}; + +/** + * Promise is a great tool for writing asynchronous code. However, the construct + * var p = new promise(function init(resolve, reject) { + * ... // code that fulfills the Promise. + * }); + * forces the Promise-resolving logic to reside in the |init| function + * of the constructor. This is problematic when you need to resolve the + * Promise in a member function(which is quite common for event callbacks). + * + * base.Deferred comes to the rescue. It encapsulates a Promise + * object and exposes member methods (resolve/reject) to fulfill it. + * + * Here are the recommended steps to follow when implementing an asynchronous + * function that returns a Promise: + * 1. Create a deferred object by calling + * var deferred = new base.Deferred(); + * 2. Call deferred.resolve() when the asynchronous operation finishes. + * 3. Call deferred.reject() when the asynchronous operation fails. + * 4. Return deferred.promise() to the caller so that it can subscribe + * to status changes using the |then| handler. + * + * Sample Usage: + * function myAsyncAPI() { + * var deferred = new base.Deferred(); + * window.setTimeout(function() { + * deferred.resolve(); + * }, 100); + * return deferred.promise(); + * }; + * + * @constructor + * @template T + */ +base.Deferred = function() { + /** + * @private {?function(?):void} + */ + this.resolve_ = null; + + /** + * @private {?function(?):void} + */ + this.reject_ = null; + + /** + * @this {base.Deferred} + * @param {function(?):void} resolve + * @param {function(*):void} reject + */ + var initPromise = function(resolve, reject) { + this.resolve_ = resolve; + this.reject_ = reject; + }; + + /** + * @private {!Promise} + */ + this.promise_ = new Promise(initPromise.bind(this)); +}; + +/** @param {*} reason */ +base.Deferred.prototype.reject = function(reason) { + this.reject_(reason); +}; + +/** @param {*=} opt_value */ +base.Deferred.prototype.resolve = function(opt_value) { + this.resolve_(opt_value); +}; + +/** @return {!Promise} */ +base.Deferred.prototype.promise = function() { + return this.promise_; +}; + +base.Promise = function() {}; + +/** + * @param {number} delay + * @param {*=} opt_value + * @return {!Promise} a Promise that will be fulfilled with |opt_value| + * after |delay| ms. + */ +base.Promise.sleep = function(delay, opt_value) { + return new Promise( + function(resolve) { + window.setTimeout(function() { + resolve(opt_value); + }, delay); + }); +}; + +/** + * @param {Promise} promise + * @return {Promise} a Promise that will be fulfilled iff the specified Promise + * is rejected. + */ +base.Promise.negate = function(promise) { + return promise.then( + /** @return {Promise} */ + function() { + return Promise.reject(); + }, + /** @return {Promise} */ + function() { + return Promise.resolve(); + }); +}; + +/** + * Creates a promise that will be fulfilled within a certain timeframe. + * + * This function creates a result promise |R| that will be resolved to + * either |promise| or |opt_defaultValue|. If |promise| is fulfulled + * (i.e. resolved or rejected) within |delay| milliseconds, then |R| + * is resolved with |promise|. Otherwise, |R| is resolved with + * |opt_defaultValue|. + * + * Avoid passing a promise as |opt_defaultValue|, as this could result + * in |R| remaining unfulfilled after |delay| milliseconds. + * + * @param {!Promise} promise The promise to wrap. + * @param {number} delay The number of milliseconds to wait. + * @param {*=} opt_defaultValue The default value used to resolve the + * result. + * @return {!Promise} A new promise. + * @template T + */ +base.Promise.withTimeout = function(promise, delay, opt_defaultValue) { + return Promise.race([promise, base.Promise.sleep(delay, opt_defaultValue)]); +}; + +/** + * Creates a promise that will be rejected if it is not fulfilled within a + * certain timeframe. + * + * This function creates a result promise |R|. If |promise| is fulfilled + * (i.e. resolved or rejected) within |delay| milliseconds, then |R| + * is resolved or rejected, respectively. Otherwise, |R| is rejected with + * |opt_defaultError|. + * + * @param {!Promise} promise The promise to wrap. + * @param {number} delay The number of milliseconds to wait. + * @param {*=} opt_defaultError The default error used to reject the promise. + * @return {!Promise} A new promise. + * @template T + */ +base.Promise.rejectAfterTimeout = function(promise, delay, opt_defaultError) { + return Promise.race([ + promise, + base.Promise.sleep(delay).then(function() { + return Promise.reject(opt_defaultError); + }) + ]); +}; + +/** + * Converts a |method| with callbacks into a Promise. + * + * @param {Function} method + * @param {Array} params + * @param {*=} opt_context + * @param {boolean=} opt_hasErrorHandler whether the method has an error handler + * @return {Promise} + */ +base.Promise.as = function(method, params, opt_context, opt_hasErrorHandler) { + return new Promise(function(resolve, reject) { + params.push(resolve); + if (opt_hasErrorHandler) { + params.push(reject); + } + try { + method.apply(opt_context, params); + } catch (/** @type {*} */ e) { + reject(e); + } + }); +}; + +/** + * A mixin for classes with events. + * + * For example, to create an alarm event for SmokeDetector: + * functionSmokeDetector() { + * base.inherits(this, base.EventSourceImpl); + * this.defineEvents(['alarm']); + * }; + * + * To fire an event: + * SmokeDetector.prototype.onCarbonMonoxideDetected = function() { + * var param = {} // optional parameters + * this.raiseEvent('alarm', param); + * } + * + * To listen to an event: + * var smokeDetector = new SmokeDetector(); + * smokeDetector.addEventListener('alarm', listenerObj.someCallback) + * + */ + +/** + * Helper interface for the EventSource. + * @constructor + */ +base.EventEntry = function() { + /** @type {Array} */ + this.listeners = []; +}; + + +/** @interface */ +base.EventSource = function() {}; + + /** + * Add a listener |fn| to listen to |type| event. + * @param {string} type + * @param {Function} fn + */ +base.EventSource.prototype.addEventListener = function(type, fn) {}; + + /** + * Remove a listener |fn| to listen to |type| event. + * @param {string} type + * @param {Function} fn + */ +base.EventSource.prototype.removeEventListener = function(type, fn) {}; + + +/** + * @constructor + * Since this class is implemented as a mixin, the constructor may not be + * called. All initializations should be done in defineEvents. + * @implements {base.EventSource} + */ +base.EventSourceImpl = function() { + /** @type {Object} */ + this.eventMap_; +}; + +/** + * @param {base.EventSourceImpl} obj + * @param {string} type + * @private + */ +base.EventSourceImpl.assertHasEvent_ = function(obj, type) { + console.assert(Boolean(obj.eventMap_), + "The object doesn't support events."); + console.assert(Boolean(obj.eventMap_[type]), + 'Event <' + type +'> is undefined for the current object.'); +}; + +base.EventSourceImpl.prototype = { + /** + * Define |events| for this event source. + * @param {Array} events + */ + defineEvents: function(events) { + console.assert(!Boolean(this.eventMap_), + 'defineEvents() can only be called once.'); + this.eventMap_ = {}; + events.forEach( + /** + * @this {base.EventSourceImpl} + * @param {string} type + */ + function(type) { + console.assert(typeof type == 'string', + 'Event name must be a string; found ' + type + '.'); + this.eventMap_[type] = new base.EventEntry(); + }, this); + }, + + /** + * @param {string} type + * @param {Function} fn + */ + addEventListener: function(type, fn) { + console.assert(typeof fn == 'function', + 'addEventListener(): event listener for ' + type + + ' must be function, not ' + typeof fn + '.'); + base.EventSourceImpl.assertHasEvent_(this, type); + + var listeners = this.eventMap_[type].listeners; + listeners.push(fn); + }, + + /** + * @param {string} type + * @param {Function} fn + */ + removeEventListener: function(type, fn) { + console.assert(typeof fn == 'function', + 'removeEventListener(): event listener for ' + type + + ' must be function, not ' + typeof fn + '.'); + base.EventSourceImpl.assertHasEvent_(this, type); + + var listeners = this.eventMap_[type].listeners; + // find the listener to remove. + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + if (listener == fn) { + listeners.splice(i, 1); + break; + } + } + }, + + /** + * Fire an event of a particular type on this object. + * @param {string} type + * @param {*=} opt_details The type of |opt_details| should be ?= to + * match what is defined in add(remove)EventListener. However, JSCompile + * cannot handle invoking an unknown type as an argument to |listener| + * As a hack, we set the type to *=. + */ + raiseEvent: function(type, opt_details) { + base.EventSourceImpl.assertHasEvent_(this, type); + + var entry = this.eventMap_[type]; + var listeners = entry.listeners.slice(0); // Make a copy of the listeners. + + listeners.forEach( + /** @param {Function} listener */ + function(listener){ + if (listener) { + listener(opt_details); + } + }); + } +}; + + +/** + * A lightweight object that helps manage the lifetime of an event listener. + * + * For example, do the following if you want to automatically unhook events + * when your object is disposed: + * + * var MyConstructor = function(domElement) { + * this.eventHooks_ = new base.Disposables( + * new base.EventHook(domElement, 'click', this.onClick_.bind(this)), + * new base.EventHook(domElement, 'keydown', this.onClick_.bind(this)), + * new base.ChromeEventHook(chrome.runtime.onMessage, + * this.onMessage_.bind(this)) + * ); + * } + * + * MyConstructor.prototype.dispose = function() { + * this.eventHooks_.dispose(); + * this.eventHooks_ = null; + * } + * + * @param {base.EventSource} src + * @param {string} eventName + * @param {Function} listener + * + * @constructor + * @implements {base.Disposable} + */ +base.EventHook = function(src, eventName, listener) { + this.src_ = src; + this.eventName_ = eventName; + this.listener_ = listener; + src.addEventListener(eventName, listener); +}; + +base.EventHook.prototype.dispose = function() { + this.src_.removeEventListener(this.eventName_, this.listener_); +}; + +/** + * An event hook implementation for DOM Events. + * + * @param {HTMLElement|Element|Window|HTMLDocument} src + * @param {string} eventName + * @param {Function} listener + * @param {boolean} capture + * + * @constructor + * @implements {base.Disposable} + */ +base.DomEventHook = function(src, eventName, listener, capture) { + this.src_ = src; + this.eventName_ = eventName; + this.listener_ = listener; + this.capture_ = capture; + src.addEventListener(eventName, listener, capture); +}; + +base.DomEventHook.prototype.dispose = function() { + this.src_.removeEventListener(this.eventName_, this.listener_, this.capture_); +}; + + +/** + * An event hook implementation for Chrome Events. + * + * @param {ChromeEvent|chrome.contextMenus.ClickedEvent|ChromeObjectEvent} src + * @param {!Function} listener + * + * @constructor + * @implements {base.Disposable} + */ +base.ChromeEventHook = function(src, listener) { + this.src_ = src; + this.listener_ = listener; + src.addListener(listener); +}; + +base.ChromeEventHook.prototype.dispose = function() { + this.src_.removeListener(this.listener_); +}; + +/** + * A disposable repeating timer. + * + * @param {Function} callback + * @param {number} interval + * @param {boolean=} opt_invokeNow Whether to invoke the callback now, default + * to false. + * + * @constructor + * @implements {base.Disposable} + */ +base.RepeatingTimer = function(callback, interval, opt_invokeNow) { + /** @private */ + this.intervalId_ = window.setInterval(callback, interval); + if (opt_invokeNow) { + callback(); + } +}; + +base.RepeatingTimer.prototype.dispose = function() { + window.clearInterval(this.intervalId_); + this.intervalId_ = null; +}; + +/** + * A disposable one shot timer. + * + * @param {Function} callback + * @param {number} timeout + * + * @constructor + * @implements {base.Disposable} + */ +base.OneShotTimer = function(callback, timeout) { + var that = this; + + /** @private */ + this.timerId_ = window.setTimeout(function() { + that.timerId_ = null; + callback(); + }, timeout); +}; + +base.OneShotTimer.prototype.dispose = function() { + if (this.timerId_ !== null) { + window.clearTimeout(this.timerId_); + this.timerId_ = null; + } +}; + +/** + * Converts UTF-8 string to ArrayBuffer. + * + * @param {string} string + * @return {!ArrayBuffer} + */ +base.encodeUtf8 = function(string) { + var utf8String = unescape(encodeURIComponent(string)); + var result = new Uint8Array(utf8String.length); + for (var i = 0; i < utf8String.length; i++) + result[i] = utf8String.charCodeAt(i); + return result.buffer; +}; + +/** + * Decodes UTF-8 string from ArrayBuffer. + * + * @param {ArrayBuffer} buffer + * @return {string} + */ +base.decodeUtf8 = function(buffer) { + return decodeURIComponent( + escape(String.fromCharCode.apply(null, new Uint8Array(buffer)))); +}; + +/** + * Generate a nonce, to be used as an xsrf protection token. + * + * @return {string} A URL-Safe Base64-encoded 128-bit random value. */ +base.generateXsrfToken = function() { + var random = new Uint8Array(16); + window.crypto.getRandomValues(random); + var base64Token = window.btoa(String.fromCharCode.apply(null, random)); + return base64Token.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); +}; + +/** + * @return {string} A random UUID. + */ +base.generateUuid = function() { + var random = new Uint16Array(8); + window.crypto.getRandomValues(random); + /** @type {Array} */ + var e = new Array(); + for (var i = 0; i < 8; i++) { + e[i] = (/** @type {number} */ (random[i]) + 0x10000). + toString(16).substring(1); + } + return e[0] + e[1] + '-' + e[2] + '-' + e[3] + '-' + + e[4] + '-' + e[5] + e[6] + e[7]; +}; + +/** + * @param {string} jsonString A JSON-encoded string. + * @return {Object|undefined} The decoded object, or undefined if the string + * cannot be parsed. + */ +base.jsonParseSafe = function(jsonString) { + try { + return /** @type {Object} */ (JSON.parse(jsonString)); + } catch (err) { + return undefined; + } +}; + +/** + * Return the current time as a formatted string suitable for logging. + * + * @return {string} The current time, formatted as the standard ISO string. + * [yyyy-mm-ddDhh:mm:ss.xyz] + */ +base.timestamp = function() { + return '[' + new Date().toISOString() + ']'; +}; + + +/** + * A online function that can be stubbed by unit tests. + * @return {boolean} + */ +base.isOnline = function() { + return navigator.onLine; +}; + +/** + * Size the current window to fit its content. + * @param {boolean=} opt_centerWindow If true, position the window in the + * center of the screen after resizing it. + */ +base.resizeWindowToContent = function(opt_centerWindow) { + var appWindow = chrome.app.window.current(); + var borderX = appWindow.outerBounds.width - appWindow.innerBounds.width; + var borderY = appWindow.outerBounds.height - appWindow.innerBounds.height; + var width = Math.ceil(document.documentElement.scrollWidth + borderX); + var height = Math.ceil(document.documentElement.scrollHeight + borderY); + appWindow.outerBounds.width = width; + appWindow.outerBounds.height = height; + if (opt_centerWindow) { + var screenWidth = screen.availWidth; + var screenHeight = screen.availHeight; + appWindow.outerBounds.left = Math.round((screenWidth - width) / 2); + appWindow.outerBounds.top = Math.round((screenHeight - height) / 2); + } +}; + +/** + * @return {boolean} Whether NaCL is enabled in chrome://plugins. + */ +base.isNaclEnabled = function() { + for (var i = 0; i < navigator.mimeTypes.length; i++) { + if (navigator.mimeTypes.item(i).type == 'application/x-pnacl') { + return true; + } + } + return false; +}; + +/** + * Alias for document.getElementById that returns an HTMLElement + * @param {string} id The ID of the element to find. + * @return {?HTMLElement} The found element or null if not found. + */ +base.getHtmlElement = function(id) { + var el = document.getElementById(id); + if (el) + console.assert(el instanceof HTMLElement); + return /** @type {HTMLElement} */(el); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/bump_scroller.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/bump_scroller.js new file mode 100644 index 000000000000..908cf7251568 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/bump_scroller.js @@ -0,0 +1,109 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * This class allows enables the scrolling of the DestkopViewport in fullscreen + * mode by moving the mouse to the edge of the screen. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @param {remoting.DesktopViewport} viewport + * + * @constructor + * @implements {base.Disposable} + * @extends {base.EventSourceImpl} + */ +remoting.BumpScroller = function(viewport) { + base.inherits(this, base.EventSourceImpl); + + /** @private */ + this.viewport_ = viewport; + /** @private {number?} */ + this.bumpScrollTimer_ = null; + /** @private */ + this.eventHook_ = new base.DomEventHook(document.documentElement, 'mousemove', + this.onMouseMove_.bind(this), false); + + this.defineEvents(base.values(remoting.BumpScroller.Events)); +}; + +/** @enum {string} */ +remoting.BumpScroller.Events = { + bumpScrollStarted: 'bumpScrollStarted', + bumpScrollStopped: 'bumpScrollStopped' +}; + +remoting.BumpScroller.prototype.dispose = function() { + base.dispose(this.eventHook_); + this.eventHook_ = null; +}; + +/** + * @param {Event} event The mouse event. + * @private + */ +remoting.BumpScroller.prototype.onMouseMove_ = function(event) { + if (this.bumpScrollTimer_ !== null) { + window.clearTimeout(this.bumpScrollTimer_); + this.bumpScrollTimer_ = null; + } + + /** + * Compute the scroll speed based on how close the mouse is to the edge. + * + * @param {number} mousePos The mouse x- or y-coordinate + * @param {number} size The width or height of the content area. + * @return {number} The scroll delta, in pixels. + */ + var computeDelta = function(mousePos, size) { + var threshold = 10; + if (mousePos >= size - threshold) { + return 1 + 5 * (mousePos - (size - threshold)) / threshold; + } else if (mousePos <= threshold) { + return -1 - 5 * (threshold - mousePos) / threshold; + } + return 0; + }; + + var clientArea = this.viewport_.getClientArea(); + var dx = computeDelta(event.x, clientArea.width); + var dy = computeDelta(event.y, clientArea.height); + + if (dx !== 0 || dy !== 0) { + this.raiseEvent(remoting.BumpScroller.Events.bumpScrollStarted); + this.repeatScroll_(dx, dy, new Date().getTime()); + } +}; + +/** + * Scroll the view, and schedule a timer to do so again unless we've hit + * the edges of the screen. This timer is cancelled when the mouse moves. + * + * @param {number} dx + * @param {number} dy + * @param {number} expected The time at which we expect to be called. + * @private + */ +remoting.BumpScroller.prototype.repeatScroll_ = function(dx, dy, expected) { + /** @type {number} */ + var now = new Date().getTime(); + var timeout = 10; + var lateAdjustment = 1 + (now - expected) / timeout; + if (!this.viewport_.scroll(lateAdjustment * dx, lateAdjustment * dy)) { + this.raiseEvent(remoting.BumpScroller.Events.bumpScrollStopped); + } else { + this.bumpScrollTimer_ = window.setTimeout( + this.repeatScroll_.bind(this, dx, dy, now + timeout), timeout); + } +}; + +}()); \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.css b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.css new file mode 100644 index 000000000000..61a142a17dd6 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.css @@ -0,0 +1,40 @@ +/* Copyright 2014 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#butter-bar { + position: absolute; + top: 80px; + left: 0; + display: -webkit-box; + width: 100%; +} + +#butter-bar-dismiss img { + vertical-align: top; + opacity: 0.4; + margin-__MSG_@@bidi_start_edge__: 2px; + margin-__MSG_@@bidi_end_edge__: -12px; +} + +#butter-bar-dimiss:hover { + opacity: 0.7; +} + +#butter-bar > p { + background-color: #f9edbe; + border: 1px solid #f0c36d; + border-radius: 2px; + box-shadow: 0px 2px 4px rgba(0,0,0,0.2); + color: #222; + font-size: 12px; + padding: 4px 16px; + margin: auto; +} + +#butter-bar a { + color: inherit; + text-decoration: underline; + padding-__MSG_@@bidi_start_edge__: 2px; +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.js new file mode 100644 index 000000000000..b63db1f46117 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/butter_bar.js @@ -0,0 +1,98 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * ButterBar class that is used to show the butter bar with various + * notifications. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + */ +remoting.ButterBar = function() { + this.storageKey_ = ''; + + chrome.storage.sync.get( + [remoting.ButterBar.kSurveyStorageKey_], + this.onStateLoaded_.bind(this)); +} + +/** + * Shows butter bar with the specified |message| and updates |storageKey| after + * the bar is dismissed. + * + * @param {string} messageId + * @param {string|Array} substitutions + * @param {string} storageKey + * @private + */ +remoting.ButterBar.prototype.show_ = + function(messageId, substitutions, storageKey) { + this.storageKey_ = storageKey; + + var messageElement = document.getElementById(remoting.ButterBar.kMessageId_); + l10n.localizeElementFromTag(messageElement, messageId, substitutions, true); + var acceptLink = + /** @type{Element} */ (messageElement.getElementsByTagName('a')[0]); + acceptLink.addEventListener( + 'click', this.dismiss.bind(this, true), false); + + document.getElementById(remoting.ButterBar.kDismissId_).addEventListener( + 'click', this.dismiss.bind(this, false), false); + + document.getElementById(remoting.ButterBar.kId_).hidden = false; +} + +/** + * @param {Object} syncValues + * @private + */ +remoting.ButterBar.prototype.onStateLoaded_ = function(syncValues) { + /** @type {boolean} */ + var surveyDismissed = !!syncValues[remoting.ButterBar.kSurveyStorageKey_]; + + if (!surveyDismissed) { + this.show_(/*i18n-content*/'SURVEY_INVITATION', + ['', ''], + remoting.ButterBar.kSurveyStorageKey_); + } +}; + +/** @const @private */ +remoting.ButterBar.kId_ = 'butter-bar'; + +/** @const @private */ +remoting.ButterBar.kMessageId_ = 'butter-bar-message'; +/** @const @private */ +remoting.ButterBar.kDismissId_ = 'butter-bar-dismiss'; + +/** @const @private */ +remoting.ButterBar.kSurveyStorageKey_ = 'feedback-survey-dismissed'; + +/** + * Hide the butter bar request and record some basic information about the + * current state of the world in synced storage. This may be useful in the + * future if we want to show the request again. At the moment, the data itself + * is ignored; only its presence or absence is important. + * + * @param {boolean} accepted True if the user clicked the "accept" link; + * false if they clicked the close icon. + */ +remoting.ButterBar.prototype.dismiss = function(accepted) { + var value = {}; + value[this.storageKey_] = { + optIn: accepted, + date: new Date(), + version: chrome.runtime.getManifest().version + }; + chrome.storage.sync.set(value); + + document.getElementById(remoting.ButterBar.kId_).hidden = true; +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/callstack.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/callstack.js new file mode 100644 index 000000000000..d6e332583622 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/callstack.js @@ -0,0 +1,113 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var base = base || {}; + +/** + * A single stack-frame describing a call-site. + * + * fn: The calling function. + * url: URL component of the file name. For extensions, this will typically + * be chrome-extension:// + * file: The file containing the calling function. + * line: The line number. + * column: The column number. + * + * @typedef {{ + * fn: string, + * url: string, + * file: string, + * line: number, + * column: number + * }} + */ +base.StackFrame; + + +(function() { + +/** + * @param {Error=} opt_error If present, an Error object from which to extract + * the callstack; if not specified, the current callstack (excluding this + * constructor) will be used. + * @constructor + */ +base.Callstack = function(opt_error) { + /** @type {Array} */ + this.callstack = []; + + this.getCallstackFromError_(opt_error || new Error()); + + // If no explicit Error was specified, remove this frame from the stack. + if (!opt_error) { + this.callstack.splice(0, 1); + } +}; + +/** + * @return {string} The callstack as a newline-separated string. + */ +base.Callstack.prototype.toString = function() { + /** + * @param {base.StackFrame} frame + * @return {string} + */ + var frameToString = function(frame) { + var location = frame.file + ':' + frame.line + ':' + frame.column; + if (frame.url) { + location = frame.url + '/' + location; + } + if (frame.fn) { + location = ' (' + location + ')'; + } + return frame.fn + location; + } + + return this.callstack.map(frameToString).join('\n'); +}; + +/** + * Parse the callstack of the specified Error. + * + * @param {Error} error + * @private + */ +base.Callstack.prototype.getCallstackFromError_ = function(error) { + /** + * @param {string} frame + * @return {base.StackFrame} + */ + var stringToFrame = function(frame) { + var result = {}; + // Function name (optional) and location are separated by a space. If a + // function name is present, location is enclosed in parentheses. + var fnAndLocation = frame.split(' '); + var location = fnAndLocation.pop().replace(/[()]/g, ''); + result.fn = fnAndLocation.shift() || ''; + // Location, line and column are separated by colons. Colons are also + // used to separate the protocol and URL, so there may be more than two + // colons in the location. + var fullUrlAndLineAndCol = location.split(':'); + result.column = parseInt(fullUrlAndLineAndCol.pop(), 10); + result.line = parseInt(fullUrlAndLineAndCol.pop(), 10); + var fullUrl = fullUrlAndLineAndCol.join(':'); + // URL and file are separated by slashes. Slashes also separate the protocol + // and URL. + var urlAndFile = fullUrl.split('/'); + result.file = urlAndFile.pop(); + result.url = urlAndFile.join('/'); + return result; + }; + + var callstack = error.stack + .replace(/^\s+at\s+/gm, '') // Remove 'at' and indentation. + .split('\n'); + callstack.splice(0, 1); // Remove 'Error' + this.callstack = callstack.map(stringToFrame); +} + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting128.webp b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting128.webp new file mode 100644 index 0000000000000000000000000000000000000000..25da5023b8880653a44e2f68270c313b712316c4 GIT binary patch literal 4360 zcmZ`-RaDfCxBbn~Ly8D|h;)on0}LI5!vF%(UD8N*et-bYC?> zGZ1lf!|xvKJps`UKQh6hypmMyBFEWFIa87%=uG(7!xv5<Hq`j?7e}1)wOAFjdq^mO!_>@73ut%R|Jve}eH2b^HCv`(IVEbv&%6xj|H>UsY0Hf4Iw!#a*a~=kL=fd66fsDY&2w zstuL&D)mhb3`V|4)Pt_#ED=0WZ1jm1J?<-=w*DKDbs&0|Jgi+vN}sk``Xnw#`VYB2 za4YGOZ40;f8ai65`2s9Zn1Jy$=HXXu->vHkQ5~MdN3VrumHcXbKFLxb?Ke8thk-T~ zY*Oe0d1WT60FsoR-LGe|(Gz68{r>@HYhf10f!jZB z{2$2lfy_yegsfj~<*eVpsW6CresVmxqc|Lb)>W(7sqPWH>C_hfv~~Y5nsu;&QyWxK zW%{WncR(yTXn!-afkC8m+J&813vArtoYm~PG02B3o$^J-*)tEPvi2$I(CJA$rh&m= z>)b(l&fE!XGwe}pOv#v@o(C_v!fC)rQn*GW8>!yaWjr6qb-DdrZA;6kC5YdMPDz{Y z!&%IDq0EAKFCPCwV#I6{3!P_#RWwA=kVc@Na7E;bKDSxz4kC?xPeWL0uFgbxSWfzi zsKITi^*&rf20G^LGxc`D?P`9foE~F!oHL0N78j36Prox>j9{&;t)(FZVW67FyE&w< zSO^047QO7>8Ovr);yR8AlxN{wv}DXu-h`FN}QN|fb&ro~iA{G}^ENZ+8) z`xz_$ES$2c%I3DaW~WXTt~Z~0(4tb9aU9v!&|T9 zg2e|nj<^EqCB;E`W%KrT$vzQg&Ybul-qI;5DnjWKdxs_#2o|*`XFLj+X$ecOYP*t? zk}f#Fg6LmBsJp@qWl|zr?$dvZv}e8O0QRU$xeHJEDaVCs2?8wjTe=SOx~lHZDo{ZT zrxe~wg2>gC*0)bH!`uIer$0)Ww$)@rLY(B%qe-L9cpY3(lAcum`u*C zCSR8wsN25JkjgaKl(gv$D)CZBz&e`B+x|EZC}#D66lUSWK+;+kK8W`SJTU&R<`T}a$r6@j| z3kSh>uVD@DvmpI%p3$Y8A*FnnOr?oTKN9fpxw5ITrSrt?yQS?|gny)DMf#5LDsX7D zOtzDc$GoV`BWx?k0e|dSjT}!A&`vp39Q*b(#5mL405tKY#7OEn>AA5J1gXwy0gw}KUMoR_OXpTQ@R!{HOein^goIb@yi3(^vXiGQS8W2 zGT79c?oXrzqx2$CsjajrBA7StW>1rCJ#42@*D0jyY^_#rHVO(?szfu#I{S2zlM9X2`u-&r{+h6P_2dJ*&03d~Jz5Xj>Wh zXKhe*?3?h}V3TCP+R8`2zP(o~Z0{ajJ5)z4&!mB&1(GQPBzVXdOLr1@#;0YjD~aA? zW#?ReT9+H5_iK2j=I*w(41>fKQ?&C9*H=&Q6F0n6Oy3{2x#_4#Ey(a$uiDoAhrfHG z2mbcP4W=(VIJrlm8H2bnB6MPkVZ{@Rm=)PO)>pe8S}<8sqsW6O5LW_rt@0kMeUp-6 zp!q2p@DzlIqOP4aS|U~Q!WVjq_NhE~46(hc#Jxz^zC2vQy;muS33F+M!bzLWsgC>p zK<0d&yM_oevK;AuOC_;|_lCPJ2qx8q&Pi#>ud8^hC0s%jbZBn6NJ>&D%mO{FFPNAt zRq&@{PwFgPiY1DVn!ZX5o-DvD@4{(sJ}s0`QRcP7m{^XMS5rw&9YYk`T^HQ##1Xc| zv5&|`F92IgtFth)vkE8!foD$`=CgFd%^dlO_i8%N&VIb98SyOmeupF^6x$kgdi@-RT;YEM(dSz4XR>;U-2gtjul+z@mQ~LHOSw|-1ICMrn(FT0q8*a z_}7({LXt0nG(|OsxXjc29YqBWI(#RP&2kOk&2jbe_Iq>@8^Q?~H5y7#VJ#g7md-06 zOMSvxi_&>PprN??m@f2ey84*6OEtc*h;Tjj*w4=7#lQ&l>`R!8M0U#P`M+V-EG+$s z>VhAzIZsz#?9;gY)@x(;KQ!X4{VXL4x%vqm*a#rgTUV^qNd201|DTKPuCf_5_s zJISZ9VC#Co1TV%vkBbhdx$FDIh|QTPVwt+usrNb>w*L7dQ8QOsQ!E^}MQ)^q(A9=@bcclerZ_s!C)x|kf2CsWEn-Pnw99ibybq>*Tcbn! z*#C1|Nqix8JSa>JU>i*#no7$=U~}w)PzLkSG64t7-c&jSAX&c}mzj58LIz)EeM|Q7BxA!p<)kdvZ_zqUS*8?XBTJElYhN5_!f7HyenbMKiqBIAteoj1Y{X_q zQhIfodu=O@UmtSGi;EjR<;l32o1GO6{JFO$#AKmbV@NX@ln1k(Oy`kUjiRi4#^CWv~i@-ZDC)(L$0j8KO5qzV%U56!VS z&K^3PS;kjY1*@p27`fz?#bYYeUcPb8D^Gtg8ku5hfk%HRN zP>{VGTK8hH=gzSCqKH<00R#e#HhPJ>;T=Yaw~`*WPFs)vGYDCWRGx*CE~yS z7+B7RxOR`iQUT4nNe73KX+Z=PNI*b9;BUa;s#`g>inN=IQSW5@MX(H~q%5b6sV(Z} zcghK?7*!$LcNsHpD+|%h_5D6e&L>%Uv>KgsYO^F7HlC^4u%JOFHt;=#D(L$k*y)7H zpZOX)WTcOO@5Ec|2At8ZQBWr>K!b=DfBlVL(s8xWy_3iQjmtY@Y!xSbghsK8{%D_B zbZ8S><=V(~vCa6T+Jr-XXFTLead^0D!>`ZpAZjRH&lCfi+u5}kvdNG>eXfTqA=L+R zZ9eULQv>}Otlv@7X`;uCV`EyBp|}DPl(BlKy}A#FW*VR0BQY=Oim6SGg)Ax9-<80I zZuqFrw$yz7CHdxsY`D9c6PDY)t?Bh=u+_c174AX}CUKLO4yM7)6H43zwbeD*3NFC> zw{A(8u;!Fl7ujJ;3|31SV}I^y{gcw)Hjr2Dd2*=X^nNc0pM7RpLvq_ymW)ZBb<0#H zZG=ZiNcXm$J%)$upJ!H^`10m{Y<%c=Y8Srp}@~-IkLzfY@+z} zGh7e`pbgO_jTAQT7>lpP7ydoODBLhivDEn=K1fJHHPrbrHa8dSHfkoMICOP)3Y|(z ze0u$j%&u~ZTDx41j4?^8toM9D1eKgjO=wQ=l)NJ}NraU<@Zf~T+vA!FV53>jb{StS z#H}1jhc#LaDve%!W~VRLSL-7+W3O1Kvk!-`aXld=^Pi>Ee2?U|j9Nz!Q)i_jLgke7 z0tdgp;Ag@2yIKvnh8`(Db{uyW%jz;gGIb6OvWkX3;ymg=t79%JSjHqv#1N`|WK#0- zpsCMZ=Ws7Facyc zy+qKM1-F+K*Q$|xf!?M5=4H_-0oMNhk|&>!Hm;dijaA4RWRhKNsbdpqd$*+OXAzs| zI>TvTM(#rM^0tq!Z}Wm4N0KB&A^RKdevswLzumocdGM7eK03&sqN1X;K()9#Dxezk zjz)(l>>aY$^S9bchY9coO=!4B2 z+^52&4wr>Gt-g!R#PE6^FZ+>iV>z)q{_yj%3um_->F?6%gnVxY<8Ouz@5bScZIw87rc qzcE@xvL?knj#B@{Dv0$dJ-&%(OzU5P*sb3>9Du5lCaMl;74bhSwlV(z literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting16.webp b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting16.webp new file mode 100644 index 0000000000000000000000000000000000000000..570e8abdf42246ed37efce80ed166d342e4faca7 GIT binary patch literal 573 zcmV-D0>b@?P)nrqJn>S6fR*NtU=T%%_I2_Iu z3I*2I*8VD6L~vb~Mx!yS0IJn$&iDNrN-1`Bc9K^P6Jn%NDYDsY602&pnoFnC?Zw4K zM1)SKbBuJ@MyJ!E+wCTIs^9OQDi(_@EiL^~a*SH7Mi_>SMx&`BrIh@Rc$6H&wrv0$ z$FbDWr2Y4A+1q@E>4$(|ojgP4?m9Ees|UW7!nSR~FqD)rCSiZ8y(4_`Xi63V119Y8 zqw~PVzSkW$GUNh!40QGvEcDs$% zdO!IG{@yOzX~X8F4A)o7JpObZ*@g!zS(csqz<_Ado#y)fdb8Pl<$2z2D(>dcL>LjC zUdhms1%#=K&)xaBomgfR_uzx)c>#bLkH`B#5HQ}FaBHRrMiW?XSh;!ufQ1uVd>vi` zp!so|AP9(}XfIZ70c>n+7(O{7b?cDCF)ly75~_5{}n$0Bzh+@(qkK-00000 LNkvXXu0mjfeL@bv literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting48.webp b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/chromoting48.webp new file mode 100644 index 0000000000000000000000000000000000000000..90e7e8f003b65cc8a57bec858ea94efb3610e2b9 GIT binary patch literal 1400 zcmV-;1&8{HP)@FZsTOtH#F{w+^V0~0-Nu$0rO?<#7^+hAmm|%R+A~l-8HjPmpF!*9j z4e0|hVu2=VY@-IPH8Co_5Sr4~P`Voeg3W-!!}+AdDEux_Ew&Q9HaP`9~eV5ei(39x2m*9ow~ zvjD5|odVZ~*nD17O0(?S4MGSA$zQ4r0gN#+GBWZyrL>z6QfJqBbaXVw<|L#TJJ0i| zuC7Kf7=$Q_;CbFrh#_EbaIlRrcHXv^2NJ~!G2dr08HB@ONRou6rX~ae0SJQqW-*=t zN~xzqek;g(MJyIWBocwDs-TqG&S%In7p&IS)}jJC!K-j^m&x3RG3i@$c9S=z?_t9JfZ*D&m0%C?=~s z&x7MQ@chP`zquZ{7P4Yd2zm1uLWm*4t`-P(gSHA=F{d>HRuM&KK>F)|=Z6csPNijtGhZz_&XUKddG>oiTJ5bJ2i>V@;phTYjAG&K*N~Zsm>9Z~-&i$0II-$s2Q}l2~}>O;B0(Bp}}_wdYDa``JgJsgyl&eN0Y5a>?s`St^O;vu9idxcwgR zl!0%J;z{Gw(jxJi#&Hy3^ z@IQAFftF_>9(oi+WFYq=5Ld6lxB3gfR0kmpOt=6ECmdt<^z=Xw1ncWWIIjS+^2wDM zMCAlPfbQlhT>4?gAPxYeq7wT$yRcN%h>;0kYGTd)Sal;#9Sx$U{27$aeGEbq7V_)k z)g^Fp7&Ope%fTTF@97QKE%epYHDjWM5*`;1mv1a4$D#7w4{%*<#OaH`l?j5|_tvh< z;{+Ywa2SsUk*?_gKrG}<#VB#vmOKFCb0eh`k|aeWNqT8uU|`4?Yd6S@@#VW&zAv8G zht@l*5H*Itu@)rjkD%{s0wt3@jscJ}z^6ZR=zIAHd}YlLlYe9p*TG4*Y-0n!(9lrc zr`RjY&C@3%YxqN(6{ zd*bFDDe?e;W=kFbn8POVa*VnbvJzgjooK2;MC9Hy98+zzMY_2TTFY7Z6(g2Q5K{+K26l13<%mhNllRi1D9HUSzcyUsVu!!1NbWe}Dg+ zAP7zy)e|-o*vq#hS(azp+uQBGr>w)sfFwyDdX8=rbgRh&Kr|Y4{n(cE`1JPnzTx-# z&-wlS>Ou&(A>TN&Pf?V)m6erHS6A1Ua5{VUu!lYTKky$3Z9j~99AKCL0000} A promise that will resolve when the plugin is + * initialized or reject if it fails. + */ +remoting.ClientPlugin.prototype.initialize = function() {}; + +/** + * @param {remoting.Host} host The host to connect to. + * @param {string} localJid Local jid. + * @param {remoting.CredentialsProvider} credentialsProvider + */ +remoting.ClientPlugin.prototype.connect = + function(host, localJid, credentialsProvider) {}; + +/** + * @param {number} key The keycode to inject. + * @param {boolean} down True for press; false for a release. + */ +remoting.ClientPlugin.prototype.injectKeyEvent = + function(key, down) {}; + +/** + * Sends a key combination to the host, by sending down events for + * the given keys, followed by up events in reverse order. + * + * @param {Array} keys Key codes to be sent. + * @return {void} Nothing. + */ +remoting.ClientPlugin.prototype.injectKeyCombination = function(keys) {}; + +/** + * Sets and stores the key remapping setting for the current host. + * + * @param {!Object} remappings Key mappings, specified as {from: to}, where + * |from| and |to| are both USB keycodes, |from| is a decimal representation + * (because object keys must be strings) and |to| is a number. + */ +remoting.ClientPlugin.prototype.setRemapKeys = function(remappings) {}; + +/** + * @param {number} from + * @param {number} to + */ +remoting.ClientPlugin.prototype.remapKey = function(from, to) {}; + +/** + * Release all keys currently being pressed. + */ +remoting.ClientPlugin.prototype.releaseAllKeys = function() {}; + +/** + * @param {string} iq + */ +remoting.ClientPlugin.prototype.onIncomingIq = function(iq) {}; + +/** + * @param {remoting.ClientSession.Capability} capability + * @return {boolean} True if the capability has been negotiated between + * the client and host. + */ +remoting.ClientPlugin.prototype.hasCapability = function(capability) {}; + +/** + * Sends a clipboard item to the host. + * + * @param {string} mimeType The MIME type of the clipboard item. + * @param {string} item The clipboard item. + */ +remoting.ClientPlugin.prototype.sendClipboardItem = + function(mimeType, item) {}; + +/** + * Notifies the plugin whether to send touch events to the host. + * + * @param {boolean} enable True if touch events should be sent. + */ +remoting.ClientPlugin.prototype.enableTouchEvents = function(enable) {}; + +/** + * Request that this client be paired with the current host. + * + * @param {string} clientName The human-readable name of the client. + * @param {function(string, string):void} onDone Callback to receive the + * client id and shared secret when they are available. + */ +remoting.ClientPlugin.prototype.requestPairing = + function(clientName, onDone) {}; + +/** + * Allows automatic mouse-lock. + */ +remoting.ClientPlugin.prototype.allowMouseLock = function() {}; + +/** + * @param {boolean} pause True to pause the audio stream; false to resume it. + */ +remoting.ClientPlugin.prototype.pauseAudio = function(pause) {}; + +/** + * @param {boolean} pause True to pause the video stream; false to resume it. + */ +remoting.ClientPlugin.prototype.pauseVideo = function(pause) {}; + +/** + * @return {remoting.ClientSession.PerfStats} A summary of the connection + * performance. + */ +remoting.ClientPlugin.prototype.getPerfStats = function() {}; + +/** + * @param {remoting.ClientPlugin.ConnectionEventHandler} handler + */ +remoting.ClientPlugin.prototype.setConnectionEventHandler = + function(handler) {}; + +/** + * @param {function(string, number, number):void} handler Callback for + * processing large mouse cursor images. The first parameter is a data: + * URL encoding the mouse cursor; the second and third parameters are + * the cursor hotspot's x- and y-coordinates, respectively. + */ +remoting.ClientPlugin.prototype.setMouseCursorHandler = function(handler) {}; + +/** + * @param {function(string, string):void} handler Callback for processing + * clipboard data injected from the host. The first parameter is the mime + * type and the second parameter is the actual data. + */ +remoting.ClientPlugin.prototype.setClipboardHandler = function(handler) {}; + +/** + * @param {function({rects:Array>}):void|null} handler Callback + * to receive dirty region information for each video frame, for debugging. + */ +remoting.ClientPlugin.prototype.setDebugDirtyRegionHandler = + function(handler) {}; + +/** + * @interface + */ +remoting.ClientPlugin.ConnectionEventHandler = function() {}; + +/** + * @param {string} iq + */ +remoting.ClientPlugin.ConnectionEventHandler.prototype.onOutgoingIq = + function(iq) {}; + +/** + * @param {string} msg + */ +remoting.ClientPlugin.ConnectionEventHandler.prototype.onDebugMessage = + function(msg) {}; + +/** + * @param {remoting.ClientSession.State} status The plugin's status. + * @param {remoting.ClientSession.ConnectionError} error The plugin's error + * state, if any. + */ +remoting.ClientPlugin.ConnectionEventHandler.prototype. + onConnectionStatusUpdate = function(status, error) {}; + +/** + * @param {string} channel The channel name. + * @param {string} connectionType The new connection type. + */ +remoting.ClientPlugin.ConnectionEventHandler.prototype.onRouteChanged = + function(channel, connectionType) {}; + +/** + * @param {boolean} ready True if the connection is ready. + */ +remoting.ClientPlugin.ConnectionEventHandler.prototype.onConnectionReady = + function(ready) {}; + +/** Called when the first video frame is received */ +remoting.ClientPlugin.ConnectionEventHandler.prototype.onFirstFrameReceived = + function() {}; + +/** + * @interface + */ +remoting.ClientPluginFactory = function() {}; + +/** + * @param {Element} container The container for the embed element. + * @param {Array} requiredCapabilities + * @return {remoting.ClientPlugin} A new client plugin instance. + */ +remoting.ClientPluginFactory.prototype.createPlugin = + function(container, requiredCapabilities) {}; + +/** + * Preload the plugin to make instantiation faster when the user tries + * to connect. + */ +remoting.ClientPluginFactory.prototype.preloadPlugin = function() {}; + +/** + * @type {remoting.ClientPluginFactory} + */ +remoting.ClientPlugin.factory = null; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_host_desktop_impl.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_host_desktop_impl.js new file mode 100644 index 000000000000..1a8d06f187e2 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_host_desktop_impl.js @@ -0,0 +1,89 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Provides an interface to manage the Host Desktop of a remoting session. + */ + +var remoting = remoting || {}; +remoting.ClientPlugin = remoting.ClientPlugin || {}; + +(function() { + +'use strict'; + +/** + * @param {remoting.ClientPlugin} plugin + * @param {function(Object):void} postMessageCallback Callback to post a message + * to the Client Plugin. + * + * @implements {remoting.HostDesktop} + * @extends {base.EventSourceImpl} + * @constructor + */ +remoting.ClientPlugin.HostDesktopImpl = function(plugin, postMessageCallback) { + base.inherits(this, base.EventSourceImpl); + /** @private */ + this.plugin_ = plugin; + /** @private */ + this.width_ = 0; + /** @private */ + this.height_ = 0; + /** @private */ + this.xDpi_ = 96; + /** @private */ + this.yDpi_ = 96; + /** @private */ + this.postMessageCallback_ = postMessageCallback; + + this.defineEvents(base.values(remoting.HostDesktop.Events)); +}; + +/** @return {{width:number, height:number, xDpi:number, yDpi:number}} */ +remoting.ClientPlugin.HostDesktopImpl.prototype.getDimensions = function() { + return { + width: this.width_, + height: this.height_, + xDpi: this.xDpi_, + yDpi: this.yDpi_ + }; +}; + +/** + * @param {number} width + * @param {number} height + * @param {number} deviceScale + */ +remoting.ClientPlugin.HostDesktopImpl.prototype.resize = function( + width, height, deviceScale) { + var dpi = Math.floor(deviceScale * 96); + this.postMessageCallback_({ + method: 'notifyClientResolution', + data: { + width: Math.floor(width * deviceScale), + height: Math.floor(height * deviceScale), + x_dpi: dpi, + y_dpi: dpi + } + }); +}; + +/** + * This function is called by |this.plugin_| when the size of the host + * desktop is changed. + * + * @param {remoting.ClientPluginMessage} message + */ +remoting.ClientPlugin.HostDesktopImpl.prototype.onSizeUpdated = function( + message) { + this.width_ = base.getNumberAttr(message.data, 'width'); + this.height_ = base.getNumberAttr(message.data, 'height'); + this.xDpi_ = base.getNumberAttr(message.data, 'x_dpi', 96); + this.yDpi_ = base.getNumberAttr(message.data, 'y_dpi', 96); + this.raiseEvent(remoting.HostDesktop.Events.sizeChanged, + this.getDimensions()); +}; + +}()); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_impl.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_impl.js new file mode 100644 index 000000000000..da327d813838 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_plugin_impl.js @@ -0,0 +1,770 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class that wraps low-level details of interacting with the client plugin. + * + * This abstracts a element and controls the plugin which does + * the actual remoting work. It also handles differences between + * client plugins versions when it is necessary. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** @constructor */ +remoting.ClientPluginMessage = function() { + /** @type {string} */ + this.method = ''; + + /** @type {Object<*>} */ + this.data = {}; +}; + +/** + * @param {Element} container The container for the embed element. + * @param {Array} capabilities The set of capabilties that the + * session must support for this application. + * @constructor + * @implements {remoting.ClientPlugin} + */ +remoting.ClientPluginImpl = function(container, capabilities) { + // TODO(kelvinp): Hack to remove all plugin elements as our current code does + // not handle connection cancellation properly. + container.innerText = ''; + this.plugin_ = remoting.ClientPluginImpl.createPluginElement_(); + this.plugin_.id = 'session-client-plugin'; + container.appendChild(this.plugin_); + + /** @private {Array} */ + this.capabilities_ = capabilities; + + /** @private {remoting.ClientPlugin.ConnectionEventHandler} */ + this.connectionEventHandler_ = null; + + /** @private {?function(string, number, number)} */ + this.updateMouseCursorImage_ = base.doNothing; + /** @private {?function(string, string)} */ + this.updateClipboardData_ = base.doNothing; + /** @private {?function(string)} */ + this.onCastExtensionHandler_ = base.doNothing; + /** @private {?function({rects:Array>}):void} */ + this.debugRegionHandler_ = null; + + /** @private {number} */ + this.pluginApiVersion_ = -1; + /** @private {Array} */ + this.pluginApiFeatures_ = []; + /** @private {number} */ + this.pluginApiMinVersion_ = -1; + /** + * Capabilities that are negotiated between the client and the host. + * @private {Array} + */ + this.hostCapabilities_ = null; + /** @private {base.Deferred} */ + this.onInitializedDeferred_ = new base.Deferred(); + /** @private {function(string, string):void} */ + this.onPairingComplete_ = function(clientId, sharedSecret) {}; + /** @private {remoting.ClientSession.PerfStats} */ + this.perfStats_ = new remoting.ClientSession.PerfStats(); + + /** @type {remoting.ClientPluginImpl} */ + var that = this; + + this.eventHooks_ = new base.Disposables( + new base.DomEventHook( + this.plugin_, 'message', this.handleMessage_.bind(this), false), + new base.DomEventHook( + this.plugin_, 'crash', this.onPluginCrashed_.bind(this), false), + new base.DomEventHook( + this.plugin_, 'error', this.onPluginLoadError_.bind(this), false)); + /** @private */ + this.hostDesktop_ = new remoting.ClientPlugin.HostDesktopImpl( + this, this.postMessage_.bind(this)); + + /** @private */ + this.extensions_ = new remoting.ProtocolExtensionManager( + this.sendClientMessage_.bind(this)); + + /** @private {remoting.CredentialsProvider} */ + this.credentials_ = null; + + /** @private {!Object} */ + this.keyRemappings_ = {}; +}; + +/** + * Creates plugin element without adding it to a container. + * + * @return {HTMLEmbedElement} Plugin element + */ +remoting.ClientPluginImpl.createPluginElement_ = function() { + var plugin = + /** @type {HTMLEmbedElement} */ (document.createElement('embed')); + plugin.src = 'remoting_client_pnacl.nmf'; + plugin.type = 'application/x-pnacl'; + plugin.width = '0'; + plugin.height = '0'; + plugin.tabIndex = 0; // Required, otherwise focus() doesn't work. + return plugin; +}; + +/** + * @param {remoting.ClientPlugin.ConnectionEventHandler} handler + */ +remoting.ClientPluginImpl.prototype.setConnectionEventHandler = + function(handler) { + this.connectionEventHandler_ = handler; +}; + +/** + * @param {function(string, number, number):void} handler + */ +remoting.ClientPluginImpl.prototype.setMouseCursorHandler = function(handler) { + this.updateMouseCursorImage_ = handler; +}; + +/** + * @param {function(string, string):void} handler + */ +remoting.ClientPluginImpl.prototype.setClipboardHandler = function(handler) { + this.updateClipboardData_ = handler; +}; + +/** + * @param {?function({rects:Array>}):void} handler + */ +remoting.ClientPluginImpl.prototype.setDebugDirtyRegionHandler = + function(handler) { + this.debugRegionHandler_ = handler; + this.plugin_.postMessage(JSON.stringify( + { method: 'enableDebugRegion', data: { enable: handler != null } })); +}; + +/** + * @param {Event} event Message from the plugin. + * @private + */ +remoting.ClientPluginImpl.prototype.handleMessage_ = function(event) { + var rawMessage = + /** @type {remoting.ClientPluginMessage|string} */ (event.data); + var message = + /** @type {remoting.ClientPluginMessage} */ + ((typeof(rawMessage) == 'string') ? base.jsonParseSafe(rawMessage) + : rawMessage); + if (!message || !('method' in message) || !('data' in message)) { + console.error('Received invalid message from the plugin:', rawMessage); + return; + } + + try { + this.handleMessageMethod_(message); + } catch(/** @type {*} */ e) { + console.error(e); + } +}; + +/** @private */ +remoting.ClientPluginImpl.prototype.onPluginCrashed_ = function(event) { + // If the plugin is initialized, there should be a connection event handler + // and we should report the crash through it. Otherwise, we should reject the + // initialization promise. + if (this.connectionEventHandler_) { + this.connectionEventHandler_.onConnectionStatusUpdate( + remoting.ClientSession.State.FAILED, + remoting.ClientSession.ConnectionError.NACL_PLUGIN_CRASHED); + } else { + this.onInitializedDeferred_.reject( + new remoting.Error(remoting.Error.Tag.NACL_PLUGIN_CRASHED)); + } + console.error('NaCl Module crashed. '); +}; + +/** @private */ +remoting.ClientPluginImpl.prototype.onPluginLoadError_ = function() { + console.error('Failed to load plugin : ' + this.plugin_.lastError); + this.onInitializedDeferred_.reject( + new remoting.Error( + remoting.Error.Tag.MISSING_PLUGIN, this.plugin_.lastError)); +}; + +/** + * @param {remoting.ClientPluginMessage} + * message Parsed message from the plugin. + * @private + */ +remoting.ClientPluginImpl.prototype.handleMessageMethod_ = function(message) { + /** + * Splits a string into a list of words delimited by spaces. + * @param {string} str String that should be split. + * @return {!Array} List of words. + */ + var tokenize = function(str) { + /** @type {Array} */ + var tokens = str.match(/\S+/g); + return tokens ? tokens : []; + }; + + if (this.connectionEventHandler_) { + var handler = this.connectionEventHandler_; + + if (message.method == 'sendOutgoingIq') { + handler.onOutgoingIq(base.getStringAttr(message.data, 'iq')); + + } else if (message.method == 'onConnectionStatus') { + var stateString = base.getStringAttr(message.data, 'state'); + var state = remoting.ClientSession.State.fromString(stateString); + var error = remoting.ClientSession.ConnectionError.fromString( + base.getStringAttr(message.data, 'error')); + + // Delay firing the CONNECTED event until the capabilities are negotiated, + // TODO(kelvinp): Fix the client plugin to fire capabilities and the + // connected event in the same message. + if (state === remoting.ClientSession.State.CONNECTED) { + console.assert(this.hostCapabilities_ === null, + 'Capabilities should only be set after the session is connected'); + return; + } + handler.onConnectionStatusUpdate(state, error); + + } else if (message.method == 'onRouteChanged') { + var channel = base.getStringAttr(message.data, 'channel'); + var connectionType = base.getStringAttr(message.data, 'connectionType'); + handler.onRouteChanged(channel, connectionType); + + } else if (message.method == 'onConnectionReady') { + var ready = base.getBooleanAttr(message.data, 'ready'); + handler.onConnectionReady(ready); + + } else if (message.method == 'setCapabilities') { + var capabilityString = base.getStringAttr(message.data, 'capabilities'); + console.log('plugin: setCapabilities: [' + capabilityString + ']'); + + console.assert(this.hostCapabilities_ === null, + 'setCapabilities() should only be called once.'); + this.hostCapabilities_ = tokenize(capabilityString); + + handler.onConnectionStatusUpdate( + remoting.ClientSession.State.CONNECTED, + remoting.ClientSession.ConnectionError.NONE); + this.extensions_.start(); + + } else if (message.method == 'onFirstFrameReceived') { + handler.onFirstFrameReceived(); + + } + } + + if (message.method == 'hello') { + this.onInitializedDeferred_.resolve(); + } else if (message.method == 'onDesktopSize') { + this.hostDesktop_.onSizeUpdated(message); + } else if (message.method == 'onPerfStats') { + // Return value is ignored. These calls will throw an error if the value + // is not a number. + base.getNumberAttr(message.data, 'videoBandwidth'); + base.getNumberAttr(message.data, 'videoFrameRate'); + base.getNumberAttr(message.data, 'captureLatency'); + base.getNumberAttr(message.data, 'encodeLatency'); + base.getNumberAttr(message.data, 'decodeLatency'); + base.getNumberAttr(message.data, 'renderLatency'); + base.getNumberAttr(message.data, 'roundtripLatency'); + this.perfStats_ = + /** @type {remoting.ClientSession.PerfStats} */ (message.data); + + } else if (message.method == 'injectClipboardItem') { + var mimetype = base.getStringAttr(message.data, 'mimeType'); + var item = base.getStringAttr(message.data, 'item'); + this.updateClipboardData_(mimetype, item); + + } else if (message.method == 'fetchPin') { + // The pairingSupported value in the dictionary indicates whether both + // client and host support pairing. If the client doesn't support pairing, + // then the value won't be there at all, so give it a default of false. + var pairingSupported = base.getBooleanAttr(message.data, 'pairingSupported', + false); + this.credentials_.getPIN(pairingSupported).then( + this.onPinFetched_.bind(this) + ); + + } else if (message.method == 'fetchThirdPartyToken') { + var tokenUrl = base.getStringAttr(message.data, 'tokenUrl'); + var hostPublicKey = base.getStringAttr(message.data, 'hostPublicKey'); + var scope = base.getStringAttr(message.data, 'scope'); + this.credentials_.getThirdPartyToken(tokenUrl, hostPublicKey, scope).then( + this.onThirdPartyTokenFetched_.bind(this) + ); + } else if (message.method == 'pairingResponse') { + var clientId = base.getStringAttr(message.data, 'clientId'); + var sharedSecret = base.getStringAttr(message.data, 'sharedSecret'); + this.onPairingComplete_(clientId, sharedSecret); + + } else if (message.method == 'unsetCursorShape') { + this.updateMouseCursorImage_('', 0, 0); + + } else if (message.method == 'setCursorShape') { + var width = base.getNumberAttr(message.data, 'width'); + var height = base.getNumberAttr(message.data, 'height'); + var hotspotX = base.getNumberAttr(message.data, 'hotspotX'); + var hotspotY = base.getNumberAttr(message.data, 'hotspotY'); + var srcArrayBuffer = base.getObjectAttr(message.data, 'data'); + + var canvas = + /** @type {HTMLCanvasElement} */ (document.createElement('canvas')); + canvas.width = width; + canvas.height = height; + + var context = + /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d')); + var imageData = context.getImageData(0, 0, width, height); + console.assert(srcArrayBuffer instanceof ArrayBuffer, + '|srcArrayBuffer| is not an ArrayBuffer.'); + var src = new Uint8Array(/** @type {ArrayBuffer} */(srcArrayBuffer)); + var dest = imageData.data; + for (var i = 0; i < /** @type {number} */(dest.length); i += 4) { + dest[i] = src[i + 2]; + dest[i + 1] = src[i + 1]; + dest[i + 2] = src[i]; + dest[i + 3] = src[i + 3]; + } + + context.putImageData(imageData, 0, 0); + this.updateMouseCursorImage_(canvas.toDataURL(), hotspotX, hotspotY); + + } else if (message.method == 'onDebugRegion') { + if (this.debugRegionHandler_) { + this.debugRegionHandler_( + /** @type {{rects: Array<(Array)>}} **/(message.data)); + } + } else if (message.method == 'extensionMessage') { + var extMsgType = base.getStringAttr(message.data, 'type'); + var extMsgData = base.getStringAttr(message.data, 'data'); + this.extensions_.onProtocolExtensionMessage(extMsgType, extMsgData); + + } +}; + +/** + * Deletes the plugin. + */ +remoting.ClientPluginImpl.prototype.dispose = function() { + base.dispose(this.eventHooks_); + this.eventHooks_ = null; + + if (this.plugin_) { + this.plugin_.parentNode.removeChild(this.plugin_); + this.plugin_ = null; + } + + base.dispose(this.extensions_); + this.extensions_ = null; + this.connectionEventHandler_ = null; +}; + +/** + * @return {HTMLEmbedElement} HTML element that corresponds to the plugin. + */ +remoting.ClientPluginImpl.prototype.element = function() { + return this.plugin_; +}; + +/** + * @override {remoting.ClientPlugin} + */ +remoting.ClientPluginImpl.prototype.initialize = function() { + // If Nacl is disabled, we won't receive any error events, rejecting the + // promise immediately. + if (!base.isNaclEnabled()) { + return Promise.reject(new remoting.Error(remoting.Error.Tag.NACL_DISABLED)); + } + return this.onInitializedDeferred_.promise(); +}; + +/** + * @param {remoting.ClientSession.Capability} capability The capability to test + * for. + * @return {boolean} True if the capability has been negotiated between + * the client and host. + */ +remoting.ClientPluginImpl.prototype.hasCapability = function(capability) { + return this.hostCapabilities_ !== null && + this.hostCapabilities_.indexOf(capability) > -1; +}; + +/** + * @param {string} iq Incoming IQ stanza. + */ +remoting.ClientPluginImpl.prototype.onIncomingIq = function(iq) { + if (this.plugin_ && this.plugin_.postMessage) { + this.plugin_.postMessage(JSON.stringify( + { method: 'incomingIq', data: { iq: iq } })); + } else { + // plugin.onIq may not be set after the plugin has been shut + // down. Particularly this happens when we receive response to + // session-terminate stanza. + console.warn('plugin.onIq is not set so dropping incoming message.'); + } +}; + +/** + * @param {remoting.Host} host The host to connect to. + * @param {string} localJid Local jid. + * @param {remoting.CredentialsProvider} credentialsProvider + */ +remoting.ClientPluginImpl.prototype.connect = function(host, localJid, + credentialsProvider) { + remoting.experiments.get().then(this.connectWithExperiments_.bind( + this, host, localJid, credentialsProvider)); +}; + +/** + * @param {remoting.Host} host The host to connect to. + * @param {string} localJid Local jid. + * @param {remoting.CredentialsProvider} credentialsProvider + * @param {Array.} experiments List of enabled experiments. + * @private + */ +remoting.ClientPluginImpl.prototype.connectWithExperiments_ = function( + host, localJid, credentialsProvider, experiments) { + var keyFilter = ''; + if (remoting.platformIsMac()) { + keyFilter = 'mac'; + } else if (remoting.platformIsChromeOS()) { + keyFilter = 'cros'; + } else if (remoting.platformIsWindows()) { + keyFilter = 'windows'; + } + + this.plugin_.postMessage(JSON.stringify( + { method: 'delegateLargeCursors', data: {} })); + this.credentials_ = credentialsProvider; + this.useAsyncPinDialog_(); + this.plugin_.postMessage(JSON.stringify({ + method: 'connect', + data: { + hostId: host.hostId, + hostJid: host.jabberId, + hostPublicKey: host.publicKey, + localJid: localJid, + sharedSecret: '', + capabilities: this.capabilities_.join(" "), + clientPairingId: credentialsProvider.getPairingInfo().clientId, + clientPairedSecret: credentialsProvider.getPairingInfo().sharedSecret, + keyFilter: keyFilter, + experiments: experiments.join(" ") + } + })); +}; + +/** + * Release all currently pressed keys. + */ +remoting.ClientPluginImpl.prototype.releaseAllKeys = function() { + this.plugin_.postMessage(JSON.stringify( + { method: 'releaseAllKeys', data: {} })); +}; + +/** + * Sets and stores the key remapping setting for the current host. + * + * @param {!Object} remappings + */ +remoting.ClientPluginImpl.prototype.setRemapKeys = + function(remappings) { + // Cancel any existing remappings and apply the new ones. + this.applyRemapKeys_(this.keyRemappings_, false); + this.applyRemapKeys_(remappings, true); + this.keyRemappings_ = /** @type {!Object} */ (base.deepCopy(remappings)); +}; + +/** + * Applies the configured key remappings to the session, or resets them. + * + * @param {!Object} remappings + * @param {boolean} apply True to apply remappings, false to cancel them. + * @private + */ +remoting.ClientPluginImpl.prototype.applyRemapKeys_ = + function(remappings, apply) { + for (var i in remappings) { + var from = parseInt(i, 10); + var to = parseInt(remappings[i], 10); + if (apply) { + console.log('remapKey 0x' + from.toString(16) + '>0x' + to.toString(16)); + this.remapKey(from, to); + } else { + console.log('cancel remapKey 0x' + from.toString(16)); + this.remapKey(from, from); + } + } +}; + +/** + * Sends a key combination to the remoting host, by sending down events for + * the given keys, followed by up events in reverse order. + * + * @param {Array} keys Key codes to be sent. + * @return {void} Nothing. + */ +remoting.ClientPluginImpl.prototype.injectKeyCombination = + function(keys) { + for (var i = 0; i < keys.length; i++) { + this.injectKeyEvent(keys[i], true); + } + for (var i = 0; i < keys.length; i++) { + this.injectKeyEvent(keys[i], false); + } +}; + +/** + * Send a key event to the host. + * + * @param {number} usbKeycode The USB-style code of the key to inject. + * @param {boolean} pressed True to inject a key press, False for a release. + */ +remoting.ClientPluginImpl.prototype.injectKeyEvent = + function(usbKeycode, pressed) { + this.plugin_.postMessage(JSON.stringify( + { method: 'injectKeyEvent', data: { + 'usbKeycode': usbKeycode, + 'pressed': pressed} + })); +}; + +/** + * Remap one USB keycode to another in all subsequent key events. + * + * @param {number} fromKeycode The USB-style code of the key to remap. + * @param {number} toKeycode The USB-style code to remap the key to. + */ +remoting.ClientPluginImpl.prototype.remapKey = + function(fromKeycode, toKeycode) { + this.plugin_.postMessage(JSON.stringify( + { method: 'remapKey', data: { + 'fromKeycode': fromKeycode, + 'toKeycode': toKeycode} + })); +}; + +/** + * Enable/disable redirection of the specified key to the web-app. + * + * @param {number} keycode The USB-style code of the key. + * @param {Boolean} trap True to enable trapping, False to disable. + */ +remoting.ClientPluginImpl.prototype.trapKey = function(keycode, trap) { + this.plugin_.postMessage(JSON.stringify( + { method: 'trapKey', data: { + 'keycode': keycode, + 'trap': trap} + })); +}; + +/** + * Returns an associative array with a set of stats for this connecton. + * + * @return {remoting.ClientSession.PerfStats} The connection statistics. + */ +remoting.ClientPluginImpl.prototype.getPerfStats = function() { + return this.perfStats_; +}; + +/** + * Sends a clipboard item to the host. + * + * @param {string} mimeType The MIME type of the clipboard item. + * @param {string} item The clipboard item. + */ +remoting.ClientPluginImpl.prototype.sendClipboardItem = + function(mimeType, item) { + this.plugin_.postMessage(JSON.stringify( + { method: 'sendClipboardItem', + data: { mimeType: mimeType, item: item }})); +}; + +/** + * Notifies the plugin whether to send touch events to the host. + * + * @param {boolean} enable True if touch events should be sent. + */ +remoting.ClientPluginImpl.prototype.enableTouchEvents = function(enable) { + this.plugin_.postMessage( + JSON.stringify({method: 'enableTouchEvents', data: {'enable': enable}})); +}; + +/** + * Notifies the host that the client has the specified size and pixel density. + * + * @param {number} width The available client width in DIPs. + * @param {number} height The available client height in DIPs. + * @param {number} device_scale The number of device pixels per DIP. + */ +remoting.ClientPluginImpl.prototype.notifyClientResolution = + function(width, height, device_scale) { + this.hostDesktop_.resize(width, height, device_scale); +}; + +/** + * Requests that the host pause or resume sending video updates. + * + * @param {boolean} pause True to suspend video updates, false otherwise. + */ +remoting.ClientPluginImpl.prototype.pauseVideo = + function(pause) { + this.plugin_.postMessage(JSON.stringify( + { method: 'videoControl', data: { pause: pause }})); +}; + +/** + * Requests that the host pause or resume sending audio updates. + * + * @param {boolean} pause True to suspend audio updates, false otherwise. + */ +remoting.ClientPluginImpl.prototype.pauseAudio = + function(pause) { + this.plugin_.postMessage(JSON.stringify( + { method: 'pauseAudio', data: { pause: pause }})); +}; + +/** + * Requests that the host configure the video codec for lossless encode. + * + * @param {boolean} wantLossless True to request lossless encoding. + */ +remoting.ClientPluginImpl.prototype.setLosslessEncode = + function(wantLossless) { + this.plugin_.postMessage(JSON.stringify( + { method: 'videoControl', data: { losslessEncode: wantLossless }})); +}; + +/** + * Requests that the host configure the video codec for lossless color. + * + * @param {boolean} wantLossless True to request lossless color. + */ +remoting.ClientPluginImpl.prototype.setLosslessColor = + function(wantLossless) { + this.plugin_.postMessage(JSON.stringify( + { method: 'videoControl', data: { losslessColor: wantLossless }})); +}; + +/** + * Called when a PIN is obtained from the user. + * + * @param {string} pin The PIN. + * @private + */ +remoting.ClientPluginImpl.prototype.onPinFetched_ = + function(pin) { + this.plugin_.postMessage(JSON.stringify( + { method: 'onPinFetched', data: { pin: pin }})); +}; + +/** + * Tells the plugin to ask for the PIN asynchronously. + * @private + */ +remoting.ClientPluginImpl.prototype.useAsyncPinDialog_ = + function() { + this.plugin_.postMessage(JSON.stringify( + { method: 'useAsyncPinDialog', data: {} })); +}; + +/** + * Allows automatic mouse-lock. + */ +remoting.ClientPluginImpl.prototype.allowMouseLock = function() { + this.plugin_.postMessage(JSON.stringify( + { method: 'allowMouseLock', data: {} })); +}; + +/** + * Sets the third party authentication token and shared secret. + * + * @param {remoting.ThirdPartyToken} token + * @private + */ +remoting.ClientPluginImpl.prototype.onThirdPartyTokenFetched_ = function( + token) { + this.plugin_.postMessage(JSON.stringify( + { method: 'onThirdPartyTokenFetched', + data: { token: token.token, sharedSecret: token.secret}})); +}; + +/** + * Request pairing with the host for PIN-less authentication. + * + * @param {string} clientName The human-readable name of the client. + * @param {function(string, string):void} onDone, Callback to receive the + * client id and shared secret when they are available. + */ +remoting.ClientPluginImpl.prototype.requestPairing = + function(clientName, onDone) { + this.onPairingComplete_ = onDone; + this.plugin_.postMessage(JSON.stringify( + { method: 'requestPairing', data: { clientName: clientName } })); +}; + +/** + * Send an extension message to the host. + * + * @param {string} type The message type. + * @param {string} message The message payload. + * @private + */ +remoting.ClientPluginImpl.prototype.sendClientMessage_ = + function(type, message) { + this.plugin_.postMessage(JSON.stringify( + { method: 'extensionMessage', + data: { type: type, data: message } })); + +}; + +remoting.ClientPluginImpl.prototype.hostDesktop = function() { + return this.hostDesktop_; +}; + +remoting.ClientPluginImpl.prototype.extensions = function() { + return this.extensions_; +}; + +/** + * Callback passed to submodules to post a message to the plugin. + * + * @param {Object} message + * @private + */ +remoting.ClientPluginImpl.prototype.postMessage_ = function(message) { + if (this.plugin_ && this.plugin_.postMessage) { + this.plugin_.postMessage(JSON.stringify(message)); + } +}; + +/** + * @constructor + * @implements {remoting.ClientPluginFactory} + */ +remoting.DefaultClientPluginFactory = function() {}; + +/** + * @param {Element} container + * @param {Array} capabilities + * @return {remoting.ClientPlugin} + */ +remoting.DefaultClientPluginFactory.prototype.createPlugin = + function(container, capabilities) { + return new remoting.ClientPluginImpl(container, + capabilities); +}; + +remoting.DefaultClientPluginFactory.prototype.preloadPlugin = function() { + var plugin = remoting.ClientPluginImpl.createPluginElement_(); + plugin.addEventListener( + 'loadend', function() { document.body.removeChild(plugin); }, false); + document.body.appendChild(plugin); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session.js new file mode 100644 index 000000000000..a1a940d95824 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session.js @@ -0,0 +1,707 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class handling creation and teardown of a remoting client session. + * + * The ClientSession class controls lifetime of the client plugin + * object and provides the plugin with the functionality it needs to + * establish connection, e.g. delivers incoming/outgoing signaling + * messages. + * + * This class should not access the plugin directly, instead it should + * do it through ClientPlugin class which abstracts plugin version + * differences. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @param {remoting.ClientPlugin} plugin + * @param {remoting.SignalStrategy} signalStrategy Signal strategy. + * @param {remoting.SessionLogger} logger + * @param {remoting.ClientSession.EventHandler} listener + * + * @constructor + * @extends {base.EventSourceImpl} + * @implements {base.Disposable} + * @implements {remoting.ClientPlugin.ConnectionEventHandler} + */ +remoting.ClientSession = function( + plugin, signalStrategy, logger, listener) { + base.inherits(this, base.EventSourceImpl); + + /** @private */ + this.state_ = remoting.ClientSession.State.INITIALIZING; + + /** @private {!remoting.Error} */ + this.error_ = remoting.Error.none(); + + /** @private {remoting.Host} */ + this.host_ = null; + + /** @private {remoting.CredentialsProvider} */ + this.credentialsProvider_ = null; + + /** @private */ + this.sessionId_ = ''; + + /** @private */ + this.listener_ = listener; + + /** @private */ + this.hasReceivedFrame_ = false; + + /** @private */ + this.logger_ = logger; + + /** @private */ + this.signalStrategy_ = signalStrategy; + + var state = this.signalStrategy_.getState(); + console.assert(state == remoting.SignalStrategy.State.CONNECTED, + 'ClientSession ctor called in state ' + state + '.'); + this.signalStrategy_.setIncomingStanzaCallback( + this.onIncomingMessage_.bind(this)); + + /** @private {remoting.FormatIq} */ + this.iqFormatter_ = null; + + /** @private {remoting.XmppErrorCache} */ + this.xmppErrorCache_ = new remoting.XmppErrorCache(); + + + /** @private {remoting.ClientPlugin} */ + this.plugin_ = plugin; + plugin.setConnectionEventHandler(this); + + /** @private */ + this.connectedDisposables_ = new base.Disposables(); + + this.defineEvents(Object.keys(remoting.ClientSession.Events)); +}; + +/** @enum {string} */ +remoting.ClientSession.Events = { + videoChannelStateChanged: 'videoChannelStateChanged' +}; + +/** + * @interface + * [START]-------> [onConnected] ------> [onDisconnected] + * | + * |-----> [OnConnectionFailed] + * + */ +remoting.ClientSession.EventHandler = function() {}; + +/** + * Called when the connection failed before it is connected. + * + * @param {!remoting.Error} error + */ +remoting.ClientSession.EventHandler.prototype.onConnectionFailed = + function(error) {}; + +/** + * Called when a new session has been connected. The |connectionInfo| will be + * valid until onDisconnected() is called. + * + * @param {!remoting.ConnectionInfo} connectionInfo + */ +remoting.ClientSession.EventHandler.prototype.onConnected = + function(connectionInfo) {}; + +/** + * Called when the current session has been disconnected. + * + * @param {!remoting.Error} reason Reason that the session is disconnected. + * Set to remoting.Error.none() if there is no error. + */ +remoting.ClientSession.EventHandler.prototype.onDisconnected = + function(reason) {}; + +// Note that the positive values in both of these enums are copied directly +// from connection_to_host.h and must be kept in sync. Code in +// chromoting_instance.cc converts the C++ enums into strings that must match +// the names given here. +// The negative values represent state transitions that occur within the +// web-app that have no corresponding plugin state transition. +// +// TODO(kelvinp): Merge this enum with remoting.ChromotingEvent.SessionState +// once we have migrated away from XMPP-based logging (crbug.com/523423). +// +// NOTE: The enums here correspond to the Chromoting.Connections enumerated +// histogram defined in src/tools/metrics/histograms/histograms.xml. UMA +// histograms don't work well with negative values, so only non-negative values +// have been used for Chromoting.Connections. +// The maximum values for the UMA enumerated histogram is included here for use +// when uploading values to UMA. +// The 2 lists should be kept in sync, and any new enums should be append-only. +/** @enum {number} */ +remoting.ClientSession.State = { + MIN_STATE_ENUM: -3, + CONNECTION_CANCELED: -3, // Connection closed (gracefully) before connecting. + CONNECTION_DROPPED: -2, // Succeeded, but subsequently closed with an error. + CREATED: -1, + UNKNOWN: 0, + INITIALIZING: 1, + CONNECTING: 2, + AUTHENTICATED: 3, + CONNECTED: 4, + CLOSED: 5, + FAILED: 6, + MAX_STATE_ENUM: 6, +}; + +/** + * @param {string} state The state name. + * @return {remoting.ClientSession.State} The session state enum value. + */ +remoting.ClientSession.State.fromString = function(state) { + if (!remoting.ClientSession.State.hasOwnProperty(state)) { + throw "Invalid ClientSession.State: " + state; + } + return remoting.ClientSession.State[state]; +}; + +/** @enum {number} */ +remoting.ClientSession.ConnectionError = { + UNKNOWN: -1, + NONE: 0, + HOST_IS_OFFLINE: 1, + SESSION_REJECTED: 2, + INCOMPATIBLE_PROTOCOL: 3, + NETWORK_FAILURE: 4, + HOST_OVERLOAD: 5, + MAX_SESSION_LENGTH: 6, + HOST_CONFIGURATION_ERROR: 7, + NACL_PLUGIN_CRASHED: 8 +}; + +/** + * @param {string} error The connection error name. + * @return {remoting.ClientSession.ConnectionError} The connection error enum. + */ +remoting.ClientSession.ConnectionError.fromString = function(error) { + if (!remoting.ClientSession.ConnectionError.hasOwnProperty(error)) { + console.error('Unexpected ClientSession.ConnectionError string: ', error); + return remoting.ClientSession.ConnectionError.UNKNOWN; + } + return remoting.ClientSession.ConnectionError[error]; +} + +/** + * Type used for performance statistics collected by the plugin. + * @constructor + */ +remoting.ClientSession.PerfStats = function() {}; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.videoBandwidth; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.videoFrameRate; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.captureLatency; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.encodeLatency; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.decodeLatency; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.renderLatency; +/** @type {number} */ +remoting.ClientSession.PerfStats.prototype.roundtripLatency; + +// Keys for connection statistics. +remoting.ClientSession.STATS_KEY_VIDEO_BANDWIDTH = 'videoBandwidth'; +remoting.ClientSession.STATS_KEY_VIDEO_FRAME_RATE = 'videoFrameRate'; +remoting.ClientSession.STATS_KEY_CAPTURE_LATENCY = 'captureLatency'; +remoting.ClientSession.STATS_KEY_ENCODE_LATENCY = 'encodeLatency'; +remoting.ClientSession.STATS_KEY_DECODE_LATENCY = 'decodeLatency'; +remoting.ClientSession.STATS_KEY_RENDER_LATENCY = 'renderLatency'; +remoting.ClientSession.STATS_KEY_ROUNDTRIP_LATENCY = 'roundtripLatency'; + +/** + * Set of capabilities for which hasCapability() can be used to test. + * + * @enum {string} + */ +remoting.ClientSession.Capability = { + // When enabled this capability causes the client to send its screen + // resolution to the host once connection has been established. See + // this.plugin_.notifyClientResolution(). + SEND_INITIAL_RESOLUTION: 'sendInitialResolution', + + // Let the host know that we're interested in knowing whether or not it + // rate limits desktop-resize requests. + // TODO(kelvinp): This has been supported since M-29. Currently we only have + // <1000 users on M-29 or below. Remove this and the capability on the host. + RATE_LIMIT_RESIZE_REQUESTS: 'rateLimitResizeRequests', + + // Indicates native touch input support. If the host does not support + // touch then the client will let Chrome synthesize mouse events from touch + // input, for compatibility with non-touch-aware systems. + TOUCH_EVENTS: 'touchEvents', + + // Indicates whether the client supports security key request forwarding. + SECURITY_KEY: 'securityKey', +}; + +/** + * Connects to |host| using |credentialsProvider| as the credentails. + * + * @param {remoting.Host} host + * @param {remoting.CredentialsProvider} credentialsProvider + */ +remoting.ClientSession.prototype.connect = function(host, credentialsProvider) { + this.host_ = host; + this.credentialsProvider_ = credentialsProvider; + this.iqFormatter_ = + new remoting.FormatIq(this.signalStrategy_.getJid(), host.jabberId); + this.plugin_.connect(this.host_, this.signalStrategy_.getJid(), + credentialsProvider); +}; + +/** + * Disconnect the current session with a particular |error|. The session will + * raise a |stateChanged| event in response to it. The caller should then call + * dispose() to remove and destroy the element. + * + * @param {!remoting.Error} error The reason for the disconnection. Use + * remoting.Error.none() if there is no error. + * @return {void} Nothing. + */ +remoting.ClientSession.prototype.disconnect = function(error) { + if (this.isFinished()) { + // Do not send the session-terminate Iq if disconnect() is already called or + // if it is initiated by the host. + return; + } + + console.assert(this.host_ != null, 'disconnect() is called before connect()'); + this.sendIq_( + '' + + '' + + '' + + '' + + ''); + + var state = remoting.ClientSession.State.FAILED; + if (error.hasTag( + remoting.Error.Tag.NONE, + remoting.Error.Tag.CLIENT_SUSPENDED)) { + state = remoting.ClientSession.State.CLOSED; + } + + this.error_ = error; + this.setState_(state); +}; + +/** + * Deletes the element from the container and disconnects. + * + * @return {void} Nothing. + */ +remoting.ClientSession.prototype.dispose = function() { + base.dispose(this.connectedDisposables_); + this.connectedDisposables_ = null; + base.dispose(this.plugin_); + this.plugin_ = null; +}; + +/** + * @return {remoting.ClientSession.State} The current state. + */ +remoting.ClientSession.prototype.getState = function() { + return this.state_; +}; + +/** + * @return {remoting.SessionLogger}. + */ +remoting.ClientSession.prototype.getLogger = function() { + return this.logger_; +}; + +/** + * @return {!remoting.Error} The current error code. + */ +remoting.ClientSession.prototype.getError = function() { + return this.error_; +}; + +/** + * Drop the session when the computer is suspended for more than + * |suspendDurationInMS|. + * + * @param {number} suspendDurationInMS maximum duration of suspension allowed + * before the session will be dropped. + */ +remoting.ClientSession.prototype.dropSessionOnSuspend = function( + suspendDurationInMS) { + if (this.state_ !== remoting.ClientSession.State.CONNECTED) { + console.error('The session is not connected.'); + return; + } + + var suspendDetector = new remoting.SuspendDetector(suspendDurationInMS); + this.connectedDisposables_.add( + suspendDetector, + new base.EventHook( + suspendDetector, remoting.SuspendDetector.Events.resume, + this.disconnect.bind( + this, new remoting.Error(remoting.Error.Tag.CLIENT_SUSPENDED)))); +}; + +/** + * Called when the client receives its first frame. + * + * @return {void} Nothing. + */ +remoting.ClientSession.prototype.onFirstFrameReceived = function() { + this.hasReceivedFrame_ = true; +}; + +/** + * @return {boolean} Whether the client has received a video buffer. + */ +remoting.ClientSession.prototype.hasReceivedFrame = function() { + return this.hasReceivedFrame_; +}; + +/** + * Sends a signaling message. + * + * @param {string} message XML string of IQ stanza to send to server. + * @return {void} Nothing. + * @private + */ +remoting.ClientSession.prototype.sendIq_ = function(message) { + // Extract the session id, so we can close the session later. + var parser = new DOMParser(); + var iqNode = parser.parseFromString(message, 'text/xml').firstChild; + var jingleNode = iqNode.firstChild; + if (jingleNode) { + var action = jingleNode.getAttribute('action'); + if (jingleNode.nodeName == 'jingle' && action == 'session-initiate') { + this.sessionId_ = jingleNode.getAttribute('sid'); + } + } + + console.log(base.timestamp() + this.iqFormatter_.prettifySendIq(message)); + if (this.signalStrategy_.getState() != + remoting.SignalStrategy.State.CONNECTED) { + console.log("Message above is dropped because signaling is not connected."); + return; + } + + this.signalStrategy_.sendMessage(message); +}; + +/** + * @param {string} message XML string of IQ stanza to send to server. + */ +remoting.ClientSession.prototype.onOutgoingIq = function(message) { + this.sendIq_(message); +}; + +/** + * @param {string} msg + */ +remoting.ClientSession.prototype.onDebugMessage = function(msg) { + console.log('plugin: ' + msg.trimRight()); +}; + +/** + * @param {Element} message + * @private + */ +remoting.ClientSession.prototype.onIncomingMessage_ = function(message) { + if (!this.plugin_) { + return; + } + var formatted = new XMLSerializer().serializeToString(message); + console.log(base.timestamp() + + this.iqFormatter_.prettifyReceiveIq(formatted)); + this.xmppErrorCache_.processStanza(message); + this.plugin_.onIncomingIq(formatted); +}; + +/** + * Callback that the plugin invokes to indicate that the connection + * status has changed. + * + * @param {remoting.ClientSession.State} status The plugin's status. + * @param {remoting.ClientSession.ConnectionError} error The plugin's error + * state, if any. + */ +remoting.ClientSession.prototype.onConnectionStatusUpdate = + function(status, error) { + if (status == remoting.ClientSession.State.FAILED) { + var errorTag = remoting.Error.Tag.UNEXPECTED; + switch (error) { + case remoting.ClientSession.ConnectionError.HOST_IS_OFFLINE: + errorTag = remoting.Error.Tag.HOST_IS_OFFLINE; + break; + case remoting.ClientSession.ConnectionError.SESSION_REJECTED: + errorTag = remoting.Error.Tag.INVALID_ACCESS_CODE; + break; + case remoting.ClientSession.ConnectionError.INCOMPATIBLE_PROTOCOL: + errorTag = remoting.Error.Tag.INCOMPATIBLE_PROTOCOL; + break; + case remoting.ClientSession.ConnectionError.NETWORK_FAILURE: + errorTag = remoting.Error.Tag.P2P_FAILURE; + break; + case remoting.ClientSession.ConnectionError.HOST_OVERLOAD: + errorTag = remoting.Error.Tag.HOST_OVERLOAD; + break; + case remoting.ClientSession.ConnectionError.MAX_SESSION_LENGTH: + errorTag = remoting.Error.Tag.MAX_SESSION_LENGTH; + break; + case remoting.ClientSession.ConnectionError.HOST_CONFIGURATION_ERROR: + errorTag = remoting.Error.Tag.HOST_CONFIGURATION_ERROR; + break; + case remoting.ClientSession.ConnectionError.NACL_PLUGIN_CRASHED: + errorTag = remoting.Error.Tag.NACL_PLUGIN_CRASHED; + break; + default: + this.error_ = remoting.Error.unexpected(); + } + this.error_ = new remoting.Error( + errorTag, this.xmppErrorCache_.getFirstErrorStanza()); + } + this.setState_(status); +}; + +/** + * Callback that the plugin invokes to indicate that the connection type for + * a channel has changed. + * + * @param {string} channel The channel name. + * @param {string} connectionType The new connection type. + * @private + */ +remoting.ClientSession.prototype.onRouteChanged = function(channel, + connectionType) { + this.logger_.setConnectionType(connectionType); +}; + +/** + * Callback that the plugin invokes to indicate when the connection is + * ready. + * + * @param {boolean} ready True if the connection is ready. + */ +remoting.ClientSession.prototype.onConnectionReady = function(ready) { + // TODO(jamiewalch): Currently, the logic for determining whether or not the + // connection is available is based solely on whether or not any video frames + // have been received recently. which leads to poor UX on slow connections. + // Re-enable this once crbug.com/435315 has been fixed. + var ignoreVideoChannelState = true; + if (ignoreVideoChannelState) { + console.log('Video channel ' + (ready ? '' : 'not ') + 'ready.'); + return; + } + + this.raiseEvent(remoting.ClientSession.Events.videoChannelStateChanged, + ready); +}; + +/** @return {boolean} */ +remoting.ClientSession.prototype.isFinished = function() { + var finishedStates = [ + remoting.ClientSession.State.CLOSED, + remoting.ClientSession.State.FAILED, + remoting.ClientSession.State.CONNECTION_CANCELED, + remoting.ClientSession.State.CONNECTION_DROPPED + ]; + return finishedStates.indexOf(this.getState()) !== -1; +}; +/** + * @param {remoting.ClientSession.State} newState The new state for the session. + * @return {void} Nothing. + * @private + */ +remoting.ClientSession.prototype.setState_ = function(newState) { + // If we are at a finished state, ignore further state changes. + if (this.isFinished()) { + return; + } + + var oldState = this.state_; + this.state_ = this.translateState_(oldState, newState); + + if (newState == remoting.ClientSession.State.CONNECTED) { + this.connectedDisposables_.add( + new base.RepeatingTimer(this.reportStatistics.bind(this), 1000)); + if (this.plugin_.hasCapability( + remoting.ClientSession.Capability.TOUCH_EVENTS)) { + this.plugin_.enableTouchEvents(true); + } + } else if (this.isFinished()) { + base.dispose(this.connectedDisposables_); + this.connectedDisposables_ = null; + } + + this.logAuthMethod_(); + this.notifyStateChanges_(oldState, this.state_); + // Record state count in an UMA enumerated histogram. + recordState(this.state_); + this.logger_.logSessionStateChange(toSessionState(this.state_), this.error_); +}; + +/** @private */ +remoting.ClientSession.prototype.logAuthMethod_ = function() { + // The AuthMethod is undefined before the AUTHENTICATED stage for a + // successful connection or the FAILED stage for a failed connection. + if (this.state_ == remoting.ClientSession.State.AUTHENTICATED || + this.state_ == remoting.ClientSession.State.FAILED) { + var authMethod = this.credentialsProvider_.getAuthMethod(); + if (authMethod != null) { + this.logger_.setAuthMethod(authMethod); + } + } +}; + +/** + * Records a Chromoting Connection State, stored in an UMA enumerated histogram. + * @param {remoting.ClientSession.State} state State identifier. + */ +function recordState(state) { + // According to src/base/metrics/histogram.h, for a UMA enumerated histogram, + // the upper limit should be 1 above the max-enum. + var histogram_max = remoting.ClientSession.State.MAX_STATE_ENUM - + remoting.ClientSession.State.MIN_STATE_ENUM + 1; + + var metricDescription = { + metricName: 'Chromoting.Connections', + type: 'histogram-linear', + // According to histogram.h, minimum should be 1. Values less than minimum + // end up in the 0th bucket. + min: 1, + max: histogram_max, + // The # of buckets should include 1 for underflow. + buckets: histogram_max + 1 + }; + + chrome.metricsPrivate.recordValue(metricDescription, state - + remoting.ClientSession.State.MIN_STATE_ENUM); +} + +/** + * @param {remoting.ClientSession.State} oldState The new state for the session. + * @param {remoting.ClientSession.State} newState The new state for the session. + * @private + */ +remoting.ClientSession.prototype.notifyStateChanges_ = + function(oldState, newState) { + var error = this.getError(); + switch (this.state_) { + case remoting.ClientSession.State.CONNECTED: + console.log('Connection established.'); + var connectionInfo = new remoting.ConnectionInfo( + this.host_, this.credentialsProvider_, this, this.plugin_); + this.listener_.onConnected(connectionInfo); + break; + + case remoting.ClientSession.State.CONNECTING: + remoting.identity.getEmail().then(function(/** string */ email) { + console.log('Connecting as ' + email); + }); + break; + + case remoting.ClientSession.State.AUTHENTICATED: + console.log('Connection authenticated.'); + break; + + case remoting.ClientSession.State.INITIALIZING: + console.log('Connection initializing .'); + break; + + case remoting.ClientSession.State.CLOSED: + console.log('Connection closed.'); + this.listener_.onDisconnected(error); + break; + + case remoting.ClientSession.State.CONNECTION_CANCELED: + case remoting.ClientSession.State.FAILED: + if (!error.isNone()) { + console.error('Connection failed: ' + error.toString()); + } + this.listener_.onConnectionFailed(error); + break; + + case remoting.ClientSession.State.CONNECTION_DROPPED: + console.error('Connection dropped: ' + error.toString()); + this.listener_.onDisconnected(error); + break; + + default: + console.error('Unexpected client plugin state: ' + newState); + } +}; + +/** + * TODO(kelvinp): Consolidate the two enums (crbug.com/504200) + * @param {remoting.ClientSession.State} state + * @return {remoting.ChromotingEvent.SessionState} + */ +function toSessionState(state) { + var SessionState = remoting.ChromotingEvent.SessionState; + switch(state) { + case remoting.ClientSession.State.UNKNOWN: + return SessionState.UNKNOWN; + case remoting.ClientSession.State.INITIALIZING: + return SessionState.INITIALIZING; + case remoting.ClientSession.State.CONNECTING: + return SessionState.CONNECTING; + case remoting.ClientSession.State.AUTHENTICATED: + return SessionState.AUTHENTICATED; + case remoting.ClientSession.State.CONNECTED: + return SessionState.CONNECTED; + case remoting.ClientSession.State.CLOSED: + return SessionState.CLOSED; + case remoting.ClientSession.State.FAILED: + return SessionState.CONNECTION_FAILED; + case remoting.ClientSession.State.CONNECTION_DROPPED: + return SessionState.CONNECTION_DROPPED; + case remoting.ClientSession.State.CONNECTION_CANCELED: + return SessionState.CONNECTION_CANCELED; + default: + throw new Error('Unknown session state : ' + state); + } +} + +/** + * @param {remoting.ClientSession.State} previous + * @param {remoting.ClientSession.State} current + * @return {remoting.ClientSession.State} + * @private + */ +remoting.ClientSession.prototype.translateState_ = function(previous, current) { + var State = remoting.ClientSession.State; + if (previous == State.CONNECTING || previous == State.AUTHENTICATED) { + if (current == State.CLOSED) { + return remoting.ClientSession.State.CONNECTION_CANCELED; + } + } else if (previous == State.CONNECTED && current == State.FAILED) { + return State.CONNECTION_DROPPED; + } + return current; +}; + +/** @private */ +remoting.ClientSession.prototype.reportStatistics = function() { + this.logger_.logStatistics(this.plugin_.getPerfStats()); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session_factory.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session_factory.js new file mode 100644 index 000000000000..4fa9100d0281 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/client_session_factory.js @@ -0,0 +1,124 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @param {Element} container parent element for the plugin to be created. + * @param {Array} capabilities capabilities required by this + * application. + * @constructor + */ +remoting.ClientSessionFactory = function(container, capabilities) { + /** @private */ + this.container_ = /** @type {HTMLElement} */ (container); + + /** @private {Array} */ + this.requiredCapabilities_ = [ + remoting.ClientSession.Capability.SEND_INITIAL_RESOLUTION, + remoting.ClientSession.Capability.RATE_LIMIT_RESIZE_REQUESTS, + remoting.ClientSession.Capability.TOUCH_EVENTS + ]; + + // Append the app-specific capabilities. + this.requiredCapabilities_.push.apply(this.requiredCapabilities_, + capabilities); +}; + +/** + * Creates a session. + * + * @param {remoting.ClientSession.EventHandler} listener + * @param {remoting.SessionLogger} logger + * @return {Promise} Resolves with the client session + * if succeeded or rejects with remoting.Error on failure. + */ +remoting.ClientSessionFactory.prototype.createSession = + function(listener, logger) { + var that = this; + /** @type {string} */ + var token; + /** @type {remoting.SignalStrategy} */ + var signalStrategy; + /** @type {remoting.ClientPlugin} */ + var clientPlugin; + + function OnError(/** !remoting.Error */ error) { + logger.logSessionStateChange( + remoting.ChromotingEvent.SessionState.CONNECTION_FAILED, error); + base.dispose(signalStrategy); + base.dispose(clientPlugin); + throw error; + } + + var promise = remoting.identity.getToken().then( + function(/** string */ authToken) { + token = authToken; + return remoting.identity.getUserInfo(); + }).then(function(/** {email: string, name: string} */ userInfo) { + logger.logSessionStateChange( + remoting.ChromotingEvent.SessionState.SIGNALING); + return connectSignaling(userInfo.email, token); + }).then(function(/** remoting.SignalStrategy */ strategy) { + signalStrategy = strategy; + logger.logSessionStateChange( + remoting.ChromotingEvent.SessionState.CREATING_PLUGIN); + return createPlugin(that.container_, that.requiredCapabilities_); + }).then(function(/** remoting.ClientPlugin */ plugin) { + clientPlugin = plugin; + return new remoting.ClientSession(plugin, signalStrategy, logger, listener); + }).catch( + remoting.Error.handler(OnError) + ); + + return /** @type {Promise} */ (promise); +}; + +/** + * @param {string} email + * @param {string} token + * @return {Promise} + */ +function connectSignaling(email, token) { + var signalStrategy = remoting.SignalStrategy.create(); + var deferred = new base.Deferred(); + function onSignalingState(/** remoting.SignalStrategy.State */ state) { + switch (state) { + case remoting.SignalStrategy.State.CONNECTED: + deferred.resolve(signalStrategy); + break; + + case remoting.SignalStrategy.State.FAILED: + var error = signalStrategy.getError(); + signalStrategy.dispose(); + deferred.reject(error); + break; + } + } + signalStrategy.setStateChangedCallback(onSignalingState); + signalStrategy.connect(remoting.settings.XMPP_SERVER, email, token); + return deferred.promise(); +} + +/** + * Creates the plugin. + * @param {HTMLElement} container parent element for the plugin. + * @param {Array} capabilities capabilities required by this + * application. + * @return {Promise} + */ +function createPlugin(container, capabilities) { + var plugin = remoting.ClientPlugin.factory.createPlugin( + container, capabilities); + return plugin.initialize().then(function() { + return plugin; + }); +} + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/clipboard.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/clipboard.js new file mode 100644 index 000000000000..9d2b48c0bd75 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/clipboard.js @@ -0,0 +1,215 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * A class for moving clipboard items between the plugin and the OS. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @private + * @enum {string} + */ +var ItemTypes = { + TEXT_TYPE: 'text/plain', + TEXT_UTF8_TYPE: 'text/plain; charset=UTF-8' +}; + +/** + * @constructor + * @param {remoting.ClientPlugin} plugin + * @implements {base.Disposable} + */ +remoting.Clipboard = function(plugin) { + /** @private {string} */ + this.previousContent_ = ''; + + /** @private {boolean} */ + this.itemFromHostTextPending_ = false; + + /** @private {boolean} */ + this.blockOneClipboardSend_ = true; + + /** @private */ + this.plugin_ = plugin; + + /** @private */ + this.eventHooks_ = new base.Disposables( + new base.DomEventHook(plugin.element(), 'focus', + this.initiateToHost_.bind(this), false), + new base.DomEventHook(window, 'paste', this.onPaste_.bind(this), false), + new base.DomEventHook(window, 'copy', this.onCopy_.bind(this), false)); + + // Do a paste operation, but make sure the resulting clipboard data isn't sent + // to the host. This stops the host seeing items that were placed on the + // clipboard before the session began. The user may not have intended such + // items to be sent to the host. + this.initiateToHost_(); + this.plugin_.setClipboardHandler(this.fromHost_.bind(this)); +}; + +remoting.Clipboard.prototype.dispose = function() { + this.plugin_.setClipboardHandler(base.doNothing); + this.plugin_ = null; + base.dispose(this.eventHooks_); + this.eventHooks_ = null; +}; + +/** + * Accepts a clipboard from the OS, and sends any changed clipboard items to + * the host. + * + * Currently only text items are supported. + * + * @param {ClipboardData} clipboardData + * @return {void} Nothing. + * @private + */ +remoting.Clipboard.prototype.toHost_ = function(clipboardData) { + if (!clipboardData || !clipboardData.types || !clipboardData.getData) { + console.log('Got invalid clipboardData.'); + return; + } + for (var i = 0; i < clipboardData.types.length; i++) { + var type = clipboardData.types[i]; + var item = clipboardData.getData(type); + if (!item) { + item = ''; + } + console.log('Got clipboard from OS, type: ' + type + + ' length: ' + item.length + ' new: ' + + (item != this.previousContent_) + ' blocking-send: ' + + this.blockOneClipboardSend_); + // The browser presents text clipboard items as 'text/plain'. + if (type == ItemTypes.TEXT_TYPE) { + // Don't send the same item more than once. Otherwise the item may be + // sent to and fro indefinitely. + if (item != this.previousContent_) { + if (!this.blockOneClipboardSend_) { + // The plugin's JSON reader emits UTF-8. + console.log('Sending clipboard to host.'); + this.plugin_.sendClipboardItem(ItemTypes.TEXT_UTF8_TYPE, item); + } + this.previousContent_ = item; + } + } + } + this.blockOneClipboardSend_ = false; +}; + +/** + * Accepts a clipboard item from the host, and stores it so that toOs() will + * subsequently send it to the OS clipboard. + * + * @param {string} mimeType The MIME type of the clipboard item. + * @param {string} item The clipboard item. + * @return {void} Nothing. + */ +remoting.Clipboard.prototype.fromHost_ = function(mimeType, item) { + // The plugin's JSON layer will correctly convert only UTF-8 data sent from + // the host. + console.log('Got clipboard from host, type: ' + mimeType + + ' length: ' + item.length + ' new: ' + + (item != this.previousContent_)); + if (mimeType != ItemTypes.TEXT_UTF8_TYPE) { + return; + } + if (item == this.previousContent_) { + return; + } + this.previousContent_ = item; + this.itemFromHostTextPending_ = true; + this.initiateToOs_(); +}; + +/** + * Moves any pending clipboard items to a ClipboardData object. + * + * @param {ClipboardData} clipboardData + * @return {boolean} Whether any clipboard items were moved to the ClipboardData + * object. + * @private + */ +remoting.Clipboard.prototype.toOs_ = function(clipboardData) { + if (!this.itemFromHostTextPending_) { + console.log('Got unexpected clipboard copy event.'); + return false; + } + // The JSON layer between the plugin and this webapp converts UTF-8 to the + // JS string encoding. The browser will convert JS strings to the correct + // encoding, per OS and locale conventions, provided the data type is + // 'text/plain'. + console.log('Setting OS clipboard, length: ' + this.previousContent_.length); + clipboardData.setData(ItemTypes.TEXT_TYPE, this.previousContent_); + this.itemFromHostTextPending_ = false; + return true; +}; + +/** + * Initiates the process of sending any fresh items on the OS clipboard, to the + * host. + * + * This method makes the browser fire a paste event, which provides access to + * the OS clipboard. That event will be caught by a handler in the document, + * which will call toHost(). + * @private + */ +remoting.Clipboard.prototype.initiateToHost_ = function() { + // It would be cleaner to send a paste command to the plugin element, + // but that's not supported. + //console.log('Initiating clipboard paste.'); + document.execCommand('paste'); +}; + +/** + * Initiates the process of sending any items freshly received from the host, + * to the OS clipboard. + * + * This method makes the browser fire a copy event, which provides access to + * the OS clipboard. That event will be caught by a handler in the document, + * which will call toOs(). + * @private + */ +remoting.Clipboard.prototype.initiateToOs_ = function() { + // It would be cleaner to send a paste command to the plugin element, + // but that's not supported. + console.log('Initiating clipboard copy.'); + document.execCommand('copy'); +}; + +/** + * Callback function called when the browser window gets a paste operation. + * + * @param {Event} event + * @return {void} Nothing. + * @private + */ +remoting.Clipboard.prototype.onPaste_ = function(event) { + if (event && event.clipboardData) { + this.toHost_(event.clipboardData); + } +}; + +/** + * Callback function called when the browser window gets a copy operation. + * + * @param {Event} event + * @return {void} Nothing. + * @private + */ +remoting.Clipboard.prototype.onCopy_ = function(event) { + if (event && event.clipboardData && this.toOs_(event.clipboardData)) { + // The default action may overwrite items that we added to clipboardData. + event.preventDefault(); + } +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/combined_host_list_api.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/combined_host_list_api.js new file mode 100644 index 000000000000..681a4dac087f --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/combined_host_list_api.js @@ -0,0 +1,197 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * API implementation that combines two other implementations. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * Amount of time to wait for GCD results after legacy registry has + * returned. + */ +var GCD_TIMEOUT_MS = 1000; + +/** + * @constructor + * @param {!remoting.HostListApi} legacyImpl + * @param {!remoting.HostListApi} gcdImpl + * @implements {remoting.HostListApi} + */ +remoting.CombinedHostListApi = function(legacyImpl, gcdImpl) { + /** @const {!remoting.HostListApi} */ + this.legacyImpl_ = legacyImpl; + + /** @const {!remoting.HostListApi} */ + this.gcdImpl_ = gcdImpl; + + /** + * List of host IDs most recently retrieved from |legacyImpl_|. + * @type {!Set} + */ + this.legacyIds_ = new Set(); + + /** + * List of host IDs most recently retrieved |gcdImpl_|. + * @type {!Set} + */ + this.gcdIds_ = new Set(); +}; + +/** @override */ +remoting.CombinedHostListApi.prototype.register = function( + hostName, publicKey, hostClientId) { + var that = this; + // First, register the new host with GCD, which will create a + // service account and generate a host ID. + return this.gcdImpl_.register(hostName, publicKey, hostClientId).then( + function(gcdRegResult) { + // After the GCD registration has been created, copy the + // registration to the legacy directory so that clients not yet + // upgraded to use GCD can see the new host. + // + // This is an ugly hack for multiple reasons: + // + // 1. It completely ignores |this.legacyImpl_|, complicating + // unit tests. + // + // 2. It relies on the fact that, when |hostClientId| is null, + // the legacy directory will "register" a host without + // creating a service account. This is an obsolete feature + // of the legacy directory that is being revived for a new + // purpose. + // + // 3. It assumes the device ID generated by GCD is usable as a + // host ID by the legacy directory. Fortunately both systems + // use UUIDs. + return remoting.LegacyHostListApi.registerWithHostId( + gcdRegResult.hostId, hostName, publicKey, null).then( + function() { + // On success, return the result from GCD, ignoring + // the result returned by the legacy directory. + that.gcdIds_.add(gcdRegResult.hostId); + that.legacyIds_.add(gcdRegResult.hostId); + return gcdRegResult; + }, + function(error) { + console.warn( + 'Error copying host GCD host registration ' + + 'to legacy directory: ' + error); + throw error; + } + ); + }); +}; + +/** @override */ +remoting.CombinedHostListApi.prototype.get = function() { + // Fetch the host list from both directories and merge hosts that + // have the same ID. + var that = this; + var legacyPromise = this.legacyImpl_.get(); + var gcdPromise = this.gcdImpl_.get(); + return legacyPromise.then(function(legacyHosts) { + // If GCD is too slow, just act as if it had returned an empty + // result set. + var timeoutPromise = base.Promise.withTimeout( + gcdPromise, GCD_TIMEOUT_MS, []); + + // Combine host information from both directories. In the case of + // conflicting information, prefer information from whichever + // directory claims to have newer information. + return timeoutPromise.then(function(gcdHosts) { + // Update |that.gcdIds_| and |that.legacyIds_|. + that.gcdIds_ = new Set(); + that.legacyIds_ = new Set(); + gcdHosts.forEach(function(host) { + that.gcdIds_.add(host.hostId); + }); + legacyHosts.forEach(function(host) { + that.legacyIds_.add(host.hostId); + }); + + /** + * A mapping from host IDs to the host data that will be + * returned from this method. + * @type {!Map} + */ + var hostMap = new Map(); + + // Add legacy hosts to the output; some of these may be replaced + // by GCD hosts. + legacyHosts.forEach(function(host) { + hostMap.set(host.hostId, host); + }); + + // Add GCD hosts to the output, possibly replacing some legacy + // host data with newer data from GCD. + gcdHosts.forEach(function(gcdHost) { + var hostId = gcdHost.hostId; + var legacyHost = hostMap.get(hostId); + if (!legacyHost || legacyHost.updatedTime <= gcdHost.updatedTime) { + hostMap.set(hostId, gcdHost); + } + }); + + // Convert the result to an Array. + // TODO(jrw): Use Array.from once it becomes available. + var hosts = []; + hostMap.forEach(function(host) { + hosts.push(host); + }); + return hosts; + }); + }); +}; + +/** @override */ +remoting.CombinedHostListApi.prototype.put = + function(hostId, hostName, hostPublicKey) { + var legacyPromise = Promise.resolve(); + if (this.legacyIds_.has(hostId)) { + legacyPromise = this.legacyImpl_.put(hostId, hostName, hostPublicKey); + } + var gcdPromise = Promise.resolve(); + if (this.gcdIds_.has(hostId)) { + gcdPromise = this.gcdImpl_.put(hostId, hostName, hostPublicKey); + } + return legacyPromise.then(function() { + // If GCD is too slow, just ignore it and return result from the + // legacy directory. + return base.Promise.withTimeout( + gcdPromise, GCD_TIMEOUT_MS); + }); +}; + +/** @override */ +remoting.CombinedHostListApi.prototype.remove = function(hostId) { + var legacyPromise = Promise.resolve(); + if (this.legacyIds_.has(hostId)) { + legacyPromise = this.legacyImpl_.remove(hostId); + } + var gcdPromise = Promise.resolve(); + if (this.gcdIds_.has(hostId)) { + gcdPromise = this.gcdImpl_.remove(hostId); + } + return legacyPromise.then(function() { + // If GCD is too slow, just ignore it and return result from the + // legacy directory. + return base.Promise.withTimeout( + gcdPromise, GCD_TIMEOUT_MS); + }); +}; + +/** @override */ +remoting.CombinedHostListApi.prototype.getSupportHost = function(supportId) { + return this.legacyImpl_.getSupportHost(supportId); +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connected_view.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connected_view.js new file mode 100644 index 000000000000..b90a11284405 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connected_view.js @@ -0,0 +1,240 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Implements a basic UX control for a connected remoting session. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @param {remoting.ClientPlugin} plugin + * @param {HTMLElement} viewportElement + * @param {HTMLElement} cursorElement + * + * @constructor + * @implements {base.Disposable} + */ +remoting.ConnectedView = function(plugin, viewportElement, cursorElement) { + /** @private */ + this.viewportElement_ = viewportElement; + + /** @private */ + this.plugin_ = plugin; + + /** @private {!Array} */ + this.focusableElements_ = []; + + /** @private */ + this.cursor_ = new remoting.ConnectedView.Cursor( + plugin, viewportElement, cursorElement); + + /** @private {Element} */ + this.debugRegionContainer_ = + viewportElement.querySelector('.debug-region-container'); + + var pluginElement = plugin.element(); + + /** @private */ + this.disposables_ = new base.Disposables( + this.cursor_, + new base.DomEventHook(pluginElement, 'blur', + this.onPluginLostFocus_.bind(this), false), + new base.DomEventHook(document, 'visibilitychange', + this.onVisibilityChanged_.bind(this), false), + new remoting.Clipboard(plugin) + ); + + /** @private {base.OneShotTimer} */ + this.restoreFocusTimer_ = null; + + // TODO(wez): Only allow mouse lock if the app has the pointerLock permission. + this.plugin_.allowMouseLock(); + + pluginElement.focus(); +}; + +/** + * @return {void} Nothing. + */ +remoting.ConnectedView.prototype.dispose = function() { + base.dispose(this.disposables_); + this.disposables_ = null; + this.cursorRender_ = null; + this.plugin_ = null; + base.dispose(this.restoreFocusTimer_); + this.restoreFocusTimer_ = null; +}; + +/** + * Called when the app window is hidden. + * @return {void} Nothing. + * @private + */ +remoting.ConnectedView.prototype.onVisibilityChanged_ = function() { + var pause = document.hidden; + this.plugin_.pauseVideo(pause); + this.plugin_.pauseAudio(pause); +}; + +/** + * Callback that the plugin invokes to indicate when the connection is + * ready. + * + * @param {boolean} ready True if the connection is ready. + */ +remoting.ConnectedView.prototype.onConnectionReady = function(ready) { + this.viewportElement_.classList.toggle('session-client-inactive', !ready); +}; + +/** + * Callback function called when the plugin element loses focus. + * @private + */ +remoting.ConnectedView.prototype.onPluginLostFocus_ = function(event) { + // Release all keys to prevent them becoming 'stuck down' on the host. + this.plugin_.releaseAllKeys(); + + // Focus should stay on the element, not (for example) the toolbar. + // Due to crbug.com/246335, we can't restore the focus immediately, + // otherwise the plugin gets confused about whether or not it has focus. + var that = this; + base.dispose(this.restoreFocusTimer_); + this.restoreFocusTimer_ = new base.OneShotTimer(function() { + // When the 'blur' event handler is called document.activeElement has not + // been set to the correct target. We need to retrieve the target in this + // delayedCallback. + var target = /** @type {!HTMLElement} */ (document.activeElement); + if (!that.isElementFocusable_(target)) { + that.plugin_.element().focus(); + } + }, 0); +}; + +/** + * Return focus to the plugin. + */ +remoting.ConnectedView.prototype.returnFocusToPlugin = function() { + this.plugin_.element().focus(); +}; + +/** + * Determines whether an element is allowed to grab focus from the plugin. + * @param {!HTMLElement} element + * @return {boolean} + * @private + */ +remoting.ConnectedView.prototype.isElementFocusable_ = function(element) { + return this.focusableElements_.indexOf(element) !== -1; +}; + +/** + * Allow the given element to grab focus from the plugin. + * @param {!HTMLElement} element + * @return {void} + */ +remoting.ConnectedView.prototype.allowFocus = function(element) { + if (this.focusableElements_.indexOf(element) < 0) { + this.focusableElements_.push(element); + } +}; + +/** + * Handles dirty region debug messages. + * + * @param {{rects:Array>}} region Dirty region of the latest + * frame. + */ +remoting.ConnectedView.prototype.handleDebugRegion = function(region) { + while (this.debugRegionContainer_.firstChild) { + this.debugRegionContainer_.removeChild( + this.debugRegionContainer_.firstChild); + } + if (region.rects) { + var rects = region.rects; + for (var i = 0; i < rects.length; ++i) { + var rect = document.createElement('div'); + rect.classList.add('debug-region-rect'); + rect.style.left = rects[i][0] + 'px'; + rect.style.top = rects[i][1] +'px'; + rect.style.width = rects[i][2] +'px'; + rect.style.height = rects[i][3] + 'px'; + this.debugRegionContainer_.appendChild(rect); + } + } +}; + +/** + * Enables or disables rendering of dirty regions for debugging. + * @param {boolean} enable True to enable rendering. + */ +remoting.ConnectedView.prototype.enableDebugRegion = function(enable) { + if (enable) { + this.plugin_.setDebugDirtyRegionHandler(this.handleDebugRegion.bind(this)); + } else { + this.plugin_.setDebugDirtyRegionHandler(null); + } +}; + +/** + * @param {remoting.ClientPlugin} plugin + * @param {HTMLElement} viewportElement + * @param {HTMLElement} cursorElement + * + * @constructor + * @implements {base.Disposable} + */ +remoting.ConnectedView.Cursor = function( + plugin, viewportElement, cursorElement) { + /** @private */ + this.plugin_ = plugin; + /** @private */ + this.cursorElement_ = cursorElement; + /** @private */ + this.eventHook_ = new base.DomEventHook( + viewportElement, 'mousemove', this.onMouseMoved_.bind(this), true); + + this.plugin_.setMouseCursorHandler(this.onCursorChanged_.bind(this)); +}; + +remoting.ConnectedView.Cursor.prototype.dispose = function() { + base.dispose(this.eventHook_); + this.eventHook_ = null; + this.plugin_.setMouseCursorHandler( + /** function(string, string, number) */ base.doNothing); + this.plugin_ = null; +}; + +/** + * @param {string} url + * @param {number} hotspotX + * @param {number} hotspotY + * @private + */ +remoting.ConnectedView.Cursor.prototype.onCursorChanged_ = function( + url, hotspotX, hotspotY) { + this.cursorElement_.hidden = !url; + if (url) { + this.cursorElement_.style.marginLeft = '-' + hotspotX + 'px'; + this.cursorElement_.style.marginTop = '-' + hotspotY + 'px'; + this.cursorElement_.src = url; + } +}; + +/** + * @param {Event} event + * @private + */ +remoting.ConnectedView.Cursor.prototype.onMouseMoved_ = function(event) { + this.cursorElement_.style.top = event.offsetY + 'px'; + this.cursorElement_.style.left = event.offsetX + 'px'; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_dropped_dialog.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_dropped_dialog.js new file mode 100644 index 000000000000..1e13d6ef354f --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_dropped_dialog.js @@ -0,0 +1,74 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * A Dialog that is shown to the user when the connection is dropped. + * + * @constructor + * @param {HTMLElement} rootElement + * @param {remoting.WindowShape=} opt_windowShape + * @implements {base.Disposable} + */ +remoting.ConnectionDroppedDialog = function(rootElement, opt_windowShape) { + /** @private */ + this.dialog_ = new remoting.Html5ModalDialog({ + dialog: /** @type {HTMLDialogElement} */ (rootElement), + primaryButton: rootElement.querySelector('.restart-button'), + secondaryButton: rootElement.querySelector('.close-button'), + closeOnEscape: false, + windowShape: opt_windowShape + }); + + /** @private */ + this.disposables_ = new base.Disposables(this.dialog_); +}; + +remoting.ConnectionDroppedDialog.prototype.dispose = function() { + base.dispose(this.disposables_); + this.disposables_ = null; +}; + +/** + * @return {Promise} Promise that resolves if + * the user chooses to reconnect, or rejects if the user chooses to cancel. + * This class doesn't re-establish the connection. The caller must + * implement the reconnect logic. + */ +remoting.ConnectionDroppedDialog.prototype.show = function() { + var promise = this.dialog_.show(); + this.waitForOnline_().then( + this.dialog_.close.bind(this.dialog_, remoting.MessageDialog.Result.PRIMARY) + ); + return promise.then(function(/** remoting.MessageDialog.Result */ result) { + if (result === remoting.MessageDialog.Result.PRIMARY) { + return Promise.resolve(); + } else { + return Promise.reject(new remoting.Error(remoting.Error.Tag.CANCELLED)); + } + }); +}; + +/** + * @private + * @return {Promise} + */ +remoting.ConnectionDroppedDialog.prototype.waitForOnline_ = function() { + if (base.isOnline()) { + return Promise.resolve(); + } + + var deferred = new base.Deferred(); + this.disposables_.add(new base.DomEventHook( + window, 'online', deferred.resolve.bind(deferred), false)); + return deferred.promise(); +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_info.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_info.js new file mode 100644 index 000000000000..3e6b82147551 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_info.js @@ -0,0 +1,55 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function () { + +'use strict'; + +/** + * A struct that encapsulates the states of a remoting connection. It does not + * manage the lifetime of its constituents. + * + * @param {remoting.Host} host + * @param {remoting.CredentialsProvider} credentialsProvider + * @param {remoting.ClientSession} session + * @param {remoting.ClientPlugin} plugin + * + * @constructor + * @struct + */ +remoting.ConnectionInfo = function(host, credentialsProvider, session, plugin) { + /** @private */ + this.host_ = host; + /** @private */ + this.credentialsProvider_ = credentialsProvider; + /** @private */ + this.session_ = session; + /** @private */ + this.plugin_ = plugin; +}; + +/** @returns {remoting.Host} */ +remoting.ConnectionInfo.prototype.host = function() { + return this.host_; +}; + +/** @returns {remoting.CredentialsProvider} */ +remoting.ConnectionInfo.prototype.credentialsProvider = function() { + return this.credentialsProvider_; +}; + +/** @returns {remoting.ClientSession} */ +remoting.ConnectionInfo.prototype.session = function() { + return this.session_; +}; + +/** @returns {remoting.ClientPlugin} */ +remoting.ConnectionInfo.prototype.plugin = function() { + return this.plugin_; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.css b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.css new file mode 100644 index 000000000000..ffcf784c63b5 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.css @@ -0,0 +1,18 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#statistics { + background-color: white; + left: 0; + bottom: 0; + border-top: 1px solid black; + height: 15px; + margin: 0; + opacity: 0.85; + padding: 0; + position: fixed; + width: 100%; + z-index: 100; +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.js new file mode 100644 index 000000000000..9d163663d380 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/connection_stats.js @@ -0,0 +1,159 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Module to support debug overlay window with connection stats. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + * @param {Element} statsElement The HTML div to which to update stats. + * @param {remoting.ClientPlugin} plugin + * @param {remoting.WindowShape=} opt_windowShape + * + * @implements {remoting.WindowShape.ClientUI} + * @implements {base.Disposable} + */ +remoting.ConnectionStats = function(statsElement, plugin, opt_windowShape) { + /** @private */ + this.statsElement_ = statsElement; + + /** @private {remoting.ClientSession.PerfStats} */ + this.mostRecent_ = null + + /** @private */ + this.plugin_ = plugin; + + var that = this; + + /** @private */ + this.timer_ = new base.RepeatingTimer(function(){ + that.update(plugin.getPerfStats()); + }, 1000, true); + + /** @private */ + this.windowShape_ = opt_windowShape; + if (this.windowShape_) { + this.windowShape_.registerClientUI(this); + } +}; + +remoting.ConnectionStats.prototype.dispose = function() { + base.dispose(this.timer_); + this.timer_ = null; + this.plugin_ = null; + if (this.windowShape_) { + this.windowShape_.unregisterClientUI(this); + } +}; + +/** + * @return {remoting.ClientSession.PerfStats} The most recently-set PerfStats, + * or null if update() has not yet been called. + */ +remoting.ConnectionStats.prototype.mostRecent = function() { + return this.mostRecent_; +}; + +/** + * Show or hide the connection stats div. + */ +remoting.ConnectionStats.prototype.toggle = function() { + this.statsElement_.hidden = !this.statsElement_.hidden; +}; + +/** + * @return {boolean} + */ +remoting.ConnectionStats.prototype.isVisible = function() { + return !this.statsElement_.hidden; +}; + +/** + * Show or hide the connection stats div. + * @param {boolean} show + */ +remoting.ConnectionStats.prototype.show = function(show) { + this.statsElement_.hidden = !show; +}; + +/** + * If the stats panel is visible, add its bounding rectangle to the specified + * region. + * @param {Array<{left: number, top: number, width: number, height: number}>} + * rects List of rectangles. + */ + +remoting.ConnectionStats.prototype.addToRegion = function(rects) { + if (!this.statsElement_.hidden) { + rects.push(this.statsElement_.getBoundingClientRect()); + } +}; + +/** + * Update the statistics panel. + * @param {remoting.ClientSession.PerfStats} stats The connection statistics. + */ +remoting.ConnectionStats.prototype.update = function(stats) { + this.mostRecent_ = stats; + var units = ''; + var videoBandwidth = stats.videoBandwidth; + if (videoBandwidth != undefined) { + if (videoBandwidth < 1024) { + units = 'Bps'; + } else if (videoBandwidth < 1048576) { + units = 'KiBps'; + videoBandwidth = videoBandwidth / 1024; + } else if (videoBandwidth < 1073741824) { + units = 'MiBps'; + videoBandwidth = videoBandwidth / 1048576; + } else { + units = 'GiBps'; + videoBandwidth = videoBandwidth / 1073741824; + } + } + + /** + * @param {number} value + * @param {string} units + * @param {number} digits + * @return {string} Formatted number. + */ + function formatStatNumber(value, units, digits) { + if (value != undefined) { + return value.toFixed(digits) + ' ' + units; + } else { + return "n/a"; + } + } + + /** + * @param {string} type + * @param {number} avg + * @param {number} max + * @return {string} "type: avg, max; " e.g. "RTT: 8.0, 13; " + */ + function formatStat(type, avg, max) { + var avgStr = (avg == undefined) ? 'n/a' : avg.toFixed(1); + return type + ': ' + avgStr + ', ' + max + '; '; + } + + var statistics = document.getElementById('statistics'); + this.statsElement_.innerText = ( + '(avg, max in ms) ' + + formatStat('Capture', stats.captureLatency, stats.maxCaptureLatency) + + formatStat('Encode', stats.encodeLatency, stats.maxEncodeLatency) + + formatStat('Decode', stats.decodeLatency, stats.maxDecodeLatency) + + formatStat('Render', stats.renderLatency, stats.maxRenderLatency) + + formatStat('RTT', stats.roundtripLatency, stats.maxRoundtripLatency) + + 'Bandwidth: ' + formatStatNumber(videoBandwidth, units, 2) + '; ' + + 'Frame Rate: ' + formatStatNumber(stats.videoFrameRate, 'fps', 1) + ); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/console_wrapper.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/console_wrapper.js new file mode 100644 index 000000000000..6ceb659c8d89 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/console_wrapper.js @@ -0,0 +1,149 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Intercept and record various classes of log messages. By default, such + * messages will be reported by Chrome Developer Tools as coming from this + * file, making source-line hyperlinks useless. To fix this click the "gear" + * icon in Developer Tools, click "Manage framework blocking..." under + * "Sources" and add console_wrapper.js as a "Blackbox" component. + */ + + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +/** + * @constructor + * @private + */ +remoting.ConsoleWrapper = function() { + console.assert(instance_ == null, + 'Duplicate remoting.ConsoleWrapper constructor.'); + /** @private {number} The number of log entries to save. */ + this.historyMaxSize_ = 0; + /** @private {Array} */ + this.history_ = []; + /** @private {Object} */ + this.savedMethods_ = {}; +}; + +/** + * Activate the console wrapper for the specified log types. + * + * @param {number} historyMaxSize The number of log entries to keep. + * @param {...remoting.ConsoleWrapper.LogType} var_logTypes The log types to + * intercept. + * @suppress {reportUnknownTypes} + */ +remoting.ConsoleWrapper.prototype.activate = + function(historyMaxSize, var_logTypes) { + this.historyMaxSize_ = historyMaxSize; + this.history_ = []; + // Restore previous wrappers. + for (var key in remoting.ConsoleWrapper.LogType) { + var type = remoting.ConsoleWrapper.LogType[key]; + if (this.savedMethods_[type]) { + console[type] = this.savedMethods_[type]; + delete this.savedMethods_[type]; + } + } + // Activate new wrappers + for (var i = 1; i < arguments.length; ++i) { + var type = arguments[i]; + this.savedMethods_[type] = console[type]; + console[arguments[i]] = this.recordAndLog_.bind(this, arguments[i]); + } +}; + +/** + * Deactivate the console wrapper for all log types. + */ +remoting.ConsoleWrapper.prototype.deactivate = function() { + this.activate(0); +}; + +/** + * @return {Array} The most recent log + * entries as configured by activate(). + */ +remoting.ConsoleWrapper.prototype.getHistory = function() { + return this.history_; +}; + +/** + * @param {remoting.ConsoleWrapper.LogType} type The type of log. + * @param {...*} var_args The items to log. + * @private + * @suppress {reportUnknownTypes} + */ +remoting.ConsoleWrapper.prototype.recordAndLog_ = + function(type, var_args) { + // Construct a new arguments array by removing the first argument. + var args = Array.prototype.slice.call(arguments, 1); + // Find the caller, ignoring the top-most stack frame. + var caller = new base.Callstack().callstack[1]; + var location = 'unknown'; + if (caller) { + location = caller.file + ':' + caller.line; + } + // Save to history. + if (this.historyMaxSize_ > 0) { + var log = { + type: type, + message: JSON.stringify(args), + caller: location, + timestamp: new Date() + }; + // Only save assertions if they fail. + if (log.type != 'assert' || !args[0]) { + this.history_.push(log); + if (this.history_.length > this.historyMaxSize_) { + this.history_.shift(); + } + } + } + // Log the message, appending the caller. + // TODO(jamiewalch): Make the caller gray so that it's less intrusive. This + // can be done using a %c formatter in the first argument, but care needs to + // be taken to support the multi-argument case. + args.push(location); + this.savedMethods_[type].apply(console, args); +} + +/** + * @type {remoting.ConsoleWrapper} + */ +var instance_ = null; + +/** + * @return {remoting.ConsoleWrapper} The singleton ConsoleWrapper. + */ +remoting.ConsoleWrapper.getInstance = function() { + if (!instance_) { + instance_ = new remoting.ConsoleWrapper(); + } + return instance_; +}; + +})(); + +/** + * @typedef {{type: string, message: string, caller: string, timestamp: Date}} + */ +remoting.ConsoleWrapper.LogEntry; + +/** + * @enum {string} The log types that can be intercepted. These must match the + * names of the corresponding console methods. + */ +remoting.ConsoleWrapper.LogType = { + LOG: 'log', + WARN: 'warn', + ERROR: 'error', + ASSERT: 'assert' +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_auth_dialog.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_auth_dialog.js new file mode 100644 index 000000000000..f57c5b320b98 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_auth_dialog.js @@ -0,0 +1,76 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +var instance_ = null; + +/** + * @constructor + * @implements {remoting.Identity.ConsentDialog} + * @param {HTMLElement} rootElement The dialog DOM element. + * @private + */ +remoting.AuthDialog = function(rootElement) { + /** @private {HTMLElement} */ + this.rootElement_ = rootElement; + + /** @private {HTMLElement} */ + this.borderElement_ = rootElement.querySelector('#auth-dialog-border'); + + /** @private {HTMLElement} */ + this.authButton_ = rootElement.querySelector('#auth-button'); + + /** @private {base.Deferred} */ + this.onAuthButtonDeferred_ = null; + + this.authButton_.addEventListener('click', this.onClick_.bind(this), false); +}; + +/** @private */ +remoting.AuthDialog.prototype.onClick_ = function() { + this.rootElement_.hidden = true; + this.onAuthButtonDeferred_.resolve(null); + this.onAuthButtonDeferred_ = null; +}; + +/** + * @return {Promise} A Promise object that resolves when the user clicks on the + * auth button. + */ +remoting.AuthDialog.prototype.show = function() { + if (this.isVisible()) { + return Promise.reject('Auth dialog is already showing.'); + } + this.rootElement_.hidden = false; + console.assert(this.onAuthButtonDeferred_ === null, + 'Duplicate show() invocation.'); + this.onAuthButtonDeferred_ = new base.Deferred(); + return this.onAuthButtonDeferred_.promise(); +}; + +/** + * @return {boolean} whether the auth dialog is visible or not. + */ +remoting.AuthDialog.prototype.isVisible = function() { + return !this.rootElement_.hidden; +}; + +/** + * @return {remoting.AuthDialog} + */ +remoting.AuthDialog.getInstance = function() { + if (!instance_) { + var rootElement = base.getHtmlElement('auth-dialog'); + instance_ = new remoting.AuthDialog(rootElement); + } + return instance_; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_event_handlers.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_event_handlers.js new file mode 100644 index 000000000000..782004da3814 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_event_handlers.js @@ -0,0 +1,64 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +remoting.initElementEventHandlers = function() { + var goHome = function() { + remoting.setMode(remoting.AppMode.HOME); + }; + /** @type {Array<{event: string, id: string, fn: function(Event):void}>} */ + var it2me_actions = [ + { event: 'click', id: 'cancel-share-button', fn: remoting.cancelShare }, + { event: 'click', id: 'get-started-it2me', + fn: remoting.showIT2MeUiAndSave }, + { event: 'click', id: 'host-finished-button', fn: goHome }, + { event: 'click', id: 'share-button', fn: remoting.tryShare } + ]; + /** @type {Array<{event: string, id: string, fn: function(Event):void}>} */ + var me2me_actions = [ + { event: 'click', id: 'daemon-pin-cancel', fn: goHome }, + { event: 'click', id: 'get-started-me2me', + fn: remoting.showMe2MeUiAndSave } + ]; + /** @type {Array<{event: string, id: string, fn: function(Event):void}>} */ + var host_actions = [ + { event: 'click', id: 'close-paired-client-manager-dialog', fn: goHome }, + { event: 'click', id: 'host-config-done-dismiss', fn: goHome }, + { event: 'click', id: 'host-config-error-dismiss', fn: goHome }, + { event: 'click', id: 'open-paired-client-manager-dialog', + fn: remoting.setMode.bind(null, + remoting.AppMode.HOME_MANAGE_PAIRINGS) }, + { event: 'click', id: 'stop-sharing-button', fn: remoting.cancelShare } + ]; + /** @type {Array<{event: string, id: string, fn: function(Event):void}>} */ + var auth_actions = [ + { event: 'click', id: 'sign-out', fn:remoting.signOut }, + { event: 'click', id: 'token-refresh-error-ok', fn: goHome }, + { event: 'click', id: 'token-refresh-error-sign-in', + fn: remoting.handleAuthFailureAndRelaunch } + ]; + registerEventListeners(it2me_actions); + registerEventListeners(me2me_actions); + registerEventListeners(host_actions); + registerEventListeners(auth_actions); +} + +/** + * Sign the user out of Chromoting by clearing (and revoking, if possible) the + * OAuth refresh token. + * + * Also clear all local storage, to avoid leaking information. + */ +remoting.signOut = function() { + remoting.oauth2.removeCachedAuthToken().then(function(){ + chrome.storage.local.clear(); + remoting.setMode(remoting.AppMode.HOME); + window.location.reload(); + }); +}; + diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_experimental.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_experimental.js new file mode 100644 index 000000000000..36019a1cceb9 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_experimental.js @@ -0,0 +1,58 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Experimental features that can be accessed via the Chrome debugging console. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +remoting.experimental = {}; + +/** + * Enables or disables rendering of dirty regions for debugging. + * @param {boolean} enable True to enable rendering. + */ +remoting.experimental.enableDebugRegion = function(enable) { + var drApp = /** @type {remoting.DesktopRemoting} */ (remoting.app); + if (drApp instanceof remoting.DesktopRemoting) { + var desktopConnectedView = drApp.getConnectedViewForTesting(); + var connectedView = desktopConnectedView.getConnectedViewForTesting(); + connectedView.enableDebugRegion(enable); + } +} + +/** + * Sets and stores the scale factor to apply to host sizing requests. + * The desktopScale applies to the dimensions reported to the host, not + * to the client DPI reported to it. + * + * @param {number} desktopScale Scale factor to apply. + */ +remoting.experimental.setDesktopScale = function(desktopScale) { + var drApp = /** @type {remoting.DesktopRemoting} */ (remoting.app); + if (drApp instanceof remoting.DesktopRemoting) { + var connectedView = drApp.getConnectedViewForTesting(); + var viewport = connectedView.getViewportForTesting(); + viewport.setDesktopScale(desktopScale); + } +}; + +/** + * Sets and stores the key remapping setting for the current host. If set, + * these mappings override the defaults for the client platform. + * + * @param {string} remappings Comma-separated list of key remappings. + */ +remoting.experimental.setRemapKeys = function(remappings) { + var drApp = /** @type {remoting.DesktopRemoting} */ (remoting.app); + if (drApp instanceof remoting.DesktopRemoting) { + var connectedView = drApp.getConnectedViewForTesting(); + connectedView.setRemapKeys(remappings); + } +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.css b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.css new file mode 100644 index 000000000000..76e8e1058487 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.css @@ -0,0 +1,13 @@ +/* Copyright 2015 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#paired-clients-list { + max-height: 300px; + overflow-y: scroll; +} + +#paired-clients-list table { + width: 100%; +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.js new file mode 100644 index 000000000000..0ce20ae1fd82 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/crd_main.js @@ -0,0 +1,185 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * Initialize the host list. + * + * @param {function(string)} handleConnect Function to call to connect to the + * host with |hostId|. + */ +remoting.initHostlist_ = function(handleConnect) { + remoting.hostController = new remoting.HostController(); + remoting.hostList = new remoting.HostList( + base.getHtmlElement('host-list'), + base.getHtmlElement('host-list-empty'), + base.getHtmlElement('host-list-error-message'), + base.getHtmlElement('host-list-refresh-failed-button'), + base.getHtmlElement('host-list-loading-indicator'), + remoting.showErrorMessage, + handleConnect); + + isHostModeSupported_().then(function(/** boolean */ supported) { + if (supported) { + var noShare = document.getElementById('unsupported-platform-message'); + noShare.parentNode.removeChild(noShare); + } else { + var button = document.getElementById('share-button'); + button.disabled = true; + } + }); + + var onLoad = function() { + // Parse URL parameters. + var urlParams = base.getUrlParameters(); + if ('mode' in urlParams) { + if (urlParams['mode'] === 'me2me') { + var hostId = urlParams['hostId']; + handleConnect(hostId); + return; + } + } + // No valid URL parameters, start up normally. + remoting.initHomeScreenUi(); + } + remoting.hostList.load(onLoad); +} + +/** + * Returns whether Host mode is supported on this platform for It2Me. + * + * @return {Promise} Resolves to true if Host mode is supported. + */ +function isHostModeSupported_() { + if (remoting.HostInstaller.canInstall()) { + return Promise.resolve(true); + } + return remoting.HostInstaller.isInstalled(); +} + +/** + * initHomeScreenUi is called if the app is not starting up in session mode, + * and also if the user cancels pin entry or the connection in session mode. + */ +remoting.initHomeScreenUi = function() { + remoting.setMode(remoting.AppMode.HOME); + var dialog = base.getHtmlElement('paired-clients-list'); + var message = base.getHtmlElement('paired-client-manager-message'); + var deleteAll = base.getHtmlElement('delete-all-paired-clients'); + var close = base.getHtmlElement('close-paired-client-manager-dialog'); + var working = base.getHtmlElement('paired-client-manager-dialog-working'); + var error = base.getHtmlElement('paired-client-manager-dialog-error'); + var noPairedClients = base.getHtmlElement('no-paired-clients'); + remoting.pairedClientManager = + new remoting.PairedClientManager(remoting.hostController, dialog, message, + deleteAll, close, noPairedClients, + working, error); + // Display the cached host list, then asynchronously update and re-display it. + remoting.updateLocalHostState(); + remoting.hostList.refresh().then(remoting.updateLocalHostState); + remoting.butterBar = new remoting.ButterBar(); +}; + +/** + * Fetches local host state and updates the DOM accordingly. + */ +remoting.updateLocalHostState = function() { + /** + * @param {remoting.HostController.State} state Host state. + */ + var onHostState = function(state) { + if (state == remoting.HostController.State.STARTED) { + remoting.hostController.getLocalHostId(onHostId.bind(null, state)); + } else { + onHostId(state, null); + } + }; + + /** + * @param {remoting.HostController.State} state Host state. + * @param {string?} hostId Host id. + */ + var onHostId = function(state, hostId) { + remoting.hostList.setLocalHostStateAndId(state, hostId); + remoting.hostList.display(); + }; + + /** + * @param {boolean} response True if the feature is present. + */ + var onHasFeatureResponse = function(response) { + /** + * @param {!remoting.Error} error + */ + var onError = function(error) { + console.error('Failed to get pairing status: ' + error.toString()); + remoting.pairedClientManager.setPairedClients([]); + }; + + if (response) { + remoting.hostController.getPairedClients( + remoting.pairedClientManager.setPairedClients.bind( + remoting.pairedClientManager), + onError); + } else { + console.log('Pairing registry not supported by host.'); + remoting.pairedClientManager.setPairedClients([]); + } + }; + + remoting.hostController.hasFeature( + remoting.HostController.Feature.PAIRING_REGISTRY). + then(onHasFeatureResponse); + remoting.hostController.getLocalHostState(onHostState); +}; + +/** + * Entry point for test code. In order to make test and production + * code as similar as possible, the same entry point is used for + * production code, but since production code should never have + * 'source' set to 'test', it continue with initialization + * immediately. As a fail-safe, the mechanism by which initialization + * completes when under test is controlled by a simple UI, making it + * possible to use the app even if the previous assumption fails to + * hold in some corner cases. + */ +remoting.startDesktopRemotingForTesting = function() { + var urlParams = base.getUrlParameters(); + if (urlParams['source'] === 'test') { + document.getElementById('browser-test-continue-init').addEventListener( + 'click', remoting.startDesktopRemoting, false); + document.getElementById('browser-test-deferred-init').hidden = false; + } else { + remoting.startDesktopRemoting(); + } +} + +/** + * @param {!remoting.Error} error The failure reason. + */ +remoting.showErrorMessage = function(error) { + l10n.localizeElementFromTag( + document.getElementById('token-refresh-error-message'), + error.getTag()); + var auth_failed = (error.hasTag(remoting.Error.Tag.AUTHENTICATION_FAILED)); + if (auth_failed && base.isAppsV2()) { + remoting.handleAuthFailureAndRelaunch(); + } else { + document.getElementById('token-refresh-auth-failed').hidden = !auth_failed; + document.getElementById('token-refresh-other-error').hidden = auth_failed; + remoting.setMode(remoting.AppMode.TOKEN_REFRESH_FAILED); + } +}; + + +remoting.startDesktopRemoting = function() { + remoting.app = new remoting.DesktopRemoting(); + remoting.app.start(); +}; + +window.addEventListener('load', remoting.startDesktopRemotingForTesting, false); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credentials_provider.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credentials_provider.js new file mode 100644 index 000000000000..01959912e314 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credentials_provider.js @@ -0,0 +1,115 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +var remoting = remoting || {}; + +/** @typedef {{clientId: string, sharedSecret: string}} */ +remoting.PairingInfo; + +/** @typedef {{token: string, secret: string}} */ +remoting.ThirdPartyToken; + +/** + * Parameters for the remoting.CredentialsProvider constructor. + * + * fetchPin: Called by Me2Me connections when a PIN needs to be obtained + * interactively. + * + * pairingInfo: The pairing info for Me2Me Connections. + * + * accessCode: It2Me access code. If present, the |fetchPin| callback will be + * ignored. + * + * fetchThirdPartyToken: Called when a third party authentication token + * is needed + * + * @typedef {{ + * accessCode: (string|undefined), + * fetchPin: (function(boolean,function(string): void)|undefined), + * pairingInfo: (remoting.PairingInfo|undefined), + * fetchThirdPartyToken: + * (function(string ,string , string, + * function(string, string):void) | undefined) + * }} + */ +remoting.CredentialsProviderParams; + +/** + * @param {remoting.CredentialsProviderParams} args + * @constructor + */ +remoting.CredentialsProvider = function(args) { + /** @private */ + this.fetchPin_ = (args.accessCode) ? this.getAccessCode_ : args.fetchPin; + /** @private */ + this.pairingInfo_ = args.pairingInfo; + /** @private */ + this.accessCode_ = args.accessCode; + /** @private */ + this.fetchThirdPartyToken_ = args.fetchThirdPartyToken; + + /** @private {?remoting.ChromotingEvent.AuthMethod} */ + this.authMethod_ = null; +}; + +/** @returns {void} */ +remoting.CredentialsProvider.prototype.getAccessCode_ = function( + /** boolean */ supportsPairing, /** Function */ callback) { + this.authMethod_ = remoting.ChromotingEvent.AuthMethod.ACCESS_CODE; + callback(this.accessCode_); +}; + +/** @returns {remoting.PairingInfo} */ +remoting.CredentialsProvider.prototype.getPairingInfo = function() { + if (this.pairingInfo_) { + this.authMethod_ = remoting.ChromotingEvent.AuthMethod.PINLESS; + } + return this.pairingInfo_ || { clientId: '', sharedSecret: ''}; +}; + +/** + * @param {boolean} pairingSupported Whether pairing is supported by the host. + * @returns {Promise} + */ +remoting.CredentialsProvider.prototype.getPIN = function(pairingSupported) { + var that = this; + if (!this.fetchPin_) { + Promise.resolve(''); + } + + this.authMethod_ = remoting.ChromotingEvent.AuthMethod.PIN; + return new Promise(function(/** function(string) */ resolve) { + that.fetchPin_(pairingSupported, resolve); + }); +}; + +/** + * @param {string} tokenUrl Token-issue URL received from the host. + * @param {string} hostPublicKey Host public key (DER and Base64 encoded). + * @param {string} scope OAuth scope to request the token for. + * + * @returns {Promise} + */ +remoting.CredentialsProvider.prototype.getThirdPartyToken = function( + tokenUrl, hostPublicKey, scope) { + var that = this; + if (!this.fetchThirdPartyToken_) { + Promise.resolve({token: '', secret: ''}); + } + + this.authMethod_ = remoting.ChromotingEvent.AuthMethod.THIRD_PARTY; + return new Promise(function(/** Function */ resolve) { + var onTokenFetched = function(/** string */ token, /** string */ secret) { + resolve({token: token, secret: secret}); + }; + that.fetchThirdPartyToken_(tokenUrl, hostPublicKey, scope, onTokenFetched); + }); +}; + +/** @return {?remoting.ChromotingEvent.AuthMethod} */ +remoting.CredentialsProvider.prototype.getAuthMethod = function() { + return this.authMethod_; +}; \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits.html b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits.html new file mode 100644 index 000000000000..e13ba988eef2 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits.html @@ -0,0 +1,25371 @@ + + + + + Credits + + + + + + +
+
Credits
+
+ Accessibility Audit library, from Accessibility Developer Tools + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Almost Native Graphics Layer Engine + + homepage + - + show license + +
+
// Copyright (C) 2002-2013 The ANGLE Project Authors. 
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//     Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+//
+//     Redistributions in binary form must reproduce the above 
+//     copyright notice, this list of conditions and the following
+//     disclaimer in the documentation and/or other materials provided
+//     with the distribution.
+//
+//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
+//     Ltd., nor the names of their contributors may be used to endorse
+//     or promote products derived from this software without specific
+//     prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Android + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Android Crazy Linker + + homepage + - + show license + +
+
// Copyright 2014 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+
+ + +
+ Android Explicit Synchronization + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Android Open Source Project - App Compat Library + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Android Open Source Project - Settings App + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Android bionic libc + + homepage + - + show license + +
+
   Copyright (c) 2014, Linaro Limited
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+       * Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above copyright
+         notice, this list of conditions and the following disclaimer in the
+         documentation and/or other materials provided with the distribution.
+       * Neither the name of the Linaro nor the
+         names of its contributors may be used to endorse or promote products
+         derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+   strchr - find a character in a string
+
+   Copyright (c) 2014, ARM Limited
+   All rights Reserved.
+   Copyright (c) 2014, Linaro Ltd.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+       * Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above copyright
+         notice, this list of conditions and the following disclaimer in the
+         documentation and/or other materials provided with the distribution.
+       * Neither the name of the company nor the names of its contributors
+         may be used to endorse or promote products derived from this
+         software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+ Copyright (c) 1993 John Brezak
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the author may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+====================================================
+Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunPro, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice
+is preserved.
+
+-------------------------------------------------------------------
+
+Based on the UCB version with the ID appearing below.
+This is ANSIish only when "multibyte character == plain character".
+
+Copyright (c) 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
+Copyright (C) 1995-1999, 2001, 2003  Internet Software Consortium.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
+Copyright (C) 1997-2001  Internet Software Consortium.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2006 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2006 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2008 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2008 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2008 The Android Open Source Project
+All rights reserved.
+Copyright (c) 2013-2014, NVIDIA Corporation.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2009 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2010 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2010 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2010 The Android Open Source Project
+Copyright (c) 2008 ARM Ltd
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the company may not be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Android adaptation and tweak by Jim Huang <jserv@0xlab.org>.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2011 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2012 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2012 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2013 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2013 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2013 The Android Open Source Project
+All rights reserved.
+Copyright (c) 2013-2014 NVIDIA Corporation.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2013 The Android Open Source Project
+Copyright (c) 2014, NVIDIA CORPORATION.  All rights reserved.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2014 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2014 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2015 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------
+
+Copyright (C) 2015 The Android Open Source Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1980, 1983, 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+   This product includes software developed by the University of
+   California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+
+Portions Copyright (c) 1993 by Digital Equipment Corporation.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies, and that
+the name of Digital Equipment Corporation not be used in advertising or
+publicity pertaining to distribution of the document or software without
+specific, written prior permission.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1982, 1986, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1982, 1986, 1993
+   The Regents of the University of California.  All rights reserved.
+(c) UNIX System Laboratories, Inc.
+All or some portions of this file are derived from material licensed
+to the University of California by American Telephone and Telegraph
+Co. or Unix System Laboratories, Inc. and are reproduced herein with
+the permission of UNIX System Laboratories, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1983, 1987, 1989
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1983, 1989
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1983, 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1983, 1990, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Portions Copyright (c) 1993 by Digital Equipment Corporation.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies, and that
+the name of Digital Equipment Corporation not be used in advertising or
+publicity pertaining to distribution of the document or software without
+specific, written prior permission.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1983, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1983, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1985
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1985 Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1985, 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Portions Copyright (c) 1993 by Digital Equipment Corporation.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies, and that
+the name of Digital Equipment Corporation not be used in advertising or
+publicity pertaining to distribution of the document or software without
+specific, written prior permission.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1985, 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1985, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1985, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1987 Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1987, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1987, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1988 Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1988 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software written by Ken Arnold and
+published in UNIX Review, Vol. 6, No. 8.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms are permitted
+provided that the above copyright notice and this paragraph are
+duplicated in all such forms and that any documentation,
+advertising materials, and other materials related to such
+distribution and use acknowledge that the software was developed
+by the University of California, Berkeley. The name of the
+University may not be used to endorse or promote products derived
+from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989 The Regents of the University of California.
+All rights reserved.
+(c) UNIX System Laboratories, Inc.
+All or some portions of this file are derived from material licensed
+to the University of California by American Telephone and Telegraph
+Co. or Unix System Laboratories, Inc. and are reproduced herein with
+the permission of UNIX System Laboratories, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Roger L. Snyder.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+(c) UNIX System Laboratories, Inc.
+All or some portions of this file are derived from material licensed
+to the University of California by American Telephone and Telegraph
+Co. or Unix System Laboratories, Inc. and are reproduced herein with
+the permission of UNIX System Laboratories, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1989, 1993, 1994
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990 The Regents of the University of California.
+All rights reserved.
+
+This code is derived from locore.s.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990 The Regents of the University of California.
+All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Chris Torek.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990 The Regents of the University of California.
+All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+William Jolitz.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Chris Torek.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Donn Seeley at UUNET Technologies, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Donn Seeley at UUNET Technologies, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993
+   The Regents of the University of California.  All rights reserved.
+(c) UNIX System Laboratories, Inc.
+All or some portions of this file are derived from material licensed
+to the University of California by American Telephone and Telegraph
+Co. or Unix System Laboratories, Inc. and are reproduced herein with
+the permission of UNIX System Laboratories, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993, 1994
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1990, 1993, 1994
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Chris Torek.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1991 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1991, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1991, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Berkeley Software Design, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1991, 1993
+   The Regents of the University of California.  All rights reserved.
+(c) UNIX System Laboratories, Inc.
+All or some portions of this file are derived from material licensed
+to the University of California by American Telephone and Telegraph
+Co. or Unix System Laboratories, Inc. and are reproduced herein with
+the permission of UNIX System Laboratories, Inc.
+
+This code is derived from software contributed to Berkeley by
+Hugh Smith at The University of Guelph.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1991, 1993, 1995,
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Havard Eidnes.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992 Henry Spencer.
+Copyright (c) 1992, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Henry Spencer of the University of Toronto.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992 The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Ralph Campbell.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Ralph Campbell. This file is derived from the MIPS RISC
+Architecture book by Gerry Kane.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993
+   The Regents of the University of California.  All rights reserved.
+
+This software was developed by the Computer Systems Engineering group
+at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+contributed to Berkeley.
+
+All advertising materials mentioning features or use of this software
+must display the following acknowledgement:
+   This product includes software developed by the University of
+   California, Lawrence Berkeley Laboratory.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+   This product includes software developed by the University of
+   California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993
+   The Regents of the University of California.  All rights reserved.
+(c) UNIX System Laboratories, Inc.
+All or some portions of this file are derived from material licensed
+to the University of California by American Telephone and Telegraph
+Co. or Unix System Laboratories, Inc. and are reproduced herein with
+the permission of UNIX System Laboratories, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993, 1994
+   The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Henry Spencer.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1992, 1993, 1994 Henry Spencer.
+
+This code is derived from software contributed to Berkeley by
+Henry Spencer.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+   This product includes software developed by the University of
+   California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1993 Martin Birgmeier
+All rights reserved.
+
+You may redistribute unmodified or modified versions of this source
+code provided that the above copyright notice and this and the
+following conditions are retained.
+
+This software is provided ``as is'', and comes with no warranties
+of any kind. I shall in no event be liable for anything that happens
+to anyone/anything when using this software.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1994 SigmaSoft, Th. Lockert <tholo@sigmasoft.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1996 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1996, David Mazieres <dm@uun.org>
+Copyright (c) 2008, Damien Miller <djm@openbsd.org>
+Copyright (c) 2013, Markus Friedl <markus@openbsd.org>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1996-1998, 2008 Theo de Raadt
+Copyright (c) 1997, 2008-2009 Todd C. Miller
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997 Mark Brinicombe
+Copyright (c) 2010 Android Open Source Project.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+   This product includes software developed by Mark Brinicombe
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code was contributed to The NetBSD Foundation by Klaus Klein.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+       This product includes software developed by the NetBSD
+       Foundation, Inc. and its contributors.
+4. Neither the name of The NetBSD Foundation nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Luke Mewburn.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Luke Mewburn; and by Jason R. Thorpe.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+       This product includes software developed by the NetBSD
+       Foundation, Inc. and its contributors.
+4. Neither the name of The NetBSD Foundation nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1998 Softweyr LLC.  All rights reserved.
+
+strtok_r, from Berkeley strtok
+Oct 13, 1998 by Wes Peters <wes@softweyr.com>
+
+Copyright (c) 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notices, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notices, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL SOFTWEYR LLC, THE
+REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1998 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Klaus Klein.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+       This product includes software developed by the NetBSD
+       Foundation, Inc. and its contributors.
+4. Neither the name of The NetBSD Foundation nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 1999
+   David E. O'Brien
+Copyright (c) 1988, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2000 Ben Harris.
+Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2000 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Atsushi Onoe.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+   This product includes software developed by the NetBSD
+   Foundation, Inc. and its contributors.
+4. Neither the name of The NetBSD Foundation nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2000 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Dieter Baron and Thomas Klausner.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2001 Wasabi Systems, Inc.
+All rights reserved.
+
+Written by Frank van der Linden for Wasabi Systems, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+     This product includes software developed for the NetBSD Project by
+     Wasabi Systems, Inc.
+4. The name of Wasabi Systems, Inc. may not be used to endorse
+   or promote products derived from this software without specific prior
+   written permission.
+
+THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of Opsycon AB nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002 Daniel Hartmeier
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+   - Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   - Redistributions in binary form must reproduce the above
+     copyright notice, this list of conditions and the following
+     disclaimer in the documentation and/or other materials provided
+     with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002 Marc Espie.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
+PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Christos Zoulas.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002 Tim J. Robbins
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002 Tim J. Robbins.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Sponsored in part by the Defense Advanced Research Projects
+Agency (DARPA) and Air Force Research Laboratory, Air Force
+Materiel Command, USAF, under agreement number F39502-99-1-0512.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002, 2003 Tim J. Robbins.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002-2004 Tim J. Robbins
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2002-2004 Tim J. Robbins.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2003 Constantin S. Svintsoff <kostik@iclub.nsu.ru>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The names of the authors may not be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2003 David Schultz <das@FreeBSD.ORG>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2003 Networks Associates Technology, Inc.
+All rights reserved.
+
+Portions of this software were developed for the FreeBSD Project by
+Jacques A. Vidrine, Safeport Network Services, and Network
+Associates Laboratories, the Security Research Division of Network
+Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+("CBOSS"), as part of the DARPA CHATS research program.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Sponsored in part by the Defense Advanced Research Projects
+Agency (DARPA) and Air Force Research Laboratory, Air Force
+Materiel Command, USAF, under agreement number F39502-99-1-0512.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Christos Zoulas.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+       This product includes software developed by the NetBSD
+       Foundation, Inc. and its contributors.
+4. Neither the name of The NetBSD Foundation nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1995,1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1995-1999 by Internet Software Consortium
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1995-1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1996,1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1996-1999 by Internet Software Consortium
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1996-1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1997,1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Portions Copyright (c) 1996-1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2004, 2005 David Schultz <das@FreeBSD.ORG>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2005 Tim J. Robbins.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2005 by Internet Systems Consortium, Inc. ("ISC")
+Copyright (c) 1995-1999 by Internet Software Consortium
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2007-2008  Michael G Schwern
+
+This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
+
+The MIT License:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2007-2008  Michael G Schwern
+
+This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
+
+The MIT License:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+Origin: http://code.google.com/p/y2038
+Modified for Bionic by the Android Open Source Project
+
+-------------------------------------------------------------------
+
+Copyright (c) 2008  Android Open Source Project (query id randomization)
+Copyright (c) 1985, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2008 Todd C. Miller <millert@openbsd.org>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2008, Damien Miller <djm@openbsd.org>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2009 David Schultz <das@FreeBSD.org>
+All rights reserved.
+
+Copyright (c) 2011 The FreeBSD Foundation
+All rights reserved.
+Portions of this software were developed by David Chisnall
+under sponsorship from the FreeBSD Foundation.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2009 David Schultz <das@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2009 The NetBSD Foundation, Inc.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Roy Marples.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2010 MIPS Technologies, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+     * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+     * Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer
+       in the documentation and/or other materials provided with
+       the distribution.
+     * Neither the name of MIPS Technologies Inc. nor the names of its
+       contributors may be used to endorse or promote products derived
+       from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2010, 2011, 2012, 2013 Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    * this list of conditions and the following disclaimer in the documentation
+    * and/or other materials provided with the distribution.
+
+    * Neither the name of Intel Corporation nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2010, Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    * this list of conditions and the following disclaimer in the documentation
+    * and/or other materials provided with the distribution.
+
+    * Neither the name of Intel Corporation nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011 David Chisnall
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011 Ed Schouten <ed@FreeBSD.org>
+                   David Chisnall <theraven@FreeBSD.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011 Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    * this list of conditions and the following disclaimer in the documentation
+    * and/or other materials provided with the distribution.
+
+    * Neither the name of Intel Corporation nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
+Copyright (c) 2009 Ted Unangst
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011 The Android Open Source Project
+Copyright (c) 2008 ARM Ltd
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the company may not be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011, 2012, 2013 Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    * this list of conditions and the following disclaimer in the documentation
+    * and/or other materials provided with the distribution.
+
+    * Neither the name of Intel Corporation nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011, Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    * this list of conditions and the following disclaimer in the documentation
+    * and/or other materials provided with the distribution.
+
+    * Neither the name of Intel Corporation nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2011, VMware, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the VMware, Inc. nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2012, Linaro Limited
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+       * Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above copyright
+         notice, this list of conditions and the following disclaimer in the
+         documentation and/or other materials provided with the distribution.
+       * Neither the name of the Linaro nor the
+         names of its contributors may be used to endorse or promote products
+         derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2012, Linaro Limited
+   All rights reserved.
+   Copyright (c) 2014, NVIDIA Corporation.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+       * Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above copyright
+         notice, this list of conditions and the following disclaimer in the
+         documentation and/or other materials provided with the distribution.
+       * Neither the name of the Linaro nor the
+         names of its contributors may be used to endorse or promote products
+         derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2012-2015
+     MIPS Technologies, Inc., California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the MIPS Technologies, Inc., nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2013
+     MIPS Technologies, Inc., California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the MIPS Technologies, Inc., nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2013 ARM Ltd
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the company may not be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2013 Antoine Jacoutot <ajacoutot@openbsd.org>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2013 The NetBSD Foundation, Inc.
+All rights reserved.
+
+This code is derived from software contributed to The NetBSD Foundation
+by Christos Zoulas.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2014
+     Imagination Technologies Limited.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the MIPS Technologies, Inc., nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY IMAGINATION TECHNOLOGIES LIMITED ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL IMAGINATION TECHNOLOGIES LIMITED BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
+Copyright (c) 2014 Bob Beck <beck@obtuse.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Emulation of getentropy(2) as documented at:
+http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2
+
+-------------------------------------------------------------------
+
+Copyright (c) 2014, Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+    * this list of conditions and the following disclaimer in the documentation
+    * and/or other materials provided with the distribution.
+
+    * Neither the name of Intel Corporation nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c) 2014, Linaro Limited
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+       * Redistributions of source code must retain the above copyright
+         notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above copyright
+         notice, this list of conditions and the following disclaimer in the
+         documentation and/or other materials provided with the distribution.
+       * Neither the name of the Linaro nor the
+         names of its contributors may be used to endorse or promote products
+         derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c)1999 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c)1999, 2000, 2001 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c)2001 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright (c)2003 Citrus Project,
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
+Copyright 2008 Damien Miller <djm@openbsd.org>
+All rights reserved.
+
+Theo de Raadt <deraadt@openbsd.org> came up with the idea of using
+such a mathematical system to generate more random (yet non-repeating)
+ids to solve the resolver/named problem.  But Niels designed the
+actual system based on the constraints.
+
+Later modified by Damien Miller to wrap the LCG output in a 15-bit
+permutation generator based on a Luby-Rackoff block cipher. This
+ensures the output is non-repeating and preserves the MSB twiddle
+trick, but makes it more resistant to LCG prediction.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Copyright 2008  Android Open Source Project (source port randomization)
+Copyright (c) 1985, 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+    This product includes software developed by the University of
+    California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+Portions Copyright (C) 2004, 2005, 2008, 2009  Internet Systems Consortium, Inc. ("ISC")
+Portions Copyright (C) 1996-2003  Internet Software Consortium.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+Portions Copyright (c) 1993 by Digital Equipment Corporation.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies, and that
+the name of Digital Equipment Corporation not be used in advertising or
+publicity pertaining to distribution of the document or software without
+specific, written prior permission.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+-------------------------------------------------------------------
+
+Portions Copyright (c) 1995 by International Business Machines, Inc.
+
+International Business Machines, Inc. (hereinafter called IBM) grants
+permission under its copyrights to use, copy, modify, and distribute this
+Software with or without fee, provided that the above copyright notice and
+all paragraphs of this notice appear in all copies, and that the name of IBM
+not be used in connection with the marketing of any product incorporating
+the Software or modifications thereof, without specific, written prior
+permission.
+
+To the extent it has a right to do so, IBM grants an immunity from suit
+under its patents, if any, for the use, sale or manufacture of products to
+the extent that such products are used for performing Domain Name System
+dynamic updates in TCP/IP networks by means of the Software.  No immunity is
+granted for any product per se or for any other function of any product.
+
+THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
+DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
+OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
+IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+-------------------------------------------------------------------
+
+Portions Copyright(C) 1995, Jason Downs.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998, 1999 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998, 2000 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998-2000 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998-2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+The author of this software is David M. Gay.
+
+Copyright (C) 2000 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+-------------------------------------------------------------------
+
+memchr - find a character in a memory zone
+
+Copyright (c) 2014, ARM Limited
+All rights Reserved.
+Copyright (c) 2014, Linaro Ltd.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the company nor the names of its contributors
+      may be used to endorse or promote products derived from this
+      software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------
+
+
+
+
+ + +
+ Apple sample code + + homepage + - + show license + +
+
Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
+Inc. ("Apple") in consideration of your agreement to the following
+terms, and your use, installation, modification or redistribution of
+this Apple software constitutes acceptance of these terms.  If you do
+not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and
+subject to these terms, Apple grants you a personal, non-exclusive
+license, under Apple's copyrights in this original Apple software (the
+"Apple Software"), to use, reproduce, modify and redistribute the Apple
+Software, with or without modifications, in source and/or binary forms;
+provided that if you redistribute the Apple Software in its entirety and
+without modifications, you must retain this notice and the following
+text and disclaimers in all such redistributions of the Apple Software.
+Neither the name, trademarks, service marks or logos of Apple Inc. may
+be used to endorse or promote products derived from the Apple Software
+without specific prior written permission from Apple.  Except as
+expressly stated in this notice, no other rights or licenses, express or
+implied, are granted by Apple herein, including but not limited to any
+patent rights that may be infringed by your derivative works or by other
+works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
+MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
+THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
+OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
+MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
+AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
+STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (C) 2009 Apple Inc. All Rights Reserved.
+
+
+ + +
+ AsyncTask + + homepage + - + show license + +
+
Notice for all the files in this folder.
+------------------------------------------------------------
+
+
+   
+   Copyright (c) 2005-2008, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License"); you may not
+   use this file except in compliance with the License.
+ 
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+   License for the specific language governing permissions and limitations under
+   the License.
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2011 Google Inc. All Rights Reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+
+ + +
+ BSDiff + + homepage + - + show license + +
+
Copyright 2003-2005 Colin Percival
+All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted providing that the following conditions 
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Blackmagic DeckLink SDK - Mac + + homepage + - + show license + +
+
Extracted from mac/include/DeckLinkAPI.h:
+
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+** 
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+** 
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+
+
+
+ + +
+ Braille Translation Library + + homepage + - + show license + +
+
(Copied from src/liblouis/liblouis.h.in)
+
+/* liblouis Braille Translation and Back-Translation Library
+
+   Based on the Linux screenreader BRLTTY, copyright (C) 1999-2006 by
+   The BRLTTY Team
+
+   Copyright (C) 2004, 2005, 2006, 2009 ViewPlus Technologies, Inc.
+   www.viewplus.com and JJB Software, Inc. www.jjb-software.com
+
+   liblouis is free software: you can redistribute it and/or modify it
+   under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation, either version 3 of the
+   License, or (at your option) any later version.
+
+   liblouis is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this program. If not, see
+   <http://www.gnu.org/licenses/>.
+
+   Maintained by John J. Boyer john.boyer@abilitiessoft.com
+   */
+
+
+
+
+ + +
+ Breakpad, An open-source multi-platform crash reporting system + + homepage + - + show license + +
+
Copyright (c) 2006, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2011, Daniel Stenberg, <daniel@haxx.se>.
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright
+notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
+
+
+Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+
+@APPLE_LICENSE_HEADER_START@
+
+This file contains Original Code and/or Modifications of Original Code
+as defined in and that are subject to the Apple Public Source License
+Version 2.0 (the 'License'). You may not use this file except in
+compliance with the License. Please obtain a copy of the License at
+http://www.opensource.apple.com/apsl/ and read it before using this
+file.
+
+The Original Code and all software distributed under the License are
+distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+Please see the License for the specific language governing rights and
+limitations under the License.
+
+@APPLE_LICENSE_HEADER_END@
+
+
+Copyright 2007-2008 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License.  You may obtain a copy
+of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+License for the specific language governing permissions and limitations under
+the License.
+
+
+
+ + +
+ Brotli + + homepage + - + show license + +
+
Copyright (c) 2009, 2010, 2013-2015 by the Brotli Authors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+ + +
+ Chrome Custom Tabs - Example and Usage + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+
+
+ + +
+ ChromeVox + + homepage + - + show license + +
+
// Copyright 2013 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+
+ + +
+ Chromium OS system API + + homepage + - + show license + +
+
// Copyright (c) 2006-2009 The Chromium OS Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Closure compiler + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Cocoa extension code from Camino + + homepage + - + show license + +
+
/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2002
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+
+ + +
+ Compact Language Detection + + homepage + - + show license + +
+
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Compact Language Detection 2 + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Crashpad + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Darwin + + homepage + - + show license + +
+
APPLE PUBLIC SOURCE LICENSE Version 2.0 -  August 6, 2003
+
+Please read this License carefully before downloading this software.  By
+downloading or using this software, you are agreeing to be bound by the terms of
+this License.  If you do not or cannot agree to the terms of this License,
+please do not download or use the software.
+
+Apple Note:  In January 2007, Apple changed its corporate name from "Apple
+Computer, Inc." to "Apple Inc."  This change has been reflected below and
+copyright years updated, but no other changes have been made to the APSL 2.0.
+
+1.	General; Definitions.  This License applies to any program or other work
+which Apple Inc. ("Apple") makes publicly available and which contains a notice
+placed by Apple identifying such program or work as "Original Code" and stating
+that it is subject to the terms of this Apple Public Source License version 2.0
+("License").  As used in this License:
+
+1.1	 "Applicable Patent Rights" mean:  (a) in the case where Apple is the
+grantor of rights, (i) claims of patents that are now or hereafter acquired,
+owned by or assigned to Apple and (ii) that cover subject matter contained in
+the Original Code, but only to the extent necessary to use, reproduce and/or
+distribute the Original Code without infringement; and (b) in the case where You
+are the grantor of rights, (i) claims of patents that are now or hereafter
+acquired, owned by or assigned to You and (ii) that cover subject matter in Your
+Modifications, taken alone or in combination with Original Code.
+
+1.2	"Contributor" means any person or entity that creates or contributes to the
+creation of Modifications.
+
+1.3	 "Covered Code" means the Original Code, Modifications, the combination of
+Original Code and any Modifications, and/or any respective portions thereof.
+
+1.4	"Externally Deploy" means: (a) to sublicense, distribute or otherwise make
+Covered Code available, directly or indirectly, to anyone other than You; and/or
+(b) to use Covered Code, alone or as part of a Larger Work, in any way to
+provide a service, including but not limited to delivery of content, through
+electronic communication with a client other than You.
+
+1.5	"Larger Work" means a work which combines Covered Code or portions thereof
+with code not governed by the terms of this License.
+
+1.6	"Modifications" mean any addition to, deletion from, and/or change to, the
+substance and/or structure of the Original Code, any previous Modifications, the
+combination of Original Code and any previous Modifications, and/or any
+respective portions thereof.  When code is released as a series of files, a
+Modification is:  (a) any addition to or deletion from the contents of a file
+containing Covered Code; and/or (b) any new file or other representation of
+computer program statements that contains any part of Covered Code.
+
+1.7	"Original Code" means (a) the Source Code of a program or other work as
+originally made available by Apple under this License, including the Source Code
+of any updates or upgrades to such programs or works made available by Apple
+under this License, and that has been expressly identified by Apple as such in
+the header file(s) of such work; and (b) the object code compiled from such
+Source Code and originally made available by Apple under this License
+
+1.8	"Source Code" means the human readable form of a program or other work that
+is suitable for making modifications to it, including all modules it contains,
+plus any associated interface definition files, scripts used to control
+compilation and installation of an executable (object code).
+
+1.9	"You" or "Your" means an individual or a legal entity exercising rights
+under this License.  For legal entities, "You" or "Your" includes any entity
+which controls, is controlled by, or is under common control with, You, where
+"control" means (a) the power, direct or indirect, to cause the direction or
+management of such entity, whether by contract or otherwise, or (b) ownership of
+fifty percent (50%) or more of the outstanding shares or beneficial ownership of
+such entity.
+
+2.	Permitted Uses; Conditions & Restrictions.   Subject to the terms and
+conditions of this License, Apple hereby grants You, effective on the date You
+accept this License and download the Original Code, a world-wide, royalty-free,
+non-exclusive license, to the extent of Apple's Applicable Patent Rights and
+copyrights covering the Original Code, to do the following:
+
+2.1	Unmodified Code.  You may use, reproduce, display, perform, internally
+distribute within Your organization, and Externally Deploy verbatim, unmodified
+copies of the Original Code, for commercial or non-commercial purposes, provided
+that in each instance:
+
+(a)	You must retain and reproduce in all copies of Original Code the copyright
+and other proprietary notices and disclaimers of Apple as they appear in the
+Original Code, and keep intact all notices in the Original Code that refer to
+this License; and
+
+(b) 	You must include a copy of this License with every copy of Source Code of
+Covered Code and documentation You distribute or Externally Deploy, and You may
+not offer or impose any terms on such Source Code that alter or restrict this
+License or the recipients' rights hereunder, except as permitted under Section
+6.
+
+2.2	Modified Code.  You may modify Covered Code and use, reproduce, display,
+perform, internally distribute within Your organization, and Externally Deploy
+Your Modifications and Covered Code, for commercial or non-commercial purposes,
+provided that in each instance You also meet all of these conditions:
+
+(a)	You must satisfy all the conditions of Section 2.1 with respect to the
+Source Code of the Covered Code;
+
+(b)	You must duplicate, to the extent it does not already exist, the notice in
+Exhibit A in each file of the Source Code of all Your Modifications, and cause
+the modified files to carry prominent notices stating that You changed the files
+and the date of any change; and
+
+(c)	If You Externally Deploy Your Modifications, You must make Source Code of
+all Your Externally Deployed Modifications either available to those to whom You
+have Externally Deployed Your Modifications, or publicly available.  Source Code
+of Your Externally Deployed Modifications must be released under the terms set
+forth in this License, including the license grants set forth in Section 3
+below, for as long as you Externally Deploy the Covered Code or twelve (12)
+months from the date of initial External Deployment, whichever is longer. You
+should preferably distribute the Source Code of Your Externally Deployed
+Modifications electronically (e.g. download from a web site).
+
+2.3	Distribution of Executable Versions.  In addition, if You Externally Deploy
+Covered Code (Original Code and/or Modifications) in object code, executable
+form only, You must include a prominent notice, in the code itself as well as in
+related documentation, stating that Source Code of the Covered Code is available
+under the terms of this License with information on how and where to obtain such
+Source Code.
+
+2.4	Third Party Rights.  You expressly acknowledge and agree that although
+Apple and each Contributor grants the licenses to their respective portions of
+the Covered Code set forth herein, no assurances are provided by Apple or any
+Contributor that the Covered Code does not infringe the patent or other
+intellectual property rights of any other entity. Apple and each Contributor
+disclaim any liability to You for claims brought by any other entity based on
+infringement of intellectual property rights or otherwise. As a condition to
+exercising the rights and licenses granted hereunder, You hereby assume sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow You to
+distribute the Covered Code, it is Your responsibility to acquire that license
+before distributing the Covered Code.
+
+3.	Your Grants.  In consideration of, and as a condition to, the licenses
+granted to You under this License, You hereby grant to any person or entity
+receiving or distributing Covered Code under this License a non-exclusive,
+royalty-free, perpetual, irrevocable license, under Your Applicable Patent
+Rights and other intellectual property rights (other than patent) owned or
+controlled by You, to use, reproduce, display, perform, modify, sublicense,
+distribute and Externally Deploy Your Modifications of the same scope and extent
+as Apple's licenses under Sections 2.1 and 2.2 above.
+
+4.	Larger Works.  You may create a Larger Work by combining Covered Code with
+other code not governed by the terms of this License and distribute the Larger
+Work as a single product.  In each such instance, You must make sure the
+requirements of this License are fulfilled for the Covered Code or any portion
+thereof.
+
+5.	Limitations on Patent License.   Except as expressly stated in Section 2, no
+other patent rights, express or implied, are granted by Apple herein. 
+Modifications and/or Larger Works may require additional patent licenses from
+Apple which Apple may grant in its sole discretion.
+
+6.	Additional Terms.  You may choose to offer, and to charge a fee for,
+warranty, support, indemnity or liability obligations and/or other rights
+consistent with the scope of the license granted herein ("Additional Terms") to
+one or more recipients of Covered Code. However, You may do so only on Your own
+behalf and as Your sole responsibility, and not on behalf of Apple or any
+Contributor. You must obtain the recipient's agreement that any such Additional
+Terms are offered by You alone, and You hereby agree to indemnify, defend and
+hold Apple and every Contributor harmless for any liability incurred by or
+claims asserted against Apple or such Contributor by reason of any such
+Additional Terms.
+
+7.	Versions of the License.  Apple may publish revised and/or new versions of
+this License from time to time.  Each version will be given a distinguishing
+version number.  Once Original Code has been published under a particular
+version of this License, You may continue to use it under the terms of that
+version. You may also choose to use such Original Code under the terms of any
+subsequent version of this License published by Apple.  No one other than Apple
+has the right to modify the terms applicable to Covered Code created under this
+License.
+
+8.	NO WARRANTY OR SUPPORT.  The Covered Code may contain in whole or in part
+pre-release, untested, or not fully tested works.  The Covered Code may contain
+errors that could cause failures or loss of data, and may be incomplete or
+contain inaccuracies.  You expressly acknowledge and agree that use of the
+Covered Code, or any portion thereof, is at Your sole and entire risk.  THE
+COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
+ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE"
+FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM
+ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY
+QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT,
+AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE AND EACH CONTRIBUTOR DOES NOT
+WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE
+FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, THAT THE
+OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT
+DEFECTS IN THE COVERED CODE WILL BE CORRECTED.  NO ORAL OR WRITTEN INFORMATION
+OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR
+SHALL CREATE A WARRANTY.  You acknowledge that the Covered Code is not intended
+for use in the operation of nuclear facilities, aircraft navigation,
+communication systems, or air traffic control machines in which case the failure
+of the Covered Code could lead to death, personal injury, or severe physical or
+environmental damage.
+
+9.	LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT
+SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE
+OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER UNDER A
+THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR
+OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY
+REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF
+INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In
+no event shall Apple's total liability to You for all damages (other than as may
+be required by applicable law) under this License exceed the amount of fifty
+dollars ($50.00).
+
+10.	Trademarks.  This License does not grant any rights to use the trademarks
+or trade names  "Apple", "Mac", "Mac OS", "QuickTime", "QuickTime Streaming
+Server" or any other trademarks, service marks, logos or trade names belonging
+to Apple (collectively "Apple Marks") or to any trademark, service mark, logo or
+trade name belonging to any Contributor.  You agree not to use any Apple Marks
+in or as part of the name of products derived from the Original Code or to
+endorse or promote products derived from the Original Code other than as
+expressly permitted by and in strict compliance at all times with Apple's third
+party trademark usage guidelines which are posted at
+http://www.apple.com/legal/guidelinesfor3rdparties.html.
+
+11.	Ownership. Subject to the licenses granted under this License, each
+Contributor retains all rights, title and interest in and to any Modifications
+made by such Contributor.  Apple retains all rights, title and interest in and
+to the Original Code and any Modifications made by or on behalf of Apple ("Apple
+Modifications"), and such Apple Modifications will not be automatically subject
+to this License.  Apple may, at its sole discretion, choose to license such
+Apple Modifications under this License, or on different terms from those
+contained in this License or may choose not to license them at all.
+
+12.	Termination.
+
+12.1	Termination.  This License and the rights granted hereunder will
+terminate:
+
+(a)	automatically without notice from Apple if You fail to comply with any
+term(s) of this License and fail to cure such breach within 30 days of becoming
+aware of such breach; (b)	immediately in the event of the circumstances
+described in Section 13.5(b); or (c)	automatically without notice from Apple if
+You, at any time during the term of this License, commence an action for patent
+infringement against Apple; provided that Apple did not first commence an action
+for patent infringement against You in that instance.
+
+12.2	Effect of Termination.  Upon termination, You agree to immediately stop
+any further use, reproduction, modification, sublicensing and distribution of
+the Covered Code.  All sublicenses to the Covered Code which have been properly
+granted prior to termination shall survive any termination of this License. 
+Provisions which, by their nature, should remain in effect beyond the
+termination of this License shall survive, including but not limited to Sections
+3, 5, 8, 9, 10, 11, 12.2 and 13.  No party will be liable to any other for
+compensation, indemnity or damages of any sort solely as a result of terminating
+this License in accordance with its terms, and termination of this License will
+be without prejudice to any other right or remedy of any party.
+
+13. 	Miscellaneous.
+
+13.1	Government End Users.   The Covered Code is a "commercial item" as defined
+in FAR 2.101.  Government software and technical data rights in the Covered Code
+include only those rights customarily provided to the public as defined in this
+License. This customary commercial license in technical data and software is
+provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer
+Software) and, for Department of Defense purchases, DFAR 252.227-7015 (Technical
+Data -- Commercial Items) and 227.7202-3 (Rights in Commercial Computer Software
+or Computer Software Documentation).  Accordingly, all U.S. Government End Users
+acquire Covered Code with only those rights set forth herein.
+
+13.2	Relationship of Parties.  This License will not be construed as creating
+an agency, partnership, joint venture or any other form of legal association
+between or among You, Apple or any Contributor, and You will not represent to
+the contrary, whether expressly, by implication, appearance or otherwise.
+
+13.3	Independent Development.   Nothing in this License will impair Apple's
+right to acquire, license, develop, have others develop for it, market and/or
+distribute technology or products that perform the same or similar functions as,
+or otherwise compete with, Modifications, Larger Works, technology or products
+that You may develop, produce, market or distribute.
+
+13.4	Waiver; Construction.  Failure by Apple or any Contributor to enforce any
+provision of this License will not be deemed a waiver of future enforcement of
+that or any other provision.  Any law or regulation which provides that the
+language of a contract shall be construed against the drafter will not apply to
+this License.
+
+13.5	Severability.  (a) If for any reason a court of competent jurisdiction
+finds any provision of this License, or portion thereof, to be unenforceable,
+that provision of the License will be enforced to the maximum extent permissible
+so as to effect the economic benefits and intent of the parties, and the
+remainder of this License will continue in full force and effect.  (b)
+Notwithstanding the foregoing, if applicable law prohibits or restricts You from
+fully and/or specifically complying with Sections 2 and/or 3 or prevents the
+enforceability of either of those Sections, this License will immediately
+terminate and You must immediately discontinue any use of the Covered Code and
+destroy all copies of it that are in your possession or control.
+
+13.6	Dispute Resolution.  Any litigation or other dispute resolution between
+You and Apple relating to this License shall take place in the Northern District
+of California, and You and Apple hereby consent to the personal jurisdiction of,
+and venue in, the state and federal courts within that District with respect to
+this License. The application of the United Nations Convention on Contracts for
+the International Sale of Goods is expressly excluded.
+
+13.7	Entire Agreement; Governing Law.  This License constitutes the entire
+agreement between the parties with respect to the subject matter hereof.  This
+License shall be governed by the laws of the United States and the State of
+California, except that body of California law concerning conflicts of law.
+
+Where You are located in the province of Quebec, Canada, the following clause
+applies:  The parties hereby confirm that they have requested that this License
+and all related documents be drafted in English.  Les parties ont exigé que le
+présent contrat et tous les documents connexes soient rédigés en anglais.
+
+EXHIBIT A.
+
+"Portions Copyright (c) 1999-2007 Apple Inc.  All Rights Reserved.
+
+This file contains Original Code and/or Modifications of Original Code as
+defined in and that are subject to the Apple Public Source License Version 2.0
+(the 'License').  You may not use this file except in compliance with the
+License.  Please obtain a copy of the License at
+http://www.opensource.apple.com/apsl/ and read it before using this file.
+
+The Original Code and all software distributed under the License are distributed
+on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
+AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION,
+ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
+ENJOYMENT OR NON-INFRINGEMENT.  Please see the License for the specific language
+governing rights and limitations under the License." 
+
+
+
+ + +
+ David M. Gay's floating point routines + + homepage + - + show license + +
+
/****************************************************************
+ *
+ * The author of this software is David M. Gay.
+ *
+ * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ *
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ ***************************************************************/
+
+
+
+ + +
+ Error Prone + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Expat XML Parser + + homepage + - + show license + +
+
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
+                               and Clark Cooper
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+ + +
+ Flot Javascript/JQuery library for creating graphs + + homepage + - + show license + +
+
Copyright (c) 2007-2013 IOLA and Ole Laursen
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+ + +
+ FreeType + + homepage + - + show license + +
+
                    The FreeType Project LICENSE
+                    ----------------------------
+
+                            2006-Jan-27
+
+                    Copyright 1996-2002, 2006 by
+          David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+  The FreeType  Project is distributed in  several archive packages;
+  some of them may contain, in addition to the FreeType font engine,
+  various tools and  contributions which rely on, or  relate to, the
+  FreeType Project.
+
+  This  license applies  to all  files found  in such  packages, and
+  which do not  fall under their own explicit  license.  The license
+  affects  thus  the  FreeType   font  engine,  the  test  programs,
+  documentation and makefiles, at the very least.
+
+  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
+  (Independent JPEG  Group) licenses, which  all encourage inclusion
+  and  use of  free  software in  commercial  and freeware  products
+  alike.  As a consequence, its main points are that:
+
+    o We don't promise that this software works. However, we will be
+      interested in any kind of bug reports. (`as is' distribution)
+
+    o You can  use this software for whatever you  want, in parts or
+      full form, without having to pay us. (`royalty-free' usage)
+
+    o You may not pretend that  you wrote this software.  If you use
+      it, or  only parts of it,  in a program,  you must acknowledge
+      somewhere  in  your  documentation  that  you  have  used  the
+      FreeType code. (`credits')
+
+  We  specifically  permit  and  encourage  the  inclusion  of  this
+  software, with  or without modifications,  in commercial products.
+  We  disclaim  all warranties  covering  The  FreeType Project  and
+  assume no liability related to The FreeType Project.
+
+
+  Finally,  many  people  asked  us  for  a  preferred  form  for  a
+  credit/disclaimer to use in compliance with this license.  We thus
+  encourage you to use the following text:
+
+   """
+    Portions of this software are copyright © <year> The FreeType
+    Project (www.freetype.org).  All rights reserved.
+   """
+
+  Please replace <year> with the value from the FreeType version you
+  actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+  Throughout this license,  the terms `package', `FreeType Project',
+  and  `FreeType  archive' refer  to  the  set  of files  originally
+  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
+  Werner Lemberg) as the `FreeType Project', be they named as alpha,
+  beta or final release.
+
+  `You' refers to  the licensee, or person using  the project, where
+  `using' is a generic term including compiling the project's source
+  code as  well as linking it  to form a  `program' or `executable'.
+  This  program is  referred to  as  `a program  using the  FreeType
+  engine'.
+
+  This  license applies  to all  files distributed  in  the original
+  FreeType  Project,   including  all  source   code,  binaries  and
+  documentation,  unless  otherwise  stated   in  the  file  in  its
+  original, unmodified form as  distributed in the original archive.
+  If you are  unsure whether or not a particular  file is covered by
+  this license, you must contact us to verify this.
+
+  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
+  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
+  specified below.
+
+1. No Warranty
+--------------
+
+  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
+  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
+  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
+  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
+  USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+  This  license  grants  a  worldwide, royalty-free,  perpetual  and
+  irrevocable right  and license to use,  execute, perform, compile,
+  display,  copy,   create  derivative  works   of,  distribute  and
+  sublicense the  FreeType Project (in  both source and  object code
+  forms)  and  derivative works  thereof  for  any  purpose; and  to
+  authorize others  to exercise  some or all  of the  rights granted
+  herein, subject to the following conditions:
+
+    o Redistribution of  source code  must retain this  license file
+      (`FTL.TXT') unaltered; any  additions, deletions or changes to
+      the original  files must be clearly  indicated in accompanying
+      documentation.   The  copyright   notices  of  the  unaltered,
+      original  files must  be  preserved in  all  copies of  source
+      files.
+
+    o Redistribution in binary form must provide a  disclaimer  that
+      states  that  the software is based in part of the work of the
+      FreeType Team,  in  the  distribution  documentation.  We also
+      encourage you to put an URL to the FreeType web page  in  your
+      documentation, though this isn't mandatory.
+
+  These conditions  apply to any  software derived from or  based on
+  the FreeType Project,  not just the unmodified files.   If you use
+  our work, you  must acknowledge us.  However, no  fee need be paid
+  to us.
+
+3. Advertising
+--------------
+
+  Neither the  FreeType authors and  contributors nor you  shall use
+  the name of the  other for commercial, advertising, or promotional
+  purposes without specific prior written permission.
+
+  We suggest,  but do not require, that  you use one or  more of the
+  following phrases to refer  to this software in your documentation
+  or advertising  materials: `FreeType Project',  `FreeType Engine',
+  `FreeType library', or `FreeType Distribution'.
+
+  As  you have  not signed  this license,  you are  not  required to
+  accept  it.   However,  as  the FreeType  Project  is  copyrighted
+  material, only  this license, or  another one contracted  with the
+  authors, grants you  the right to use, distribute,  and modify it.
+  Therefore,  by  using,  distributing,  or modifying  the  FreeType
+  Project, you indicate that you understand and accept all the terms
+  of this license.
+
+4. Contacts
+-----------
+
+  There are two mailing lists related to FreeType:
+
+    o freetype@nongnu.org
+
+      Discusses general use and applications of FreeType, as well as
+      future and  wanted additions to the  library and distribution.
+      If  you are looking  for support,  start in  this list  if you
+      haven't found anything to help you in the documentation.
+
+    o freetype-devel@nongnu.org
+
+      Discusses bugs,  as well  as engine internals,  design issues,
+      specific licenses, porting, etc.
+
+  Our home page can be found at
+
+    http://www.freetype.org
+
+
+--- end of FTL.TXT ---
+
+
+
+ + +
+ GifPlayer Animated GIF Library + + homepage + - + show license + +
+
                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Google Cache Invalidation API + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Google Cardboard + + homepage + - + show license + +
+
   Copyright (c) 2014, Google Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+
+
+ + +
+ Google Input Tools + + homepage + - + show license + +
+
                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2013 Google Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+ + +
+ Google Toolbox for Mac + + homepage + - + show license + +
+
See src/COPYING
+
+
+
+ + +
+ Hardware Composer Plus + + homepage + - + show license + +
+
// Copyright 2014 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Headless Android Heap Analyzer + + homepage + - + show license + +
+
perflib, guava:
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+================================================================================
+trove4j:
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2.1 of the License, or (at your option) any
+later version. This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+for more details. You should have received a copy of the GNU Lesser General
+Public License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Two classes (HashFunctions and PrimeFinder) included in Trove are licensed
+under the following terms:
+
+Copyright (c) 1999 CERN - European Organization for Nuclear Research.
+Permission to use, copy, modify, distribute and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that the
+above copyright notice appear in all copies and that both that copyright notice
+and this permission notice appear in supporting documentation. CERN makes no
+representations about the suitability of this software for any purpose. It is
+provided "as is" without expressed or implied warranty.
+
+
+
+
+ + +
+ IAccessible2 COM interfaces for accessibility + + homepage + - + show license + +
+
/*************************************************************************
+ *
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+
+
+ + +
+ ISimpleDOM COM interfaces for accessibility + + homepage + - + show license + +
+
/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2002
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+
+ + +
+ International Phone Number Library + + homepage + - + show license + +
+
                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+ + +
+ JMake + + homepage + - + show license + +
+
		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
+
+
+
+ + +
+ Khronos header files + + homepage + - + show license + +
+
Copyright (c) 2007-2010 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+
+SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+
+Copyright (C) 1992 Silicon Graphics, Inc. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice including the dates of first publication and either
+this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
+shall be included in all copies or substantial portions of the Software. 
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON
+GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Silicon Graphics, Inc. shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from Silicon
+Graphics, Inc.
+
+
+
+ + +
+ LCOV - the LTP GCOV extension + + homepage + - + show license + +
+
		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
+
+
+ + +
+ LZMA SDK + + homepage + - + show license + +
+
LZMA SDK is placed in the public domain.
+
+
+
+ + +
+ LeakCanary + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+ + +
+ LevelDB: A Fast Persistent Key-Value Store + + homepage + - + show license + +
+
Copyright (c) 2011 The LevelDB Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ MediaController android sample. + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ Mozilla Personal Security Manager + + homepage + - + show license + +
+
/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape security libraries.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+
+ + +
+ NSBezierPath additions from Sean Patrick O'Brien + + homepage + - + show license + +
+
Copyright 2008 MolokoCacao
+All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted providing that the following conditions 
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ NVidia Control X Extension Library + + homepage + - + show license + +
+
/*
+ * Copyright (c) 2008 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+ + +
+ Netscape Portable Runtime (NSPR) + + homepage + - + show license + +
+
/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape Portable Runtime (NSPR).
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+
+ + +
+ Network Security Services (NSS) + + homepage + - + show license + +
+
/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape security libraries.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1994-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+
+ + +
+ OTS (OpenType Sanitizer) + + homepage + - + show license + +
+
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ OpenH264 + + homepage + - + show license + +
+
Copyright (c) 2013, Cisco Systems
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ + +
+ OpenMAX DL + + homepage + - + show license + +
+
Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file in the root of the source tree. All
+contributing project authors may be found in the AUTHORS file in the
+root of the source tree.
+
+The files were originally licensed by ARM Limited.
+
+The following files:
+
+    * dl/api/omxtypes.h
+    * dl/sp/api/omxSP.h
+
+are licensed by Khronos:
+
+Copyright © 2005-2008 The Khronos Group Inc. All Rights Reserved. 
+
+These materials are protected by copyright laws and contain material 
+proprietary to the Khronos Group, Inc.  You may use these materials 
+for implementing Khronos specifications, without altering or removing 
+any trademark, copyright or other notice from the specification.
+
+Khronos Group makes no, and expressly disclaims any, representations 
+or warranties, express or implied, regarding these materials, including, 
+without limitation, any implied warranties of merchantability or fitness 
+for a particular purpose or non-infringement of any intellectual property. 
+Khronos Group makes no, and expressly disclaims any, warranties, express 
+or implied, regarding the correctness, accuracy, completeness, timeliness, 
+and reliability of these materials. 
+
+Under no circumstances will the Khronos Group, or any of its Promoters, 
+Contributors or Members or their respective partners, officers, directors, 
+employees, agents or representatives be liable for any damages, whether 
+direct, indirect, special or consequential damages for lost revenues, 
+lost profits, or otherwise, arising from or in connection with these 
+materials.
+
+Khronos and OpenMAX are trademarks of the Khronos Group Inc. 
+
+
+
+ + +
+ PDFium + + homepage + - + show license + +
+
// Copyright 2014 PDFium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ PLY (Python Lex-Yacc) + + homepage + - + show license + +
+
PLY (Python Lex-Yacc)                   Version 3.4
+
+Copyright (C) 2001-2011,
+David M. Beazley (Dabeaz LLC)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.  
+* Redistributions in binary form must reproduce the above copyright notice, 
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.  
+* Neither the name of the David Beazley or Dabeaz LLC may be used to
+  endorse or promote products derived from this software without
+  specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ + +
+ Paul Hsieh's SuperFastHash + + homepage + - + show license + +
+
Paul Hsieh OLD BSD license
+
+Copyright (c) 2010, Paul Hsieh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+* Neither my name, Paul Hsieh, nor the names of any other contributors to the
+  code use may not be used to endorse or promote products derived from this
+  software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Polymer + + homepage + - + show license + +
+
// Copyright (c) 2012 The Polymer Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Proguard + + homepage + - + show license + +
+
                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+
+
+ + +
+ Protocol Buffers + + homepage + - + show license + +
+
Copyright 2008, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
+
+
+
+ + +
+ Quick Color Management System + + homepage + - + show license + +
+
qcms
+Copyright (C) 2009 Mozilla Corporation
+Copyright (C) 1998-2007 Marti Maria
+
+Permission is hereby granted, free of charge, to any person obtaining 
+a copy of this software and associated documentation files (the "Software"), 
+to deal in the Software without restriction, including without limitation 
+the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the Software 
+is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
+THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+ + +
+ SMHasher + + homepage + - + show license + +
+
All MurmurHash source files are placed in the public domain.
+
+The license below applies to all other code in SMHasher:
+
+Copyright (c) 2011 Google, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+ + +
+ Skia + + homepage + - + show license + +
+
// Copyright (c) 2011 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--------------------------------------------------------------------------------
+third_party/etc1 is under the following license:
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+--------------------------------------------------------------------------------
+Some files under resources are under the following license:
+
+Unlimited Commercial Use
+We try to make it clear that you may use all clipart from Openclipart even for unlimited commercial use. We believe that giving away our images is a great way to share with the world our talents and that will come back around in a better form.
+
+May I Use Openclipart for?
+We put together a small chart of as many possibilities and questions we have heard from people asking how they may use Openclipart. If you have an additional question, please email love@openclipart.org.
+
+All Clipart are Released into the Public Domain.
+Each artist at Openclipart releases all rights to the images they share at Openclipart. The reason is so that there is no friction in using and sharing images authors make available at this website so that each artist might also receive the same benefit in using other artists clipart totally for any possible reason.
+
+
+
+ + +
+ Snappy: A fast compressor/decompressor + + homepage + - + show license + +
+
Copyright 2011, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Speech Dispatcher + + homepage + - + show license + +
+
		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+
+
+
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must
+be allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at least
+    three years, to give the same user the materials specified in
+    Subsection 6a, above, for a charge no more than the cost of
+    performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+
+
+
+
+
+ + +
+ Strongtalk + + homepage + - + show license + +
+
Copyright (c) 1994-2006 Sun Microsystems Inc.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+- Redistribution in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of Sun Microsystems or the names of contributors may
+be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Sudden Motion Sensor library + + homepage + - + show license + +
+
SMSLib Sudden Motion Sensor Access Library
+Copyright (c) 2010 Suitable Systems
+All rights reserved.
+
+Developed by: Daniel Griscom
+              Suitable Systems
+              http://www.suitable.com
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal with the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimers.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimers in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the names of Suitable Systems nor the names of its
+contributors may be used to endorse or promote products derived from
+this Software without specific prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
+
+For more information about SMSLib, see
+   <http://www.suitable.com/tools/smslib.html>
+or contact
+   Daniel Griscom
+   Suitable Systems
+   1 Centre Street, Suite 204
+   Wakefield, MA 01880
+   (781) 665-0053
+
+
+
+ + +
+ SwiftShader software renderer. + + homepage + - + show license + +
+
This product includes SwiftShader Software GPU Tookit,
+Copyright(c)2003-2011 TransGaming Inc
+
+
+
+ + +
+ The USB ID Repository + + homepage + - + show license + +
+
Copyright (c) 2012, Linux USB Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+o Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+o Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+o Neither the name of the Linux USB Project nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ The library to input, validate, and display addresses. + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ V8 JavaScript Engine + + homepage + - + show license + +
+
This license applies to all parts of V8 that are not externally
+maintained libraries.  The externally maintained libraries used by V8
+are:
+
+  - PCRE test suite, located in
+    test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
+    test suite from PCRE-7.3, which is copyrighted by the University
+    of Cambridge and Google, Inc.  The copyright notice and license
+    are embedded in regexp-pcre.js.
+
+  - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
+    based on layout tests from webkit.org which are copyrighted by
+    Apple Computer, Inc. and released under a 3-clause BSD license.
+
+  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
+    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
+    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
+    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
+    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
+    This code is copyrighted by Sun Microsystems Inc. and released
+    under a 3-clause BSD license.
+
+  - Valgrind client API header, located at third_party/valgrind/valgrind.h
+    This is release under the BSD license.
+
+These libraries have their own licenses; we recommend you read them,
+as their terms may differ from the terms below.
+
+Further license information can be found in LICENSE files located in 
+sub-directories.
+
+Copyright 2014, the V8 project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Vulkan API headers + + homepage + - + show license + +
+
+Copyright (C) 2015 Valve Corporation
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+
+Copyright (C) 2016 Valve Corporation
+Copyright (C) 2016 Google Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+
+stb_trutype.h:
+stb_truetype.h - v1.07 - public domain
+authored from 2009-2015 by Sean Barrett / RAD Game Tools
+
+LICENSE
+
+This software is in the public domain. Where that dedication is not
+recognized, you are granted a perpetual, irrevocable license to copy,
+distribute, and modify this file as you see fit.
+
+
+
+glm:
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+/// 
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+/// 
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+
+
+
+
+ + +
+ WDS + + homepage + - + show license + +
+
                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+
+ + +
+ Web Animations JS + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ WebKit + + homepage + - + show license + +
+
(WebKit doesn't distribute an explicit license.  This LICENSE is derived from
+license text in the source.)
+
+Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+2006, 2007 Alexander Kellett, Alexey Proskuryakov, Alex Mathews, Allan
+Sandfeld Jensen, Alp Toker, Anders Carlsson, Andrew Wellington, Antti
+Koivisto, Apple Inc., Arthur Langereis, Baron Schwartz, Bjoern Graf,
+Brent Fulgham, Cameron Zwarich, Charles Samuels, Christian Dywan,
+Collabora Ltd., Cyrus Patel, Daniel Molkentin, Dave Maclachlan, David
+Smith, Dawit Alemayehu, Dirk Mueller, Dirk Schulze, Don Gibson, Enrico
+Ros, Eric Seidel, Frederik Holljen, Frerich Raabe, Friedmann Kleint,
+George Staikos, Google Inc., Graham Dennis, Harri Porten, Henry Mason,
+Hiroyuki Ikezoe, Holger Hans Peter Freyther, IBM, James G. Speth, Jan
+Alonzo, Jean-Loup Gailly, John Reis, Jonas Witt, Jon Shier, Jonas
+Witt, Julien Chaffraix, Justin Haygood, Kevin Ollivier, Kevin Watters,
+Kimmo Kinnunen, Kouhei Sutou, Krzysztof Kowalczyk, Lars Knoll, Luca
+Bruno, Maks Orlovich, Malte Starostik, Mark Adler, Martin Jones,
+Marvin Decker, Matt Lilek, Michael Emmel, Mitz Pettel, mozilla.org,
+Netscape Communications Corporation, Nicholas Shanks, Nikolas
+Zimmermann, Nokia, Oliver Hunt, Opened Hand, Paul Johnston, Peter
+Kelly, Pioneer Research Center USA, Rich Moore, Rob Buis, Robin Dunn,
+Ronald Tschalär, Samuel Weinig, Simon Hausmann, Staikos Computing
+Services Inc., Stefan Schimanski, Symantec Corporation, The Dojo
+Foundation, The Karbon Developers, Thomas Boyer, Tim Copperfield,
+Tobias Anton, Torben Weis, Trolltech, University of Cambridge, Vaclav
+Slavik, Waldo Bastian, Xan Lopez, Zack Rusin
+
+The terms and conditions vary from file to file, but are one of:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+
+*OR*
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+   its contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+                  GNU LIBRARY GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+                  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+
+
+ + +
+ WebM container parser and writer. + + homepage + - + show license + +
+
Copyright (c) 2010, Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+  * Neither the name of Google nor the names of its contributors may
+    be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+
+ + +
+ WebP image encoder/decoder + + homepage + - + show license + +
+
Copyright (c) 2010, Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+  * Neither the name of Google nor the names of its contributors may
+    be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional IP Rights Grant (Patents)
+------------------------------------
+
+"These implementations" means the copyrightable works that implement the WebM
+codecs distributed by Google as part of the WebM Project.
+
+Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
+royalty-free, irrevocable (except as stated in this section) patent license to
+make, have made, use, offer to sell, sell, import, transfer, and otherwise
+run, modify and propagate the contents of these implementations of WebM, where
+such license applies only to those patent claims, both currently owned by
+Google and acquired in the future, licensable by Google that are necessarily
+infringed by these implementations of WebM. This grant does not include claims
+that would be infringed only as a consequence of further modification of these
+implementations. If you or your agent or exclusive licensee institute or order
+or agree to the institution of patent litigation or any other patent
+enforcement activity against any entity (including a cross-claim or
+counterclaim in a lawsuit) alleging that any of these implementations of WebM
+or any code incorporated within any of these implementations of WebM
+constitute direct or contributory patent infringement, or inducement of
+patent infringement, then any patent rights granted to you under this License
+for these implementations of WebM shall terminate as of the date such
+litigation is filed.
+
+
+
+ + +
+ WebRTC + + homepage + - + show license + +
+
Copyright (c) 2011, The WebRTC project authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+  * Neither the name of Google nor the names of its contributors may
+    be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ Windows Template Library (WTL) + + homepage + - + show license + +
+
Microsoft Permissive License (Ms-PL)
+Published: October 12, 2006
+
+
+This license governs use of the accompanying software. If you use the software,
+you accept this license. If you do not accept the license, do not use the
+software.
+
+
+1. Definitions
+
+The terms "reproduce," "reproduction," "derivative works," and "distribution"
+have the same meaning here as under U.S. copyright law.
+
+A "contribution" is the original software, or any additions or changes to the
+software.
+
+A "contributor" is any person that distributes its contribution under this
+license.
+
+"Licensed patents" are a contributor’s patent claims that read directly on its
+contribution.
+
+
+2. Grant of Rights
+
+(A) Copyright Grant- Subject to the terms of this license, including the
+license conditions and limitations in section 3, each contributor grants you a
+non-exclusive, worldwide, royalty-free copyright license to reproduce its
+contribution, prepare derivative works of its contribution, and distribute its
+contribution or any derivative works that you create.
+
+(B) Patent Grant- Subject to the terms of this license, including the license
+conditions and limitations in section 3, each contributor grants you a
+non-exclusive, worldwide, royalty-free license under its licensed patents to
+make, have made, use, sell, offer for sale, import, and/or otherwise dispose of
+its contribution in the software or derivative works of the contribution in the
+software.
+
+
+3. Conditions and Limitations
+
+(A) No Trademark License- This license does not grant you rights to use any
+contributors’ name, logo, or trademarks.
+
+(B) If you bring a patent claim against any contributor over patents that you
+claim are infringed by the software, your patent license from such contributor
+to the software ends automatically.
+
+(C) If you distribute any portion of the software, you must retain all
+copyright, patent, trademark, and attribution notices that are present in the
+software.
+
+(D) If you distribute any portion of the software in source code form, you may
+do so only under this license by including a complete copy of this license with
+your distribution. If you distribute any portion of the software in compiled or
+object code form, you may only do so under a license that complies with this
+license.
+
+(E) The software is licensed "as-is." You bear the risk of using it. The
+contributors give no express warranties, guarantees or conditions. You may have
+additional consumer rights under your local laws which this license cannot
+change. To the extent permitted under your local laws, the contributors exclude
+the implied warranties of merchantability, fitness for a particular purpose and
+non-infringement.
+
+
+
+ + +
+ XZ Utils + + homepage + - + show license + +
+
See http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/xz/COPYING
+
+
+
+ + +
+ blimp_fonts + + homepage + - + show license + +
+
All the font files are available in the font_bundle subdirectory.
+
+Fonts under Apache License Version 2.0 license:
+
+AndroidClock.ttf
+AndroidClock_Highlight.ttf
+AndroidClock_Solid.ttf
+Clockopia.ttf
+ComingSoon.ttf
+DroidSansFallback.ttf
+DroidSansFallbackFull.ttf
+DroidSansMono.ttf
+MTLc3m.ttf
+MTLmr3m.ttf
+NotoColorEmoji.ttf
+NotoKufiArabic-Bold.ttf
+NotoKufiArabic-Regular.ttf
+NotoNaskhArabic-Bold.ttf
+NotoNaskhArabic-Regular.ttf
+NotoNaskhArabicUI-Bold.ttf
+NotoNaskhArabicUI-Regular.ttf
+NotoSansArmenian-Bold.ttf
+NotoSansArmenian-Regular.ttf
+NotoSansAvestan-Regular.ttf
+NotoSansBalinese-Regular.ttf
+NotoSansBamum-Regular.ttf
+NotoSansBatak-Regular.ttf
+NotoSansBengali-Bold.ttf
+NotoSansBengali-Regular.ttf
+NotoSansBengaliUI-Bold.ttf
+NotoSansBengaliUI-Regular.ttf
+NotoSans-BoldItalic.ttf
+NotoSans-Bold.ttf
+NotoSansBrahmi-Regular.ttf
+NotoSansBuginese-Regular.ttf
+NotoSansBuhid-Regular.ttf
+NotoSansCanadianAboriginal-Regular.ttf
+NotoSansCarian-Regular.ttf
+NotoSansCham-Bold.ttf
+NotoSansCham-Regular.ttf
+NotoSansCherokee-Regular.ttf
+NotoSansCoptic-Regular.ttf
+NotoSansCuneiform-Regular.ttf
+NotoSansCypriot-Regular.ttf
+NotoSansDeseret-Regular.ttf
+NotoSansDevanagari-Bold.ttf
+NotoSansDevanagari-Regular.ttf
+NotoSansDevanagariUI-Bold.ttf
+NotoSansDevanagariUI-Regular.ttf
+NotoSansEgyptianHieroglyphs-Regular.ttf
+NotoSansEthiopic-Bold.ttf
+NotoSansEthiopic-Regular.ttf
+NotoSansGeorgian-Bold.ttf
+NotoSansGeorgian-Regular.ttf
+NotoSansGlagolitic-Regular.ttf
+NotoSansGothic-Regular.ttf
+NotoSansGujarati-Bold.ttf
+NotoSansGujarati-Regular.ttf
+NotoSansGujaratiUI-Bold.ttf
+NotoSansGujaratiUI-Regular.ttf
+NotoSansGurmukhi-Bold.ttf
+NotoSansGurmukhi-Regular.ttf
+NotoSansGurmukhiUI-Bold.ttf
+NotoSansGurmukhiUI-Regular.ttf
+NotoSansHanunoo-Regular.ttf
+NotoSansHebrew-Bold.ttf
+NotoSansHebrew-Regular.ttf
+NotoSansImperialAramaic-Regular.ttf
+NotoSansInscriptionalPahlavi-Regular.ttf
+NotoSansInscriptionalParthian-Regular.ttf
+NotoSans-Italic.ttf
+NotoSansJavanese-Regular.ttf
+NotoSansKaithi-Regular.ttf
+NotoSansKannada-Bold.ttf
+NotoSansKannada-Regular.ttf
+NotoSansKannadaUI-Bold.ttf
+NotoSansKannadaUI-Regular.ttf
+NotoSansKayahLi-Regular.ttf
+NotoSansKharoshthi-Regular.ttf
+NotoSansKhmer-Bold.ttf
+NotoSansKhmer-Regular.ttf
+NotoSansKhmerUI-Bold.ttf
+NotoSansKhmerUI-Regular.ttf
+NotoSansLao-Bold.ttf
+NotoSansLao-Regular.ttf
+NotoSansLaoUI-Bold.ttf
+NotoSansLaoUI-Regular.ttf
+NotoSansLepcha-Regular.ttf
+NotoSansLimbu-Regular.ttf
+NotoSansLinearB-Regular.ttf
+NotoSansLisu-Regular.ttf
+NotoSansLycian-Regular.ttf
+NotoSansLydian-Regular.ttf
+NotoSansMalayalam-Bold.ttf
+NotoSansMalayalam-Regular.ttf
+NotoSansMalayalamUI-Bold.ttf
+NotoSansMalayalamUI-Regular.ttf
+NotoSansMandaic-Regular.ttf
+NotoSansMeeteiMayek-Regular.ttf
+NotoSansMongolian-Regular.ttf
+NotoSansMyanmar-Bold.ttf
+NotoSansMyanmar-Regular.ttf
+NotoSansMyanmarUI-Bold.ttf
+NotoSansMyanmarUI-Regular.ttf
+NotoSansNewTaiLue-Regular.ttf
+NotoSansNKo-Regular.ttf
+NotoSansOgham-Regular.ttf
+NotoSansOlChiki-Regular.ttf
+NotoSansOldItalic-Regular.ttf
+NotoSansOldPersian-Regular.ttf
+NotoSansOldSouthArabian-Regular.ttf
+NotoSansOldTurkic-Regular.ttf
+NotoSansOriya-Bold.ttf
+NotoSansOriya-Regular.ttf
+NotoSansOriyaUI-Bold.ttf
+NotoSansOriyaUI-Regular.ttf
+NotoSansOsmanya-Regular.ttf
+NotoSansPhagsPa-Regular.ttf
+NotoSansPhoenician-Regular.ttf
+NotoSans-Regular.ttf
+NotoSansRejang-Regular.ttf
+NotoSansRunic-Regular.ttf
+NotoSansSamaritan-Regular.ttf
+NotoSansSaurashtra-Regular.ttf
+NotoSansShavian-Regular.ttf
+NotoSansSinhala-Bold.ttf
+NotoSansSinhala-Regular.ttf
+NotoSansSundanese-Regular.ttf
+NotoSansSylotiNagri-Regular.ttf
+NotoSansSymbols-Regular-Subsetted.ttf
+NotoSansSymbols-Regular.ttf
+NotoSansSyriacEastern-Regular.ttf
+NotoSansSyriacEstrangela-Regular.ttf
+NotoSansSyriacWestern-Regular.ttf
+NotoSansTagalog-Regular.ttf
+NotoSansTagbanwa-Regular.ttf
+NotoSansTaiLe-Regular.ttf
+NotoSansTaiTham-Regular.ttf
+NotoSansTaiViet-Regular.ttf
+NotoSansTamil-Bold.ttf
+NotoSansTamil-Regular.ttf
+NotoSansTamilUI-Bold.ttf
+NotoSansTamilUI-Regular.ttf
+NotoSansTelugu-Bold.ttf
+NotoSansTelugu-Regular.ttf
+NotoSansTeluguUI-Bold.ttf
+NotoSansTeluguUI-Regular.ttf
+NotoSansThaana-Bold.ttf
+NotoSansThaana-Regular.ttf
+NotoSansThai-Bold.ttf
+NotoSansThai-Regular.ttf
+NotoSansThaiUI-Bold.ttf
+NotoSansThaiUI-Regular.ttf
+NotoSansTibetan-Regular.ttf
+NotoSansTifinagh-Regular.ttf
+NotoSansUgaritic-Regular.ttf
+NotoSansUI-BoldItalic.ttf
+NotoSansUI-Bold.ttf
+NotoSansUI-Italic.ttf
+NotoSansUI-Regular.ttf
+NotoSansVai-Regular.ttf
+NotoSansYi-Regular.ttf
+NotoSerifArmenian-Bold.ttf
+NotoSerifArmenian-Regular.ttf
+NotoSerif-BoldItalic.ttf
+NotoSerif-Bold.ttf
+NotoSerifGeorgian-Bold.ttf
+NotoSerifGeorgian-Regular.ttf
+NotoSerif-Italic.ttf
+NotoSerifKhmer-Bold.ttf
+NotoSerifKhmer-Regular.ttf
+NotoSerifLao-Bold.ttf
+NotoSerifLao-Regular.ttf
+NotoSerif-Regular.ttf
+NotoSerifThai-Bold.ttf
+NotoSerifThai-Regular.ttf
+Roboto-BlackItalic.ttf
+Roboto-Black.ttf
+Roboto-BoldItalic.ttf
+Roboto-Bold.ttf
+RobotoCondensed-BoldItalic.ttf
+RobotoCondensed-Bold.ttf
+RobotoCondensed-Italic.ttf
+RobotoCondensed-LightItalic.ttf
+RobotoCondensed-Light.ttf
+RobotoCondensed-Regular.ttf
+Roboto-Italic.ttf
+Roboto-LightItalic.ttf
+Roboto-Light.ttf
+Roboto-MediumItalic.ttf
+Roboto-Medium.ttf
+Roboto-Regular.ttf
+Roboto-ThinItalic.ttf
+Roboto-Thin.ttf
+
+
+Fonts under SIL Open Font License, Version 1.1:
+(Full license in LICENSE.OFL)
+
+NotoSansJP-Regular.otf
+NotoSansJP-Regular-Subsetted.otf
+NotoSansKR-Regular.otf
+NotoSansSC-Regular.otf
+NotoSansTC-Regular.otf
+
+
+Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'
+This Font Software is licensed under the SIL Open Font License, Version 1.1
+(Full license in LICENSE.OFL)
+CarroisGothicSC-Regular.ttf
+
+
+Copyright (c) 2010, Pablo Impallari (www.impallari.com|impallari@gmail.com),
+Copyright (c) 2010, Igino Marini. (www.ikern.com|mail@iginomarini.com),
+with Reserved Font Name Dancing Script.
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+(Full license in LICENSE.OFL)
+
+DancingScript-Bold.ttf
+DancingScript-Regular.ttf
+CutiveMono.ttf
+
+
+Copyright (c) 2010, NHN Corporation (http://www.nhncorp.com),
+  (http://hangeul.naver.com/font)
+with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, Naver NanumMyeongjoEco, NanumMyeongjoEco, Naver NanumGothicLight, NanumGothicLight
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+(Full license in LICENSE.OFL)
+
+NanumGothicBold.ttf
+NanumGothic.ttf
+
+
+
+ + +
+ blink HTMLTokenizer + + homepage + - + show license + +
+
Copyright (C) 2008 Apple Inc. All Rights Reserved.
+Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/
+Copyright (C) 2010 Google, Inc. All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+ *
+THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ boringssl + + homepage + - + show license + +
+
+  LICENSE ISSUES
+  ==============
+
+  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
+  the OpenSSL License and the original SSLeay license apply to the toolkit.
+  See below for the actual license texts. Actually both licenses are BSD-style
+  Open Source licenses. In case of any license issues related to OpenSSL
+  please contact openssl-core@openssl.org.
+
+  OpenSSL License
+  ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+
+
+
+ + +
+ bspatch + + homepage + - + show license + +
+
BSD Protection License
+February 2002
+
+Preamble
+--------
+
+The Berkeley Software Distribution ("BSD") license has proven very effective
+over the years at allowing for a wide spread of work throughout both
+commercial and non-commercial products.  For programmers whose primary
+intention is to improve the general quality of available software, it is
+arguable that there is no better license than the BSD license, as it
+permits improvements to be used wherever they will help, without idealogical
+or metallic constraint.
+
+This is of particular value to those who produce reference implementations
+of proposed standards: The case of TCP/IP clearly illustrates that freely
+and universally available implementations leads the rapid acceptance of
+standards -- often even being used instead of a de jure standard (eg, OSI
+network models).
+
+With the rapid proliferation of software licensed under the GNU General
+Public License, however, the continued success of this role is called into
+question.  Given that the inclusion of a few lines of "GPL-tainted" work
+into a larger body of work will result in restricted distribution -- and
+given that further work will likely build upon the "tainted" portions,
+making them difficult to remove at a future date -- there are inevitable
+circumstances where authors would, in order to protect their goal of
+providing for the widespread usage of their work, wish to guard against
+such "GPL-taint".
+
+In addition, one can imagine that companies which operate by producing and
+selling (possibly closed-source) code would wish to protect themselves
+against the rise of a GPL-licensed competitor.  While under existing
+licenses this would mean not releasing their code under any form of open
+license, if a license existed under which they could incorporate any
+improvements back into their own (commercial) products then they might be
+far more willing to provide for non-closed distribution.
+
+For the above reasons, we put forth this "BSD Protection License": A
+license designed to retain the freedom granted by the BSD license to use
+licensed works in a wide variety of settings, both non-commercial and
+commercial, while protecting the work from having future contributors
+restrict that freedom.
+
+The precise terms and conditions for copying, distribution, and
+modification follow.
+
+BSD PROTECTION LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
+----------------------------------------------------------------
+
+0. Definitions.
+   a) "Program", below, refers to any program or work distributed under
+      the terms of this license.
+   b) A "work based on the Program", below, refers to either the Program
+      or any derivative work under copyright law.
+   c) "Modification", below, refers to the act of creating derivative works.
+   d) "You", below, refers to each licensee.
+
+1. Scope.
+   This license governs the copying, distribution, and modification of the
+   Program.  Other activities are outside the scope of this license; The
+   act of running the Program is not restricted, and the output from the
+   Program is covered only if its contents constitute a work based on the
+   Program.
+
+2. Verbatim copies.
+   You may copy and distribute verbatim copies of the Program as you
+   receive it, in any medium, provided that you conspicuously and
+   appropriately publish on each copy an appropriate copyright notice; keep
+   intact all the notices that refer to this License and to the absence of
+   any warranty; and give any other recipients of the Program a copy of this
+   License along with the Program.
+
+3. Modification and redistribution under closed license.
+   You may modify your copy or copies of the Program, and distribute
+   the resulting derivative works, provided that you meet the
+   following conditions:
+   a) The copyright notice and disclaimer on the Program must be reproduced
+      and included in the source code, documentation, and/or other materials
+      provided in a manner in which such notices are normally distributed.
+   b) The derivative work must be clearly identified as such, in order that
+      it may not be confused with the original work.
+   c) The license under which the derivative work is distributed must
+      expressly prohibit the distribution of further derivative works.
+
+4. Modification and redistribution under open license.
+   You may modify your copy or copies of the Program, and distribute
+   the resulting derivative works, provided that you meet the
+   following conditions:
+   a) The copyright notice and disclaimer on the Program must be reproduced
+      and included in the source code, documentation, and/or other materials
+      provided in a manner in which such notices are normally distributed.
+   b) You must clearly indicate the nature and date of any changes made
+      to the Program.  The full details need not necessarily be included in
+      the individual modified files, provided that each modified file is
+      clearly marked as such and instructions are included on where the
+      full details of the modifications may be found.
+   c) You must cause any work that you distribute or publish, that in whole
+      or in part contains or is derived from the Program or any part
+      thereof, to be licensed as a whole at no charge to all third
+      parties under the terms of this License.
+
+5. Implied acceptance.
+   You may not copy or distribute the Program or any derivative works except
+   as expressly provided under this license.  Consequently, any such action
+   will be taken as implied acceptance of the terms of this license.
+
+6. NO WARRANTY.
+   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+   THE COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE FOR ANY DIRECT,
+   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING, BUT
+   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+   TORT, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGES.
+
+
+
+ + +
+ chromite + + homepage + - + show license + +
+
// Copyright (c) 2006-2009 The Chromium OS Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ class-dump + + homepage + - + show license + +
+
(Copied from the README.)
+
+--------------------------------------------------------------------------------
+
+This file is part of class-dump, a utility for examining the
+Objective-C segment of Mach-O files.
+Copyright (C) 1997-1998, 2000-2001, 2004-2013 Steve Nygard.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Contact
+-------
+
+You may contact the author by:
+   e-mail:  nygard at gmail.com
+
+
+ + +
+ d3 + + homepage + - + show license + +
+
Copyright (c) 2010-2014, Michael Bostock
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* The name Michael Bostock may not be used to endorse or promote products
+  derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ dom-distiller-js + + homepage + - + show license + +
+
Copyright 2014 The Chromium Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+Parts of the following directories are available under Apache v2.0
+
+src/de
+Copyright (c) 2009-2011 Christian Kohlschütter
+
+third_party/gwt_exporter
+Copyright 2007 Timepedia.org
+
+third_party/gwt-2.5.1
+Copyright 2008 Google
+
+java/org/chromium/distiller/dev
+Copyright 2008 Google
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. 
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+
+
+ + +
+ drawElements Quality Program + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2014 The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ dynamic annotations + + homepage + - + show license + +
+
/* Copyright (c) 2008-2009, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ---
+ * Author: Kostya Serebryany
+ */
+
+
+
+ + +
+ etc1 + + homepage + - + show license + +
+
/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+ + +
+ fdlibm + + homepage + - + show license + +
+
Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunSoft, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice
+is preserved.
+
+
+
+ + +
+ ffmpeg + + homepage + - + show license + +
+
#FFmpeg:
+
+Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
+or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
+files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
+FFmpeg.
+
+Some optional parts of FFmpeg are licensed under the GNU General Public License
+version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
+these parts are used by default, you have to explicitly pass `--enable-gpl` to
+configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
+
+Specifically, the GPL parts of FFmpeg are:
+
+- libpostproc
+- optional x86 optimizations in the files
+  - `libavcodec/x86/flac_dsp_gpl.asm`
+  - `libavcodec/x86/idct_mmx.c`
+  - `libavfilter/x86/vf_removegrain.asm`
+- libutvideo encoding/decoding wrappers in
+  `libavcodec/libutvideo*.cpp`
+- the X11 grabber in `libavdevice/x11grab.c`
+- the swresample test app in
+  `libswresample/swresample-test.c`
+- the `texi2pod.pl` tool
+- the following filters in libavfilter:
+    - `f_ebur128.c`
+    - `vf_blackframe.c`
+    - `vf_boxblur.c`
+    - `vf_colormatrix.c`
+    - `vf_cover_rect.c`
+    - `vf_cropdetect.c`
+    - `vf_delogo.c`
+    - `vf_eq.c`
+    - `vf_find_rect.c`
+    - `vf_fspp.c`
+    - `vf_geq.c`
+    - `vf_histeq.c`
+    - `vf_hqdn3d.c`
+    - `vf_interlace.c`
+    - `vf_kerndeint.c`
+    - `vf_mcdeint.c`
+    - `vf_mpdecimate.c`
+    - `vf_owdenoise.c`
+    - `vf_perspective.c`
+    - `vf_phase.c`
+    - `vf_pp.c`
+    - `vf_pp7.c`
+    - `vf_pullup.c`
+    - `vf_sab.c`
+    - `vf_smartblur.c`
+    - `vf_repeatfields.c`
+    - `vf_spp.c`
+    - `vf_stereo3d.c`
+    - `vf_super2xsai.c`
+    - `vf_tinterlace.c`
+    - `vf_uspp.c`
+    - `vsrc_mptestsrc.c`
+
+Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
+the configure parameter `--enable-version3` will activate this licensing option
+for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
+`COPYING.GPLv3` to learn the exact legal terms that apply in this case.
+
+There are a handful of files under other licensing terms, namely:
+
+* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
+  `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
+  licensing details. Specifically note that you must credit the IJG in the
+  documentation accompanying your program if you only distribute executables.
+  You must also indicate any changes including additions and deletions to
+  those three files in the documentation.
+* `tests/reference.pnm` is under the expat license.
+
+
+external libraries
+==================
+
+FFmpeg can be combined with a number of external libraries, which sometimes
+affect the licensing of binaries resulting from the combination.
+
+compatible libraries
+--------------------
+
+The following libraries are under GPL:
+- frei0r
+- libcdio
+- librubberband
+- libutvideo
+- libvidstab
+- libx264
+- libx265
+- libxavs
+- libxvid
+
+When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
+passing `--enable-gpl` to configure.
+
+The OpenCORE and VisualOn libraries are under the Apache License 2.0. That
+license is incompatible with the LGPL v2.1 and the GPL v2, but not with
+version 3 of those licenses. So to combine these libraries with FFmpeg, the
+license version needs to be upgraded by passing `--enable-version3` to configure.
+
+incompatible libraries
+----------------------
+
+The Fraunhofer AAC library and FAAC are under licenses which
+are incompatible with the GPLv2 and v3. We do not know for certain if their
+licenses are compatible with the LGPL.
+If you wish to enable these libraries, pass `--enable-nonfree` to configure.
+But note that if you enable any of these libraries the resulting binary will
+be under a complex license mix that is more restrictive than the LGPL and that
+may result in additional obligations. It is possible that these
+restrictions cause the resulting binary to be unredistributeable.
+
+
+********************************************************************************
+
+libavcodec/arm/vp8dsp_armv6.S
+
+VP8 ARMv6 optimisations
+
+Copyright (c) 2010 Google Inc.
+Copyright (c) 2010 Rob Clark <rob@ti.com>
+Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
+
+This file is part of FFmpeg.
+
+FFmpeg is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+FFmpeg is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with FFmpeg; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+This code was partially ported from libvpx, which uses this license:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the
+distribution.
+
+* Neither the name of Google nor the names of its contributors may
+be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+********************************************************************************
+
+libavformat/oggparsespeex.c
+
+Copyright (C) 2008  Reimar Döffinger
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use, copy,
+      modify, merge, publish, distribute, sublicense, and/or sell copies
+      of the Software, and to permit persons to whom the Software is
+      furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+      DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+libavcodec/x86/xvididct.asm
+
+XVID MPEG-4 VIDEO CODEC
+
+ Conversion from gcc syntax to x264asm syntax with modifications
+ by Christophe Gisquet <christophe.gisquet@gmail.com>
+
+ ===========     SSE2 inverse discrete cosine transform     ===========
+
+ Copyright(C) 2003 Pascal Massimino <skal@planet-d.net>
+
+ Conversion to gcc syntax with modifications
+ by Alexander Strange <astrange@ithinksw.com>
+
+ Originally from dct/x86_asm/fdct_sse2_skal.asm in Xvid.
+
+ Vertical pass is an implementation of the scheme:
+  Loeffler C., Ligtenberg A., and Moschytz C.S.:
+  Practical Fast 1D DCT Algorithm with Eleven Multiplications,
+  Proc. ICASSP 1989, 988-991.
+
+ Horizontal pass is a double 4x4 vector/matrix multiplication,
+ (see also Intel's Application Note 922:
+  http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
+  Copyright (C) 1999 Intel Corporation)
+
+ More details at http://skal.planet-d.net/coding/dct.html
+
+ =======     MMX and XMM forward discrete cosine transform     =======
+
+ Copyright(C) 2001 Peter Ross <pross@xvid.org>
+
+ Originally provided by Intel at AP-922
+ http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
+ (See more app notes at http://developer.intel.com/vtune/cbts/strmsimd/appnotes.htm)
+ but in a limited edition.
+ New macro implements a column part for precise iDCT
+ The routine precision now satisfies IEEE standard 1180-1990.
+
+ Copyright(C) 2000-2001 Peter Gubanov <peter@elecard.net.ru>
+ Rounding trick Copyright(C) 2000 Michel Lespinasse <walken@zoy.org>
+
+ http://www.elecard.com/peter/idct.html
+ http://www.linuxvideo.org/mpeg2dec/
+
+ These examples contain code fragments for first stage iDCT 8x8
+ (for rows) and first stage DCT 8x8 (for columns)
+
+ conversion to gcc syntax by Michael Niedermayer
+
+ ======================================================================
+
+ This file is part of FFmpeg.
+
+ FFmpeg is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ FFmpeg is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with FFmpeg; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+********************************************************************************
+
+libavcodec/arm/jrevdct_arm.S
+
+C-like prototype :
+        void j_rev_dct_arm(DCTBLOCK data)
+
+   With DCTBLOCK being a pointer to an array of 64 'signed shorts'
+
+   Copyright (c) 2001 Lionel Ulmer (lionel.ulmer@free.fr / bbrox@bbrox.org)
+
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+libswresample/version.h
+
+Version macros.
+
+This file is part of libswresample
+
+libswresample is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+libswresample is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libswresample; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+********************************************************************************
+
+libavcodec/faandct.c
+
+Floating point AAN DCT
+this implementation is based upon the IJG integer AAN DCT (see jfdctfst.c)
+
+Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
+Copyright (c) 2003 Roman Shaposhnik
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+********************************************************************************
+
+libavformat/oggparsetheora.c
+
+Copyright (C) 2005  Matthieu CASTET, Alex Beregszaszi
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+libswresample/swresample.h
+
+Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)
+
+This file is part of libswresample
+
+libswresample is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+libswresample is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libswresample; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+********************************************************************************
+
+libavcodec/jfdctfst.c
+libavcodec/jfdctint_template.c
+libavcodec/jrevdct.c
+
+This file is part of the Independent JPEG Group's software.
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and
+you, its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1994-1996, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to
+these conditions:
+(1) If any part of the source code for this software is distributed, then
+this README file must be included, with this copyright and no-warranty
+notice unaltered; and any additions, deletions, or changes to the original
+files must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work
+of the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG
+code, not just to the unmodified library.  If you use our work, you ought
+to acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company
+name in advertising or publicity relating to this software or products
+derived from it.  This software may be referred to only as "the Independent
+JPEG Group's software".
+
+We specifically permit and encourage the use of this software as the basis
+of commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+********************************************************************************
+
+libavcodec/fft_fixed_32.c
+libavcodec/fft_init_table.c
+libavcodec/fft_table.h
+libavcodec/mdct_fixed_32.c
+libavcodec/mips/aacdec_mips.c
+libavcodec/mips/aacdec_mips.h
+libavcodec/mips/aacpsdsp_mips.c
+libavcodec/mips/aacsbr_mips.c
+libavcodec/mips/aacsbr_mips.h
+libavcodec/mips/amrwbdec_mips.h
+libavcodec/mips/compute_antialias_fixed.h
+libavcodec/mips/compute_antialias_float.h
+libavcodec/mips/lsp_mips.h
+libavcodec/mips/sbrdsp_mips.c
+libavutil/fixed_dsp.c
+libavutil/fixed_dsp.h
+libavutil/mips/float_dsp_mips.c
+libavutil/mips/libm_mips.h
+libavutil/softfloat_tables.h
+
+Copyright (c) 2012
+MIPS Technologies, Inc., California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+3. Neither the name of the MIPS Technologies, Inc., nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Authors:
+Branimir Vasic   (bvasic@mips.com)
+Darko Laus       (darko@mips.com)
+Djordje Pesut    (djordje@mips.com)
+Goran Cordasic   (goran@mips.com)
+Nedeljko Babic   (nedeljko.babic imgtec com)
+Mirjana Vulin    (mvulin@mips.com)
+Stanislav Ocovaj (socovaj@mips.com)
+Zoran Lukic      (zoranl@mips.com)
+
+********************************************************************************
+
+libavformat/oggdec.c
+libavformat/oggdec.h
+libavformat/oggparseogm.c
+libavformat/oggparsevorbis.c
+
+Copyright (C) 2005  Michael Ahlberg, Måns Rullgård
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+ + +
+ fips181 + + homepage + - + show license + +
+
Copyright (c) 1999, 2000, 2001, 2002
+Adel I. Mirzazhanov. All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+ 
+     1.Redistributions of source code must retain the above copyright notice,
+       this list of conditions and the following disclaimer. 
+     2.Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution. 
+     3.The name of the author may not be used to endorse or promote products
+       derived from this software without specific prior written permission. 
+ 		  
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR  ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN  NO  EVENT  SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES;  LOSS OF USE,  DATA,  OR  PROFITS;  OR BUSINESS
+INTERRUPTION)  HOWEVER  CAUSED  AND  ON  ANY  THEORY OF LIABILITY,
+WHETHER  IN  CONTRACT,   STRICT   LIABILITY,  OR  TORT  (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+		  
+
+
+ + +
+ flac + + homepage + - + show license + +
+
Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ fontconfig + + homepage + - + show license + +
+
fontconfig/COPYING
+
+Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard
+Copyright © 2005 Patrick Lam
+Copyright © 2009 Roozbeh Pournader
+Copyright © 2008,2009 Red Hat, Inc.
+Copyright © 2008 Danilo Šegan
+Copyright © 2012 Google, Inc.
+
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of the author(s) not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission.  The authors make no
+representations about the suitability of this software for any purpose.  It
+is provided "as is" without express or implied warranty.
+
+THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+
+
+
+ + +
+ google-glog's symbolization library + + homepage + - + show license + +
+
// Copyright (c) 2006, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ google-jstemplate + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ google-safe-browsing + + homepage + - + show license + +
+
Copyright 2009 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+ + +
+ harfbuzz-ng + + homepage + - + show license + +
+
HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
+For parts of HarfBuzz that are licensed under different licenses see individual
+files names COPYING in subdirectories where applicable.
+
+Copyright © 2010,2011,2012  Google, Inc.
+Copyright © 2012  Mozilla Foundation
+Copyright © 2011  Codethink Limited
+Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
+Copyright © 2009  Keith Stribley
+Copyright © 2009  Martin Hosken and SIL International
+Copyright © 2007  Chris Wilson
+Copyright © 2006  Behdad Esfahbod
+Copyright © 2005  David Turner
+Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
+Copyright © 1998-2004  David Turner and Werner Lemberg
+
+For full copyright notices consult the individual files in the package.
+
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in
+all copies of this software.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+
+
+ + +
+ hunspell + + homepage + - + show license + +
+
GPL 2.0/LGPL 2.1/MPL 1.1 tri-license
+
+The contents of this software may be used under the terms of
+the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
+see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the
+intl/ directory) the Mozilla Public License Version 1.1 or later
+(the "MPL", see COPYING.MPL).
+
+Software distributed under these licenses is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
+for the specific language governing rights and limitations under the licenses.
+
+
+
+ + +
+ hunspell dictionaries + + homepage + - + show license + +
+
GPL 2.0/LGPL 2.1/MPL 1.1 tri-license
+
+The contents of this software may be used under the terms of
+the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
+see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the
+intl/ directory) the Mozilla Public License Version 1.1 or later
+(the "MPL", see COPYING.MPL).
+
+Software distributed under these licenses is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
+for the specific language governing rights and limitations under the licenses.
+
+
+
+ + +
+ iccjpeg + + homepage + - + show license + +
+
LICENSE extracted from IJG's jpeg distribution:
+-----------------------------------------------
+
+In plain English:
+
+1. We don't promise that this software works.  (But if you find any bugs,
+   please let us know!)
+2. You can use this software for whatever you want.  You don't have to pay us.
+3. You may not pretend that you wrote this software.  If you use it in a
+   program, you must acknowledge somewhere in your documentation that
+   you've used the IJG code.
+
+In legalese:
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library.  If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it.  This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+
+
+
+ + +
+ icu + + homepage + - + show license + +
+
ICU License - ICU 1.8.1 and later
+
+   COPYRIGHT AND PERMISSION NOTICE
+
+   Copyright (c) 1995-2015 International Business Machines Corporation and
+   others
+
+   All rights reserved.
+
+   Permission is hereby granted, free of charge, to any person obtaining a
+   copy of this software and associated documentation files (the
+   "Software"), to deal in the Software without restriction, including
+   without limitation the rights to use, copy, modify, merge, publish,
+   distribute, and/or sell copies of the Software, and to permit persons to
+   whom the Software is furnished to do so, provided that the above
+   copyright notice(s) and this permission notice appear in all copies of
+   the Software and that both the above copyright notice(s) and this
+   permission notice appear in supporting documentation.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+   THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
+   INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
+   OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+   OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+   OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+   PERFORMANCE OF THIS SOFTWARE.
+
+   Except as contained in this notice, the name of a copyright holder shall
+   not be used in advertising or otherwise to promote the sale, use or
+   other dealings in this Software without prior written authorization of
+   the copyright holder.
+     ___________________________________________________________________
+
+   All trademarks and registered trademarks mentioned herein are the
+   property of their respective owners.
+     ___________________________________________________________________
+
+Third-Party Software Licenses
+
+   This section contains third-party software notices and/or additional
+   terms for licensed third-party software components included within ICU
+   libraries.
+
+  1. Unicode Data Files and Software
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2015 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in
+http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software,
+(b) this copyright and permission notice appear in associated
+documentation, and
+(c) there is clear notice in each modified Data File or in the Software
+as well as in the documentation associated with the Data File(s) or
+Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+  2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
+
+ #    The Google Chrome software developed by Google is licensed under
+ #    the BSD license. Other software included in this distribution is
+ #    provided under other licenses, as set forth below.
+ #
+ #      The BSD License
+ #      http://opensource.org/licenses/bsd-license.php
+ #      Copyright (C) 2006-2008, Google Inc.
+ #
+ #      All rights reserved.
+ #
+ #      Redistribution and use in source and binary forms, with or
+ #      without modification, are permitted provided that the
+ #      following conditions are met:
+ #
+ #      Redistributions of source code must retain the above copyright
+ #        notice, this list of conditions and the following disclaimer.
+ #      Redistributions in binary form must reproduce the above
+ #        copyright notice, this list of conditions and the following
+ #        disclaimer in the documentation and/or other materials
+ #        provided with the distribution.
+ #      Neither the name of  Google Inc. nor the names of its
+ #        contributors may be used to endorse or promote products
+ #        derived from this software without specific prior written
+ #        permission.
+ #
+ #
+ #      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ #      CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ #      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ #      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ #      DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ #      CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ #      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ #      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ #      LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ #      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ #      OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ #      EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #
+ #      The word list in cjdict.txt are generated by combining three
+ #      word lists listed below with further processing for compound
+ #      word breaking. The frequency is generated with an iterative
+ #      training against Google web corpora.
+ #
+ #      * Libtabe (Chinese)
+ #        - https://sourceforge.net/project/?group_id=1519
+ #        - Its license terms and conditions are shown below.
+ #
+ #      * IPADIC (Japanese)
+ #        - http://chasen.aist-nara.ac.jp/chasen/distribution.html
+ #        - Its license terms and conditions are shown below.
+ #
+ #      ---------COPYING.libtabe ---- BEGIN--------------------
+ #
+ #      /*
+ #       * Copyrighy (c) 1999 TaBE Project.
+ #       * Copyright (c) 1999 Pai-Hsiang Hsiao.
+ #       * All rights reserved.
+ #       *
+ #       * Redistribution and use in source and binary forms, with or without
+ #       * modification, are permitted provided that the following conditions
+ #       * are met:
+ #       *
+ #       * . Redistributions of source code must retain the above copyright
+ #       *   notice, this list of conditions and the following disclaimer.
+ #       * . Redistributions in binary form must reproduce the above copyright
+ #       *   notice, this list of conditions and the following disclaimer in
+ #       *   the documentation and/or other materials provided with the
+ #       *   distribution.
+ #       * . Neither the name of the TaBE Project nor the names of its
+ #       *   contributors may be used to endorse or promote products derived
+ #       *   from this software without specific prior written permission.
+ #       *
+ #       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #       * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #       * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #       * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #       * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #       * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #       * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #       * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #       * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #       * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #       * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #       * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #       */
+ #
+ #      /*
+ #       * Copyright (c) 1999 Computer Systems and Communication Lab,
+ #       *                    Institute of Information Science, Academia Sinica.
+ #       * All rights reserved.
+ #       *
+ #       * Redistribution and use in source and binary forms, with or without
+ #       * modification, are permitted provided that the following conditions
+ #       * are met:
+ #       *
+ #       * . Redistributions of source code must retain the above copyright
+ #       *   notice, this list of conditions and the following disclaimer.
+ #       * . Redistributions in binary form must reproduce the above copyright
+ #       *   notice, this list of conditions and the following disclaimer in
+ #       *   the documentation and/or other materials provided with the
+ #       *   distribution.
+ #       * . Neither the name of the Computer Systems and Communication Lab
+ #       *   nor the names of its contributors may be used to endorse or
+ #       *   promote products derived from this software without specific
+ #       *   prior written permission.
+ #       *
+ #       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #       * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #       * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #       * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #       * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #       * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #       * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #       * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #       * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #       * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #       * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #       * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #       */
+ #
+ #      Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois
+ #      c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
+ #
+ #      ---------------COPYING.libtabe-----END------------------------------------
+ #
+ #
+ #      ---------------COPYING.ipadic-----BEGIN------------------------------------
+ #
+ #      Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+ #      and Technology.  All Rights Reserved.
+ #
+ #      Use, reproduction, and distribution of this software is permitted.
+ #      Any copy of this software, whether in its original form or modified,
+ #      must include both the above copyright notice and the following
+ #      paragraphs.
+ #
+ #      Nara Institute of Science and Technology (NAIST),
+ #      the copyright holders, disclaims all warranties with regard to this
+ #      software, including all implied warranties of merchantability and
+ #      fitness, in no event shall NAIST be liable for
+ #      any special, indirect or consequential damages or any damages
+ #      whatsoever resulting from loss of use, data or profits, whether in an
+ #      action of contract, negligence or other tortuous action, arising out
+ #      of or in connection with the use or performance of this software.
+ #
+ #      A large portion of the dictionary entries
+ #      originate from ICOT Free Software.  The following conditions for ICOT
+ #      Free Software applies to the current dictionary as well.
+ #
+ #      Each User may also freely distribute the Program, whether in its
+ #      original form or modified, to any third party or parties, PROVIDED
+ #      that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+ #      on, or be attached to, the Program, which is distributed substantially
+ #      in the same form as set out herein and that such intended
+ #      distribution, if actually made, will neither violate or otherwise
+ #      contravene any of the laws and regulations of the countries having
+ #      jurisdiction over the User or the intended distribution itself.
+ #
+ #      NO WARRANTY
+ #
+ #      The program was produced on an experimental basis in the course of the
+ #      research and development conducted during the project and is provided
+ #      to users as so produced on an experimental basis.  Accordingly, the
+ #      program is provided without any warranty whatsoever, whether express,
+ #      implied, statutory or otherwise.  The term "warranty" used herein
+ #      includes, but is not limited to, any warranty of the quality,
+ #      performance, merchantability and fitness for a particular purpose of
+ #      the program and the nonexistence of any infringement or violation of
+ #      any right of any third party.
+ #
+ #      Each user of the program will agree and understand, and be deemed to
+ #      have agreed and understood, that there is no warranty whatsoever for
+ #      the program and, accordingly, the entire risk arising from or
+ #      otherwise connected with the program is assumed by the user.
+ #
+ #      Therefore, neither ICOT, the copyright holder, or any other
+ #      organization that participated in or was otherwise related to the
+ #      development of the program and their respective officials, directors,
+ #      officers and other employees shall be held liable for any and all
+ #      damages, including, without limitation, general, special, incidental
+ #      and consequential damages, arising out of or otherwise in connection
+ #      with the use or inability to use the program or any product, material
+ #      or result produced or otherwise obtained by using the program,
+ #      regardless of whether they have been advised of, or otherwise had
+ #      knowledge of, the possibility of such damages at any time during the
+ #      project or thereafter.  Each user will be deemed to have agreed to the
+ #      foregoing by his or her commencement of use of the program.  The term
+ #      "use" as used herein includes, but is not limited to, the use,
+ #      modification, copying and distribution of the program and the
+ #      production of secondary products from the program.
+ #
+ #      In the case where the program, whether in its original form or
+ #      modified, was distributed or delivered to or received by a user from
+ #      any person, organization or entity other than ICOT, unless it makes or
+ #      grants independently of ICOT any specific warranty to the user in
+ #      writing, such person, organization or entity, will also be exempted
+ #      from and not be held liable to the user for any such damages as noted
+ #      above as far as the program is concerned.
+ #
+ #      ---------------COPYING.ipadic-----END------------------------------------
+
+  3. Lao Word Break Dictionary Data (laodict.txt)
+
+ #      Copyright (c) 2013 International Business Machines Corporation
+ #      and others. All Rights Reserved.
+ #
+ #      Project:    http://code.google.com/p/lao-dictionary/
+ #      Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
+ #      License:    http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
+ #                  (copied below)
+ #
+ #      This file is derived from the above dictionary, with slight modifications.
+ #      --------------------------------------------------------------------------------
+ #      Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
+ #      All rights reserved.
+ #
+ #      Redistribution and use in source and binary forms, with or without modification,
+ #      are permitted provided that the following conditions are met:
+ #
+ #              Redistributions of source code must retain the above copyright notice, this
+ #              list of conditions and the following disclaimer. Redistributions in binary
+ #              form must reproduce the above copyright notice, this list of conditions and
+ #              the following disclaimer in the documentation and/or other materials
+ #              provided with the distribution.
+ #
+ #      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ #      ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ #      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ #      DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ #      ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #      (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ #      LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ #      ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ #      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ #      SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #      --------------------------------------------------------------------------------
+
+  4. Burmese Word Break Dictionary Data (burmesedict.txt)
+
+ #      Copyright (c) 2014 International Business Machines Corporation
+ #      and others. All Rights Reserved.
+ #
+ #      This list is part of a project hosted at:
+ #        github.com/kanyawtech/myanmar-karen-word-lists
+ #
+ #      --------------------------------------------------------------------------------
+ #      Copyright (c) 2013, LeRoy Benjamin Sharon
+ #      All rights reserved.
+ #
+ #      Redistribution and use in source and binary forms, with or without modification,
+ #      are permitted provided that the following conditions are met:
+ #
+ #        Redistributions of source code must retain the above copyright notice, this
+ #        list of conditions and the following disclaimer.
+ #
+ #        Redistributions in binary form must reproduce the above copyright notice, this
+ #        list of conditions and the following disclaimer in the documentation an d/or
+ #        other materials provided with the distribution.
+ #
+ #        Neither the name Myanmar Karen Word Lists, nor the names of its
+ #        contributors may be used to endorse or promote products derived from
+ #        this software without specific prior written permission.
+ #
+ #      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ #      ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ #      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ #      DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ #      ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #      (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ #      LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ #      ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ #      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ #      SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #      --------------------------------------------------------------------------------
+
+  5. Time Zone Database
+
+   ICU uses the public domain data and code derived from Time Zone Database
+   for its time zone support. The ownership of the TZ database is explained
+   in BCP 175: Procedure for Maintaining the Time Zone Database section 7.
+
+7.  Database Ownership
+
+   The TZ database itself is not an IETF Contribution or an IETF
+   document.  Rather it is a pre-existing and regularly updated work
+   that is in the public domain, and is intended to remain in the public
+   domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do not apply
+   to the TZ Database or contributions that individuals make to it.
+   Should any claims be made and substantiated against the TZ Database,
+   the organization that is providing the IANA Considerations defined in
+   this RFC, under the memorandum of understanding with the IETF,
+   currently ICANN, may act in accordance with all competent court
+   orders.  No ownership claims will be made by ICANN or the IETF Trust
+   on the database or the code.  Any person making a contribution to the
+   database or code waives all rights to future claims in that
+   contribution or in the TZ Database.
+
+
+
+ + +
+ ijar + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+
+ + +
+ jsoncpp + + homepage + - + show license + +
+
The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+
+
+ + +
+ libFuzzer + + homepage + - + show license + +
+
==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+Copyrights and Licenses for Third Party Software Distributed with LLVM:
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+Autoconf            llvm/autoconf
+                    llvm/projects/ModuleMaker/autoconf
+Google Test         llvm/utils/unittest/googletest
+OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
+pyyaml tests        llvm/test/YAMLParser/{*.data, LICENSE.TXT}
+ARM contributions   llvm/lib/Target/ARM/LICENSE.TXT
+md5 contributions   llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h
+
+
+
+ + +
+ libcxx + + homepage + - + show license + +
+
==============================================================================
+libc++ License
+==============================================================================
+
+The libc++ library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license.  As a user of this code you may choose
+to use it under either license.  As a contributor, you agree to allow your code
+to be used under both.
+
+Full text of the relevant licenses is included below.
+
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
+
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+ + +
+ libcxx + + homepage + - + show license + +
+
==============================================================================
+libc++ License
+==============================================================================
+
+The libc++ library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license.  As a user of this code you may choose
+to use it under either license.  As a contributor, you agree to allow your code
+to be used under both.
+
+Full text of the relevant licenses is included below.
+
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
+
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+ + +
+ libcxxabi + + homepage + - + show license + +
+
==============================================================================
+libc++abi License
+==============================================================================
+
+The libc++abi library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license.  As a user of this code you may choose
+to use it under either license.  As a contributor, you agree to allow your code
+to be used under both.
+
+Full text of the relevant licenses is included below.
+
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
+
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+ + +
+ libevent + + homepage + - + show license + +
+
Libevent is available for use under the following license, commonly known
+as the 3-clause (or "modified") BSD license:
+
+==============================
+Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
+Copyright (c) 2007-2010 Niels Provos and Nick Mathewson
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+==============================
+
+Portions of Libevent are based on works by others, also made available by
+them under the three-clause BSD license above.  The copyright notices are
+available in the corresponding source files; the license is as above.  Here's
+a list:
+
+log.c:
+   Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+   Copyright (c) 1993 The Regents of the University of California.
+
+strlcpy.c:
+   Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+
+win32.c:
+   Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
+
+evport.c:
+   Copyright (c) 2007 Sun Microsystems
+
+min_heap.h:
+   Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
+
+tree.h:
+   Copyright 2002 Niels Provos <provos@citi.umich.edu>
+
+
+
+ + +
+ libjingle + + homepage + - + show license + +
+
Copyright (c) 2013, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * The name of the author may not be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+
+ + +
+ libjpeg + + homepage + - + show license + +
+
(Copied from the README.)
+
+--------------------------------------------------------------------------------
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library.  If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it.  This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+
+ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
+sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
+ansi2knr.c is NOT covered by the above copyright and conditions, but instead
+by the usual distribution terms of the Free Software Foundation; principally,
+that you must include source code if you redistribute it.  (See the file
+ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
+of any program generated from the IJG code, this does not limit you more than
+the foregoing paragraphs do.
+
+The Unix configuration script "configure" was produced with GNU Autoconf.
+It is copyright by the Free Software Foundation but is freely distributable.
+The same holds for its supporting scripts (config.guess, config.sub,
+ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
+by M.I.T. but is also freely distributable.
+
+It appears that the arithmetic coding option of the JPEG spec is covered by
+patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
+legally be used without obtaining one or more licenses.  For this reason,
+support for arithmetic coding has been removed from the free JPEG software.
+(Since arithmetic coding provides only a marginal gain over the unpatented
+Huffman mode, it is unlikely that very many implementations will support it.)
+So far as we are aware, there are no patent restrictions on the remaining
+code.
+
+The IJG distribution formerly included code to read and write GIF files.
+To avoid entanglement with the Unisys LZW patent, GIF reading support has
+been removed altogether, and the GIF writer has been simplified to produce
+"uncompressed GIFs".  This technique does not use the LZW algorithm; the
+resulting GIF files are larger than usual, but are readable by all standard
+GIF decoders.
+
+We are required to state that
+    "The Graphics Interchange Format(c) is the Copyright property of
+    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
+    CompuServe Incorporated."
+
+--------------------------------------------------------------------------------
+
+jconfig.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
+
+jmorecfg.h contains modifications, which are distributed under the Netscape
+Public License.
+
+
+
+ + +
+ libjpeg-turbo + + homepage + - + show license + +
+
libjpeg-turbo is licensed under a non-restrictive, BSD-style license
+(see README.)  The TurboJPEG/OSS wrapper (both C and Java versions) and
+associated test programs bear a similar license, which is reproduced below:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+- Neither the name of the libjpeg-turbo Project nor the names of its
+  contributors may be used to endorse or promote products derived from this
+  software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ libpng + + homepage + - + show license + +
+
+This copy of the libpng notices is provided for your convenience.  In case of
+any discrepancy between this copy and the notices in the file png.h that is
+included in the libpng distribution, the latter shall prevail.
+
+COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+
+If you modify libpng you may insert additional notices immediately following
+this sentence.
+
+pngusr.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
+
+This code is released under the libpng license.
+
+libpng versions 1.0.7, July 1, 2000, through 1.2.56, December 17, 2015, are
+Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are
+derived from libpng-1.0.6, and are distributed according to the same
+disclaimer and license as libpng-1.0.6 with the following individuals
+added to the list of Contributing Authors:
+
+   Simon-Pierre Cadieux
+   Eric S. Raymond
+   Cosmin Truta
+   Gilles Vollant
+
+and with the following additions to the disclaimer:
+
+   There is no warranty against interference with your enjoyment of the
+   library or against infringement.  There is no warranty that our
+   efforts or the library will fulfill any of your particular purposes
+   or needs.  This library is provided with all faults, and the entire
+   risk of satisfactory quality, performance, accuracy, and effort is with
+   the user.
+
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
+libpng-0.96, and are distributed according to the same disclaimer and
+license as libpng-0.96, with the following individuals added to the list
+of Contributing Authors:
+
+   Tom Lane
+   Glenn Randers-Pehrson
+   Willem van Schaik
+
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
+and are distributed according to the same disclaimer and license as
+libpng-0.88, with the following individuals added to the list of
+Contributing Authors:
+
+   John Bowler
+   Kevin Bracey
+   Sam Bushell
+   Magnus Holmgren
+   Greg Roelofs
+   Tom Tanner
+
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
+
+   Andreas Dilger
+   Dave Martindale
+   Guy Eric Schalnat
+   Paul Schmidt
+   Tim Wegner
+
+The PNG Reference Library is supplied "AS IS".  The Contributing Authors
+and Group 42, Inc. disclaim all warranties, expressed or implied,
+including, without limitation, the warranties of merchantability and of
+fitness for any purpose.  The Contributing Authors and Group 42, Inc.
+assume no liability for direct, indirect, incidental, special, exemplary,
+or consequential damages, which may result from the use of the PNG
+Reference Library, even if advised of the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
+
+  1. The origin of this source code must not be misrepresented.
+
+  2. Altered versions must be plainly marked as such and must not
+     be misrepresented as being the original source.
+
+  3. This Copyright notice may not be removed or altered from any
+     source or altered source distribution.
+
+The Contributing Authors and Group 42, Inc. specifically permit, without
+fee, and encourage the use of this source code as a component to
+supporting the PNG file format in commercial products.  If you use this
+source code in a product, acknowledgment is not required but would be
+appreciated.
+
+END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
+
+A "png_get_copyright" function is available, for convenient use in "about"
+boxes and the like:
+
+   printf("%s", png_get_copyright(NULL));
+
+Also, the PNG logo (in PNG format, of course) is supplied in the
+files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
+
+Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
+a certification mark of the Open Source Initiative. OSI has not addressed
+the additional disclaimers inserted at version 1.0.7.
+
+Glenn Randers-Pehrson
+glennrp at users.sourceforge.net
+December 17, 2015
+
+
+
+ + +
+ libsecret + + homepage + - + show license + +
+
                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+ + +
+ libsrtp + + homepage + - + show license + +
+
/*
+ *	
+ * Copyright (c) 2001-2006 Cisco Systems, Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ *   Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * 
+ *   Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following
+ *   disclaimer in the documentation and/or other materials provided
+ *   with the distribution.
+ * 
+ *   Neither the name of the Cisco Systems, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+
+
+ + +
+ libudev + + homepage + - + show license + +
+
                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+ + +
+ libusbx + + homepage + - + show license + +
+
		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+
+
+ + +
+ libva + + homepage + - + show license + +
+
    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the
+    "Software"), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sub license, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+
+    The above copyright notice and this permission notice (including the
+    next paragraph) shall be included in all copies or substantial portions
+    of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+    IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+    ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+ + +
+ libvpx + + homepage + - + show license + +
+
Copyright (c) 2010, The WebM Project authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+  * Neither the name of Google, nor the WebM Project, nor the names
+    of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written
+    permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+
+ + +
+ libxml + + homepage + - + show license + +
+
Except where otherwise noted in the source code (e.g. the files hash.c,
+list.c and the trio files, which are covered by a similar licence but
+with different Copyright notices) all the files are:
+
+ Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+
+ + +
+ libxslt + + homepage + - + show license + +
+
Licence for libxslt except libexslt
+----------------------------------------------------------------------
+ Copyright (C) 2001-2002 Daniel Veillard.  All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Daniel Veillard shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+
+----------------------------------------------------------------------
+
+Licence for libexslt
+----------------------------------------------------------------------
+ Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.
+ All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the authors shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+----------------------------------------------------------------------
+
+
+
+ + +
+ libyuv + + homepage + - + show license + +
+
Copyright 2011 The LibYuv Project Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+  * Neither the name of Google nor the names of its contributors may
+    be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ linux-syscall-support + + homepage + - + show license + +
+
// Copyright 2015 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ mach_override + + homepage + - + show license + +
+
Copyright (c) 2003-2012 Jonathan 'Wolf' Rentzsch: http://rentzsch.com
+Some rights reserved: http://opensource.org/licenses/mit
+
+mach_override includes a copy of libudis86, licensed as follows:
+
+Copyright (c) 2002-2009 Vivek Thampi
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, 
+      this list of conditions and the following disclaimer in the documentation 
+      and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ markdown, a text-to-HTML conversion tool for web writers + + homepage + - + show license + +
+
Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)  
+Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)  
+Copyright 2004 Manfred Stienstra (the original version)  
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    
+*   Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+*   Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+*   Neither the name of the <organization> nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+
+
+ + +
+ mesa + + homepage + - + show license + +
+
The default Mesa license is as follows:
+
+Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+Some parts of Mesa are copyrighted under the GNU LGPL.  See the
+Mesa/docs/COPYRIGHT file for details.
+
+The following is the standard GNU copyright file.
+----------------------------------------------------------------------
+
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                    675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+
+ + +
+ minigbm + + homepage + - + show license + +
+
// Copyright 2014 The Chromium OS Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ modp base64 decoder + + homepage + - + show license + +
+
 * MODP_B64 - High performance base64 encoder/decoder
+ * Version 1.3 -- 17-Mar-2006
+ * http://modp.com/release/base64
+ *
+ * Copyright (c) 2005, 2006  Nick Galbreath -- nickg [at] modp [dot] com
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *   Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ *   Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ *   Neither the name of the modp.com nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ mt19937ar + + homepage + - + show license + +
+
   A C-program for MT19937, with initialization improved 2002/1/26.
+   Coded by Takuji Nishimura and Makoto Matsumoto.
+
+   Before using, initialize the state by using init_genrand(seed)  
+   or init_by_array(init_key, key_length).
+
+   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+   All rights reserved.                          
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+
+     3. The names of its contributors may not be used to endorse or promote 
+        products derived from this software without specific prior written 
+        permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ native client + + homepage + - + show license + +
+
Copyright 2008, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ newlib-extras + + homepage + - + show license + +
+
                        README for newlib-2.0.0 release
+           (mostly cribbed from the README in the gdb-4.13 release)
+
+This is `newlib', a simple ANSI C library, math library, and collection
+of board support packages.
+
+The newlib and libgloss subdirectories are a collection of software from
+several sources, each wi6h their own copyright and license.  See the file
+COPYING.NEWLIB for details.  The rest of the release tree is under either
+the GNU GPL or LGPL licenses.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+Unpacking and Installation -- quick overview
+==========================
+
+When you unpack the newlib-2.0.0.tar.gz file, you'll find a directory
+called `newlib-2.0.0', which contains:
+
+COPYING          config/          install-sh*      mpw-configure
+COPYING.LIB      config-ml.in     libgloss/        mpw-install
+COPYING.NEWLIB   config.guess*    mkinstalldirs*   newlib/
+CYGNUS           config.sub*      move-if-change*  symlink-tree*
+ChangeLog        configure*       mpw-README       texinfo/
+Makefile.in      configure.in     mpw-build.in
+README           etc/             mpw-config.in
+
+To build NEWLIB, you must follow the instructions in the section entitled
+"Compiling NEWLIB".
+
+This will configure and build all the libraries and crt0 (if one exists).
+If `configure' can't determine your host system type, specify one as its
+argument, e.g., sun4 or sun4sol2.  NEWLIB is most often used in cross
+environments.
+
+NOTE THAT YOU MUST HAVE ALREADY BUILT AND INSTALLED GCC and BINUTILS.
+
+
+More Documentation
+==================
+
+   Newlib documentation is available on the net via:
+   http://sourceware.org/newlib/docs.html
+
+   All the documentation for NEWLIB comes as part of the machine-readable
+distribution.  The documentation is written in Texinfo format, which is
+a documentation system that uses a single source file to produce both
+on-line information and a printed manual.  You can use one of the Info
+formatting commands to create the on-line version of the documentation
+and TeX (or `texi2roff') to typeset the printed version.
+
+   If you want to format these Info files yourself, you need one of the
+Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.
+
+   If you want to typeset and print copies of this manual, you need TeX,
+a program to print its DVI output files, and `texinfo.tex', the Texinfo
+definitions file.
+
+   TeX is a typesetting program; it does not print files directly, but
+produces output files called DVI files.  To print a typeset document,
+you need a program to print DVI files.  If your system has TeX
+installed, chances are it has such a program.  The precise command to
+use depends on your system; `lpr -d' is common; another (for PostScript
+devices) is `dvips'.  The DVI print command may require a file name
+without any extension or a `.dvi' extension.
+
+   TeX also requires a macro definitions file called `texinfo.tex'. 
+This file tells TeX how to typeset a document written in Texinfo
+format.  On its own, TeX cannot read, much less typeset a Texinfo file.
+`texinfo.tex' is distributed with NEWLIB and is located in the
+`newlib-VERSION-NUMBER/texinfo' directory.
+
+
+
+Compiling NEWLIB
+================
+
+   To compile NEWLIB, you must build it in a directory separate from
+the source directory.  If you want to run NEWLIB versions for several host 
+or target machines, you need a different `newlib' compiled for each combination
+of host and target.  `configure' is designed to make this easy by allowing 
+you to generate each configuration in a separate subdirectory.
+If your `make' program handles the `VPATH' feature correctly (like GNU `make')
+running `make' in each of these directories builds the `newlib' libraries
+specified there.
+
+   To build `newlib' in a specific directory, run `configure' with the
+`--srcdir' option to specify where to find the source. (You also need
+to specify a path to find `configure' itself from your working
+directory.  If the path to `configure' would be the same as the
+argument to `--srcdir', you can leave out the `--srcdir' option; it
+will be assumed.)
+
+   For example, with version 2.0.0, you can build NEWLIB in a separate
+directory for a Sun 4 cross m68k-aout environment like this:
+
+     cd newlib-2.0.0
+     mkdir ../newlib-m68k-aout
+     cd ../newlib-m68k-aout
+     ../newlib-2.0.0/configure --host=sun4 --target=m68k-aout
+     make
+
+   When `configure' builds a configuration using a remote source
+directory, it creates a tree for the binaries with the same structure
+(and using the same names) as the tree under the source directory.  In
+the example, you'd find the Sun 4 library `libiberty.a' in the
+directory `newlib-m68k-aout/libiberty', and NEWLIB itself in
+`newlib-m68k-aout/newlib'.
+
+   When you run `make' to build a program or library, you must run it
+in a configured directory--whatever directory you were in when you
+called `configure' (or one of its subdirectories).
+
+   The `Makefile' that `configure' generates in each source directory
+also runs recursively.  If you type `make' in a source directory such
+as `newlib-2.0.0' (or in a separate configured directory configured with
+`--srcdir=PATH/newlib-2.0.0'), you will build all the required libraries.
+
+   When you have multiple hosts or targets configured in separate
+directories, you can run `make' on them in parallel (for example, if
+they are NFS-mounted on each of the hosts); they will not interfere
+with each other.
+
+
+Specifying names for hosts and targets
+======================================
+
+   The specifications used for hosts and targets in the `configure'
+script are based on a three-part naming scheme, but some short
+predefined aliases are also supported.  The full naming scheme encodes
+three pieces of information in the following pattern:
+
+     ARCHITECTURE-VENDOR-OS
+
+   For example, you can use the alias `sun4' as a HOST argument or in a
+`--target=TARGET' option.  The equivalent full name is
+`sparc-sun-sunos4'.
+
+   The `configure' script accompanying NEWLIB does not provide any query
+facility to list all supported host and target names or aliases. 
+`configure' calls the Bourne shell script `config.sub' to map
+abbreviations to full names; you can read the script, if you wish, or
+you can use it to test your guesses on abbreviations--for example:
+
+     % sh config.sub sun4
+     sparc-sun-sunos4.1.1
+     % sh config.sub sun3
+     m68k-sun-sunos4.1.1
+     % sh config.sub decstation
+     mips-dec-ultrix4.2
+     % sh config.sub hp300bsd
+     m68k-hp-bsd
+     % sh config.sub i386v
+     i386-pc-sysv
+     % sh config.sub i786v
+     Invalid configuration `i786v': machine `i786v' not recognized
+
+The Build, Host and Target Concepts in newlib
+=============================================
+
+The build, host and target concepts are defined for gcc as follows:
+
+build: the platform on which gcc is built.
+host: the platform on which gcc is run.
+target: the platform for which gcc generates code.
+
+Since newlib is a library, the target concept does not apply to it, and the
+build, host, and target options given to the top-level configure script must
+be changed for newlib's use.
+
+The options are shifted according to these correspondences:
+
+gcc's build platform has no equivalent in newlib.
+gcc's host platform is newlib's build platform.
+gcc's target platform is newlib's host platform.
+and as mentioned before, newlib has no concept of target.
+
+`configure' options
+===================
+
+   Here is a summary of the `configure' options and arguments that are
+most often useful for building NEWLIB.  `configure' also has several other
+options not listed here.
+
+     configure [--help]
+               [--prefix=DIR]
+               [--srcdir=PATH]
+               [--target=TARGET] HOST
+
+You may introduce options with a single `-' rather than `--' if you
+prefer; but you may abbreviate option names if you use `--'.
+
+`--help'
+     Display a quick summary of how to invoke `configure'.
+
+`--prefix=DIR'
+     Configure the source to install programs and files in directory
+     `DIR'.
+
+`--exec-prefix=DIR'
+     Configure the source to install host-dependent files in directory
+     `DIR'.
+
+`--srcdir=PATH'
+     *Warning: using this option requires GNU `make', or another `make'
+     that compatibly implements the `VPATH' feature.
+     Use this option to make configurations in directories separate
+     from the NEWLIB source directories.  Among other things, you can use
+     this to build (or maintain) several configurations simultaneously,
+     in separate directories.  `configure' writes configuration
+     specific files in the current directory, but arranges for them to
+     use the source in the directory PATH.  `configure' will create
+     directories under the working directory in parallel to the source
+     directories below PATH.
+
+`--norecursion'
+     Configure only the directory level where `configure' is executed;
+     do not propagate configuration to subdirectories.
+
+`--target=TARGET'
+     Configure NEWLIB for running on the specified TARGET.
+
+     There is no convenient way to generate a list of all available
+     targets.
+
+`HOST ...'
+     Configure NEWLIB to be built using a cross compiler running on
+     the specified HOST.
+
+     There is no convenient way to generate a list of all available
+     hosts.
+
+To fit diverse usage models, NEWLIB supports a group of configuration
+options so that library features can be turned on/off according to
+target system's requirements.
+
+One feature can be enabled by specifying `--enable-FEATURE=yes' or
+`--enable-FEATURE'.  Or it can be disable by `--enable-FEATURE=no' or
+`--disable-FEATURE'.
+
+`--enable-newlib-io-pos-args'
+     Enable printf-family positional arg support.
+     Disabled by default, but some hosts enable it in configure.host.
+
+`--enable-newlib-io-c99-formats'
+     Enable C99 support in IO functions like printf/scanf.
+     Disabled by default, but some hosts enable it in configure.host.
+
+`--enable-newlib-register-fini'
+     Enable finalization function registration using atexit.
+     Disabled by default.
+
+`--enable-newlib-io-long-long'
+     Enable long long type support in IO functions like printf/scanf.
+     Disabled by default, but many hosts enable it in configure.host.
+
+`--enable-newlib-io-long-double'
+     Enable long double type support in IO functions printf/scanf.
+     Disabled by default, but some hosts enable it in configure.host.
+
+`--enable-newlib-mb'
+     Enable multibyte support.
+     Disabled by default.
+
+`--enable-newlib-iconv-encodings'
+     Enable specific comma-separated list of bidirectional iconv
+     encodings to be built-in.
+     Disabled by default.
+
+`--enable-newlib-iconv-from-encodings'
+     Enable specific comma-separated list of \"from\" iconv encodings
+     to be built-in.
+     Disabled by default.
+
+`--enable-newlib-iconv-to-encodings'
+     Enable specific comma-separated list of \"to\" iconv encodings
+     to be built-in.
+     Disabled by default.
+
+`--enable-newlib-iconv-external-ccs'
+     Enable capabilities to load external CCS files for iconv.
+     Disabled by default.
+
+`--disable-newlib-atexit-dynamic-alloc'
+     Disable dynamic allocation of atexit entries.
+     Most hosts and targets have it enabled in configure.host.
+
+`--enable-newlib-reent-small'
+     Enable small reentrant struct support.
+     Disabled by default.
+
+`--disable-newlib-fvwrite-in-streamio'
+     NEWLIB implements the vector buffer mechanism to support stream IO
+     buffering required by C standard.  This feature is possibly
+     unnecessary for embedded systems which won't change file buffering
+     with functions like `setbuf' or `setvbuf'.  The buffering mechanism
+     still acts as default for STDIN/STDOUT/STDERR even if this option
+     is specified.
+     Enabled by default.
+
+`--disable-newlib-fseek-optimization'
+     Disable fseek optimization.  It can decrease code size of application
+     calling `fseek`.
+     Enabled by default.
+
+`--disable-newlib-wide-orient'
+     C99 states that each stream has an orientation, wide or byte.  This
+     feature is possibly unnecessary for embedded systems which only do
+     byte input/output operations on stream.  It can decrease code size
+     by disable the feature.
+     Enabled by default.
+
+`--enable-newlib-nano-malloc'
+     NEWLIB has two implementations of malloc family's functions, one in
+     `mallocr.c' and the other one in `nano-mallocr.c'.  This options
+     enables the nano-malloc implementation, which is for small systems
+     with very limited memory.  Note that this implementation does not
+     support `--enable-malloc-debugging' any more.
+     Disabled by default.
+
+`--disable-newlib-unbuf-stream-opt'
+     NEWLIB does optimization when `fprintf to write only unbuffered unix
+     file'.  It creates a temorary buffer to do the optimization that
+     increases stack consumption by about `BUFSIZ' bytes.  This option
+     disables the optimization and saves size of text and stack.
+     Enabled by default.
+
+`--enable-multilib'
+     Build many library versions.
+     Enabled by default.
+
+`--enable-target-optspace'
+     Optimize for space.
+     Disabled by default.
+
+`--enable-malloc-debugging'
+     Indicate malloc debugging requested.
+     Disabled by default.
+
+`--enable-newlib-multithread'
+     Enable support for multiple threads.
+     Enabled by default.
+
+`--enable-newlib-iconv'
+     Enable iconv library support.
+     Disabled by default.
+
+`--enable-newlib-elix-level'
+     Supply desired elix library level (1-4).  Please refer to HOWTO for
+     more information about this option.
+     Set to level 0 by default.
+
+`--disable-newlib-io-float'
+     Disable printf/scanf family float support.
+     Enabled by default.
+
+`--disable-newlib-supplied-syscalls'
+     Disable newlib from supplying syscalls.
+     Enabled by default.
+
+`--enable-lite-exit'
+     Enable lite exit, a size-reduced implementation of exit that doesn't
+     invoke clean-up functions such as _fini or global destructors.
+     Disabled by default.
+
+Running the Testsuite
+=====================
+
+To run newlib's testsuite, you'll need a site.exp in your home
+directory which points dejagnu to the proper baseboards directory and
+the proper exp file for your target.
+
+Before running make check-target-newlib, set the DEJAGNU environment
+variable to point to ~/site.exp.
+
+Here is a sample site.exp:
+
+# Make sure we look in the right place for the board description files.
+if ![info exists boards_dir] {
+    set boards_dir {}
+}
+lappend boards_dir "your dejagnu/baseboards here"
+
+verbose "Global Config File: target_triplet is $target_triplet" 2
+
+global target_list
+case "$target_triplet" in {
+
+    { "mips-*elf*" } {
+	set target_list "mips-sim"
+    }
+
+    default {
+	set target_list { "unix" }
+    }
+}
+
+mips-sim refers to an exp file in the baseboards directory.  You'll
+need to add the other targets you're testing to the case statement.
+
+Now type make check-target-newlib in the top-level build directory to
+run the testsuite.
+
+Shared newlib
+=============
+
+newlib uses libtool when it is being compiled natively (with
+--target=i[34567]86-pc-linux-gnu) on an i[34567]86-pc-linux-gnu
+host. This allows newlib to be compiled as a shared library.
+
+To configure newlib, do the following from your build directory:
+
+$(source_dir)/src/configure --with-newlib --prefix=$(install_dir)
+
+configure will recognize that host == target ==
+i[34567]86-pc-linux-gnu, so it will tell newlib to compile itself using
+libtool. By default, libtool will build shared and static versions of
+newlib.
+
+To compile a program against shared newlib, do the following (where
+target_install_dir = $(install_dir)/i[34567]86-pc-linux-gnu):
+
+gcc -nostdlib $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm -lgcc
+
+To run the program, make sure that $(target_install_dir)/lib is listed
+in the LD_LIBRARY_PATH environment variable.
+
+To create a static binary linked against newlib, do the following:
+
+gcc -nostdlib -static $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm
+
+libtool can be instructed to produce only static libraries. To build
+newlib as a static library only, do the following from your build
+directory:
+
+$(source_dir)/src/configure --with-newlib --prefix=$(install_dir) --disable-shared
+
+Regenerating Configuration Files
+================================
+
+At times you will need to make changes to configure.in and Makefile.am files.
+This will mean that configure and Makefile.in files will need to be
+regenerated.
+
+At the top level of newlib is the file: acinclude.m4.  This file contains
+the definition of the NEWLIB_CONFIGURE macro which is used by all configure.in
+files in newlib.  You will notice that each directory in newlib containing
+a configure.in file also contains an aclocal.m4 file.  This file is
+generated by issuing: aclocal -I${relative_path_to_toplevel_newlib_dir}
+-I${relative_path_to_toplevel_src_dir}
+The first relative directory is to access acinclude.m4.  The second relative
+directory is to access libtool information in the top-level src directory.
+
+For example, to regenerate aclocal.m4 in newlib/libc/machine/arm:
+
+  aclocal -I ../../.. -I ../../../..
+
+Note that if the top level acinclude.m4 is altered, every aclocal.m4 file 
+in newlib should be regenerated.
+
+If the aclocal.m4 file is regenerated due to a change in acinclude.m4 or
+if a configure.in file is modified, the corresponding configure file in the 
+directory must be regenerated using autoconf.  No parameters are necessary.
+In the previous example, we would issue:
+
+  autoconf
+
+from the newlib/libc/machine/arm directory.
+
+If you have regenerated a configure file or if you have modified a Makefile.am
+file, you will need to regenerate the appropriate Makefile.in file(s).
+For newlib, automake is a bit trickier.  First of all, all Makefile.in
+files in newlib (and libgloss) are generated using the --cygnus option
+of automake.  
+
+Makefile.in files are generated from the nearest directory up the chain
+which contains a configure.in file.  In most cases, this is the same
+directory containing configure.in, but there are exceptions.
+For example, the newlib/libc directory has a number of
+subdirectories that do not contain their own configure.in files (e.g. stdio).
+For these directories, you must issue the automake command from newlib/libc
+which is the nearest parent directory that contains a configure.in.
+When you issue the automake command, you specify the subdirectory for
+the Makefile.in you are regenerating.  For example:
+
+   automake --cygnus stdio/Makefile stdlib/Makefile
+
+Note how multiple Makefile.in files can be created in the same step.  You
+would not specify machine/Makefile or sys/Makefile in the previous example
+because both of these subdirectories contain their own configure.in files.
+One would change to each of these subdirectories and in turn issue:
+
+   automake --cygnus Makefile
+
+Let's say you create a new machine directory XXXX off of newlib/libc/machine.
+After creating a new configure.in and Makefile.am file, you would issue:
+
+   aclocal -I ../../..
+   autoconf
+   automake --cygnus Makefile
+
+from newlib/libc/machine/XXXX
+
+It is strongly advised that you use an adequate version of autotools.
+For this latest release, the following were used: autoconf 2.68, aclocal 1.11.6, and 
+automake 1.11.6.
+
+Reporting Bugs
+==============
+
+The correct address for reporting bugs found in NEWLIB is
+"newlib@sourceware.org".  Please email all bug reports to that
+address.  Please include the NEWLIB version number (e.g., newlib-2.0.0),
+and how you configured it (e.g., "sun4 host and m68k-aout target").
+Since NEWLIB supports many different configurations, it is important
+that you be precise about this.
+
+Archives of the newlib mailing list are on-line, see
+	http://sourceware.org/ml/newlib/
+
+
+
+ + +
+ ocmock + + homepage + - + show license + +
+
  
+  Copyright (c) 2004-2012 by Mulle Kybernetik. All rights reserved.
+
+  Permission to use, copy, modify and distribute this software and its documentation
+  is hereby granted, provided that both the copyright notice and this permission
+  notice appear in all copies of the software, derivative works or modified versions,
+  and any portions thereof, and that both notices appear in supporting documentation,
+  and that credit is given to Mulle Kybernetik in all documents and publicity
+  pertaining to direct or indirect use of this code or its derivatives.
+
+  THIS IS EXPERIMENTAL SOFTWARE AND IT IS KNOWN TO HAVE BUGS, SOME OF WHICH MAY HAVE
+  SERIOUS CONSEQUENCES. THE COPYRIGHT HOLDER ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+  "AS IS" CONDITION. THE COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY
+  DAMAGES WHATSOEVER RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE
+  OR OF ANY DERIVATIVE WORK.
+
+
+ + +
+ open-vcdiff + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2008 The open-vcdiff Authors. All Rights Reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ opus + + homepage + - + show license + +
+
Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,
+                    Jean-Marc Valin, Timothy B. Terriberry,
+                    CSIRO, Gregory Maxwell, Mark Borgerding,
+                    Erik de Castro Lopo
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of Internet Society, IETF or IETF Trust, nor the
+names of specific contributors, may be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Opus is subject to the royalty-free patent licenses which are
+specified at:
+
+Xiph.Org Foundation:
+https://datatracker.ietf.org/ipr/1524/
+
+Microsoft Corporation:
+https://datatracker.ietf.org/ipr/1914/
+
+Broadcom Corporation:
+https://datatracker.ietf.org/ipr/1526/
+
+
+
+ + +
+ pyelftools + + homepage + - + show license + +
+
pyelftools is in the public domain (see below if you need more details).
+
+pyelftools uses the construct library for structured parsing of a binary
+stream. construct is packaged in pyelftools/construct - see its LICENSE
+file for the license.
+
+-------------------------------------------------------------------------------
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
+
+
+
+
+ + +
+ re2 - an efficient, principled regular expression library + + homepage + - + show license + +
+
// Copyright (c) 2009 The RE2 Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ sfntly + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2011 Google Inc. All Rights Reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+
+ + +
+ simplejson + + homepage + - + show license + +
+
Copyright (c) 2006 Bob Ippolito
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+
+ + +
+ sqlite + + homepage + - + show license + +
+
The author disclaims copyright to this source code.  In place of
+a legal notice, here is a blessing:
+
+   May you do good and not evil.
+   May you find forgiveness for yourself and forgive others.
+   May you share freely, never taking more than you give.
+
+
+
+ + +
+ talloc + + homepage + - + show license + +
+
   Unix SMB/CIFS implementation.
+   Samba temporary memory allocation functions
+
+   Copyright (C) Andrew Tridgell 2004-2005
+   Copyright (C) Stefan Metzmacher 2006
+   
+     ** NOTE! The following LGPL license applies to the talloc
+     ** library. This does NOT imply that all of Samba is released
+     ** under the LGPL
+   
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+
+
+
+ + +
+ tcmalloc + + homepage + - + show license + +
+
// Copyright (c) 2005, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ tlslite + + homepage + - + show license + +
+
+TLS Lite includes code from different sources. All code is either dedicated to
+the public domain by its authors, or available under a BSD-style license. In
+particular:
+
+- 
+
+Code written by Trevor Perrin, Kees Bos, Sam Rushing, Dimitris Moraitis,
+Marcelo Fernandez, Martin von Loewis, Dave Baggett, and Yngve Pettersen is 
+available under the following terms:
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute
+this software, either in source code form or as a compiled binary, for any
+purpose, commercial or non-commercial, and by any means.
+
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-
+
+Code written by Bram Cohen (rijndael.py) was dedicated to the public domain by
+its author. See rijndael.py for details.
+
+-
+
+Code written by Google is available under the following terms:
+
+Copyright (c) 2008, The Chromium Authors 
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name of the Google Inc. nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ url_parse + + homepage + - + show license + +
+
Copyright 2007, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------------------
+
+The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
+licensed separately as follows:
+
+The contents of this file are subject to the Mozilla Public License Version
+1.1 (the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is mozilla.org code.
+
+The Initial Developer of the Original Code is
+Netscape Communications Corporation.
+Portions created by the Initial Developer are Copyright (C) 1998
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+  Darin Fisher (original author)
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+
+
+
+ + +
+ usrsctp + + homepage + - + show license + +
+
(Copied from the COPYRIGHT file of
+https://code.google.com/p/sctp-refimpl/source/browse/trunk/COPYRIGHT)
+--------------------------------------------------------------------------------
+
+Copyright (c) 2001, 2002 Cisco Systems, Inc.
+Copyright (c) 2002-12 Randall R. Stewart
+Copyright (c) 2002-12 Michael Tuexen
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+
+
+ + +
+ v4l-utils + + homepage + - + show license + +
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Suite 500, Boston, MA  02110-1335  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must
+be allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+^L
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at least
+    three years, to give the same user the materials specified in
+    Subsection 6a, above, for a charge no more than the cost of
+    performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+^L
+	   How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+  Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+
+
+ + +
+ valgrind + + homepage + - + show license + +
+
   Notice that the following BSD-style license applies to the Valgrind header
+   files used by Chromium (valgrind.h and memcheck.h). However, the rest of
+   Valgrind is licensed under the terms of the GNU General Public License,
+   version 2, unless otherwise indicated.
+
+   ----------------------------------------------------------------
+
+   Copyright (C) 2000-2008 Julian Seward.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+      not claim that you wrote the original software.  If you use this 
+      software in a product, an acknowledgment in the product 
+      documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+      not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+      products derived from this software without specific prior written 
+      permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+ wayland + + homepage + - + show license + +
+
Copyright © 2008-2012 Kristian Høgsberg
+Copyright © 2010-2012 Intel Corporation
+Copyright © 2011 Benjamin Franzke
+Copyright © 2012 Collabora, Ltd.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+---
+
+The above is the version of the MIT "Expat" License used by X.org:
+
+    http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
+
+
+
+ + +
+ wayland-protocols + + homepage + - + show license + +
+
Copyright © 2008-2013 Kristian Høgsberg
+Copyright © 2010-2013 Intel Corporation
+Copyright © 2013      Rafael Antognolli
+Copyright © 2013      Jasper St. Pierre
+Copyright © 2014      Jonas Ådahl
+Copyright © 2014      Jason Ekstrand
+Copyright © 2014-2015 Collabora, Ltd.
+Copyright © 2015      Red Hat Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+---
+
+The above is the version of the MIT "Expat" License used by X.org:
+
+    http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
+
+
+
+ + +
+ woff2 + + homepage + - + show license + +
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+ + +
+ x86inc + + homepage + - + show license + +
+
;*****************************************************************************
+;* x86inc.asm
+;*****************************************************************************
+;* Copyright (C) 2005-2011 x264 project
+;*
+;* Authors: Loren Merritt <lorenm@u.washington.edu>
+;*          Anton Mitrofanov <BugMaster@narod.ru>
+;*          Jason Garrett-Glaser <darkshikari@gmail.com>
+;*
+;* Permission to use, copy, modify, and/or distribute this software for any
+;* purpose with or without fee is hereby granted, provided that the above
+;* copyright notice and this permission notice appear in all copies.
+;*
+;* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;*****************************************************************************
+
+; This is a header file for the x264ASM assembly language, which uses
+; NASM/YASM syntax combined with a large number of macros to provide easy
+; abstraction between different calling conventions (x86_32, win64, linux64).
+; It also has various other useful features to simplify writing the kind of
+; DSP functions that are most often used in x264.
+
+; Unlike the rest of x264, this file is available under an ISC license, as it
+; has significant usefulness outside of x264 and we want it to be available
+; to the largest audience possible.  Of course, if you modify it for your own
+; purposes to add a new feature, we strongly encourage contributing a patch
+; as this feature might be useful for others as well.  Send patches or ideas
+; to x264-devel@videolan.org .
+
+
+
+ + +
+ xdg-mime + + homepage + - + show license + +
+
Licensed under the Academic Free License version 2.0 (below)
+Or under the following terms:
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+
+--------------------------------------------------------------------------------
+Academic Free License v. 2.0
+--------------------------------------------------------------------------------
+
+This Academic Free License (the "License") applies to any original work of
+authorship (the "Original Work") whose owner (the "Licensor") has placed the
+following notice immediately following the copyright notice for the Original
+Work:
+
+Licensed under the Academic Free License version 2.0
+1) Grant of Copyright License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license to do the
+following:
+
+a) to reproduce the Original Work in copies;
+b) to prepare derivative works ("Derivative Works") based upon the Original
+   Work;
+c) to distribute copies of the Original Work and Derivative Works to the
+   public;
+d) to perform the Original Work publicly; and
+e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
+claims owned or controlled by the Licensor that are embodied in the Original
+Work as furnished by the Licensor, to make, use, sell and offer for sale the
+Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred
+form of the Original Work for making modifications to it and all available
+documentation describing how to modify the Original Work. Licensor hereby
+agrees to provide a machine-readable copy of the Source Code of the Original
+Work along with each copy of the Original Work that Licensor distributes.
+Licensor reserves the right to satisfy this obligation by placing a
+machine-readable copy of the Source Code in an information repository
+reasonably calculated to permit inexpensive and convenient access by You for as
+long as Licensor continues to distribute the Original Work, and by publishing
+the address of that information repository in a notice immediately following
+the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names
+of any contributors to the Original Work, nor any of their trademarks or
+service marks, may be used to endorse or promote products derived from this
+Original Work without express prior written permission of the Licensor. Nothing
+in this License shall be deemed to grant any rights to trademarks, copyrights,
+patents, trade secrets or any other intellectual property of Licensor except as
+expressly stated herein. No patent license is granted to make, use, sell or
+offer to sell embodiments of any patent claims other than the licensed claims
+defined in Section 2. No right is granted to the trademarks of Licensor even if
+such marks are included in the Original Work. Nothing in this License shall be
+interpreted to prohibit Licensor from licensing under different terms from this
+License any Original Work that Licensor otherwise would have a right to
+license.
+
+5) This section intentionally omitted.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative
+Works that You create, all copyright, patent or trademark notices from the
+Source Code of the Original Work, as well as any notices of licensing and any
+descriptive text identified therein as an "Attribution Notice." You must cause
+the Source Code for any Derivative Works that You create to carry a prominent
+Attribution Notice reasonably calculated to inform recipients that You have
+modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
+the copyright in and to the Original Work and the patent rights granted herein
+by Licensor are owned by the Licensor or are sublicensed to You under the terms
+of this License with the permission of the contributor(s) of those copyrights
+and patent rights. Except as expressly stated in the immediately proceeding
+sentence, the Original Work is provided under this License on an "AS IS" BASIS
+and WITHOUT WARRANTY, either express or implied, including, without limitation,
+the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
+This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
+license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, shall the
+Licensor be liable to any person for any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License
+or the use of the Original Work including, without limitation, damages for loss
+of goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses. This limitation of liability shall not
+apply to liability for death or personal injury resulting from Licensor's
+negligence to the extent applicable law prohibits such limitation. Some
+jurisdictions do not allow the exclusion or limitation of incidental or
+consequential damages, so this exclusion and limitation may not apply to You.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or
+a Derivative Work, You must make a reasonable effort under the circumstances to
+obtain the express assent of recipients to the terms of this License. Nothing
+else but this License (or another written agreement between Licensor and You)
+grants You permission to create Derivative Works based upon the Original Work
+or to exercise any of the rights granted in Section 1 herein, and any attempt
+to do so except under the terms of this License (or another written agreement
+between Licensor and You) is expressly prohibited by U.S. copyright law, the
+equivalent laws of other countries, and by international treaty. Therefore, by
+exercising any of the rights granted to You in Section 1 herein, You indicate
+Your acceptance of this License and all of its terms and conditions.
+
+10) Termination for Patent Action. This License shall terminate automatically
+and You may no longer exercise any of the rights granted to You by this License
+as of the date You commence an action, including a cross-claim or counterclaim,
+for patent infringement (i) against Licensor with respect to a patent
+applicable to software or (ii) against any entity with respect to a patent
+applicable to the Original Work (but excluding combinations of the Original
+Work with other software or hardware).
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
+License may be brought only in the courts of a jurisdiction wherein the
+Licensor resides or in which Licensor conducts its primary business, and under
+the laws of that jurisdiction excluding its conflict-of-law provisions. The
+application of the United Nations Convention on Contracts for the International
+Sale of Goods is expressly excluded. Any use of the Original Work outside the
+scope of this License or after its termination shall be subject to the
+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 101 et seq.,
+the equivalent laws of other countries, and international treaty. This section
+shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or
+seeking damages relating thereto, the prevailing party shall be entitled to
+recover its costs and expenses, including, without limitation, reasonable
+attorneys' fees and costs incurred in connection with such action, including
+any appeal of such action. This section shall survive the termination of this
+License.
+
+13) Miscellaneous. This License represents the complete agreement concerning
+the subject matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent necessary to
+make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether
+in upper or lower case, means an individual or a legal entity exercising rights
+under, and complying with all of the terms of, this License. For legal
+entities, "You" includes any entity that controls, is controlled by, or is
+under common control with you. For purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty percent
+(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
+entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise
+restricted or conditioned by this License or by law, and Licensor promises not
+to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2003 Lawrence E. Rosen. All rights reserved.
+Permission is hereby granted to copy and distribute this license without
+modification. This license may not be modified without the express written
+permission of its copyright owner.
+
+
+
+ + +
+ xdg-user-dirs + + homepage + - + show license + +
+
  Copyright (c) 2007 Red Hat, inc
+
+  Permission is hereby granted, free of charge, to any person
+  obtaining a copy of this software and associated documentation files
+  (the "Software"), to deal in the Software without restriction,
+  including without limitation the rights to use, copy, modify, merge,
+  publish, distribute, sublicense, and/or sell copies of the Software,
+  and to permit persons to whom the Software is furnished to do so,
+  subject to the following conditions: 
+
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software. 
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+
+
+
+ + +
+ xdg-utils + + homepage + - + show license + +
+
#
+#   Permission is hereby granted, free of charge, to any person obtaining a
+#   copy of this software and associated documentation files (the "Software"),
+#   to deal in the Software without restriction, including without limitation
+#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#   and/or sell copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following conditions:
+#
+#   The above copyright notice and this permission notice shall be included
+#   in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+#   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+#   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+#   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+ + +
+ yasm + + homepage + - + show license + +
+
Yasm is Copyright (c) 2001-2010 Peter Johnson and other Yasm developers.
+
+Yasm developers and/or contributors include:
+  Peter Johnson
+  Michael Urman
+  Brian Gladman (Visual Studio build files, other fixes)
+  Stanislav Karchebny (options parser)
+  Mathieu Monnier (SSE4 instruction patches, NASM preprocessor additions)
+  Anonymous "NASM64" developer (NASM preprocessor fixes)
+  Stephen Polkowski (x86 instruction patches)
+  Henryk Richter (Mach-O object format)
+  Ben Skeggs (patches, bug reports)
+  Alexei Svitkine (GAS preprocessor)
+  Samuel Thibault (TASM parser and frontend)
+
+-----------------------------------
+Yasm licensing overview and summary
+-----------------------------------
+
+Note: This document does not provide legal advice nor is it the actual
+license of any part of Yasm.  See the individual licenses for complete
+details.  Consult a lawyer for legal advice.
+
+The primary license of Yasm is the 2-clause BSD license.  Please use this
+license if you plan on submitting code to the project.
+
+Yasm has absolutely no warranty; not even for merchantibility or fitness
+for a particular purpose.
+
+-------
+Libyasm
+-------
+Libyasm is 2-clause or 3-clause BSD licensed, with the exception of
+bitvect, which is triple-licensed under the Artistic license, GPL, and
+LGPL.  Libyasm is thus GPL and LGPL compatible.  In addition, this also
+means that libyasm is free for binary-only distribution as long as the
+terms of the 3-clause BSD license and Artistic license (as it applies to
+bitvect) are fulfilled.
+
+-------
+Modules
+-------
+The modules are 2-clause or 3-clause BSD licensed.
+
+---------
+Frontends
+---------
+The frontends are 2-clause BSD licensed.
+
+-------------
+License Texts
+-------------
+The full text of all licenses are provided in separate files in the source
+distribution.  Each source file may include the entire license (in the case
+of the BSD and Artistic licenses), or may reference the GPL or LGPL license
+file.
+
+BSD.txt - 2-clause and 3-clause BSD licenses
+Artistic.txt - Artistic license
+GNU_GPL-2.0 - GNU General Public License
+GNU_LGPL-2.0 - GNU Library General Public License
+
+
+
+ + +
+ zlib + + homepage + - + show license + +
+
/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.2.4, March 14th, 2010
+
+  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly
+  Mark Adler
+
+*/
+
+mozzconf.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
+
+
+
+ + +
+ + diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_css.css b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_css.css new file mode 100644 index 000000000000..54945b7ec1cf --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_css.css @@ -0,0 +1,60 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +body { + overflow: auto; +} + +body.show-only-selected .product:not(.selected) { + display: none; +} + +.page-title { + font-size: 164%; + font-weight: bold; +} + +.entries { + margin: 8px; +} + +.product { + background-color: #c3d9ff; + border-radius: 5px; + margin-top: 16px; + overflow: auto; + padding: 2px; +} + +.product .title { + float: left; + font-size: 110%; + font-weight: bold; + margin: 3px; +} + +.right-align { + float: right; + margin: 3px 6px; +} + +.licence { + background-color: #e8eef7; + border-radius: 3px; + clear: both; + padding: 16px; +} + +.product:not(.selected) .licence { + display: none; +} + +.licence h3 { + margin-top: 0; +} + +.licence pre { + white-space: pre-wrap; +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_js.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_js.js new file mode 100644 index 000000000000..f3ebd83e0cf2 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/credits_js.js @@ -0,0 +1,20 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +(function() { + +'use strict'; + +/** @param {Event} event */ +function onClick(event) { + var element = /** @type {HTMLElement} */ (event.target); + if (element.classList.contains('toggle-licence')) { + element.parentElement.parentElement.classList.toggle('selected'); + document.body.classList.toggle('show-only-selected'); + } +} + +document.addEventListener('click', onClick, false); + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_oauth2_trampoline.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_oauth2_trampoline.js new file mode 100644 index 000000000000..b03bfb093faa --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_oauth2_trampoline.js @@ -0,0 +1,28 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// For open-source builds, the redirect URL ends in /dev. For official builds, +// it ends in /rel/{extension-id}. This distinction is handled by the manifest; +// all we have to do here is check the extension id in the case that there is +// one, to allow the official beta and dev channels to co-exist. + +var extensionId = chrome.i18n.getMessage('@@extension_id'); +var officialPath = '/talkgadget/oauth/chrome-remote-desktop/rel/' + extensionId; +var unofficialPath = '/talkgadget/oauth/chrome-remote-desktop/dev'; + +if (window.location.pathname == officialPath || + window.location.pathname == unofficialPath) { + var query = window.location.search.substring(1); + var parts = query.split('&'); + var queryArgs = {}; + for (var i = 0; i < parts.length; i++) { + var pair = parts[i].split('='); + queryArgs[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + + // Chrome may not deliver the message if window.close() is called after + // sendMessage(), see crbug.com/444130 . To ensure the message is delivered + // wait for a response before closing the window. + chrome.extension.sendMessage(queryArgs, function() { window.close(); }); +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_third_party_auth_trampoline.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_third_party_auth_trampoline.js new file mode 100644 index 000000000000..8e299eee9727 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/cs_third_party_auth_trampoline.js @@ -0,0 +1,13 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var thirdPartyPath = '/talkgadget/oauth/chrome-remote-desktop/thirdpartyauth'; + +if (window.location.pathname == thirdPartyPath) { + // Chrome may not deliver the message if window.close() is called after + // sendMessage(), see crbug.com/444130 . To ensure the message is delivered + // wait for a response before closing the window. + chrome.extension.sendMessage( + window.location.href, function() { window.close(); }); +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_connected_view.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_connected_view.js new file mode 100644 index 000000000000..5696b7312f34 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_connected_view.js @@ -0,0 +1,307 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class handling user-facing aspects of the client session. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @param {HTMLElement} container + * @param {remoting.ConnectionInfo} connectionInfo + * @constructor + * @extends {base.EventSourceImpl} + * @implements {base.Disposable} + */ +remoting.DesktopConnectedView = function(container, connectionInfo) { + + /** @private {HTMLElement} */ + this.container_ = container; + + /** @private {remoting.ClientPlugin} */ + this.plugin_ = connectionInfo.plugin(); + + /** @private {remoting.ClientSession} */ + this.session_ = connectionInfo.session(); + + /** @private */ + this.host_ = connectionInfo.host(); + + /** @private {remoting.DesktopViewport} */ + this.viewport_ = null; + + /** @private {remoting.ConnectedView} */ + this.view_ = null; + + /** @private {base.Disposable} */ + this.eventHooks_ = null; + + /** @private */ + this.stats_ = new remoting.ConnectionStats( + document.getElementById('statistics'), connectionInfo.plugin()); + + this.initPlugin_(); + this.initUI_(); +}; + +/** @return {void} Nothing. */ +remoting.DesktopConnectedView.prototype.dispose = function() { + if (remoting.windowFrame) { + remoting.windowFrame.setDesktopConnectedView(null); + } + if (remoting.toolbar) { + remoting.toolbar.setDesktopConnectedView(null); + } + if (remoting.optionsMenu) { + remoting.optionsMenu.setDesktopConnectedView(null); + } + + document.body.classList.remove('connected'); + + base.dispose(this.eventHooks_); + this.eventHooks_ = null; + + base.dispose(this.viewport_); + this.viewport_ = null; + + base.dispose(this.stats_); + this.stats = null; +}; + +/** + * Get host display name. + * + * @return {string} + */ +remoting.DesktopConnectedView.prototype.getHostDisplayName = function() { + return this.host_.hostName; +}; + +/** + * @return {boolean} True if shrink-to-fit is enabled; false otherwise. + */ +remoting.DesktopConnectedView.prototype.getShrinkToFit = function() { + if (this.viewport_) { + return this.viewport_.getShrinkToFit(); + } + return false; +}; + +/** + * @return {boolean} True if resize-to-client is enabled; false otherwise. + */ +remoting.DesktopConnectedView.prototype.getResizeToClient = function() { + if (this.viewport_) { + return this.viewport_.getResizeToClient(); + } + return false; +}; + +/** + * @return {boolean} True if the right-hand Ctrl key is mapped to the Meta + * (Windows, Command) key. + */ +remoting.DesktopConnectedView.prototype.getMapRightCtrl = function() { + return this.host_.options.getRemapKeys()[0x0700e4] === 0x0700e7; +}; + +remoting.DesktopConnectedView.prototype.toggleStats = function() { + this.stats_.toggle(); +}; + +/** + * @return {boolean} True if the connection stats is visible; false otherwise. + */ +remoting.DesktopConnectedView.prototype.isStatsVisible = function() { + return this.stats_.isVisible(); +}; + +/** + * @return {Element} The element that should host the plugin. + * @private + */ +remoting.DesktopConnectedView.prototype.getPluginContainer_ = function() { + return this.container_.querySelector('.client-plugin-container'); +}; + +/** @return {remoting.DesktopViewport} */ +remoting.DesktopConnectedView.prototype.getViewportForTesting = function() { + return this.viewport_; +}; + +/** @return {remoting.ConnectedView} */ +remoting.DesktopConnectedView.prototype.getConnectedViewForTesting = + function() { + return this.view_; +}; + +/** @private */ +remoting.DesktopConnectedView.prototype.initPlugin_ = function() { + console.assert(remoting.app instanceof remoting.DesktopRemoting, + '|remoting.app| is not an instance of DesktopRemoting.'); + var drApp = /** @type {remoting.DesktopRemoting} */ (remoting.app); + var mode = drApp.getConnectionMode(); + + // Show the Ctrl-Alt-Del button only in Me2Me mode. + if (mode == remoting.DesktopRemoting.Mode.IT2ME) { + var sendCadElement = document.getElementById('send-ctrl-alt-del'); + sendCadElement.hidden = true; + } +}; + +/** + * This is a callback that gets called when the window is resized. + * + * @return {void} Nothing. + * @private. + */ +remoting.DesktopConnectedView.prototype.onResize_ = function() { + if (this.viewport_) { + this.viewport_.onResize(); + } +}; + +/** @private */ +remoting.DesktopConnectedView.prototype.initUI_ = function() { + document.body.classList.add('connected'); + + this.view_ = new remoting.ConnectedView( + this.plugin_, this.container_, + this.container_.querySelector('.mouse-cursor-overlay')); + + var scrollerElement = base.getHtmlElement('scroller'); + this.viewport_ = new remoting.DesktopViewport( + scrollerElement || document.body, + this.plugin_.hostDesktop(), + this.host_.options); + + if (remoting.windowFrame) { + remoting.windowFrame.setDesktopConnectedView(this); + } + if (remoting.toolbar) { + remoting.toolbar.setDesktopConnectedView(this); + } + if (remoting.optionsMenu) { + remoting.optionsMenu.setDesktopConnectedView(this); + } + + // Activate full-screen related UX. + this.eventHooks_ = new base.Disposables( + this.view_, + new base.EventHook(this.session_, + remoting.ClientSession.Events.videoChannelStateChanged, + this.view_.onConnectionReady.bind(this.view_)), + new base.DomEventHook(window, 'resize', this.onResize_.bind(this), false), + new remoting.Fullscreen.EventHook(this.onFullScreenChanged_.bind(this))); + this.onFullScreenChanged_(remoting.fullscreen.isActive()); +}; + +/** + * Set the shrink-to-fit and resize-to-client flags and save them if this is + * a Me2Me connection. + * + * @param {boolean} shrinkToFit True if the remote desktop should be scaled + * down if it is larger than the client window; false if scroll-bars + * should be added in this case. + * @param {boolean} resizeToClient True if window resizes should cause the + * host to attempt to resize its desktop to match the client window size; + * false to disable this behaviour for subsequent window resizes--the + * current host desktop size is not restored in this case. + * @return {void} Nothing. + */ +remoting.DesktopConnectedView.prototype.setScreenMode = + function(shrinkToFit, resizeToClient) { + this.viewport_.setScreenMode(shrinkToFit, resizeToClient); +}; + +/** + * Called when the full-screen status has changed, either via the + * remoting.Fullscreen class, or via a system event such as the Escape key + * + * @param {boolean=} fullscreen True if the app is entering full-screen mode; + * false if it is leaving it. + * @private + */ +remoting.DesktopConnectedView.prototype.onFullScreenChanged_ = function ( + fullscreen) { + if (this.viewport_) { + // When a window goes full-screen, a resize event is triggered, but the + // Fullscreen.isActive call is not guaranteed to return true until the + // full-screen event is triggered. In apps v2, the size of the window's + // client area is calculated differently in full-screen mode, so register + // for both events. + this.viewport_.onResize(); + this.viewport_.enableBumpScroll(Boolean(fullscreen)); + } +}; + +/** + * Set whether or not the right-hand Ctrl key should send the Meta (Windows, + * Command) key-code. + * + * @param {boolean} enable True to enable the mapping; false to disable. + */ +remoting.DesktopConnectedView.prototype.setMapRightCtrl = function(enable) { + if (enable === this.getMapRightCtrl()) { + return; // In case right Ctrl is mapped, but not to right Meta. + } + + var remapKeys = this.host_.options.getRemapKeys(); + if (enable) { + remapKeys[0x0700e4] = 0x0700e7; + } else { + delete remapKeys[0x0700e4] + } + this.setRemapKeys(remapKeys); +}; + +/** + * Sends a Ctrl-Alt-Del sequence to the remoting client. + * + * @return {void} Nothing. + */ +remoting.DesktopConnectedView.prototype.sendCtrlAltDel = function() { + console.log('Sending Ctrl-Alt-Del.'); + this.plugin_.injectKeyCombination([0x0700e0, 0x0700e2, 0x07004c]); +}; + +/** + * Sends a Print Screen keypress to the remoting client. + * + * @return {void} Nothing. + */ +remoting.DesktopConnectedView.prototype.sendPrintScreen = function() { + console.log('Sending Print Screen.'); + this.plugin_.injectKeyCombination([0x070046]); +}; + +/** + * Sets and stores the key remapping setting for the current host. If set, + * these mappings override the defaults for the client platform. + * + * @param {string|!Object} remappings + */ +remoting.DesktopConnectedView.prototype.setRemapKeys = function(remappings) { + // Save the new remapping setting. + this.host_.options.setRemapKeys(remappings); + this.host_.options.save(); + this.plugin_.setRemapKeys(this.host_.options.getRemapKeys()); +}; + +/** + * Factory function so that it can be overwritten in unit test to avoid + * UI dependencies. + * + * @param {HTMLElement} container + * @param {remoting.ConnectionInfo} connectionInfo + * @return {remoting.DesktopConnectedView} + */ +remoting.DesktopConnectedView.create = function(container, connectionInfo) { + return new remoting.DesktopConnectedView(container, connectionInfo); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting.js new file mode 100644 index 000000000000..3a015709453a --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting.js @@ -0,0 +1,263 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * This class implements the functionality that is specific to desktop + * remoting ("Chromoting" or CRD). + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + * @implements {remoting.ApplicationInterface} + * @extends {remoting.Application} + */ +remoting.DesktopRemoting = function() { + base.inherits(this, remoting.Application); + + // Save recent errors for inclusion in user feedback. + remoting.ConsoleWrapper.getInstance().activate( + 5, + remoting.ConsoleWrapper.LogType.ERROR, + remoting.ConsoleWrapper.LogType.ASSERT); + + /** @protected {remoting.DesktopRemoting.Mode} */ + this.connectionMode_ = remoting.DesktopRemoting.Mode.ME2ME; + + /** @private {remoting.Activity} */ + this.activity_ = null; +}; + +/** + * The current desktop remoting mode (IT2Me or Me2Me). + * + * @enum {number} + */ +remoting.DesktopRemoting.Mode = { + IT2ME: 0, + ME2ME: 1 +}; + +/** + * Get the connection mode (Me2Me or IT2Me). + * + * @return {remoting.DesktopRemoting.Mode} + */ +remoting.DesktopRemoting.prototype.getConnectionMode = function() { + return this.connectionMode_; +}; + +/** + * @return {string} Application Id. + * @override {remoting.ApplicationInterface} + */ +remoting.DesktopRemoting.prototype.getApplicationId = function() { + // Application IDs are not used in desktop remoting. + return ''; +}; + +/** + * @return {string} Application product name to be used in UI. + * @override {remoting.ApplicationInterface} + */ +remoting.DesktopRemoting.prototype.getApplicationName = function() { + return chrome.i18n.getMessage(/*i18n-content*/'PRODUCT_NAME'); +}; + +/** + * @param {!remoting.Error} error The failure reason. + * @override {remoting.ApplicationInterface} + */ +remoting.DesktopRemoting.prototype.signInFailed_ = function(error) { + remoting.showErrorMessage(error); +}; + +/** + * @override {remoting.ApplicationInterface} + */ +remoting.DesktopRemoting.prototype.initApplication_ = function() { + remoting.initElementEventHandlers(); + + if (remoting.platformIsWindows()) { + document.body.classList.add('os-windows'); + } else if (remoting.platformIsMac()) { + document.body.classList.add('os-mac'); + } else if (remoting.platformIsChromeOS()) { + document.body.classList.add('os-chromeos'); + } else if (remoting.platformIsLinux()) { + document.body.classList.add('os-linux'); + } + + if (base.isAppsV2()) { + remoting.windowFrame = new remoting.WindowFrame( + base.getHtmlElement('title-bar'), this.disconnect_.bind(this)); + remoting.optionsMenu = remoting.windowFrame.createOptionsMenu(); + + var START_FULLSCREEN = 'start-fullscreen'; + remoting.fullscreen = new remoting.FullscreenAppsV2(); + remoting.fullscreen.addListener(function(isFullscreen) { + chrome.storage.local.set({START_FULLSCREEN: isFullscreen}); + }); + // TODO(jamiewalch): This should be handled by the background page when the + // window is created, but due to crbug.com/51587 it needs to be done here. + // Remove this hack once that bug is fixed. + chrome.storage.local.get( + START_FULLSCREEN, + /** @param {Object} values */ + function(values) { + if (values[START_FULLSCREEN]) { + remoting.fullscreen.activate(true); + } + } + ); + + } else { + remoting.fullscreen = new remoting.FullscreenAppsV1(); + remoting.toolbar = new remoting.Toolbar( + base.getHtmlElement('session-toolbar'), + this.disconnect_.bind(this)); + remoting.optionsMenu = remoting.toolbar.createOptionsMenu(); + + window.addEventListener('beforeunload', + this.promptClose_.bind(this), false); + window.addEventListener('unload', this.disconnect_.bind(this), false); + } + + remoting.initHostlist_(this.connectMe2Me_.bind(this)); + document.getElementById('access-mode-button').addEventListener( + 'click', this.connectIt2Me_.bind(this), false); + + remoting.manageHelpAndFeedback(base.getHtmlElement('title-bar')); + + remoting.showOrHideIT2MeUi(); + remoting.showOrHideMe2MeUi(); + + // For Apps v1, check the tab type to warn the user if they are not getting + // the best keyboard experience. + if (!base.isAppsV2() && !remoting.platformIsMac()) { + /** @param {boolean} isWindowed */ + var onIsWindowed = function(isWindowed) { + if (!isWindowed) { + document.getElementById('startup-mode-box-me2me').hidden = false; + document.getElementById('startup-mode-box-it2me').hidden = false; + } + }; + this.isWindowed_(onIsWindowed); + } + + remoting.ClientPlugin.factory.preloadPlugin(); +}; + +/** + * @param {string} token An OAuth access token. + * @override {remoting.ApplicationInterface} + */ +remoting.DesktopRemoting.prototype.startApplication_ = function(token) { + remoting.identity.getEmail().then( + function(/** string */ email) { + document.getElementById('current-email').innerText = email; + document.getElementById('get-started-it2me').disabled = false; + document.getElementById('get-started-me2me').disabled = false; + }); +}; + +/** @override {remoting.ApplicationInterface} */ +remoting.DesktopRemoting.prototype.exitApplication_ = function() { + this.disconnect_(); + this.closeMainWindow_(); +}; + +/** + * Determine whether or not the app is running in a window. + * @param {function(boolean):void} callback Callback to receive whether or not + * the current tab is running in windowed mode. + * @private + */ +remoting.DesktopRemoting.prototype.isWindowed_ = function(callback) { + var windowCallback = function(/** ChromeWindow */ win) { + callback(win.type == 'popup'); + }; + /** @param {Tab=} tab */ + var tabCallback = function(tab) { + if (tab.pinned) { + callback(false); + } else { + chrome.windows.get(tab.windowId, null, windowCallback); + } + }; + if (chrome.tabs) { + chrome.tabs.getCurrent(tabCallback); + } else { + console.error('chome.tabs is not available.'); + } +} + +/** + * If an IT2Me client or host is active then prompt the user before closing. + * If a Me2Me client is active then don't bother, since closing the window is + * the more intuitive way to end a Me2Me session, and re-connecting is easy. + * @private + */ +remoting.DesktopRemoting.prototype.promptClose_ = function() { + if (this.getConnectionMode() === remoting.DesktopRemoting.Mode.IT2ME) { + switch (remoting.currentMode) { + case remoting.AppMode.CLIENT_CONNECTING: + case remoting.AppMode.HOST_WAITING_FOR_CODE: + case remoting.AppMode.HOST_WAITING_FOR_CONNECTION: + case remoting.AppMode.HOST_SHARED: + case remoting.AppMode.IN_SESSION: + return chrome.i18n.getMessage(/*i18n-content*/'CLOSE_PROMPT'); + default: + return null; + } + } +}; + +/** @returns {remoting.DesktopConnectedView} */ +remoting.DesktopRemoting.prototype.getConnectedViewForTesting = function() { + var activity = /** @type {remoting.Me2MeActivity} */ (this.activity_); + return activity.getDesktopActivity().getConnectedView(); +}; + +remoting.DesktopRemoting.prototype.getActivity = function() { + return this.activity_; +}; + +remoting.DesktopRemoting.prototype.disconnect_ = function() { + if (this.activity_) { + this.activity_.stop(); + } +}; + +/** + * Entry-point for Me2Me connections. + * + * @param {string} hostId The unique id of the host. + * @return {void} Nothing. + * @private + */ +remoting.DesktopRemoting.prototype.connectMe2Me_ = function(hostId) { + var host = remoting.hostList.getHostForId(hostId); + base.dispose(this.activity_); + this.activity_ = new remoting.Me2MeActivity(host, remoting.hostList); + this.activity_.start(); + this.connectionMode_ = remoting.DesktopRemoting.Mode.ME2ME; +}; + +/** + * Entry-point for It2Me connections. + * + * @private + */ +remoting.DesktopRemoting.prototype.connectIt2Me_ = function() { + base.dispose(this.activity_); + this.activity_ = new remoting.It2MeActivity(); + this.activity_.start(); + this.connectionMode_ = remoting.DesktopRemoting.Mode.IT2ME; +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting_activity.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting_activity.js new file mode 100644 index 000000000000..c368d16a0cc3 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_remoting_activity.js @@ -0,0 +1,185 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +var ESCAPE_KEY_CODE = 27; + +/** + * This class provides common functionality to Me2MeActivity and It2MeActivity, + * e.g. constructing the relevant UX, and delegate the custom handling of the + * session state changes to the |parentActivity|. + * + * @param {remoting.Activity} parentActivity + * @param {remoting.SessionLogger} logger + * @param {Array=} opt_additionalCapabilities + * @implements {remoting.ClientSession.EventHandler} + * @implements {base.Disposable} + * @constructor + */ +remoting.DesktopRemotingActivity = function( + parentActivity, logger, opt_additionalCapabilities) { + /** @private */ + this.parentActivity_ = parentActivity; + /** @private {remoting.DesktopConnectedView} */ + this.connectedView_ = null; + + opt_additionalCapabilities = opt_additionalCapabilities || []; + /** @private */ + this.sessionFactory_ = new remoting.ClientSessionFactory( + document.querySelector('#client-container .client-plugin-container'), + opt_additionalCapabilities); + + /** @private {remoting.ClientSession} */ + this.session_ = null; + /** @private {remoting.ConnectingDialog} */ + this.connectingDialog_ = remoting.modalDialogFactory.createConnectingDialog( + parentActivity.stop.bind(parentActivity)); + + /** @private */ + this.isStopped_ = false; + + /** @private */ + this.logger_ = logger; + + /** @private {base.DomEventHook} */ + this.keydownHook_ = null; +}; + +/** + * Initiates a connection. + * + * @param {remoting.Host} host the Host to connect to. + * @param {remoting.CredentialsProvider} credentialsProvider + * @return {void} Nothing. + */ +remoting.DesktopRemotingActivity.prototype.start = + function(host, credentialsProvider) { + var that = this; + this.isStopped_ = false; + this.sessionFactory_.createSession(this, this.logger_).then( + function(/** remoting.ClientSession */ session) { + if (that.isStopped_) { + base.dispose(session); + } else { + that.session_ = session; + session.connect(host, credentialsProvider); + } + }).catch(remoting.Error.handler( + function(/** !remoting.Error */ error) { + that.parentActivity_.onConnectionFailed(error); + })); +}; + +remoting.DesktopRemotingActivity.prototype.stop = function() { + this.isStopped_ = true; + if (this.session_) { + this.session_.disconnect(remoting.Error.none()); + console.log('Disconnected.'); + } else { + console.log('Canceled.'); + // Session creation in process, just report it as canceled. + this.logger_.logSessionStateChange( + remoting.ChromotingEvent.SessionState.CONNECTION_CANCELED); + } +}; + +/** + * @param {remoting.ConnectionInfo} connectionInfo + */ +remoting.DesktopRemotingActivity.prototype.onConnected = + function(connectionInfo) { + this.connectingDialog_.hide(); + remoting.setMode(remoting.AppMode.IN_SESSION); + if (!base.isAppsV2()) { + remoting.toolbar.center(); + remoting.toolbar.preview(); + } + + this.connectedView_ = remoting.DesktopConnectedView.create( + base.getHtmlElement('client-container'), connectionInfo); + + // Apply the default or previously-specified keyboard remapping. + var remapping = connectionInfo.host().options.getRemapKeys(); + this.connectedView_.setRemapKeys(remapping); + this.parentActivity_.onConnected(connectionInfo); + + // ESC key feature tracking + var pluginElement = connectionInfo.plugin().element(); + var onKeyDown = function(/** KeyboardEvent **/ event) { + if (event && event.keyCode == ESCAPE_KEY_CODE + && remoting.fullscreen.isActive()) { + this.logger_.incrementFeatureUsage('fullscreen_esc_count'); + } + }; + this.keydownHook_ = new base.DomEventHook( + pluginElement, 'keydown', onKeyDown.bind(this), false); +}; + +remoting.DesktopRemotingActivity.prototype.onDisconnected = function(reason) { + if (this.handleError_(reason)) { + return; + } + + base.dispose(this.keydownHook_); + + this.parentActivity_.onDisconnected(reason); +}; + +/** + * @param {!remoting.Error} error + */ +remoting.DesktopRemotingActivity.prototype.onConnectionFailed = + function(error) { + if (this.handleError_(error)) { + return; + } + this.parentActivity_.onConnectionFailed(error); +}; + +/** + * @param {!remoting.Error} error The error to be localized and displayed. + * @return {boolean} returns true if the error is handled. + * @private + */ +remoting.DesktopRemotingActivity.prototype.handleError_ = function(error) { + if (error.hasTag(remoting.Error.Tag.AUTHENTICATION_FAILED)) { + remoting.setMode(remoting.AppMode.HOME); + remoting.handleAuthFailureAndRelaunch(); + return true; + } + return false; +}; + +remoting.DesktopRemotingActivity.prototype.dispose = function() { + base.dispose(this.connectedView_); + this.connectedView_ = null; + base.dispose(this.session_); + this.session_ = null; + this.connectingDialog_.hide(); +}; + +/** @return {remoting.DesktopConnectedView} */ +remoting.DesktopRemotingActivity.prototype.getConnectedView = function() { + return this.connectedView_; +}; + +/** + * @return {remoting.ClientSession}. + */ +remoting.DesktopRemotingActivity.prototype.getSession = function() { + return this.session_; +}; + +/** @return {remoting.ConnectingDialog} */ +remoting.DesktopRemotingActivity.prototype.getConnectingDialog = function() { + return this.connectingDialog_; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_viewport.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_viewport.js new file mode 100644 index 000000000000..12b6b9b72b98 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/desktop_viewport.js @@ -0,0 +1,369 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Provides view port management utilities below for a desktop remoting session. + * - Enabling bump scrolling + * - Resizing the viewport to fit the host desktop + * - Resizing the host desktop to fit the client viewport. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @param {HTMLElement} rootElement The outer element with id=scroller that we + * are showing scrollbars on. + * @param {remoting.HostDesktop} hostDesktop + * @param {remoting.HostOptions} hostOptions + * + * @constructor + * @implements {base.Disposable} + */ +remoting.DesktopViewport = function(rootElement, hostDesktop, hostOptions) { + /** @private */ + this.rootElement_ = rootElement; + /** @private */ + // TODO(kelvinp): Query the container by class name instead of id. + this.pluginContainer_ = rootElement.querySelector('#client-container'); + /** @private */ + this.pluginElement_ = rootElement.querySelector('embed'); + /** @private */ + this.hostDesktop_ = hostDesktop; + /** @private */ + this.hostOptions_ = hostOptions; + /** @private {number?} */ + this.resizeTimer_ = null; + /** @private {remoting.BumpScroller} */ + this.bumpScroller_ = null; + // Bump-scroll test variables. Override to use a fake value for the width + // and height of the client plugin so that bump-scrolling can be tested + // without relying on the actual size of the host desktop. + /** @private {number} */ + this.pluginWidthForBumpScrollTesting_ = 0; + /** @private {number} */ + this.pluginHeightForBumpScrollTesting_ = 0; + + this.eventHooks_ = new base.Disposables( + new base.EventHook( + this.hostDesktop_, remoting.HostDesktop.Events.sizeChanged, + this.onDesktopSizeChanged_.bind(this))); + + if (this.hostOptions_.getResizeToClient()) { + this.resizeHostDesktop_(); + } else { + this.onDesktopSizeChanged_(); + } +}; + +remoting.DesktopViewport.prototype.dispose = function() { + base.dispose(this.eventHooks_); + this.eventHooks_ = null; + base.dispose(this.bumpScroller_); + this.bumpScroller_ = null; +}; + +/** + * @return {boolean} True if shrink-to-fit is enabled; false otherwise. + */ +remoting.DesktopViewport.prototype.getShrinkToFit = function() { + return this.hostOptions_.getShrinkToFit(); +}; + +/** + * @return {boolean} True if resize-to-client is enabled; false otherwise. + */ +remoting.DesktopViewport.prototype.getResizeToClient = function() { + return this.hostOptions_.getResizeToClient(); +}; + +/** + * @return {{top:number, left:number}} The top-left corner of the plugin. + */ +remoting.DesktopViewport.prototype.getPluginPositionForTesting = function() { + /** + * @param {number|string} value + * @return {number} + */ + function toFloat(value) { + var number = parseFloat(value); + return isNaN(number) ? 0 : number; + } + return { + top: toFloat(this.pluginContainer_.style.marginTop), + left: toFloat(this.pluginContainer_.style.marginLeft) + }; +}; + +/** + * @param {number} width + * @param {number} height + */ +remoting.DesktopViewport.prototype.setPluginSizeForBumpScrollTesting = + function(width, height) { + this.pluginWidthForBumpScrollTesting_ = width; + this.pluginHeightForBumpScrollTesting_ = height; +}; + +/** + * @return {remoting.BumpScroller} + */ +remoting.DesktopViewport.prototype.getBumpScrollerForTesting = function() { + return this.bumpScroller_; +}; + +/** + * Set the shrink-to-fit and resize-to-client flags and save them if this is + * a Me2Me connection. + * + * @param {boolean} shrinkToFit True if the remote desktop should be scaled + * down if it is larger than the client window; false if scroll-bars + * should be added in this case. + * @param {boolean} resizeToClient True if window resizes should cause the + * host to attempt to resize its desktop to match the client window size; + * false to disable this behaviour for subsequent window resizes--the + * current host desktop size is not restored in this case. + * @return {void} Nothing. + */ +remoting.DesktopViewport.prototype.setScreenMode = + function(shrinkToFit, resizeToClient) { + if (resizeToClient && !this.hostOptions_.getResizeToClient()) { + this.resizeHostDesktop_(); + } + + // If enabling shrink, reset bump-scroll offsets. + var needsScrollReset = shrinkToFit && !this.hostOptions_.getShrinkToFit(); + this.hostOptions_.setShrinkToFit(shrinkToFit); + this.hostOptions_.setResizeToClient(resizeToClient); + this.hostOptions_.save(); + this.updateScrollbarVisibility_(); + + this.updateDimensions_(); + if (needsScrollReset) { + this.resetScroll_(); + } +}; + +/** + * Scroll the client plugin by the specified amount, keeping it visible. + * Note that this is only used in content full-screen mode (not windowed or + * browser full-screen modes), where window.scrollBy and the scrollTop and + * scrollLeft properties don't work. + * + * @param {number} dx The amount by which to scroll horizontally. Positive to + * scroll right; negative to scroll left. + * @param {number} dy The amount by which to scroll vertically. Positive to + * scroll down; negative to scroll up. + * @return {boolean} False if the requested scroll had no effect because both + * vertical and horizontal edges of the screen have been reached. + */ +remoting.DesktopViewport.prototype.scroll = function(dx, dy) { + /** + * Helper function for x- and y-scrolling + * @param {number|string} curr The current margin, eg. "10px". + * @param {number} delta The requested scroll amount. + * @param {number} windowBound The size of the window, in pixels. + * @param {number} pluginBound The size of the plugin, in pixels. + * @param {{stop: boolean}} stop Reference parameter used to indicate when + * the scroll has reached one of the edges and can be stopped in that + * direction. + * @return {string} The new margin value. + */ + var adjustMargin = function(curr, delta, windowBound, pluginBound, stop) { + var minMargin = Math.min(0, windowBound - pluginBound); + var result = (curr ? parseFloat(curr) : 0) - delta; + result = Math.min(0, Math.max(minMargin, result)); + stop.stop = (result === 0 || result == minMargin); + return result + 'px'; + }; + + var style = this.pluginContainer_.style; + + var pluginWidth = + this.pluginWidthForBumpScrollTesting_ || this.pluginElement_.clientWidth; + var pluginHeight = this.pluginHeightForBumpScrollTesting_ || + this.pluginElement_.clientHeight; + + var clientArea = this.getClientArea(); + var stopX = { stop: false }; + style.marginLeft = + adjustMargin(style.marginLeft, dx, clientArea.width, pluginWidth, stopX); + + var stopY = { stop: false }; + style.marginTop = + adjustMargin(style.marginTop, dy, clientArea.height, pluginHeight, stopY); + return !stopX.stop || !stopY.stop; +}; + +/** + * Enable or disable bump-scrolling. When disabling bump scrolling, also reset + * the scroll offsets to (0, 0). + * @param {boolean} enable True to enable bump-scrolling, false to disable it. + */ +remoting.DesktopViewport.prototype.enableBumpScroll = function(enable) { + if (enable) { + this.bumpScroller_ = new remoting.BumpScroller(this); + } else { + base.dispose(this.bumpScroller_); + this.bumpScroller_ = null; + this.resetScroll_(); + } +}; + +/** + * This is a callback that gets called when the window is resized. + * + * @return {void} Nothing. + */ +remoting.DesktopViewport.prototype.onResize = function() { + this.updateDimensions_(); + + if (this.resizeTimer_) { + window.clearTimeout(this.resizeTimer_); + this.resizeTimer_ = null; + } + + // Defer notifying the host of the change until the window stops resizing, to + // avoid overloading the control channel with notifications. + if (this.hostOptions_.getResizeToClient()) { + var kResizeRateLimitMs = 250; + var clientArea = this.getClientArea(); + this.resizeTimer_ = window.setTimeout(this.resizeHostDesktop_.bind(this), + kResizeRateLimitMs); + } + + // If bump-scrolling is enabled, adjust the plugin margins to fully utilize + // the new window area. + this.resetScroll_(); + this.updateScrollbarVisibility_(); +}; + +/** + * @return {{width:number, height:number}} The height of the window's client + * area. This differs between apps v1 and apps v2 due to the custom window + * borders used by the latter. + */ +remoting.DesktopViewport.prototype.getClientArea = function() { + return remoting.windowFrame ? + remoting.windowFrame.getClientArea() : + { 'width': window.innerWidth, 'height': window.innerHeight }; +}; + +/** + * Notifies the host of the client's current dimensions and DPI. + * Also takes into account per-host scaling factor, if configured. + * @private + */ +remoting.DesktopViewport.prototype.resizeHostDesktop_ = function() { + var clientArea = this.getClientArea(); + this.hostDesktop_.resize( + clientArea.width * this.hostOptions_.getDesktopScale(), + clientArea.height * this.hostOptions_.getDesktopScale(), + window.devicePixelRatio); +}; + +/** + * This is a callback that gets called when the plugin notifies us of a change + * in the size of the remote desktop. + * + * @return {void} Nothing. + * @private + */ +remoting.DesktopViewport.prototype.onDesktopSizeChanged_ = function() { + var dimensions = this.hostDesktop_.getDimensions(); + console.log('desktop size changed: ' + + dimensions.width + 'x' + + dimensions.height +' @ ' + + dimensions.xDpi + 'x' + + dimensions.yDpi + ' DPI'); + this.updateDimensions_(); + this.updateScrollbarVisibility_(); +}; + +/** + * Called when the window or desktop size or the scaling settings change, + * to set the scroll-bar visibility. + * + * TODO(jamiewalch): crbug.com/252796: Remove this once crbug.com/240772 is + * fixed. + */ +remoting.DesktopViewport.prototype.updateScrollbarVisibility_ = function() { + // TODO(kelvinp): Remove the check once app-remoting no longer depends on + // this. + if (!this.rootElement_) { + return; + } + + var needsScrollY = false; + var needsScrollX = false; + if (!this.hostOptions_.getShrinkToFit()) { + // Determine whether or not horizontal or vertical scrollbars are + // required, taking into account their width. + var clientArea = this.getClientArea(); + var hostDesktop = this.hostDesktop_.getDimensions(); + needsScrollY = clientArea.height < hostDesktop.height; + needsScrollX = clientArea.width < hostDesktop.width; + var kScrollBarWidth = 16; + if (needsScrollX && !needsScrollY) { + needsScrollY = clientArea.height - kScrollBarWidth < hostDesktop.height; + } else if (!needsScrollX && needsScrollY) { + needsScrollX = clientArea.width - kScrollBarWidth < hostDesktop.width; + } + } + + this.rootElement_.classList.toggle('no-horizontal-scroll', !needsScrollX); + this.rootElement_.classList.toggle('no-vertical-scroll', !needsScrollY); +}; + +remoting.DesktopViewport.prototype.updateDimensions_ = function() { + var dimensions = this.hostDesktop_.getDimensions(); + if (dimensions.width === 0 || dimensions.height === 0) { + return; + } + + var desktopSize = { width: dimensions.width, + height: dimensions.height }; + var desktopDpi = { x: dimensions.xDpi, + y: dimensions.yDpi }; + var newSize = remoting.Viewport.choosePluginSize( + this.getClientArea(), window.devicePixelRatio, + desktopSize, desktopDpi, this.hostOptions_.getDesktopScale(), + remoting.fullscreen.isActive(), this.hostOptions_.getShrinkToFit()); + + // Resize the plugin if necessary. + console.log('plugin dimensions:' + newSize.width + 'x' + newSize.height); + this.pluginElement_.style.width = newSize.width + 'px'; + this.pluginElement_.style.height = newSize.height + 'px'; +}; + +/** @private */ +remoting.DesktopViewport.prototype.resetScroll_ = function() { + this.pluginContainer_.style.marginTop = '0px'; + this.pluginContainer_.style.marginLeft = '0px'; +}; + +/** + * Sets and stores the scale factor to apply to host sizing requests. + * The desktopScale applies to the dimensions reported to the host, not + * to the client DPI reported to it. + * + * @param {number} desktopScale Scale factor to apply. + */ +remoting.DesktopViewport.prototype.setDesktopScale = function(desktopScale) { + this.hostOptions_.setDesktopScale(desktopScale); + + // onResize() will update the plugin size and scrollbars for the new + // scaled plugin dimensions, and send a client resolution notification. + this.onResize(); + + // Save the new desktop scale setting. + this.hostOptions_.save(); +}; + +}()); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/disclosure_arrow_down.webp b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/disclosure_arrow_down.webp new file mode 100644 index 0000000000000000000000000000000000000000..8f1f021c38c384c66a2dd8a058311e4674a8494c GIT binary patch literal 72 zcmWIYbaQiHU|xFbIe%2zXdX7o;^h9J<+1%*7&fj%`lyKjykn bjVxu>ppD`}1)ak4SdI$*?SH@eDFXultKt?* literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/disclosure_arrow_right.webp b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/disclosure_arrow_right.webp new file mode 100644 index 0000000000000000000000000000000000000000..193831d39c3f92a9f3045d49fbc0009f87685b35 GIT binary patch literal 48 zcmWIYbaT^SU|wItqW_Nf=W_x8 D9GVXC literal 0 HcmV?d00001 diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/dns_blackhole_checker.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/dns_blackhole_checker.js new file mode 100644 index 000000000000..69f9caa6125c --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/dns_blackhole_checker.js @@ -0,0 +1,183 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +/** @enum */ +var BlackholeState = { + PENDING: 0, + OPEN: 1, + BLOCKED: 2 +}; + +/** + * A SignalStrategy wrapper that performs DNS blackhole check. + * + * @param {remoting.SignalStrategy} signalStrategy + * @constructor + * @implements {remoting.SignalStrategy} + */ +remoting.DnsBlackholeChecker = function(signalStrategy) { + /** @private */ + this.signalStrategy_ = signalStrategy; + this.signalStrategy_.setStateChangedCallback( + this.onWrappedSignalStrategyStateChanged_.bind(this)); + + /** @private {?function(remoting.SignalStrategy.State):void} */ + this.onStateChangedCallback_ = null; + + /** @private */ + this.state_ = remoting.SignalStrategy.State.NOT_CONNECTED; + + /** @private */ + this.blackholeState_ = BlackholeState.PENDING; + + /** @private {?remoting.Xhr} */ + this.xhr_ = null; + + /** @const @private */ + this.url_ = + remoting.settings.TALK_GADGET_URL + '/oauth/chrome-remote-desktop-client'; +}; + +/** + * @param {?function(remoting.SignalStrategy.State):void} onStateChangedCallback + * Callback to call on state change. + */ +remoting.DnsBlackholeChecker.prototype.setStateChangedCallback = function( + onStateChangedCallback) { + this.onStateChangedCallback_ = onStateChangedCallback; +}; + +/** + * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on + * incoming messages. + */ +remoting.DnsBlackholeChecker.prototype.setIncomingStanzaCallback = + function(onIncomingStanzaCallback) { + this.signalStrategy_.setIncomingStanzaCallback(onIncomingStanzaCallback); +}; + +/** @return {remoting.SignalStrategy.Type} The signal strategy type. */ +remoting.DnsBlackholeChecker.prototype.getType = function() { + return this.signalStrategy_.getType(); +}; + +/** + * @param {string} server + * @param {string} username + * @param {string} authToken + */ +remoting.DnsBlackholeChecker.prototype.connect = function(server, + username, + authToken) { + console.assert(this.onStateChangedCallback_ != null, + 'No state change callback registered.'); + + this.signalStrategy_.connect(server, username, authToken); + + this.xhr_ = new remoting.Xhr({ + method: 'GET', + url: this.url_ + }); + this.xhr_.start().then(this.onHttpRequestDone_.bind(this)); +}; + +remoting.DnsBlackholeChecker.prototype.getState = function() { + return this.state_; +}; + +remoting.DnsBlackholeChecker.prototype.getError = function() { + if (this.blackholeState_ == BlackholeState.BLOCKED) { + return new remoting.Error(remoting.Error.Tag.NOT_AUTHORIZED); + } + + return this.signalStrategy_.getError(); +}; + +remoting.DnsBlackholeChecker.prototype.getJid = function() { + console.assert(this.state_ == remoting.SignalStrategy.State.CONNECTED, + 'getJid() called in state ' + this.state_ + '.'); + return this.signalStrategy_.getJid(); +}; + +remoting.DnsBlackholeChecker.prototype.dispose = function() { + this.xhr_ = null; + base.dispose(this.signalStrategy_); + this.setState_(remoting.SignalStrategy.State.CLOSED); +}; + +/** @param {string} message */ +remoting.DnsBlackholeChecker.prototype.sendMessage = function(message) { + console.assert(this.state_ == remoting.SignalStrategy.State.CONNECTED, + 'sendMessage() called in state ' + this.state_ + '.'); + this.signalStrategy_.sendMessage(message); +}; + +/** @param {remoting.SignalStrategy.State} state */ +remoting.DnsBlackholeChecker.prototype.onWrappedSignalStrategyStateChanged_ = + function(state) { + switch (this.blackholeState_) { + case BlackholeState.PENDING: + // Stay in HANDSHAKE state if we are still waiting for the HTTP request. + if (state != remoting.SignalStrategy.State.CONNECTED) { + this.setState_(state); + } + break; + case BlackholeState.OPEN: + this.setState_(state); + break; + case BlackholeState.BLOCKED: + // In case DNS blackhole is active the external state stays FAILED. + break; + } +}; + +/** + * @param {!remoting.Xhr.Response} response + * @private + */ +remoting.DnsBlackholeChecker.prototype.onHttpRequestDone_ = function(response) { + if (this.xhr_ == null) { + // This happens when the dispose() method is called while a + // request is pending. + return; + } + + this.xhr_ = null; + if (response.status >= 200 && response.status <= 299) { + console.log("DNS blackhole check succeeded."); + this.blackholeState_ = BlackholeState.OPEN; + if (this.signalStrategy_.getState() == + remoting.SignalStrategy.State.CONNECTED) { + this.setState_(remoting.SignalStrategy.State.CONNECTED); + } + } else { + console.error("DNS blackhole check failed: " + response.status + " " + + response.statusText + ". Response URL: " + + response.url + ". Response Text: " + + response.getText()); + this.blackholeState_ = BlackholeState.BLOCKED; + base.dispose(this.signalStrategy_); + this.setState_(remoting.SignalStrategy.State.FAILED); + } +}; + +/** + * @param {remoting.SignalStrategy.State} newState + * @private + */ +remoting.DnsBlackholeChecker.prototype.setState_ = function(newState) { + if (this.state_ != newState) { + this.state_ = newState; + this.onStateChangedCallback_(this.state_); + } +}; + +}()); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/drag.webp b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/drag.webp new file mode 100644 index 0000000000000000000000000000000000000000..e93f0efcea9983141e4a03e76b5d9e965ba7bffd GIT binary patch literal 148 zcmWIYbaU%rU|0JqS+#XfBogwbTKk80QD-k099^cVwlUQ#m2zKpqFVf%U1~m7&5#y7+AK= 200 && httpStatus < 300) { + return remoting.Error.none(); + } else if (httpStatus == 400 || httpStatus == 401) { + return new remoting.Error(remoting.Error.Tag.AUTHENTICATION_FAILED); + } else if (httpStatus == 403) { + return new remoting.Error(remoting.Error.Tag.NOT_AUTHORIZED); + } else if (httpStatus == 404) { + return new remoting.Error(remoting.Error.Tag.NOT_FOUND); + } else if (httpStatus >= 500 && httpStatus < 600) { + return new remoting.Error(remoting.Error.Tag.SERVICE_UNAVAILABLE); + } else { + console.warn('Unexpected HTTP error code: ' + httpStatus); + return remoting.Error.unexpected(); + } +}; + +/** + * Create an error-handling function suitable for passing to a + * Promise's "catch" method. + * + * @param {function(!remoting.Error):void} onError + * @return {function(*):void} + */ +remoting.Error.handler = function(onError) { + return function(/** * */ error) { + if (error instanceof remoting.Error) { + onError(/** @type {!remoting.Error} */ (error)); + } else { + console.error('Unexpected error:', error); + onError(remoting.Error.unexpected()); + } + }; +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/event_handlers.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/event_handlers.js new file mode 100644 index 000000000000..4332709c4aca --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/event_handlers.js @@ -0,0 +1,33 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** + * @param {Array<{event: string, id: string, + * fn: function(Event):void}>} actions Array of actions to register. + */ +function registerEventListeners(actions) { + for (var i = 0; i < actions.length; ++i) { + var action = actions[i]; + registerEventListener(action.id, action.event, action.fn); + } +} + +/** + * Add an event listener to the specified element. + * @param {string} id Id of element. + * @param {string} eventname Event name. + * @param {function(Event):void} fn Event handler. + */ +function registerEventListener(id, eventname, fn) { + var element = document.getElementById(id); + if (element) { + element.addEventListener(eventname, fn, false); + } else { + console.error('Could not set ' + eventname + + ' event handler on element ' + id + + ': element not found.'); + } +} diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/experiments.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/experiments.js new file mode 100644 index 000000000000..f3659fc6df95 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/experiments.js @@ -0,0 +1,113 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class for enabling experimental features. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +var kExperimentsStorageName = 'remoting-experiments'; +var ACTIVE_FIELD_TRIALS = {'ChromotingVP9': 'vp9'}; + +/** + * @param {Array.} list + */ +function save(list) { + var storageMap = {}; + storageMap[kExperimentsStorageName] = list; + chrome.storage.local.set(storageMap); +}; + +/** @type {Object} */ +remoting.experiments = {}; + +/** + * Enables an experiment. + * + * @param {string} experiment to enable. + */ +remoting.experiments.enable = function(experiment) { + remoting.experiments.get().then(function(/** Array. */list) { + if (list.indexOf(experiment) == -1) { + list.push(experiment); + save(list); + } + }); +}; + +/** + * Disables an experiment. + * + * @param {string} experiment to disable. + */ +remoting.experiments.disable = function(experiment) { + remoting.experiments.get().then(function(/** Array. */list) { + list = list.filter(function(e) { return e !== experiment; }); + save(list); + }); +}; + +/** + * Determines if the field-trial is enabled for this session. + * + * @param {string} trialName The FieldTrial to check for enabling. + * @return {Promise} + */ +function getTrialState(trialName) { + var deferred = new base.Deferred(); + chrome.metricsPrivate.getFieldTrial(trialName, + function(/** string */ group) { + if (group == 'Enabled') { + deferred.resolve(true); + } else { + deferred.resolve(false); + } + }); + return deferred.promise(); +}; + +/** + * Returns list of all enabled experiments. + * @return {Promise} + */ +remoting.experiments.get = function() { + + var localStorageList = new Promise(function(resolve, reject) { + chrome.storage.local.get(kExperimentsStorageName, function(items) { + /** @type {Array} */ + var experiments = new Array(); + if (items.hasOwnProperty(kExperimentsStorageName)) { + experiments = /** @type {Array} */ + (items[kExperimentsStorageName]); + } + resolve(experiments); + }); + }); + + var trialNames = Object.keys(ACTIVE_FIELD_TRIALS); + + return Promise.all([localStorageList].concat( + trialNames.map(function(/** string */ trialName) { + return getTrialState(trialName); + }))) + .then(function(results) { + /** @type {Array} */ + var list = results[0]; + for (var i = 0; i < trialNames.length; ++i) { + if (results[i + 1]) { + list.push(ACTIVE_FIELD_TRIALS[trialNames[i]]); + } + } + return list; + }); +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fallback_signal_strategy.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fallback_signal_strategy.js new file mode 100644 index 000000000000..68623ae8a695 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fallback_signal_strategy.js @@ -0,0 +1,342 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * A signal strategy encapsulating a primary and a back-up strategy. If the + * primary fails or times out, then the secondary is used. Information about + * which strategy was used, and why, is returned via |onProgressCallback|. + * + * @param {remoting.SignalStrategy} primary + * @param {remoting.SignalStrategy} secondary + * + * @implements {remoting.SignalStrategy} + * @constructor + */ +remoting.FallbackSignalStrategy = function(primary, + secondary) { + /** @private {remoting.SignalStrategy} */ + this.primary_ = primary; + this.primary_.setStateChangedCallback(this.onPrimaryStateChanged_.bind(this)); + + /** @private {remoting.SignalStrategy} */ + this.secondary_ = secondary; + this.secondary_.setStateChangedCallback( + this.onSecondaryStateChanged_.bind(this)); + + /** @private {?function(remoting.SignalStrategy.State)} */ + this.onStateChangedCallback_ = null; + + /** @private {?function(Element):void} */ + this.onIncomingStanzaCallback_ = null; + + /** + * @private {number} + * @const + */ + this.PRIMARY_CONNECT_TIMEOUT_MS_ = 10 * 1000; + + /** + * @enum {string} + * @private + */ + this.State = { + NOT_CONNECTED: 'not-connected', + PRIMARY_PENDING: 'primary-pending', + PRIMARY_SUCCEEDED: 'primary-succeeded', + SECONDARY_PENDING: 'secondary-pending', + SECONDARY_SUCCEEDED: 'secondary-succeeded', + SECONDARY_FAILED: 'secondary-failed', + CLOSED: 'closed' + }; + + /** @private {string} */ + this.state_ = this.State.NOT_CONNECTED; + + /** @private {?remoting.SignalStrategy.State} */ + this.externalState_ = null; + + /** @private {string} */ + this.server_ = ''; + + /** @private {string} */ + this.username_ = ''; + + /** @private {string} */ + this.authToken_ = ''; + + /** @private {number} */ + this.primaryConnectTimerId_ = 0; + + /** @private */ + this.logger_ = new remoting.SessionLogger( + remoting.ChromotingEvent.Role.CLIENT, + remoting.TelemetryEventWriter.Client.write + ); + + /** + * @type {Array<{strategyType: remoting.SignalStrategy.Type, + progress: remoting.FallbackSignalStrategy.Progress}>} + */ + this.connectionSetupResults_ = []; + +}; + +/** + * @enum {string} + */ +remoting.FallbackSignalStrategy.Progress = { + SUCCEEDED: 'succeeded', + FAILED: 'failed', + TIMED_OUT: 'timed-out', + SUCCEEDED_LATE: 'succeeded-late', + FAILED_LATE: 'failed-late', +}; + +remoting.FallbackSignalStrategy.prototype.dispose = function() { + this.primary_.dispose(); + this.secondary_.dispose(); +}; + +/** + * @param {function(remoting.SignalStrategy.State):void} onStateChangedCallback + * Callback to call on state change. + */ +remoting.FallbackSignalStrategy.prototype.setStateChangedCallback = function( + onStateChangedCallback) { + this.onStateChangedCallback_ = onStateChangedCallback; +}; + +/** + * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on + * incoming messages. + */ +remoting.FallbackSignalStrategy.prototype.setIncomingStanzaCallback = + function(onIncomingStanzaCallback) { + this.onIncomingStanzaCallback_ = onIncomingStanzaCallback; + if (this.state_ == this.State.PRIMARY_PENDING || + this.state_ == this.State.PRIMARY_SUCCEEDED) { + this.primary_.setIncomingStanzaCallback(onIncomingStanzaCallback); + } else if (this.state_ == this.State.SECONDARY_PENDING || + this.state_ == this.State.SECONDARY_SUCCEEDED) { + this.secondary_.setIncomingStanzaCallback(onIncomingStanzaCallback); + } +}; + +/** + * @param {string} server + * @param {string} username + * @param {string} authToken + */ +remoting.FallbackSignalStrategy.prototype.connect = + function(server, username, authToken) { + console.assert(this.state_ == this.State.NOT_CONNECTED, + 'connect() called in state ' + this.state_ + '.'); + console.assert(this.onStateChangedCallback_ != null, + 'No state change callback registered.'); + this.server_ = server; + this.username_ = username; + this.authToken_ = authToken; + this.state_ = this.State.PRIMARY_PENDING; + this.primary_.setIncomingStanzaCallback(this.onIncomingStanzaCallback_); + this.primary_.connect(server, username, authToken); + this.primaryConnectTimerId_ = + window.setTimeout(this.onPrimaryTimeout_.bind(this), + this.PRIMARY_CONNECT_TIMEOUT_MS_); +}; + +/** + * Sends a message. Can be called only in CONNECTED state. + * @param {string} message + */ +remoting.FallbackSignalStrategy.prototype.sendMessage = function(message) { + this.getConnectedSignalStrategy_().sendMessage(message); +}; + +/** @return {remoting.SignalStrategy.State} Current state */ +remoting.FallbackSignalStrategy.prototype.getState = function() { + return (this.externalState_ === null) + ? remoting.SignalStrategy.State.NOT_CONNECTED + : this.externalState_; +}; + +/** @return {!remoting.Error} Error when in FAILED state. */ +remoting.FallbackSignalStrategy.prototype.getError = function() { + console.assert(this.state_ == this.State.SECONDARY_FAILED, + 'getError() called in state ' + this.state_ + '.'); + console.assert( + this.secondary_.getState() == remoting.SignalStrategy.State.FAILED, + 'getError() called with secondary state ' + this.secondary_.getState() + + '.'); + return this.secondary_.getError(); +}; + +/** @return {string} Current JID when in CONNECTED state. */ +remoting.FallbackSignalStrategy.prototype.getJid = function() { + return this.getConnectedSignalStrategy_().getJid(); +}; + +/** @return {remoting.SignalStrategy.Type} The signal strategy type. */ +remoting.FallbackSignalStrategy.prototype.getType = function() { + return this.getConnectedSignalStrategy_().getType(); +}; + +/** + * @return {remoting.SignalStrategy} The active signal strategy, if the + * connection has succeeded. + * @private + */ +remoting.FallbackSignalStrategy.prototype.getConnectedSignalStrategy_ = + function() { + if (this.state_ == this.State.PRIMARY_SUCCEEDED) { + console.assert( + this.primary_.getState() == remoting.SignalStrategy.State.CONNECTED, + 'getConnectedSignalStrategy_() called with primary state ' + + this.primary_.getState() + '.'); + return this.primary_; + } else if (this.state_ == this.State.SECONDARY_SUCCEEDED) { + console.assert( + this.secondary_.getState() == remoting.SignalStrategy.State.CONNECTED, + 'getConnectedSignalStrategy_() called with secondary state ' + + this.secondary_.getState() + '.'); + return this.secondary_; + } else { + console.assert( + false, + 'getConnectedSignalStrategy() called in state ' + this.state_ + '.'); + return null; + } +}; + +/** + * @param {remoting.SignalStrategy.State} state + * @private + */ +remoting.FallbackSignalStrategy.prototype.onPrimaryStateChanged_ = + function(state) { + switch (state) { + case remoting.SignalStrategy.State.CONNECTED: + if (this.state_ == this.State.PRIMARY_PENDING) { + window.clearTimeout(this.primaryConnectTimerId_); + this.updateProgress_( + this.primary_, + remoting.FallbackSignalStrategy.Progress.SUCCEEDED); + this.state_ = this.State.PRIMARY_SUCCEEDED; + } else { + this.updateProgress_( + this.primary_, + remoting.FallbackSignalStrategy.Progress.SUCCEEDED_LATE); + } + break; + + case remoting.SignalStrategy.State.FAILED: + if (this.state_ == this.State.PRIMARY_PENDING) { + window.clearTimeout(this.primaryConnectTimerId_); + this.updateProgress_( + this.primary_, + remoting.FallbackSignalStrategy.Progress.FAILED); + this.connectSecondary_(); + } else { + this.updateProgress_( + this.primary_, + remoting.FallbackSignalStrategy.Progress.FAILED_LATE); + } + return; // Don't notify the external callback + + case remoting.SignalStrategy.State.CLOSED: + this.state_ = this.State.CLOSED; + break; + } + + this.notifyExternalCallback_(state); +}; + +/** + * @param {remoting.SignalStrategy.State} state + * @private + */ +remoting.FallbackSignalStrategy.prototype.onSecondaryStateChanged_ = + function(state) { + switch (state) { + case remoting.SignalStrategy.State.CONNECTED: + this.updateProgress_( + this.secondary_, + remoting.FallbackSignalStrategy.Progress.SUCCEEDED); + this.state_ = this.State.SECONDARY_SUCCEEDED; + break; + + case remoting.SignalStrategy.State.FAILED: + this.updateProgress_( + this.secondary_, + remoting.FallbackSignalStrategy.Progress.FAILED); + this.state_ = this.State.SECONDARY_FAILED; + break; + + case remoting.SignalStrategy.State.CLOSED: + this.state_ = this.State.CLOSED; + break; + } + + this.notifyExternalCallback_(state); +}; + +/** + * Notify the external callback of a change in state if it's consistent with + * the allowed state transitions (ie, if it represents a later stage in the + * connection process). Suppress state transitions that would violate this, + * for example a CONNECTING -> NOT_CONNECTED transition when we switch from + * the primary to the secondary signal strategy. + * + * @param {remoting.SignalStrategy.State} state + * @private + */ +remoting.FallbackSignalStrategy.prototype.notifyExternalCallback_ = + function(state) { + if (this.externalState_ === null || state > this.externalState_) { + this.externalState_ = state; + this.onStateChangedCallback_(state); + } +}; + +/** + * @private + */ +remoting.FallbackSignalStrategy.prototype.connectSecondary_ = function() { + console.assert(this.state_ == this.State.PRIMARY_PENDING, + 'connectSecondary_() called in state ' + this.state_ + '.'); + console.assert(this.server_ != '', 'No server address set.'); + console.assert(this.username_ != '', 'No username set.'); + console.assert(this.authToken_ != '', 'No auth token set.'); + + this.state_ = this.State.SECONDARY_PENDING; + this.primary_.setIncomingStanzaCallback(null); + this.secondary_.setIncomingStanzaCallback(this.onIncomingStanzaCallback_); + this.secondary_.connect(this.server_, this.username_, this.authToken_); +}; + +/** + * @private + */ +remoting.FallbackSignalStrategy.prototype.onPrimaryTimeout_ = function() { + this.updateProgress_( + this.primary_, + remoting.FallbackSignalStrategy.Progress.TIMED_OUT); + this.connectSecondary_(); +}; + +/** + * @param {remoting.SignalStrategy} strategy + * @param {remoting.FallbackSignalStrategy.Progress} progress + * @private + */ +remoting.FallbackSignalStrategy.prototype.updateProgress_ = function( + strategy, progress) { + console.log('FallbackSignalStrategy progress: ' + strategy.getType() + ' ' + + progress); + this.logger_.logSignalStrategyProgress(strategy.getType(), progress); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/feedback.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/feedback.js new file mode 100644 index 000000000000..a0ef42679ad8 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/feedback.js @@ -0,0 +1,79 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +var remoting = remoting || {}; + +(function(){ + +/** + * Attach appropriate event handlers and show or hide the feedback button based + * on whether or not the current version of Chrome recognizes Chrome Remote + * Desktop as an authorized feedback source. + * + * @param {HTMLElement} container The menu containing the help and feedback + * items. + */ +remoting.manageHelpAndFeedback = function(container) { + var helpButton = container.querySelector('.menu-help'); + console.assert(helpButton != null, 'Missing help button.'); + helpButton.addEventListener('click', showHelp, false); + + var creditsButton = container.querySelector('.menu-credits'); + console.assert(creditsButton != null, 'Missing credits button.'); + creditsButton.addEventListener('click', showCredits, false); + + var feedbackButton = container.querySelector('.menu-feedback'); + console.assert(feedbackButton != null, 'Missing feedback button.'); + var chromeVersion = parseInt( + window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10); + if (chromeVersion >= 35) { + feedbackButton.addEventListener('click', sendFeedback, false); + } else { + feedbackButton.hidden = true; + } +}; + +function showHelp() { + window.open('https://support.google.com/chrome/answer/1649523'); +}; + +function showCredits() { + chrome.app.window.create( + 'credits.html', + { + 'width': 800, + 'height': 600, + 'id' : 'remoting-credits' + }); +}; + +/** + * Pass the current version of Chrome Remote Desktop to the Google Feedback + * extension and instruct it to show the feedback dialog. + */ +function sendFeedback() { + var message = { + requestFeedback: true, + feedbackInfo: { + description: '', + systemInformation: [ + { + key: 'version', + value: remoting.app.getExtensionInfo() + }, + { + key: 'consoleErrors', + value: JSON.stringify( + remoting.ConsoleWrapper.getInstance().getHistory()) + } + ] + } + }; + var kFeedbackExtensionId = 'gfdkimpbcpahaombhbimeihdjnejgicl'; + chrome.runtime.sendMessage(kFeedbackExtensionId, message, function() {}); +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/format_iq.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/format_iq.js new file mode 100644 index 000000000000..89a5bbe7db44 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/format_iq.js @@ -0,0 +1,698 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Module to format IQ messages so they can be displayed in the debug log. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + * @param {string} clientJid + * @param {string} hostJid + */ +remoting.FormatIq = function(clientJid, hostJid) { + /** @private */ + this.clientJid_ = clientJid; + /** @private */ + this.hostJid_ = hostJid; +}; + +/** + * Verify that the only attributes on the given |node| are those specified + * in the |attrs| string. + * + * @param {Node} node The node to verify. + * @param {string} validAttrs Comma-separated list of valid attributes. + * + * @return {boolean} True if the node contains only valid attributes. + */ +remoting.FormatIq.prototype.verifyAttributes = function(node, validAttrs) { + var attrs = ',' + validAttrs + ','; + var len = node.attributes.length; + for (var i = 0; i < len; i++) { + /** @type {Node} */ + var attrNode = node.attributes[i]; + var attr = attrNode.nodeName; + if (attrs.indexOf(',' + attr + ',') == -1) { + return false; + } + } + return true; +}; + +/** + * Calculate the 'pretty' version of data from the |server| node. + * + * @param {Node} server Xml node with server info. + * + * @return {?string} Formatted server string. Null if error. + */ +remoting.FormatIq.prototype.calcServerString = function(server) { + if (!this.verifyAttributes(server, 'host,udp,tcp,tcpssl')) { + return null; + } + var host = server.getAttribute('host'); + var udp = server.getAttribute('udp'); + var tcp = server.getAttribute('tcp'); + var tcpssl = server.getAttribute('tcpssl'); + + var str = "'" + host + "'"; + if (udp) + str += ' udp:' + udp; + if (tcp) + str += ' tcp:' + tcp; + if (tcpssl) + str += ' tcpssl:' + tcpssl; + + str += '; '; + return str; +}; + +/** + * Calc the 'pretty' version of channel data. + * + * @param {Node} channel Xml node with channel info. + * + * @return {?string} Formatted channel string. Null if error. + */ +remoting.FormatIq.prototype.calcChannelString = function(channel) { + var name = channel.nodeName; + if (!this.verifyAttributes(channel, 'transport,version,codec')) { + return null; + } + var transport = channel.getAttribute('transport'); + var version = channel.getAttribute('version'); + + var str = name + ' ' + transport + ' v' + version; + if (name == 'video') { + str += ' codec=' + channel.getAttribute('codec'); + } + str += '; '; + return str; +}; + +/** + * Pretty print the jingleinfo from the given Xml node. + * + * @param {Node} query Xml query node with jingleinfo in the child nodes. + * + * @return {?string} Pretty version of jingleinfo. Null if error. + */ +remoting.FormatIq.prototype.prettyJingleinfo = function(query) { + var nodes = query.childNodes; + var stun_servers = ''; + var result = ''; + for (var i = 0; i < nodes.length; i++) { + /** @type {Node} */ + var node = nodes[i]; + var name = node.nodeName; + if (name == 'stun') { + var sserver = ''; + var stun_nodes = node.childNodes; + for(var s = 0; s < stun_nodes.length; s++) { + /** @type {Node} */ + var stun_node = stun_nodes[s]; + var sname = stun_node.nodeName; + if (sname == 'server') { + var stun_str = this.calcServerString(stun_node); + if (!stun_str) { + return null; + } + sserver += stun_str; + } + } + result += '\n stun ' + sserver; + } else if (name == 'relay') { + var token = ''; + var rserver = ''; + var relay_nodes = node.childNodes; + for(var r = 0; r < relay_nodes.length; r++) { + /** @type {Node} */ + var relay_node = relay_nodes[r]; + var rname = relay_node.nodeName; + if (rname == 'token') { + token = token + relay_node.textContent; + } + if (rname == 'server') { + var relay_str = this.calcServerString(relay_node); + if (!relay_str) { + return null; + } + rserver += relay_str; + } + } + result += '\n relay ' + rserver + ' token: ' + token; + } else { + return null; + } + } + + return result; +}; + +/** + * Pretty print the session-initiate or session-accept info from the given + * Xml node. + * + * @param {Node} jingle Xml node with jingle session-initiate or session-accept + * info contained in child nodes. + * + * @return {?string} Pretty version of jingle stanza. Null if error. + */ +remoting.FormatIq.prototype.prettySessionInitiateAccept = function(jingle) { + if (jingle.childNodes.length != 1) { + return null; + } + var content = jingle.firstChild; + if (content.nodeName != 'content') { + return null; + } + var content_children = content.childNodes; + var result = ''; + for (var c = 0; c < content_children.length; c++) { + /** @type {Node} */ + var content_child = content_children[c]; + var cname = content_child.nodeName; + if (cname == 'description') { + var channels = ''; + var resolution = ''; + var auth = ''; + var desc_children = content_child.childNodes; + for (var d = 0; d < desc_children.length; d++) { + /** @type {Node} */ + var desc = desc_children[d]; + var dname = desc.nodeName; + if (dname == 'control' || dname == 'event' || dname == 'video') { + var channel_str = this.calcChannelString(desc); + if (!channel_str) { + return null; + } + channels += channel_str; + } else if (dname == 'initial-resolution') { + resolution = desc.getAttribute('width') + 'x' + + desc.getAttribute('height'); + } else if (dname == 'authentication') { + var auth_children = desc.childNodes; + for (var a = 0; a < auth_children.length; a++) { + /** @type {Node} */ + var auth_info = auth_children[a]; + if (auth_info.nodeName == 'auth-token') { + auth = auth + ' (auth-token) ' + auth_info.textContent; + } else if (auth_info.nodeName == 'certificate') { + auth = auth + ' (certificate) ' + auth_info.textContent; + } else if (auth_info.nodeName == 'master-key') { + auth = auth + ' (master-key) ' + auth_info.textContent; + } else { + return null; + } + } + } else { + return null; + } + } + result += '\n channels: ' + channels; + result += '\n auth: ' + auth; + result += '\n initial resolution: ' + resolution; + } else if (cname == 'transport') { + // The 'transport' node is currently empty. + var transport_children = content_child.childNodes; + if (transport_children.length != 0) { + return null; + } + } else { + return null; + } + } + return result; +}; + +/** + * Pretty print the session-terminate info from the given Xml node. + * + * @param {Node} jingle Xml node with jingle session-terminate info contained in + * child nodes. + * + * @return {?string} Pretty version of jingle session-terminate stanza. Null if + * error. + */ +remoting.FormatIq.prototype.prettySessionTerminate = function(jingle) { + if (jingle.childNodes.length != 1) { + return null; + } + var reason = jingle.firstChild; + if (reason.nodeName != 'reason' || reason.childNodes.length != 1) { + return null; + } + var info = reason.firstChild; + if (info.nodeName == 'success' || info.nodeName == 'general-error') { + return '\n reason=' + info.nodeName; + } + return null; +}; + +/** + * Pretty print the transport-info info from the given Xml node. + * + * @param {Node} jingle Xml node with jingle transport info contained in child + * nodes. + * + * @return {?string} Pretty version of jingle transport-info stanza. Null if + * error. + */ +remoting.FormatIq.prototype.prettyTransportInfo = function(jingle) { + if (jingle.childNodes.length != 1) { + return null; + } + var content = jingle.firstChild; + if (content.nodeName != 'content') { + return null; + } + var transport = content.firstChild; + if (transport.nodeName != 'transport') { + return null; + } + var transport_children = transport.childNodes; + var result = ''; + for (var t = 0; t < transport_children.length; t++) { + /** @type {Node} */ + var candidate = transport_children[t]; + if (candidate.nodeName != 'candidate') { + return null; + } + if (!this.verifyAttributes(candidate, 'name,address,port,preference,' + + 'username,protocol,generation,password,type,' + + 'network')) { + return null; + } + var name = candidate.getAttribute('name'); + var address = candidate.getAttribute('address'); + var port = candidate.getAttribute('port'); + var pref = candidate.getAttribute('preference'); + var username = candidate.getAttribute('username'); + var protocol = candidate.getAttribute('protocol'); + var generation = candidate.getAttribute('generation'); + var password = candidate.getAttribute('password'); + var type = candidate.getAttribute('type'); + var network = candidate.getAttribute('network'); + + var info = name + ': ' + address + ':' + port + ' ' + protocol + + ' name:' + username + ' pwd:' + password + + ' pref:' + pref + + ' ' + type; + if (network) { + info = info + " network:'" + network + "'"; + } + result += '\n ' + info; + } + return result; +}; + +/** + * Pretty print the jingle action contained in the given Xml node. + * + * @param {Node} jingle Xml node with jingle action contained in child nodes. + * @param {string} action String containing the jingle action. + * + * @return {?string} Pretty version of jingle action stanze. Null if error. + */ +remoting.FormatIq.prototype.prettyJingleAction = function(jingle, action) { + if (action == 'session-initiate' || action == 'session-accept') { + return this.prettySessionInitiateAccept(jingle); + } + if (action == 'session-terminate') { + return this.prettySessionTerminate(jingle); + } + if (action == 'transport-info') { + return this.prettyTransportInfo(jingle); + } + return null; +}; + +/** + * Pretty print the jingle error information contained in the given Xml node. + * + * @param {Node} error Xml node containing error information in child nodes. + * + * @return {?string} Pretty version of error stanze. Null if error. + */ +remoting.FormatIq.prototype.prettyError = function(error) { + if (!this.verifyAttributes(error, 'xmlns:err,code,type,err:hostname,' + + 'err:bnsname,err:stacktrace')) { + return null; + } + var code = error.getAttribute('code'); + var type = error.getAttribute('type'); + var hostname = error.getAttribute('err:hostname'); + var bnsname = error.getAttribute('err:bnsname'); + var stacktrace = error.getAttribute('err:stacktrace'); + + var result = '\n error ' + code + ' ' + type + " hostname:'" + + hostname + "' bnsname:'" + bnsname + "'"; + var children = error.childNodes; + for (var i = 0; i < children.length; i++) { + /** @type {Node} */ + var child = children[i]; + result += '\n ' + child.nodeName; + } + if (stacktrace) { + var stack = stacktrace.split(' | '); + result += '\n stacktrace:'; + // We use 'length-1' because the stack trace ends with " | " which results + // in an empty string at the end after the split. + for (var s = 0; s < stack.length - 1; s++) { + result += '\n ' + stack[s]; + } + } + return result; +}; + +/** + * Print out the heading line for an iq node. + * + * @param {string} action String describing action (send/receive). + * @param {string} id Packet id. + * @param {string} desc Description of iq action for this node. + * @param {string|null} sid Session id. + * + * @return {string} Pretty version of stanza heading info. + */ +remoting.FormatIq.prototype.prettyIqHeading = function(action, id, desc, + sid) { + var message = 'iq ' + action + ' id=' + id; + if (desc) { + message = message + ' ' + desc; + } + if (sid) { + message = message + ' sid=' + sid; + } + return message; +}; + +/** + * Print out an iq 'result'-type node. + * + * @param {string} action String describing action (send/receive). + * @param {NodeList} iq_list Node list containing the 'result' xml. + * + * @return {?string} Pretty version of Iq result stanza. Null if error. + */ +remoting.FormatIq.prototype.prettyIqResult = function(action, iq_list) { + /** @type {Node} */ + var iq = iq_list[0]; + var id = iq.getAttribute('id'); + var iq_children = iq.childNodes; + + if (iq_children.length == 0) { + return this.prettyIqHeading(action, id, 'result (empty)', null); + } else if (iq_children.length == 1) { + /** @type {Node} */ + var child = iq_children[0]; + if (child.nodeName == 'query') { + if (!this.verifyAttributes(child, 'xmlns')) { + return null; + } + var xmlns = child.getAttribute('xmlns'); + if (xmlns == 'google:jingleinfo') { + var result = this.prettyIqHeading(action, id, 'result ' + xmlns, null); + result += this.prettyJingleinfo(child); + return result; + } + return ''; + } else if (child.nodeName == 'rem:log-result') { + if (!this.verifyAttributes(child, 'xmlns:rem')) { + return null; + } + return this.prettyIqHeading(action, id, 'result (log-result)', null); + } + } + return null; +}; + +/** + * Print out an Iq 'get'-type node. + * + * @param {string} action String describing action (send/receive). + * @param {NodeList} iq_list Node containing the 'get' xml. + * + * @return {?string} Pretty version of Iq get stanza. Null if error. + */ +remoting.FormatIq.prototype.prettyIqGet = function(action, iq_list) { + /** @type {Node} */ + var iq = iq_list[0]; + var id = iq.getAttribute('id'); + var iq_children = iq.childNodes; + + if (iq_children.length != 1) { + return null; + } + + /** @type {Node} */ + var query = iq_children[0]; + if (query.nodeName != 'query') { + return null; + } + if (!this.verifyAttributes(query, 'xmlns')) { + return null; + } + var xmlns = query.getAttribute('xmlns'); + return this.prettyIqHeading(action, id, 'get ' + xmlns, null); +}; + +/** + * Print out an iq 'set'-type node. + * + * @param {string} action String describing action (send/receive). + * @param {NodeList} iq_list Node containing the 'set' xml. + * + * @return {?string} Pretty version of Iq set stanza. Null if error. + */ +remoting.FormatIq.prototype.prettyIqSet = function(action, iq_list) { + /** @type {Node} */ + var iq = iq_list[0]; + var id = iq.getAttribute('id'); + var iq_children = iq.childNodes; + + var children = iq_children.length; + if (children == 1) { + /** @type {Node} */ + var child = iq_children[0]; + if (child.nodeName == 'gr:log') { + var grlog = child; + if (!this.verifyAttributes(grlog, 'xmlns:gr')) { + return null; + } + + if (grlog.childNodes.length != 1) { + return null; + } + var grentry = grlog.firstChild; + if (grentry.nodeName != 'gr:entry') { + return null; + } + if (!this.verifyAttributes(grentry, 'role,event-name,session-state,' + + 'os-name,cpu,browser-version,' + + 'webapp-version')) { + return null; + } + var role = grentry.getAttribute('role'); + var event_name = grentry.getAttribute('event-name'); + var session_state = grentry.getAttribute('session-state'); + var os_name = grentry.getAttribute('os-name'); + var cpu = grentry.getAttribute('cpu'); + var browser_version = grentry.getAttribute('browser-version'); + var webapp_version = grentry.getAttribute('webapp-version'); + + var result = this.prettyIqHeading(action, id, role + ' ' + event_name + + ' ' + session_state, null); + result += '\n ' + os_name + ' ' + cpu + " browser:" + browser_version + + " webapp:" + webapp_version; + return result; + } + if (child.nodeName == 'jingle') { + var jingle = child; + if (!this.verifyAttributes(jingle, 'xmlns,action,sid,initiator')) { + return null; + } + + var jingle_action = jingle.getAttribute('action'); + var sid = jingle.getAttribute('sid'); + + var result = this.prettyIqHeading(action, id, 'set ' + jingle_action, + sid); + var action_str = this.prettyJingleAction(jingle, jingle_action); + if (!action_str) { + return null; + } + return result + action_str; + } + } + return null; +}; + +/** + * Print out an iq 'error'-type node. + * + * @param {string} action String describing action (send/receive). + * @param {NodeList} iq_list Node containing the 'error' xml. + * + * @return {?string} Pretty version of iq error stanza. Null if error parsing + * this stanza. + */ +remoting.FormatIq.prototype.prettyIqError = function(action, iq_list) { + /** @type {Node} */ + var iq = iq_list[0]; + var id = iq.getAttribute('id'); + var iq_children = iq.childNodes; + + var children = iq_children.length; + if (children != 2) { + return null; + } + + /** @type {Node} */ + var jingle = iq_children[0]; + if (jingle.nodeName != 'jingle') { + return null; + } + if (!this.verifyAttributes(jingle, 'xmlns,action,sid,initiator')) { + return null; + } + var jingle_action = jingle.getAttribute('action'); + var sid = jingle.getAttribute('sid'); + var result = this.prettyIqHeading(action, id, 'error from ' + jingle_action, + sid); + var action_str = this.prettyJingleAction(jingle, jingle_action); + if (!action_str) { + return null; + } + result += action_str; + + /** @type {Node} */ + var error = iq_children[1]; + if (error.nodeName != 'cli:error') { + return null; + } + + var error_str = this.prettyError(error); + if (!error_str) { + return null; + } + result += error_str; + return result; +}; + +/** + * Try to log a pretty-print the given IQ stanza (XML). + * Return true if the stanza was successfully printed. + * + * @param {boolean} send True if we're sending this stanza; false for receiving. + * @param {string} message The XML stanza to add to the log. + * + * @return {?string} Pretty version of the Iq stanza. Null if error. + */ +remoting.FormatIq.prototype.prettyIq = function(send, message) { + var parser = new DOMParser(); + var xml = parser.parseFromString(message, 'text/xml'); + + var iq_list = xml.getElementsByTagName('iq'); + + if (iq_list && iq_list.length > 0) { + /** @type {Node} */ + var iq = iq_list[0]; + if (!this.verifyAttributes(iq, 'xmlns,xmlns:cli,id,to,from,type')) + return null; + + // Verify that the to/from fields match the expected sender/receiver. + var to = iq.getAttribute('to'); + var from = iq.getAttribute('from'); + var action = ''; + var bot = remoting.settings.DIRECTORY_BOT_JID; + if (send) { + if (to && to != this.hostJid_ && to != bot) { + console.warn('FormatIq: bad to: ' + to); + return null; + } + if (from && from != this.clientJid_) { + console.warn('FormatIq: bad from: ' + from); + return null; + } + + action = "send"; + if (to == bot) { + action = action + " (to bot)"; + } + } else { + if (to && to != this.clientJid_) { + console.warn('FormatIq: bad to: ' + to); + return null; + } + if (from && from != this.hostJid_ && from != bot) { + console.warn('FormatIq: bad from: ' + from); + return null; + } + + action = "receive"; + if (from == bot) { + action = action + " (from bot)"; + } + } + + var type = iq.getAttribute('type'); + if (type == 'result') { + return this.prettyIqResult(action, iq_list); + } else if (type == 'get') { + return this.prettyIqGet(action, iq_list); + } else if (type == 'set') { + return this.prettyIqSet(action, iq_list); + } else if (type == 'error') { + return this.prettyIqError(action, iq_list); + } + } + + return null; +}; + +/** + * Return a pretty-formatted string for the IQ stanza being sent. + * If the stanza cannot be made pretty, then a string with a raw dump of the + * stanza will be returned. + * + * @param {string} message The XML stanza to make pretty. + * + * @return {string} Pretty version of XML stanza being sent. A raw dump of the + * stanza is returned if there was a parsing error. + */ +remoting.FormatIq.prototype.prettifySendIq = function(message) { + var result = this.prettyIq(true, message); + if (!result) { + // Fall back to showing the raw stanza. + return 'Sending Iq: ' + message; + } + return result; +}; + +/** + * Return a pretty-formatted string for the IQ stanza that was received. + * If the stanza cannot be made pretty, then a string with a raw dump of the + * stanza will be returned. + * + * @param {string} message The XML stanza to make pretty. + * + * @return {string} Pretty version of XML stanza that was received. A raw dump + * of the stanza is returned if there was a parsing error. + */ +remoting.FormatIq.prototype.prettifyReceiveIq = function(message) { + var result = this.prettyIq(false, message); + if (!result) { + // Fall back to showing the raw stanza. + return 'Receiving Iq: ' + message; + } + return result; +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen.js new file mode 100644 index 000000000000..1dfff4f227bd --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen.js @@ -0,0 +1,71 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Controller interface for full-screen mode. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** @interface */ +remoting.Fullscreen = function() { }; + +/** + * Enter or leave full-screen mode. + * + * @param {boolean} fullscreen True to enter full-screen mode; false to leave. + * @param {function():void=} opt_onDone Optional completion callback. + */ +remoting.Fullscreen.prototype.activate = function(fullscreen, opt_onDone) { }; + +/** + * @return {boolean} True if full-screen mode is active. + */ +remoting.Fullscreen.prototype.isActive = function() { }; + +/** + * Toggle full-screen mode. + * @return {void} + */ +remoting.Fullscreen.prototype.toggle = function() { }; + +/** + * Add a listener for the full-screen-changed event. + * + * @param {function(boolean=):void} callback + */ +remoting.Fullscreen.prototype.addListener = function(callback) { }; + +/** + * Remove a listener for the full-screen-changed event. + * + * @param {function(boolean=):void} callback + */ +remoting.Fullscreen.prototype.removeListener = function(callback) { }; + +/** @type {remoting.Fullscreen} */ +remoting.fullscreen = null; + + +/** + * @constructor + * @param {function(boolean=)} listener + * @implements {base.Disposable} + */ +remoting.Fullscreen.EventHook = function(listener) { + /** @private */ + this.src_ = remoting.fullscreen; + /** @private */ + this.listener_ = listener; + + this.src_.addListener(listener); +}; + +remoting.Fullscreen.EventHook.prototype.dispose = function() { + this.src_.removeListener(this.listener_); +}; \ No newline at end of file diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v1.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v1.js new file mode 100644 index 000000000000..7ef04ad00dbd --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v1.js @@ -0,0 +1,107 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Full-screen implementation for apps v1, using webkitRequestFullscreen. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + * @implements {remoting.Fullscreen} + */ +remoting.FullscreenAppsV1 = function() { + /** @private {string} Internal 'full-screen changed' event name */ + this.kEventName_ = '_fullscreenchanged'; + + /** @private {base.EventSourceImpl} */ + this.eventSource_ = new base.EventSourceImpl(); + this.eventSource_.defineEvents([this.kEventName_]); + + document.addEventListener( + 'webkitfullscreenchange', + this.onFullscreenChanged_.bind(this), + false); +}; + +/** + * @param {boolean} fullscreen + * @param {function():void=} opt_onDone + * @override + */ +remoting.FullscreenAppsV1.prototype.activate = function( + fullscreen, opt_onDone) { + if (opt_onDone) { + if (this.isActive() == fullscreen) { + opt_onDone(); + } else { + /** @type {remoting.Fullscreen} */ + var that = this; + var callbackAndRemoveListener = function() { + that.removeListener(callbackAndRemoveListener); + opt_onDone(); + }; + this.addListener(callbackAndRemoveListener); + } + } + + if (fullscreen) { + document.body.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } else { + document.webkitCancelFullScreen(); + } +}; + +/** @return {void} */ +remoting.FullscreenAppsV1.prototype.toggle = function() { + this.activate(!this.isActive()); +}; + +/** + * @return {boolean} True if full-screen mode is active. + */ +remoting.FullscreenAppsV1.prototype.isActive = function() { + return document.webkitIsFullScreen; +}; + +/** + * @param {function(boolean=):void} callback + */ +remoting.FullscreenAppsV1.prototype.addListener = function(callback) { + this.eventSource_.addEventListener(this.kEventName_, callback); +}; + +/** + * @param {function(boolean=):void} callback + */ +remoting.FullscreenAppsV1.prototype.removeListener = function(callback) { + this.eventSource_.removeEventListener(this.kEventName_, callback); +}; + +/** + * @private + */ +remoting.FullscreenAppsV1.prototype.onFullscreenChanged_ = function() { + /** @this {remoting.FullscreenAppsV1} */ + var checkIsActive = function() { + if (this.isActive()) { + document.body.classList.add('fullscreen'); + } else { + document.body.classList.remove('fullscreen'); + } + this.eventSource_.raiseEvent(this.kEventName_, this.isActive()); + }; + + // Querying full-screen immediately after the webkitfullscreenchange + // event fires sometimes gives the wrong answer on Mac, perhaps due to + // the time taken to animate presentation mode. Since I haven't been able + // to isolate the exact repro steps, and we're not planning on using this + // API for much longer, this hack will suffice for now. + window.setTimeout(checkIsActive.bind(this), 500); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v2.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v2.js new file mode 100644 index 000000000000..616c77dc5dc7 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/fullscreen_v2.js @@ -0,0 +1,147 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Full-screen implementation for apps v2, using chrome.AppWindow. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + * @implements {remoting.Fullscreen} + */ +remoting.FullscreenAppsV2 = function() { + /** + * @type {boolean} True if the window is minimized. onRestored fires when the + * the window transitions from minimized to any other state, but since we + * only want transitions from full-screen to windowed to cause a callback, + * we must keep track of the minimized state of the window. + * @private + */ + this.isMinimized_ = chrome.app.window.current().isMinimized(); + + /** + * @type {?boolean} The most recent full-screen state passed to the callback. + * This guards against redundant invocations, as as would otherwise occur + * in response to a full-screen -> maximized -> unmaximized transition, + * because this results in two onRestored callbacks. + */ + this.previousCallbackState_ = null; + + /** @private {string} Internal 'full-screen changed' event name. */ + this.kEventName_ = '_fullscreenchanged'; + + /** @private {base.EventSourceImpl} */ + this.eventSource_ = new base.EventSourceImpl(); + this.eventSource_.defineEvents([this.kEventName_]); + + chrome.app.window.current().onFullscreened.addListener( + this.onFullscreened_.bind(this)); + chrome.app.window.current().onRestored.addListener( + this.onRestored_.bind(this)); + chrome.app.window.current().onMinimized.addListener( + this.onMinimized_.bind(this)); + + document.body.classList.toggle('fullscreen', this.isActive()); +}; + +/** + * @param {boolean} fullscreen True to enter full-screen mode; false to leave. + * @param {function():void=} opt_onDone Optional completion callback. + */ +remoting.FullscreenAppsV2.prototype.activate = function( + fullscreen, opt_onDone) { + if (opt_onDone) { + if (this.isActive() == fullscreen) { + opt_onDone(); + } else { + /** @type {remoting.Fullscreen} */ + var that = this; + var callbackAndRemoveListener = function() { + that.removeListener(callbackAndRemoveListener); + opt_onDone(); + }; + this.addListener(callbackAndRemoveListener); + } + } + + if (fullscreen) { + chrome.app.window.current().fullscreen(); + } else if (this.isActive()) { + chrome.app.window.current().restore(); + } +}; + +remoting.FullscreenAppsV2.prototype.toggle = function() { + this.activate(!this.isActive()); +}; + +/** + * @return {boolean} + */ +remoting.FullscreenAppsV2.prototype.isActive = function() { + return chrome.app.window.current().isFullscreen(); +}; + +/** + * @param {function(boolean=):void} callback + */ +remoting.FullscreenAppsV2.prototype.addListener = function(callback) { + this.eventSource_.addEventListener(this.kEventName_, callback); +}; + +/** + * @param {function(boolean=):void} callback + */ +remoting.FullscreenAppsV2.prototype.removeListener = function(callback) { + this.eventSource_.removeEventListener(this.kEventName_, callback); +}; + +/** + * @private + */ +remoting.FullscreenAppsV2.prototype.onFullscreened_ = function() { + this.isMinimized_ = false; + this.raiseEvent_(true); + document.body.classList.add('fullscreen'); +}; + +/** + * @private + */ +remoting.FullscreenAppsV2.prototype.onRestored_ = function() { + if (!this.isMinimized_) { + // ChromeOS fires a spurious onRestored event going maximized->fullscreen. + // TODO(jamiewalch): Remove this work-around when crbug.com/394819 is fixed. + if (remoting.platformIsChromeOS() && this.isActive()) { + return; + } + document.body.classList.remove('fullscreen'); + this.raiseEvent_(false); + } + this.isMinimized_ = false; +}; + +/** + * @private + */ +remoting.FullscreenAppsV2.prototype.onMinimized_ = function() { + this.isMinimized_ = true; +}; + +/** + * @param {boolean} isFullscreen + * @private + */ +remoting.FullscreenAppsV2.prototype.raiseEvent_ = function(isFullscreen) { + if (isFullscreen !== this.previousCallbackState_) { + this.previousCallbackState_ = isFullscreen; + this.eventSource_.raiseEvent(this.kEventName_, isFullscreen); + } +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_client.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_client.js new file mode 100644 index 000000000000..5bfab9fdef3e --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_client.js @@ -0,0 +1,276 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Client for the GCD REST API. + * TODO: Add link to GCD docs. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * Namespace for GCD definitions + * @type {Object} + */ +remoting.gcd = remoting.gcd || {}; + +/** + * @typedef {{ + * id: string, + * robotAccountEmail: string, + * robotAccountAuthorizationCode: string, + * deviceId: string, + * deviceDraft: Object + * }} + */ +remoting.gcd.RegistrationTicket; + +/** + * TODO: Flesh out with typical fields. + * @typedef {{ + * id:string, + * name:string, + * state:(!Object|undefined), + * tags:(!Array|undefined) + * }} + */ +remoting.gcd.Device; + +/** + * @typedef {!Object} + */ +remoting.gcd.DevicePatch; + +/** + * @typedef {{ + * devices: (Array|undefined) + * }} + */ +remoting.gcd.DeviceListResponse; + +(function() { +'use strict'; + +/** + * Interprets an HTTP response as a JSON object with a specific value + * in the 'kind' field. + * @param {remoting.Xhr.Response} response + * @param {string} expectedKind + * @return {!Object} + * @throws {remoting.Error} + */ +var responseAsObject = function(response, expectedKind) { + if (typeof response.getJson() != 'object') { + console.error( + 'invalid response; expected object, got:', response.getJson()); + throw remoting.Error.unexpected(); + } + var obj = base.assertObject(response.getJson()); + var kind = base.getStringAttr(obj, 'kind'); + if (kind != expectedKind) { + console.error( + 'invalid resonse kind; expected ' + expectedKind + ', got ' + kind); + throw remoting.Error.unexpected(); + } + return obj; +}; + +/** + * Interprets an HTTP response as containing a GCD registration ticket. + * @param {remoting.Xhr.Response} response + * @return {!remoting.gcd.RegistrationTicket} + * @throws {remoting.Error} + */ +var responseAsGcdRegistrationTicket = function(response) { + return /** @type {!remoting.gcd.RegistrationTicket} */ ( + responseAsObject( + response, 'clouddevices#registrationTicket')); +}; + +/** + * Interprets an HTTP response as containing a GCD device defintion. + * @param {remoting.Xhr.Response} response + * @return {!remoting.gcd.Device} + * @throws {remoting.Error} + */ +var responseAsGcdDevice = function(response) { + return /** @type {!remoting.gcd.Device} */ ( + responseAsObject(response, 'clouddevices#device')); +}; + +/** + * Interprets an HTTP response as containing a GCD device list. + * @param {remoting.Xhr.Response} response + * @return {!remoting.gcd.DeviceListResponse} + * @throws {remoting.Error} + */ +var responseAsGcdDeviceListResponse = function(response) { + return /** @type {!remoting.gcd.DeviceListResponse} */ ( + responseAsObject(response, 'clouddevices#devicesListResponse')); +}; + +/** + * Creates a new client using a specific API key, and optionall a + * specific base URL, and OAuth2 client ID. + * @param {{ + * apiKey: string, + * apiBaseUrl: (string|undefined) + * }} options + * @constructor + */ +remoting.gcd.Client = function(options) { + /** @const */ + this.apiKey_ = options.apiKey; + /** @const */ + this.apiBaseUrl_ = options.apiBaseUrl || + 'https://www.googleapis.com/clouddevices/v1'; +}; + +/** + * Creates a new registration ticket. + * TODO: Add link to GCD docs. + * @return {!Promise} + */ +remoting.gcd.Client.prototype.insertRegistrationTicket = function() { + return new remoting.Xhr({ + method: 'POST', + url: this.apiBaseUrl_ + '/registrationTickets', + jsonContent: { 'userEmail': 'me' }, + useIdentity: true, + acceptJson: true + }).start().then(function(/** remoting.Xhr.Response */ response) { + if (response.isError()) { + console.error('error creating registration ticket'); + throw remoting.Error.unexpected(); + } + return responseAsGcdRegistrationTicket(response); + }); +}; + +/** + * Updates an existing registration ticket using patch semantics. + * TODO: Add link to GCD docs. + * @param {string} ticketId + * @param {!Object<*>} deviceDraft + * @param {string} oauthClientId + * @return {!Promise} + */ +remoting.gcd.Client.prototype.patchRegistrationTicket = function( + ticketId, deviceDraft, oauthClientId) { + return new remoting.Xhr({ + method: 'PATCH', + url: this.apiBaseUrl_ + '/registrationTickets/' + + encodeURIComponent(ticketId), + urlParams: { + 'key': this.apiKey_ + }, + jsonContent: { + 'deviceDraft': deviceDraft, + 'oauthClientId': oauthClientId + }, + acceptJson: true + }).start().then(function(response) { + if (response.isError()) { + console.error('error patching registration ticket'); + throw remoting.Error.unexpected(); + } + return responseAsGcdRegistrationTicket(response); + }); +}; + +/** + * Finalizes device registration and returns its credentials. + * TODO: Add link to GCD docs. + * @param {string} ticketId + * @return {!Promise} + */ +remoting.gcd.Client.prototype.finalizeRegistrationTicket = function(ticketId) { + return new remoting.Xhr({ + method: 'POST', + url: this.apiBaseUrl_ + '/registrationTickets/' + + encodeURIComponent(ticketId) + '/finalize', + urlParams: { + 'key': this.apiKey_ + }, + acceptJson: true + }).start().then(function(response) { + if (response.isError()) { + console.error('error finalizing registration ticket'); + throw remoting.Error.unexpected(); + } + return responseAsGcdRegistrationTicket(response); + }); +}; + +/** + * Lists devices user has access to. + * TODO: Add link to GCD docs. + * @return {!Promise>} + */ +remoting.gcd.Client.prototype.listDevices = function() { + return new remoting.Xhr({ + method: 'GET', + url: this.apiBaseUrl_ + '/devices', + useIdentity: true, + acceptJson: true + }).start().then(function(response) { + if (response.isError()) { + console.error('error getting device list'); + throw remoting.Error.unexpected(); + } + var hosts = responseAsGcdDeviceListResponse(response); + return hosts.devices || []; + }); +}; + +/** + * Deletes a device from the system. + * TODO: Add link to GCD docs. + * @param {string} deviceId + * @return {!Promise} Promise that resolves to true if the + * device was deleted, false if there was no such device ID. + */ +remoting.gcd.Client.prototype.deleteDevice = function(deviceId) { + return new remoting.Xhr({ + method: 'DELETE', + url: this.apiBaseUrl_ + '/devices/' + deviceId, + useIdentity: true + }).start().then(function(response) { + if (response.status == 404) { + return false; + } + if (response.isError()) { + console.error('error deleting device'); + throw remoting.Error.unexpected(); + } + return true; + }); +}; + +/** + * Updates a device data using patch semantics. + * TODO: Add link to GCD docs. + * @param {string} deviceId + * @param {!Object<*>} patch + * @return {!Promise} + */ +remoting.gcd.Client.prototype.patchDevice = function(deviceId, patch) { + return new remoting.Xhr({ + method: 'PATCH', + url: this.apiBaseUrl_ + '/devices/' + deviceId, + jsonContent: patch, + useIdentity: true, + acceptJson: true + }).start().then(function(response) { + if (response.isError()) { + console.error('error patching device'); + throw remoting.Error.unexpected(); + } + return responseAsGcdDevice(response); + }); +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_host_list_api.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_host_list_api.js new file mode 100644 index 000000000000..449d013cdb4e --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gcd_host_list_api.js @@ -0,0 +1,182 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * REST API for host-list management. + */ + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @constructor + * @implements {remoting.HostListApi} + */ +remoting.GcdHostListApi = function() { + this.gcd_ = new remoting.gcd.Client({ + apiKey: remoting.settings.GOOGLE_API_KEY + }); +}; + +/** @override */ +remoting.GcdHostListApi.prototype.register = function( + hostName, publicKey, hostClientId) { + var self = this; + var deviceDraft = { + channel: { + supportedType: 'xmpp' + }, + deviceKind: 'vendor', + name: hostName, + state: { + base: { + firmwareVersion: 'none', + localDiscoveryEnabled: false, + localAnonymousAccessMaxRole: 'none', + localPairingEnabled: false, + // The leading underscore is necessary for |_publicKey| + // because it's not a standard key defined by GCD. + _publicKey: publicKey + } + }, + 'tags': [CHROMOTING_DEVICE_TAG] + }; + + return /** @type {!Promise} */ ( + this.gcd_.insertRegistrationTicket(). + then(function(ticket) { + return self.gcd_.patchRegistrationTicket( + ticket.id, deviceDraft, hostClientId); + }). + then(function(/**remoting.gcd.RegistrationTicket*/ ticket) { + return self.gcd_.finalizeRegistrationTicket(ticket.id); + }). + then(function(/**remoting.gcd.RegistrationTicket*/ ticket) { + return { + authCode: ticket.robotAccountAuthorizationCode, + email: ticket.robotAccountEmail, + hostId: ticket.deviceId + }; + }). + catch(function(error) { + console.error('Error registering device with GCD: ' + error); + throw new remoting.Error(remoting.Error.Tag.REGISTRATION_FAILED); + })); +}; + +/** @override */ +remoting.GcdHostListApi.prototype.get = function() { + return this.gcd_.listDevices(). + then(function(devices) { + var hosts = []; + devices.forEach(function(device) { + try { + if (isChromotingHost(device)) { + hosts.push(deviceToHost(device)); + } + } catch (/** @type {*} */ error) { + console.warn('Invalid device spec:', error); + } + }); + return hosts; + }); +}; + +/** @override */ +remoting.GcdHostListApi.prototype.put = + function(hostId, hostName, hostPublicKey) { + return this.gcd_.patchDevice(hostId, { + 'name': hostName + }).then(function(device) { + if (device.name != hostName) { + console.error('error updating host name'); + throw remoting.Error.unexpected(); + } + if (!device.state || device.state['_publicKey'] != hostPublicKey) { + // TODO(jrw): Is there any reason to believe this would ever be + // happen? + console.error('unexpected host public key'); + throw remoting.Error.unexpected(); + } + // Don't return anything. + }); +}; + +/** @override */ +remoting.GcdHostListApi.prototype.remove = function(hostId) { + return this.gcd_.deleteDevice(hostId).then(function(deleted) { + if (!deleted) { + console.error('error deleting host from GCD'); + throw remoting.Error.unexpected(); + } + // Don't return anything. + }); +}; + +/** @override */ +remoting.GcdHostListApi.prototype.getSupportHost = function(supportId) { + console.error('getSupportHost not supported by HostListApiGclImpl'); + return Promise.reject(remoting.Error.unexpected()); +}; + +/** + * Tag for distinguishing Chromoting hosts from other devices stored + * in GCD. + * + * @const + */ +var CHROMOTING_DEVICE_TAG = '1ce4542c-dd87-4320-ba19-ac173f98c04e'; + +/** + * Check whether a GCD device entry is a Chromoting host. + * + * @param {remoting.gcd.Device} device + * @return {boolean} + */ +function isChromotingHost(device) { + return device.tags != null && + device.tags.indexOf(CHROMOTING_DEVICE_TAG) != -1; +} + +/** + * Converts a GCD device description to a Host object. + * + * @param {!Object} device + * @return {!remoting.Host} + */ +function deviceToHost(device) { + var statusMap = { + 'online': 'ONLINE', + 'offline': 'OFFLINE' + }; + var hostId = base.getStringAttr(device, 'id'); + var host = new remoting.Host(hostId); + host.hostName = base.getStringAttr(device, 'name'); + host.status = base.getStringAttr( + statusMap, base.getStringAttr(device, 'connectionStatus')); + var state = base.getObjectAttr(device, 'state', {}); + var baseState = base.getObjectAttr(state, 'base', {}); + host.publicKey = base.getStringAttr(baseState, '_publicKey'); + host.jabberId = base.getStringAttr(baseState, '_jabberId', ''); + host.hostVersion = base.getStringAttr(baseState, '_hostVersion', ''); + host.hostOs = remoting.ChromotingEvent.toOs( + base.getStringAttr(baseState, '_hostOs', '')); + host.hostOsVersion = base.getStringAttr(baseState, '_hostOsVersion', ''); + var creationTimeMs = base.getNumberAttr(device, 'creationTimeMs', 0); + if (creationTimeMs) { + host.createdTime = new Date(creationTimeMs).toISOString(); + } + var lastUpdateTimeMs = base.getNumberAttr(device, 'lastUpdateTimeMs', 0); + if (lastUpdateTimeMs) { + host.updatedTime = new Date(lastUpdateTimeMs).toISOString(); + } + return host; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gnubby_auth_handler.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gnubby_auth_handler.js new file mode 100644 index 000000000000..a8cb83454708 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/gnubby_auth_handler.js @@ -0,0 +1,177 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class that routes gnubby-auth extension messages to and from the gnubbyd + * extension. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + * @implements {remoting.ProtocolExtension} + */ +remoting.GnubbyAuthHandler = function() { + /** @private {?function(string,string)} */ + this.sendMessageToHostCallback_ = null; + + /** @private {string} */ + this.gnubbyExtensionId_ = ''; + + /** @private {Promise} */ + this.gnubbyExtensionPromise_ = null; +}; + +/** @private @const {string} */ +remoting.GnubbyAuthHandler.EXTENSION_TYPE = 'gnubby-auth'; + +/** @private @const {string} */ +remoting.GnubbyAuthHandler.GNUBBY_DEV_EXTENSION_ID = + 'dlfcjilkjfhdnfiecknlnddkmmiofjbg'; + +/** @private @const {string} */ +remoting.GnubbyAuthHandler.GNUBBY_STABLE_EXTENSION_ID = + 'beknehfpfkghjoafdifaflglpjkojoco'; + +/** + * Determines whether any supported Gnubby extensions are installed. + * + * @return {Promise} Promise that resolves after we have either found + * an extension or checked for the known extensions IDs without success. + * Returns true if an applicable gnubby extension was found. + */ +remoting.GnubbyAuthHandler.prototype.isGnubbyExtensionInstalled = function() { + if (this.gnubbyExtensionPromise_) { + return this.gnubbyExtensionPromise_; + } + + var findGnubbyExtension = function(extensionId, resolve, reject) { + var message_callback = function(response) { + if (response) { + this.gnubbyExtensionId_ = extensionId; + resolve(true); + } else { + reject(); + } + }.bind(this) + + chrome.runtime.sendMessage(extensionId, "HELLO", message_callback); + } + + var findDevGnubbyExtension = findGnubbyExtension.bind(this, + remoting.GnubbyAuthHandler.GNUBBY_DEV_EXTENSION_ID) + + var findStableGnubbyExtension = findGnubbyExtension.bind(this, + remoting.GnubbyAuthHandler.GNUBBY_STABLE_EXTENSION_ID) + + this.gnubbyExtensionPromise_ = new Promise( + findStableGnubbyExtension + ).catch(function () { + return new Promise(findDevGnubbyExtension); + } + ).catch(function () { + // If no extensions are found, return false. + return Promise.resolve(false); + } + ); + + return this.gnubbyExtensionPromise_; +}; + +/** @override @return {Array} */ +remoting.GnubbyAuthHandler.prototype.getExtensionTypes = function() { + return [remoting.GnubbyAuthHandler.EXTENSION_TYPE]; +}; + +/** + * @param {function(string,string)} sendMessageToHost Callback to send a message + * to the host. + */ +remoting.GnubbyAuthHandler.prototype.startExtension = + function(sendMessageToHost) { + this.sendMessageToHostCallback_ = sendMessageToHost; + + this.sendMessageToHost_({ + 'type': 'control', + 'option': 'auth-v1' + }); +}; + +/** + * @param {Object} data The data to send. + * @private + */ +remoting.GnubbyAuthHandler.prototype.sendMessageToHost_ = function(data) { + this.sendMessageToHostCallback_(remoting.GnubbyAuthHandler.EXTENSION_TYPE, + JSON.stringify(data)); +} + +/** + * Processes gnubby-auth messages. + * + * @param {string} type The message type. + * @param {Object} message The parsed extension message data. + * @return {boolean} True if the extension message was handled. + */ +remoting.GnubbyAuthHandler.prototype.onExtensionMessage = + function(type, message) { + var messageType = base.getStringAttr(message, 'type'); + if (messageType == 'data') { + this.sendMessageToGnubbyd_({ + 'type': 'auth-agent@openssh.com', + 'data': base.getArrayAttr(message, 'data') + }, this.callback_.bind(this, base.getNumberAttr(message, 'connectionId'))); + } else { + console.error('Invalid gnubby-auth message: ' + messageType); + return false; + } + return true; +}; + +/** + * Callback invoked with data to be returned to the host. + * @param {number} connectionId The connection id. + * @param {Object} response The JSON response with the data to send to the host. + * @private + */ +remoting.GnubbyAuthHandler.prototype.callback_ = + function(connectionId, response) { + try { + this.sendMessageToHost_({ + 'type': 'data', + 'connectionId': connectionId, + 'data': base.getArrayAttr(response, 'data') + }); + } catch (/** @type {*} */ err) { + console.error('gnubby callback failed: ', err); + this.sendMessageToHost_({ + 'type': 'error', + 'connectionId': connectionId + }); + return; + } +}; + +/** + * Send data to the installed gnubbyd extension. + * @param {Object} jsonObject The JSON object to send to the gnubbyd extension. + * @param {function(Object)} callback The callback to invoke with reply data. + * @private + */ +remoting.GnubbyAuthHandler.prototype.sendMessageToGnubbyd_ = + function(jsonObject, callback) { + this.isGnubbyExtensionInstalled().then( + function (extensionInstalled) { + if (extensionInstalled) { + chrome.runtime.sendMessage( + this.gnubbyExtensionId_, jsonObject, callback); + } + }.bind(this) + ); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host.js new file mode 100644 index 000000000000..2b59edc0b241 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host.js @@ -0,0 +1,81 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * The deserialized form of the chromoting host as returned by Apiary. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @param {!string} hostId + * + * TODO(kelvinp):Make fields private and expose them via getters. + * @constructor + */ +remoting.Host = function(hostId) { + /** @const {string} */ + this.hostId = hostId; + /** @type {string} */ + this.hostName = ''; + /** + * Either 'ONLINE' or 'OFFLINE'. + * @type {string} + */ + this.status = ''; + /** @type {string} */ + this.jabberId = ''; + /** @type {string} */ + this.publicKey = ''; + /** @type {string} */ + this.hostVersion = ''; + /** @type {remoting.ChromotingEvent.Os} */ + this.hostOs = remoting.ChromotingEvent.Os.OTHER; + /** @type {string} */ + this.hostOsVersion = ''; + /** @type {Array} */ + this.tokenUrlPatterns = []; + /** @type {string} */ + this.updatedTime = ''; + /** @type {string} */ + this.hostOfflineReason = ''; + /** @type {remoting.HostOptions} */ + this.options = new remoting.HostOptions(hostId); +}; + +/** + * Determine whether a host needs to be manually updated. This is the case if + * the host's major version number is more than 2 lower than that of the web- + * app (a difference of 2 is tolerated due to the different update mechanisms + * and to handle cases where we may skip releasing a version) and if the host is + * on-line (off-line hosts are not expected to auto-update). + * + * @param {remoting.Host} host The host information from the directory. + * @param {string|number} webappVersion The version number of the web-app, in + * either dotted-decimal notation notation, or directly represented by the + * major version. + * @return {boolean} True if the host is on-line but out-of-date. + */ +remoting.Host.needsUpdate = function(host, webappVersion) { + if (host.status != 'ONLINE') { + return false; + } + var hostMajorVersion = parseInt(host.hostVersion, 10); + if (isNaN(hostMajorVersion)) { + // Host versions 26 and higher include the version number in heartbeats, + // so if it's missing then the host is at most version 25. + hostMajorVersion = 25; + } + return (parseInt(webappVersion, 10) - hostMajorVersion) > 2; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_controller.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_controller.js new file mode 100644 index 000000000000..42f55d150a00 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_controller.js @@ -0,0 +1,500 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** @constructor */ +remoting.HostController = function() { + /** @type {remoting.HostDaemonFacade} @private */ + this.hostDaemonFacade_ = new remoting.HostDaemonFacade(); + + /** @param {string} version */ + var printVersion = function(version) { + if (version == '') { + console.log('Host not installed.'); + } else { + console.log('Host version: ' + version); + } + }; + + this.getLocalHostVersion() + .then(printVersion) + .catch(function() { + console.log('Host version not available.'); + }); +}; + +// The values in the enums below are duplicated in daemon_controller.h except +// for NOT_INSTALLED. +/** @enum {number} */ +remoting.HostController.State = { + NOT_IMPLEMENTED: 0, + NOT_INSTALLED: 1, + STOPPED: 2, + STARTING: 3, + STARTED: 4, + STOPPING: 5, + UNKNOWN: 6 +}; + +/** + * @param {string} state The host controller state name. + * @return {remoting.HostController.State} The state enum value. + */ +remoting.HostController.State.fromString = function(state) { + if (!remoting.HostController.State.hasOwnProperty(state)) { + throw "Invalid HostController.State: " + state; + } + return remoting.HostController.State[state]; +} + +/** @enum {number} */ +remoting.HostController.AsyncResult = { + OK: 0, + FAILED: 1, + CANCELLED: 2 +}; + +/** + * @param {string} result The async result name. + * @return {remoting.HostController.AsyncResult} The result enum value. + */ +remoting.HostController.AsyncResult.fromString = function(result) { + if (!remoting.HostController.AsyncResult.hasOwnProperty(result)) { + throw "Invalid HostController.AsyncResult: " + result; + } + return remoting.HostController.AsyncResult[result]; +} + +/** + * Set of features for which hasFeature() can be used to test. + * + * @enum {string} + */ +remoting.HostController.Feature = { + PAIRING_REGISTRY: 'pairingRegistry', + OAUTH_CLIENT: 'oauthClient' +}; + +/** + * Information relating to user consent to collect usage stats. The + * fields are: + * + * supported: True if crash dump reporting is supported by the host. + * + * allowed: True if crash dump reporting is allowed. + * + * setByPolicy: True if crash dump reporting is controlled by policy. + * + * @typedef {{ + * supported:boolean, + * allowed:boolean, + * setByPolicy:boolean + * }} + */ +remoting.UsageStatsConsent; + +/** + * @typedef {{ + * userEmail:string, + * refreshToken:string + * }} + */ +remoting.XmppCredentials; + +/** + * @typedef {{ + * privateKey:string, + * publicKey:string + * }} + */ +remoting.KeyPair; + +/** + * @param {remoting.HostController.Feature} feature The feature to test for. + * @return {!Promise} A promise that always resolves. + */ +remoting.HostController.prototype.hasFeature = function(feature) { + // TODO(rmsousa): This could synchronously return a boolean, provided it were + // only called after native messaging is completely initialized. + return this.hostDaemonFacade_.hasFeature(feature); +}; + +/** + * @return {!Promise} + */ +remoting.HostController.prototype.getConsent = function() { + return this.hostDaemonFacade_.getUsageStatsConsent(); +}; + +/** + * Registers and starts the host. + * + * @param {string} hostPin Host PIN. + * @param {boolean} consent The user's consent to crash dump reporting. + * @return {!Promise} A promise resolved once the host is started. + */ +remoting.HostController.prototype.start = function(hostPin, consent) { + /** @type {remoting.HostController} */ + var that = this; + + // Start a bunch of requests with no side-effects. + var hostNamePromise = this.hostDaemonFacade_.getHostName(); + var hasOauthPromise = + this.hasFeature(remoting.HostController.Feature.OAUTH_CLIENT); + var keyPairPromise = this.hostDaemonFacade_.generateKeyPair(); + var hostClientIdPromise = hasOauthPromise.then(function(hasOauth) { + if (hasOauth) { + return that.hostDaemonFacade_.getHostClientId(); + } else { + return null; + } + }); + var hostOwnerPromise = this.getClientBaseJid_(); + + // Register the host and extract an auth code from the host response + // and, optionally an email address for the robot account. + /** @type {!Promise} */ + var registerResultPromise = Promise.all([ + hostClientIdPromise, + hostNamePromise, + keyPairPromise + ]).then(function(/** Array */ a) { + var hostClientId = /** @type {string} */ (a[0]); + var hostName = /** @type {string} */ (a[1]); + var keyPair = /** @type {remoting.KeyPair} */ (a[2]); + + return remoting.HostListApi.getInstance().register( + hostName, keyPair.publicKey, hostClientId); + }); + + // For convenience, make the host ID available as a separate promise. + /** @type {!Promise} */ + var hostIdPromise = registerResultPromise.then(function(registerResult) { + return registerResult.hostId; + }); + + // Get the PIN hash based on the host ID. + /** @type {!Promise} */ + var pinHashPromise = hostIdPromise.then(function(hostId) { + return that.hostDaemonFacade_.getPinHash(hostId, hostPin); + }); + + // Get XMPP creditials. + var xmppCredsPromise = registerResultPromise.then(function(registerResult) { + console.assert(registerResult.authCode != '', '|authCode| is empty.'); + if (registerResult.email) { + // Use auth code and email supplied by GCD. + return that.hostDaemonFacade_.getRefreshTokenFromAuthCode( + registerResult.authCode).then(function(token) { + return { + userEmail: registerResult.email, + refreshToken: token + }; + }); + } else { + // Use auth code supplied by Chromoting registry. + return that.hostDaemonFacade_.getCredentialsFromAuthCode( + registerResult.authCode); + } + }); + + // Build the host configuration. + /** @type {!Promise} */ + var hostConfigPromise = Promise.all([ + hostNamePromise, + pinHashPromise, + xmppCredsPromise, + keyPairPromise, + hostOwnerPromise, + remoting.identity.getEmail(), + registerResultPromise + ]).then(function(/** Array */ a) { + var hostName = /** @type {string} */ (a[0]); + var hostSecretHash = /** @type {string} */ (a[1]); + var xmppCreds = /** @type {remoting.XmppCredentials} */ (a[2]); + var keyPair = /** @type {remoting.KeyPair} */ (a[3]); + var hostOwner = /** @type {string} */ (a[4]); + var hostOwnerEmail = /** @type {string} */ (a[5]); + var registerResult = + /** @type {remoting.HostListApi.RegisterResult} */ (a[6]); + var hostConfig = { + xmpp_login: xmppCreds.userEmail, + oauth_refresh_token: xmppCreds.refreshToken, + host_name: hostName, + host_secret_hash: hostSecretHash, + private_key: keyPair.privateKey, + host_owner: hostOwner + }; + if (hostOwnerEmail != hostOwner) { + hostConfig['host_owner_email'] = hostOwnerEmail; + } + hostConfig['host_id'] = registerResult.hostId; + return hostConfig; + }); + + // Start the daemon. + /** @type {!Promise} */ + var startDaemonResultPromise = + hostConfigPromise.then(function(hostConfig) { + return that.hostDaemonFacade_.startDaemon(hostConfig, consent); + }); + + // Update the UI or report an error. + return hostIdPromise.then(function(hostId) { + return startDaemonResultPromise.then(function(result) { + if (result == remoting.HostController.AsyncResult.OK) { + return hostNamePromise.then(function(hostName) { + return keyPairPromise.then(function(keyPair) { + remoting.hostList.onLocalHostStarted( + hostName, hostId, keyPair.publicKey); + }); + }); + } else if (result == remoting.HostController.AsyncResult.CANCELLED) { + throw new remoting.Error(remoting.Error.Tag.CANCELLED); + } else { + throw remoting.Error.unexpected(); + } + }).catch(function(error) { + remoting.hostList.unregisterHostById(hostId); + throw error; + }); + }); +}; + +/** + * Stop the daemon process. + * @param {function():void} onDone Callback to be called when done. + * @param {function(!remoting.Error):void} onError Callback to be called on + * error. + * @return {void} Nothing. + */ +remoting.HostController.prototype.stop = function(onDone, onError) { + /** @type {remoting.HostController} */ + var that = this; + + /** @param {string?} hostId The host id of the local host. */ + function unregisterHost(hostId) { + if (hostId) { + remoting.hostList.unregisterHostById(hostId, onDone); + return; + } + onDone(); + } + + /** @param {remoting.HostController.AsyncResult} result */ + function onStopped(result) { + if (result == remoting.HostController.AsyncResult.OK) { + that.getLocalHostId(unregisterHost); + } else if (result == remoting.HostController.AsyncResult.CANCELLED) { + onError(new remoting.Error(remoting.Error.Tag.CANCELLED)); + } else { + onError(remoting.Error.unexpected()); + } + } + + this.hostDaemonFacade_.stopDaemon().then( + onStopped, remoting.Error.handler(onError)); +}; + +/** + * Check the host configuration is valid (non-null, and contains both host_id + * and xmpp_login keys). + * @param {Object} config The host configuration. + * @return {boolean} True if it is valid. + */ +function isHostConfigValid_(config) { + return !!config && typeof config['host_id'] == 'string' && + typeof config['xmpp_login'] == 'string'; +} + +/** + * @param {string} newPin The new PIN to set + * @param {function():void} onDone Callback to be called when done. + * @param {function(!remoting.Error):void} onError Callback to be called on + * error. + * @return {void} Nothing. + */ +remoting.HostController.prototype.updatePin = function(newPin, onDone, + onError) { + /** @type {remoting.HostController} */ + var that = this; + + /** @param {remoting.HostController.AsyncResult} result */ + function onConfigUpdated(result) { + if (result == remoting.HostController.AsyncResult.OK) { + that.clearPairedClients(onDone, onError); + } else if (result == remoting.HostController.AsyncResult.CANCELLED) { + onError(new remoting.Error(remoting.Error.Tag.CANCELLED)); + } else { + onError(remoting.Error.unexpected()); + } + } + + /** @param {string} pinHash */ + function updateDaemonConfigWithHash(pinHash) { + var newConfig = { + host_secret_hash: pinHash + }; + that.hostDaemonFacade_.updateDaemonConfig(newConfig).then( + onConfigUpdated, remoting.Error.handler(onError)); + } + + /** @param {Object} config */ + function onConfig(config) { + if (!isHostConfigValid_(config)) { + onError(remoting.Error.unexpected()); + return; + } + /** @type {string} */ + var hostId = base.getStringAttr(config, 'host_id'); + that.hostDaemonFacade_.getPinHash(hostId, newPin).then( + updateDaemonConfigWithHash, remoting.Error.handler(onError)); + } + + // TODO(sergeyu): When crbug.com/121518 is fixed: replace this call + // with an unprivileged version if that is necessary. + this.hostDaemonFacade_.getDaemonConfig().then( + onConfig, remoting.Error.handler(onError)); +}; + +/** + * Get the state of the local host. + * + * @param {function(remoting.HostController.State):void} onDone Completion + * callback. + */ +remoting.HostController.prototype.getLocalHostState = function(onDone) { + /** @param {!remoting.Error} error */ + function onError(error) { + onDone((error.hasTag(remoting.Error.Tag.MISSING_PLUGIN)) ? + remoting.HostController.State.NOT_INSTALLED : + remoting.HostController.State.UNKNOWN); + } + this.hostDaemonFacade_.getDaemonState().then( + onDone, remoting.Error.handler(onError)); +}; + +/** + * Get the id of the local host, or null if it is not registered. + * + * @param {function(string?):void} onDone Completion callback. + */ +remoting.HostController.prototype.getLocalHostId = function(onDone) { + /** @type {remoting.HostController} */ + var that = this; + /** @param {Object} config */ + function onConfig(config) { + var hostId = null; + if (isHostConfigValid_(config)) { + hostId = base.getStringAttr(config, 'host_id'); + } + onDone(hostId); + }; + + this.hostDaemonFacade_.getDaemonConfig().then(onConfig, function(error) { + onDone(null); + }); +}; + +/** + * @return {Promise} Promise that resolves with the host version, if + * installed, or rejects otherwise. + */ +remoting.HostController.prototype.getLocalHostVersion = function() { + return this.hostDaemonFacade_.getDaemonVersion(); +}; + +/** + * Fetch the list of paired clients for this host. + * + * @param {function(Array):void} onDone + * @param {function(!remoting.Error):void} onError + * @return {void} + */ +remoting.HostController.prototype.getPairedClients = function(onDone, + onError) { + this.hostDaemonFacade_.getPairedClients().then( + onDone, remoting.Error.handler(onError)); +}; + +/** + * Delete a single paired client. + * + * @param {string} client The client id of the pairing to delete. + * @param {function():void} onDone Completion callback. + * @param {function(!remoting.Error):void} onError Error callback. + * @return {void} + */ +remoting.HostController.prototype.deletePairedClient = function( + client, onDone, onError) { + this.hostDaemonFacade_.deletePairedClient(client).then( + onDone, remoting.Error.handler(onError)); +}; + +/** + * Delete all paired clients. + * + * @param {function():void} onDone Completion callback. + * @param {function(!remoting.Error):void} onError Error callback. + * @return {void} + */ +remoting.HostController.prototype.clearPairedClients = function( + onDone, onError) { + this.hostDaemonFacade_.clearPairedClients().then( + onDone, remoting.Error.handler(onError)); +}; + +/** + * Gets the host owner's base JID, used by the host for client authorization. + * In most cases this is the same as the owner's email address, but for + * non-Gmail accounts, it may be different. + * + * @private + * @return {!Promise} + */ +remoting.HostController.prototype.getClientBaseJid_ = function() { + /** @type {remoting.SignalStrategy} */ + var signalStrategy = null; + + var result = new Promise(function(resolve, reject) { + /** @param {remoting.SignalStrategy.State} state */ + var onState = function(state) { + switch (state) { + case remoting.SignalStrategy.State.CONNECTED: + var jid = signalStrategy.getJid().split('/')[0].toLowerCase(); + base.dispose(signalStrategy); + signalStrategy = null; + resolve(jid); + break; + + case remoting.SignalStrategy.State.FAILED: + var error = signalStrategy.getError(); + base.dispose(signalStrategy); + signalStrategy = null; + reject(error); + break; + } + }; + + signalStrategy = remoting.SignalStrategy.create(); + signalStrategy.setStateChangedCallback(onState); + }); + + var tokenPromise = remoting.identity.getToken(); + var emailPromise = remoting.identity.getEmail(); + tokenPromise.then(function(/** string */ token) { + emailPromise.then(function(/** string */ email) { + signalStrategy.connect(remoting.settings.XMPP_SERVER, email, token); + }); + }); + + return result; +}; + +/** @type {remoting.HostController} */ +remoting.hostController = null; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_daemon_facade.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_daemon_facade.js new file mode 100644 index 000000000000..62ae4ee2f79e --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_daemon_facade.js @@ -0,0 +1,495 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class to communicate with the host daemon via Native Messaging. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * @constructor + */ +remoting.HostDaemonFacade = function() { + /** @private {number} */ + this.nextId_ = 0; + + /** @private {Object} */ + this.pendingReplies_ = {}; + + /** @private {?Port} */ + this.port_ = null; + + /** @private {string} */ + this.version_ = ''; + + /** @private {Array} */ + this.supportedFeatures_ = []; + + /** @private {Array} */ + this.afterInitializationTasks_ = []; + + /** + * A promise that fulfills when the daemon finishes initializing. + * It will be set to null when the promise fulfills. + * @private {Promise} + */ + this.initializingPromise_ = null; + + /** @private {!remoting.Error} */ + this.error_ = remoting.Error.none(); + + /** @private */ + this.onIncomingMessageCallback_ = this.onIncomingMessage_.bind(this); + + /** @private */ + this.onDisconnectCallback_ = this.onDisconnect_.bind(this); + + /** @private */ + this.debugMessageHandler_ = + new remoting.NativeMessageHostDebugMessageHandler(); + + this.initialize_(); +}; + +/** + * @return {Promise} A promise that fulfills when the daemon finishes + * initializing + * @private + */ +remoting.HostDaemonFacade.prototype.initialize_ = function() { + if (!this.initializingPromise_) { + if (this.port_) { + return Promise.resolve(); + } + + /** @type {remoting.HostDaemonFacade} */ + var that = this; + this.initializingPromise_ = this.connectNative_().then(function() { + that.initializingPromise_ = null; + }, function() { + that.initializingPromise_ = null; + throw new Error(that.error_); + }); + } + return this.initializingPromise_; +}; + +/** + * Connects to the native messaging host and sends a hello message. + * + * @return {Promise} A promise that fulfills when the connection attempt + * succeeds or fails. + * @private + */ +remoting.HostDaemonFacade.prototype.connectNative_ = function() { + var that = this; + try { + this.port_ = chrome.runtime.connectNative( + 'com.google.chrome.remote_desktop'); + this.port_.onMessage.addListener(this.onIncomingMessageCallback_); + this.port_.onDisconnect.addListener(this.onDisconnectCallback_); + return this.postMessageInternal_({type: 'hello'}).then(function(reply) { + that.version_ = base.getStringAttr(reply, 'version'); + // Old versions of the native messaging host do not return this list. + // Those versions default to the empty list of supported features. + that.supportedFeatures_ = + base.getArrayAttr(reply, 'supportedFeatures', []); + }); + } catch (/** @type {*} */ err) { + console.log('Native Messaging initialization failed: ', err); + throw remoting.Error.unexpected(); + } +}; + +/** + * Type used for entries of |pendingReplies_| list. + * + * @param {string} type Type of the originating request. + * @param {!base.Deferred} deferred Used to communicate returns back + * to the caller. + * @constructor + */ +remoting.HostDaemonFacade.PendingReply = function(type, deferred) { + /** @const */ + this.type = type; + + /** @const */ + this.deferred = deferred; +}; + +/** + * @param {remoting.HostController.Feature} feature The feature to test for. + * @return {!Promise} True if the implementation supports the + * named feature. + */ +remoting.HostDaemonFacade.prototype.hasFeature = function(feature) { + /** @type {remoting.HostDaemonFacade} */ + var that = this; + return this.initialize_().then(function() { + return that.supportedFeatures_.indexOf(feature) >= 0; + }, function () { + return false; + }); +}; + +/** + * Initializes that the Daemon if necessary and posts the supplied message. + * + * @param {{type: string}} message The message to post. + * @return {!Promise} + * @private + */ +remoting.HostDaemonFacade.prototype.postMessage_ = + function(message) { + /** @type {remoting.HostDaemonFacade} */ + var that = this; + return this.initialize_().then(function() { + return that.postMessageInternal_(message); + }, function() { + throw that.error_; + }); +}; + +/** + * Attaches a new ID to the supplied message, and posts it to the + * Native Messaging port, adding a Deferred object to the list of + * pending replies. |message| should have its 'type' field set, and + * any other fields set depending on the message type. + * + * @param {{type: string}} message The message to post. + * @return {!Promise} + * @private + */ +remoting.HostDaemonFacade.prototype.postMessageInternal_ = function(message) { + var id = this.nextId_++; + message['id'] = id; + var deferred = new base.Deferred(); + this.pendingReplies_[id] = new remoting.HostDaemonFacade.PendingReply( + message.type + 'Response', deferred); + this.port_.postMessage(message); + return deferred.promise(); +}; + +/** + * Handler for incoming Native Messages. + * + * @param {Object} message The received message. + * @return {void} Nothing. + * @private + */ +remoting.HostDaemonFacade.prototype.onIncomingMessage_ = function(message) { + if (this.debugMessageHandler_.handleMessage(message)) { + return; + } + + /** @type {number} */ + var id = message['id']; + if (typeof(id) != 'number') { + console.error('NativeMessaging: missing or non-numeric id'); + return; + } + var reply = this.pendingReplies_[id]; + if (!reply) { + console.error('NativeMessaging: unexpected id: ', id); + return; + } + delete this.pendingReplies_[id]; + + try { + var type = base.getStringAttr(message, 'type'); + if (type != reply.type) { + throw 'Expected reply type: ' + reply.type + ', got: ' + type; + } + reply.deferred.resolve(message); + } catch (/** @type {*} */ e) { + console.error('Error while processing native message', e); + reply.deferred.reject(remoting.Error.unexpected()); + } +}; + +/** + * @return {void} Nothing. + * @private + */ +remoting.HostDaemonFacade.prototype.onDisconnect_ = function() { + console.error('Native Message port disconnected'); + + this.port_.onDisconnect.removeListener(this.onDisconnectCallback_); + this.port_.onMessage.removeListener(this.onIncomingMessageCallback_); + this.port_ = null; + + // If initialization hasn't finished then assume that the port was + // disconnected because Native Messaging host is not installed. + this.error_ = this.initializingPromise_ ? + new remoting.Error(remoting.Error.Tag.MISSING_PLUGIN) : + remoting.Error.unexpected(); + + // Notify the error-handlers of any requests that are still outstanding. + var pendingReplies = this.pendingReplies_; + this.pendingReplies_ = {}; + for (var id in pendingReplies) { + var num_id = parseInt(id, 10); + pendingReplies[num_id].deferred.reject(this.error_); + } +} + +/** + * Gets local hostname. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getHostName = function() { + return this.postMessage_({type: 'getHostName'}).then(function(reply) { + return base.getStringAttr(reply, 'hostname'); + }); +}; + +/** + * Calculates PIN hash value to be stored in the config, passing the resulting + * hash value base64-encoded to the callback. + * + * @param {string} hostId The host ID. + * @param {string} pin The PIN. + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getPinHash = function(hostId, pin) { + return this.postMessage_({ + type: 'getPinHash', + hostId: hostId, + pin: pin + }).then(function(reply) { + return base.getStringAttr(reply, 'hash'); + }); +}; + +/** + * Generates new key pair to use for the host. The specified callback is called + * when the key is generated. The key is returned in format understood by the + * host (PublicKeyInfo structure encoded with ASN.1 DER, and then BASE64). + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.generateKeyPair = function() { + return this.postMessage_({type: 'generateKeyPair'}).then(function(reply) { + return { + privateKey: base.getStringAttr(reply, 'privateKey'), + publicKey: base.getStringAttr(reply, 'publicKey') + }; + }); +}; + +/** + * Updates host config with the values specified in |config|. All + * fields that are not specified in |config| remain + * unchanged. Following parameters cannot be changed using this + * function: host_id, xmpp_login. Error is returned if |config| + * includes these parameters. Changes take effect before the callback + * is called. + * + * TODO(jrw): Consider conversion exceptions to AsyncResult values. + * + * @param {Object} config The new config parameters. + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.updateDaemonConfig = function(config) { + return this.postMessage_({ + type: 'updateDaemonConfig', + config: config + }).then(function(reply) { + return remoting.HostController.AsyncResult.fromString( + base.getStringAttr(reply, 'result')); + }); +}; + +/** + * Loads daemon config. The config is passed as a JSON formatted string to the + * callback. + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getDaemonConfig = function() { + return this.postMessage_({type: 'getDaemonConfig'}).then(function(reply) { + return base.getObjectAttr(reply, 'config'); + }); +}; + +/** + * Retrieves daemon version. The version is returned as a dotted decimal + * string of the form major.minor.build.patch. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getDaemonVersion = function() { + /** @type {remoting.HostDaemonFacade} */ + var that = this; + return this.initialize_().then(function() { + return that.version_; + }, function() { + throw that.error_; + }); +}; + +/** + * Get the user's consent to crash reporting. The consent flags are passed to + * the callback as booleans: supported, allowed, set-by-policy. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getUsageStatsConsent = function() { + return this.postMessage_({type: 'getUsageStatsConsent'}). + then(function(reply) { + return { + supported: base.getBooleanAttr(reply, 'supported'), + allowed: base.getBooleanAttr(reply, 'allowed'), + setByPolicy: base.getBooleanAttr(reply, 'setByPolicy') + }; + }); +}; + +/** + * Starts the daemon process with the specified configuration. + * + * TODO(jrw): Consider conversion exceptions to AsyncResult values. + * + * @param {Object} config Host configuration. + * @param {boolean} consent Consent to report crash dumps. + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.startDaemon = function(config, consent) { + return this.postMessage_({ + type: 'startDaemon', + config: config, + consent: consent + }).then(function(reply) { + return remoting.HostController.AsyncResult.fromString( + base.getStringAttr(reply, 'result')); + }); +}; + +/** + * Stops the daemon process. + * + * TODO(jrw): Consider conversion exceptions to AsyncResult values. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.stopDaemon = + function() { + return this.postMessage_({type: 'stopDaemon'}).then(function(reply) { + return remoting.HostController.AsyncResult.fromString( + base.getStringAttr(reply, 'result')); + }); +}; + +/** + * Gets the installed/running state of the Host process. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getDaemonState = function() { + return this.postMessage_({type: 'getDaemonState'}).then(function(reply) { + return remoting.HostController.State.fromString( + base.getStringAttr(reply, 'state')); + }); +}; + +/** + * Retrieves the list of paired clients. + * + * @return {!Promise>} + */ +remoting.HostDaemonFacade.prototype.getPairedClients = function() { + return this.postMessage_({type: 'getPairedClients'}).then(function(reply) { + var pairedClients =remoting.PairedClient.convertToPairedClientArray( + reply['pairedClients']); + if (pairedClients != null) { + return pairedClients; + } else { + throw remoting.Error.unexpected('No paired clients!'); + } + }); +}; + +/** + * Clears all paired clients from the registry. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.clearPairedClients = function() { + return this.postMessage_({type: 'clearPairedClients'}).then(function(reply) { + return base.getBooleanAttr(reply, 'result'); + }); +}; + +/** + * Deletes a paired client referenced by client id. + * + * @param {string} client Client to delete. + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.deletePairedClient = function(client) { + return this.postMessage_({ + type: 'deletePairedClient', + clientId: client + }).then(function(reply) { + return base.getBooleanAttr(reply, 'result'); + }); +}; + +/** + * Gets the API keys to obtain/use service account credentials. + * + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getHostClientId = function() { + return this.postMessage_({type: 'getHostClientId'}).then(function(reply) { + return base.getStringAttr(reply, 'clientId'); + }); +}; + +/** + * @param {string} authorizationCode OAuth authorization code. + * @return {!Promise<{remoting.XmppCredentials}>} + */ +remoting.HostDaemonFacade.prototype.getCredentialsFromAuthCode = + function(authorizationCode) { + return this.postMessage_({ + type: 'getCredentialsFromAuthCode', + authorizationCode: authorizationCode + }).then(function(reply) { + var userEmail = base.getStringAttr(reply, 'userEmail'); + var refreshToken = base.getStringAttr(reply, 'refreshToken'); + if (userEmail && refreshToken) { + return { + userEmail: userEmail, + refreshToken: refreshToken + }; + } else { + throw remoting.Error.unexpected('Missing userEmail or refreshToken'); + } + }); +}; + +/** + * @param {string} authorizationCode OAuth authorization code. + * @return {!Promise} + */ +remoting.HostDaemonFacade.prototype.getRefreshTokenFromAuthCode = + function(authorizationCode) { + return this.postMessage_({ + type: 'getRefreshTokenFromAuthCode', + authorizationCode: authorizationCode + }).then(function(reply) { + var refreshToken = base.getStringAttr(reply, 'refreshToken'); + if (refreshToken) { + return refreshToken + } else { + throw remoting.Error.unexpected('Missing refreshToken'); + } + }); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_desktop.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_desktop.js new file mode 100644 index 000000000000..942c08595652 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_desktop.js @@ -0,0 +1,44 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Interface abstracting the functionality of the HostDesktop. + */ + +var remoting = remoting || {}; + +(function() { + +'use strict'; + +/** + * @interface + * @extends {base.EventSource} + */ +remoting.HostDesktop = function() {}; + +/** @enum {string} */ +remoting.HostDesktop.Events = { + // Fired when the size of the host desktop changes with the desktop dimensions + // {{width:number, height:number, xDpi:number, yDpi:number}} + sizeChanged: 'sizeChanged', +}; + +/** + * @return {{width:number, height:number, xDpi:number, yDpi:number}} + * The dimensions and DPI settings of the host desktop. + */ +remoting.HostDesktop.prototype.getDimensions = function() {}; + +/** + * Resize the desktop of the host to |width|, |height| and |deviceScale|. + * + * @param {number} width The width of the desktop in DIPs. + * @param {number} height The height of the desktop in DIPs. + * @param {number} deviceScale + */ +remoting.HostDesktop.prototype.resize = function(width, height, deviceScale) {}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_install_dialog.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_install_dialog.js new file mode 100644 index 000000000000..6754f02f51f8 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_install_dialog.js @@ -0,0 +1,175 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * HostInstallDialog prompts the user to accept Google ToS and install host + * components. It has (up to) three stages: + * + * 1. When show() is called, it prompts the user to accept Google's ToS. If + * the user declines, it calls the onError callback with reason CANCELED. + * 2. If the user accepts, it starts downloading the host installer and shows + * a prompt asking the user to continue. If the user cancels at this point, + * if calls the onError callback with reason CANCELED. + * 3. If the user clicks OK, it calls the onDone callback. This callback should + * check whether or not the host is actually installed, and call tryAgain() + * if it is not. This will show a reminder to the user that they need to run + * the downloaded installer. + * + * @constructor + */ +remoting.HostInstallDialog = function() { + /** @private */ + this.acceptTosButton_ = document.getElementById('host-install-tos-accept'); + /** @private */ + this.rejectTosButton_ = document.getElementById('host-install-tos-reject'); + /** @private */ + this.continueInstallButton_ = document.getElementById( + 'host-install-continue'); + /** @private */ + this.cancelInstallButton_ = document.getElementById('host-install-dismiss'); + /** @private */ + this.retryInstallButton_ = document.getElementById('host-install-retry'); + /** @private */ + this.tosMessage_ = document.getElementById('tos-message'); + + /** @private {base.Disposables} */ + this.handlers_ = null; + + /** @private {function():void} */ + this.onDoneHandler_ = function() {}; + + /** @private {function(!remoting.Error):void} */ + this.onErrorHandler_ = function(error) {}; + + /** @private {remoting.HostInstaller} */ + this.hostInstaller_ = new remoting.HostInstaller(); + + /** @private */ + this.termsOfServiceAccepted_ = false; +}; + +/** + * Starts downloading host components and shows installation prompt. + * + * @param {function():void} onDone Callback called when user clicks Ok, + * presumably after installing the host. The handler must verify that the host + * has been installed and call tryAgain() otherwise. + * @param {function(!remoting.Error):void} onError Callback called when user + * clicks Cancel button or there is some other unexpected error. + * @return {void} + */ +remoting.HostInstallDialog.prototype.show = function(onDone, onError) { + console.assert(this.handlers_ == null, 'Event handlers already exist.'); + this.handlers_ = new base.Disposables( + new base.DomEventHook(this.acceptTosButton_, + 'click', + this.onAcceptClicked_.bind(this), + false), + new base.DomEventHook(this.rejectTosButton_, + 'click', + this.onCancelClicked_.bind(this), + false)); + + this.onDoneHandler_ = onDone; + this.onErrorHandler_ = onError; + + var url = 'http://www.google.com/accounts/TOS?hl=' + l10n.getLocale(); + var substitutions = [ + '', + '' + ]; + l10n.localizeElementFromTag(this.tosMessage_, + 'HOST_SETUP_TERMS_OF_SERVICE', + substitutions, + true); + + remoting.setMode(remoting.AppMode.HOST_INSTALL_TOS); +}; + +/** + * In manual host installation, onDone handler must call this method if it + * detects that the host components are still unavailable. The same onDone + * and onError callbacks will be used when user clicks Ok or Cancel. + */ +remoting.HostInstallDialog.prototype.tryAgain = function() { + console.assert(this.handlers_ == null, 'Event handlers already exist.'); + this.handlers_ = new base.Disposables( + new base.DomEventHook(this.retryInstallButton_, + 'click', + this.onRetryClicked_.bind(this), + false)); + + remoting.setMode(remoting.AppMode.HOST_INSTALL_PENDING); +}; + +/** @private */ +remoting.HostInstallDialog.prototype.onAcceptClicked_ = function() { + console.assert(this.handlers_ != null, 'No event handlers registered.'); + base.dispose(this.handlers_); + this.handlers_ = new base.Disposables( + new base.DomEventHook(this.continueInstallButton_, + 'click', + this.onOkClicked_.bind(this), + false), + new base.DomEventHook(this.cancelInstallButton_, + 'click', + this.onCancelClicked_.bind(this), + false)); + + /** @type {remoting.HostInstaller} */ + var hostInstaller = new remoting.HostInstaller(); + + /** @type {remoting.HostInstallDialog} */ + var that = this; + + this.hostInstaller_.downloadAndWaitForInstall().then(function() { + that.continueInstallButton_.click(); + that.hostInstaller_.cancel(); + }, function(){ + that.onErrorHandler_(new remoting.Error(remoting.Error.Tag.CANCELLED)); + that.hostInstaller_.cancel(); + }); + + remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); +}; + +/** @private */ +remoting.HostInstallDialog.prototype.onOkClicked_ = function() { + console.assert(this.handlers_ != null, 'No event handlers registered.'); + base.dispose(this.handlers_); + this.handlers_ = null; + + this.onDoneHandler_(); +}; + +/** @private */ +remoting.HostInstallDialog.prototype.onCancelClicked_ = function() { + console.assert(this.handlers_ != null, 'No event handlers registered.'); + base.dispose(this.handlers_); + this.handlers_ = null; + this.hostInstaller_.cancel(); + this.onErrorHandler_(new remoting.Error(remoting.Error.Tag.CANCELLED)); +}; + +/** @private */ +remoting.HostInstallDialog.prototype.onRetryClicked_ = function() { + console.assert(this.handlers_ != null, 'No event handlers registered.'); + base.dispose(this.handlers_); + this.handlers_ = new base.Disposables( + new base.DomEventHook(this.continueInstallButton_, + 'click', + this.onOkClicked_.bind(this), + false), + new base.DomEventHook(this.cancelInstallButton_, + 'click', + this.onCancelClicked_.bind(this), + false)); + + remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); +}; diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_installer.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_installer.js new file mode 100644 index 000000000000..6386fe73b5e4 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_installer.js @@ -0,0 +1,175 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * + * HostInstaller allows the caller to download the host binary and monitor the + * install progress of the host by pinging the host periodically via native + * messaging. + * + * To download the host and wait for install: + * var hostInstaller = new remoting.HostInstaller(); + * hostInstaller.downloadAndWaitForInstall().then(function() { + * // Install has completed. + * }, function(){ + * // Download has failed. + * }) + * + * To stop listening to the install progress: + * hostInstaller.cancel(); + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +(function() { + +/** + * @constructor + */ +remoting.HostInstaller = function() { + /** @private {Promise} */ + this.downloadAndWaitForInstallPromise_ = null; + + /** @private {?number} */ + this.checkInstallIntervalId_ = null; +}; + +/** + * @return {Promise} The promise will resolve to a boolean value indicating + * whether the host is installed or not. + */ +remoting.HostInstaller.isInstalled = function() { + // Always do a fresh check as we don't get notified when the host is + // uninstalled. + + return new Promise( + /** @param {function(*=):void} resolve */ + function(resolve) { + // TODO(kelvinp): Use different native messaging ports for the Me2me + // host vs It2MeHost. + /** @type {Port} */ + var port = + chrome.runtime.connectNative('com.google.chrome.remote_assistance'); + + function onMessage() { + port.onDisconnect.removeListener(onDisconnected); + port.onMessage.removeListener(onMessage); + port.disconnect(); + resolve(true); + } + + function onDisconnected() { + port.onDisconnect.removeListener(onDisconnected); + port.onMessage.removeListener(onMessage); + resolve(false); + } + + port.onDisconnect.addListener(onDisconnected); + port.onMessage.addListener(onMessage); + port.postMessage({type: 'hello'}); + }); +}; + +/** @type {Object} */ +var HOST_DOWNLOAD_URLS = { + 'Win32': 'http://dl.google.com/dl/edgedl/chrome-remote-desktop/' + + 'chromeremotedesktophost.msi', + 'Win64': 'http://dl.google.com/dl/edgedl/chrome-remote-desktop/' + + 'chromeremotedesktophost.msi', + 'MacIntel': 'https://dl.google.com/chrome-remote-desktop/' + + 'chromeremotedesktop.dmg', + 'Linux x86_64': 'https://dl.google.com/linux/direct/' + + 'chrome-remote-desktop_current_amd64.deb', + 'Linux i386': 'https://dl.google.com/linux/direct/' + + 'chrome-remote-desktop_current_i386.deb', + 'Linux i686': 'https://dl.google.com/linux/direct/' + + 'chrome-remote-desktop_current_i386.deb' +}; + +/** + * Returns true if the host is installable on the current platform. + * @returns {boolean} + */ +remoting.HostInstaller.canInstall = function() { + return !!HOST_DOWNLOAD_URLS[navigator.platform]; +}; + +/** + * @throws {Error} Throws if there is no matching host binary for the current + * platform. + */ +remoting.HostInstaller.prototype.download = function() { + var hostPackageUrl = HOST_DOWNLOAD_URLS[navigator.platform]; + if (hostPackageUrl === undefined) { + console.error("Tried to install host on " + navigator.platform); + throw new Error(remoting.Error.unexpected()); + } + + // Start downloading the package. + if (base.isAppsV2()) { + // TODO(jamiewalch): Use chrome.downloads when it is available to + // apps v2 (http://crbug.com/174046) + window.open(hostPackageUrl); + } else { + window.location = hostPackageUrl; + } +}; + +/** @return {Promise} */ +remoting.HostInstaller.prototype.downloadAndWaitForInstall = function() { + /** @type {remoting.HostInstaller} */ + var that = this; + /** + * @type {number} + * @const + */ + var CHECK_INSTALL_INTERVAL_IN_MILLISECONDS = 1000; + + return remoting.HostInstaller.isInstalled().then( + /** @param {boolean} installed */ + function(installed){ + if (installed) { + return Promise.resolve(true); + } + + if (that.downloadAndWaitForInstallPromise_ === null) { + that.downloadAndWaitForInstallPromise_ = new Promise( + /** @param {Function} resolve */ + function(resolve){ + that.download(); + that.checkInstallIntervalId_ = window.setInterval(function() { + remoting.HostInstaller.isInstalled().then( + /** @param {boolean} installed */ + function(installed) { + if (installed) { + that.cancel(); + resolve(); + } + }); + }, CHECK_INSTALL_INTERVAL_IN_MILLISECONDS); + }); + } + return that.downloadAndWaitForInstallPromise_; + }); +}; + +/** + * Stops waiting for the host to be installed. + * For example + * var promise = hostInstaller.downloadAndWaitForInstall(); + * hostInstaller.cancel(); // This will prevent |promise| from fulfilling. + */ +remoting.HostInstaller.prototype.cancel = function() { + if (this.checkInstallIntervalId_ !== null) { + window.clearInterval(this.checkInstallIntervalId_); + this.checkInstallIntervalId_ = null; + } + this.downloadAndWaitForInstallPromise_ = null; +}; + +})(); diff --git a/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_list.js b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_list.js new file mode 100644 index 000000000000..e9e878dc3e27 --- /dev/null +++ b/test/.chrome/Default/Extensions/gbchcmhmhahfdphkhkmpfmihenigjmpp/51.0.2704.53_0/host_list.js @@ -0,0 +1,483 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * Class representing the host-list portion of the home screen UI. + */ + +'use strict'; + +/** @suppress {duplicate} */ +var remoting = remoting || {}; + +/** + * Create a host list consisting of the specified HTML elements, which should + * have a common parent that contains only host-list UI as it will be hidden + * if the host-list is empty. + * + * @constructor + * @param {Element} table The HTML
to contain host-list. + * @param {Element} noHosts The HTML
containing the "no hosts" message. + * @param {Element} errorMsg The HTML
to display error messages. + * @param {Element} errorButton The HTML